From 45aa5781ce611ea411e34e3b18358a9fe15f67ce Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 9 Jun 2022 22:25:23 +0200 Subject: [PATCH 001/646] Change brand color and logotypes (#18592) - Add rake task for generating Apple/Android icons and favicons from SVG - Add rake task for generating PNG icons and logos for e-mails from SVG - Remove obsolete Microsoft icons and configuration - Remove PWA shortcut icons --- .rubocop.yml | 3 + README.md | 9 +- app/helpers/accounts_helper.rb | 16 +--- app/helpers/application_helper.rb | 11 +-- app/helpers/branding_helper.rb | 37 +++++++++ .../icons/android-chrome-144x144.png | Bin 0 -> 6644 bytes .../icons/android-chrome-192x192.png | Bin 0 -> 10138 bytes .../icons/android-chrome-256x256.png | Bin 0 -> 14194 bytes app/javascript/icons/android-chrome-36x36.png | Bin 0 -> 1050 bytes .../icons/android-chrome-384x384.png | Bin 0 -> 25667 bytes app/javascript/icons/android-chrome-48x48.png | Bin 0 -> 1468 bytes .../icons/android-chrome-512x512.png | Bin 0 -> 39853 bytes app/javascript/icons/android-chrome-72x72.png | Bin 0 -> 2501 bytes app/javascript/icons/android-chrome-96x96.png | Bin 0 -> 3713 bytes .../icons/apple-touch-icon-1024x1024.png | Bin 0 -> 104580 bytes .../icons/apple-touch-icon-114x114.png | Bin 0 -> 4641 bytes .../icons/apple-touch-icon-120x120.png | Bin 0 -> 4914 bytes .../icons/apple-touch-icon-144x144.png | Bin 0 -> 6644 bytes .../icons/apple-touch-icon-152x152.png | Bin 0 -> 7002 bytes .../icons/apple-touch-icon-167x167.png | Bin 0 -> 8096 bytes .../icons/apple-touch-icon-180x180.png | Bin 0 -> 8947 bytes .../icons/apple-touch-icon-57x57.png | Bin 0 -> 1857 bytes .../icons/apple-touch-icon-60x60.png | Bin 0 -> 1952 bytes .../icons/apple-touch-icon-72x72.png | Bin 0 -> 2501 bytes .../icons/apple-touch-icon-76x76.png | Bin 0 -> 2617 bytes app/javascript/icons/favicon-16x16.png | Bin 0 -> 650 bytes app/javascript/icons/favicon-32x32.png | Bin 0 -> 1248 bytes app/javascript/icons/favicon-48x48.png | Bin 0 -> 1798 bytes app/javascript/images/app-icon.svg | 28 +++++++ app/javascript/images/icon_cached.svg | 2 - app/javascript/images/icon_done.svg | 4 - app/javascript/images/icon_email.svg | 4 - app/javascript/images/icon_file_download.svg | 4 - app/javascript/images/icon_flag.svg | 4 - app/javascript/images/icon_grade.svg | 4 - app/javascript/images/icon_lock_open.svg | 4 - app/javascript/images/icon_person_add.svg | 4 - app/javascript/images/icon_reply.svg | 4 - app/javascript/images/icons/icon_cached.svg | 1 + app/javascript/images/icons/icon_done.svg | 1 + app/javascript/images/icons/icon_email.svg | 1 + .../images/icons/icon_file_download.svg | 1 + app/javascript/images/icons/icon_flag.svg | 1 + app/javascript/images/icons/icon_grade.svg | 1 + .../images/icons/icon_lock_open.svg | 1 + .../images/icons/icon_person_add.svg | 1 + app/javascript/images/icons/icon_reply.svg | 1 + app/javascript/images/logo-symbol-icon.svg | 2 + .../images/logo-symbol-wordmark.svg | 11 +++ app/javascript/images/logo.svg | 11 ++- app/javascript/images/logo_full.svg | 1 - app/javascript/images/logo_transparent.svg | 1 - .../images/logo_transparent_white.svg | 1 - app/javascript/images/mailer/icon_cached.png | Bin 423 -> 2014 bytes app/javascript/images/mailer/icon_done.png | Bin 253 -> 817 bytes app/javascript/images/mailer/icon_email.png | Bin 387 -> 2120 bytes .../images/mailer/icon_file_download.png | Bin 225 -> 813 bytes app/javascript/images/mailer/icon_flag.png | Bin 0 -> 693 bytes app/javascript/images/mailer/icon_grade.png | Bin 412 -> 3243 bytes .../images/mailer/icon_lock_open.png | Bin 387 -> 2498 bytes .../images/mailer/icon_person_add.png | Bin 376 -> 2356 bytes app/javascript/images/mailer/icon_reply.png | Bin 319 -> 2146 bytes app/javascript/images/mailer/icon_warning.png | Bin 371 -> 0 bytes app/javascript/images/mailer/logo.png | Bin 0 -> 1745 bytes app/javascript/images/mailer/logo_full.png | Bin 2371 -> 0 bytes .../images/mailer/logo_transparent.png | Bin 506 -> 0 bytes app/javascript/images/mailer/wordmark.png | Bin 0 -> 8942 bytes app/javascript/images/preview.jpg | Bin 292252 -> 0 bytes app/javascript/images/preview.png | Bin 0 -> 514463 bytes app/javascript/packs/mailer.js | 2 + app/javascript/styles/application.scss | 1 + app/javascript/styles/mastodon/about.scss | 2 +- app/javascript/styles/mastodon/branding.scss | 3 + .../styles/mastodon/components.scss | 1 - .../styles/mastodon/containers.scss | 5 +- app/javascript/styles/mastodon/footer.scss | 8 +- app/javascript/styles/mastodon/variables.scss | 2 +- app/serializers/manifest_serializer.rb | 57 +++++-------- app/serializers/rest/instance_serializer.rb | 2 +- app/views/about/more.html.haml | 2 +- app/views/about/show.html.haml | 4 +- app/views/accounts/show.rss.ruby | 1 - .../custom_emojis/_custom_emoji.html.haml | 2 +- app/views/application/_sidebar.html.haml | 2 +- app/views/layouts/admin.html.haml | 4 +- app/views/layouts/application.html.haml | 21 +++-- app/views/layouts/auth.html.haml | 2 +- app/views/layouts/embedded.html.haml | 2 +- app/views/layouts/mailer.html.haml | 4 +- app/views/layouts/public.html.haml | 4 +- app/views/shared/_og.html.haml | 2 +- app/views/tags/show.rss.ruby | 1 - app/views/user_mailer/warning.html.haml | 2 +- config/locales/en.yml | 2 +- lib/assets/wordmark.dark.css | 1 + lib/assets/wordmark.dark.png | Bin 0 -> 8942 bytes lib/assets/wordmark.light.css | 1 + lib/assets/wordmark.light.png | Bin 0 -> 8576 bytes lib/tasks/branding.rake | 78 ++++++++++++++++++ public/android-chrome-192x192.png | Bin 13534 -> 0 bytes public/apple-touch-icon.png | Bin 4880 -> 0 bytes public/badge.png | Bin 3342 -> 4248 bytes public/browserconfig.xml | 9 -- public/favicon-dev.ico | Bin 9086 -> 0 bytes public/favicon.ico | Bin 9086 -> 15086 bytes public/mask-icon.svg | 1 - public/mstile-150x150.png | Bin 4523 -> 0 bytes public/shortcuts/direct.png | Bin 3045 -> 0 bytes public/shortcuts/new-status.png | Bin 3031 -> 0 bytes public/shortcuts/notifications.png | Bin 3067 -> 0 bytes public/shortcuts/profile.png | Bin 4190 -> 0 bytes spec/helpers/application_helper_spec.rb | 7 -- 112 files changed, 257 insertions(+), 152 deletions(-) create mode 100644 app/helpers/branding_helper.rb create mode 100644 app/javascript/icons/android-chrome-144x144.png create mode 100644 app/javascript/icons/android-chrome-192x192.png create mode 100644 app/javascript/icons/android-chrome-256x256.png create mode 100644 app/javascript/icons/android-chrome-36x36.png create mode 100644 app/javascript/icons/android-chrome-384x384.png create mode 100644 app/javascript/icons/android-chrome-48x48.png create mode 100644 app/javascript/icons/android-chrome-512x512.png create mode 100644 app/javascript/icons/android-chrome-72x72.png create mode 100644 app/javascript/icons/android-chrome-96x96.png create mode 100644 app/javascript/icons/apple-touch-icon-1024x1024.png create mode 100644 app/javascript/icons/apple-touch-icon-114x114.png create mode 100644 app/javascript/icons/apple-touch-icon-120x120.png create mode 100644 app/javascript/icons/apple-touch-icon-144x144.png create mode 100644 app/javascript/icons/apple-touch-icon-152x152.png create mode 100644 app/javascript/icons/apple-touch-icon-167x167.png create mode 100644 app/javascript/icons/apple-touch-icon-180x180.png create mode 100644 app/javascript/icons/apple-touch-icon-57x57.png create mode 100644 app/javascript/icons/apple-touch-icon-60x60.png create mode 100644 app/javascript/icons/apple-touch-icon-72x72.png create mode 100644 app/javascript/icons/apple-touch-icon-76x76.png create mode 100644 app/javascript/icons/favicon-16x16.png create mode 100644 app/javascript/icons/favicon-32x32.png create mode 100644 app/javascript/icons/favicon-48x48.png create mode 100644 app/javascript/images/app-icon.svg delete mode 100644 app/javascript/images/icon_cached.svg delete mode 100644 app/javascript/images/icon_done.svg delete mode 100644 app/javascript/images/icon_email.svg delete mode 100644 app/javascript/images/icon_file_download.svg delete mode 100644 app/javascript/images/icon_flag.svg delete mode 100644 app/javascript/images/icon_grade.svg delete mode 100644 app/javascript/images/icon_lock_open.svg delete mode 100644 app/javascript/images/icon_person_add.svg delete mode 100644 app/javascript/images/icon_reply.svg create mode 100644 app/javascript/images/icons/icon_cached.svg create mode 100644 app/javascript/images/icons/icon_done.svg create mode 100644 app/javascript/images/icons/icon_email.svg create mode 100644 app/javascript/images/icons/icon_file_download.svg create mode 100644 app/javascript/images/icons/icon_flag.svg create mode 100644 app/javascript/images/icons/icon_grade.svg create mode 100644 app/javascript/images/icons/icon_lock_open.svg create mode 100644 app/javascript/images/icons/icon_person_add.svg create mode 100644 app/javascript/images/icons/icon_reply.svg create mode 100644 app/javascript/images/logo-symbol-icon.svg create mode 100644 app/javascript/images/logo-symbol-wordmark.svg delete mode 100644 app/javascript/images/logo_full.svg delete mode 100644 app/javascript/images/logo_transparent.svg delete mode 100644 app/javascript/images/logo_transparent_white.svg create mode 100644 app/javascript/images/mailer/icon_flag.png delete mode 100644 app/javascript/images/mailer/icon_warning.png create mode 100644 app/javascript/images/mailer/logo.png delete mode 100644 app/javascript/images/mailer/logo_full.png delete mode 100644 app/javascript/images/mailer/logo_transparent.png create mode 100644 app/javascript/images/mailer/wordmark.png delete mode 100644 app/javascript/images/preview.jpg create mode 100644 app/javascript/images/preview.png create mode 100644 app/javascript/styles/mastodon/branding.scss create mode 100644 lib/assets/wordmark.dark.css create mode 100644 lib/assets/wordmark.dark.png create mode 100644 lib/assets/wordmark.light.css create mode 100644 lib/assets/wordmark.light.png create mode 100644 lib/tasks/branding.rake delete mode 100644 public/android-chrome-192x192.png delete mode 100644 public/apple-touch-icon.png delete mode 100644 public/browserconfig.xml delete mode 100644 public/favicon-dev.ico delete mode 100644 public/mask-icon.svg delete mode 100644 public/mstile-150x150.png delete mode 100644 public/shortcuts/direct.png delete mode 100644 public/shortcuts/new-status.png delete mode 100644 public/shortcuts/notifications.png delete mode 100644 public/shortcuts/profile.png diff --git a/.rubocop.yml b/.rubocop.yml index a7693742645..9e3ff21f25e 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -281,6 +281,9 @@ Style/RedundantRegexpEscape: Style/RedundantReturn: Enabled: true +Style/RedundantBegin: + Enabled: false + Style/RegexpLiteral: Enabled: false diff --git a/README.md b/README.md index 4b48e071d8f..eade19ef8ac 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ -![Mastodon](https://i.imgur.com/NhZc40l.png) -======== +

+ + + Mastodon +

[![GitHub release](https://img.shields.io/github/release/mastodon/mastodon.svg)][releases] [![Build Status](https://img.shields.io/circleci/project/github/mastodon/mastodon.svg)][circleci] @@ -35,7 +38,7 @@ Click below to **learn more** in a video: ## Features - + ### No vendor lock-in: Fully interoperable with any conforming platform diff --git a/app/helpers/accounts_helper.rb b/app/helpers/accounts_helper.rb index 557f60f26f6..d37634964b0 100644 --- a/app/helpers/accounts_helper.rb +++ b/app/helpers/accounts_helper.rb @@ -23,20 +23,20 @@ module AccountsHelper if user_signed_in? if account.id == current_user.account_id link_to settings_profile_url, class: 'button logo-button' do - safe_join([svg_logo, t('settings.edit_profile')]) + safe_join([logo_as_symbol, t('settings.edit_profile')]) end elsif current_account.following?(account) || current_account.requested?(account) link_to account_unfollow_path(account), class: 'button logo-button button--destructive', data: { method: :post } do - safe_join([svg_logo, t('accounts.unfollow')]) + safe_join([logo_as_symbol, t('accounts.unfollow')]) end elsif !(account.memorial? || account.moved?) link_to account_follow_path(account), class: "button logo-button#{account.blocking?(current_account) ? ' disabled' : ''}", data: { method: :post } do - safe_join([svg_logo, t('accounts.follow')]) + safe_join([logo_as_symbol, t('accounts.follow')]) end end elsif !(account.memorial? || account.moved?) link_to account_remote_follow_path(account), class: 'button logo-button modal-button', target: '_new' do - safe_join([svg_logo, t('accounts.follow')]) + safe_join([logo_as_symbol, t('accounts.follow')]) end end end @@ -99,12 +99,4 @@ module AccountsHelper [prepend_str, account.note].join(' · ') end - - def svg_logo - content_tag(:svg, tag(:use, 'xlink:href' => '#mastodon-svg-logo'), 'viewBox' => '0 0 216.4144 232.00976') - end - - def svg_logo_full - content_tag(:svg, tag(:use, 'xlink:href' => '#mastodon-svg-logo-full'), 'viewBox' => '0 0 713.35878 175.8678') - end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 705cc2e3fe1..db33292c1a7 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -99,11 +99,6 @@ module ApplicationHelper end end - def favicon_path - env_suffix = Rails.env.production? ? '' : '-dev' - "/favicon#{env_suffix}.ico" - end - def title Rails.env.production? ? site_title : "#{site_title} (Dev)" end @@ -147,8 +142,8 @@ module ApplicationHelper end end - def custom_emoji_tag(custom_emoji, animate = true) - if animate + def custom_emoji_tag(custom_emoji) + if prefers_autoplay? image_tag(custom_emoji.image.url, class: 'emojione', alt: ":#{custom_emoji.shortcode}:") else image_tag(custom_emoji.image.url(:static), class: 'emojione custom-emoji', alt: ":#{custom_emoji.shortcode}", 'data-original' => full_asset_url(custom_emoji.image.url), 'data-static' => full_asset_url(custom_emoji.image.url(:static))) @@ -198,7 +193,7 @@ module ApplicationHelper def quote_wrap(text, line_width: 80, break_sequence: "\n") text = word_wrap(text, line_width: line_width - 2, break_sequence: break_sequence) - text.split("\n").map { |line| '> ' + line }.join("\n") + text.split("\n").map { |line| "> #{line}" }.join("\n") end def render_initial_state diff --git a/app/helpers/branding_helper.rb b/app/helpers/branding_helper.rb new file mode 100644 index 00000000000..c91661e5612 --- /dev/null +++ b/app/helpers/branding_helper.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +module BrandingHelper + def logo_as_symbol(version = :icon) + case version + when :icon + _logo_as_symbol_icon + when :wordmark + _logo_as_symbol_wordmark + end + end + + def _logo_as_symbol_wordmark + content_tag(:svg, tag(:use, href: '#logo-symbol-wordmark'), viewBox: '0 0 261 66', class: 'logo logo--wordmark') + end + + def _logo_as_symbol_icon + content_tag(:svg, tag(:use, href: '#logo-symbol-icon'), viewBox: '0 0 79 75', class: 'logo logo--icon') + end + + def render_logo + image_pack_tag('logo.svg', alt: 'Mastodon', class: 'logo logo--icon') + end + + def render_symbol(version = :icon) + path = begin + case version + when :icon + 'logo-symbol-icon.svg' + when :wordmark + 'logo-symbol-wordmark.svg' + end + end + + render(file: Rails.root.join('app', 'javascript', 'images', path)).html_safe # rubocop:disable Rails/OutputSafety + end +end diff --git a/app/javascript/icons/android-chrome-144x144.png b/app/javascript/icons/android-chrome-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..d282a6d3d63432a3198d0ecbe882ba32915b8fe5 GIT binary patch literal 6644 zcmb7J^-~m%(>^*Rq#NmOknTP}TDs$C5a~WTq&uWTknRTQ?mQZ41&(gG*Uvxjoq1>T znc3O>ad+p5R##QPL?=ZD005XkMOn>%G4Ve`h5zSm={%tS0ZeNC5yy zDuA+5+TP#K0vr;JMm)Ceb9;E70fbb9h?0p^eeY?$;hIu0Yw=V^;tg4AejU|Ir(mIn zSU_OpjMfKg+Q846z|SnbzkjA0S&KxcrLsZNt>zk-HDZYMd6+f$fY)$vC5qs|94fG} zS^bR9#@khKCv=kIj=OQS^H<4XWyK~Ww|z6<`9>(fB!DC6x;0GP7saz3WmduK7_Vw% zmQgREP_2$qCf`gfLcGrxBOv6K_zCeZ_YK;z<^L?Ol9T{Llt-U#{;=Q3StL-0KCvzT zgZuwrT0EtU>B%wojnKaVNB=b+_}5tEA87rTzk9Bx$@b3? zA-`O59t){4Fxl4>>vKh*kJHQ)ffFCZCs#}s!lPNEy!~%hY&h?UsiJq{9o)AAx{gdt znoFHLIcNqnnaWa6a_8?h9{F=^CqssPY7m|;PZM0tf;fx==X|q-RB(gO)-T>+?`+)* zzdNNPxR#dLK`{JUHjkMIE_l>Z0+g(^JC|N2+7{RIZn-j^x8d2Sc8?N*b&HbbFXt=$%-g}+fIOeP^?Jc8C(>a+`4+$@pe#g5Qh^P*XpI_*c zT_ft|SwPR6>;;u2HJMZ<9B@V4N{Yb+hujt7cgk7%*XwHgiyiZh0cluL7uf!bl>S^Y zv$VwJgo;SX8heWVNB{%Hh|)f!)`9aQ9v(uPTq+!liR=m>yov8cpQC-l<&9RLm|aVJ zL?hKhC)5>N{MeQbiDkZuieR47GwElmvn{m4OnulK4IT+QOX@dcVD;BK$Gv9Vm4un) ziAPq{z;%AV{gfmFI>SZuZEF4Z&~d;*B6zeKglLYDNJ9BoLPiYUS+O}VRF4=B@By~N z^}dmikz#2{;__v4zXm`)%^%E`_4UU#EgQ!=dtggAUbLqUJU1{l`eUUaVn23!S>DI# zi!>W3Jrk(>^lbXhEJ-%y4vS=2Z|&ScI_?kDBN*QtC`v!*cDtL4{3(UoQZ8pywZa}# z!F=XNAN2YoTM)`PU8!+2TPNST=F$0ZzJ6LJR^t|vFIw^Xd_^01UEi3Qr;~1O6_&$q zIWu)0FXHrfnLy`D-S~TdYk6B4ay75b z&8qHS&fa6r?_%*h3RXsr)hQp2m;<$fgS zW2fEB*H1}~KeFIVytiM^FI`qQ92c1<@JOAZ6tJ?AG6Hf0@cknrCCO^XRMCxs!Xoa) zpsB#y(TByYRj(?3w_w0j2p3Brat%nM)^ar8c1*%gk+>gp>beZ@!r8 z!;RcoU3Y~RBSW4KOMaVrzzoHq)+?Za2Z#`1lV_h;}}9yshLL#;rj$RV_$x zSApK4&o;0wdwGM!2AvX}^V?F`=EHD4WnNA@Akn=9FVx*nDfc~WY(N$hM*AANab`V*G#LJlY81_FU%C3xMYCntpr zKp=Sq(m1NEhp|hE2N$>Ye8%&htAnQm*ddc$SW@9fg`-I!UYo;7q2YUZ;eJKGlPt@8 zST~78Zv_&nFKux?a;KNpmNKO}Uzf6XS}FZcz)OuWArxIB)RdC5d-dVYazrxIx}@0J zodA^8{&Rw*3Eenc$5nsGXvv81M-GWOCv3Bxk+QZ`;C9eb!JLi)A-Bq&gO_M+?3l-3 z$Y{t2q*Lk^d}ii<(2l3(-&p@Uj)sKJu(g;+JzNxV)^zQKJ-Q(k3%M2ysLfqzw*uM8 zNpb65n?6Y+fVnN37RjgP4dN$+ZD&&Hvby%8H~ii|Oz%AgKv!Cv%9k#eI0Zf-3(rrs zQ(+XFC*g-4M`7#4W88?(P-{N6_RO{2+iZMXVXFvDjD12mutoU%(E&_nntp4Vt!TwX z?KTSSYGI#jK6O&`y;GQ47*R!r$Q{8W%zfA2DVbz@$r2p4K5U>mu#E@d*{Hoih>ie( zM>%nOk*ZYZI`M~Wiqb>}EV)P|K;^TNS|l{#k9T+X`HnS?2F%&4GBON4qj(|yBzT4m z*SaB1xArpVuGNTdJ7e;TsKon)B#lkRgM{+6p0u=%eD2OhybDvu88=~leqi6X6TIz! zdrY;!N*tdF9s_yO6Gbd6P_b^K!NFwg@bvhR_|HdtIqVPco47-VylP7y-qM0w_!8xu zamR3kx!wyPJT%}xH(=O|p>Q{vFPP0Y>m)`dPv>1mnuy6wz}L=ZWzk{`f4P1AP#(As z*Xm^GIQOo$cg_E${wZnT<1bX3rYs*p#gJSHx2I-=P(SEcIxg0krmJm~v?_6VGRAS~?Xt2Yt0Zfj zV@%#WmJaf^X!*_$%lBGHE^t(o{^d`U(wWFo zD_o?WbA!a%%tMFj;Q$K!9SP$5HJw{;57-WNM{&}hA6LFemWQd@RA-> zO{c*GRS%yBwBbYaP;*uz;!YycOZ5vb3qw7?8gm8F7}S`+mGj@6fsRxLNKzhLh)&{_ z7g`Bej^q{KFdVu`GkLdyVEjyLh|A0JY(yOL@H;J9#4jsbAEmjQKOG^b_a3mIg z3=Rh-TyWp6*nanYPi#B;)MMqSd7Ay-poyR4VeW6_cF1~}?hG^E!TGO}9|dvPWNnHj zj6ihUU47>;vv59|I&H#x_M?8J*3GQ5u4(DYW%=sWkliD3J*k)=0&~h=ww`a~1qAy- znrz5py;`{AbGRo`QYPw$s4OQp6Q1nNITU ziOdM~A(Fje2$2Q}4FQ1^VtX`ml&Tpc?fy~Kxcs2~d$BN3=l%X?lV9cd?A#SmNiO{` z;mhiee|#2e``K`D5jhV+L*?*U^iZW|XA9mRj`GAh{%)^Nb?@`8-+`0xZEgb7zZ;uR)xX;qi08~weaF-1W4BctccWC9eeDxE|rTOq~B z8IsVSThK$yaYf;PK8-1N-%g^OwQvYq@WQKzwhyziZBo$Zu;2$=X-(M@-#e!ImkKAg zdwPN9?6et*Y9xVqG|7eAMVcr|C}2^}+yNyO9MlT)sd&_u)g`%_!g-L1l@9v@D9M(- zuabQq$E&X7p1uD#e1fee-ByY)Lt(_yfp5a1SzsM$Tqqc#L@L$TbG5S0;W#$GnEZpT zci;H~1*X}gL2@Lj+I$Ew(^Ct-#MtUQE#gdUlE}`b!w8MGo;*_iUKk9xfCSCuZ3crKG8s3Gaek17#z#2Oj=_4YNRG|$RAA8*j~ES zpY8z3;^l+z%w9eb<1(e>cfqAapLP}k*MJ?Cv-U#;HIme_h(ERHyCKK+la*5XN(z_u z{2lhN-xQsO5SobCGc)2}GCmfIY0X`~N`aAxR7&hPg#>)h@_QD3K5-hpCKkmaA=PLx z6wHFi5cy}-KK`O+hqQ?W(HUjlOuTU&VeMKEJT{k^uk3fV{1hcQ6Jt9eca(ZYa;F7e z+jll7_5p5E@5DyUr$7)fw#bGBVWI*^Ttu^QYI9`iZB^FTwTYpK>XdPvN1?Kv=jHUu zl9Fl1{q*5Qo*Zp2kU?55gf0Ir&1@pczR z2Y4p*=Mp2>g+Ggxej`NtS_us}_$$c0g|SI$aPrF`zTvd)y(aeBXQvugEsSe+>gulW z=9<_+mVNUFHG@;ujxu+&ZcBeQms{%8LG#j8b9+BVGf#$1|LCX}d>;E>nd$`76Lem3 zSqN0Blrwm4oNS=F2&V7>>0=&mGiDXFLkf9E-Ln%WEC{u;aWz=)ftZ5g)~MsY^qCV^ zGro5zij{94>v7q+BZA2W8$t6u5uogc@E73@XJ?|eft6UR+e zN`leMbhf_s5KEnF{D!tXNLdyEYgchFN54F4)wS}eSP6P}0FQ*L;|7~$GCPw^T&fQ- z%~;yW7{PN?%3UYSvuSP>K3qm;H*X%jpmi%}=L`wJEYPFL_KY(KTUe3?M(Y9`K!5rlFDZ&ym)P1zubjT! zc{;zC^n-PmL_R#vw`+~eB$EIVL)h%2=-bQ2_v+o?a19(-;@MmX7!w+_Ce#0@!6m9jl8cz#I6pFUv-7{;{^#l z-bx5bh=}E>UgDVL;Ioa9!KK? zm6wuo@CyBszPRZJS+jy(*d_13lMA}qGEnV8xL{y$>VBPL+IevU%gxRs{RU&fiW&Y$ z+!Qw-G6fjltJ@z2<}|zSt6Q#PwL14ZRjb#Yl-k(jzilm6)=o~T#xGu1;#-FZc zVY(3KW|1O%xjL>$QCRn*j>05sjd%21f+Hg@5z$JgOB-LUsytr`wf%Sj*vB4s5qR*8dP{} z$F!(0{F286n7Ec^-_2&x`XevHlbnF~_WRo&6yisrTc4EFd5>}0?J_bkgS2UIvb~E{ zgo&@SGvo{+P<=>6A}_J1%=H3P|?SDtdpMHRcCfLJP<>8HYs1S@0qQ` zt41$s_FG>!(I}$lVNBBVrv`B|G}DL%R8;S?fy?P?&geXlyhbD*&KjN-*PJKsE2pL? zMR$VEKRAuEP;3gN@DOUU*N}SL_XIuMtUqR@-0u5e&af?Ni$x zP4=k6M>vOX^BOOhz!U#gyc)n1sJzDMfaWdkTS z2|W<+BUww|pF$$V5IZOj76$IG**Z*@QF(qhD>wcIq4kd3buS%(SR=Z)gI$9Bzl3cS z`*!*t$Ag;0vK(v8B1i+&$sb=97-4^VS6qUek1iA$6Uu>_W5h~Sew=U!p99rv0O+LauIB==;>Hx0bH9Cn0fgzL;1Yx#aYEQ!F@)P zwDta0`djKZ>%a`ZaOhxiU$jAA8Bte;u7AP6!H#!PpGHmeyO}`UecfZ+;z48KxVlUGs(g ze!bGFZZV|;)4EIsKL6d5czg5C6NuBlphu4OtMD=)UCuCz;`>I>x=&z=?gBpE&*0)| zILLbz=z$L8ICuKB3AdG))T3{nPgXo#tEq|Ix2DuWgHRCrY4t*2tthB>ySMbjV7gul zb{lUWpb$;9sD*`;XvW6|yPHif%-*AOOh0Few#!56jA{_SL!ie`QSCk- zYmLDS5LZJ07sZ{;O60#kP-_$)SPVl*+_A*6G;5HQW(rudpn=N~NI37P@3?*ncJTb% zYOJ*>`iI|Xn%|lK2m?&gHF9IsXtMBldANEq{7=_M?Eh`NEpdK`W7(+c)oSqn_ZWe?=HTq;cydwsa<=~9YV`gXl>R5&{I9U`+ z*BE2w*M0Od-N%{=>-VhT(nznUit#svgxzWpV!!pn3nGXz+`}HkN~@U>>-$5M_h9pk zecwIFY2g1Jol%xGmOlZ%c-#at1_GB)}OC--q1wZp{G2dGd!mnZ~N zODd^f9Hd1X;2Ei6u_n?bTcj!hQW@41pxpkr`IL1nZq*ZfWFAuZzVi5?l8YQsK4j}@ z-2re+&vSR1GVII@{lD|1%NT8jVDJU$qrsyc|Qtp zc>)R}zqFs$P0!6E?d6;&PlPNQ7U)+`)Q5llB4-;-QIwdrX(|!Hl_BQ^W62mg9dk4ge^pDqACM7V>`#F&JzB literal 0 HcmV?d00001 diff --git a/app/javascript/icons/android-chrome-192x192.png b/app/javascript/icons/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..d3f9959c5aea246408b324e6700c4c0647b947c2 GIT binary patch literal 10138 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 KL2INfKK&1y=3s*W literal 0 HcmV?d00001 diff --git a/app/javascript/icons/android-chrome-256x256.png b/app/javascript/icons/android-chrome-256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..98ce6ffbbbc9d4482c2ca02a3a105d13fab9dc17 GIT binary patch literal 14194 zcmd6O1yfv2(C#iQ9$*&;1Yev4m*AeoHMo0lcYY1+7Pj{G-f+Qw75jp?>z?7DPDFXn&e@!3&72#hs2^MDiS0NkA zO2PoI|2u5#xRiQ0#Cj=z`6WfM;=L&>>nyt`2m z0@#)GDF+%yJtxa9y>H)<{W)W`UG41d-aA#SnEExnH9^D8@ri)t?^W%P+~m}E-4^({ zBN1^zYUDY!$(p9c*)H~hG4Cid$v;E;As*q9y+H02`0A5Y8!t0$mrnj zn(G?#{UNx3yRL*m|FpOr0#K)+F~a^};#~G9F)cVrYGs=JBB4*lBL3F5`Y}Y>O0?eX1+f z^Pea5JYsWy^>Mnf8La~P>>)ZI3Vy5mQ*V2M=`PXGnud%VpI7N0y~z>`ucmoL0}r1m zbvKkXsF8ThEMMx~_CWmE%^vHb$S!~|(>|=*0&YoRSDkF7Gw#Oot=^aO2H^rA0)(ki z`8&~vIQ4lsO1pbO*wvEDgAp;GHz|2rv|@&X!E?3OPAcBdwSxemtCy$>AS|y!apei$ zcbT|RQ&;36Fl7(O2=vEiXWaM&_f+I<~}im`X#np-nc zf>4Yx*eAKa${1bZBTx$&1jx9GDW~CnZjtvseGX-kruZlXK#F62u)kP}JPV`m#QEL= zbrS$OY|4Az@p*4rpFG}9{T!3{5`;;LghNQw)$A8y-~qb( zojvKscqzgDiy};7OI+`j#OgZLf9qn8uK<16X>M67P{}pZw6EoI-7rX(hi;=o_}w91 zlkPGe=m2K^4$X2rS#J3l!57Qfq3x+DS zXNe{Uiiqc4!Gv{d0qRE-1IIyTXQdn0Xkk+Em{w}uH0*UG$KLj=FB)P{=q6}#Q@3$a{DwVuul@nj{0hcV$nI{HuC67Am~ z#6?u;H)dDJZ5Mai?uYr%!WyGG5s3?lreqnTw`PTv8n4y#Yl2Y4G({e6=oraTY7-J; zhoEpY!R1>oOD83btWe^X>)o~elw!MC&lkt5NWy#Bi>O<)QnIB)-M`Nc={NnTm=60L+nR4 zNSH=S7_yM}{h|6W5Z@+?Z9Djb2&0UEosXK!C6iD%ULm9=M6O;Oayr5nuqH2Tz*CtS zKc(pCvU-yAw)d{JsPkkL@+noMgaQ>XpN|_sh^nOx6X{@SZ@$}#ySEAn7GdrrAr!sg z^#4MSM5%GKmFeX?CHHLl^+)L*&7J4(DFb98IWhSp6j$`;(Wd}gowKBdx8k5Qs*x0d zVKPK8J++ZCu);&}ohQ37B}%&Vr^%N?dS^4VX8C`L3X<)X+T zBIUp9&%)DPwcIIZOZJ(*z>#YTty5B5Hcfu1vI=8F=S@ilA--Et(5WvaO^_e$ze^b! z$x@EfjzUIOVl?*P4{hLZx5QWHkqk6t?zrPxf$6=GX{%)yRe2o3_oGZ%$Whk`3Gh4g3(v zn?iq==+bo*C7cXUo$MDLn2+?|;}&Y$)!W{_l$39Dv#clUjk2@{p7!Ip(E- zw;C3?>tFv(hXcmFde!$I_<-81&w%&%_pRjg*NKLfr7#?*{>8-jwBJS8!|O|CBDv3N z&r^Pp67jm8Ev-D7rHud^Ujh=QG{)c#v%KKV*fPY_o|AsM zr@Xpk`g?GL8G4U<2K0*Gxoh_A6M*!5#r3k~D*p<<{D%QWRp!VaSRuH@^I;-3Hhoh7 zg*-(;waU9Dfw8&0sa#>QC7-v)D>b?gUN@-^nXg*gcX2AqY28;_z2r;W`rS#%tu6Aq z)H?ye$zT5IBSQ9>PzO9)X0+I0Wt4Xb~FiNJG&*JgS+N_n(5@j}5IiN8W5Io;jX zs(RbiK5pXtdyc}nE8fRZsCvzy#dr#{DPg}GnvwI6ygaF=@nm9iGEGnnS=no^@L>Kl=e-r zYzq?QMRhVk{Aa7WK$~af#VMAKLZQ$1Gsy}m#JdAw6iRUera%W^)n9eMSz^J+A~H0< zlMx0W2^Kk-nCoAC$@J+}-cRIaah;DLFL|AQEtZRn_6ImLJ3G{Oh{KV@whBQHo$iX^ zy3gtDD%Cqu42b((($ybl@ZTa~>6=8LbApaFNDI?Y#F~Tg+Is?i5WECFlru!|yZw4^ zNWiV%KQXZV@{r8n?sp!n1<~(+z_!^z4hl5aovD21TT#1n?)FJha&q0u_R1x2uce(6F>u>&%WMo1>H6bAXZUO zpSkxw;mtS4sFEsiDR)_#10ds?4d}S;(`pd^lkit3t(W!F4;;9=!#i|0feB%`@S+Y9 z2!~2%0;xEpDqJVwSuU<{5J4qC@RvwwdP=^6zrbZeoV|BhwFA+uU;D$EPhqR6+HA%E zdG>lr#!PbBr!6(a&po~fTdTOGQg=hE8h`o@kM*i(X|h%!nD*u=RaWXs#q<8NI!Jmu z;yHL&bl`yQjMmR^Ru|bPzx~VU$8FJiTReN!dnnf$-mPlHT^sGPa^8)(%kDJtq08kHsfxu;| zViMwcSU-WVhNsci8#r3qTcjZW9#Oei7I&~CNzN=Kyw-i5A zP97Mg>s={lrx(JZyqIk3gdM{EH4UmLDF3C6l)or$hUUEOA~#~`x$a;pqy`H9t{g@< zWN7wrbs(6&vqh1b5j_XB)D1Q8u*f)F&Blu*aX{(^d7J%K75S`>)#DbL`>NpdS;9PH zNG1OjDnm-pEI=-fk9BAWGDKly3`qRFZ||KyQ687mOmlsK6D4IlS=Ucg3)n;4dO z#N4|L*eKEoUCcBc?a~=**%cAaXG*f-Ae)6A%ACTAY3CxW(1IqWaC8VALI5tHdodx- zSF{l0d@t@>aYF7c?t3+LGe8llhB5`hqp^W~a<6k`@3vWntVhVMkG(^+-rqogStdqo_8^+&Kvoj=*V(e^*d>k{iQXAQ3tRV%Qi>d^4`0boa1U^df1ttPC>XOcY2N-bLO81PH}s8x+d^oH!quM%KD@YC{A zbLPr*#Uqx%ti$!gWA1Qzl{vP)o6kDwYw>GejB4A}@4s_Ms2IE`mE2w;8<#O4oW`Om z0)T_fmIM98=lM}sR@vg+@hRi7n^#d$WMRATLK`9q_WDRB!%se~$6dct0r#QQKz0Ta zNPn^|dK@Bzp0dLd+WC`*%jbM!ZKiC=^IN9zxK4Se=2h9-$w7pDx4@6X%xyTT&`;@1 z56CX~uM~j3%rbfXcWNJI>9hGNWS+B+;!(SND-P|~UeCTE%1^a}8(NC5`uzAj?r4w# z3%-5q>WM@0>?h{UBcEELi|!C2Dw%43J=lwRbvZNFpKNe}EC!Tdv_GRfH>~^tKtV=j zG0I-_TZL4D!onnt+8MkLFecrkx4N)&#j_v`@oF^$Fgml$2!P=m%L^LL%41i00~E{O z&BYYJbKio^6AzL3Rjqn}GH+s9t5R^Z5)||F`0^q&Bh7SwaG2}&*!=vhJZjC;Kj>$! zV|out4ww;L9SjlCIF9l?yhY)%)mHCl0-rw$3pfm~_me=Pimb##N1Z%!qd&SFtp5AK z9xDWuK6TN~RjbPQj*r`F6IbRDfp=doSvZrX8b|@x=r9QdjcGY({e!qX4+ek-umJ;6 zDky#H_wvha*USsmS&YZSeD-;2!^Xyocte+iue!z=#kkL%-GqzZ0%5(Z@Tv5hEC~Lg z9eH%C13c#eM<+6(|(g)X{j7?|r5O(o|xTb6Lkg)x&W+*=k?GG>Z>10A^sF|>9dwaDYql3+IEPd()XlUb#caHF+hQ~!BwqOq-AAN z`*JO>V{cj{}=37?xCr9emr?v(ja;QZdaMvA&_AQ~@C z!KYgBl|>wQ=?)Z=t7e65CV*TIs?x&&g zCUdfjX|JyA^R(1YNsQ3I{*01vuiJ+*CVcVW&_cJxv~Ez*Jp{X*`U8Hxc1XwlPr!x5 zPg*J|Dd?MG#8@lWla0JZPw}Y$BSJSvH!H0(;EWeSa>#)%`IU{P_R8muXfv}s{fx_V z@Fg&dP2*i}?81gW@rwSt1sgWv2|2bvn7k(C3+s3AD70yRCkNE`o#~_pB6ikS;b3z4 z36*O5=t^iVFadkp}lq$)T!I@QH)$W;dOAdB|w z&gKRNcRkc&z4xz=D49kzLpY>|Y0Cp}U(bF(H%xEIxPUh68Z{PaB5e|YY*##BwK=)< z>p^T(wYZLvaM@2)A1bd~N!mM|7^wle7g`BC2<1^*xMJpoL9CwQ#ke0@WUd=JOSZUyopgUoR0uAQ7a0U$~%7Gd@~P9Lev=-_d75}^fB3mEEozV zd`F$zJGV!%*t~s&c6R)of}Iogj2Lo1pC*{WKDQkvxZ$6S8+Xhv-2-MRu>epxgxR2ryc+eEEOl(_zCy$ zQsRI4h~|doT{)nj0+aD!WfnDt{a%8bnW1@0glj&N`P?Ksu#ZUd+5P%C`Kj&{8LpQU zc?Xyu|L2ESnLLJ$0D?y)9@yT_H=vqs?W3|1)nd|!dRJmStcR*tyeE4?-#@Ier9m|c za4^=w(Yj>WKaJ@+Ph7Owzr>;9Qu?v`?lX;HwEYHPW0Kq#&8dIE4OXLt`pgZ*5EALi zDs5;D<@a1N4T(egqI#qATX^V|b@F$)FY0H;$kq?pDV3_okD2f;BhI=Gf7CfN$o<3< zIDM8W8JE{FSKhfGBiVf`C`ZV-P~j zHF=51c#X^{*f-ME9^ut`%nGCX@KrCC4f)qJ-@Mm3fAN%ve0p4mj72Yn#D(K|dWNAG3XwZqVS5j&Z0^c9rZ$RcCz?d5 zLNkS-aaeiOAJTwfD^~J}(Cc&D>i`Hz0Qkt@<(HM41)t_qpdMD7X6F8-qpao!=-pT{ z_6WF_1~-iaZ0~?Hk(_k`u%5%kd;27|uJE}`#^w$@A*&Y}nCBi%R4>)`A+daz3v~gu zCrK*7f&Zgp-b}v!ualHPnsmpVvBQjvWSb}9yEB(X`9}vTIWh3acDCpH3q@v=; zI9fxCDDT~pW2zl68U9sgb)RBp8VPLr1q64I?@)6+*Poplwy+%Tp`l0nSVQSkQ}{N? zO}Lx49T$2j$KMSSyLdmntFsHqa#Ipy!0TqMy8PTT%M9w~LHVOwGLa>=OdVYgAYHd-a zTjtp2&om~n6?(!h>nh6E+iDF`ewX6fm^MW#l`ykgXvgtl#@=8oAV{OsBob!aWhJT8 zF-tz~{js?I`o~Ub=3Q1oAzvP>PKux+QPfpdz{F1^xI4mSO#ZQpRw z+N>X$`;@zx+ya;V`8t=Ij7wr7Q${_NhN!_m2Jt67e#aRl{?2arEXjbR@%h>Z)mpE%FtOVIW}>=2 z1o4?rWrU2`>vPtWLSrJf())@9u)INeV3_x1i44MB!El7Mhb z!Xu#M+l4ni^8uv=^NsyJ%3@(%dGMjK2HcLZL|4U>0UNr^6@Z^`ww(BS-u8XZcdkX% zp%dr6=frk$2VJ3(0ckw3+U2yV42it}xU)OREUPb4vPkYOKxZvwuBX)H%$(%;t2~E+ z$k0i^#3+lA4G?fJ?UY|VQ!lz(IYZm#NLRWY^NtSsR8$5wN$Q^)P*C`%z3l5CulTVH zzHLv!cYDZMrBjkNk76|1J@@Uhq%C8qilqGl(oP5Eu`OO)pMo+q_MA?X#hdNT|<8S9c2} zodn89{)U!sNEqx(JX`{*z?V^8J7%O{raH+cs8oF*7SrmJ*V0GG0Jg+)00rN9&@7g@ z!nD6crtq~C2VyXNn2=fT;t0p2)wn;|)!+1gOIb<5Ck|BG{FA1uLVZdWlyZnWNaylNaH@@4|` z!aZenLeFhv|D;$iSWh! z`qEXjTWpe>fG0jPxBT!@@bG407(fDW$*#*X7%p(`q4i8M zv*T{+mp30SYtLJ&-w9TrI*-x$kzrTNt#y(p|EDMaJlB=Ryje}(x%sY0PtPVJlqSAB z>SYtXY7O+IPLY*&Bd%}vSwtZi&7TJ@h)UNg%2r=6@& zd?YA+EFDL)LY3NDN7)(u(b8e4 zxsC&=eUVm^{c6dGOVrUE`V}(hJV`*esDe;t_esUk$#}@MLQ$W0<__dzLtyauL=)(T z)6iRCd}+nor=^%ThxRA1F?8>mq%NFB}EGcZO# zQ^@y9oEDi)g!LLdzDPZJ-!+g}w73fiz#Q$qhQdnWGNdelYvxo)6MYljHCbicNZk8;G(KOtauE4QGd^*HK zt;{9lnH`Y0sT=RDib_AcFH8u?JT#_g`TDM9&8*U&LN`GZ0vdLgKw^o?#W_wUoOm{c0sQa{&tnigQZO9j$ zYH=;t&P7EJF)t0+;y;mY+$reSCo$^D?T>TH@aYF~_|Kyx71Uu_c992ZmuHY3Y39@6 zK!x`WHH3`=jwEM_M=nvbWlvkKNinSTb1S#{m^K~}z<2F^UwFEA`j=jIrSQ#C*I*6< zon~sE!E+1&dDAVU6vkv2Tol2Kf`W4VE8m3`-*9lENU@K9Fj)-4tdFwu7VIU@zpi_J za=QJc2BR;ND9Rc6;0Qf#v>IYa!@xLDKl@(tAXh}@j)Lb{c(On212e&D|2S{Yx{kr` ztKaRJEu6d(fQ~eCC5#ABGZ0NRa3A|EC@%w8no~v5sp#Q&wK27osPirN=qj|IOo6Pz z`@jTOQOI|uOZrX8JvBlHG@2BX(*D_8>WONbHdfTwz5{&&wl#H`NZfE;VzrmY4U0zN z@oIX=A60l+^D>$KYxC5Gxz`^1U(QSy|C4Ws_^K8A%8 z97kb{2kHPby#5F?7d%T@MEghJ{v(r9T5r=QM}<5UWW|6H@imHP2zgxCReYT*gn;gE zB|bEI1*(na$8j4&C$dg1DU zNyj%?9Bw;L0EzHV>DQp=EAbg5VyEb?EsYHZxw@jRL3v(WwxgS8Mz)DoKF`&9?hak0 zyk0K#@BM}dc*MAUU2JjPjs7`)(%QT1714Zy=ccbU$EQ2jlGtDqW#Rfk;jc40ze;9$ z;yfWYn|eFX=gfB{^72jR7=d*n52Je`)Eg3Z-?X^-Mf9?E{IIp7eC| zvtA?KT^Ifg$NyAZB1+KpA#h`?hYEYBJnH27dAi(FTDWvS^NYXO$JQ7~^;@!CvrWux#oKL4fxh-CZX*aMFA5c{KySP`FGV$+-Wd{ipy)dBFfkV2Su%S+921 zIv$uuyBQVQI_47FYk;Zq!Kb7w2Qdz;rRV(aJNP4s=$t8^C)KyQ)WU)W_&Yf2o3Ip0 zf2ovUz>Ijz4T$wlspspY#BN2GRh(S1s2GA#6fh3Js7%m#U$Yq_%;|k;8&tyWrn^X4 z?e6C|`toyEA%=$W&F9UbbW1!@61b~iY31p=?aUKMpSHR_i%GWIbqE0b4v(WXm2>MG z)%nN=6rC_lK>hR~!a6L^pv6aVUD$$$J~#|;o#fM0k|3K#X4-)Q09*(8e6GEbp}-M= zZCPiwdtBP414`4#NfsZ(oDPo>4M@?7GXv`?s42yI@ZVBsrnZ1l&-u>Xm{5GILMIx+ zocG>*-vU-DF8@iOqt(pfnY(>)coCjK{54>2zI)9gK>WCGzPM*E#^nvjzw4o-Qxpe4 z?uz;hJPyu(PiF=r%j-WcP{_g`ocd9R(#S)Y6Dj|Zd{M;gxEx-a#BFfH`Fh0-aVr>` z$WfH5nV4?62wp%6?}UY5*R4@Hy*HvUD~I^GXh%~vd2fp9llf=n!KU%mU>jC|Wutt^ z_i({5y|K~P=in)gUQ8(xrN>AEpGKEWCVn7g^qj6Z4P!JK)&ZD-H!vkNm8u6uShm#* zwaYt&!#m}vM|_RLQdu3hJcH&u{O2$8lb?G)q+KKgOSR@cHC#Yum*!uGiHdzOahW9`L9Wq9cPt_Vl+a4{yYn4HY-GG3>QZU9Qb-yuwgUf zbS!^yJ@^K80HwSg3nr)c#90BlJ^E0V4BNm5kpHHC%rM}b4UwOcf_p)bkYqya>JIZ!$sqlhf1NIqPnMP5EaK8krhn1 zeLR)*TOwmHXU!cQe39y%&E2siG zL;3$p!@$Rb_nl&5HjLbTt#XUxC& zo}|((S)VK^ALvXs6OuoL>L9!8O}ifz-8;>HMy&b+Dt=|B(3h^8NRF$hTgwZ{{iTat z4CPr_mp@{sJu1+Tzr~27L57z>Lo5Ol8DUJIuHJ$9gucD{S-S&$SKoKJmRu`I9V>|W z{JwS=96x>AluKlx%_2sflW*|H|K{6@5x+Zr2ugmqACrBszfaBPU#-7ROTHoZ@n)XE zF^V$YWY+slPmFlA(ww1v%3BH&BK~r12&UVB!Sb*II>JgGuP-Y+H``X9a`iq>g}@|p z@DS<+4CGmT5GvUEmP()2GGv7xUakfgZ}WXQJ3W2VGtNbS zzLofg9LHE41VapR*OjC zgeSy2b(W8KLYWc4cMlv0rDT1?Gq9u|h^Bps`I$Z{`{t`4KwYudxwoxx=~u@bF2QYG zy&bcks5uDN*AV|sc?fF05MG2pEe+8Ej_nE#rtN!16H=|oVT^kxip_y&MeiUgT!t>9 zwf9Q>B!*F@kEj?r9(Z80e!*29L1B$ocfZEwsns~9@2UtZwH9BIsSvJ-v4iz6#8+zC zYt8+>mAEBQ{Tkw#gn!=>aL_W%C*cEz^JC-o7alNe>?RnmXice^V6QmuY~($*3eVSg zT0dgXB7?vCZv!nTu%Tl`AJr|y8)cQY*iR%{!oXT*LR0h{5rpBs#h#-r`JI?0i0l_Q z_8YONB(aed7I3BRJh#hT^uvg|~rxjG&wAUN*bwJ6qx_bWdzEKKNGd@jPm8Yp;8WFm=T>2?urM zRcW>BX+BRYZ*5j*KOnVFY*a51OAj64;^rI@yS5GT*XYCkTmYm!$YZ*2i`Fuia=Mt7k;Iz!TcXNK^{1W!=aB!bEjn!-(E*H9u!H<#>``!SkVIZy%B^`Jb`)@+e z^C}td#omyPujixA>c^#O{^>8@qCEi?W{4PSG`)WD@Q=310&(J!VhNDdTF1cDU&;_T zVvQp5yYpSfO8OjP?3bCZquHN8<{}}asaGHCp%%vdk{Cg&krz)(xG~YIuVvu?l#0WM zoJ5F>jq^9d*g5v$IczLut8QyiTjxvU9jTtU{GO8W3IP0OFd)0k^o^E%?jP6*{{x5@cRNI z*F<~Y$QiJ-{Zfn!wLOc;l5`@oh{7BKjNw%!A@X=ATSY=r$^79vF)-Z5 zDr-ZER}UjiB@ACY0Dt*ho4McXjL}L{YvmVfqstkK#T(;S=v!Ic5AV;fubt~Q{(ec# zbiS;yvn$YN9=wZ~t|BPjBslnIO)yyGG^{TxS#6hFZyx4ggSv4rm>*neE#NJJ6JCPtmoeKR%}a?a+X zD~nrH*U}+tpDRlQ8k!i&oQ3D1_n|?eIh#OV0Cq@ASsHiN; zHfK-6RO27NB2k{({&+SfA_&L#X4gU+i5_blp$^`9zf+K1Ktsb>`zMLKheAp8>^@iJE<3mB})KAN#`!TSwX>3%qt>E?3 z>rdr?q%LH00QDPl^xA`A)Kz%{n5B5|R1-vudP}okSVjSQlu2V0G1^5nZp)S?DaDYE$yR6~ekEi60Kjr{LB*}>+4YrM9 z%P)u}WtSyKty~U(pdYgs84tr)8W=s~nlASNniVq00x@s9=0nMxA900zR4Y zM4tf0h|F$2K8uNUTAoMq)9fuGv^avKod(V4_q34D;G~E>8CB)v5szVA}_QlMIm^q3eSU*qxXOa zk*j$`GlCE}ZOBV==k{CFl>TDsK%iY-#g6BmegmLtpG-%ma>3_09Tj|PlM-Zvy{Pgu-Rt^b%C-& z(e~_#lG%4j&=`iDzW$!F#}(WK8Q=%Rw*oZ1J* zm&=lQ@GcoYS1}i39CMCHT<4}!)ZfUOcxXSfAQ|A*TO1um+L*ag0#>B`R+0m`sc9`X z@gsTAA`091qC4-pJJN4#2T#yCN#u=$FRFTc%`rlfv#pv5HRBz4({cDm<&w#cCbJV} zB|B%z0-Ip?JSAHV<0~9FEXHiTPor^6v{plFGlA!IKY?2t4F7hw+Ny|1m zok~(8mO~^uLt^B=WGG^9Y13#DS*qFpUU>f{Oj&Nd`7b@{|9=2 zNEKv53ka#3{sIINtBMk-2$dob6p5D*8=#edR#1s9qP8Jw1&JNvrmk(kiQ}<7a}NtU ze%05BHxbIwSzO;aI^X@~JNKM1y)?zxDpR%$X zvKWA6!Shfm0YITZtE*yp8R@jTF&IQAupPbL)6b~)KcJ}^$)i*-C*tDkFU8zkhcM8g z=ku~>qoe%#QQc=M)G0&Nn8AY2eB%D}qf{3KLbP?;bdS8Mo2Ehl7+_>GBDusuRDXhz zNsHwh?0F0Z0g6J;9#rqx**+nJkZLyZh#Cx4Z(%wu-kUDXUWx;V?HM`znlBoqlhdVN z&n*DxA00U~WsHxj05naRd|dhXL$^C-V|UgC|L9cl>ZJv{XD}2Up8q|5@`UrnXQf}x z&4;4HcF*9=c>Mi$3%Ql*p@)W5DKkizg(KBPKF`0MU-0(~zVM>C|54-Ycd-wq=dWMJ z#DS5i!&Yk9efy1}baHX_^6rNw3;>G4vYZMFZtJ>E6=gEFgdH3Jlm{QyNx@@J8o}_8 z9URy{sT&6E+@+7kR6973Nma$vG?L|%mOigvcF$u1K?vO-0J=`PDuhR-MF5DP>mZQu zYDLJhoYDd*7V8z<62oBT#;43I7}XuO%(9$PW<{sA-+EHpCW5Qh3aFz0I=ttiduC1} zk*1ip-ia`y;ifZl9n5h=*UX%PS4X=orm3eiGfOU(yJohUt12G5OFw?PAAqb2y>cw# z6ohFh41jU*=e4exB@^Y^+GlPs&}#wTe!em{^OqgyYY)bfNxhUP)z%v}Vj?6H<*z=? zo&Oo4If{{KQkC+RpGU?evLjGHRw(?Qb2Xu{u6>1kAU)ruweUI`{4Khr-nhwfi2^ zvg~5PP!%f__DB1Jd-g`g?(Rt?6-_g#^0M2dsyRJ(;HvB(g~H!`{n4qT1AF)R*H7IV zbN$NNo5z-98Csd$8+*Av4Vzt4ja)8!;rmqL4_LMm?$vaIh*0s8!!sB2-<-*0Zk zTAU6}&U83SMSx;42e9AY8;NRxkP2YsU+-pe#dQk+nPzyC%%twtfG_Y+tbd03#M- U8o2OnMgRZ+07*qoM6N<$f>V6=+W-In literal 0 HcmV?d00001 diff --git a/app/javascript/icons/android-chrome-384x384.png b/app/javascript/icons/android-chrome-384x384.png new file mode 100644 index 0000000000000000000000000000000000000000..60b3753547ae92fd71a12f2ba6eeaac6085bfd14 GIT binary patch literal 25667 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 literal 0 HcmV?d00001 diff --git a/app/javascript/icons/android-chrome-48x48.png b/app/javascript/icons/android-chrome-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..ce49448d43f48d48b3ba4d3d2f5e249ebdadf825 GIT binary patch literal 1468 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 VnkRLF-ID=oFfp_=sM5#A{09w$jt&3- literal 0 HcmV?d00001 diff --git a/app/javascript/icons/android-chrome-72x72.png b/app/javascript/icons/android-chrome-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..ce57ab7461a91a7d7772e1bd3636fc10035f915e GIT binary patch literal 2501 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%0AIT%VzV{d3!#L$VVLGN>t((-%waAG zpR9w-Eifqpu%QB%;1gy)2CMp5q4m;b@-Ls~5DW=p-Tx$Px!qFv04AF@A829lCih?~ z_e9rpOF6&(ub0<4gP#fVE`Vlj$ITuRTTkD_{b|CBU$61%d{bBtJVx^EhqumE)@gQ( zC*IMu@cjG6LxxWDZhaXQb2h64V^Irwn8C5b+)$?aoouNRQnr615E=P z`h0kNCsb}R<71oMhtL)rgVI~8HUD{Gziv#(G>Or$;`1y8Awkv zHWt8Mw0g=-L-SOi!X-Mg96o()xbal*htlVV?5{x5kn)m0MDdKgVjni6u-Ux#PMJCs zGBG9hXf{ppS1)&%3sBp?hpzzei4%x?sp$tS4rw4*^m|c4tMKNS(CwyN1~U1+^U-57 zc`W`=j&xEJbeP3BHfl9zUP7JQZvtacBJ)Pyip_L*{a(dfbC$EFy^k%cz{mwlWB&HQ zlypze8oRQ_rnzUCcMSz;4rIT=*1T2=3J;7gv)bxaQo1~Up4F3(h-2d~Rr zfRHQk3^W`Z5?t@C1%$Y2E=|8C>J20|451Y+AbCA+g7(yZly7@NmRH^zOrfo3c{>{#*fy!2Vt@)m7^};kJ7?tzWK&R=3vR1i`aee z^$R=0@0DFmUh9?oU+sjRRO!bW)WtwIbseZ)!|#`;ptJCQUlxpRrSn6(XnFmJmBkBQ z3y4?#u`}(}Jz0kfv*sTA7$kI&Q}0LaDgkpazdktT%Qd&@U3_U=zf@G}hk@6LER1Wo z;vQAQy94yVvI~j(52?C8M4GE?-YVH!k?l^@twu+ZvvDaaha7v$^q^bJ&D*7RgIEfK zc@zRf>z7I1qFYUtFh~Bl&JI<0(-On=cAKQPfOKkd06AII^sC1YI!Z9p?alF@55`@V&blBEr1dT?mtF?A8S`?uJ2;`mR}!%3pWmOf}L%%urN(;V+u3rg<5^-8V3wVlbol?E=_;e5;I`-t9U?6yDGdSw5)y-S zNry-yA)V4NbSfd;-AE(dAl(hp-Ce`PoA1Y4Yktp~b?4p_`|Q0BCnK+B`cq#eF6;Yn z8+A#^)s|V}veHSg_x&K~c=zQ(R8O{Dg$QuFzQ5{aPh~Bim%B)=yVAsRy8M^hYJ(F+ zD!CJ0ot`KPoEK6uC�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 Oz~JfX=d#Wzp$Pysz(s!m literal 0 HcmV?d00001 diff --git a/app/javascript/icons/apple-touch-icon-114x114.png b/app/javascript/icons/apple-touch-icon-114x114.png new file mode 100644 index 0000000000000000000000000000000000000000..e13aaa87de5c6dde5af5861dc47d6b87df946bd1 GIT binary patch literal 4641 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 JHQFxG{{znt_aguR literal 0 HcmV?d00001 diff --git a/app/javascript/icons/apple-touch-icon-120x120.png b/app/javascript/icons/apple-touch-icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..aa63012b5726546e756d272145e6acfad980666f GIT binary patch literal 4914 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 GAO3&eU66$U literal 0 HcmV?d00001 diff --git a/app/javascript/icons/apple-touch-icon-144x144.png b/app/javascript/icons/apple-touch-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..d282a6d3d63432a3198d0ecbe882ba32915b8fe5 GIT binary patch literal 6644 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 literal 0 HcmV?d00001 diff --git a/app/javascript/icons/apple-touch-icon-152x152.png b/app/javascript/icons/apple-touch-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..0dec7d63ef7ab0b749ab3beb7ed740d1c4267381 GIT binary patch literal 7002 zcmb7JRZtrMlLkuB;_mJR3Ir{#fl@rUl;ZAE0u(JC+^qx&3GS}NwLocccc-{t|C@Wh zo12~8Zy$EP*{7BHqBPW$aIh$`kdTmYl!5YE|1je}j)C$orhjkp{s(BEKPbr~z5K_% zcfgX7kf`vK zvdl+sM^~->m4kHAD;FOj`rJm`6qFtBR2-FSHbgpE=6}l=5r5Po^h($WKw)SyoLcZDHVnV5u+A*2l1 zsNAwbn1*4Fg!LHn%(euz%0C$`lmE{GdK5znl<}Zag~1)^5A{NrjJ7c>*~pqPvE#vM zwKL4N9Pj^;EBzxjbV&YQ-0&}<{vUS2ijN_$5Aije9O`Ij937O5f>~w3;496AMGmqg z!D7OJ!Lsx?h!%;3g_uyZ7N&&)H|fV$3wf_ek(4Mc{#5O@dKouRa_N4$bKgIhhA0s3 zgf~B_>aA>zW;}N4_jL#1;?5N?;J&dnqXSPYY!24LZjwse0IN977&^i(J&;4I8CH{~ z33*XgjFQ=#7V5AApaJ{$Hmc=i=M<3xMI^Z_9Ng(BfLpc|)Y^y~bHj39_NB5OD0&l-qT20dT zW$3X{8id(#ocp(PH5r0CAffOwfl9`S#JDrm;u2M61lm;DSnV~UN1%i?_+Dp@+|br- zZswS|Pux($_1iISmbezH1oH;Nf|4K_2UiIQKrz~Lw!@SPnklnL!KXg};iA%mW?d55 zCGWPD4XiJ>T&XiKP(axZvj17<-8vBT+G|Ep@>Y5OfEeF$?CYl`2IWrq$N8t!luD1E z^k#H?%JpbMUS0k6X}yU=(KU>;cX(|sX5nH|<#v^A*Hu(zWyvt3rnQ;;QEr2yJv4%E zK3d(k>IoWXw}jNA6Aap|)4k1bU9j^u9;xOdzZm<}4 zpdJ368B#^-%@pu^%%CCfo-1u^sHuzjkhV84o)n{%s_0k1D(e7}#wNz{y#bGH#_KYZ z3mOy>KxeT*4SL4Tjm{)k65MiKFw4GIE;@N%2Ttyswr_h1lgn`{jhg}=8r*kHTAb2h zgaQ&0*Tea`-cKd&mvPuBjsC~?O-|`lE|AK$g6Fdg`49T*6;0VM;E?_#FF6qh zJ7b?yPT3-4=&W(mQx$(j&_uk|G00`OWApcr!Bb7GAz4+s@!iI5j7>Zpy0KXsS@^fl zz@%^Z_+j*WU2*}hz&GCQ$A&ZW2HJyr?44&m{d%V2vNre9?B7y2RG9Rs_gCwTF2Z|B z^hyd?a#^vrq5Ze>crhSskq>?<*WL{%SQUq@dk>-|tTehnHIFT#KY@Lt&HB$@Z%X)OQV6RC6KOq1<0RdBD#&EGhB|zA5 zU=XeIyvpTd-b8H{esH{2X=QDvXKJ2nAvzN{G53hELS0&EbXpRSfBx@$VNZR_4(nK){g z&%LU&u^t%9~leX}CA>dMdo1M|u3J zxY^3pn5HJ-H)0iLVs&o5UZDO%&s2tN6p$d2{p+31{#r19&=lX(Nz(@;AOV32Gh=Vg z<|lLJq%!Vt4fm8t!eB*tps2^z?afPD3c_sm%iYxP9Y5*W1=U<{3J>OhEm(l&Vst8l zSZW9j=xR7W*@-NQn9}Hr*w$i&%^Yw31 zOIqG^xEiy2+D9h4$aZU>GFW{Yx2ml*>f0Mipp}3Y7LssQ&`Bc6^gl1Nbza0>slT*u z?IEoeb2`Iwd754JSu_OI#h+-fr{Q;j?=nDIpWy*raWaIlQ2k4v&E#5IWN7 zZ*i1`uWa{G&e2z^FI5T&+&qe+Kr2+vkP~n`}e5u1H3ka>g@~LXsG?!s%lmo+_j~kE6x4INSU=^$W`Y1E3WFiGsTNewyuRZP zrjqrJ9Oa>h2XFlS?EsC-z980GDzYX2WoUD?i`~+8!lO}Cg39Z*KhSr4%Guqo{^83qWn;k{5UJIDkOS%?J81eE9h=^00<(4oJq5-XkGMJWQ zi>^Z)3VBckSqRuz zUpwSO7KxZ)V^g7sE;6H52O*d1wVd0SnvzH6n%XGpJX+eaI9~T}H%FE=rtu9c&7V5C z-*rJzvWoFtd4f$?<_#S`u=&27M8serP#P=b#7WrF*La9~8Kal>>YSlEUR~fsGxbU# zN&_*}jdK`#`n2vQYApmc=dly8q7lIz^3xczJMnOR&E3KbYuzogk zXgU2Yc&9*xU{9wkKC-nI^cCjPdFoch91M-7SEL9rcYVr2yb+V3&V$I9zCW(ZJ0QVU z)1O96kM8NyGIz*mLyf)NS@Yi29vq_;%dzU6m{BV?u&|48bQ~qG<6wRCFL>teACH1J zHCoNci<+?eT@Ufc@IcaJX1Ly;Omt6T?i)V|crlQ1GgvWTfmjc7y{R;K<|#lDPJl?J z51VmtHtan|>wFa}TqAxG%A$rem3^GysGA9$!|V&fccHRbA02Xql+*$bD74M5S@!z7 z;1MdK4%~x<=1{@SUE6nBTv9kX-uyPoV>jsNVL zlhsMFK6&{Z><*V1Q48G}>IuI1T?w!Qm0_zn&g{pp$)LB}7zNv(IdJMZA*_phpeX~e z)msV%qlyN~7^J}%FP^;61H`b&xg_VALlnydI#LL_^8j*xJsdeY_!;dBYOT-I-6T0p zMST;DR`}eKxK8%IMLE@6v#YDU^{d){JfT=pE{QmrhrRGi2;8Q}BnBYOB!WY2lC1fL)Hni-nna@r-7^3u?wg3-q!Tc%Hz% z-s)tysMH5lXT<{{YALP2dzf6{R}Gkp4X*+vp*}0}W!|y+da-s`@%VYILRXL0oVMsz zrj7VBt00pVmCEM*>5Hec?{~bw;AmezoAyQ?k13U(2(z?VkJfhQk*7i)0*~k3ap0eC zE)q*G2P-p0=K8*CQqlsmKDDdwh9$&g*2duX=T^e6`eQuF*RU|l1Zxiy;8~hYII9oW z-SM!D~ob_~A9Clb>|GlhF)+-H`PfxW%5?^i~e@fpZ zO_Wj$!F}y+=6pK6pBn<$kO^8}D-jA^V|l|?uLV6UPoS@)uWY!2MEt+E2SnI)V~pbl zbZpz?Q{MH*N8r+ly#DFpvv%W2NbriXiFrY^iBiC_&I{umWT|;R&u>rK?E%v3I6_TZ ze)PCKv@?oL)wHGB>NIE*|9p`eS_L^>ec$?0T=T=_GJQa4x%mxP1%sUth4LLWEpcr8 zz;^=gq8K!df)TkYG8?#e7O?a0-5;d4$44vGEKP0>=Ccd7S5{M5UUw(6)@emFy!K`; z#a&hIolWj1j(5MJriTl+lLwM=_mZ=N&~o?_ zJi(i@0T#tcJAVaEPa3^V8_mau3t?yvlb!8Uyr*gd-{v~3XQ$N++JC(@;EYKlCkz+L zGGy!X)r?V~p{lVcG^DQUhe9B>Zof!l7JN<|LGmmxAzs?2#`{1RcUM~^{T$UqJkesF zK;Qrcy@OfV#bcYcUCNrY*~^LvS5;TB#lSrT;XFs3E5;h-TGvO>ZKIYa3FbG>s`agS zrpwx5qGnK3z}G=^Pe#^g6f^8kjLKdCLKH>x*rb#0-cWR`36Y|L;3K(R)P*Y zPiHZ!#zd#t79AYfH~V*$CiC9y3K#E%tGzJ+@E&8-d;4b*}okI~b2r@iU|OR+E>PcL!f*bTymz9L8L(${JpkE98&m zfZnEg<@|lik;7CsfD{V^ezZMr%}(Pn;(G-e{leq*qvX*;os?@EOZof&EvTEr`RE-9 z^D~|0oPZWRUv3ym@K2-YJR*w+IRel5J9#+_I74R@A_%ddvOoUksKSRk%6%rlpH9kayQ58Ue=~44962ywjNJTjmzZ}Gj}g--;J)LmLv*h3%$@MX19SPON=g*y=MMg?# z-!tx*5#)31ny#Y?p>hireWCYV-pLO_j$0e@O}n&@4?XDl^N?PpU%x%lxKBc60}OHa zv+LaK<#w7ml1a3Qk!6GbRa*e6gSQ8@P>yo14fHTyOr?QA(ox(xREVU2sU_*;l-@_5 zFpz)tk7HuZ20o2S9LH>>y-!yyD@XVNJ*%Q5pUBG8X^ozjl0(~kaBp%Db%!S9Bb4iZ zPaY8snm1WX3s)^TM(&5gWbR))u668gCd~6qXwj2-S$5j!DLtVM?XdcRi)gLjn#9hp zPbh!Cn0`In0Brm6)}w3)13cKCDop4C&YrjF+P~iIRZF;6&v~>0#Gr*gQni#7fHL4V zjb>l?TLXJi?!*bJsc9aM0t&+dEQe5^iUP$aM|{E3VoSl0kHM`^PB>Z~}qgv@`C?mH3<7OJfcUv=NJ(HQhS;6BgY#BylL!-u-3S|T7^~NI;Ph>+AF*%I> z=-SURA%#D7Y43JDY}B1vPqml5I#zN#Ll76g?kvtXVDLZ{--!_T=~oP0&vx`GLYl8T$trs_~Q`zL++YQ{Zd5f76mIvI4$AqOGxB0`NeN zOkvmZ{KJOFwiOq&f$FbzsysdFn#IT$kKly0*Bz1D^q31h6;msh=}FdGZi| z!V9+te6sXsjWZW*-5O8|YS67PyDB2Na+o8IKK@hH@$h4`68yl(r+sC8+`b16j6RZP z6`ao4)minmI*M|+Iti>q{~T7r+Uz?Vdb8BxLyPbdC~O@sropTLl^rxH3*J)Zu48=m7th3J>D>C)PX?YW3I?1g zh;u3L+fhYQl&<^Cv1G(7Hkt@PCjFJ`<{h>75XzX zJlpQeV9dye5@NylYV%&dPTu=;z8I@=U3CpwUYKL+3g)ccg-caQ?!h^q0sO5*jHGCM zRNH`j${yU{Z-R~!>pOUgwW>uiNC)cO?sWeiW>-wlYsRVk1ghH7p^TSTPl)wc{8tul z8AwCQ+M@?r_6}stEeHV66!zAR@CO zv{?X!6O({A<2!7?gn}NKOl1hCT6K~JNmmKofi%L1Va18_H+dpW|x)D9& zZT)&TJFxnm%11_%AU(zQBjc?FG8wX*>pC1wT?jc?zpn=G2J8?1=@#N^C0H>vqqa6p z6W~T9SUDhd<>-nT^*e?MpB~q~lqhOe07{{rAgCE|dT!TY!C)nZ;oDkeSXkZC}K(NI%c<|sXy14t|gup^@f;$9vm&;dm zRrm9*u6nxr$4tF9HPuz!H81M@J0(19Dr^7%fTyCYp#3kG{Kqko|HTK7#rA&*-C9ja z0r2u4%j+!p4gk>UsVKYJ7X6G4nny-uLn7+OLY`N~osT3ibR*$RB{~pz6-HviDdb24WslxqPh#{M zSZ48R1+|0P1wl$)nqE)mN_w3)cAlQayFP-2$3R!FHVe2xwfWQj!+v{tH2j`FU&&0d zX@PWag5y2#3Jj&)Usjf!Zcp?n^O^Y)?7um3LQfRSA7iX|$~OE0 z;8!;`mV5!N#<61q<1^SCdMc%J8D_to3zp;NMheaC3!@a5MM`3rAx#cu#^5Aj@brr0 zQZ4afv-_ejczIt0To(knysFoSeIPgQiZKe>V#&qp?hnn>c=IER;>Kq472VVx8?X8F zPc%H>#VDnPYejudEu=$evPZt--ib!y0|vhJgJ;?kz_Km4fHHtwe$>c-g{=4NgXGNBz@aYAq^P$u80wGLe zgK*GDdV6Z`XGWzZh-9zdNBIUl9gpxzMdC6c;1uc255ti8iyUAz_cY21$m_4R`n8Gae2dzkq4`~1rg z%Vegk8FH-~)AMk|*9-2dNH26x-GVyLb|?}~QvU51x0zu8E6>RGK#8oXBz+HEEe22A zJ@2y@jTEDk2BzQ2MgE(>Hv0W;h~MLP@TMZ!>7aT|$%yv{IP5)HYPD?&d;HXMG2KND zp)}_T^tVe`pd{4uhsA^HgDdS>DEALGV=ldh{o)_=w;>p(<5GImuOgW&!~fkus=yxm z@sKgwyH%~o8{K9nm_`VF7JunoST!@dY(b&aC$A!H7sw6B#VIA?Zl-C8S$58BNYk&* z_yDJ}AK;AS%2z)e%>^7~A5DWB*?+$fgD{6Q5nifbz9+d>Z-&1ZI1z6mhUhG8wczED zuPVQfmv3)bof?gIt_Y^+b5411Yk!g4db}pnQ}p+~%SrZ-92`l`AT3B&36Q1hX#ad{ zdaySFAr*sMS%Z`Eo~51^Se^Wzw93CXoQ_+j3KAw*)F@7`QIdp_Br4|K(q(+(q*Bp^ zJ)SC=23Sx$8ANRBV_lV=?9p|>eYWwF@>pc#skg~~v@|&{dzS(NNbv0lT^T!GS9MH2 zudG(@I9dE{pdvCSLaL^AZ4h}X_?CbH#@CA3qmEKH_qS#Q>D5=MTn1J~ecdp#9Fyx?w|_@yfHHo)kRj3Qlku z{qt2wW%ZL|HXlVAzaJm(Ss~pk_FWY~aA4Y8j{mX6^8tj4+h8@AaaxPr#^(N6?*qZXh%{`xK}b!sn6SY4EzrNQ`sAM4PHFGf?Ijmd;&wY!J!(=BSuuZM zuax8G)E6Er;qir)N_!_V^2OA$6$v`q7HCZQIbh*BvRZv zdTD=S_zmc4YUmvSy73-Q6-Abo4D&qFIVy`xa`9{4=js<>ZJ60b^Xi)^Chz^^myj1j zI-jCKYi?e$Wcb&ee!8cw1)aI2FDkWyCV{vu0=Hm5(43jQ5)kFJcMaEen}SPR5;^oa z=+`q!#-n=NEIxhp+*#{tuBiVb6tggqM48EwCl20PGK&gy4PHa)Ug#0Ix3_S4CHk{K z9sKU^MJ^23=~J+2ZF_po$SgQae0y&|)qcHp)jWpdmwbV{+2Sz+30WYbkmU`T8>w5; zKE#@=S{Aa8ng~%UEX=uytroI?JToh2qQvfu>W!A$k+wy*mW!puar9}9i5V1$W#afr z2>YGKzm)!Q*wXB{880#Sx$c*Xu1wdgUymVrCVeBWS=HFS&k&`&b206~DVsF#7rQ1o6$&$zTU>(%b#s)gYu_ zzCZiaR_aOUe{Fo>@UbeAd@$_>weswqEGHeqoB1K@x(Z`4JEI&(%;`AJE@K(6exSas zLXn(7keEA?u+l>FNiG!?QMdGy_U1-w7%7gsNB))*+v=zT{+1V=lUc_e=wrfO*~y90 z`@MRJq#_~r2wn7jtu{fwbCBojT;EHx(U+XULZAC6GAn3?o`5Ce_{2nvzSV}VahRQ= z((Y&aY(ZFH=$`@ilCJxr`%UR|pYufGn8`frve4FVvG!T@qGY1R0}fDXv5SR5U^6IT zvNiPJLj%L*3 zmZ{G5UDyNA@CEQgL)vfbWlPNe1f)|)o(a7GsJ~{F?YCK#_P!l3Q&|xW%%jA!9MC)V z)7hQ{Ep@@1KZP_Ji+VLZJ=Q;ifWoY-lb`|mnnYw4D)uPN=Nj+1_VNoM<@Y;C0Du2L z3CqBUT&C3aEZukdZzB~H{J~Q@mtd`q@s|Q#I`9yi^Xt+OBs?bOg6dqlhpQlJ@Tf*o zk8JZ7So@Cg<0RPvKah|~FWN9OdqzilM18<}DKd1ekIf!w9bc`L&|LGZnk|bGJT#O zZKSWp9P)e?abG^e(Qg<>X++3rHH~R4-wRq@ZvL2t;EK453W7Xm-{^1GH#1o#5W4Ll zeLXB4LUyT{exLN~_r}P?I_dY^P*u{wcXU)##~bO!h+zj4TVcqt=mc*^YjkprrSN8? zSen7HhX}l@;8Ql`Ux%?QcYRq3_MgTUSKO{J)ap`7UT%)dK+vjTrEa~16d;uU8+DSf z_i%7a)3-%?l+l%}VWc+1oNjx$TO-2_aj+7hIb z1fgJLcNCZtY-?mTZJ;^4Ad%~|^!^q^q{(my@C9*tEx?8(5n6y=W^N`DiKflX)UM$`(2)_x|wXLoNyMa|B1DTjy~INMipmu;4Lp3)ZMwDbCGHI3W}r zjlvvFyU@58D7=))PFL z#zA8Xi^wGOM$WI=^4-AS;dpT>(&6Q{ykqhC0!S`iGT~jA%rQk!r(Iyz204#(92z=S{u`Oez!@ zCfohhq}&xGo+51R0N2|6eb}~<^A063k{;u(ng+Rxd?=ZA`T{vRe~$&Zo#r_w*tcPF zfzQknvVK5gcBGhTpWILw$8hu^JgZJak@l$`Ols(uL}mF&78&lim1vyAtu7w8OkOO3hgqwXBo zPz7Z^Qgrk1=(~!C@k(dtwW@<4$V@`KWHy=Pyq?VOV8d~nrK2v054YA?Sm%OAW>lSy zJ%o=pE8V^3Je6o- zf3w=HJoe)SuN9K(xJPYoXlBd_?ya3lH4g}CR9>WI8WmZK;joo2<9Fn+bKBPVVl9{^ zbm$Tk*Uah;ZmUh`WAS-G%(^Ozy~0p&b_J;nvI<13%h`LA{4^+!(T;bgmIZ7Bg`}6MiK!HCIIGN6v_CxVt58|`b%ox#f<5- zN#>n>@(PC;r*JqLc6()cm(p<$^BlOUO4S(5ol}f;kd+CeLwvBb9kwOwT4SkA3o|o~ z&$>Dwkw?NwCz1{xI9eR!YTKj1r-{vM_oM8!d0ta2S&gFde<$0?45sUnoGwuPcWuWhfnYN2Sc0h-H9u^09~FjMc*18sr4(^qjKG^#9NJTsP@`H7&iI)F z9EVj~=A_&wFB6la${s(Qmm+!`S?A?8?2(RU5Te5L9S48fYZ}CzJ(}6`_2EGgD=3e% z%ER2sC;@80fwtqq5On5^o{ctLwmi#d{vk>?PFSQeF*9~R(oKH`i)K#Roa}Y3=7YKE z6-Q1E`LmHm^MH&9f0qNo`m6z)sB6NI1`7x^d{BS!&56~KGNUjLn`N`#uI0k#R=yez zgWIS289Zi^FUq1>qoa{Lp8k=D9&L*hn=`tE9P{M0mNyVob@DA`8cqM2a&mAla+Obz z+Z;BIdBR7WLRg=yjRcW*y=^}{vM7z$Wt}+NdaV0I_1((G2qpq#p0+z^$e9f zojnLUswhY_zX7)G#f#H9u%HdQ8;Q2Ysm4XSxnN{f4!fvLANH=+f>qT`;;!!oqg&N_ zHI9q)y{b?`u|j(BgeU)SKUnUa1Fh~ZJ1b1Pu~@8J_h55L@7L?E5?6)dy`hvrsSx8k z*>ErT&3v>pb1}Dy6KuKa3g~w{(w<%P2QRG?19Q3mBX~|VJ%i87apaO}M5ie5elP6W zUP??ix5c5#>27)fe<+yF6$YPj|r6Aktq8%a6>q;}_?)}pUU96zGXf_%GTp)ozA zm_bPqmaCun>k{GJ9TNDMkv}`@Lc^+GAvyPJ5;mQF30#uSNv+3ez1L2UF;Ya=W6#65 zQjz+geRlYF_DbXmDP3@@?XW7v*8BT**(Azprs%^$O$Ltb@Ha=AI3fb}*twvVJVw-P zNlExw6S^7aKW3HPv4)d>L(ko<86Ts5!!u=yU{wT|Zt{c5!k>K4634oUMxx#Cc1`-i z7apXhoN6%b_AuVZp1X;4_p*vn&kvb>jT^dgp}?ucpgd$Xd(GzFyH+FFVjOY*2yR?7B23p6W`4uyW!0k!@L0 z{QOcoBF+tZ=Vd(7jV3;KpEidyg=oDU9#e92kO{r^Q3n8iOQMV*i#nn-Eyss05)IGp z!Wk!8&}7SY({s_{!cf4%mExnC7z zixq)mKi;3#&>}`ancB?cXt_|56k`V%iK-ZbCY`Ud5F|4bI(8xoc{P?lFLqDjthON} zFK%Ju&umRAvquKUt>ta*nzlDx3&;L5oSySLmEa5gxjDF{(g%NSM4PLS5dX0fZ^OSe zp6e2C>X0ivC-tSkd&k4q`4V?BPJ04%ydin74J9Fd!^$RPEkpMAXT$JKfAkdQbsQY@ zC`SgwZcgUc@dpv!&QrwV5-G?li&~u8_~Eg&o_uWmt|TFNrBrP1WF^+Uc0#YTA((%*(EtC-*6 z>B~-KwJgVnDbv#g+2NmV!|vxDd^hcy72cTl2Ejh|$t%mk_CPl34pFibiR*$)eLu_j z7C(ujXca?<#{{0rM^h^N5_`U?7|MwISSPuVb=eW#wOqb8%4tz6OTJp)lw}7i;%Tk* z&(HS(uV6iQ?m@C&4Gn#>aMB6SeAz9tZ^b-U!n)LfBri9 z5F9}dO-aRCy1Bw3wt<|j2R8UDRr`Hthh4svq#RqrwAaUaUB?ezO+V_@iwS`CQO4>s za2+0!RyDNb8?g0Ia(KJSSh_LM5XRNO0_*w2LuESH;?r5{(eb?w-n{sU`A$e+GO+Xg z$svb)w*LIN?=3 zlgn}8Et`#0FoGUgMkeiD{AJff#AT`DlytaGm{exTbGJJjFNKL$$e25~V@2K51F3wE zIM*BXf@;|1RXubAEM-}&M4}c~6h>~v;OcOsJ={SX>i2td%1cJ3&^%z>G2kEGC6G(G zCk8udW1b;6qUz*fpxM=F+UQ1*^`{%xu*dOF; z{K>&`7*T%&CS@aqsC^z2zl}@3@qR2p2v#FZJ3V)Fd3(gbONUL)?jTPCuj8npl_&qF zkXoj=*e0n9*idg}rgWj*5s~!mNKpYkY92k?p*71%m?wbtTx7ZJVG7>q`blTkw`%~n zqU4ef@XLuc%KhD%KimJ+_j89N|GL>yGx-zBn3(g@p)j~f!(``7_dm$)S2L3k2 z<^ueEg8-1B+LXjl^$s50}RwbBON>h?)&d%6busx6<`r zv7&{|zuFE^PZ^QO1^ij{P{PfVml||s+=5N}s1@oN!WgxwB2Xd}r-p(nlSPR|&o_R< zUn(~(o_Xa9cXu;H6W#od_wBP1Ns9c%Kg-7|%xjAEcZXcOKAwsm&|!hm_Qg4wTz8_>Pn;=+sFK zvz?691ZdLa5^w<$hHpxm?4;af5;l!%zu~9h(s=QR!jckL^0~~PfVZ9WMs1QS*HiTJ z1027tUMaz1#CedU5Q%4jH|Ch__sr7Z4%(KpSu@wK7sZPKR((AmA9n3pGfutUGXa=( zO*ADWu0u}ZI&TlRwzk5S3|!;r5iBll6DOUS{lJc=zcW=R$<=+RyaS!r1QIS%qGoc< znBoQklSq~)dLVF@&FR9A`|5z@wH1`c^jy&s;;EyzFAG0E9n2@*UueF2yp1|5E#=L|?zV3~LGS1cod*i61!YADQUaV8yIfA5yCfeTJT3GVYulS_ ze=If(xGZe^>vw5O50%AKU!?h0awsl#!;8bm8^*H0IX;cvkII{uAMJzG`A}~lOIL4j zS|+r|aOciiy0E)iM+hYQ9h{I<;Py*N5)`UkH7~|L+Zox0BltHSPwy`Jz81zlybCth^7#PjR=VgNdKL8r%g;zKN1PrRle)49-g6%g$m~%=kH!W;jXzw} zWcUaThcy_FdPwYazgGLLm)eraHRO)eJyA7kp!x=0CqLgcJ!6t4wo~J)@D?+ zcI$6_cKaGTUvd!KjsFd4^a30cL_ahdOD7pV5kV(FdvV4X2eMkSs7|n{RJ~R9p4HGT zVu%_{_^qMhk)X_Q(Go$8(zobWs??MU3wjDLpZW&pwRa=I{x?6w7 z?y((PuI2+-6p@nKqcFq&u)Dn$2ri=7$*XcD8+XV)y~kDEF&nJX+Tn1T%ijN73-$0G z+>y1E8TJazMSA9$%%q*$EmkuW`?ZCtxm&~OV;cBsp`s@DZFvPHD}pErZJG>KpP$Eo zZPz|?wj}gqV$z{gG19kz#8@73OPiu7Y5xBel>b*r`h~7O2Ugm4{5<+katElqeWy?* HXBqroY-azQ literal 0 HcmV?d00001 diff --git a/app/javascript/icons/apple-touch-icon-180x180.png b/app/javascript/icons/apple-touch-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..864046b5652a166c3d3d15341ad6a4f7e11539df GIT binary patch literal 8947 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 literal 0 HcmV?d00001 diff --git a/app/javascript/icons/apple-touch-icon-57x57.png b/app/javascript/icons/apple-touch-icon-57x57.png new file mode 100644 index 0000000000000000000000000000000000000000..116918ce286af08ef52bdad668ea9d475025e3d1 GIT binary patch literal 1857 zcmV-H2fp};P)9NNd+eG5i253S%tXrcU)~(TY zVpZU66SEX=BUZ5av>9ymf9V5SMN*OHl9a^~-$xj66e0+3&I;b(xW>HbSijtVE4q8A zqXV8tL<*>FiU4AU@AJYu=H_@jjiDjFIsy5+#s_SWs~{N&TBtGf=_I>S^ub0*>-z)LSg=ig{zRux;v zftFqTo$u>Zia=C{Z0$~KZKWh3@U;Q4yc}E_v}F}wwt9>icvz;oB#C;U&5H<*BL=>% zcO~oqm~GcqUmy4Pt18OK@Ehl%x8IDWr&(+C?V~S0p!fC_SA7uh*}q1YE=F^oa4e1k z2j%?_s?N^UCWw%16<;_hUj1`uv()Tj7W3y$=&I(zke~f|{=&HrOC=u;&-n+ea}5~NR|qT@Y#NO=Cn^jqLHk8fK9Y-zo`1EAr(Pfwc{f1kfHI3}ell~;N@^KtsQXZ>tt;OW{e!LalJi?zjQ z@2H69VaTuj%~#5C<82_i^Qi3U73nel_l2q1kH>!Xi#=E0pI6FB_1<#VF+oIw?}UpB z2AR2u(XqGA-}=S-bg3yN3n+~-tb9N!Zf&a=)%0~UJ^oRwrISG?Pw9ug5i10O7k-yI z`^x0-r8EiE)^W=ZejICS69B$+KYsd?MJLwkgNLsK<*ZTxFwBkjHVYpxMi2`Ez@=w? z)=23P5rL1N&|0&0NNb$B&vD(P)UI}7$BsLlokBaL9qQ>p?`MdJTsJvC$K_2CASKwC zn-B-s7~*PY4FWh`3qTy1);1zR06>)L767?kl9@X?SIPkpC6j`q2tJHEC|%Jv5x}Onj4Bm{fMJLRB#PJBaEer%%`7rnsj`p( z6k)6FSN=1qt1tjib(L&pQL6ZQTVH|IVgYjKXMzBZt|$Z>FoCO?R?Dl#Z)LHwsVEOa zgnmXU58PloXzT+7qqG;~t5{dYw02}m<<%d{;E*hGYifa6yA z!RpT`*PgvHpK}0o?N;Tlt_=Cire2m?!)iIM3v*Fu2uRhcg1`MFw zKJVkgKeM*uYRNh?Rl&OMT-Vo1l?wYmK0iO1p7av!H7n)I#TKloZRKneNWri5nxO-JQVfco!FJE@Jk{bJ{s%l zaWcyyyClH{8fRD1O?4*@-<7=kWV`D*(-YBJja!Na?!97Z$|myt#jf2QPyVp$;E`Cx zD@GVFGXu1|7!gq{Q8-Ez=l7*we{%Lua~6BkdXh)_o+>~6tn(Cxc4=YZ!npvz{sW#= z#mEp_ln zyrWyUcPgy~fPCIej^`)R`H|t=`1Ps6xzTl#o4g6zz`Zsp?J+aLT%qo@|K7Ov!J45; z2n7@phs|E0Z}485Kw5c)b3qv9YEOa%D$#3XI4iu00000NkvXXu0mjf5NMi> literal 0 HcmV?d00001 diff --git a/app/javascript/icons/apple-touch-icon-60x60.png b/app/javascript/icons/apple-touch-icon-60x60.png new file mode 100644 index 0000000000000000000000000000000000000000..0eda96ed62a60d11495656f6ce33b69f756fc912 GIT binary patch literal 1952 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 bxmxgF1KC_DRA5a{00000NkvXXu0mjfjUM?t literal 0 HcmV?d00001 diff --git a/app/javascript/icons/favicon-16x16.png b/app/javascript/icons/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..e7037f4cf1d839538e52f6839d3a6d8030b64dbe GIT binary patch literal 650 zcmV;50(Jd~P)&>Gzrclypf3CYu3SihXd;0@7fM7B13?I4h$d=4gD8rMqRDh-rqkV3*Tr<_p__Q1 ziaO`sI``J46fttS@PLT!5}{Qo8h{i~6NhI33;Y5#1vXzOIDLbI$|w+Z?o4Qt2lf##iIv4rIG-w)!3*S8&S8$lF2CEz6p6YTqb|Fh*z+t+yJAcTxN(O>p&-TpFz*ZLv|ytO4+9H;RyN5ot{CG1RhZa877Zlc6OP2g zGA7XiSFD)>>P6I|fvsG)cIgL7v%n=b5V48oxnisb!h9Jf$9+D12o@^-{GPN`!Pn0L zlj9CWFG_Nrs}qN&^9prrMPFw*e1Y9sn`k1Q=t`HtnkP0gd-{hqy>hLQVU%6!Tvl4P ziPf7CsZ*L-5mf>^XK}t%nbN!7r#ohnWChUKHu(@m#}e^!ZNa~KVX zrP$N6yqW^Yw!N;=Ho6I9m&ASpALH{nV7)tEUVVGCweXKYg6zJr{mRgdq7~Q(IKVfQ kObGhU){*T4J%7FT4{OIjkZZf_Hvj+t07*qoM6N<$g6EGY3;+NC literal 0 HcmV?d00001 diff --git a/app/javascript/icons/favicon-32x32.png b/app/javascript/icons/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..a91b024631ac83fd1f29cbc10171de7c967c7e14 GIT binary patch literal 1248 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 literal 0 HcmV?d00001 diff --git a/app/javascript/images/app-icon.svg b/app/javascript/images/app-icon.svg new file mode 100644 index 00000000000..1035bd076e8 --- /dev/null +++ b/app/javascript/images/app-icon.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/javascript/images/icon_cached.svg b/app/javascript/images/icon_cached.svg deleted file mode 100644 index 1087c43503f..00000000000 --- a/app/javascript/images/icon_cached.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/app/javascript/images/icon_done.svg b/app/javascript/images/icon_done.svg deleted file mode 100644 index 446af14d997..00000000000 --- a/app/javascript/images/icon_done.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/javascript/images/icon_email.svg b/app/javascript/images/icon_email.svg deleted file mode 100644 index 6d0ad9d9ba6..00000000000 --- a/app/javascript/images/icon_email.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/javascript/images/icon_file_download.svg b/app/javascript/images/icon_file_download.svg deleted file mode 100644 index 53e97e4f8af..00000000000 --- a/app/javascript/images/icon_file_download.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/javascript/images/icon_flag.svg b/app/javascript/images/icon_flag.svg deleted file mode 100644 index 3939c9d2b37..00000000000 --- a/app/javascript/images/icon_flag.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/app/javascript/images/icon_grade.svg b/app/javascript/images/icon_grade.svg deleted file mode 100644 index f48b468899a..00000000000 --- a/app/javascript/images/icon_grade.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/javascript/images/icon_lock_open.svg b/app/javascript/images/icon_lock_open.svg deleted file mode 100644 index 3288b46d673..00000000000 --- a/app/javascript/images/icon_lock_open.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/javascript/images/icon_person_add.svg b/app/javascript/images/icon_person_add.svg deleted file mode 100644 index 068b8ae7cc1..00000000000 --- a/app/javascript/images/icon_person_add.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/javascript/images/icon_reply.svg b/app/javascript/images/icon_reply.svg deleted file mode 100644 index cf6a09abc60..00000000000 --- a/app/javascript/images/icon_reply.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/javascript/images/icons/icon_cached.svg b/app/javascript/images/icons/icon_cached.svg new file mode 100644 index 00000000000..d938e9badba --- /dev/null +++ b/app/javascript/images/icons/icon_cached.svg @@ -0,0 +1 @@ + diff --git a/app/javascript/images/icons/icon_done.svg b/app/javascript/images/icons/icon_done.svg new file mode 100644 index 00000000000..a35ab87a150 --- /dev/null +++ b/app/javascript/images/icons/icon_done.svg @@ -0,0 +1 @@ + diff --git a/app/javascript/images/icons/icon_email.svg b/app/javascript/images/icons/icon_email.svg new file mode 100644 index 00000000000..0215b6f3a75 --- /dev/null +++ b/app/javascript/images/icons/icon_email.svg @@ -0,0 +1 @@ + diff --git a/app/javascript/images/icons/icon_file_download.svg b/app/javascript/images/icons/icon_file_download.svg new file mode 100644 index 00000000000..dc6d6bce34b --- /dev/null +++ b/app/javascript/images/icons/icon_file_download.svg @@ -0,0 +1 @@ + diff --git a/app/javascript/images/icons/icon_flag.svg b/app/javascript/images/icons/icon_flag.svg new file mode 100644 index 00000000000..fe07808fa93 --- /dev/null +++ b/app/javascript/images/icons/icon_flag.svg @@ -0,0 +1 @@ + diff --git a/app/javascript/images/icons/icon_grade.svg b/app/javascript/images/icons/icon_grade.svg new file mode 100644 index 00000000000..f8dd93864cd --- /dev/null +++ b/app/javascript/images/icons/icon_grade.svg @@ -0,0 +1 @@ + diff --git a/app/javascript/images/icons/icon_lock_open.svg b/app/javascript/images/icons/icon_lock_open.svg new file mode 100644 index 00000000000..12f559beb45 --- /dev/null +++ b/app/javascript/images/icons/icon_lock_open.svg @@ -0,0 +1 @@ + diff --git a/app/javascript/images/icons/icon_person_add.svg b/app/javascript/images/icons/icon_person_add.svg new file mode 100644 index 00000000000..37053633326 --- /dev/null +++ b/app/javascript/images/icons/icon_person_add.svg @@ -0,0 +1 @@ + diff --git a/app/javascript/images/icons/icon_reply.svg b/app/javascript/images/icons/icon_reply.svg new file mode 100644 index 00000000000..9f99e4cbfc2 --- /dev/null +++ b/app/javascript/images/icons/icon_reply.svg @@ -0,0 +1 @@ + diff --git a/app/javascript/images/logo-symbol-icon.svg b/app/javascript/images/logo-symbol-icon.svg new file mode 100644 index 00000000000..12f4e078e4c --- /dev/null +++ b/app/javascript/images/logo-symbol-icon.svg @@ -0,0 +1,2 @@ + + diff --git a/app/javascript/images/logo-symbol-wordmark.svg b/app/javascript/images/logo-symbol-wordmark.svg new file mode 100644 index 00000000000..7e7f7b087c1 --- /dev/null +++ b/app/javascript/images/logo-symbol-wordmark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/app/javascript/images/logo.svg b/app/javascript/images/logo.svg index 034a9c22177..6ffc988e57f 100644 --- a/app/javascript/images/logo.svg +++ b/app/javascript/images/logo.svg @@ -1 +1,10 @@ - + + + + + + + + + + diff --git a/app/javascript/images/logo_full.svg b/app/javascript/images/logo_full.svg deleted file mode 100644 index 03bcf93e39d..00000000000 --- a/app/javascript/images/logo_full.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/app/javascript/images/logo_transparent.svg b/app/javascript/images/logo_transparent.svg deleted file mode 100644 index a1e7b403e03..00000000000 --- a/app/javascript/images/logo_transparent.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/app/javascript/images/logo_transparent_white.svg b/app/javascript/images/logo_transparent_white.svg deleted file mode 100644 index f061ffe4c75..00000000000 --- a/app/javascript/images/logo_transparent_white.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/app/javascript/images/mailer/icon_cached.png b/app/javascript/images/mailer/icon_cached.png index 5c993dbee56a4ceff2a1d4da1908e755be1c5e3b..e94abb7bab5e11b29ebf33c27a4215fbc01dd7a2 100644 GIT binary patch literal 2014 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 R6^Q@<002ovPDHLkV1goft$F|e diff --git a/app/javascript/images/mailer/icon_done.png b/app/javascript/images/mailer/icon_done.png index f7f95a0e8d30ca14b25ad3e83416cce39bfae1fe..472364de41f62ebfcb05337e227d699ca597a63b 100644 GIT binary patch literal 817 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE4M+yv$zcalY)RhkE)4%caKYZ?lNlJ8o_V@B zhE&XXd&f5KN`OS`LqXM2rHx%W{9ZwuG_=YlwE1peIOXi9v#`T6&1l~~`}?1D5}rlX z_22zj!UQxAFG#TPwEJeqTr%;A-O1od`FqbZwf|E8*DDxsxc-qjQ&xp)opM61_>p{; zH7~n<^fqkWqYM<_H3tfu$!!M;SiY6mFK95G?W4R|6aU)(4O>-r+Ryd7@4x)AbMyTF zcORH1%Ja_u{C1EZ#v>n6XAM8Pq|5dJU*@b z9$6(^Z+QOW|EhhC_S*dpe~#|ys1Gh;d8Gf$=Z~tp!oQ?@9s93v9Em^E`f<8M*VzJj_kdWTVk4UOvO%~Asif`Z`?qFoCO|{#S9EW zB_ParFHODzC@5Lt8c`CQpH@mmtT}V`<;yxP*IJii(`mK z=i7@5xf&b9c^6>pQ{Q>8P?{z=C-q-bh-LLz;-uHFC-*=X`mn#~D zM*#qUc6X!uKnSi5Ed(_C^s|u=AVNJ|>A=crD`_dq2LR-fJAJQjQt{Xu7p1wM@uR7U zbdAS#X=?>*{R8pxzsN-GQrnPYbk(19{QA%~N`@CshfT3yUqaXNJxX>&h7vuFn;9-= z$uCrb^7jwcQEtHaX9vj=)RndrPT$4V={gzw0wffxDr_@0mO=@uWD;62b?y=KyG@ zs=*+EKcVr6IDEShS)l@i$;Mp$xve#=s+fkJ1Re*5*(aaJBg?xW4|2v+*PX2W#o+H|on7WshNDr03&8RSzkurvf_$tY>A23FshOCW({Mp@+Yod97JRSdfe5dR(Mv5kI(FT~)fzgUoBt zPSmsZz5&~PxFnEZ^iV0tvvq7@$4p6hfpAKesWflG75 zu-rt2?ic%Q>ib|eVQvHBqZc4Mif2yy@}9LSt0k)jCW2A`I8C{d)0P|f^08@SwyAg% zEtXslX|Ql<5~IBAqWJc)IzLD77hOeq)IP|bf-c&UG@TJJgH~7(%-^v_W`y%g0W+@o z!j<-+1k&^gmh|SABbe|Jj?Se-hI5h7kFzOk#9WxnWJ!ZVLGq)%M5;MHx{GOpS*mEB(wKSEOZk}^T~HYJ!EtB@K17k*EUH`r?mAqT=9_$@?=Y)o zsZ1L^pC-@zzIbQ%7PNxHv4ZG*)1T^rBB`&f*-CXKswpV4qjrMIegNCqIEPQ%$H2u( zx{FT@Y6|7lZ4LOmq9vf*VNjaA^ERTLz1@rhh0`Z);4Cg85?#|UX4;gM`}+3m;XBYlH3N}%|u5N0bX`&|iW%&fPqXo9JEG{RiJ?Q7B z_diNX9E*Z4q)`m=%DQ;QM9mwapp@w2>i5!kYwX3-oM=xXAGZn_FkfV>=%gF^l4UYw!P}Gd3joG9-i)k znK17Z>%m$TSdm#Z5%@G$2eL!c##;3wjYo>0p1c?{jAAYIuDA9FK8?5A4TW2;q4d@nGgi&A9t$FScp zvx-Xut8of6r%t-?6Ag?!bp|L9+do1}RFIt!MjIay!`U4=;8OO=IV1ZTS*=o~FU5qw zPaMC))eh5Av4ya1JHnm=_1}TC=HAJ1AhHl$a;Nt@7^n5vB?9E92=5o{@1QG-EOg`* zvf$+>DG)%8{{L44k}}7uQ~CI=T^;DvJQ%#)n-=is6io+8e)*b_ZlC5}bZS79UJdfC z_+q1g5<1)|Xf;1x$5`9WZHZ=$!fu(t^|vprYXuHmSE3D*=zwKDk+)Nqw)t z{4(%Xp~L{^f!Ts`%XoWazdp7s!*J`DP1}gU8q%N}SGylht+RB|Pt7Nhwrie4q*nMI z_&_|Tow|$oA19vm!qzxeu#OYF|43a`0~aMG6PFKHggj5=6NkgqwkdFd$1d&EKi(-Y z2EiHGnWMaeK-YeFRd zCRi|eOt{bs6P2jnh#GhHeNDz4yySxHhox??*9t@jQdCBE?xTGFUddnQueSJ~5(PMg i2>z|ULIs$ic8S*Vbkdg00002b3#c}2nbc| zMg#x=010qNS#tmY5_A9n5_AFHW*>L}000?uMObuGZ)S9NVRB^vcXxL#X>MzCV_|S* zE^l&Yo9;Xs00033NklG z*~$Q2H_>qhI8*i7$4bU0Z&eL5!1+(XQ{Psa-@SClun73>U;tppu}P^pacl>`L3sy> z_Z|S)^W~5I)e`{s9r;-fShNTRUiq=8#@@LLg%L{us?Qz)c$kJ-ysrglY-9jn-#&nW zk#XTy4scNtSvvF5Ox6O@P;;Tx2B^-RFMX>7Sfv~wYyjH>dK&?{`IR=SZJ*{=8rXJN hYpD)@E!9Tb=?e@?K{NciD?k7M002ovPDHLkV1mr)n-%~7 diff --git a/app/javascript/images/mailer/icon_file_download.png b/app/javascript/images/mailer/icon_file_download.png index 3f7ac429b86840a8ec14e97197aa51cf7f584b84..24e424d3b6e1ef823acd7b7669a7389672eb2511 100644 GIT binary patch literal 813 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE4M+yv$zcalY)RhkE)4%caKYZ?lNlJ89(lSr zhE&XXd)YfL+Ec{kV9mV}{^)s?*RM94B^+q;=~RlG-xG1rHFO>eP&+D!IBNR4;cBnp zu{YBD9_`Yr|08}sO`gG+vmuLV!7PRqY7DCefO!k(rs!i5|5bh({^oo4sVw&T_nYp2 z&VFK4QMz&E(_?=#P6fe(Y1<^~Hw7|ua+qyA`(yH1CJ&blJJueXpCjR*)a06L{x9V+ zgOH$3+Ubw#((DsD5(IDe+26EjaABF8Yy0m>15nOq)88MHoq_s3B)Rw4TWSF1^o!2? zn0y!{l;YlNZ)pG&@-MmrRK*MwN^tM9x3mBX@fW=TssahQy7${_asVAOw@=0nKpFr5 literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOvO%~Asif`Z`?qFoCO|{#S9EW zB_ParFHODzC@5Lt8c`CQpH@mmtT}V`<;yxP*H-Xi(`n# z@#F*vR*Qr6CI(ptP8dG0|Ng)EKWAg||DPI$O#924+yt)mUFUeT<*`Xq#oLHp1z+nn z!6n)5hD|na3zSb>=QC^SS9;4Fz}NOqovr241%~ebt2-LR7MF@mWn}o7vEkjEoxBTy Pb}@Lm`njxgN@xNA!S+pr diff --git a/app/javascript/images/mailer/icon_flag.png b/app/javascript/images/mailer/icon_flag.png new file mode 100644 index 0000000000000000000000000000000000000000..0f14f45a85cd596124ab25ee6ba6e60f60bf734e GIT binary patch literal 693 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE4M+yv$zcalY)RhkE)4%caKYZ?lNlJ8vOHZJ zLn`LHy?t@5u%Up%MTx*8&1Mb%q#LXja0fFbEsm}JKJT-9rd^S#oMz=-pb^+W!{*+r z%zsYLDPA`(u{i#?#Qt#p!tnWF{0DCDTPyeA97{p{{c!$*bfz8l(hqoHQQEKy2QE2|#hh8X$St_yq%_O*;dhz=2|p2SDcW{;SM) zCITfCYa0GDZ@40n{IdK4n}RRH63zw_#tCW+mslKTF?a|wWHJph!QXqTfMI2L?3Lud z<8wYg{#x}n&epw^cf(A>WAmpo=qWeY{*AG9Xl3~JCHpIbDASF}40=ipwv|k=E)3E| z9P#c9zc;b!DKymXWCoF(515#4Ojp0a%CbST{evmX2J`a^CUYj_Gg-`J`1XtsM5;AR x&ix<#)AD)E^UvkK?HR6bVx&j7U?!4nAH=)FbOo03%y9%sdb;|#taD0e0sy+_+WY_j literal 0 HcmV?d00001 diff --git a/app/javascript/images/mailer/icon_grade.png b/app/javascript/images/mailer/icon_grade.png index 8c212b7eef634924d34a59dbcc9baa4aa7e10671..7f371ab1135d1503093b10b4b14b0edce9e2e5a8 100644 GIT binary patch literal 3243 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 W9++q|8!rBo0eCxST$PR2<=+7@&9wOd literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOvO%~Asif`Z`?qFoCO|{#S9EW zB_ParFHODzC@5Lt8c`CQpH@mmtT}V`<;yx0|O(Ir;B5V z$MLIIeEpal1==3^C3IHt*0*sVu-wtz+%9lOyVEeig7G4=#=DaD_a4NRecmCU=92Ej z-?Ab;-)d@2{_<73v|8?-+<4`H!>bj$ejW%&TY0AUZ`QZzt)*$(cG!kHNHld$7I2!d zgZcW$o#``HJe@eJI)(2sL+p<#+kVr7nKBQ!Hp^cukIB1yCA_DcH{kj;P0Rd>3m3!m zH@~kGTD;QD@PW^oOGyWGr!3oGW1z*>lbCBbRqV4qlgZbws?tm*XAjnh2C^1R+`e|Z zL_3fu0@pZ&1@Z}X~#i`x!g>6Lr_=;^9NsnmL%NDajm*=v0l fhVHsl=Q)3>u)pWgx+4#OLB`gTe~DWM4fn24Or diff --git a/app/javascript/images/mailer/icon_person_add.png b/app/javascript/images/mailer/icon_person_add.png index 6290a42aeda69ede03b74adde3a29019df2e1748..696eb74951463265d760a5dd2ae8cd9ec0b8062a 100644 GIT binary patch literal 2356 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 literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOvO%~Asif`Z`?qFoCO|{#S9EW zB_ParFHODzC@5Lt8c`CQpH@mmtT}V`<;yxP|-e57sn8f z<8PN~l^4{dMgco*K=;@-}g{qE(@d6O1SEtD+s z%KLRJanYd;0gjf!WoIXLEZY$9!NOo_m=tf=t9?15^~d-t84mBLyXX1x{%xR77(8A5 KT-G@yGywq2bas;f diff --git a/app/javascript/images/mailer/icon_warning.png b/app/javascript/images/mailer/icon_warning.png deleted file mode 100644 index 7baaac61cb82648d9acc63fdbdd4a8aaa7249e8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&pI!hgaBK>#JO#9RmX+gQtsQNW|f{)BUp!If%6HkJr-c zy5Jfc!nIWH=-i5qc?Z^}e^A=nZarN$cFH?$R!5u0ZRdT(l+K;*dBWfNQ(;2N40-v= z$(5WbM&bs>v6lSC-m{d|bJ)%_#<}=0?(vRV;#K|7|G<^WHpv-j{FBTynOcp%vHwv^ zxy$%?mC#a-C7*cK=$`QkTFeysCfNG|SEK@WO5-`!B&lA;_ygtz!Y5{!XcjO`n-n+K z_MgCn)k|5J^5*`#&u*t&#CF}Tal_1(nQt4#6P}d#Gw!~{>cz=ycWUvc?w5O%xBU_; zx!d>uzFoka9`RU?oW|{wKc`)5-JJBk@%X1t?w8h`m7lz#dZv{H(@EcWnJw$0B7wof N;OXk;vd$@?2>|`!jAQ@+ diff --git a/app/javascript/images/mailer/logo.png b/app/javascript/images/mailer/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..54c8afd6a32b94476b3401ee5d35fe98edf0fbf8 GIT binary patch literal 1745 zcmV;?1}^!DP)-!9N;K4f2~CVPiiTj~ z1u;<)kZ_?U7)?}SF!910Z#1BW7>Ff-L<14QL_sVVLiPQ+us?Im{&fEY@MgM=r+@DOb^|+rvGjLmL`-#5G@=U;bro<8a5-=p@ZK(TJ7OR3 zw{*KVBDT(2B2h>B(9iC9XqAnh$QCFy&XSdvavsK+NXrq>^x6g7xyXM#G^12?> zzK5w70`~&%Z)5g|^9=BXhf>9|j%<&ge6+QDzr#d6j9EhN-_Zu|u!-)7^ts~Xz`fS@wshiYw>7`wi&kFTMbw^FzUFuEhDJ7brUaH=m#?h8N z>WOs?`$HcYy{vwsRz}D2J6XM}LU)t8qM`0(>h?a$vawDkE7iAKX0T0N)1*+DynkAt z`*TZbYK7)m>a#7&^W!=he6gkYxOz^TLiOZ*g8EQK_Yrkb_1UGm?^a)JQKrpx#BXhB z*q8e$R8RhAs}rf_0rk9&bgyYqrrmXf?`t8v)s~k`K@7K~y5H|gGu8cj!*XRiFLOn= zv@q;z4T4^zE~_|Zsd~Q^Pbqbo4f?fg{`8-+>UN;+Z76y~J+(q}vHC6b-#zE;QSVT5 z+e}4)nq0ECt7AP{&zscBQu9ojF^3zLFWZeiJ;>C6CTuGUGS$7iYWtT0`s86&g)DK+o+xKl}1sdT%LUPeuB* zH8j?%A1XUQy%_jp4XvvDs^TrB3&UQoNG~;_hb#L`KgtIy(qF5olS|gHHeXUED$-A@ zsq?;y^jh~h;Pi_0H)`tSk~Qp5KVk(esd-#gk8bhPYC3ItKWZ}!!|GC1(5{SV+Q6RX zN!GBp`-^2xklXcK!es9sS;G$Y7t5TWX$_m^$wD-&DaAD`A|`<&Lk(y2DZM1&crEK? zGW)qL&#Oh?@>LNxh{c{bMzC9*l?s*_|_<7$$@L zAF3%jpV=4@4`g@dU6R`eAIr$I4fuUtLXlw$y-)0$MKj=L7?yS-?i_eXqsuQMqVSef zH0-=`3dua>G2o`M1BwiLvHMs?o-M%D5mDM7SY+6<-N!T1+z+geh*zr)EHbRDn`J)n z8gMi4xrnIM{w$i!1>Pcg)wv6}FCyM- zBT`m_o}wGW9tXY)d^FuI1MQEkZLk_iMO)y;%n3G!gT*pRzyVg475II zYFLmwIln!aaDe1%%`)08)iqj%9mQmchF<}rb`u}CVO8z0Tq0r<$>*vWA3EndtqcQ5 zS9<$6a4X5X-Erz-GIRfDwqK2)U-qik+u=0op`fl-zoWi51e1=ae^$Th5F5k;`;VxX z0G|am0PE=H0kIGG6Uka;zl(_KS^pg~lq#$)0WKk#%XmS$tpeUfvKG&YB!(X3*fOJI nz<<*1Ig(Z6UWkZU{mA@3mU{BaNx@p=00000NkvXXu0mjfOgd2K literal 0 HcmV?d00001 diff --git a/app/javascript/images/mailer/logo_full.png b/app/javascript/images/mailer/logo_full.png deleted file mode 100644 index 82d981fc66452b7ae7cc0c3b8f5408bbae4ef4ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2371 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 diff --git a/app/javascript/images/mailer/logo_transparent.png b/app/javascript/images/mailer/logo_transparent.png deleted file mode 100644 index 6dbcc2e8df3953e009a2365cabf0664561240d13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 506 zcmVMzCV_|S* zE^l&Yo9;Xs0004bNklnMqfSWO;wS2KZ9<)T?JDkMjx<{K$;X8$n z?H}b}c`R_=QGKqsZ6-@c;k- diff --git a/app/javascript/images/mailer/wordmark.png b/app/javascript/images/mailer/wordmark.png new file mode 100644 index 0000000000000000000000000000000000000000..f3d714d3aae3ea8a9991fe15a4f134112b8261a5 GIT binary patch literal 8942 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 AKL7v# literal 0 HcmV?d00001 diff --git a/app/javascript/images/preview.jpg b/app/javascript/images/preview.jpg deleted file mode 100644 index ec28567484445dd96612b642c4b90df996744d44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 292252 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

!o?EnZ2{Z#AqigB4H^j?blPKlvR<7eRUrqgCe8 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 diff --git a/app/javascript/images/preview.png b/app/javascript/images/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..369bed4b6cf02ad3cca2fea5710cb95c540b20ca GIT binary patch literal 514463 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拫W!ZIVCmrXR=G@4OpVU$ho)eEu~#Woja< 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

dMh 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�N?1m^o)bvl%g-z? z{2b&5++9aGcilz?r}>oir0GO9u1fp5 z9tS#bY-b4@9XKz2mkkj$U-r1I&ZKoyuQ&?2nO^OVBSRyT6^%S2B;|KP_`JbZ7UYH8 z1=Q=NVVnoHll)zNM?t<9(P1rri%z~j4#7#ig35@q(5ker5Ju<709s+I2qi?D>uOc} zzyAK0aba}mx$G1?;@Jt;C70HDk)s-!Gbh@|jp#u^b;jTmfh=b)T*AXoK8>}5Z*Z$W zJ0PgR1^q$B0aP@2>bB-zRxo`#*CPJ@H7ySDBAAFrWRJdh@f;id^g@pAaFp7a1N!!1 z*3xCfGFqy(L&^StP@eb|7zCf*dtP23j^mZ+5c3?bG`6G^mkW1Z4?iZvuvu+HudDAH zAG~~4E{1*4*^ddDPuDj}F$wg?Y{U}@J`^oZVZD9r7!u><{?1`lVgYG$4)K~+3UF*6 zld+$T<&EdM${X75RU*PB?_c?qg zo7nx7$rby&iwvKOaAloT%04JJoM@y<(>?*8LrYds{@TtzBgBSg1MjRt&^wCQ)0A=o zNjoEahKbO49;De58<_Ltnf?4CbuP+j3yZ< zOKIqI-+uDUh5ACvo(vqJg7znx<|HdyA#9;}~)5z=W#31bv`!2F;>8@mr z4nB&9&h~b6>0soiZ`XJh-j+W4S)oFGG9dTO%% zMZ()}+=a^*&*7K;T_;(7B?K&SO5AJ(F9`j{=W45?h@(iDXZoBF01}~K^2Z>=Vyw4^~lCJK9wQFD`euzH3j zxScsH@Tq}Apa}^ahTFLl&U@T_WX~ckQ7Xem&n^_mp|07HS7#DMd62RX_2(9Zf^J5> zw%YiywI2zeG`I}6V=Ln)^Oy-EADd5U8!4Ccr8*z2p*12%0smHKAU!*cMVlm|<>)dc zws3~7{hW|^Y~qRI{y~PeePuC9^3)=7V<+j?0M*`;Vm|U)l=xCCgKD?o$%s4h@l)q< z>Cysh8K=|P`cetvKBcK4Vw|C#?C`(&&@r69IFEgU1+1y5i7?=@9S|-6AY~+%j1zMC z34L~9cNNjdYyfz_+k2$f(J#`;7KD<(;AC-->#bkyi#Ra)V~Ts~rQI@Kk-TznpnMn) zeM<@LC`O_iuu(l}ps`Jy!~)i$`3j@gN#MY(HfO(X~Z( zXZSIt(OSL=-?Xr~>R@C0%j-jXw&6#=|2>#pGlj2y`uA|pXFnq3B4p!sHYUm%EkC>Q zvb*d0W$AVENC)eOXl#nwtnJ6Gi~XICv(wX4*uQr-_6`0f2MdPRRT*oy#yF$FY8k(b zJ94d*Y)1Eb^4~Sm{kq||TE;3#tj<=8SbO&+zvf!XGEzn@4EHYVb?xhR?8W+RdvW3N z6+C?8#E=SW$aVW0Q7`KiGpjoaLm@-)5ZLP~u#uLY)x@&K3rv%VK%DVdss zv1=TH-U-&=3)`q1mb9LhK1TFfS=q}8BdgU@*-kiu1%jH>IUpir!ANekNJ3EgmC}E7 zvkdg+G8BBun2BCdWZ_6MGPW>)--RW4v9@pPA0v;t7C|QC4S{ZHJ860{j7cDq!HMEU z%28j3LW{Ve#2-zpj_6I;j^YRb$pZklZE$J&u>Q)z5}thOG?rN>jZk#F1E~Ga1h~P| zk^pRyc!_IiGzmYC@G^NMd{w@B?~_IpP_tYtYm|PL+%+p z?MrFD1~Z~h=H3plT^&2x4RuYI!Zyv1%(o{b{?$dc=vdXdA*A5F5DvzWi?#8>Z8W&Z zx{gxU7U`b*IIgqtSlXdz=^&va`%%2>Etbdb0Lv8@PZ&BKPWMo)cgXp1A&UQq zrXDAJPmbV$xHtRpC59!#+t>R#8$^@D>2tcB&}?s;KEuFGG$N}D5fbBv}>0?6jE^*uo!z#bG9t47UYlB6Bt zk(isrBvo69g)EfJ(IcGpmlsC}cCNE|5eeQ6ynO|*(@WqQ8>HTB^cRgbPiy$Li(^86 zyQ4||;-ac!p$}8*tA+;$%x(SL1`GB$p9uiptdB~KD@W^)#hwtJ(0 znE#60Qhqi~Y#BquDF^+8b$$vHo2^Xnw57jPdlR>0`>x3CM#vM+7*=7aU;rbN#o=G~ zFmQSP3XVQ~4rk6?4Dl>Iau5hRcP3YJo)afJLCN3`;*M<5b#5L!G%!AY&!e?*-}I^* z6buDAvET+p-`;0-XkhGj`SNiSCQ;{*j@D&}Yju|AVQE-@FRyJ3Ab%w@z_it zQa`OBn`uhhR>xDbyRP$9ho@=6)pWMcAK+w(e(j5$?$zC z;uDQYUcYRN@#8z-ccj{1UevALcTv2091dlU#zh1=W$;;%bZoz&K<4aqHgzWs&9CarYCW2u4wc8hQE3x zQVEWBXHjDxsZW%9kdeFP$0k>$4p#Y;z5GC62kKf_z&jrTZta^SyrAFWD?_k5V84`a zNm{LK$>uLQ_L@dUN4$ZJ;+$c8+Qba&oVkf7sjmXC@;3KE8InMPAF<4TN3djbKkW|| zc(6Rk`y(B7B7@lAw!#fzx+L?`{31@Cy@1naFDW_^ADM32gqQ=|C>SCc5!`Ej!xnN< zcphiYUBdm39Ipq}oAz&aoks_6{Hs(9ua653#CBqJH-ywW%Con)sDG!k<|%ncozNB; z2UgyuJt~oXDUcze;k9q-{i|^@Mx*$(@?`Zk)*CL7t$g2MMXRaxe8zvZkBk=H{=R2f z2u~|7)(#Lld1_pwQEIaXZ+EmQ@OD@1;1Bq?w67zwg4Lc?1H7n*;RztLbQZIgCJHo5 zw$iX=-*JHkC3I~+i0Enic5#?{Utec-1-vggsmtWcX?Jq=jkz%Gb1G^VWfM_sOhJvMIKI2aQ*j|t5y zYU42$CFeHp#Kzq>Vt!!}-+c0^c0iBLdurzv7IiG<01D>C(IiphHh7Y@5s?foH8fby zqbkoDUD$;ImH$vDuWYB$jeRXk%8=!A(eqYwBd0G8WS4q1@~{DLIWu=GRNg>AekJG% zvD7sieKS2(-ohG>BRLW0GAtZtZI;>*`cukUgEg^XVvLNetquWQmnVtfAuCtoQzNIW zj}D->;KiQI9!JV<;}ebC9LP$-?gFQ(nu3?#GeywhH19CEuU;X%c=-y>5B@YAEsdtZ zO7={a4rq{$i=XO_Wa_vMmpCY;$H7$x^Vrc-ICkP3c5mN^n+|MkX?Mvosk^2XikJR1 zrKrP29ZQ^0J1H&uAwc~zn=gyL`9a%+F zWFJWn7|)&-2R$^S{u0Fs;O7qn{Pnm(ioTZ5j~CrN75Zt==OzgM+yD3heByKW;mDCk z@tZ&U6ZnDu?I$s_W;T&ae~uFaoXRpz%n+hobdg;w4p16{<9R9?hkW1nvX%6(Jf^0m zuwn4Ge%;y*hKG;}xsj;y93wT?G1^@vQX>|)As)mW6qqBLr`P~AJlz~R(uYQj*yw2U zCm6ZZ98Vn$RX7mV=w|h4=>)K?99B`b^Yp0Mgq&t!x%R2-Mo5(aFG&j4Nna34R!`aYVMV6!R3wD$%2u z6gHS>?zJz-@z$MEr}jEI?CPszZDDbc#0?g(*obG11H>IJx>vH9EpbulcD6)|S2?Eb zOkcR?FF0=h*m&?4H37sS&&`Qdh5W)?c1U zYy$q(IQb_zG_vjAwHZJB=iY|N!D7}IKlU5A|4W}y-&Wf`1bAOFyzMQ%lq15E_Z?3B z#RVA)Yyaz$9!ow1ve>adghD|)`Y%byP$lSoN9@>vRyLVvSU=i%PIa_PBTqlLFT3%q~rS{4q=ULIzd>v8z$GdOYf0<5?+y3Y(n-pi7V=8%KW;CEg8phr=BFrB7w3rY8Eo+jE^K=+m9Nw2~j5!NcM^=!tuau zAMC5c+pBY@2VC|51zVVh2ib6UR zcL;aIMLJ08xByE9JPBj%E`7oY93!`t8z>Y$sld-lL_^}j$N~XhqG;hI4hNsQ&A*t} z_)d?Pq;N{|5z6)>cw75^;(daE58!=>fHx($87*5E`+&v2S&Z8=pS*;WTuW%~;S>3z z6weV41n`vbv}1tQIHrw&R&yW4d=?{RZ7A_WS5t~tYj4?4OS0G)$?TYqXYATD3upaB z+brufQGBqYEdJ1HZ?tk zb!*pQ$M$Ww>Cge(e8a)|dUYXdwG0d6B~w;k<9kt->O8EC8#kF+F(*=7-(SjoqZ(i5 zw(P{FeK*(7oOeHZbT~$nrcl~hQshb+zG>jmKk{`ei>u}?isv#8kcaa|ZY2^IVXj3v zp4vUb0k|MUb}|z(%DQHuqNU$W^&MY>+Tt0S4Gn_L(-1nVS(ubC?LqhKVcHyJ1P6k9 zWsVb72|)}X*H02OCPAdPtYlHyF4hSg>zeRYRw=BcP6Dr?%@PMr#|B>UFtE0?an8Cw z$^|{?BN%cjre*!8aze+U{U$h(Dj?X==*q=QSL$EvTV94qS4|+nC-<2IcJRptBP!6( zt}T689zAjrcisKy;2VYsyzXTOU8-#Pbe%7@V#&5HFyUn^c_!1F0yuje@v?R$WPbCV z)WdOGuOAGCR4tySAt8M`5?SnZ2A8!%@Q?Hjh6f>+j+6|a9iA@M=2jm<**BU`GC2U_ zP3Q@3)|WiJ&NAd4V)GJB5;ESR{tx(Aw6d3Ct|SWr8M-+dqa=z|Z$h+gCKE#^(b4h?n)fv~;Qe=#swzJ5HafJ~ynN z#gBaNJF#|l8V}!d7w-D-ueNQR$llQ8Km)rIEjk>&sns+o@KY?e9{=O3H7sbr^ zBl(*;67zzegnWKN`W}`hHFDG9xrCJ4 zTF*yFwO43 z2`Q9Lw#tPI_s#WVM@|hEu@`NJ@rBzAr8!yVyd*Bw(Zgv#b;G91>-Ok>~P-MH!Cer(#b@#^o$dLbAN0}Zh#BbTMWz2;s20x=dAJg7;<0~<VV!GE)PC`|J|Ir=C8GD+`PDc~O=|sn}l-vc>Y$&_ju3Fx$>gA+@~B&oAINKK`|O zu>JP8+<{FS<_fZKk#bfibt!eMjz+wP%MJi`ke~oQD-_bCpe~M^j6OLiO*`s{eKK0R z+4h)vEYnJ)AaUgfzwYd{h>Dj@AI%=wE*jJ#no(blU@UAYR-$$rUkGrc_>SeGkd}=S z4&;vEJ2(k%$Fk@E?UMbVV61eSj_r%`(-u3a+hw(qzNL8J@SYuSXDnEQhHPR;b@Z)jpYVWN5B)!OYSs(B7NmTmcC&RHZjX*Xail3MsCp-Xc z*9cdBmSR7HYg!^cc8r3Ni2~|TEJm-CTiF?2*HYhTu=>U^O898m%j0xJ&$i`Qns3vd z(XwNE2hF%)-!}Z<_q+u&(^L4&hkgO~e&Lfnd?H`z#D*12w1c!;gzB@k#MASv|E<{0 zuN>0sWR9)ev{8U3vokxMXg=)ZrQq6*M{Fd?`Wc{gXyB>?`8RG@j~fo|$IhMG&4I|z zS7EG{mteUjyWt3{<#{a6(QeG@7h5-P-aL9(<`uKe;ma{e6BF3;vbWY74XR%wyt24B zj5zAB*$={Deinc!pfE2X0m4uV2=etoc>s7oy2WKfmjbxZR21bhPzP$O`H|4Qvc-Ph zvwF!(Ie$huaOAO;m!-=IJP`7BMaZts#PVQnLYMNo!|{zF)s7^2?Z}$vsL_qx4cPD@ zNt>Y#f0u=fjIG=fM*5hH@KzrnJjB0YCU+G!wpF?qeVUk3^h9ukF^fEARJ}ogsGd+oQb8ED6u!$@n55koRqJ?c}SbQy?uxg8efQoOk zw5nIB|LuSNRDBTrYwp~Sm*28GNuo*NlcH#Mg!!(e^ch6}DGHWTWW$7>`XmP*`I~}z zHubFh&+dUh(&wPA^AZ`JauUL4ETeUjr#!B_@| zXE|vdd|%d3G89HviRETY-9pr8{7HK(?u_C7BAXIoZ{#I&&lEj;{{W$qgQXQn$@18S9Gg|t7;e4^ypl_ab6RY zuN*RGqiPEgv<wuVUdZK?n3U3HHHO)El;c4}I~sFf@Fi_46RS3I zw5;!?JtXel9UJkZ-~ZlvLjUroejA_u&7XI=`l?S&|A`nIQ6*_qvQ$Z&PIh1ZP z9-3I>PER(nxwE5$m-YWpUQ zbY~%~q^DjXj2>Kc46SqhEJ0WHa&10Ir( z#dV(piyeRb5`N<6eh>3k7V(-p58(Z8dztEN)WZv=o&s4SUECm};4@Br+%?~@;}x(Y zm?$=ew8`;$Hd0#~uxO!#MrPX#9X^3oE1{ipv4jy>^E0Hr0dGH{?1gls@L)=GXwB8@%!t`vWg zX7sC%HumCvPsJFve7Zg-+d4a1A4WR^rCp<#A=O4Beq0~wesKR@?B2ce>L2jF;?n2M z)pGrmm%6X6GyR{B1;Xcf7ulwb8|#Ivu6TKfvKe!wrNi5C+w1Gk>emPt7MJQlRnDVL z$?}Ej#?FOyF0TGzNyyO24qtaPxr5Il#QxG-BVUwTX+^kOG$Sp$08vC($i-F$?ocSg z7j^B<9Uwf<$-YL%Mh9z~22d{kNc=`d7&#SPW5=*dHuM{Nu~Mu1q&!mXf{e>gSo?tm zP?qOKxvLS|#YD@;)Pa*&Bf--l>b^oq1RB|2`42`;>Uc$VltY5;e=xB$VTEGN${QcP z;{@@G$Bv$?4{_hKeIsUPrqHFOT5nR^BR)+^7yS~K-^)OOEF`cZeXKl7OUpQYbO9g! zCnCgq6Xa-Qz} z`nFcf9n3FDU-y03_iNb~az9(!%KGM0;*YcNH>5>jeMBFIS9?F2J;SlBNm@Xu-PmxY zu$_?o6om8%C6Y^DHseY(zRPdhsxmQ{&Hv6{eIIsj-+(hGp2DyF+y4U#^Yb0NfVRFM zWgktqgVS?(W_wOxBwY?9r{MB0xOwzhE>57O4QpOEX> zLxi2%w_)GjU6`Jl#`9PDdg*mm#(sbw7w&~ruC}kPvW>3!;>rswR7XRA1@Imz|mv(sdsApm72W%GVz} zipy6P@ygrw)`!blXicLNQ92E<(pf&`!B5KGq=i-&8zh&`E#b(0mvQ8g3;3De`UI8- z*8Y}P9>Smh;Ohn77+>B~NI(8oxzR<-oBtu9ANeS1YijgKQyn}TDrJ9@ldXZab}7kc z;V8jtaM@An9u%Tqni}@F`1RDNQv=#x(V@a#_OQFV38A@)Vkg3twCzH!-@V{v=mvqf z4@M>OX>ObDlO5lDCk2oUs4x>6V8$hj(b3A|eF$&I0L_aLk26Sk+E?UA{A+iIP)moM zR7j-N*NqRoO}d^M#daf=wX1~7_{TBXjn#l&3LpQXE@;%rWH} zhBGc%iO%KfYP0!9%1wf!-d7i2tC(O<^L2L~!2j^)-;Sxt3EcJ3|Ax|y1|awH^mSzbWq9!PvZLH?cYFD*}xcusUJ=x9*0%BN#b$VPP4c`rJeHKy%~%Z5>0z!C?8>4jI8QV#N^9 zi2@8k{n=v+IQrlvEG;tbKK2;C`tXyrGu_fe!jl6ThgR(#0D#DDq-aOi z9Zhn2Se^O?h0Gp6ZZ8gKaEqbk%mUO7jQU&Y%!`^HCv7a`Dao03p0IEzyOf0sGFx0* zpK*-*rmbu-V!v4`eY~Tdk=rU>OptyZ)_EH?*QH|nza2MZkI^(K923bVB!e%J;TCC{TKeET;@MmB6% zk3;+Rwg)7ymTOfQ*GG9CuUT*j-JH)U?EHWavYH6S`k;9hajO9&Z*qN5jsLV`bYg*oS_X%E8yAC ztn1j%#a0J9C#(6$=;aFe+fr0U^E?;e+D}2Wn)9-@R_^4wlddU0C&Pd?xy?yn~($0KuWsc;@ONW)& ztQ|xkeUQf(5}9=y7wpjA*R%Reo@^|LW#G`hnIv``iN=|Z0vGtkaU=U+CinQg$zx>k zUh3~r-^uiE>Z16Jb^{hCKa|In=AKcqW2x9Bm}XZRg+AhdZ&Wh74cj=;nGEfCw@=20 z3X*KyybeG1KYtLLH_YMbBah+Ne)^waadDx=g`iU!@2t<|xKOq~DL8E(O8O80L7xnc z?Wb&@wO&4gN}cr=QT)`k?Z#JPYRxR3IB^Ci&R#(C(5uE- zvb5mXhxq{Mab8r%b90a&k)9mNMc{|e18n4=a=rq@Iaiby+j)rr{d%A!YuDy~<*~2iIv}KF?G)3}Nqt7o)=|L2 z@{aj+5ZZ@apiPR74en?VjAFsY4moZ8Fv(k9TYJm87?+B05{eu~gcnhcZKh@Qcv;`;yh^F8HbzQv_?XFMvty&g zv)7h)G#-ot8{3_npRJGB!0UO#{>~^VI6&K?!=$h;N*F6k2gizj(<}2|e3i6yvGyT{ z70V$xYZ~$E`jlJ)QJi%5ueyCN{_YRG57UD=>)W@GzN=4%S*dOuN$Cvk0m8CEm=Toa9ETE?|=v$*ll z0jycG2HkrntEF64ZFJq1=WKzAuv(tmvVF%6>>T`U-@d*6+q`LWz4%UJEn1dmL*^(W z0@keCgpE57VR2~*_dRiZ1Pe`>P0q#0f3=Uqn9p)tk0rHyEF9~}LAP02jCgkn>AAQ4 zWSIF^16dwEPl9`$5QctpO~U;0UgtV+`q^9&md8j27PRe7s`gJ1lRlJ-R4fE3<#Qw| zqF+(8JLc@Q)z$fceZCasvsQ+d25JAv9GS)Hoy~E0RH^(&Hop;qNgkt%mX7Ii64xI7 zufSPma#3#<_vHIslUqu{6FM=JX9uxj9tE5|^I>U$arB|fxc8A`xNvbEFS}t6rWXf` zKg;pUC2)$eqHm3BWwCT@Fp=TcB-0h2g~3AGkq0i~)Zqm+z+AX=8Nc|6&(-fwzvD#o|3U6PQ&TRD=;_Srb@ zB0XY1TUZp@D1iau{z(a*#mU=a3AsQkDy5j~>mSzk6kJ>WrLi)KFAn}Z6vn6>wnTHy z(9RuoxsW6KfVFuX@0|Ku^Df6{<`?Rz>nOx`wvS~#j^-Lm&yKJ5zPkE>Kl5h1>y5)# z34izJ{sm4Qe^T)%m1r&{$A_Iv7EVG)e@ggL|CIVfac##*JIXiwIna;bV<_qmwsbbo zdoIVp(X+6gPZTAh&`wgmx!E;1uy4=c3$`_QNtGA;>tN5aJa776MZPQ6VNCd5x{TFg z$~BIsnZaUJwQ#j_w2-xT?;hN6@DO(G+J$xN)&*x|l`=DV?MLorQEXyz3OjFqLw$YU zlgBhwQXiTdi*c4lZPamW5d6Fo&5xt&!HxX|KN9?G@$-Rim&6(w?O9JYkCVj6=oHCa z-6;MX=ObLg5p<>9E#H=gndB*<;ow-b2gI8;^$U5z22sShdf`XIKGdzn0n(7Rc9C(_ z$}Vln8dlK~!byL&upHaj#+qD&iVp6#KC`)->N|iLUc?u9NxVYJ$eOmiu9_xnqcxyT z40Up-J_i@4k6x)?$9we5Q+53v`}bn;(r}j(C4ywhcj9kV{5O@ce3I7U!cr~gli$3A z%jcH|#?`6iFMsm$`07JXV9m@F{+AzoZ~e7)lb*Zi# zb6wGkhvaBPu?|ybv9dVHBR%ThNPU#qRSw`Bz#^d2*9Ve0v=_ePPpK?fzvZC4&ySIe z6kJENte%8?+>XY&h^DQNXg0MGJsv||FRT3RPz}!o*-E;U#`W>XQ%-5i`e>XT`i{b} zxbrL5JBR<#U;mTXw0;gJk3NB4|93x*g)8&WdT?rsOr}gnADg7)Ea7$689WzoJe;kG z@?8NNsOK1`61^+r&sZc-23;jH* zn$${ZjS2sPh>bCP{9Kmj!DiJDQEc6^1^f5y!|vU?2jkbQ*pW4^JR>+7UJn0n? z!IxorZUde=a}KA@U+l(L^DG+9OBA!I;YWm`If4X{hIY6EYXswRXY%uq%wOF+Bqlez zqb!<-Sm+SS4PhfTdNlA9<2998&LXd6ou2o+O)ULZ->4fkzA|kr7_w})$qj_+tmkHl zZ^Z%o+(81f#TCAHuO5=7V|NBhdoh+1^+&K~dI~SUac>QK z=J*1RJ$kv`p#>vM!zbGHp#`^xwd!A+vu120pBPwd@e1So=>;5r>~g(ub@It8SXx|G zkk!9W9zTVj|LAAyLGaygx(#oC{mm_3YZ=)It?}U~`=UC=NS~}N!fhVRI^TI`+i&@^ z0VVQ!7f7V&TNx4Hq99WvH&k6rLF>|7m(D1W@LCc}%gewHR=0Q89MJUfY}=%#G@XbC z0vSpj+14>i@|EL@45Wo+6WJx3vA~dY?4&C3d<4Y)v;(u%+s2@LRWkBv79(ZdVtyLF zIX+(2NQ{2kc3k1)PtwVBvT^78CAIgNd{PboPM?lHg}9k*wM6;=^vK6{?;y9(F(*o7 zm7fi72p%@p;`yMHIJU9ZGHSDM_F6`n^@rv8id*;MfBN3H*K^t*|K2a-p|5=&&!%`; zDeWIJ0wTLb<5TupxrDQE9hDB(j%Hn}m4y;IGWKL0F#Z@Ak7P*uSk$)=(5pVHpQ=A} zVBg?Nw;8OK7kXi=mKS?@iThYQ#a3rzZQisAhYlXZwr$(Se67%w(MpD1^e3#_wg($` z9m3+^S?`-q9P^6+@MEoPkh^r6#SEZ(=5=aWd_XM*G%)Ra#=$txf(|Kis)|Q9QWg^Y zT;32REzrDN&PzkRL3$pP{49-DPD!u17I-oru;)-A)3>>9=&;vO+P0O4;C``LPNMCi zp|m6Pwb}&*t*4&fwd~paE|2z-yNH@Lm)`{Om+tJN&IWz?QFEhWP6{muOpHT}vR1B|G9Xq0#bGRHpN+Qs}|r)u{!XeBw%drqsg^pTa%&AHn7gYq4wd#v#>Z z8Z2-v;)#1N;=;+r0h~=z{jx;okm%^t;eC{vHdl*-#jVP&+qZKQe&jE`bF{UULoSh@n>u#(k{l6^CGr;_Vc;XrX#H8y zwe^u#%d{<@{H&@d_~iHQCbnVy=53Kb+*|%^@L6%;5HGuDM7Hp|0VttG2Fu4mA5N#a z)+dGsBHL=e*gq8TEk9Wo#cD>&!&1?97KaRPdB+LANOy@tA%)ndHl|B`$Lq|FM$-ec zUt^4l#JBdaGDmi2#Qx_{w&q^;JBA-$HJ^xY+^@U+o@C_fczb*(Tu(P1>7offSAeCO}OPDt{df;%*Ki0mqt_ z^B8NeW|xtjvl}_m*BD27a)cupbmAxiQr^}^lAdA6Wac#%bOjF{!AhRWUIg{4b}+uO zNr?413t8*>pi8hsfS-4(em9#1_ykENwy z-B%xa9H-A+!cBX2V8^Bn3U6tiarEKKcm%GqMk?U(2*M`n7S_}2l5}e)4khz+-CzoD zcaJ@MK%k&aO-iPXklBO-`f;&xM}u)6b$z^a_gUf@=~=qhTr_<$Fw$O;tusCvo(ujj z$Df6wF?dVaqgW~RF_<=aV0f9Qr^kv;*UAN2Ha@AqBf{~%%KKLaQ5r`gT6$+0LfM9L zv8scCv9V$Myrpdm73(P+v&+SQaYE?#Ujr9Y9IqcmG0W)Uv4dgpujJ9SR)0ITuE&r4 zjSpgKY7%#U_G9?MM}OVn+52o9i)7@24oGCrW7fw+w(C|ep0OJ2HyN8i^&6*h;I$(dD5CNy>psX&2Twi6J*Ti1buV#w!qL0lneSIC; zVeQ=9U?KhxHf`J(?#9XvZI26K`%SOL`42~+LwQYtp?I*DrG^o(G_qyu66!wN9bqK( z63@iO*yQ9k`k44_evyz&pr~JUWN-R^Fbx+E9A@P zmT>&>d0e@;tnmNfEBDp|&zo<*sa}YZG#cTTmzHti6yxHlrMhmgP>zWy8mz(({-!4| zJv%W-wucs>!GhA{L?>h|%U~&RxhBY1SXjpVg=H*W8T<_v$kd9t?FmWOzWd?B_&2}x zvHI>Uuek~T^Y^|JesJ%slJr{zX?fUza#)+&UfP_X6J{wv+pprNEDPGrzh8go2yWWHy*_7*l-vlVs@tjQv|7$A!RLT3Dc!Ulai{XOCItOK=}Zn% z`=ql72`Ums%G*8olhQaEXwg%r2U4q>wjLQ;ws?BJKDuV1leC+rtK+A$Y;)KAt1T_< z)7Q_UcbE`8$1l1!ec|61PT z!bIbrwX>H&za%QJy8f2)Vneai2ja2Hj!8PkGM`%eNq=fQAKMhtusaWdcfR3Py#FnC z;6tCh2fzN){|8?2t?$9M-3MI%fxI5=QMdBhvED{V>}w9&q8J6@Sh4*rkCQST1b9f~ zDvht*$ZTnI%99j@a^I1@;XqadvRA)OxNq-nJbC!&AU9gT^HyFeiy<$xBHufCsTPh# ztCwK8PUB!|Y6^Sz?#0ZB6F7D16c!g3doc2BYW?Qy(0nKTsNvv`P@K>@YOk(xsDV4Nyy1L zewfPyI@?^sm*6yPX*xr1%|HRMP2 zVd~OKWlxaZNs_2IE^xc!EZCd0pixHK4_7A`X` z4;G>>3}~M|as^Kh7RQc1HjiTuU#@x8e-B>9Qx6UQjy-Z2#~;01|BB$Hvr9F8HXd^; zxv#x6zkvVq!=J{{6KAk~ZVi6oZ-3Wd^?xo*N+Y_`;F_}LNbsf4frKDXkiAyZ{oAG1 z+Wv45lC~Zc;p%)+PSCN@K>3BPj_R=!XYr#y@!xRo!%x+{%G%I=0(L;rOE{4Xx}Mtm z=oPXkWXQlroy~W48`ZkA#+-CLCpaXe)qPRR!m2(y!-z#cl(fcQ*t0M`maG*#A5s(| zs&Mi(ZPDv^Hg-9r2tk)axQ<6o$H$zP7Y3h`Yry-nGzR$bK>y2-{gn+5a(Z}48(d#c z0Ufz;mW_v&pO&+13)voht0m{9P8Qjxv<#7LDg29ncz}?{wjE)}_yw?W)9@!{*X-N7 zI96kuTbb9anZn=u;rC(N=5;uA>#e}xyU&% zohN#D!|-nKG^{+$ET)n1hq=#u*0f98S`LJK436p=nj6-y!>%3M2VWqH4fZdE9Z{>h zzWU4R!lH?jReL$ zl-N)u-6jvtZpUshq11IGsu=$8YEf9wkh^K5EbUm&9Og?^rJl#w>EZAMFL^!~83b00 z3=uhzl9q>(iCEgN!5Qji=R0=uqg=pgZHw-@AMFLV!uyEn+<>IZ}=i#ah1AAmq+=Bqt)`|mY#)? zbV$H7Kgyu(tA(BbC`{^Q0@Zej!Oex!3wY|0d2t|n2XXf!PvG%mCvj-!Hr%{trxR3n zFnz7+Nc>GO+-uKGUA5Xtu>&kk$-il>jPs$-eFdMn=Yd+czx93Z#w%~z>w+?(8@*oS zgPI+GMqHxKkp-8OLt@zl5G$V@6k-|J$xEu;^R^FdRDk=;mmb1{j~>UV#}{zw$UK^F z6XHTn7JF|`?(sg?=baQgTU$qY$4=_F02_7kXb_{IJ@ZrM6K%1Mf*rFnA7wF};mCn3 z;;aWb3jJtxkN8=8X&K1e>(ccF3S~zC4=1BuB5vv(mp}R2f*y}Gw%M^KYL5yB_qI=S0Y8+9C>>WJ z+Bw0Od5)Azw@R#JJR~2Lvb{83BYE>zmzBN8lrLm zis1=`v;~fR4b#bBc_&5g27=+y$|V?)QKiHiNxLG;v2P@Tj2meyx$wpUS;d)tz_ZSm?({*OM*1Xs00u@b&2b!p|GeIu%bgwJBVRmF_ssBlTXg$ zShaYyxa?S0i$S0K+I^T`Sj6jZJ%lx*a~NEwMf@vtx-L}B)Ul%>p>4fwtIDy{XYrpt z`q_FH*6la$#9#Z~x23S&h#UrWxh_gsqdQ$^^`nG76?ogh3uP#0)k3XhG4DD`_sO9wWd0hA$X*gZlg-;R?h^!WPwr_O(kCUaq??Q- zE;`C^@tG=e3EJus^*ei?M=N^!u$&Y+8~4AOD5H#fV7p1D^8y+E9;2VGmqy~oF&W|L zzQdx9(%9?ZJ-xVOuR(S;&-ga{=2DE<{?74I{|Knm9Jel(m7$|XF zZjFPNe^A%t0x$bjsLqkv+AJX1>E{E1TTHY#1RE&i9x}RGuN%xKWxuK+bYNsVlqkU) z)?Zmz!aWZj!Q7e|tQ|~775>>{3xoK&;$qKxmxK(GHj8UbLta~ZbbcY&K45*o1_z0s z;dFq*)b-k@QC}Rwu%o1X$00ZSx+yz3y|1loo>w%$6RgLqt!+Ia8{9awxqcOt+A%@< zSNAg659A*O@^K&!6wl085Rl$hF#IyRczhc1@@H9Y}oJf$gV_{f%)Mpke8k*r4`V{~2Wf7!TP z_O>3`v$-d$vtttk-_8%woX))xO-@YU;QqbO_`z?rtd{GptiC3CeU@wNm$|vQdJ$`- z3-ZDMa>MFCCLc7+TDbx} z`efb;s_0N7~_^tGx zdn?}YEw?x@JJ>*7drgKzkf)K|Q;VaI__jPHUw!@uJGyewLIw;BEQxm2S=iF^{yb$x>CnU|pm`vmMF|b5 zo5d?n;PI|KAH#Ok_x-`fx{OIZzi3@0&yJ37Q#Rp_g6(&i?wyjUm+wp)9j}_8()>gWX6n_LVNm@Ye z!%h}DjwMaEapv4@*o!Q zNak~)r`ug6h&I2d*X9M%H$a&8xpS!mW3s|ZA2Gti%Di~*Bk3|K`c!UKW%F3?;?4_K_JDqJ8-lPC2K~V zBhm@T?8Oe(!+062Pbh%9d}R@5&R@dj^>dh>`oG$H4{*zpt332yH}t)IZ|9sRXCV}3 zgd|Whk`N&Au(7agY#iWwwhZ4RJR9DJ!R86`FxY%H&jFKc83P7HvJgQ=ponsqktS+# z&rGN3oa0?Sd!JLgR@~>#XhP3SSAVz9-c_qsUaRWVsa?As%y{7(aD4yyw69;Xi@wzA z-71`LEWeVFX|n<3hmZ=N$#3J5MwH^@MFM8LZ8Q2=pA4U`*Sg7KUHeP?pl|(*B#k^> zUX$Quye49ZX!i_<`p;r=oNndhA!>VKw$yzin$!auQOV#ldDR3)^zeQh_lxj(56DYq zlW05ueBSD_k<}imtEDeLB}~K4F`; zOxL+RW4I`uo3dj0GHlwkQN0!Vd0#H=)Ontk#oCqeye`ix|6aT-)6>(~ym=F5XJ!}K zW9SDfHeZ1yOPAyDiBs5n@K{T-e5qzTp+L=_1;)0iF^Y7~RpZA9$n890bdS?@_{`*i z1VJ^P*a6bevb-r=rH#e46%Klgc616Ddw7AOTcogf2+)ralBZepRCu@Z0mYvfMAdmu z=pRF6BZmSeg=73`oJd-d78WwT zD{yzT5%3^B`_AN&wjfjA+)s2Bga1zt7OVC?aAvT0bqc4BUBE)(%$DH2yY}MNdv{{P zs^xg~O;@`Kq5NtPIl3$)p!F}ftYAtF1vq`c)Rpar_Uy<1^DFPc{v*dRKf44!@qKT_ zRomA)4phQ`Od#xdh`%0}nrQl3^%6tsC9CW;<&keoOl+ESHPlys!0O5AmSNA)Zl z{2cl>IV!TA4Ry^$Kjkv%+dP2tM?FAvSPP+_U;CR*Zeq`n>iz zOEvOS?@6p$%M~2&mUhcym!L}o&PZC@fiD(pcTQ@+-2LyK$N@7 zwyePqfA^a(vt$bQeeu)y;Cp`2$OVVJU?$Vn=kKxno`UsP>!(p4g3Sk7Um0ER9iHc` zO~O!s&%=6~WQ7sqqM$9xQ84XNjy0=SV*Oy;eZiDxU`NPvt~@UmJ)Q%0eJ1q$Eckaw z@hOq@iOJGD61`)`_I5|s;tFAMdIrlk?r1kzJpA}U|Hv3a?HFo4yZp%#6WpUuc1Mqz zTXQ`2w4bc$H23B0h4S$_R~Y`lbifUG9UiXyMvqR0kEh9NLVeUxlW=uzyb}5xJ5eBw zqmwlNO&Ne6oAWu1(2KlhkGATD6yEIkGkq>*OuxfPLT6NcAS`U>0^IRz{XohhZ6bYg zLh{0}>t4zZhK-^8)(Kg}K*2>?Zfn18F&9CsaN=KF`Nz3a3wZqDGuZXzlQ=P0NZ^23 z4mvlbIkf$M{Kcnndhq$zUh^`nU9l`Q92;DcNjm|x6LWd3f+OH9qS3T8&p&_sj{ETa zKmR{)-(!!r3n>5QhyNO0`PEl+K{osw{%>sJCcQfDtQF%cf{i)!CvM)q}N*S;e-bM^wZtzC_Yi3!zu?({ zw6u}5N%^#gYK&Dv`>0Og#ZzSC5tUA{sMR|gjDXjBZDRzvLtIB5=#zV`%k>%gTx=aF zGbw&84lh^rRfPB{j15j&Bps=fNcI}{vEMU%tPPWEmC!yQYI7eMzP;aBSXTO$@{r*x z;<0?axA~^;aZ&27;@x$YPb<%mhwM>Oe?E}Zfwh&Tl|7CIK~wgy`q$S!*IIwD_fb3) zjL{?2MHd=J6r(aZ>+$|Zhbw^Di)vgQ3~7h$s+~#na@#hZSCy&lv%WT6D56Q8zngVVlk7m)XDk{ z>(*k;s#R`>{H5{&DVG-Yo}M!9H0p8i&yf;x{Ve%Z^H#!bTedE85o^ff>h0IJpAYXn z1YTI^9>;156|j*w#2!P}TwrL_PvS_aYq+u?Wa)Ic%in15>Ba~%*m3eHd6f9<;!NN8 z*v-i};8Orma9#AG77C?o0#>~ZQS?=|33P0C&XKvu#>(h`b9)_)|7EVC##K(nZ8Gyd zs<>LcNP0r$M&Dc!UZ6WLd95R^?}{{@WI>e!kXptc>RlSP_W*xtl9veCoaN1 zJeD^&sB;$<@V-yohIjq<_hRS1gIF>>iGTThZ^O60<)xUM@VjTmO(JvZwFia$?c|nJ zJExe(Qy;>4Tsrt_UF4AHsf(OC;~|sf?g#e{77iz{Y0XO4wy?m1MXaKwsu#cp1}Qog z!Um#*$O1&_4bZYixDeLIej53d^wEe$bbb$lHURF+m9tZOcf1E_KyR8 z5b%SZc69jSonIcG=L-p3pN=DZmMa@ql=SP%v({Eota_doS2F!%zFh3wod5Wv|L`ri z{)&w_ed+{$_dotP&YV1<__MgAy)EV}M-Hv({iWa@HwR!xBg!(ePyN47k2V*{`YdK` zi|1dyWPp2n%iJaD#^bk_#Eu=ZZ!|76_TIdC16HkEflKA$D~wC!Ia!|QBF@FIkoaU4 z(Jr!ux7nq$*s^&urbchPAC^4puf6<5povNBKXL-6&RuYiXSIj3lNh52dI4y3&7*4; z3ERy*MZfMdnY7qBgaRAUVKEqXix!4AHvL=iSdR-N_$Tp+g3qWxMGn&KFn!tROWLLTFnTO?T~}iV!&=v9@2wpSsqWs{y?h$k%Q;XjUeVUar?q9b zD8_zXi81n6p4Cn~j_0WnJV$5={){d1vRRg7Oi(O_cy+JT9E)5P7H^lqp)X z=&*qQ`u>mM*vT{a=C64%uH3x7gDC%#!;GXYi*NlvA@%gHIBLtj!$@BUr<_^>XThU%wjv=ACcHJHP$w++%EVqFw4Zpq0}t@a)>F3=$@vnsd-wU-M~1b7YwAV7&Ts5%LcE0yO)=(Ul&>iAWy=zA0;_~6_*mm`)_Owb~49F((2X9XlX}@IJ2qu zv04v|w_y&KKSl>g8DiZ;@7fmC$V|c2CP`I98Z5CTq=t%m$Y@Umgk{mp3EZJ#j=A>eEXi8pC9D2 zP2Ce6evPeGEM2u8^Q$-E#F?`=bo@kHr^XY8+9eb{0@aO8Tw%Dt2)J@Ec`CvPM>MZe zV>d$`8m`6wGaz*12buAK)Q6(oep0>e>IDrp%oQEEGmWT!o+|5#zB{t=I_b-n_Ysg< z5F*Wwl}Fi5+)Dtv+pOS?WV7=uR)kEQ=_kSDZnCzWjBgOad55JH5#&GzYU*JW(*g)BHjVeCB!$jf^11PAg@{ohIa_dhLFpNy5%8S-Sb9e0c8Qk;0KFkk% zWqxi}wGS_8U?Yemm@g7pnl%WcuOm_d^!i+6=UAVt`cMx($)n^o(zX5KRVYzH-~X@a zP{4=m5$j6#fx;f;34Lw(u>AT#fE~VwFA8YOglTxsv$%;>^+=mje*s zhvH51SD>STCi6cXg&B_=jWO<;3|obg3x+J_HLY^(GgqJgk>C{p{+u`J^7)%zeI35zt+xz*$U2XY{QiH%eYbrQ97ImP zjraV~G@u#|0G? z)Pt*e{AT->O<(y=tg$;X#(Clky^Pb}rE+nUi`X<&p$(}DDp2Nt`qR(i4RQ#uvk&TS3<+D6= zxLmrS>YI{%&V2wdb~kc~w-9pF&0N*{=8baA?yKfdytlpTCAfOaI%K%m{a>*Lc_ZOs zF`Nx4Jbw5Xe)jj?j~{*a@8gb#9&2}6z5TVf;3vQ9+whWWw`0Y+X}@~h_14C+P?2O7 z4+p&^3?u&%;9=_j_KO-JwvEK0F?%{TK>?9XBscK^)G{bIp!4Y7LwIP{L0rCh9hT3| zgcugiFQ|yf0?XdlfF1XERIQIaCr+$D68xqwCpaZO>-T*)BRE@!q@Bm~i}{3N zbq)-afwA^@?E2G7qKjvHfiw8(XsDA$nWU8S8!TDFPFX{_9IMSK0omXgymq{i&wlwF3U!AYqwY>3&o9H+s6zmKE*1HCYdTjD1jx{<_SG{S zJ7-ij63SP*(17p&`OY6G(NUlW(qv%gZjkiI@ahP}`f2;f*s!pp3puZ|3&oNziO11m zKTm3|Cu*m#TgQ+_&iI{=de}?b;nP0+hf9SI~aq0}Vu3v?J{eONt{^{G_f|WCKSh{=?)3X!EWU~%pDMymU zII0UrPA4avF#Vz0^#5dV=!t8LOY)WJFLG{epGwurm^q=8<4a%Oh4U9KVB4D2?PClO zbV_N@VCyM_@$J;pW|N}*BvWVmqX)(&4U4nf+ucaR&tcC#-(F0cwKoEu7e^!a^$7ns z*eao=1%N#;iq!UiJwvTzxEl~8}ON~kDkAe;VH#Ki|9WtW}}kz?~BoG z8&|b&d8(h3$`kSL>--KqKYszD zEELn>Mfco!S(c_3<=p9*s&g6oa(u1&_VMlMR~MV0eU zj_MftJTlTW`sN+>@y!U9%;d&}CqeB*>tqXfw|bq@#v0z)9RgBa&E)Wb-TU$G|MhWP zSYZ5(*S!K8SNmV_IOq%LNw94LviJG<{^hedhwFR0YD!NExQpb9 zJriM#gpK9nRF5(CVXZwEPQu4{GM}$r&j~N=aAh5%IYABFA_Y*ep+DjtYKpe z0WTF-m7g3g-NqgE`uJ~w<{)ASdE81q;vO(mZB6CT+Sh(stgQN0O>v;}KAbQ(5zvx6 za=?Gh%hhWn?aYRNk97UM&IsO)d_I1yOnr5A)R6kG*A=F4$chtvFQMY|kF;&r(3XeK z`?%1bLmJ=snj7&QZ@UHW{{2tlqwoDyT=UXblIP?0DDp z59DWPIVibTW1#3O`EvE}x}-=RQTleESsv^Vr06nw=PG^0@-90Q=X0obk;v*a=tBvu za=`{h`4^kHj!>wTx#+k&xw`;>-<*8TFMkV{wau?%JSKB3;0j( z{Re??rkVji!&;VS%{H@+IzY~831w40hH%q*LLob(f7e%Z9M;YQZmB|lF3 z$XXJV!T?tNgD8Y|a*em}RF`PTV3&NlL{tka)f=ku8Sx z?63|8Y|VeI_g=|Ce_6u`Ex`J;T=@0A6#0e3B=zp|e#~c|uK;$zos+x~$qm6xZ@+S z>J3|aY&>pMmsE6rAhv_eosmsA;9s_m*IDJH=sBWe`$@c3Cz^wJA+9gC$G#VF9Q$y5 zpZjhHHvrtQe(k{i(|Byxp21vd%vR`Uszl!)o-^gi@Eym^rE;mfu*>4(V(HSQSi5c= z_U_%={U9#OlKGWbwrK}W3>L8N+kF6A*7QF@t@64^NAgR)<&MpT{Q_?X10G$=N8bue zS+FSdWnVWIh<1`Z8U|VL#70=ldv~9hAex(X{0Lq!(j5hZVmICey6JSsevDOYaXc<& z2hGbx6UjulTaFb=N@hDJi5|u5WQUO#TDEM#Q}v5?5?wKS!U8z>Y#E2=oN#ep9wH0)(>s$!ETZkKKN6d;QqsNANxW;n(om7hQ`NUA`4t z)~~|mRVy(+JA>(|sgCQu^uysbtA0FK**JFU3?A8k2wxg3R(GvdwtyS6zoUzVt?1wqY%3f&`}FXZ!fz426zlVJ*+u&XqD*we^5;s726=aASnu z@{B}=N}Cmg&Kvfu7oUhYX|MSGH6^qT9X*MiyAEN^vN>#7y++B+5(`&Kv0qerMjZWq(NxJ@>9&gqj_vfCridXX!!$*B3U&SNk9xTA_`m=a>QF6sOTi2~!y$t{A2fqd1 z{bRp@J$oO;um05c;~)OyyD>92FY=epnjSy*(D89)dA7Ef80Buv*h}KEIHCb)-9@;w zn22(Qq!Hcw%wzeg)<@!Vl;E*4$lO@!?L0!q7O;BdiouUe(|Gi;-8g;b44(D!OfOzN z>kDSjChbe*Qn?sQo(r?Ga^*^#Iei+34j=Z|1~I;N$4%IK*Jtq1o&$KzO;^^1qw+a| z?Q-NOE!ah?A->TkYmQ4FyUU79@+U#a?rteebYl?r&C}u3WXFb5NeLVW{CB7$y&xWe zt;NXnFEYt=O9D93Lr239uw$T;6&khxMstIRwq4kXU^~58n~xgZ?mdmB>x)F+wn$x& z8N`(>S<7!}v7sgXorJ$zSvwk>&#~Gf?L;O91Z?I@3RgmBDg%n@9(nu#{?q$Dh_mM} z;PRJVfs;p0;K7F;#{;__$K+taXyssmV&ke6xN_?{T(@-#UiVekV8z_h(Sp__@`nR_ zXq*@%pd%+v;hsnL;ERJrt54kZ0CpcdjAJLyv@7e45!S9;hMTXu9N+wk7vtuuFUQi^ zB_YP4F&T5KreNRtVBzg`<<>7S$e@WPyqw^(^%gej*M}=g9^|mq63I8td9q-Nc(D`e z2Or&!{fCa>rpvcr)v~3q@^o~VLpyl6Y#w6;PXSMwe@g9H+DePvz1I0tLI*)zZX^4+ zQQXHC*&n8Vh70KT!@eY9<&k|e-WFdUJ#3fzW98FYzsTVqeI;?H{ecCPrUS6BPygd| zmGAzYA6Z{{AANbXvEuE>N*lQ!<_kbTyi>!{>)TyJi>w2z?D=AtzF%A}vvw(UvXAxy zf1mrgf5cSwSj=J<0-DxOE1%iREbJ0jZMSuv%RI)Lx>vvKO8nz@ycR$Ci+_qQe(X>2 z$v^o`y#Cw1tLuk=Zbp?|OYMuEzLd1uM=K*8Nq9>5uBV`uugH9)<%v0n zcE!_Ydf}Y#iP6S;N;1ZctMrt$$3D}Sb0wGkb6FtzN~ezmW<~oE=TiN z^tyHHaAJ_Z&YnH%+E;A33X@Yy+JoGi-KJCJOkP$WHIK3wA4tQ=-811COKkHq^cVPo zoBh}lKXUn@|@b>Hu1Ck>Nq~ld`zS#zy_s_&S1-i-C55$I=SrkTxhd3+n@< zGvS{qq&e^$nIEcL8U(+ z@Jk52!Pu56UeyM;xs>!fQ1x#`i>i*4e9*mhV*Qot@v6V^ z%C>&rgZuEvmmb06J0Hi111E6zBYSYy&fWN9x*h-d5B~xy=I5|^?Fy`(pU3nlQMAm{ z@Z^{Y@-B1Y>}fo-`v49dJBj0`PPdN@Hf3V4NVav|s&=>6>tB35UViOmSiNi>lamul zSagc2qE9WE!0fU~#jZ1H` zfu-*QqA9oD^=SLn${p+1wSx;1Tn*>t8CvfZF&|K{!`h5Li6xSw_O5Udj>@lYi||El z=-Sx9_VMj~l)G!G1N-HR5c{{sJ#6XYTjG!~yhs@k(CzcFh$b73bsL9qO9753cA)CH z!!U|ktxTF`yo)3D``81c{v6VZbug}91Y6;? zk8{u`!!?BG1d<)Sh_;PQZzGAVFW*{Ujq;0^yWc;C*HeQW{at_kRru5wAH*Mh_J^A?Yrx7BcFYm^|>Nxkd9H$Qi?c}VX@mYV$_^YwR=o%N@r~a6@RGwUU zF8c3N%k%W~G}f+JgT4Fqw%=W4E}UPz5mU2sICK0E_8dNrt!r2M@meHeHD8kVqfU0L zEdU)JMmQU^Fc5g4S|v+0PN|psr*x%!hQy;{|y=tNvVd33#7_zjS_47YJG5w0w8G3LohD z8{QQNo80R0=5MNhJzO zI{}Z3X8FksE+L``v**K4er0>)1rc9nn?))hAOQ zK1P3RWw8_C0T$!?Y~b1H0|~AI9er`_i^Hf`tNOUn=f>HR4kqZ&5e0X-i0xu?xz_VlGMc-T1aT6$XN;~%lje9&qk+p%eJH)YxU4F1LUeiJ_S z`3G?1(0=^Zzx!wSu7CdXn4Mpyaz?!4tk7Y{ht&y%wJ}C{M*=?(`*_rsLr!@t&EiAk z;@Xctx{oeVJlTafpAY01;H9CE7bu+ad`JYe?O4+uh`ezo7~@7~Yh;k^g3ZLomVIHGz)Zv@^u-!p?wl-un<5svYrdKSZ`q|w2OG~>n@ ziJxPhi;R#VI;xYhcm3FpEjHU_dWpt)$!DqSo(xO2&XO1UlmQpr)fNmFEn0K&9B zfnct|{W?K_R&HY>gGcGW;G%%0+!1HkRXDxNQA8T)lMz=4NJwt8b`NS0kgFf~mT}f6G=+wF_eQjZQ%9w^0B}YK+`5EN>mO^Au;n_(89zpp@e#FY+J097#Dx6Bi8HwSfxUwT#|hlHbxWwd8kDTF zZ3oE#UC&Eq1I=69ChzjcFg&Kr28(IegM#NU+wCInvvxRI@$S5O74O24yxI83bS3Fa z+;Dg`Uv}J}1Sim+CnXk__>ud#)usK6`clAiUw#6#T`7d~Up74s?UT`CZ8BeYjxaV4 z#5Rb(#9N-Sx|kCWoBO-R;(a3W$#^GFmdAMv9}*_>f0+lf{+ZuIaq8RreV;th0z_Y& zU3bMs{LAlqD}Laoe;2oY_$pjrJJPe`eo%4l{5hOGcdlLBI(6za zPM<#0o(XUh~qr)wK&3BK8)zPxr|NTJfc_llz2GM2YWtLku(|paB{;#bU?b( zF)EKN6k*$}&nWo-x1cC_1~jj3=b1@a(L5oHYBqWiir@g3tb?Ip+Z-t)hwNl^R4T(q z2qmFr@#&|2^N+CWz!9w3wiYk_rkAz}z)Jei7aqdi!9vBg+c)8RzvYeXg2n3P^X*?& zB8BCtF?%RS^KE~dZ9W@bmad$DeZ+w~yt-cEhrur=khLy`mlN5_pKR$dCL)I*!L^5t zuHo)0X6t}C-CWLb=hy5zbPSK}JB*dfmtyPs)d2=gv-z6{@NxogC+e|{^?(rjSH*6> zoY?lrXER?0Dxa}GRcmC)zYkAFQ^IF{Yv~~2FW*@(epgk5PuoK7M9iZfA$#*axuU5Wk7i1Z6j=4<6tk%jOPD|| zxj0f_Brjy-k$u%T!#*#|U1*lK^2WPzU4&H!jthAC);cLuIe*E@YUdH9!JPxfS_V@M zDT16c+C@w|rdxQ(`%$GDvx0?mrS1{$kopn2lZ&m&4nkfl3kSB8bUS$I$AK-Jy(I6P z%$JA%+DCqjI$@t;qH&z)iU|*uY1K{ zqA{(IN!$?~CxEGw)DYZKEBcIwlay;B`7I4?a4W@SZq>t2b}J++fnl0ZrQ<(DEbTt@0#o7wRy8A5S^7)nR`!r37CVC-Olp8#6I3ZGkK{IOs9F zW`!?{2a8X_%h(!cs|;5IL5`z-Ou60Sv+OF3+^?fNQm<`{aA=o!pK9#eKpY>7%~PJr z5MnX$W${tMM}M5K!z24!d9*(>?BW%TxVJipH5$bP^|Z6|u?(-q=^^@jwCHSlFmC?% z_k1(9Y*>jS`}g3tf9{{*?3q&?j9n0kY@Wrvn(!c&Bhyjl@3LL?bG%X>d6l;uW--O) z6zdDNPUa!)V_Ls{oT4Buhc}9;ehHz940_x~hF_W|$bzotvA( zhV^T4#g1*beDJqv<9f`@%-~XaAr;2cUly5v=qt-p*g2lxca>cIk*&Q*;0wVSbY z#af&=eHM>Bene|}fZi@%={c0i-=eXrk0({)b2K)P#v3iVMDwPy$kzPFs4k##+(-_I zx3qPOIFc=n$M3L$>#Z6yC=^qVW8_h?U{1o?dZll`A68CPb^|(W9wCWbC>oD3!WGSN zs1uA7d{;fXSdd^8(^d4!H4A;Q;J;L{|54l0wuhuESsD89eN_Eg{o8}?Nf47Z?ch0x z4|qKW>To_p(WGRAe*y+s>3H=?a2DW)D@XMdL z2geT_$Jg9+72fjln<^iPlUSNjo1DT^ETg*ihUAXR=Iw)=B!i-U8y7)vk7_NSF!wewaDq4Lmwj?iT~j`P=T4lzuz;(#Y-o4FW%jNW-&^ zw^PB#2@IJl6~Ku#D7dzDnIC1oC2>T2S}%|AAi=lT64AGQlf__p1dbiHxbT>|A?|Vl zP5-Vh9&>NotUm!hCvkG`d5oz=xv4MCVjA{A&e~4KJEJ(w;?wdF@ocXN2=h~x+p{d5 z>CxBfwn&CPuZZEt7fyL27YE*+K1OA2R0ne(otFOEaTLz!=^YiV3(pOrVFPSS>EXTGj zn{d??m*dL8qSfY28?b8S@^<%CL)-dzUmVH0EbfYywEt6zN!qp90XAIBTG#5LS=?)M zF(F=5bE#Y^PrfW>lmcGZk28)h&7;OER;*A9-V;+xuxjfy?OAub4;@wcp}i)NGe~3v zsvi^#IKvl|p}vL9;I-q8%G*@wjvK>ErOQ+lUTT`;U1sc9Q}n_4JgnQ;ummo=TNANL~q5Oerz!ElHrM=l5J@cr;9H&5{^7I{I;=K3L0_<<<6!iabjzPRN9l zr_SKkyB}-suHU{n#4jh|U4(WLMfQp~(HJAW$0dIAlk7zTQ?-xRab)j|cS#Q+jJ7=l z-RKwkJ{h%NdwWS-ns2X5%VQQd*3Y6vCq{pK$!i7>y;-rqAi>QEKTo8L>(giVEXM6& z+7V3-DP=xYG{n8MBfOa%Y#$1)`(WYt;GTGJnE;tzXZG+9Q`y+jJlVoy`bfT_HrXEO z%;M~$W6%8S^Qm$E8I4ske#hhB_J@b>{6AiSkACic{NA74iueA)PvNFlya79|eQ`){ z*ee=^;yfVxRY;F3(`BTS*avl;gw=S9$NE?$)mxV=2X?fG)UT#de;Yrxa0o}xkrw;A zjIhdI><8rf==)|8+9P-9B1(a`2<)(PPJP;>5}J>?nEeO!Td3Vqy|AgL&h! z!GhR|<;&XhteW{+?A!iPXRq%nzm*}%Cq;IjBdxu?4s0AZFBMw7YGwP^oR_tC-~NFv zj^R?dR4$cgw={XT*@boF$PxAE^ZKh_irsg90*~%L+`hbFYVZS%e5+b_=8i}x_EEAH zq||Z$d{prSK}W)H+=q3FZ$HZh5wgT&U4aw4vq^aB@OsO)&_Te$u+OMtco6)kK3p{8 zc+5%fM})h_>DZ409Y2L7>(d4~!i|@rABCsK4;{yszPt-dXQpxaruCv1%yr4Iv0c%_zr3G;15f$^ z(4Rzfz1NH7%i0b-FqYrq!CoGA{WzdyWdS)q#=xK+x|!|b2!)E9*t7fX6xl`g)3Vf9 zwf>wZOoH{zn6~FSTac6e^Sl#bjO`<3iVjkjbh3B^ET58h|6+wcUtLTY2Os$YF9O=; zU`Bjykj59i$b!aLbY(3#fRhWmCtj$i-RKZNi3nP0>5)$1HTHt)c274y^QFL^BG^dj5)e8XdS zwU072fuLy%31}Iy(T{AAJ}s_12K58J zjOxRs-_oVCxZ<*HI5Akz+kfC-yQrrY^PaWh{qj<|R4y97cp4AKZx-8^%`d}|qeoEW zUA^PR_B`kPM~>s@$un5He9q@{p&EInPxOX9H73Y@hL>oZmE!{iG-N{L5ig1k2V)*V zJwh0c9qh*%waCF<#&8@E^gG^7(k*QSgbRVNIOR13vcuVzVg`^N3sr&RVGz%Tnu zl=|ikgI~CJCw}l3eiNU(^8qYbI*pgS^(DCBbvL#Xj}~c%e|U3r?@`?UnftJ0dJ1p< zx?2Vd6-!{JZPpp(WDSWTqDkYhT|Xu#{|ZJ@Qw?BlwEL>I>xodN{JxqfAw~B*lBLr2 zJOi9MsKgcZl@qB_LjtP}IEz!3idXl_oG#Xx?tA|u`*Gm#32a%r3L950Pw~lG#`xkA zF0`I}P;kJj^hX*ST$z1*JN4FUzs_L2-`H#0r|N+MToL~suF#EQ7KRUxDKC`vw{PRK z`jFPsTFZ43e}Rv9(6QD3Xrk388$1-^?8npR?d<-14w5vq&HC|TEMFSFPcJ(ANckz$ zd+Ei!6zx?Eqq7Z*m?87oKM9b$sr5g`7mriJ z+AFuM!@u~RZ)|tT+<)6A@S)%Pm3F2;>J#dp4Ak{3avd5o?({Jl9uxjDM|84lnFr+@LEBi<;sBrKjo__TDOkNU2hKN-6<%}I740sy zsi|o^yM=M7JXZ_h=_^m6Uo7T4t_>L=A)T3JD>1irGftg7kKG54 zYF5gB9ONB_dqIQ~$s{A2OUC7NJH`?Gm`4&&(CYFsi)Iom(U^G;>-uaQC>JDnXz{S` z)5*oc%tA1md)=8{?D_0;BL<>!PomA@mOPQ=SqQ8iQ8WTc+f7K?@V1l#rFuM$Ds2TX zyOEqf4FBuqKvp(^-=5oL^(pn^4x%r31Ojr58U4ZguB;%58?k?M_G0JK4z}QFb>I9t z^amgN9DeAR--8Es?;kAs%;Sykd^4_n<#mH!$R=8h?bdg(tlZq+^`X0P_S9Lt>V~V@ z-B*YRDF*Gr6sLV6hZ|R{qfSgVJFuq0)NdynZFguUU5RO?M=D+{=GPU;xx9eUxSs)=2Tl>;YHB&FtI&+Am|=e zX2N*OW2BsRNOk=IKVI4GahVR)d7Wg?X~Ai!_gvmiu#oLtPQ3<@@;lC72aQK|MK|a zohFpf%y^C9>i_btU*}P-%X!y5IKf#tfZ=3_rH_Yk{*n7ke;&+y7b4$yUDTzOZ+y*7 z_?zE!bGx(V&wk@S;I@zciOV%!Rv*Kj4_56mZ(2M>PKnDd{=nhS^=N%N<`06B=Er-2 zrYFZ0PI;>oD2Xlf;IXtgX|vd>-Rw_)lDBvavGmDd*MC`Gn}dCQY!4|b2mLJ`+1K7n zK4IwEd4jYUi@S(Uv&*b`V`6hw*yTI6w2v50JO$^4T`DiM!gx-U#VkVcvm;Bhm_D;a zzieUo`t9v^*@yNVKs3KQ8(Hu(hHgV|KN&NJ0{|SEPx8IKgM^9k=73=ZZzyCU{-LY018yKzB4H-T7=t1oK z(!-dWU4p;+=2y4R4`+-?7UJI+^IrXhds-Mv<|i>dJ29dgP0uP8c2ND?WeWi8;ADNi zCEuTWQYW+$AHZR9(S70i>K>F@Axl;gmK-)H&YJtP=Puy$cRkY9+7V%2e1~0jX1lw7safVl^hSz&J@i-<2`DJ8EY)>!+QU?SLMm?Mv^qD z&ycwv-f23XZ*u>m!$#=WSF_vtC;qQ*#??F4#j%mK~TsN+0 zAN6?aorR^;o}NZ-pNc*9Pg``%Q7?@3qtdUFVYEweer^uiw{FJe+qbrdzY{%CEk0k% zB|Tg!wtOW%A^OUL+b1Tle8qAVcWbX4p5wUl@xwTG?n2j_k|d$V1QN|WYGXeJB0$CL z5tg%^*A^J(jA z#u?R{1_P>X8|iq8XcRgnelmGDpfd5j|NhtTo)3Q(7kB|zy!;Bh;k*9|)?Kzv7)1Qi zG$PiVZ*a$--;T2<&*E!txC$@6ayzoZiWT{3?=)mo@B3xAhRn`2yRSxG8!esL$sKz6 zkLdSbOB^zwJglF9Cizpr0Fw6zTZV&OzN3Wa2#=i9SzgL@voLzs{d)#qcqVb})=lj% zkr4et&oBwp@{5EY*~i)L|dzo#5)y2_1S-m-dz)^}!CO6VYg*Y&J;h578mL$I{t#dPU! zy3XdK$onF>bFGuY7x@v3|1p-HTrgd?dih`x>#dkyI)gnA--|!|rGJHmg$o9=$3=^z z7iZaeFL7nQVBsaM4A#OAVJYQ1vTt9T^oeLpSxmmN{fF1_uG>DIIjAE;Es6uHPwRo> zc(=F^;*+_Cd-W3KU^p5S%3WY0`Wkn8AI*?z3> zVknGDWpU+&qp7b%Qqk9JOIf~rxq4&j@(nvMIX#1;Cr{z@xpNLhmqREXi_|sMJ{Hc8 zE2Dam1iQnk8R3FOftQbtb-BkTFGE|>B!N_pr`f>G1|b!`IiN#OJD}veC>nFZYpy)X zgX$@O2aLYS%S-|AgyFrrW{HHD zVmz_Qlbygsfu{qSUAw%uMw6cvw$J5_BO@;se-K-vPwq`ZyPEUS9@&po%jR(9=JoLV zVYGhBjeWMo@&;qxFH8sqV0kL}qJD8`f7Ny4*%MQ~5( zAN(o67x5j%q@+dW4+*Xee~nZqPMUvjdCiUZfxq`x+8-u9_P$@kpZ@p%Kjhu&?1{(+ zc)rKwL{r7U8zWYROt;qGDfvUsClcDy_BAf^bLXtCDY@2G_Ao%CKl!2! zPdn-p>D&4(5X+(|>OPUb_}!wE#*M_9jR6+6Uh6z>aY=tDZ$`WJ>MOBs-I~Fd>Iqyb zi!2xI&b6nXuZvakwmb)R6wVA5jOUilb@y{C*I|CmW}G^64towAYZV;MQCQ^Jk(h3A zh4b;Q=4gyIg6Ldb&Ky#7sp6tSS0v0V=c&9+qjpj#6|XRT?ARTRMe=dMXt!GG3G8u` z!Ak~K0mdlnHT&^7Dhm>CfeY~4MVGQW%#Q7L2U}@y_N1Ku4j=pRIof$gRtCY4v=8YS0*|z8TV}(zpT+h-OO5@AL%GWbgE?T>Y zGVsIsW%J$b11TW|>%r@Dzw<6eWo+{Vs>oar?X)_Q9d4n}f>D2MT zek^h{Nb^;IvxCAR>4|GH$SL4e4zRYr8ZQe!}&yU~wKsy`2#?0#ZDyk@>eELPuza(rlZ)3? ztJ;sH4^;>oXHdN}IW!(iN5Vw?ZJyF`u46!YRF)&i;LLLYcmAw#k@KA>$BpypjHit6 z!mW*eR`gh5Clmja*jieX0NBhT#z^d!3vkpg z!WY5y`D~>EM7p#*!n83wU5mBy5$At`&r5T&)A;Eh{8qgFmTPd~+}ZX#tS@}<4~H*& zF*K|``sy<|N}uRc;_LHyTWtR*mv9fPr73kiq)qTI6Ywv%VEDWNNExWJkM%bS`Vc(t zvQI=y^6&EsJAN%q`?y~gBY@3$ns)x!pv-Slubk3p>p0IJl2;omo^pkkpFXc~*e}!F z1WjPs@@2Su$F}y6cl$)c^P)T#7B?=Hi>CB@3nkZM%ILervibSJ4=}^W2x;)y9OT~M zdF;RuoIQU*?+9U$%LdnFF{W*2lQT@x<58W>DeAF7A%`4K6cR%H63?+%EOE2RO{`GC zqETZ*k7}b_4L0L#U=F!ct@M?8;T{^LZb7!QkrzI%MtNM?i$&kUw|r}(otwzja4B5-MqwaY|+;g^va8c zo?9^$;^L&Ib)1Ml?c8KAXg$~|%&<>kmTU> zz)wE&rJYzhGd)A)9~^F8G<<2x9;~q3^CGDE zgrEId?O{2@=wmn1R|FryRGU)RPvRcph;uI{q+%@?A)X5(cs80 zhVcD9%}Kq*73B(h&pmi-F6^VD^QT_GL%?s2H?|Z5J^3n*iYS))*9$3tn{yHgt}XZ=q1zs7GcMQ~3j`AD7P752epbd$xx}EsUz=#G|U94zT-o z?#Hfsc4Ni-QoQ5!Uo$!kPyZq~E}fL=S>Gf;U-KgHX{gER2`rf-)a2nOkrKZPG=sZb zYo}x(^8p0-ERM(r<2DZ4?DcqTl3xz}v@dx_lro)|JfhkW z+*|L-Xj`9&1}9xFzuHx5Brry{lRAiKSY63}(Wkx63mHC0wM2aQUNAVcR{Qcz_^eD> z90PG)K+yi8YqsE5e)4a(kBT>MB>cr6{Vwc#etB!LILwBiLYo0}-9vobQgk89iectAi~_Z)gyU6}0m zNkZ=XHa7xZCV3tCNQ8UH7X`AA`;2nF#o3%Gw`%2z_K^44rL%Ze3gIa#PZ^?1O6^t`$YW@tOb|#~!%%Oko3kx$ z|G@3-?yEPw>?T~kajih(5ogz&v|A>t(a7P^9D31a<|f)jEUz<-OF4$a8`09&r0yx@ zvC3F<9pSE%Acha#2wzq^?AO1`ExNZj038gRv{^m><>&9m`STZW)zejqiy3xJVM<1-@E%$GaC$c?@|Gi!NV^G6F$r162F)-us%DPN{ z2;ee5AyqTv(rQA!iAxt9^Zn=9`CLm1i@uKR$$}p!JjpAA1x5}yx3Lz%S$Nrxl6EA# zME+=DhPbM>BRv59c_WMMTt^y5f%QbCx$$Q@-Q$Lhrc4h`wUbX`(2a8$H_~F=3*`mW!h38Uv z+RF><5znQA#o_Wc!s*#LtlD~Yd%bhtq4u+l?U71Ye0Eym`Vozrb}ZBRMAvucRJd z?74S0mMxvZ+h2Ec_ndy@tQ=fdMZ|Bfi0Cv{Mu(zdwBVX^$ib@@p` z6_$cl`*t6o@(sj^Dwkd2(HbO2H`Zv2p6Koh5c^wTjk=-b$lemI>lgegop7phKq)sEgt)2ky7m+R{ zb_)l@@AJK=?c@5AsnPn7a2)ora!C2)UtjEHHYC%U*;D$f#TOMVKc#IxN5!zx zW-R!Qd=ZLYz#sJNDaF3({m8b-zLg^_bCyr6pYj+QQC_sLi_4w9&yWTyzWV6cQhG)^ zZDc=6==-s^zx3%W;?2_ihOfI3|KAUM3zkex;=$WLi(mY)@5YhC2Ljyj;z^Ak{eq2R z;V4IC_Riu;?u3EC5zS8`7|)ykv~)ebd>rIO;%NJp%~-p7ReMgBrh2Jd zDldTYG%emvO;2NHW@bcV0&6aRQG0ps?#G8`IMOH{$*^dvZy}>QSlIK>D zMaaQ8J_3@D3r0J33U2jSANz64KK2)nAA*U|r{%ZsVc73@=7d0plAspF&{4enn(g}Sdhl~a7`mNKMlwnpNG9Z)BS{Do*|WW7ha$vpeW2(~ z!ji1B_(Vk%KJu)u_K#|RM&*+c6wwwv5^2wmiwwA=+4`WKt?&`pUS39etMTy$6or%Mb2t7p|HE+$H}KtLKH> zYdg3z~ESyY2*4{9*JXe&qb3y|tuGmf) zY}B{EUlxN1>$#_`+-G^q!en;OVx84hp6g^?rYr90V^4-7MU^@jedKz@A^Dd+R4{PD zXJ7vGJtRzILvpw|=vNp0^Yiec{3Kx{4_0mjFhFd3>#wq&%sr6j-@bg}>%IN@`be1Q zKC@q63|XECer#&qO!ysdy#@dDyWfP_nJL`)slULl{mc(z_wHRdf8m1DACIA<`HeK8 z$9J2%>%r$9Ph>}lGxBu+y<>>%8@J{-GQaA>(}&OUBze<%XNM#9wzyc|w|)`pg+MMA ztqsZ1uv}?BW@Yz^yXHTFA2TgZ{lAs8-zRE21>+$heh3~0FDtz5TM9RAz`C`ojW<8R z@=WjIx>PQer=mPfJHwhsb(bz3o`co=*uHY}m6)DghJA;QVgJz+ZJ3Q4qbd3$pZD0p zFye#F#kHNEHHf>sT6hZv>?q0|Y}9TlWL_#4WIiP1VeeNOGtVaK+n0Y6`nG>Q&c zHi~lpuKoDb-8=EB>o3QuWpmw|1FcM*?z!@-ayfe*97!pcXmI*NY}f9ZG#s*YU3fI@ zoY57|C~ZV$(2Cr{`Z5f^(jWYIr{UCGkp<6&Z!+{jy1tWdgm9u+Z7%;X`lN2p;jqVp zpML=RAKH%%t5@LfzUkHN?kj?KGVdhpm_ne8?4AssQs+PG7n|u>8vIR!lQiA4PLwpy zq;RsB{zw@!-kq__p=qW)3Z^bd9gTdKN{p9XJ3AN(`2Z-Lq(#X^CuhPJ?s^pa4jjk& zRm*VI=JgIY8K0;@&FvQ;O;OU-9C2`MC$MB>lKk4f8Xv*>2^?o}9SM3`!}?y*m47-!M`jIDyjec&43Ywv%nvkO zLN<2DKGFCyH8p|n`#Z14-+9|B+C!;t`|uy&fBpJ@!b1=5#Oc##0>3aaK-<8!MY%%% zFWYiF0Ms~P`;MzG_^b?4IyNnq2ahcNvBGI=J-qZ)^uOIUklexaZ! zp0iXrxXarXra+*FuB7i{l1&D)+>yeoOVvmi+)JwBqfXBGkgq?MD_}jqDnDk zPRLqDl@x8gMkmSY!f5AAEO?dU+MdAzBj0Pq_7a!O{QeK{L(KSj=^K)prB4#I+}Rd#3kEn9jkUjLE*M7k$xkqRDL*? z13FbmamRvYrIP8&@=@Wa!(jQO9u1r(rE^<2}M-7vQAF*xcV`L1u?He#l;5hy1XQ zz1TP7IIQ`m&!e@^3?cL*f3r)b@T2d13*PWG*W%piQ~2Z`{1R^e^VWBOAk`94qNW#q!gihcsMAXE0CS zFj&A^yLL66aJjU2b*b2LG4IHGhWvGA$&&6IEFOHnUAA^>tC#zB?;qx`5gRU_Fw`6W z)R*%Sa5>mKd}|@;{KlfLv`aee9E*L<>E>P{F?TzY?Dx(Q9y|8J@G0||U}yL_x{!~~ zb*K$5Hb<9!;jSj5qqd$9o`*HmiykYB9nPFTkB@xmJ{&)F8sGei8wc}{C0!pb^bwDp zetfTbQ#_J~Z}m!=A4#)=k@$qLStu$S2*b2AB7YE_)MJ2D>2~l`?IrJ(m?I&i9}0BJ zmnNWTu#{QqfvUfxvPSoY2Xu4?Efa_yYZ_ADdF#VC_V_WZT{Vxt_olA}h1zCULrJ}E z@57*B^kgxa;twunS4_c9Eh1R!$Prx`=+bD`fYC%v_O*D+bj&8P$RXK$!bleJE*&ew zVc{Y8@(}e(>PGV4loKb<;1geXpuN8Ny35;N;H~~G)sA-ai|vG}5&EzTQkLghe7&w= zBZKBf+X2C6=1Y-ZA;FR4tFFz)j;EugliIB9*#eHYvXx)+5#jK~`+9#5>cJzw)I@yM z`#A0*{ZooV*I8V$E#tWlU!Sc@pK-d4dfD8x*dp~%?j!xk=(Ikc$(iG^S>%cFC?g`H zFZt`w>vkmR=OfZrxw5es#cYH#yMLnolZ_MhN0>-v4sgXh`-N44wYSdMO8!S5%%0i<-39%=F~S)YKHFr>AlH z=mC7;cYYRo@BGVFFS`yL!NKDvJ(t1{{Hms^|nY8*)W0$oJjNXh56;A?;%%s> zPk=iUOXBEWH~EpT$-4bZxc{Esc;qyZ)>lX_5Z%8`9XaL-@f(+=+c;LWeW zdg&ArF&4A2nT-S6sflPK-y#D7$)uD9>m^H+I-#+nVfATua@l0e2ogB@{8G!GWsB-t<(|;@_?BP5CDT5vlQL>r7M>h0TBeAa zmm&Iu;fV|$PWs4PW!p;|2eH&ozg|l?`{f%webIx*@~GS6ydL=>VD|*V`C|Q~gdReQ z)+ek_%lgds&>1w&y#JBh)%_-pdfubKTO&8CRn3^BG ze(7D`fo&UC;lz;x_@n>uLpZ$mQ5-mM5WDy8!`ZXvLVr>G!RLQDenfKVdcWJo>dpRX zK1#-AV}t%jb}ire42j(pC+$`?>Ayhk6B#Ck9|NFx&I=`<5sZ!4EJs9mtbENZIg>e) zMZ!uyjeHJ44$Sg)@)5s0!0UnnzUn-yIlE``#*J9HVny;}@d~c-V_)2Eb^!c zXd2;QldN5?L!4VM>Z@Q_d5AnjXb8kiwzEZ08sKp<3CGZW!*=-h0u3@ z__l{}bl*{2zG)ra^zxga2jF-zq8J0IL6{wD5RjsUZH?%`h_MW`Gcz}V=_L~`7$u!b zPd~0AxlojuO|9NJ<)=Hk_(UXsm1L(k3j27N=z1uRKeIyeQ6$jIXc3+Ih!Vl-67ZhP z`23xZw7amHL;km|TW#=VJx7|Ks0&yOp9JzxQgT7@o1e2$q?fWqwvhMPfT|OIwDT$O zahTvvWYBov@JI@t4-R}a_8*Ox9q%xBD2z`ZKQc?mcwq+<>0;;wkw3@&r1eaw_OS4! zP2=J*vBv>T+3xL1A+8}rUo1<=NG{#xzoc6}A|5SHy?+lXKgzz5F0G$g8kP?ZaC%)x z3FE#Mo}G+VUg=HN*KEI16Y0;&S=-q8NYShH74F~xDQ!eA;xFR0;6M)!TSwxcfd~$c zzCVkD5)W_6i>}#>ANhyhfK|)qaNw~A@R48tS)4v`qYwtwP2;#D#IdMj(#|PZ!AM+v zMcOi^W8=q4&{-uC38HJNbURx(0M*#vBHl4)cIF|EYX4RkTd{oU48Gy!>)Q8o8}5{9&M3l}{c+uZiy9vB5rzD?b; zhKq37g`%{umS6e=8w8}gd6~(>$bKC<@;)$boGpvN5^upb(Ge#ds>co<$Cv-|o>o!c z`Sq{D`jyKK)46)=VBTNIIYvCNb4W=FG`D;TcDIW)WJIT4Yv^baCMP()FU+($)>0J2 zQ4(21{JJ_y`e+@Dw@M#=Ti?{3IeP(r`S}Oh7UrgX)p{Zv<=W7Q?^nM+#eRYfk%G{J9TG{1k8`^~k-w<2pM~^wEskqcMyf zm-#-j$@Q^u z(^ts+9==Oc-SllF+F_76@t zY#w_e{EcsX8UD%N|0|eTGKKqZ{RlqsJ3o)}XHVnsk)wF{(Oozv7O^T_eXdrdcLey<|Iio73ZR?pZn2IJL6Zb52Qt1o)l_BGO6Ed2h z_7AF_QooC2&uSu?cG6gCs~zh9K)?M7UPlyMXE65BwXB~?Xg&PYKK;>3VSft!(!%Gw z6P)@S*QO&b~hBsZCjbS#pB?cHkLItC|r`y znRXFtbNiOUr@m0$^nBgvbP+GiUA&wi0 zx5?G!QI&H=B8uS1!j3BCqhNBEkRIQBrInjX|G~vwJNM$V_wK}vJ2v5l?Hl~qH0qp< zcUhg<2}K^ImAyO?8tRRZj{EAZdO@Ggjz(V;2vGP^j~BvUccy0V4@xF@ACmszj4kC7 zG!%cPSf2zCE*!ctf}I#Drf@Z6`RLvwc<}QNV#)L*{`zZf#@y^o#H%7(oNV z2#FT&Oe$2my2t_LL}7B8Ff%*RwKKFqIGidK?tu8w4{1yarR7np#j9)CB@~TO7e6u5 zE^g0((tH*UHLfa!b)ga+D#-zUNi)g= zz<6C|pS71hgUZ4co!O}D_hn0?w)MqHrKj_G7Ke4bv5V4{Pg0*5AF*v~#^C^G<`1kq zD~bC#;4Qb!@W1{BBe^&k`20ut8c)(4yd;bgW z|J(=LwxdUnVfUVWVDmVm&3RcIWO)F9v4hu_%~PcKj&qd%j53?1lgHTbDvKG9OGcb* z<1{~bU(~zXq+LDc#qfkMPgp+mCj~m;fDcOf(hKYTkD5#SOE~EpmbRwJsqN%d=9k%h z`$v?})G@#T{^iT&v1#K5P_N~lOkq4V<*DZDX)Mo`g}F;R;J%`A;llaB;?=v_N7~n{ zSdN!ndtLj(N>iF~>guh-Gn8(7;8C1AccHzOJ936&YQM|kbsxGwQv+fx|y7j;WNvR#0Ix%FZ>)oc?KW);(eH& zoW$E+c@rjRbbJu`T*-l4?KRa;MTZ3(Yx+e8os9@;@rp#fWLTap#iA|B>!se(E$G~f z17xF-vFJnTodO<%()A(qzAaJt7*(1Uk>bnTt8?9q(@LF6`6q^gP{+xI3k$gQPjAEd zGv{#gwU^^fFS}7O8W%%N)$1Ur#?p&06@%UTg3&}pQ)hFtbmb%_rlJEd%XOL38%GSL z9OP;=q+Z4uwn?6|2?ufs(po~D)=524M-_^f$T>(!z^;$J@B4M1g)KCvpS^u2PM$tD zSP9>P^@Bkn$%%@VEY0~>G@;vEU<6ow+pyN!A3#vY21jj^w5{Eb-25FLE}M zd}{pOmcy3*-5Hf02l~}AM~PGNB{|>#*3#7VTK8J#v7WUpG<}ahqR-v`G6z|%8S%Mr z8dr%-7I#3L1$Dl#Umzu3I|+(y7xUy{{oW~`7ya(CTG;WYcm-1Y-b1~uEzU|c?x%A* zqvl=Dm&R7FDdET3h+WT^Pl-3mMU?Q*h;t8I8@pUk>{cuwdA69^ex@PwpW1^v+eZ4Z z@-V#r>k(`C|JuQi8~^dgz8$Z6$rU(v_B8(2Fa02>%jm9Rh%^ISR|}lvkI$Lt-!@ungNY) zsXT?{Vp(W=4%+p?xpVm9pZ^Z-|NMss3m+4B{fl3Wxh2hGxOL{db?q9=&Md*c!^iRX zk>hRrPQc_flWdelNHx{ZMXF04R4(f}9PIhXcCCc-3zHZf3~7F|{H5}!94lcsy9mkp4iC6@tEdxO~S9)%L#*bf?1<|{K3bu z=gYg=ZU1k7&CQr!I%DyNh2bage&F?A?WG`n19orpQ*-{+WCuk7yzm>@%}hAhqE)=v ziI&$fo5@8^3t|896GA}Z=M*-YJcU8FNSd;Tt!v)e@rhd>Y_D&=<}xguolfypEc#}0 zY626JdKUyaSjusjmRvLa2|0tI1V(<=dR92&1J9$r`YWH*h4nLkrE$v%H7Arae~4_% z=<|t~zW3Mu{1IcSI*fcZiz_R)^`R)Hq|VTbV|dr62kxo2kCF8GV-}wlt`wb@cx-$} zUxqDx-&g7|+DW1D_0gC26kO|QviTZezO{DL#l}tyNnwwiUrQnL9Zve#n2k#8f1Hjt z71BSpWUr%sl_nwMxqL2mtXaQ$9zXL>zO_Bv{p{(J`1AkvQ`o=r%WeDKefx3v=rKh# z)4j!8>IwaR;Pp%Ds`ig{HiWbKVDUd3PX!m5wt_42U+;euv~kEEFy4Q4?9|0NZ$AoS zOkPK0HKjB;%&}P<_xYTy&v=8OMPu3}zXTsY2zUp)Oi_v3IL!~%SG-QR-NCha(}s38 z)X~d733$ zFF9&9yhb{+?$s@54eB4E7V=5Cc_gbF%Z*(Kek`(WN)+L{4AVj2?;XfYvs^$eI|Hr!(E;_&pE!nb zem$z6sKAU1=NEA22k*d{lV|bDo36yyebu!J$q*{~;$|msp3{;dD)ERVV{B9BjWJ3& z11Xla2e@0F$XwZCRjhkk$U51JamrX3!bESeB8Ah^;^317w67oHjQlK$<(h;^(ah=Q z_oeLGcLaCby9+bZlX&UXm%+Z?*#%&bttKZctUbMDm|)5tx(uh!Sy1v6%GBe*K=l43 z5^XAIk?TwMsbm<4WfnR&CZ#`!kZg*L34N0>ejyPr_w%`}E@DSMQ|o zKH~L}QI6s#-hokdP^@76fkIrChV?kzX8lNxVSTX|>4O}_ez_rNMTG-CBb)a5TIH1z zyUFY&AB&^}PsAT9{7re$HCynne(+ndcGVmX@7akz`!D|zCyyM!`Sa(oYtKHMJarm< zg&hsag|4RrPL2z4KB?DATB;bIh(D+JOy0BgwHWtU8#Ra*8yB@-afBoO!^sz&@cH0(Qw{1J*C|CX_Cnj*^mQC&V zn7bd{ixa2M3}aZZ9-T838%z=Wme!lDSPj{>CE&0ehMT z<@qs^$>zM4E(ux;cUG5OfP?8@KF=>K;Ez9hcMJcT7hO5Xc~doqk7R4{qh5ontO_X! z*rFGyd&@w%EqWy(E8B5(^l5cRnzxXKaf--SjNP73(yRd8U*PMOzkG}B@m@2CZ&=U^(XaKA0@|cCa34A@}X(O^4fZP-N1e9bNA!m(Noy5ehn_$xGwCiHSE8b(Uc57WBrjc5h6=T znY30Yl*N0Iwh=p-tu!>I9gZ*W(~;h5Y~{9**vau;bnDw=AIp511I{A9)EH|V=m!}) zK7s(YcsY?P>ZeP;U8QG4iJOCddMBOMDFXQ-yI6m_=b2v<~|NLw_M=ya|dCiIn zH_|-^^rOgdKqDOXaC2oNYxjg+;YFh9NU}z)A}+9j(~IGWOE; u{SIgCMh3aG8^ovdy)5HcLP9lN`~L>gWvJK1v6svM0000s;V|9707@qx}_0a9cgb8hv0N* z1F;DJ#CGbx1rZ*VngBTJ3H*dZ2vVCM)v-XU=ZoyN``R z9k6~(6NBT402u}b0o~_CQJA9(jkI@HeL1tr_Vf(~W1-IOA>)TsW4M0oE^qb_O!nTizL=t4S97rBwA z;*ZWXCgD7xV&aJub}av^Vf2v`9h-fnh$u>X|Fin#FFLpPZ@sPt3?vXs6cY5T;9hLk z85JP`U5%Lk2zpTJ+t+ zRKk0uf1C|YxVN*@5+bYbd+|kp*!n5M+tqAKUU;LoLu&W;?8{{*Kb{$UiWWcGvJ+%`P&CD& zi#m$5h+stioE~-&teC)$PzI&(8(b}wqZXDi?UdU|jh~H?rRscNkadBy;w=C#?t;+^ zgc2@Vv#;KuH8ji=hMQIGCx=|heg^m=NfY}fyFmJT`s-4W!p@L;agiUh+Xv2p3!cLf z7(@u$D_Qim)jHVrbLhX*ukXbj-*pShew|@Ah2(V|F$%u%pa}j$ykMKqwmfEUy?JXh z3FYyf85cje2AzBAB}tJ;#uT81U{h<>#DZ&@5+W)i&Oqmibm8^rM9r=@fk3A*tJ?7} zh)q7O&Y;8(w}Q&MN+iS@?=(a0K?DQwnW4cfQ~s*$aGwYfWM3$J5xvtw@0)d`=`!9mtHPp>Ewq*8(zTc zu}eoY$fXO?IML3MMUJ8#Eh~P+fNy^V(-;=`I9ErOgLsAvL{19TAQb~J{w2X>GAch! zBiHd=zs9~&-a#n3K~SF}5+b~>ojJEO$WDnju0ZF8k-icoh@J>fZp7bb{1__e1$ea;zz*z-yLFy69lbupo`JZ>mTEu)Thr zBD%+BtZA2{@~Z8spn>fmEBbJl_~6-kO$7puV@G)DvCNk=mYXVX?LmTUFsPBdG2pI@_vBvF<&VPGwjpSMRRt)Y-7^lQz zKkZw3y$@aE&v#dtP=bG!mGQ|0gT4<#E)Ppx;^7>3?*w^LJG%dL439={uAodg%Ys z@I&njkf1Gu@b=K`L+dz@)n&ooy7o(EO+;Q91z4}jnRp{Gu~63S2?R!4e3vbhA#qyN zJ+s~w?T|n-#ZR6h1@RZ#(PlzDt(59Cgx;<$XGCp7d84Xh-&G-e!$hN4A#Q@haxn3# z{1<+AEn=8sLFENT9v#v#UDN+@|+?rd(a?&%F@~`=;5Kl#W&EPvO=4F4~jOg zjjtt0J4!F#eW7{%hEvqhu8|a?upS1b_fd`qW`59z!^`>@(lIw#r|=*kokY9P_?>BvlWS22K_ z9x5I06SI^{0QG`so2A2Eo;sBND2)lU7^~&t9Pw?sj*A;lbf;mnbPh2Kd2cx@F2a%9 zDDbt2kC(_Wp{we0Fr^c*fvL@mrl?0Bf`~HJe{?EL2!a-lnf&H~8RtV3iWla&Gvz#S zuUB~)gG&va>5bMmmuq{m8lRorv_;Rkf}fW%am;?4A-R^;V(zojNpnpOd^i#k zncYNu)^-6_Ir=5>IHLTPaVrVy$DQtfcpo6E((zpF9x)8C%zQ+}`g29&P2JuHxiOp` z+11dZBW6ceiN~%Nm|*xd&YT;L^fT~w1vpJ`k?u|7{8);R zUG>T##$8j)QBSO-z-RpIm_Ye`{92b)NplTI8&9wM+pj5z#@qmGB5k2Se4E%ZRu-fs z#tPA379U~YVXBH_U#8J|TJ^RQD3xR8qowMqsu|U~z zDxTgOZL4J#>!}A6{r!=%vrEBRmtEvM-)K^W;OeF87{c{=L-8W3EZn1LP+fYg&%H9aqg?X(B@e z_jJ_m$L`yO4(I039(C}8o!(y=Ja3tTXi4)Tylz&I%>@(Wk}f-pxDwO3Wh8rJ9&5#v zSSB*?!QC##7RU8nP;JC)?C`>00AzT}ln8n4vZMm?zf*JF~K^APET5m#SIt7`uJh?>ZnW=WfB zXK_v5+P02FN}hW9l{n9>?}JZ2&eEj6;plhYN|Q2WaLqH^XHqmr!V@IRyl7U46Gm_Y z_v^mkI8%vE3nyAL6}cZO!wA00LFx$8sMIT=QubFjLmu+f`RW{oa zx}f0mLLMmzF|iAvM+>|grsuD-p=bSG>HZ#UAI3bz%I~sf&T~KKv%g~*UT+DV>$hK= zc~AFfu4<=rEY)XRXYM_?6h(lwmR<1kM0`HgZFF_0vM9SZCeW(P_mD~JSEs}?ahoO_ z2{rI>Q(%cQxJ(cq8_>u^sdBT$$D1H9X2iVIV@`U1AvXqK%5%{NrlLUSVP;efk${o@ zQCHuVjwMnKXvC{OPFP{=ASIX|38+aEJTY9G+2`|SuY-%^HGgkPo?sx=f))6%_x1)LBmQH_z@1mplrgHACu z*@(@a0WjnL!j*H2L)yl|hD01z_fLA#@Aba05{peuSRj{ z`yT(sAP_5cFTT-AptU*g#jFFlRRJqXo$Kj{P z#sSf8I0tB=njO4zR>ilh%Y^2kT`0_NccL_=I3)QNT7DymnSiB?mLJoj{t3M@euSYe z2|m(8O;LVCqsO^YSWnpJp1kMqio7Sd_A8$iHjeJ+!B(Z5OT_A3gY$&G1{>1yQuVdff`&V`&;=RO@#y=re;zGW~CJ0 zuek4~>OM(Plm)kK%H*AjOxHQ9c*^q7@b@wi!$&S-#mHsTFBsftGGXuNt8rmkKjn8l)= zN4kaKZIL>16Ygt&Qq+CRXOA!akDNJmDZ|rBdM9AmKc+~|=gfnZ(&t}`NnJhOU*!{+ zcvVOL9hMuK1p@=;K5n+bL&&%M2wGN^MN~=uWg+}BAfxL|yzP|U084U^7bnL=CZV*V zp?{Q8eulN`<2grz#J zTFxK#tto&_HzT*hk4r1b;~wf_+|&U>Wj&WUe7+XE->k&gG}2o8nn@TMyrS@BD4v-bn2xP_VqPa@rYftO?v$`y6#p*Jw_KLQxn#rs*8L zzGZ(UjMb`VRoSMsGn(I-<-pMFO1$L?=V+5qI?_SPP#X~q7#H=_BfKG(v`_}xYn2vk zbH$w%Mx!#&IqBbbE4TL7D}IMP%%I0s-n^`lU!}ha{9=y$apJ^#zOYieh|@L6h8z8) z4D5s1Hkd|`cMKf{UHayKz;E%g6R>Nn2oC@d?o*IOGF=s_~CY9 z(P+z!RP#IQpS8`PHvFzdkNFa08*yq?h)G)zc<1Y&H7nJiW4uoz37hUmZVuJ!0Rgj& z{{8y)jPTzrY2Vmx8P2T_eEyia@`c5IVqC~f5VSn?Y@p$2{rw7YzwiG@ zWb*AJk&8O%?^sy-p&=NNNCpqzU`kdW`(rdu4P{4)C5Dj(Zom%49RJwd^6~^8F80b} znN{u!2^RM^p~XBcS9pzEppgi~38lC_g0l}gC7XRFRk@Mn`i zl{2?j;(~23GyQGzkR?`{)-T_f#(BnGCFQ;2Zz_N#-7t0FRiZgwHPkT9_F&4ki`1JX z6&1F_BLoPZHKh8B{=iVi?bx_bN1Gln*T%E%N(p7KIc(kAvzo@_B6P?CS{8QLx*WY9 zz|37J=LIprN7{w7GdvGAZf&>Rpy)@NS7zzE7k{U&LKbp+hZ)cZKWbNgJ=I_VeB$ZL zP_q>~o+2GI%*qERC-vg~=wt+)N5Bsg)K|QD&I;J+YY@Z35F??5{hwEA#js_Oo`mL* zHQ-R;Q2=7#KL7(vGstwAw!io4_MV!;7QchwBQNxJP)CA71rIT}UM2*6Ty0iD4I@n} zb*W_b`A_jWd41iTZ|AP2dCA+t>;IB`Mpip{#0pc5Bg|wAvuZADm2qL|=bT@x)f+k@ z9e$_fy_K}ui8Zh-Y===q65!ZX}+)VRdm=TdKYVGXr6b;qu z*@Z1BWtNAlcHTn1(#E3&X>+KZv~hC2VM=nf)bids?mst87%BV2@?ulK%7ZF9i*EVL zzVjI?eu(XTV;otq+26VjEUd9%HM~h3ARS293_N5@>XX!O(U2jnw7!hg_}(O+AS8My z&@fqY7H%Tf&Jb*79TK%=D{@xg)E$2o)xJrZ03mHNKh_mnzNmkL4l|M_f0coL;P1q` zdGbDwib3i&oy$gBuWH}1qlaX$rS)ABLKQp%5@xg;yv$Z26T1mr-aE)tB;OVylyNud zrgBp+UIIgJ?b2Y24Y`Nfp#l;jxA@R;iu8&2H;043Vjuu$65Er$1JFeLF4aYq2|gH# z@$#~*gtL?2*aU8s1>kXvLIr1=0*E)Ok;!O8A@LB6#hW z@}ySZQtX%|Hy z<)NZxm>ad=$x|n0E6Slv&5;ZLtVVxyM@9ZOht>O{3xmC04#FHp?+Gm;E1@W{svRki zf(W6wuSM^kRU;%TM zGv}eF!&q@t=Ooq}T<07??OJFnWF0fU6pSCS7*9ODXHxHt6)hE3SM3XBhfwmTx~y~b zdH;qj=nMgGtQ;T6 zT_U5N3!U9nRhoR6rju2zb_G5nyu!gIcnx0DL-9aF4Koa_l{RHjPWx_9&0I zxoGq1tJyb1NNGSHlO&Dyk96g;eHtaPoilQ; zx6n!ZnMqg}b|TVJoQOkZ$^q$sxZzhBZy~?1g(c}F{YmI7Iw(O5+x*#D zhyf|+?$$r_Rt3AFR|P3wMl*aqtx(Q!b!=Xgcz>u~&5u>*d|v|Zu1AEU@%y>DP;Jm| z&_XQ|JfmC&WF~EizF1*#m}K4)4wWw|e?ZY(SO^%Rl(W}uxEyid|BI- zK@7drNYqhbIZW)a2+1#RAmbSSfnKR>)F@*6gG3UTssp*i*per38<)@w%TWw}$G=c> z<24P)x1-~?0#kyeHH~Z*#**1wcWk~*3UyT~Ch8H8Tt@2#5#%rk zdnk7B13WZ$LSvI9UPsH6%RqTROnc@BI2auqN)s76HCWzJ3s}8(kMK|XrCAM!48Pv0 zxY3C6R^BNSzAAZxj{C3auGy8e*|YQ3lr|0oN}}eWHhVGOMD{64p!iREmF)zdYbR@U zatqrif1n%p(r7=XrZF8SxSU7=H`t{$9t?hn)5FM0kcYz$av;j2B+gxo1dJr9{(}3( z`kGUXICWg+_w`#<-y^%qy7vv?Bbpo4n76Y{pZe?!?>_!ir-xX40;YCmzro@+w2DnL z{;L4&#Oq+GzVQ|;B$Xt{iUQbZEy`}#U5V63gmD~j_o0E#C5Ac$zEO2W222R$cD|j7 z%?Ky!Xo$GwF9(+lJXH-oT5!wb(F=f-ch^W#Z`Cbfkd)iaP9FIo`nIfiv&d=O@<4vN z$kLkctGGHc@DcLF9CuPOYgv_6G1)r2G7`4esol=M<&je(*VDMboD|>>cJ+_XK}NPQ zerdVUj;Qskroe$N(paP)C9r(VYcuS5sy@OV%%CJky7z< ztBg=o;lO_HO6YhH`-PGiD=5WA6J{}P>3xRls2IjJB!$Kb0qyWbb0h%9uQT6T5XpJFp$Jf>fSIB#XpoNn`I1BW&w%Yl?qR4 z7vHo;C@Gg`NSCAmAr7S9%#OHOQ!Rs;RXDB2+}HN1Vd%)Eiv57cD4t6(;v15scO;bDT1gMi~9 z_mDC3S>rq<=$!T^gA~(0!MD$;?E3KtNmBi2)EC~8w}#YdF{s31N2ol)#-0vGo`@ha z52B&#$vG<OUisddQcO9x(=}|cymtX>Fr~NCWEsA0yWmCmU6Wk zfqUg|Z8`3G1jBG-g-SN_(&zY6>LwdgT$exhkaQ?PIRWcmWYWtTC+7>l#8~FwXeRgf zuxZ=hiyA`R2VxqSl6s29pC?j1B!SL@YWhBX2|J{K6@x%d8}5i8X_XIm7#nJdCnU?;w4*qWoHL4o zEmPO87b|uX0eA|3n&J%nKR2zc{#TjlP)Dme?+l34#}kf09f^sw4sW0BfUuZJ!{G5+ zl+rqSBim$5kEUJ3^&4jaGB6uIt{iI{Y$I7COxm|cQvWaBf2bQZc1vFHaW@hBY&0a6(c6!=`F6N8QQ))dGlGM}4UrOPu5%&{OpcR*r?3Uu{98=fe zHatxXp+$SCGV2+z6|@BA)C}386aUaf^<*er6n z6#UWJ)H;Y^jr6I5RlV;7bv|4}W89&Y(vw}@OWN$;eDi^@rP~V24{-H%_&+?OpXMd>PhMUO0 z*_}QAaM@~=p~Dx=K@M5_vh43eDQIvG6JqvOrD641>CUrHV8ovBk`-6w2aV8)gS_0D zR^v>gJFC|4za%d0|EM*$F1+_TJxI>=4} zV4p(23KQ=3EMkVRgtI|ZFR@-wgSr9-t|BK$w>2C8#G=lbF&;T}LX76@bS0zk6-@c@ zrPJ35cP0xQKCI}b!i*6Pp>vj;{@|Za{xc#?xZv7hy^m0MKHk4y-A^lE+eB5ND>1m} zKptzC8M3Y^{L|=LozF@N>OZID@C?mXr9;nM?byx+g~d8~3u6Op)6~n%t_B zm{*QIc>XYQR-9%rs0hF4^t$@`B(e0Ok-m2Qc1un`r%-MKprDPJL#0~4Zc8zu{2gI< zV{i4}+GA@p8zZ7QcXiGibL5O+*^BcqCWQ?kNtGWeO2xHv9>yL1Yb4k{^T8x7IPB|t z91DX+=CeN^u9@Qe*2ZfbIih6WADlH;7ZkMA^7T%y`$=>_?VBI*SEBrBqxah+lBC{q zO-{JE_r#~u9TG*7O++@b7vKdJTE&F7%pO zB@;Dd9&myr3{*AxunMB|ET(=pj_adC=sMRKh%1;{0?%-#wtq^1i)Fs{Z%`K zdG1jBSrNm6Ot)2p?9?ipXzM@1pR~?=NFJEbBFt`n<%L0?8dw18%G%&MMeC^l0SiJK AKL7v# literal 0 HcmV?d00001 diff --git a/lib/assets/wordmark.light.css b/lib/assets/wordmark.light.css new file mode 100644 index 00000000000..9a601f97253 --- /dev/null +++ b/lib/assets/wordmark.light.css @@ -0,0 +1 @@ +use { color: #000 !important; } diff --git a/lib/assets/wordmark.light.png b/lib/assets/wordmark.light.png new file mode 100644 index 0000000000000000000000000000000000000000..50bbb6bd37fe47541b3dc3479c9be6344e324082 GIT binary patch literal 8576 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 m^IBcr{r6(MsTIbYy_T! literal 0 HcmV?d00001 diff --git a/lib/tasks/branding.rake b/lib/tasks/branding.rake new file mode 100644 index 00000000000..d513465ed9b --- /dev/null +++ b/lib/tasks/branding.rake @@ -0,0 +1,78 @@ +namespace :branding do + desc 'Generate necessary graphic assets for branding from source SVG files' + task generate: :environment do + Rake::Task['branding:generate_app_icons'].invoke + Rake::Task['branding:generate_app_badge'].invoke + Rake::Task['branding:generate_github_assets'].invoke + Rake::Task['branding:generate_mailer_assets'].invoke + end + + desc 'Generate PNG icons and logos for e-mail templates' + task generate_mailer_assets: :environment do + rsvg_convert = Terrapin::CommandLine.new('rsvg-convert', '-w :w -h :h :input -o :output') + output_dest = Rails.root.join('app', 'javascript', 'images', 'mailer') + + # Displayed size is 64px, at 3x it's 192px + Dir[Rails.root.join('app', 'javascript', 'images', 'icons', '*.svg')].each do |path| + rsvg_convert.run(input: path, w: 192, h: 192, output: output_dest.join("#{File.basename(path, '.svg')}.png")) + end + + # Displayed size is 34px, at 3x it's 102px + rsvg_convert.run(input: Rails.root.join('app', 'javascript', 'images', 'logo-symbol-wordmark.svg'), w: (102 * (261.0 / 66)).ceil, h: 102, output: output_dest.join('wordmark.png')) + + # Displayed size is 24px, at 3x it's 72px + rsvg_convert.run(input: Rails.root.join('app', 'javascript', 'images', 'logo-symbol-icon.svg'), w: (72 * (79.0 / 75)).ceil, h: 72, output: output_dest.join('logo.png')) + end + + desc 'Generate light/dark logotypes for GitHub' + task generate_github_assets: :environment do + rsvg_convert = Terrapin::CommandLine.new('rsvg-convert', '--stylesheet :stylesheet -w :w -h :h :input -o :output') + output_dest = Rails.root.join('lib', 'assets') + + rsvg_convert.run(stylesheet: Rails.root.join('lib', 'assets', 'wordmark.dark.css'), input: Rails.root.join('app', 'javascript', 'images', 'logo-symbol-wordmark.svg'), w: (102 * (261.0 / 66)).ceil, h: 102, output: output_dest.join('wordmark.dark.png')) + rsvg_convert.run(stylesheet: Rails.root.join('lib', 'assets', 'wordmark.light.css'), input: Rails.root.join('app', 'javascript', 'images', 'logo-symbol-wordmark.svg'), w: (102 * (261.0 / 66)).ceil, h: 102, output: output_dest.join('wordmark.light.png')) + end + + desc 'Generate favicons and app icons from SVG source files' + task generate_app_icons: :environment do + favicon_source = Rails.root.join('app', 'javascript', 'images', 'logo.svg') + app_icon_source = Rails.root.join('app', 'javascript', 'images', 'app-icon.svg') + output_dest = Rails.root.join('app', 'javascript', 'icons') + + rsvg_convert = Terrapin::CommandLine.new('rsvg-convert', '-w :size -h :size :input -o :output') + convert = Terrapin::CommandLine.new('convert', ':input :output') + + favicon_sizes = [16, 32, 48] + apple_icon_sizes = [57, 60, 72, 76, 114, 120, 144, 152, 167, 180, 1024] + android_icon_sizes = [36, 48, 72, 96, 144, 192, 256, 384, 512] + + favicons = [] + + favicon_sizes.each do |size| + output_path = output_dest.join("favicon-#{size}x#{size}.png") + favicons << output_path + rsvg_convert.run(size: size, input: favicon_source, output: output_path) + end + + convert.run(input: favicons, output: Rails.root.join('public', 'favicon.ico')) + + apple_icon_sizes.each do |size| + rsvg_convert.run(size: size, input: app_icon_source, output: output_dest.join("apple-touch-icon-#{size}x#{size}.png")) + end + + android_icon_sizes.each do |size| + rsvg_convert.run(size: size, input: app_icon_source, output: output_dest.join("android-chrome-#{size}x#{size}.png")) + end + end + + desc 'Generate badge icon from SVG source files' + task generate_app_badge: :environment do + rsvg_convert = Terrapin::CommandLine.new('rsvg-convert', '--stylesheet :stylesheet -w :w -h :h :input -o :output') + badge_source = Rails.root.join('app', 'javascript', 'images', 'logo-symbol-icon.svg') + source_ratio = 79.0 / 75 + output_dest = Rails.root.join('public') + stylesheet = Rails.root.join('lib', 'assets', 'wordmark.light.css') + + rsvg_convert.run(stylesheet: stylesheet, input: badge_source, w: (192 * source_ratio).ceil, h: 192, output: output_dest.join('badge.png')) + end +end diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png deleted file mode 100644 index 7a99a19641acd1558c8416b16c16a814fd953491..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13534 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 diff --git a/public/badge.png b/public/badge.png index c3e99ddd431b98964e14e1ee98ac53ce6835918f..0449e92921efc08cb7c8ef102ca6fd0eb0d95141 100644 GIT binary patch literal 4248 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 Y2dEt%3$*UUt^fc407*qoM6N<$f`-O1%>V!Z diff --git a/public/browserconfig.xml b/public/browserconfig.xml deleted file mode 100644 index 7fdab5058ed..00000000000 --- a/public/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #282c37 - - - diff --git a/public/favicon-dev.ico b/public/favicon-dev.ico deleted file mode 100644 index 3836044068bad645ea04b01041f4712d52d8f32e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9086 zcmdT~TWl3Y7@k@#1(8Y#cPK60La}l&NK}Z%TT~R|1ByII0wgBrlP{V^jWj-}P!gl@ zL4j8dsEG*}z{DoSOO2+dL$8!uQ$WDhmR6t_+S2j+cF%6-?CzYNb6TKX^7Wtj=b!)o zcFw;uv$F`1hJVXe3jECx+w+8&DTF8hmH}G;>QlNbIoQprN)wjM0Hy$ofLDQ!fgb<~ zTn4&;{wO*i&j6*s=fD<`FD*#+AMZKVV|dCG3c4Tqx8(i6HsCv;8BoJOBl>;{JO+$Q zfnEGAmMnzdFMz*+;qVOW+X2mM4dnIu{)x!w@N9UonG!?q6C0jw2^BGZhKEIAc64*_oi2Y`B`Z6XbW zjumI($eZQzbdJ^B{`RI-ZF92^;clG#`Evqv!@uM zpxZC08p1fF+3j!1=fQ(qbZ(~dJFw$DhB&-UDrXM8MWz?geH5bAb84LLfJa9LQ{79xxNg0`37O0>PZlJMOtR7A*M!`kL~MW5Bn-XTaOQCg2fZMhr(&?m2m}3--GI zcx87VK^f03*|tmY$9vfgJm7H;j(6H zqovIJ+8jeTA9JH63q~nlecYJ$6Pz)wB$uD#&T|M?NiIwH>i=|Oh5FeUyL``%$fIbAJ8zyIBx*oizCW;eng1{8dwi|rjQ#c zjx*Q#@ck$9De2t6Gyld17u4(To%g`H2%8I1=gfEN&d_m4h4Z|Ko|;}+Kp%*aI_K}< zt1sY>zvbxV{0sPU{s@l4=;d4!%6D{+^Z7Bzndc^BEjO-#v;Q5)$?a6~IomLAaK83G zGpWxTz3>&j-#2h>Ywx%BG=a4n9HuO<^5!?aa5wZ}_S_q_wa2dA)mXddV9#LKZ}8rk z7vvor2XM}Muv*FbENE zXXZutyC{5e{rauqy5FrT+1sqf`S*)hH_Byaz?O>g%1-59SJ;2|zLtPJPuHt&4z+tmwC}z#5YzALgY7CGcH9rJ zAN%_+_S>_+RSCp3@TLAN@T0LEzvq*izM5Yh<97%f*~^N~C*T<%pxyDr+&&#R@a zPYr~-v*SF0c!4~M9q%LHyTiztzt6%-b>!Gpf9SaNl6}oe%!w$8q>N?~&m1sK@`g{F<7$6z_8G^8+~n^-}2LU3^BTudWG=>*LjeI?ws|UFsuW zTd+TQ0Gr-wQb&<1^{2bl$;KX42YIlxL%p=UQ3=!j9(uOZj`nUp<{bUmW9!~${ITP= zJ?A@}C0C%#bv(#b*U>N6w3&FWQO@A|cP@0ZP+#DifAxMWvz>OZxBJl-{m@@xd|SZ} zUqPdnCGSH0lOZ|lJQ&A?t{goMrRP z!`T-v_uSF>Cd@Nc{r>KBne&4c!_%$=cvp@R-V!|U1z+Q5SF}Igcvnq@Z81=Nhq&|o ziEBru&CcbeQH?2D+P4f#=Ahp?U?;$D5BPz$BC?;p{cV!vtxUVM4hlS{%#QpYA;t$7{> diff --git a/public/favicon.ico b/public/favicon.ico index 79000c9cc43c2044b5ab5129202e993aa2cf70af..ccccbfc1cb77566dcf70d5f6f5ae292842a49b1c 100644 GIT binary patch literal 15086 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 literal 9086 zcmdT~TWl0n7@k@cG)M&lYBb2LS}E-=pg}YN6Ql8#Xi^J4Xdomcrcb`8#F(&9=oX4f z4JP6(L5&JXjF*5sm=y7n618-<+fqs|SPBISmX@WrWsl!?c4v1kXU4ryphLd?=ltit zd~@cXGqY#Vv>f~^@@n`yU3+DgrcKo}tpF$jRshszax_#TX#8lbEY3lHJTL*62`mHr zz_&mha1yu(MB?a$JPP~_ya%iZReEPb(*FiMF4}rCD`||w_`qCXC9n%P1&A!r2H$sq z#lZDh5mh)NW+AW@I1XgPQ{@{*%-a=d(^esl^nok|IssL_%c1LQtn}WNHbIMnf$xee zxpEHA0IZ{b9b%n_ew>9uMqR{t)***#ZUGsu z99YLkQsn#>?562qa9`!3e=~3^Fa@|1xEr_!m=VWx$Z5b`z*Jx|a0@Ul==a)cI^_50 z;Tp8-^Js?r^R?W4eBz)Qeez(>Fyfak+|lk3;&TRTs8yqbb@H>&4h%G*Y$TG-5jH39|ae# z1z!Vv-P0fweB=E*=pw*qamXev>+5AB;ZQ{}&!ONN1to39wJS zop;8Z`I|aykB56Z1I~f+`%JZ|cc{1L$e8mth&5u5mnr80ou)|!$_p+h=U>2=>xVsN zM)Q0{I0uz{c@Ebu=YPf^XYQMfwc6+hXX|gESZzDh#)!*vFt~n>>E6>jT(9ldGq!Gw zr2iZoMlALFJ~$s%J-Y{b-*jY`1;B+{Piep-^<}D6`p8(Xq2kaNLv!=g{`Wa+^K#F|P|} z)`i1wQOt|KNQ95q+2Z!pZpZuL0uu+W!Qrle&6bMr@p@rhqv_vsaJ$Vu+*v0YD?yjj8&F?=cuj7$z&xzj9-lPreqa#BmzuwRuK|5Y| z`qAHZz>oQu*K|$HbIU*O&*~W(Zy2UAQqO=~;UNHx> zW1jXeSJ~^x%y}>Pu5seb`;5H%TYt5tcJ24nekKCz@&#)souj|?K%B2*U2y)_0o)UI zz7|+Nnzk$!!{<+?lz!l3NY*;v+|H1ed^tga96!x{Qu*C@zVhJ`MCF00l52ceFZwddqecM{f6I(tzzhG zhZsE5D*9S##IfD4ih%Oj;gx!h(~kDi5B`k9cyjHwt=~#M{I(~*(?NOwKF8g8v%bNr ze(fwdmyP`WjT#7`&u5^UKgVfDd+CQ*j1zlC>et0Je-Gj(Ho?%o4ybg?X&;Ntd$JB( z^BK-3Q$O!UaLA4A*TuFV(VqnTY3G(Imr=Fj9`R)I4fzv%+2uaiOn`f;hIzT_ZLSZq z*!qCLRpQRyPkeUdx$#Z%PJYXP&vf7^ zfc4LB5`(~K%>NMLa^Ifc8<=lKl22l(&{ay=WcVgY1H|AO&hG)-E6WE;fYku^Cw~BH zffj(ZcLCu0t^S_NKJ^?w2+*E>^nU>;02r6?6aPnoc>`6+Z=>w%hp5qV#h|7MC@7 diff --git a/public/mstile-150x150.png b/public/mstile-150x150.png deleted file mode 100644 index a4994062de166baf39263f4505ace305e31a3770..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4523 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 Z`ai>UH@>A_0vG@Q002ovPDHLkV1n|Rqn-c& diff --git a/public/shortcuts/notifications.png b/public/shortcuts/notifications.png deleted file mode 100644 index 6b9d45718c82784e5c3380dcc9e4cd3fadb9e9b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3067 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 diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index b9d38d8c689..20ee32aa0fc 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -59,13 +59,6 @@ describe ApplicationHelper do end end - describe 'favicon_path' do - it 'returns /favicon.ico on production environment' do - expect(Rails.env).to receive(:production?).and_return(true) - expect(helper.favicon_path).to eq '/favicon.ico' - end - end - describe 'open_registrations?' do it 'returns true when open for registrations' do without_partial_double_verification do From 37cd984acfdd206e85c50a851c4daedc2c87deb3 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 10 Jun 2022 17:34:59 +0200 Subject: [PATCH 002/646] Fix logo gradient not working on some Safari and Blink-based browsers (#18634) Works around https://bugs.chromium.org/p/chromium/issues/detail?id=258029 --- app/javascript/styles/mastodon/basics.scss | 12 +++++++++++- app/views/layouts/application.html.haml | 2 +- app/views/layouts/embedded.html.haml | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/javascript/styles/mastodon/basics.scss b/app/javascript/styles/mastodon/basics.scss index 391f1fad9e2..413a1cdd6ad 100644 --- a/app/javascript/styles/mastodon/basics.scss +++ b/app/javascript/styles/mastodon/basics.scss @@ -256,7 +256,17 @@ button { } .logo-resources { - display: none; + // Not using display: none because of https://bugs.chromium.org/p/chromium/issues/detail?id=258029 + visibility: hidden; + user-select: none; + pointer-events: none; + width: 0; + height: 0; + overflow: hidden; + position: absolute; + top: 0; + left: 0; + z-index: -1000; } // NoScript adds a __ns__pop2top class to the full ancestry of blocked elements, diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 1501c2b9753..25fd5bc34cc 100755 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -43,6 +43,6 @@ %body{ class: body_classes } = content_for?(:content) ? yield(:content) : yield - .logo-resources + .logo-resources{ 'tabindex' => '-1', 'inert' => true, 'aria-hidden' => true } = render_symbol :icon = render_symbol :wordmark diff --git a/app/views/layouts/embedded.html.haml b/app/views/layouts/embedded.html.haml index 6c6730ef272..e74bff9cc1d 100644 --- a/app/views/layouts/embedded.html.haml +++ b/app/views/layouts/embedded.html.haml @@ -20,5 +20,5 @@ %body.embed = yield - .logo-resources + .logo-resources{ 'tabindex' => '-1', 'inert' => true, 'aria-hidden' => true } = render_symbol :icon From f09a66b9a741515532a1bfa0f2c3af08d9cc84b6 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Fri, 10 Jun 2022 17:37:25 +0200 Subject: [PATCH 003/646] Typo in path to mastodon logo in README.md (#18632) Less ass, more assets. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index eade19ef8ac..d47bb7ab486 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@

- Mastodon + Mastodon

[![GitHub release](https://img.shields.io/github/release/mastodon/mastodon.svg)][releases] From b31c32fd61178d54c1550cd247e260d6021e8e9b Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 9 Jun 2022 22:25:23 +0200 Subject: [PATCH 004/646] [Glitch] Change brand color and logotypes Port SCSS changes from 45aa5781ce611ea411e34e3b18358a9fe15f67ce to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/styles/about.scss | 2 +- app/javascript/flavours/glitch/styles/branding.scss | 3 +++ .../flavours/glitch/styles/components/columns.scss | 1 - app/javascript/flavours/glitch/styles/containers.scss | 5 ++--- app/javascript/flavours/glitch/styles/footer.scss | 8 ++++---- app/javascript/flavours/glitch/styles/index.scss | 1 + app/javascript/flavours/glitch/styles/variables.scss | 2 +- 7 files changed, 12 insertions(+), 10 deletions(-) create mode 100644 app/javascript/flavours/glitch/styles/branding.scss diff --git a/app/javascript/flavours/glitch/styles/about.scss b/app/javascript/flavours/glitch/styles/about.scss index 2cc43afecd1..1843129a028 100644 --- a/app/javascript/flavours/glitch/styles/about.scss +++ b/app/javascript/flavours/glitch/styles/about.scss @@ -690,7 +690,7 @@ $small-breakpoint: 960px; align-items: center; padding: 50px; - svg { + .logo { fill: $primary-text-color; height: 52px; } diff --git a/app/javascript/flavours/glitch/styles/branding.scss b/app/javascript/flavours/glitch/styles/branding.scss new file mode 100644 index 00000000000..d1bddc68b0d --- /dev/null +++ b/app/javascript/flavours/glitch/styles/branding.scss @@ -0,0 +1,3 @@ +.logo { + color: $primary-text-color; +} diff --git a/app/javascript/flavours/glitch/styles/components/columns.scss b/app/javascript/flavours/glitch/styles/components/columns.scss index d52ecf02c64..8d51ef8165d 100644 --- a/app/javascript/flavours/glitch/styles/components/columns.scss +++ b/app/javascript/flavours/glitch/styles/components/columns.scss @@ -822,7 +822,6 @@ padding: 40px; .logo { - fill: $primary-text-color; width: 50px; margin: 0 auto; margin-bottom: 40px; diff --git a/app/javascript/flavours/glitch/styles/containers.scss b/app/javascript/flavours/glitch/styles/containers.scss index 98a1288ebbb..2bc55a1d73e 100644 --- a/app/javascript/flavours/glitch/styles/containers.scss +++ b/app/javascript/flavours/glitch/styles/containers.scss @@ -20,8 +20,7 @@ justify-content: center; align-items: center; - svg { - fill: $primary-text-color; + .logo { height: 42px; margin-right: 10px; } @@ -322,7 +321,7 @@ display: block; padding: 15px; - svg { + .logo { display: block; height: 18px; width: auto; diff --git a/app/javascript/flavours/glitch/styles/footer.scss b/app/javascript/flavours/glitch/styles/footer.scss index 073ebda7e45..0c3e420332d 100644 --- a/app/javascript/flavours/glitch/styles/footer.scss +++ b/app/javascript/flavours/glitch/styles/footer.scss @@ -132,19 +132,19 @@ } .brand { - svg { + .logo { display: block; height: 36px; width: auto; margin: 0 auto; - fill: lighten($ui-base-color, 34%); + color: lighten($ui-base-color, 34%); } &:hover, &:focus, &:active { - svg { - fill: lighten($ui-base-color, 38%); + .logo { + color: lighten($ui-base-color, 38%); } } } diff --git a/app/javascript/flavours/glitch/styles/index.scss b/app/javascript/flavours/glitch/styles/index.scss index af73feb899f..f808773f309 100644 --- a/app/javascript/flavours/glitch/styles/index.scss +++ b/app/javascript/flavours/glitch/styles/index.scss @@ -6,6 +6,7 @@ @import 'reset'; @import 'basics'; +@import 'branding'; @import 'containers'; @import 'lists'; @import 'modal'; diff --git a/app/javascript/flavours/glitch/styles/variables.scss b/app/javascript/flavours/glitch/styles/variables.scss index 6e242281b95..c2da24184d2 100644 --- a/app/javascript/flavours/glitch/styles/variables.scss +++ b/app/javascript/flavours/glitch/styles/variables.scss @@ -12,7 +12,7 @@ $red-bookmark: $warning-red; $classic-base-color: #282c37; // Midnight Express $classic-primary-color: #9baec8; // Echo Blue $classic-secondary-color: #d9e1e8; // Pattens Blue -$classic-highlight-color: #2b90d9; // Summer Sky +$classic-highlight-color: #6364ff; // Brand purple // Variables for defaults in UI $base-shadow-color: $black !default; From f938afee7229d7218559069c3dd968f131b6219c Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 10 Jun 2022 17:34:59 +0200 Subject: [PATCH 005/646] [Glitch] Fix logo gradient not working on some Safari and Blink-based browsers Port 37cd984acfdd206e85c50a851c4daedc2c87deb3 to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/styles/basics.scss | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/styles/basics.scss b/app/javascript/flavours/glitch/styles/basics.scss index be0e1b860b2..a00b2936f0c 100644 --- a/app/javascript/flavours/glitch/styles/basics.scss +++ b/app/javascript/flavours/glitch/styles/basics.scss @@ -181,7 +181,17 @@ button { } .logo-resources { - display: none; + // Not using display: none because of https://bugs.chromium.org/p/chromium/issues/detail?id=258029 + visibility: hidden; + user-select: none; + pointer-events: none; + width: 0; + height: 0; + overflow: hidden; + position: absolute; + top: 0; + left: 0; + z-index: -1000; } // NoScript adds a __ns__pop2top class to the full ancestry of blocked elements, From f88d1db904927adfb46fe82fe302143d10ebabc1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 11 Jun 2022 21:53:52 +0900 Subject: [PATCH 006/646] Bump rubocop from 1.30.0 to 1.30.1 (#18613) Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.30.0 to 1.30.1. - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop/compare/v1.30.0...v1.30.1) --- updated-dependencies: - dependency-name: rubocop dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index d42b0cb33a2..82cd36124b0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -568,7 +568,7 @@ GEM rspec-support (3.11.0) rspec_junit_formatter (0.5.1) rspec-core (>= 2, < 4, != 2.12.0) - rubocop (1.30.0) + rubocop (1.30.1) parallel (~> 1.10) parser (>= 3.1.0.0) rainbow (>= 2.2.2, < 4.0) From 2d818d9c979abeaec62be2479b3f157f1e59542a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 11 Jun 2022 21:54:45 +0900 Subject: [PATCH 007/646] Bump bootsnap from 1.11.1 to 1.12.0 (#18575) Bumps [bootsnap](https://github.com/Shopify/bootsnap) from 1.11.1 to 1.12.0. - [Release notes](https://github.com/Shopify/bootsnap/releases) - [Changelog](https://github.com/Shopify/bootsnap/blob/main/CHANGELOG.md) - [Commits](https://github.com/Shopify/bootsnap/compare/v1.11.1...v1.12.0) --- updated-dependencies: - dependency-name: bootsnap dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index 778036a2900..e0005faba70 100644 --- a/Gemfile +++ b/Gemfile @@ -26,7 +26,7 @@ gem 'blurhash', '~> 0.1' gem 'active_model_serializers', '~> 0.10' gem 'addressable', '~> 2.8' -gem 'bootsnap', '~> 1.11.1', require: false +gem 'bootsnap', '~> 1.12.0', require: false gem 'browser' gem 'charlock_holmes', '~> 0.7.7' gem 'chewy', '~> 7.2' diff --git a/Gemfile.lock b/Gemfile.lock index 82cd36124b0..e5b665a8a68 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -114,7 +114,7 @@ GEM debug_inspector (>= 0.0.1) blurhash (0.1.6) ffi (~> 1.14) - bootsnap (1.11.1) + bootsnap (1.12.0) msgpack (~> 1.2) brakeman (5.2.3) browser (4.2.0) @@ -396,7 +396,7 @@ GEM mini_mime (1.1.2) mini_portile2 (2.8.0) minitest (5.15.0) - msgpack (1.5.1) + msgpack (1.5.2) multi_json (1.15.0) multipart-post (2.1.1) net-ldap (0.17.0) @@ -733,7 +733,7 @@ DEPENDENCIES better_errors (~> 2.9) binding_of_caller (~> 1.0) blurhash (~> 0.1) - bootsnap (~> 1.11.1) + bootsnap (~> 1.12.0) brakeman (~> 5.2) browser bullet (~> 7.0) From 32c83d76a08be9fcfe6920586a382d3ebb7e2069 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 11 Jun 2022 21:55:17 +0900 Subject: [PATCH 008/646] Bump sass from 1.52.1 to 1.52.2 (#18616) Bumps [sass](https://github.com/sass/dart-sass) from 1.52.1 to 1.52.2. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.52.1...1.52.2) --- updated-dependencies: - dependency-name: sass dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 21 ++++++++------------- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index b92123549b1..c4e51e5a002 100644 --- a/package.json +++ b/package.json @@ -117,7 +117,7 @@ "requestidlecallback": "^0.3.0", "reselect": "^4.1.5", "rimraf": "^3.0.2", - "sass": "^1.52.1", + "sass": "^1.52.2", "sass-loader": "^10.2.0", "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", diff --git a/yarn.lock b/yarn.lock index 8bb49bc7b40..e5a8573a63e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9794,10 +9794,10 @@ sass-loader@^10.2.0: schema-utils "^3.0.0" semver "^7.3.2" -sass@^1.52.1: - version "1.52.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.52.1.tgz#554693da808543031f9423911d62c60a1acf7889" - integrity sha512-fSzYTbr7z8oQnVJ3Acp9hV80dM1fkMN7mSD/25mpcct9F7FPBMOI8krEYALgU1aZoqGhQNhTPsuSmxjnIvAm4Q== +sass@^1.52.2: + version "1.52.2" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.52.2.tgz#cd1f03e0e7be5bb2cebcf1c34d735f087d790936" + integrity sha512-mfHB2VSeFS7sZlPv9YohB9GB7yWIgQNTGniQwfQ04EoQN0wsQEv7SwpCwy/x48Af+Z3vDeFXz+iuXM3HK/phZQ== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -10142,21 +10142,16 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -"source-map-js@>=0.6.2 <2.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.1.tgz#a1741c131e3c77d048252adfa24e23b908670caf" - integrity sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA== +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== source-map-js@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" From e3cebfa457cb5e645ac69162391a4153a3c6c4ad Mon Sep 17 00:00:00 2001 From: Markus Petzsch Date: Sat, 11 Jun 2022 15:34:58 +0200 Subject: [PATCH 009/646] chore: bump elasticsearch version in docker-compose.yml file; closes #18189 (#18637) --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 5c2c0c5dfe9..b324a65b09a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,7 +25,7 @@ services: # es: # restart: always - # image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2 + # image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.17.4 # environment: # - "ES_JAVA_OPTS=-Xms512m -Xmx512m" # - "cluster.name=es-mastodon" From fe2d6fe1057677a1060fe1d882aac744456deff4 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 11 Jun 2022 20:32:02 +0200 Subject: [PATCH 010/646] Fix wrong aspect ratio of logo in icons (#18639) --- app/helpers/branding_helper.rb | 2 +- app/javascript/icons/favicon-16x16.png | Bin 650 -> 639 bytes app/javascript/icons/favicon-32x32.png | Bin 1248 -> 1250 bytes app/javascript/icons/favicon-48x48.png | Bin 1798 -> 1899 bytes app/javascript/images/logo-symbol-icon.svg | 2 +- app/javascript/images/logo.svg | 2 +- app/javascript/images/mailer/logo.png | Bin 1745 -> 1673 bytes app/javascript/images/mailer/wordmark.png | Bin 8942 -> 8991 bytes lib/assets/wordmark.dark.png | Bin 8942 -> 8991 bytes lib/assets/wordmark.light.png | Bin 8576 -> 8625 bytes lib/tasks/branding.rake | 21 ++++++++++----------- public/badge.png | Bin 4248 -> 4058 bytes public/favicon.ico | Bin 15086 -> 15086 bytes 13 files changed, 13 insertions(+), 14 deletions(-) diff --git a/app/helpers/branding_helper.rb b/app/helpers/branding_helper.rb index c91661e5612..ad7702aea71 100644 --- a/app/helpers/branding_helper.rb +++ b/app/helpers/branding_helper.rb @@ -15,7 +15,7 @@ module BrandingHelper end def _logo_as_symbol_icon - content_tag(:svg, tag(:use, href: '#logo-symbol-icon'), viewBox: '0 0 79 75', class: 'logo logo--icon') + content_tag(:svg, tag(:use, href: '#logo-symbol-icon'), viewBox: '0 0 79 79', class: 'logo logo--icon') end def render_logo diff --git a/app/javascript/icons/favicon-16x16.png b/app/javascript/icons/favicon-16x16.png index e7037f4cf1d839538e52f6839d3a6d8030b64dbe..33ef3bb8c05d3b3c0dcb1b302a04979aff8c3abb 100644 GIT binary patch delta 596 zcmV-a0;~Os1^)z)Hh(lpL_t(Ijg68^NL5i7g};B_bMC!TibbgCpobbbsYVSVkdhu^ z)F3D-GL&8up-}@zO`1sr4H|?YK}iM)f*8#TB5WcQSoX4g^ypo;ZC z2}QWlKajjHJw2KVGP&=FdH~{J!g!+2J^t5CChsH5^E86G<^D9SH zv=(67cEk1F6crT$z|dfUAW*t4rVxQb0dDu@ct2?YQliq~skJ**qSW?|B2YfbE8it3K z0cbnyQ(I@ig;5ns(!<)KmI90c8!Boo0J)sv`L4{vqLMID<_gwR=K`f%OeB;Hr~>jA z*HyX*1<$DsBIBw77a4BdoW~f-oM^nv9h&i67zU*m@PBzKPb&TA#)Y|fFv6Fq0voGL zS$7FDE@zK?-HR~3_OJX83L}HhcAW5v`Rt^h^rPL^hb3UZBili&bq7rD&#le!4p>Y0{g`P00001d0WaHh(`!L_t(Ijg^v1YZO5gg}I@DH?zjP!oq|0So*BHGc&*Unn?zgM-Q_5OwZM zcpbRF|6$lGraGLnr!VFZxq=9Y(9{IYEef#~Z`Ohc4GqxJqR`qhJ5$jR*^qKf+7&V9 zk&5NP_7tbO(7vsWW10c9hHPgwep$HH>(kh%IiAfB zhQi~afa&*!lYd>SID9n4qX#~vk^rpL*r*yCQMbmD$td2w33)bLCV#hxSFpH_qQ7sB z(UCGQ#{wJ&>gxq;1U5>$VoV6Qafd{qAjSYN?+fX)V515T0}FswHpwxr7~=s|nAkxU z4J6(Zj>N+{teFGqMbx5!tz5Wv=?6-)z$G>iv44r?xnisb!h9Jf$9+D12o@^- z{GPN`!Pn0Llj9CWFG_Nrs}qN&^9prrMPFw*e1Y9sn`k1Q=t`HtnkP0gd-{hqy>hLQ zVU%6!Tvl4PiPf7CsZ*L-5mf>^XK}t%nbN!7r#ohnWChUKHu(@m#}e^!ZNa~K tjiMFU2spquluQWv&eoCb13iDe_YZ5wK#*&@>^A@a002ovPDHLkV1iKnAZGvo diff --git a/app/javascript/icons/favicon-32x32.png b/app/javascript/icons/favicon-32x32.png index a91b024631ac83fd1f29cbc10171de7c967c7e14..7b9a37403f78afb31f702955ad3f20347bfc9983 100644 GIT binary patch delta 1212 zcmV;t1Vj7a3E~NmHh-5%L_t(og|(MkY*b|s$A5Fq>2AdqyC8-KB$QB~LZBEDgJ2~J zDv3`dMIabKi19%ZLp0GBgNcbIM13H}OXQ-GC=wIp1xZ>U2ndbbTu>CDfnt-UT)J(y zrF)t2VY|0;c1r=7s_04Mu4Suyyz znbn#Z_jtKxe1Exer9}WdfR|s4&o$GfrRau2(74cJdc8wsrEvY4(RwV+nP|G`yV}VP z3!ZQp_mH4zxNt$)zb{Q+uaz=8uF@M=2W;{HRAm_iKO8$&c;oF##*Z&Ps|y-k_BE&Y zW_tpF#m{=ISQSDFKAY9xviKQ~k2Vd`c2NVi4SOEgIu^Q=@=3+rDG6Al}G`(RUHCU;Nk2!ABmo#bTKM4OYDSI9VAJbe_BRJo9D-~Ws8*m# z;fh4^A?di1=5kvyhqe8az-O^Uj!sGA!Vze+i&3L!8re3%Cyg`UFlM%cvw09Yd_aI zGtKD6jiA06KjsNoy4^pWoobD9s`a*f7D@DYoapf~pm4hGvD&@t$wh!RliLgNT}Yp! z^3ukQqL8Zs{j=0{dJp7^C`~(>>vDss2Y=vroYa&l1tZ%3EAls@+f#|u=3NJ7^c5l5 zhZT#?MS+=RO$f^{>oJqrh)qExf>{knjbwUZ45Jq$4$^53Z4R_0Ep=vB^Nh>o?B?z~ zA^n4ylqFy$6TfY#{}9+a(tVFaav}H3*=%apO*383zf^TqQ`6bdaK`S6z}GGH*MG#) zYf;s}{AP-nHaK0nyJ_LsDZ?3Dz3^ns3ysnGkrD`;{pF3(wI=o{P*FxlfkVJKpc|+` z>;W?wBQOn^h|#k1;H*V=L;zs<{1bD{alYry|0T8T{H0+;1WK0OcZVPS%}d;D5Yx9X z?JSj&^2;s?`q@aC-m?8HS#myH6*cRbFT&FXa|N3OGJ&CqMxfJ-bBILE*t6@%oTD)E aw)!7sBjgnuiF2<20000ExH delta 1210 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 + diff --git a/app/javascript/images/logo.svg b/app/javascript/images/logo.svg index 6ffc988e57f..11d0c30c562 100644 --- a/app/javascript/images/logo.svg +++ b/app/javascript/images/logo.svg @@ -1,4 +1,4 @@ - + diff --git a/app/javascript/images/mailer/logo.png b/app/javascript/images/mailer/logo.png index 54c8afd6a32b94476b3401ee5d35fe98edf0fbf8..77d0ef849f34621453100937105e5e068d3c76a4 100644 GIT binary patch literal 1673 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 diff --git a/app/javascript/images/mailer/wordmark.png b/app/javascript/images/mailer/wordmark.png index f3d714d3aae3ea8a9991fe15a4f134112b8261a5..defe50178180a8e2db9c3b5fd26d0c8f4c042d38 100644 GIT binary patch literal 8991 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 literal 8942 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 AKL7v# diff --git a/lib/assets/wordmark.dark.png b/lib/assets/wordmark.dark.png index f3d714d3aae3ea8a9991fe15a4f134112b8261a5..defe50178180a8e2db9c3b5fd26d0c8f4c042d38 100644 GIT binary patch literal 8991 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 literal 8942 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 AKL7v# diff --git a/lib/assets/wordmark.light.png b/lib/assets/wordmark.light.png index 50bbb6bd37fe47541b3dc3479c9be6344e324082..d4485c0fb276fc079c89b4ad8d609699e5e2af03 100644 GIT binary patch literal 8625 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 m^IBcr{r6(MsTIbYy_T! diff --git a/lib/tasks/branding.rake b/lib/tasks/branding.rake index d513465ed9b..2eec7c9e14d 100644 --- a/lib/tasks/branding.rake +++ b/lib/tasks/branding.rake @@ -9,28 +9,28 @@ namespace :branding do desc 'Generate PNG icons and logos for e-mail templates' task generate_mailer_assets: :environment do - rsvg_convert = Terrapin::CommandLine.new('rsvg-convert', '-w :w -h :h :input -o :output') + rsvg_convert = Terrapin::CommandLine.new('rsvg-convert', '-h :size --keep-aspect-ratio :input -o :output') output_dest = Rails.root.join('app', 'javascript', 'images', 'mailer') # Displayed size is 64px, at 3x it's 192px Dir[Rails.root.join('app', 'javascript', 'images', 'icons', '*.svg')].each do |path| - rsvg_convert.run(input: path, w: 192, h: 192, output: output_dest.join("#{File.basename(path, '.svg')}.png")) + rsvg_convert.run(input: path, size: 192, output: output_dest.join("#{File.basename(path, '.svg')}.png")) end # Displayed size is 34px, at 3x it's 102px - rsvg_convert.run(input: Rails.root.join('app', 'javascript', 'images', 'logo-symbol-wordmark.svg'), w: (102 * (261.0 / 66)).ceil, h: 102, output: output_dest.join('wordmark.png')) + rsvg_convert.run(input: Rails.root.join('app', 'javascript', 'images', 'logo-symbol-wordmark.svg'), size: 102, output: output_dest.join('wordmark.png')) # Displayed size is 24px, at 3x it's 72px - rsvg_convert.run(input: Rails.root.join('app', 'javascript', 'images', 'logo-symbol-icon.svg'), w: (72 * (79.0 / 75)).ceil, h: 72, output: output_dest.join('logo.png')) + rsvg_convert.run(input: Rails.root.join('app', 'javascript', 'images', 'logo-symbol-icon.svg'), size: 72, output: output_dest.join('logo.png')) end desc 'Generate light/dark logotypes for GitHub' task generate_github_assets: :environment do - rsvg_convert = Terrapin::CommandLine.new('rsvg-convert', '--stylesheet :stylesheet -w :w -h :h :input -o :output') + rsvg_convert = Terrapin::CommandLine.new('rsvg-convert', '--stylesheet :stylesheet -h :size --keep-aspect-ratio :input -o :output') output_dest = Rails.root.join('lib', 'assets') - rsvg_convert.run(stylesheet: Rails.root.join('lib', 'assets', 'wordmark.dark.css'), input: Rails.root.join('app', 'javascript', 'images', 'logo-symbol-wordmark.svg'), w: (102 * (261.0 / 66)).ceil, h: 102, output: output_dest.join('wordmark.dark.png')) - rsvg_convert.run(stylesheet: Rails.root.join('lib', 'assets', 'wordmark.light.css'), input: Rails.root.join('app', 'javascript', 'images', 'logo-symbol-wordmark.svg'), w: (102 * (261.0 / 66)).ceil, h: 102, output: output_dest.join('wordmark.light.png')) + rsvg_convert.run(stylesheet: Rails.root.join('lib', 'assets', 'wordmark.dark.css'), input: Rails.root.join('app', 'javascript', 'images', 'logo-symbol-wordmark.svg'), size: 102, output: output_dest.join('wordmark.dark.png')) + rsvg_convert.run(stylesheet: Rails.root.join('lib', 'assets', 'wordmark.light.css'), input: Rails.root.join('app', 'javascript', 'images', 'logo-symbol-wordmark.svg'), size: 102, output: output_dest.join('wordmark.light.png')) end desc 'Generate favicons and app icons from SVG source files' @@ -39,7 +39,7 @@ namespace :branding do app_icon_source = Rails.root.join('app', 'javascript', 'images', 'app-icon.svg') output_dest = Rails.root.join('app', 'javascript', 'icons') - rsvg_convert = Terrapin::CommandLine.new('rsvg-convert', '-w :size -h :size :input -o :output') + rsvg_convert = Terrapin::CommandLine.new('rsvg-convert', '-w :size -h :size --keep-aspect-ratio :input -o :output') convert = Terrapin::CommandLine.new('convert', ':input :output') favicon_sizes = [16, 32, 48] @@ -67,12 +67,11 @@ namespace :branding do desc 'Generate badge icon from SVG source files' task generate_app_badge: :environment do - rsvg_convert = Terrapin::CommandLine.new('rsvg-convert', '--stylesheet :stylesheet -w :w -h :h :input -o :output') + rsvg_convert = Terrapin::CommandLine.new('rsvg-convert', '--stylesheet :stylesheet -w :size -h :size --keep-aspect-ratio :input -o :output') badge_source = Rails.root.join('app', 'javascript', 'images', 'logo-symbol-icon.svg') - source_ratio = 79.0 / 75 output_dest = Rails.root.join('public') stylesheet = Rails.root.join('lib', 'assets', 'wordmark.light.css') - rsvg_convert.run(stylesheet: stylesheet, input: badge_source, w: (192 * source_ratio).ceil, h: 192, output: output_dest.join('badge.png')) + rsvg_convert.run(stylesheet: stylesheet, input: badge_source, size: 192, output: output_dest.join('badge.png')) end end diff --git a/public/badge.png b/public/badge.png index 0449e92921efc08cb7c8ef102ca6fd0eb0d95141..bd618c7290b7ada8fac698c65d025f575679e34f 100644 GIT binary patch literal 4058 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 From 620b70c41e4b5d93f2268fd0318bd48e9823a8e1 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 12 Jun 2022 02:48:03 +0200 Subject: [PATCH 011/646] Remove item titles from RSS feeds (#18640) --- app/views/accounts/show.rss.ruby | 1 - app/views/tags/show.rss.ruby | 1 - 2 files changed, 2 deletions(-) diff --git a/app/views/accounts/show.rss.ruby b/app/views/accounts/show.rss.ruby index 5e1c3a51830..fd45a8b2b09 100644 --- a/app/views/accounts/show.rss.ruby +++ b/app/views/accounts/show.rss.ruby @@ -9,7 +9,6 @@ RSS::Builder.build do |doc| @statuses.each do |status| doc.item do |item| - item.title(l(status.created_at)) item.link(ActivityPub::TagManager.instance.url_for(status)) item.pub_date(status.created_at) item.description(rss_status_content_format(status)) diff --git a/app/views/tags/show.rss.ruby b/app/views/tags/show.rss.ruby index 12f5609041f..9ce71be74cc 100644 --- a/app/views/tags/show.rss.ruby +++ b/app/views/tags/show.rss.ruby @@ -7,7 +7,6 @@ RSS::Builder.build do |doc| @statuses.each do |status| doc.item do |item| - item.title(l(status.created_at)) item.link(ActivityPub::TagManager.instance.url_for(status)) item.pub_date(status.created_at) item.description(rss_status_content_format(status)) From ea2640e76f70b874c1b5482392d12f47a2efef00 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Jun 2022 14:51:48 +0900 Subject: [PATCH 012/646] Bump @babel/core from 7.18.2 to 7.18.5 (#18650) Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.18.2 to 7.18.5. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.5/packages/babel-core) --- updated-dependencies: - dependency-name: "@babel/core" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 51 ++++++++++++++++++++++----------------------------- 2 files changed, 23 insertions(+), 30 deletions(-) diff --git a/package.json b/package.json index c4e51e5a002..14d208fb296 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ }, "private": true, "dependencies": { - "@babel/core": "^7.18.2", + "@babel/core": "^7.18.5", "@babel/plugin-proposal-decorators": "^7.18.2", "@babel/plugin-transform-react-inline-elements": "^7.16.7", "@babel/plugin-transform-runtime": "^7.18.2", diff --git a/yarn.lock b/yarn.lock index e5a8573a63e..6367d2473d8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28,10 +28,10 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.10.tgz#711dc726a492dfc8be8220028b1b92482362baab" integrity sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw== -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.2", "@babel/core@^7.7.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.2.tgz#87b2fcd7cce9becaa7f5acebdc4f09f3dd19d876" - integrity sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ== +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.5", "@babel/core@^7.7.2": + version "7.18.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.5.tgz#c597fa680e58d571c28dda9827669c78cdd7f000" + integrity sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.16.7" @@ -39,10 +39,10 @@ "@babel/helper-compilation-targets" "^7.18.2" "@babel/helper-module-transforms" "^7.18.0" "@babel/helpers" "^7.18.2" - "@babel/parser" "^7.18.0" + "@babel/parser" "^7.18.5" "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.2" - "@babel/types" "^7.18.2" + "@babel/traverse" "^7.18.5" + "@babel/types" "^7.18.4" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -347,10 +347,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.0.tgz#10a8d4e656bc01128d299a787aa006ce1a91e112" - integrity sha512-AqDccGC+m5O/iUStSJy3DGRIUFu7WbY/CppZYwrEUB4N0tZlnI8CSTsgL7v5fHVFmUbRv2sd+yy27o8Ydt4MGg== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.18.5": + version "7.18.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.5.tgz#337062363436a893a2d22faa60be5bb37091c83c" + integrity sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12": version "7.17.12" @@ -1095,10 +1095,10 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2", "@babel/traverse@^7.7.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.2.tgz#b77a52604b5cc836a9e1e08dca01cba67a12d2e8" - integrity sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA== +"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2", "@babel/traverse@^7.18.5", "@babel/traverse@^7.7.2": + version "7.18.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.5.tgz#94a8195ad9642801837988ab77f36e992d9a20cd" + integrity sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA== dependencies: "@babel/code-frame" "^7.16.7" "@babel/generator" "^7.18.2" @@ -1106,15 +1106,15 @@ "@babel/helper-function-name" "^7.17.9" "@babel/helper-hoist-variables" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.18.0" - "@babel/types" "^7.18.2" + "@babel/parser" "^7.18.5" + "@babel/types" "^7.18.4" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.12", "@babel/types@^7.18.0", "@babel/types@^7.18.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.2.tgz#191abfed79ebe6f4242f643a9a5cbaa36b10b091" - integrity sha512-0On6B8A4/+mFUto5WERt3EEuG1NznDirvwca1O8UwXQHVY8g3R7OzYgxXdOfMwLO08UrpUD/2+3Bclyq+/C94Q== +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.12", "@babel/types@^7.18.0", "@babel/types@^7.18.2", "@babel/types@^7.18.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.18.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.4.tgz#27eae9b9fd18e9dccc3f9d6ad051336f307be354" + integrity sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw== dependencies: "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" @@ -9885,14 +9885,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1, semver@^7.3.2, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.4: +semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== From 6427e039b7c12de07c6b27891be99b04315bc717 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Jun 2022 14:52:21 +0900 Subject: [PATCH 013/646] Bump sidekiq-unique-jobs from 7.1.23 to 7.1.24 (#18651) Bumps [sidekiq-unique-jobs](https://github.com/mhenrixon/sidekiq-unique-jobs) from 7.1.23 to 7.1.24. - [Release notes](https://github.com/mhenrixon/sidekiq-unique-jobs/releases) - [Changelog](https://github.com/mhenrixon/sidekiq-unique-jobs/blob/main/CHANGELOG.md) - [Commits](https://github.com/mhenrixon/sidekiq-unique-jobs/compare/v7.1.23...v7.1.24) --- updated-dependencies: - dependency-name: sidekiq-unique-jobs dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index e5b665a8a68..ef9bc02b55f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -611,7 +611,7 @@ GEM rufus-scheduler (~> 3.2) sidekiq (>= 4) tilt (>= 1.4.0) - sidekiq-unique-jobs (7.1.23) + sidekiq-unique-jobs (7.1.24) brpoplpush-redis_script (> 0.1.1, <= 2.0.0) concurrent-ruby (~> 1.0, >= 1.0.5) sidekiq (>= 5.0, < 8.0) From 152a4dc68156e88ab899b719050f1ceb2e201daa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Jun 2022 14:53:20 +0900 Subject: [PATCH 014/646] Bump sass from 1.52.2 to 1.52.3 (#18645) Bumps [sass](https://github.com/sass/dart-sass) from 1.52.2 to 1.52.3. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.52.2...1.52.3) --- updated-dependencies: - dependency-name: sass dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 14d208fb296..625d920f97e 100644 --- a/package.json +++ b/package.json @@ -117,7 +117,7 @@ "requestidlecallback": "^0.3.0", "reselect": "^4.1.5", "rimraf": "^3.0.2", - "sass": "^1.52.2", + "sass": "^1.52.3", "sass-loader": "^10.2.0", "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", diff --git a/yarn.lock b/yarn.lock index 6367d2473d8..85547ee8fe8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9794,10 +9794,10 @@ sass-loader@^10.2.0: schema-utils "^3.0.0" semver "^7.3.2" -sass@^1.52.2: - version "1.52.2" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.52.2.tgz#cd1f03e0e7be5bb2cebcf1c34d735f087d790936" - integrity sha512-mfHB2VSeFS7sZlPv9YohB9GB7yWIgQNTGniQwfQ04EoQN0wsQEv7SwpCwy/x48Af+Z3vDeFXz+iuXM3HK/phZQ== +sass@^1.52.3: + version "1.52.3" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.52.3.tgz#b7cc7ffea2341ccc9a0c4fd372bf1b3f9be1b6cb" + integrity sha512-LNNPJ9lafx+j1ArtA7GyEJm9eawXN8KlA1+5dF6IZyoONg1Tyo/g+muOsENWJH/2Q1FHbbV4UwliU0cXMa/VIA== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From af9d7a208a4e9d1dfde48deec5334b97cc3d8a3b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Jun 2022 14:53:49 +0900 Subject: [PATCH 015/646] Bump oj from 3.13.13 to 3.13.14 (#18615) Bumps [oj](https://github.com/ohler55/oj) from 3.13.13 to 3.13.14. - [Release notes](https://github.com/ohler55/oj/releases) - [Changelog](https://github.com/ohler55/oj/blob/develop/CHANGELOG.md) - [Commits](https://github.com/ohler55/oj/compare/v3.13.13...v3.13.14) --- updated-dependencies: - dependency-name: oj dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index ef9bc02b55f..9790df2c9a9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -412,7 +412,7 @@ GEM concurrent-ruby (~> 1.0, >= 1.0.2) sidekiq (>= 3.5) statsd-ruby (~> 1.4, >= 1.4.0) - oj (3.13.13) + oj (3.13.14) omniauth (1.9.1) hashie (>= 3.4.6) rack (>= 1.6.2, < 3) From cc7cebb79a2a9ed284e027b76d1038afb4f2a6ef Mon Sep 17 00:00:00 2001 From: Shlee Date: Wed, 15 Jun 2022 14:35:36 +0000 Subject: [PATCH 016/646] Fix for #18637 - Migrate from elasticsearch-oss to elasticsearch basic (#18643) * Update docker-compose.yml * Update docker-compose.yml * Update docker-compose.yml --- docker-compose.yml | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index b324a65b09a..d86cb55d21f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,13 +25,20 @@ services: # es: # restart: always - # image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.17.4 + # image: docker.elastic.co/elasticsearch/elasticsearch:7.17.4 # environment: - # - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + # - "ES_JAVA_OPTS=-Xms512m -Xmx512m -Des.enforce.bootstrap.checks=true" + # - "xpack.license.self_generated.type=basic" + # - "xpack.security.enabled=false" + # - "xpack.watcher.enabled=false" + # - "xpack.graph.enabled=false" + # - "xpack.ml.enabled=false" + # - "bootstrap.memory_lock=true" # - "cluster.name=es-mastodon" # - "discovery.type=single-node" - # - "bootstrap.memory_lock=true" + # - "thread_pool.write.queue_size=1000" # networks: + # - external_network # - internal_network # healthcheck: # test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"] @@ -41,6 +48,11 @@ services: # memlock: # soft: -1 # hard: -1 + # nofile: + # soft: 65536 + # hard: 65536 + # ports: + # - '127.0.0.1:9200:9200' web: build: . From 3f02157a94cdced0faefc6982c4c6108356d3240 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 16 Jun 2022 06:31:19 +0200 Subject: [PATCH 017/646] New Crowdin updates (#18605) * New translations doorkeeper.en.yml (Indonesian) * New translations simple_form.en.yml (Persian) * New translations activerecord.en.yml (Persian) * New translations doorkeeper.en.yml (Persian) * New translations simple_form.en.yml (Tamil) * New translations doorkeeper.en.yml (Tamil) * New translations activerecord.en.yml (Marathi) * New translations simple_form.en.yml (Spanish, Argentina) * New translations activerecord.en.yml (Spanish, Argentina) * New translations doorkeeper.en.yml (Spanish, Argentina) * New translations simple_form.en.yml (Spanish, Mexico) * New translations activerecord.en.yml (Spanish, Mexico) * New translations doorkeeper.en.yml (Spanish, Mexico) * New translations simple_form.en.yml (Bengali) * New translations activerecord.en.yml (Bengali) * New translations activerecord.en.yml (Asturian) * New translations simple_form.en.yml (Scottish Gaelic) * New translations activerecord.en.yml (Scottish Gaelic) * New translations doorkeeper.en.yml (Scottish Gaelic) * New translations simple_form.en.yml (Asturian) * New translations doorkeeper.en.yml (Asturian) * New translations doorkeeper.en.yml (Sinhala) * New translations simple_form.en.yml (Occitan) * New translations activerecord.en.yml (Occitan) * New translations doorkeeper.en.yml (Occitan) * New translations simple_form.en.yml (Serbian (Latin)) * New translations activerecord.en.yml (Serbian (Latin)) * New translations doorkeeper.en.yml (Serbian (Latin)) * New translations simple_form.en.yml (Kurmanji (Kurdish)) * New translations activerecord.en.yml (Kurmanji (Kurdish)) * New translations doorkeeper.en.yml (Kurmanji (Kurdish)) * New translations simple_form.en.yml (Sorani (Kurdish)) * New translations activerecord.en.yml (Sinhala) * New translations simple_form.en.yml (Chinese Traditional, Hong Kong) * New translations simple_form.en.yml (English, United Kingdom) * New translations activerecord.en.yml (English, United Kingdom) * New translations simple_form.en.yml (Welsh) * New translations activerecord.en.yml (Welsh) * New translations doorkeeper.en.yml (Welsh) * New translations activerecord.en.yml (Chinese Traditional, Hong Kong) * New translations simple_form.en.yml (Sinhala) * New translations doorkeeper.en.yml (Chinese Traditional, Hong Kong) * New translations simple_form.en.yml (Tatar) * New translations activerecord.en.yml (Tatar) * New translations doorkeeper.en.yml (Tatar) * New translations simple_form.en.yml (Malayalam) * New translations activerecord.en.yml (Malayalam) * New translations doorkeeper.en.yml (Malayalam) * New translations simple_form.en.yml (Breton) * New translations activerecord.en.yml (Breton) * New translations doorkeeper.en.yml (Breton) * New translations activerecord.en.yml (Sorani (Kurdish)) * New translations doorkeeper.en.yml (Sorani (Kurdish)) * New translations simple_form.en.yml (Ido) * New translations activerecord.en.yml (Standard Moroccan Tamazight) * New translations simple_form.en.yml (Standard Moroccan Tamazight) * New translations doorkeeper.en.yml (Ido) * New translations activerecord.en.yml (Ido) * New translations doorkeeper.en.yml (Kabyle) * New translations simple_form.en.yml (Corsican) * New translations activerecord.en.yml (Kabyle) * New translations simple_form.en.yml (Kabyle) * New translations doorkeeper.en.yml (Sardinian) * New translations activerecord.en.yml (Sardinian) * New translations simple_form.en.yml (Sardinian) * New translations doorkeeper.en.yml (Corsican) * New translations activerecord.en.yml (Corsican) * New translations doorkeeper.en.yml (Standard Moroccan Tamazight) * New translations en.yml (Korean) * New translations en.yml (Portuguese) * New translations en.yml (Hungarian) * New translations en.yml (Armenian) * New translations en.yml (Dutch) * New translations en.yml (Norwegian) * New translations en.yml (Polish) * New translations en.yml (Albanian) * New translations en.yml (Basque) * New translations en.yml (Turkish) * New translations en.yml (Ukrainian) * New translations en.yml (Chinese Traditional) * New translations en.yml (Icelandic) * New translations en.yml (Portuguese, Brazilian) * New translations en.yml (Indonesian) * New translations en.yml (Tamil) * New translations en.yml (Spanish, Argentina) * New translations en.yml (Finnish) * New translations en.yml (Greek) * New translations en.yml (Galician) * New translations en.yml (Slovak) * New translations en.yml (Chinese Simplified) * New translations en.yml (Swedish) * New translations en.yml (Arabic) * New translations en.yml (French) * New translations en.yml (Spanish) * New translations en.yml (Catalan) * New translations en.yml (Hebrew) * New translations en.yml (Italian) * New translations en.yml (Japanese) * New translations en.yml (Russian) * New translations en.yml (Slovenian) * New translations en.yml (German) * New translations en.yml (Vietnamese) * New translations en.yml (Thai) * New translations en.yml (Scottish Gaelic) * New translations en.yml (Occitan) * New translations en.yml (Persian) * New translations en.yml (Romanian) * New translations en.yml (Bulgarian) * New translations en.yml (Czech) * New translations en.yml (Danish) * New translations en.yml (Spanish, Mexico) * New translations en.yml (Bengali) * New translations en.yml (Corsican) * New translations en.yml (Sardinian) * New translations en.yml (Kabyle) * New translations en.yml (Ido) * New translations en.yml (Kurmanji (Kurdish)) * New translations simple_form.en.yml (Russian) * New translations activerecord.en.yml (Russian) * New translations simple_form.en.yml (Slovenian) * New translations activerecord.en.yml (Slovenian) * New translations simple_form.en.yml (Ukrainian) * New translations activerecord.en.yml (Ukrainian) * New translations en.yml (Sorani (Kurdish)) * New translations en.yml (Welsh) * New translations en.yml (Norwegian Nynorsk) * New translations en.yml (Kazakh) * New translations en.yml (Estonian) * New translations en.yml (Latvian) * New translations en.yml (Malay) * New translations en.yml (Esperanto) * New translations en.yml (Asturian) * New translations en.yml (Chinese Traditional, Hong Kong) * New translations en.yml (Malayalam) * New translations activerecord.en.yml (Asturian) * New translations en.yml (Catalan) * New translations activerecord.en.yml (Catalan) * New translations en.yml (Chinese Simplified) * New translations en.yml (Danish) * New translations en.yml (Ido) * New translations simple_form.en.yml (Danish) * New translations activerecord.en.yml (Danish) * New translations activerecord.en.yml (Italian) * New translations activerecord.en.yml (Chinese Simplified) * New translations simple_form.en.yml (Ido) * New translations activerecord.en.yml (Ido) * New translations en.yml (Korean) * New translations en.yml (Chinese Traditional) * New translations en.yml (Spanish, Argentina) * New translations simple_form.en.yml (Chinese Traditional) * New translations activerecord.en.yml (Chinese Traditional) * New translations en.yml (Chinese Simplified) * New translations en.yml (Spanish, Argentina) * New translations en.yml (Spanish, Mexico) * New translations simple_form.en.yml (Spanish, Argentina) * New translations activerecord.en.yml (Spanish, Argentina) * New translations en.yml (Galician) * New translations simple_form.en.yml (Galician) * New translations activerecord.en.yml (Galician) * New translations en.yml (Greek) * New translations en.yml (Catalan) * New translations en.yml (Afrikaans) * New translations en.yml (Polish) * New translations simple_form.en.yml (Afrikaans) * New translations activerecord.en.yml (Afrikaans) * New translations simple_form.en.yml (Polish) * New translations activerecord.en.yml (Polish) * New translations en.yml (Portuguese) * New translations en.json (German) * New translations simple_form.en.yml (Portuguese) * New translations activerecord.en.yml (Portuguese) * New translations en.yml (Italian) * New translations en.yml (Russian) * New translations en.yml (Turkish) * New translations simple_form.en.yml (Turkish) * New translations activerecord.en.yml (Turkish) * New translations en.yml (Russian) * New translations en.yml (Hungarian) * New translations simple_form.en.yml (Hungarian) * New translations activerecord.en.yml (Hungarian) * New translations en.yml (French) * New translations en.yml (Galician) * New translations en.yml (French) * New translations en.yml (Icelandic) * New translations simple_form.en.yml (Galician) * New translations simple_form.en.yml (French) * New translations activerecord.en.yml (French) * New translations en.yml (Italian) * New translations simple_form.en.yml (Italian) * New translations en.yml (Latvian) * New translations en.json (Latvian) * New translations simple_form.en.yml (Latvian) * New translations activerecord.en.yml (Latvian) * New translations en.yml (Kurmanji (Kurdish)) * New translations en.json (Latvian) * New translations simple_form.en.yml (Kurmanji (Kurdish)) * New translations activerecord.en.yml (Kurmanji (Kurdish)) * New translations en.yml (Catalan) * New translations simple_form.en.yml (Catalan) * New translations en.yml (Chinese Traditional) * New translations simple_form.en.yml (Chinese Traditional) * New translations en.yml (Vietnamese) * New translations en.yml (Vietnamese) * New translations simple_form.en.yml (Vietnamese) * New translations activerecord.en.yml (Vietnamese) * New translations en.yml (Japanese) * New translations simple_form.en.yml (Japanese) * New translations activerecord.en.yml (Japanese) * New translations en.yml (Czech) * New translations en.yml (French) * New translations en.yml (Czech) * New translations en.json (Arabic) * New translations en.yml (Slovak) * New translations en.json (Slovak) * New translations en.yml (Indonesian) * New translations en.yml (Czech) * New translations en.yml (Czech) * New translations simple_form.en.yml (Czech) * New translations activerecord.en.yml (Czech) * New translations en.yml (Spanish, Argentina) * New translations en.yml (Indonesian) * New translations en.yml (Indonesian) * New translations en.yml (Hebrew) * New translations en.json (Hebrew) * New translations simple_form.en.yml (Hebrew) * New translations en.yml (Albanian) * New translations en.json (Albanian) * New translations simple_form.en.yml (Albanian) * New translations activerecord.en.yml (Albanian) * New translations devise.en.yml (Albanian) * New translations en.yml (German) * New translations en.json (German) * New translations simple_form.en.yml (German) * New translations activerecord.en.yml (German) * New translations en.json (German) * New translations en.yml (Spanish) * New translations en.yml (Spanish) * New translations simple_form.en.yml (Spanish) * New translations activerecord.en.yml (Spanish) * New translations en.json (Ido) * New translations en.yml (Chinese Simplified) * New translations en.json (Occitan) * New translations en.json (Occitan) * New translations en.json (Esperanto) * New translations en.json (Esperanto) * Run `yarn manage:translations` * Run `bundle exec i18n-tasks normalize` * New translations en.yml (Albanian) * Run `bundle exec i18n-tasks normalize` Co-authored-by: Yamagishi Kazutoshi --- app/javascript/mastodon/locales/af.json | 2 +- app/javascript/mastodon/locales/ar.json | 10 +- app/javascript/mastodon/locales/de.json | 8 +- app/javascript/mastodon/locales/eo.json | 40 ++--- app/javascript/mastodon/locales/es-MX.json | 2 +- app/javascript/mastodon/locales/ga.json | 66 ++++----- app/javascript/mastodon/locales/gd.json | 2 +- app/javascript/mastodon/locales/he.json | 156 ++++++++++---------- app/javascript/mastodon/locales/id.json | 2 +- app/javascript/mastodon/locales/io.json | 2 +- app/javascript/mastodon/locales/ku.json | 2 +- app/javascript/mastodon/locales/lv.json | 40 ++--- app/javascript/mastodon/locales/oc.json | 18 +-- app/javascript/mastodon/locales/pt-BR.json | 4 +- app/javascript/mastodon/locales/sk.json | 18 +-- app/javascript/mastodon/locales/sq.json | 74 +++++----- config/locales/activerecord.af.yml | 8 + config/locales/activerecord.ast.yml | 10 ++ config/locales/activerecord.ca.yml | 8 + config/locales/activerecord.cs.yml | 8 + config/locales/activerecord.da.yml | 8 + config/locales/activerecord.de.yml | 8 + config/locales/activerecord.en-GB.yml | 1 + config/locales/activerecord.es-AR.yml | 8 + config/locales/activerecord.es.yml | 8 + config/locales/activerecord.fr.yml | 8 + config/locales/activerecord.gl.yml | 8 + config/locales/activerecord.hu.yml | 8 + config/locales/activerecord.io.yml | 8 + config/locales/activerecord.it.yml | 8 + config/locales/activerecord.ja.yml | 8 + config/locales/activerecord.ku.yml | 8 + config/locales/activerecord.lv.yml | 8 + config/locales/activerecord.pl.yml | 8 + config/locales/activerecord.pt-PT.yml | 8 + config/locales/activerecord.ru.yml | 8 + config/locales/activerecord.sl.yml | 8 + config/locales/activerecord.sq.yml | 8 + config/locales/activerecord.tr.yml | 8 + config/locales/activerecord.uk.yml | 8 + config/locales/activerecord.vi.yml | 8 + config/locales/activerecord.zh-CN.yml | 4 + config/locales/activerecord.zh-TW.yml | 8 + config/locales/af.yml | 18 +++ config/locales/ar.yml | 2 - config/locales/ast.yml | 4 +- config/locales/bg.yml | 3 - config/locales/bn.yml | 1 - config/locales/ca.yml | 23 ++- config/locales/ckb.yml | 2 - config/locales/co.yml | 2 - config/locales/cs.yml | 27 +++- config/locales/cy.yml | 2 - config/locales/da.yml | 23 ++- config/locales/de.yml | 24 ++- config/locales/doorkeeper.af.yml | 163 +++++++++++++++++++++ config/locales/doorkeeper.pt-BR.yml | 17 ++- config/locales/el.yml | 9 +- config/locales/eo.yml | 18 +-- config/locales/es-AR.yml | 23 ++- config/locales/es-MX.yml | 4 +- config/locales/es.yml | 23 ++- config/locales/et.yml | 2 - config/locales/eu.yml | 2 - config/locales/fa.yml | 2 - config/locales/fi.yml | 2 - config/locales/fr.yml | 28 +++- config/locales/gd.yml | 3 +- config/locales/gl.yml | 29 +++- config/locales/he.yml | 12 +- config/locales/hr.yml | 2 - config/locales/hu.yml | 23 ++- config/locales/hy.yml | 2 - config/locales/id.yml | 18 ++- config/locales/io.yml | 23 ++- config/locales/is.yml | 11 +- config/locales/it.yml | 23 ++- config/locales/ja.yml | 15 +- config/locales/ka.yml | 1 - config/locales/kab.yml | 1 - config/locales/kk.yml | 2 - config/locales/ko.yml | 11 +- config/locales/ku.yml | 23 ++- config/locales/lt.yml | 1 - config/locales/lv.yml | 30 +++- config/locales/ml.yml | 1 - config/locales/ms.yml | 1 - config/locales/nl.yml | 3 +- config/locales/nn.yml | 2 - config/locales/no.yml | 2 - config/locales/oc.yml | 2 - config/locales/pl.yml | 24 ++- config/locales/pt-BR.yml | 11 +- config/locales/pt-PT.yml | 23 ++- config/locales/ro.yml | 2 - config/locales/ru.yml | 40 ++++- config/locales/sc.yml | 2 - config/locales/simple_form.af.yml | 10 ++ config/locales/simple_form.ca.yml | 6 + config/locales/simple_form.cs.yml | 6 + config/locales/simple_form.da.yml | 6 + config/locales/simple_form.de.yml | 6 + config/locales/simple_form.en-GB.yml | 1 + config/locales/simple_form.es-AR.yml | 6 + config/locales/simple_form.es-MX.yml | 2 + config/locales/simple_form.es.yml | 6 + config/locales/simple_form.fr.yml | 6 + config/locales/simple_form.gl.yml | 6 + config/locales/simple_form.he.yml | 2 + config/locales/simple_form.hu.yml | 6 + config/locales/simple_form.io.yml | 6 + config/locales/simple_form.it.yml | 6 + config/locales/simple_form.ja.yml | 3 + config/locales/simple_form.ku.yml | 6 + config/locales/simple_form.lv.yml | 6 + config/locales/simple_form.pl.yml | 6 + config/locales/simple_form.pt-PT.yml | 6 + config/locales/simple_form.ru.yml | 6 + config/locales/simple_form.sk.yml | 3 +- config/locales/simple_form.sl.yml | 6 + config/locales/simple_form.sq.yml | 6 + config/locales/simple_form.tr.yml | 6 + config/locales/simple_form.uk.yml | 6 + config/locales/simple_form.vi.yml | 6 + config/locales/simple_form.zh-TW.yml | 6 + config/locales/sk.yml | 3 +- config/locales/sl.yml | 20 ++- config/locales/sq.yml | 111 +++++++++++++- config/locales/sr-Latn.yml | 1 - config/locales/sr.yml | 1 - config/locales/sv.yml | 2 - config/locales/ta.yml | 1 - config/locales/th.yml | 2 - config/locales/tr.yml | 21 ++- config/locales/uk.yml | 25 +++- config/locales/vi.yml | 23 ++- config/locales/zh-CN.yml | 12 +- config/locales/zh-HK.yml | 2 - config/locales/zh-TW.yml | 22 ++- 139 files changed, 1450 insertions(+), 369 deletions(-) create mode 100644 config/locales/activerecord.en-GB.yml create mode 100644 config/locales/simple_form.en-GB.yml diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json index 8d261dbbc5c..52cb08217bc 100644 --- a/app/javascript/mastodon/locales/af.json +++ b/app/javascript/mastodon/locales/af.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Verwyder hierdie keuse", "compose_form.poll.switch_to_multiple": "Verander die peiling na verskeie keuses", "compose_form.poll.switch_to_single": "Verander die peiling na 'n enkel keuse", - "compose_form.publish": "Publish", + "compose_form.publish": "Publisheer", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Stoor veranderinge", "compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}", diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index f655b694c4d..406868d6504 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -17,7 +17,7 @@ "account.follow": "متابعة", "account.followers": "مُتابِعون", "account.followers.empty": "لا أحدَ يُتابع هذا المُستخدم إلى حد الآن.", - "account.followers_counter": "{count, plural, zero{لا مُتابع} one {مُتابعٌ واحِد} two{مُتابعانِ اِثنان} few{{counter} مُتابِعين} many{{counter} مُتابِعًا} other {{counter} مُتابع}}", + "account.followers_counter": "{count, plural, zero{لا مُتابع} one {مُتابعٌ واحِد} two {مُتابعانِ اِثنان} few {{counter} مُتابِعين} many {{counter} مُتابِعًا} other {{counter} مُتابع}}", "account.following": "الإشتراكات", "account.following_counter": "{count, plural, zero{لا يُتابِع} one {يُتابِعُ واحد} two{يُتابِعُ اِثنان} few{يُتابِعُ {counter}} many{يُتابِعُ {counter}} other {يُتابِعُ {counter}}}", "account.follows.empty": "لا يُتابع هذا المُستخدمُ أيَّ أحدٍ حتى الآن.", @@ -95,7 +95,7 @@ "compose.language.change": "تغيير اللغة", "compose.language.search": "البحث عن لغة…", "compose_form.direct_message_warning_learn_more": "تَعَلَّم المَزيد", - "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", + "compose_form.encryption_warning": "إنّ المنشورات على ماستدون ليست مشفرة من النهاية إلى النهاية. لا تشارك أي معلومات حساسة عبر ماستدون.", "compose_form.hashtag_warning": "لن يُدرَج هذا المنشور تحت أي وسم بما أنَّه غير مُدرَج. فقط المنشورات العامة يُمكن البحث عنها بواسطة الوسم.", "compose_form.lock_disclaimer": "حسابُك غير {locked}. يُمكن لأي شخص مُتابعتك لرؤية (منشورات المتابعين فقط).", "compose_form.lock_disclaimer.lock": "مُقفَل", @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "إزالة هذا الخيار", "compose_form.poll.switch_to_multiple": "تغيِير الاستطلاع للسماح باِخيارات مُتعدِّدة", "compose_form.poll.switch_to_single": "تغيِير الاستطلاع للسماح باِخيار واحد فقط", - "compose_form.publish": "Publish", + "compose_form.publish": "انشر", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "احفظ التعديلات", "compose_form.sensitive.hide": "{count, plural, one {الإشارة إلى الوَسط كمُحتوى حسّاس} two{الإشارة إلى الوسطان كمُحتويان حسّاسان} other {الإشارة إلى الوسائط كمُحتويات حسّاسة}}", @@ -512,8 +512,8 @@ "trends.trending_now": "المتداولة الآن", "ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.", "units.short.billion": "{count} مليار", - "units.short.million": "{count} مليون", - "units.short.thousand": "{count} ألف", + "units.short.million": "{count} مليون", + "units.short.thousand": "{count} ألف", "upload_area.title": "اسحب ثم أفلت للرفع", "upload_button.label": "إضافة وسائط", "upload_error.limit": "لقد تم بلوغ الحد الأقصى المسموح به لإرسال الملفات.", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 8a77b212cc8..aaf552a1e35 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -70,7 +70,7 @@ "column.blocks": "Blockierte Profile", "column.bookmarks": "Lesezeichen", "column.community": "Lokale Zeitleiste", - "column.direct": "Mensaxes directas", + "column.direct": "Direktnachrichten", "column.directory": "Profile durchsuchen", "column.domain_blocks": "Blockierte Domains", "column.favourites": "Favoriten", @@ -95,7 +95,7 @@ "compose.language.change": "Sprache ändern", "compose.language.search": "Sprachen durchsuchen...", "compose_form.direct_message_warning_learn_more": "Mehr erfahren", - "compose_form.encryption_warning": "Beiträge von Mastodon sind nicht Ende-zu-Ende verschlüsselt. Teile keine senible Infomartionen über Mastodon.", + "compose_form.encryption_warning": "Beiträge von Mastodon sind nicht Ende-zu-Ende verschlüsselt. Teile keine senible Informationen über Mastodon.", "compose_form.hashtag_warning": "Dieser Beitrag wird nicht durch Hashtags entdeckbar sein, weil er ungelistet ist. Nur öffentliche Beiträge tauchen in Hashtag-Zeitleisten auf.", "compose_form.lock_disclaimer": "Dein Profil ist nicht {locked}. Wer dir folgen will, kann das jederzeit tun und dann auch deine privaten Beiträge sehen.", "compose_form.lock_disclaimer.lock": "gesperrt", @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Wahl entfernen", "compose_form.poll.switch_to_multiple": "Umfrage ändern, um mehrere Optionen zu erlauben", "compose_form.poll.switch_to_single": "Umfrage ändern, um eine einzige Wahl zu erlauben", - "compose_form.publish": "Publish", + "compose_form.publish": "Veröffentlichen", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Änderungen speichern", "compose_form.sensitive.hide": "Medien als NSFW markieren", @@ -351,7 +351,7 @@ "notifications.filter.mentions": "Erwähnungen", "notifications.filter.polls": "Ergebnisse der Umfrage", "notifications.filter.statuses": "Updates von Personen, denen du folgst", - "notifications.grant_permission": "Zugriff gewährt.", + "notifications.grant_permission": "Berechtigung erteilen.", "notifications.group": "{count} Benachrichtigungen", "notifications.mark_as_read": "Alle Benachrichtigungen als gelesen markieren", "notifications.permission_denied": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Berechtigung verweigert wurde.", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 9abba0bfa7a..236d2549697 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -6,7 +6,7 @@ "account.block": "Bloki @{name}", "account.block_domain": "Bloki domajnon {domain}", "account.blocked": "Blokita", - "account.browse_more_on_origin_server": "Rigardi pli al la originala profilo", + "account.browse_more_on_origin_server": "Vidi pli ĉe la originala profilo", "account.cancel_follow_request": "Nuligi peton de sekvado", "account.direct": "Rekte mesaĝi @{name}", "account.disable_notifications": "Ĉesu sciigi min kiam @{name} mesaĝi", @@ -22,7 +22,7 @@ "account.following_counter": "{count, plural, one {{counter} Sekvato} other {{counter} Sekvatoj}}", "account.follows.empty": "Tiu uzanto ankoraŭ ne sekvas iun.", "account.follows_you": "Sekvas vin", - "account.hide_reblogs": "Kaŝi diskonigojn de @{name}", + "account.hide_reblogs": "Kaŝi plusendojn de @{name}", "account.joined": "Kuniĝis {date}", "account.link_verified_on": "La posedanto de tiu ligilo estis kontrolita je {date}", "account.locked_info": "La privateco de tiu konto estas elektita kiel fermita. La posedanto povas mane akcepti tiun, kiu povas sekvi rin.", @@ -30,14 +30,14 @@ "account.mention": "Mencii @{name}", "account.moved_to": "{name} moviĝis al:", "account.mute": "Silentigi @{name}", - "account.mute_notifications": "Silentigi sciigojn de @{name}", + "account.mute_notifications": "Silentigi la sciigojn de @{name}", "account.muted": "Silentigita", "account.posts": "Mesaĝoj", - "account.posts_with_replies": "Kun respondoj", + "account.posts_with_replies": "Mesaĝoj kaj respondoj", "account.report": "Signali @{name}", "account.requested": "Atendo de aprobo. Alklaku por nuligi peton de sekvado", - "account.share": "Diskonigi la profilon de @{name}", - "account.show_reblogs": "Montri diskonigojn de @{name}", + "account.share": "Kundividi la profilon de @{name}", + "account.show_reblogs": "Montri la plusendojn de @{name}", "account.statuses_counter": "{count, plural, one {{counter} Mesaĝo} other {{counter} Mesaĝoj}}", "account.unblock": "Malbloki @{name}", "account.unblock_domain": "Malbloki {domain}", @@ -74,7 +74,7 @@ "column.directory": "Trarigardi profilojn", "column.domain_blocks": "Blokitaj domajnoj", "column.favourites": "Stelumoj", - "column.follow_requests": "Petoj de sekvado", + "column.follow_requests": "Demandoj de sekvado", "column.home": "Hejmo", "column.lists": "Listoj", "column.mutes": "Silentigitaj uzantoj", @@ -99,7 +99,7 @@ "compose_form.hashtag_warning": "Ĉi tiu mesaĝo ne estos listigita per ajna kradvorto. Nur publikaj mesaĝoj estas serĉeblaj per kradvortoj.", "compose_form.lock_disclaimer": "Via konta ne estas {locked}. Iu ajn povas sekvi vin por vidi viajn mesaĝojn, kiuj estas nur por sekvantoj.", "compose_form.lock_disclaimer.lock": "ŝlosita", - "compose_form.placeholder": "Pri kio vi pensas?", + "compose_form.placeholder": "Kion vi pensas?", "compose_form.poll.add_option": "Aldoni elekteblon", "compose_form.poll.duration": "Balotenketa daŭro", "compose_form.poll.option_placeholder": "Elekteblo {number}", @@ -198,10 +198,10 @@ "explore.trending_tags": "Kradvortoj", "follow_recommendations.done": "Farita", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", - "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", + "follow_recommendations.lead": "La mesaĝoj de personoj kiujn vi sekvas, aperos kronologie en via abonfluo. Ne timu erari, vi povas ĉesi sekvi facile iam ajn!", "follow_request.authorize": "Rajtigi", "follow_request.reject": "Rifuzi", - "follow_requests.unlocked_explanation": "Kvankam via konto ne estas ŝlosita, la dungitaro de {domain} opiniis, ke vi eble volus revizii petojn de sekvadon el ĉi tiuj kontoj permane.", + "follow_requests.unlocked_explanation": "Kvankam via konto ne estas ŝlosita, la teamo de {domain} pensis ke vi eble volas kontroli la demandojn de sekvado de ĉi tiuj kontoj permane.", "generic.saved": "Konservita", "getting_started.developers": "Programistoj", "getting_started.directory": "Profilujo", @@ -221,7 +221,7 @@ "hashtag.column_settings.tag_mode.none": "Neniu", "hashtag.column_settings.tag_toggle": "Aldoni pliajn etikedojn por ĉi tiu kolumno", "home.column_settings.basic": "Bazaj agordoj", - "home.column_settings.show_reblogs": "Montri diskonigojn", + "home.column_settings.show_reblogs": "Montri plusendojn", "home.column_settings.show_replies": "Montri respondojn", "home.hide_announcements": "Kaŝi anoncojn", "home.show_announcements": "Montri anoncojn", @@ -230,7 +230,7 @@ "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutoj}}", "keyboard_shortcuts.back": "reveni", "keyboard_shortcuts.blocked": "malfermi la liston de blokitaj uzantoj", - "keyboard_shortcuts.boost": "diskonigi", + "keyboard_shortcuts.boost": "Plusendi", "keyboard_shortcuts.column": "fokusi mesaĝon en unu el la kolumnoj", "keyboard_shortcuts.compose": "enfokusigi la tekstujon", "keyboard_shortcuts.description": "Priskribo", @@ -259,7 +259,7 @@ "keyboard_shortcuts.start": "malfermi la kolumnon «por komenci»", "keyboard_shortcuts.toggle_hidden": "montri/kaŝi tekston malantaŭ enhava averto", "keyboard_shortcuts.toggle_sensitivity": "montri/kaŝi aŭdovidaĵojn", - "keyboard_shortcuts.toot": "komenci tute novan mesaĝon", + "keyboard_shortcuts.toot": "Krei novan mesaĝon", "keyboard_shortcuts.unfocus": "malenfokusigi la tekstujon aŭ la serĉilon", "keyboard_shortcuts.up": "iri supren en la listo", "lightbox.close": "Fermi", @@ -321,7 +321,7 @@ "notification.mention": "{name} menciis vin", "notification.own_poll": "Via balotenketo finiĝitis", "notification.poll": "Partoprenita balotenketo finiĝis", - "notification.reblog": "{name} diskonigis vian mesaĝon", + "notification.reblog": "{name} plusendis vian mesaĝon", "notification.status": "{name} ĵus afiŝita", "notification.update": "{name} redaktis afiŝon", "notifications.clear": "Forviŝi sciigojn", @@ -337,7 +337,7 @@ "notifications.column_settings.mention": "Mencioj:", "notifications.column_settings.poll": "Balotenketaj rezultoj:", "notifications.column_settings.push": "Puŝsciigoj", - "notifications.column_settings.reblog": "Diskonigoj:", + "notifications.column_settings.reblog": "Plusendoj:", "notifications.column_settings.show": "Montri en kolumno", "notifications.column_settings.sound": "Eligi sonon", "notifications.column_settings.status": "Novaj mesaĝoj:", @@ -345,7 +345,7 @@ "notifications.column_settings.unread_notifications.highlight": "Marki nelegitajn sciigojn", "notifications.column_settings.update": "Redaktoj:", "notifications.filter.all": "Ĉiuj", - "notifications.filter.boosts": "Diskonigoj", + "notifications.filter.boosts": "Plusendoj", "notifications.filter.favourites": "Stelumoj", "notifications.filter.follows": "Sekvoj", "notifications.filter.mentions": "Mencioj", @@ -449,8 +449,8 @@ "status.admin_status": "Malfermi ĉi tiun mesaĝon en la kontrola interfaco", "status.block": "Bloki @{name}", "status.bookmark": "Aldoni al la legosignoj", - "status.cancel_reblog_private": "Ne plu diskonigi", - "status.cannot_reblog": "Ĉi tiu mesaĝo ne diskonigeblas", + "status.cancel_reblog_private": "Malfari la plusendon", + "status.cannot_reblog": "Ĉi tiu mesaĝo ne povas esti plusendita", "status.copy": "Kopii la ligilon al la mesaĝo", "status.delete": "Forigi", "status.detailed_status": "Detala konversacia vido", @@ -475,8 +475,8 @@ "status.read_more": "Legi pli", "status.reblog": "Plusendi", "status.reblog_private": "Plusendi kiel la originala videbleco", - "status.reblogged_by": "{name} diskonigis", - "status.reblogs.empty": "Ankoraŭ neniu diskonigis tiun mesaĝon. Kiam iu faros tion, tiu aperos ĉi tie.", + "status.reblogged_by": "{name} plusendis", + "status.reblogs.empty": "Neniu ankoraŭ plusendis la mesaĝon. Kiam iu faros tion, ili aperos ĉi tie.", "status.redraft": "Forigi kaj reskribi", "status.remove_bookmark": "Forigi legosignon", "status.reply": "Respondi", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 4e8a3c4c6f9..570a031865f 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Eliminar esta opción", "compose_form.poll.switch_to_multiple": "Modificar encuesta para permitir múltiples opciones", "compose_form.poll.switch_to_single": "Modificar encuesta para permitir una única opción", - "compose_form.publish": "Publish", + "compose_form.publish": "Publicar", "compose_form.publish_loud": "¡{publish}!", "compose_form.save_changes": "Guardar cambios", "compose_form.sensitive.hide": "Marcar multimedia como sensible", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index bb9c4ac1f36..2d2551845a2 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -60,7 +60,7 @@ "announcement.announcement": "Fógra", "attachments_list.unprocessed": "(unprocessed)", "autosuggest_hashtag.per_week": "{count} per week", - "boost_modal.combo": "You can press {combo} to skip this next time", + "boost_modal.combo": "Is féidir leat brúigh {combo} chun é seo a scipeáil an chéad uair eile", "bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.retry": "Bain triail as arís", "bundle_column_error.title": "Network error", @@ -73,7 +73,7 @@ "column.direct": "Direct messages", "column.directory": "Brabhsáil próifílí", "column.domain_blocks": "Blocked domains", - "column.favourites": "Favourites", + "column.favourites": "Roghanna", "column.follow_requests": "Follow requests", "column.home": "Baile", "column.lists": "Liostaí", @@ -120,7 +120,7 @@ "confirmations.block.confirm": "Block", "confirmations.block.message": "Are you sure you want to block {name}?", "confirmations.delete.confirm": "Delete", - "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete.message": "An bhfuil tú cinnte gur mhaith leat an phostáil seo a scriosadh?", "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", "confirmations.discard_edit_media.confirm": "Faigh réidh de", @@ -133,7 +133,7 @@ "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "An bhfuil tú cinnte gur mhaith leat {name} a bhalbhú?", "confirmations.redraft.confirm": "Delete & redraft", - "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.redraft.message": "An bhfuil tú cinnte gur mhaith leat an phostáil sin a scriosadh agus athdhréachtú? Beidh roghanna agus treisithe caillte, agus beidh freagraí ar an bpostáil bhunúsach ina ndílleachtaí.", "confirmations.reply.confirm": "Reply", "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.unfollow.confirm": "Ná lean", @@ -164,7 +164,7 @@ "emoji_button.symbols": "Symbols", "emoji_button.travel": "Taisteal ⁊ Áiteanna", "empty_column.account_suspended": "Account suspended", - "empty_column.account_timeline": "No posts found", + "empty_column.account_timeline": "Níl postálacha ar bith anseo!", "empty_column.account_unavailable": "Níl an phróifíl ar fáil", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.bookmarked_statuses": "You don't have any bookmarked posts yet. When you bookmark one, it will show up here.", @@ -172,8 +172,8 @@ "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.explore_statuses": "Nothing is trending right now. Check back later!", - "empty_column.favourited_statuses": "You don't have any favourite posts yet. When you favourite one, it will show up here.", - "empty_column.favourites": "No one has favourited this post yet. When someone does, they will show up here.", + "empty_column.favourited_statuses": "Níor roghnaigh tú postáil ar bith fós. Nuair a roghnaigh tú ceann, beidh sí le feiceáil anseo.", + "empty_column.favourites": "Níor roghnaigh éinne an phostáil seo fós. Nuair a roghnaigh duine éigin, beidh siad le feiceáil anseo.", "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.hashtag": "There is nothing in this hashtag yet.", @@ -221,7 +221,7 @@ "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "home.column_settings.basic": "Basic", - "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_reblogs": "Taispeáin treisithe", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", "home.show_announcements": "Show announcements", @@ -230,15 +230,15 @@ "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.boost": "Treisigh postáil", "keyboard_shortcuts.column": "to focus a status in one of the columns", "keyboard_shortcuts.compose": "to focus the compose textarea", "keyboard_shortcuts.description": "Description", "keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.down": "to move down in the list", - "keyboard_shortcuts.enter": "to open status", - "keyboard_shortcuts.favourite": "to favourite", - "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.enter": "Oscail postáil", + "keyboard_shortcuts.favourite": "Roghnaigh postáil", + "keyboard_shortcuts.favourites": "Oscail liosta roghanna", "keyboard_shortcuts.federated": "to open federated timeline", "keyboard_shortcuts.heading": "Keyboard Shortcuts", "keyboard_shortcuts.home": "to open home timeline", @@ -252,14 +252,14 @@ "keyboard_shortcuts.open_media": "to open media", "keyboard_shortcuts.pinned": "to open pinned posts list", "keyboard_shortcuts.profile": "Oscail próifíl an t-údar", - "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.reply": "Freagair ar phostáil", "keyboard_shortcuts.requests": "to open follow requests list", "keyboard_shortcuts.search": "to focus search", "keyboard_shortcuts.spoilers": "to show/hide CW field", "keyboard_shortcuts.start": "to open \"get started\" column", "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "to start a brand new post", + "keyboard_shortcuts.toot": "Cuir tús le postáil nua", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Close", @@ -294,13 +294,13 @@ "navigation_bar.blocks": "Blocked users", "navigation_bar.bookmarks": "Bookmarks", "navigation_bar.community_timeline": "Local timeline", - "navigation_bar.compose": "Compose new post", + "navigation_bar.compose": "Cum postáil nua", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", "navigation_bar.domain_blocks": "Hidden domains", "navigation_bar.edit_profile": "Cuir an phróifíl in eagar", "navigation_bar.explore": "Explore", - "navigation_bar.favourites": "Favourites", + "navigation_bar.favourites": "Roghanna", "navigation_bar.filters": "Focail bhalbhaithe", "navigation_bar.follow_requests": "Follow requests", "navigation_bar.follows_and_followers": "Ag leanúint agus do do leanúint", @@ -315,20 +315,20 @@ "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", "notification.admin.sign_up": "{name} signed up", - "notification.favourite": "{name} favourited your status", + "notification.favourite": "Roghnaigh {name} do phostáil", "notification.follow": "Lean {name} thú", "notification.follow_request": "D'iarr {name} ort do chuntas a leanúint", "notification.mention": "{name} mentioned you", "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", - "notification.reblog": "{name} boosted your status", - "notification.status": "{name} just posted", + "notification.reblog": "Threisigh {name} do phostáil", + "notification.status": "Phostáil {name} díreach", "notification.update": "Chuir {name} postáil in eagar", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", - "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.favourite": "Roghanna:", "notifications.column_settings.filter_bar.advanced": "Display all categories", "notifications.column_settings.filter_bar.category": "Quick filter bar", "notifications.column_settings.filter_bar.show_bar": "Show filter bar", @@ -337,16 +337,16 @@ "notifications.column_settings.mention": "Mentions:", "notifications.column_settings.poll": "Poll results:", "notifications.column_settings.push": "Push notifications", - "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.reblog": "Treisithe:", "notifications.column_settings.show": "Show in column", "notifications.column_settings.sound": "Play sound", - "notifications.column_settings.status": "New posts:", + "notifications.column_settings.status": "Postálacha nua:", "notifications.column_settings.unread_notifications.category": "Unread notifications", "notifications.column_settings.unread_notifications.highlight": "Highlight unread notifications", "notifications.column_settings.update": "Eagair:", "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", + "notifications.filter.boosts": "Treisithe", + "notifications.filter.favourites": "Roghanna", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", @@ -402,7 +402,7 @@ "report.category.subtitle": "Choose the best match", "report.category.title": "Tell us what's going on with this {type}", "report.category.title_account": "próifíl", - "report.category.title_status": "post", + "report.category.title_status": "postáil", "report.close": "Déanta", "report.comment.title": "Is there anything else you think we should know?", "report.forward": "Forward to {target}", @@ -435,7 +435,7 @@ "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", "search_popout.tips.hashtag": "haischlib", - "search_popout.tips.status": "status", + "search_popout.tips.status": "postáil", "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", "search_popout.tips.user": "user", "search_results.accounts": "Daoine", @@ -449,8 +449,8 @@ "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", "status.bookmark": "Bookmark", - "status.cancel_reblog_private": "Unboost", - "status.cannot_reblog": "This post cannot be boosted", + "status.cancel_reblog_private": "Díthreisigh", + "status.cannot_reblog": "Ní féidir an phostáil seo a threisiú", "status.copy": "Copy link to status", "status.delete": "Scrios", "status.detailed_status": "Detailed conversation view", @@ -459,7 +459,7 @@ "status.edited": "Curtha in eagar in {date}", "status.edited_x_times": "Curtha in eagar {count, plural, one {{count} uair amháin} two {{count} uair} few {{count} uair} many {{count} uair} other {{count} uair}}", "status.embed": "Embed", - "status.favourite": "Favourite", + "status.favourite": "Rogha", "status.filtered": "Filtered", "status.history.created": "{name} created {date}", "status.history.edited": "Curtha in eagar ag {name} in {date}", @@ -473,10 +473,10 @@ "status.pin": "Pionnáil ar do phróifíl", "status.pinned": "Pinned post", "status.read_more": "Read more", - "status.reblog": "Boost", - "status.reblog_private": "Boost with original visibility", - "status.reblogged_by": "{name} boosted", - "status.reblogs.empty": "No one has boosted this post yet. When someone does, they will show up here.", + "status.reblog": "Treisigh", + "status.reblog_private": "Treisigh le léargas bunúsach", + "status.reblogged_by": "Treisithe ag {name}", + "status.reblogs.empty": "Níor threisigh éinne an phostáil seo fós. Nuair a threisigh duine éigin, beidh siad le feiceáil anseo.", "status.redraft": "Delete & re-draft", "status.remove_bookmark": "Remove bookmark", "status.reply": "Reply", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 1910e1037ef..bdfc02af750 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Thoir an roghainn seo air falbh", "compose_form.poll.switch_to_multiple": "Atharraich an cunntas-bheachd ach an gabh iomadh roghainn a thaghadh", "compose_form.poll.switch_to_single": "Atharraich an cunntas-bheachd gus nach gabh ach aon roghainn a thaghadh", - "compose_form.publish": "Publish", + "compose_form.publish": "Foillsich", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Sàbhail na h-atharraichean", "compose_form.sensitive.hide": "{count, plural, one {Cuir comharra gu bheil am meadhan frionasach} two {Cuir comharra gu bheil na meadhanan frionasach} few {Cuir comharra gu bheil na meadhanan frionasach} other {Cuir comharra gu bheil na meadhanan frionasach}}", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index bc2485c6f86..ecbc373c62e 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -4,7 +4,7 @@ "account.badges.bot": "בוט", "account.badges.group": "קבוצה", "account.block": "חסמי את @{name}", - "account.block_domain": "חסמו את שם המתחם (דומיין) {domain}", + "account.block_domain": "חסמו את קהילת {domain}", "account.blocked": "חסום", "account.browse_more_on_origin_server": "ראה יותר בפרופיל המקורי", "account.cancel_follow_request": "בטל בקשת מעקב", @@ -32,20 +32,20 @@ "account.mute": "להשתיק את @{name}", "account.mute_notifications": "להסתיר התראות מ @{name}", "account.muted": "מושתק", - "account.posts": "חצרוצים", - "account.posts_with_replies": "חצרוצים ותגובות", + "account.posts": "פוסטים", + "account.posts_with_replies": "פוסטים ותגובות", "account.report": "דווח על @{name}", "account.requested": "בהמתנה לאישור. לחצי כדי לבטל בקשת מעקב", "account.share": "שתף את הפרופיל של @{name}", "account.show_reblogs": "הצג הדהודים מאת @{name}", "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", "account.unblock": "הסר את החסימה של @{name}", - "account.unblock_domain": "הסראת שם המתחם {domain}", + "account.unblock_domain": "הסירי את החסימה של קהילת {domain}", "account.unblock_short": "הסר חסימה", "account.unendorse": "אל תקדם בפרופיל", "account.unfollow": "הפסקת מעקב", "account.unmute": "הפסקת השתקת @{name}", - "account.unmute_notifications": "להפסיק השתקת הודעות מ @{name}", + "account.unmute_notifications": "להפסיק השתקת התראות מ @{name}", "account.unmute_short": "ביטול השתקה", "account_note.placeholder": "יש ללחוץ כדי להוסיף הערות", "admin.dashboard.daily_retention": "קצב שימור משתמשים (פר יום) אחרי ההרשמה", @@ -54,49 +54,49 @@ "admin.dashboard.retention.cohort": "חודש רישום", "admin.dashboard.retention.cohort_size": "משתמשים חדשים", "alert.rate_limited.message": "נא לנסות אחרי {retry_time, time, medium}.", - "alert.rate_limited.title": "מגבלות מיכסה", + "alert.rate_limited.title": "חלה הגבלת קצב", "alert.unexpected.message": "אירעה שגיאה בלתי צפויה.", "alert.unexpected.title": "אופס!", - "announcement.announcement": "הודעה", + "announcement.announcement": "הכרזה", "attachments_list.unprocessed": "(לא מעובד)", "autosuggest_hashtag.per_week": "{count} לשבוע", "boost_modal.combo": "ניתן להקיש {combo} כדי לדלג בפעם הבאה", - "bundle_column_error.body": "משהו השתבש בעת הצגת הרכיב הזה.", + "bundle_column_error.body": "משהו השתבש בעת טעינת הרכיב הזה.", "bundle_column_error.retry": "לנסות שוב", "bundle_column_error.title": "שגיאת רשת", "bundle_modal_error.close": "לסגור", "bundle_modal_error.message": "משהו השתבש בעת טעינת הרכיב הזה.", "bundle_modal_error.retry": "לנסות שוב", - "column.blocks": "חסימות", + "column.blocks": "משתמשים חסומים", "column.bookmarks": "סימניות", - "column.community": "ציר זמן מקומי", + "column.community": "פיד שרת מקומי", "column.direct": "הודעות ישירות", - "column.directory": "גלוש פרופילים", - "column.domain_blocks": "Hidden domains", + "column.directory": "עיין בפרופילים", + "column.domain_blocks": "קהילות (שמות מתחם) מוסתרות", "column.favourites": "חיבובים", "column.follow_requests": "בקשות מעקב", - "column.home": "בבית", + "column.home": "פיד הבית", "column.lists": "רשימות", "column.mutes": "השתקות", "column.notifications": "התראות", - "column.pins": "Pinned toot", - "column.public": "בפרהסיה", - "column_back_button.label": "חזרה", - "column_header.hide_settings": "הסתרת העדפות", - "column_header.moveLeft_settings": "הזחת טור לשמאל", - "column_header.moveRight_settings": "הזחת טור לימין", - "column_header.pin": "קיבוע", + "column.pins": "פווסטים נעוצים", + "column.public": "פיד כללי (כל השרתים)", + "column_back_button.label": "בחזרה", + "column_header.hide_settings": "הסתרת הגדרות", + "column_header.moveLeft_settings": "הזזת טור לשמאל", + "column_header.moveRight_settings": "הזזת טור לימין", + "column_header.pin": "הצמדה", "column_header.show_settings": "הצגת העדפות", - "column_header.unpin": "שחרור קיבוע", + "column_header.unpin": "שחרור הצמדה", "column_subheading.settings": "אפשרויות", "community.column_settings.local_only": "מקומי בלבד", - "community.column_settings.media_only": "Media only", - "community.column_settings.remote_only": "מרחוק בלבד", - "compose.language.change": "Change language", - "compose.language.search": "Search languages...", + "community.column_settings.media_only": "מדיה בלבד", + "community.column_settings.remote_only": "מרוחק בלבד", + "compose.language.change": "שינוי שפת הפוסט", + "compose.language.search": "חיפוש שפות...", "compose_form.direct_message_warning_learn_more": "מידע נוסף", - "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", - "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.encryption_warning": "פוסטים במסטודון לא מוצפנים מקצה לקצה. אל תשתפו מידע רגיש במסטודון.", + "compose_form.hashtag_warning": "פוסט זה לא יירשם תחת תגי הקבצה (האשטאגים) היות והנראות שלו היא 'לא רשום'. רק פוסטים ציבוריים יכולים להימצא באמצעות תגי הקבצה.", "compose_form.lock_disclaimer": "חשבונך אינו {locked}. כל אחד יוכל לעקוב אחריך כדי לקרוא את הודעותיך המיועדות לעוקבים בלבד.", "compose_form.lock_disclaimer.lock": "נעול", "compose_form.placeholder": "מה עובר לך בראש?", @@ -106,36 +106,36 @@ "compose_form.poll.remove_option": "הסר בחירה זו", "compose_form.poll.switch_to_multiple": "אפשרו בחירה מרובה בסקר", "compose_form.poll.switch_to_single": "אפשרו בחירה בודדת בסקר", - "compose_form.publish": "Publish", + "compose_form.publish": "פרסום", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "שמירת שינויים", "compose_form.sensitive.hide": "{count, plural, one {סימון מידע כרגיש} other {סימון מידע כרגיש}}", "compose_form.sensitive.marked": "{count, plural, one {מידע מסומן כרגיש} other {מידע מסומן כרגיש}}", "compose_form.sensitive.unmarked": "{count, plural, one {מידע לא מסומן כרגיש} other {מידע לא מסומן כרגיש}}", - "compose_form.spoiler.marked": "Text is hidden behind warning", - "compose_form.spoiler.unmarked": "Text is not hidden", - "compose_form.spoiler_placeholder": "אזהרת תוכן", + "compose_form.spoiler.marked": "הסר אזהרת תוכן", + "compose_form.spoiler.unmarked": "הוסף אזהרת תוכן", + "compose_form.spoiler_placeholder": "כתוב את האזהרה שלך כאן", "confirmation_modal.cancel": "ביטול", "confirmations.block.block_and_report": "לחסום ולדווח", "confirmations.block.confirm": "לחסום", - "confirmations.block.message": "לחסום את {name}?", + "confirmations.block.message": "האם את/ה בטוח/ה שברצונך למחוק את \"{name}\"?", "confirmations.delete.confirm": "למחוק", - "confirmations.delete.message": "למחוק את ההודעה?", + "confirmations.delete.message": "בטוח/ה שאת/ה רוצה למחוק את ההודעה?", "confirmations.delete_list.confirm": "למחוק", "confirmations.delete_list.message": "האם אתם בטוחים שאתם רוצים למחוק את הרשימה לצמיתות?", "confirmations.discard_edit_media.confirm": "השלך", "confirmations.discard_edit_media.message": "יש לך שינויים לא שמורים לתיאור המדיה. להשליך אותם בכל זאת?", - "confirmations.domain_block.confirm": "הסתר קהילה שלמה", - "confirmations.domain_block.message": "באמת באמת לחסום את כל קהילת {domain}? ברב המקרים השתקות נבחרות של מספר משתמשים מסויימים צריכה להספיק.", + "confirmations.domain_block.confirm": "חסמו לגמרי את שם המתחם (דומיין)", + "confirmations.domain_block.message": "בטוחה שברצונך באמת לחסום את קהילת {domain}? ברב המקרים השתקה וחסימה של מספר משתמשים עשוייה להספיק. לא תראי תוכל מכלל שם המתחם בפידים הציבוריים או בהתראות שלך. העוקבים שלך מהקהילה הזאת יוסרו", "confirmations.logout.confirm": "להתנתק", "confirmations.logout.message": "האם אתם בטוחים שאתם רוצים להתנתק?", "confirmations.mute.confirm": "להשתיק", - "confirmations.mute.explanation": "זה יסתיר חצרוצים שלהם וחצרוצים המזכירים אותם, אבל עדיין יתיר להם לראות פוסטים שלך ולעקוב אחריך.", + "confirmations.mute.explanation": "זה יסתיר פוסטים שלהם ופוסטים שמאזכרים אותם, אבל עדיין יתיר להם לראות פוסטים שלך ולעקוב אחריך.", "confirmations.mute.message": "להשתיק את {name}?", "confirmations.redraft.confirm": "מחק וערוך מחדש", - "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", + "confirmations.redraft.message": "בטוחה שאת רוצה למחוק ולהתחיל טיוטה חדשה? חיבובים והדהודים יאבדו, ותגובות לפוסט המקורי ישארו יתומות.", "confirmations.reply.confirm": "הגב", - "confirmations.reply.message": "הגבה עכשיו ידרוס את ההודעה שאתם כותבים כעת. האם אתם בטוחים שברצונכם להמשיך?", + "confirmations.reply.message": "תגובה עכשיו תדרוס את ההודעה שכבר התחלתים לכתוב. האם אתם בטוחים שברצונכם להמשיך?", "confirmations.unfollow.confirm": "להפסיק מעקב", "confirmations.unfollow.message": "להפסיק מעקב אחרי {name}?", "conversation.delete": "מחיקת שיחה", @@ -149,7 +149,7 @@ "embed.instructions": "ניתן להטמיע את ההודעה באתרך ע\"י העתקת הקוד שלהלן.", "embed.preview": "דוגמא כיצד זה יראה:", "emoji_button.activity": "פעילות", - "emoji_button.clear": "Clear", + "emoji_button.clear": "ניקוי", "emoji_button.custom": "מיוחדים", "emoji_button.flags": "דגלים", "emoji_button.food": "אוכל ושתיה", @@ -164,22 +164,22 @@ "emoji_button.symbols": "סמלים", "emoji_button.travel": "טיולים ואתרים", "empty_column.account_suspended": "חשבון מושהה", - "empty_column.account_timeline": "No toots here!", + "empty_column.account_timeline": "אין עדיין אף פוסט!", "empty_column.account_unavailable": "פרופיל לא זמין", "empty_column.blocks": "עדיין לא חסמתם משתמשים אחרים.", "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", - "empty_column.community": "טור הסביבה ריק. יש לפרסם משהו כדי שדברים יתרחילו להתגלגל!", + "empty_column.community": "פיד השרת המקומי ריק. יש לפרסם משהו כדי שדברים יתרחילו להתגלגל!", "empty_column.direct": "אין לך שום הודעות פרטיות עדיין. כשתשלחו או תקבלו אחת, היא תופיע כאן.", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "אין עדיין קהילות מוסתרות.", "empty_column.explore_statuses": "אין נושאים חמים כרגע. אולי אחר כך!", - "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", - "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.favourited_statuses": "אין עדיין פוסטים שחיבבת. כשתחבב את הראשון, הוא יופיע כאן.", + "empty_column.favourites": "עוד לא חיבבו את הפוסט הזה. כאשר זה יקרה, החיבובים יופיעו כאן.", "empty_column.follow_recommendations": "נראה שלא ניתן לייצר המלצות עבורך. נסה/י להשתמש בחיפוש כדי למצוא אנשים מוכרים או לבדוק את הנושאים החמים.", "empty_column.follow_requests": "אין לך שום בקשות מעקב עדיין. לכשיתקבלו כאלה, הן תופענה כאן.", "empty_column.hashtag": "אין כלום בהאשתג הזה עדיין.", "empty_column.home": "אף אחד לא במעקב עדיין. אפשר לבקר ב{public} או להשתמש בחיפוש כדי להתחיל ולהכיר חצוצרנים אחרים. {suggestions}", "empty_column.home.suggestions": "ראה/י כמה הצעות", - "empty_column.list": "אין עדיין מאום ברשימה.", + "empty_column.list": "אין עדיין פריטים ברשימה. כאשר חברים ברשימה הזאת יפרסמו פוסטים חדשים, הם יופיעו פה.", "empty_column.lists": "אין לך שום רשימות עדיין. לכשיהיו, הן תופענה כאן.", "empty_column.mutes": "עוד לא השתקת שום משתמש.", "empty_column.notifications": "אין התראות עדיין. יאללה, הגיע הזמן להתחיל להתערבב.", @@ -194,22 +194,22 @@ "explore.suggested_follows": "עבורך", "explore.title": "סיור", "explore.trending_links": "חדשות", - "explore.trending_statuses": "חצרוצים", + "explore.trending_statuses": "פוסטים", "explore.trending_tags": "האשטאגים", "follow_recommendations.done": "בוצע", "follow_recommendations.heading": "עקב/י אחרי אנשים שתרצה/י לראות את חצרוציהם! הנה כמה הצעות.", "follow_recommendations.lead": "חצרוצים מאנשים במעקב יופיעו בסדר כרונולוגי בפיד הבית. אל תחששו מטעויות, אפשר להסיר מעקב באותה הקלות ובכל זמן!", - "follow_request.authorize": "קבלה", + "follow_request.authorize": "הרשאה", "follow_request.reject": "דחיה", "follow_requests.unlocked_explanation": "למרות שחשבונך אינו נעול, צוות {domain} חושב שאולי כדאי לוודא את בקשות המעקב האלה ידנית.", "generic.saved": "נשמר", "getting_started.developers": "מפתחות", - "getting_started.directory": "ספריית פרופילים", + "getting_started.directory": "מדריך פרופילים", "getting_started.documentation": "תיעוד", "getting_started.heading": "בואו נתחיל", "getting_started.invite": "להזמין אנשים", "getting_started.open_source_notice": "מסטודון היא תוכנה חופשית (בקוד פתוח). ניתן לתרום או לדווח על בעיות בגיטהאב: {github}.", - "getting_started.security": "Security", + "getting_started.security": "הגדרות חשבון", "getting_started.terms": "תנאי שימוש", "hashtag.column_header.tag_mode.all": "ו- {additional}", "hashtag.column_header.tag_mode.any": "או {additional}", @@ -218,8 +218,8 @@ "hashtag.column_settings.select.placeholder": "הזן תגי הקבצה…", "hashtag.column_settings.tag_mode.all": "כל אלה", "hashtag.column_settings.tag_mode.any": "כל אלה", - "hashtag.column_settings.tag_mode.none": "אפאחד מאלה", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.column_settings.tag_mode.none": "אף אחד מאלה", + "hashtag.column_settings.tag_toggle": "כלול תגיות נוספות בטור זה", "home.column_settings.basic": "למתחילים", "home.column_settings.show_reblogs": "הצגת הדהודים", "home.column_settings.show_replies": "הצגת תגובות", @@ -259,7 +259,7 @@ "keyboard_shortcuts.start": "to open \"get started\" column", "keyboard_shortcuts.toggle_hidden": "הצגת/הסתרת טקסט מוסתר מאחורי אזהרת תוכן", "keyboard_shortcuts.toggle_sensitivity": "הצגת/הסתרת מדיה", - "keyboard_shortcuts.toot": "להתחיל חיצרוץ חדש", + "keyboard_shortcuts.toot": "להתחיל פוסט חדש", "keyboard_shortcuts.unfocus": "לצאת מתיבת חיבור/חיפוש", "keyboard_shortcuts.up": "לנוע במעלה הרשימה", "lightbox.close": "סגירה", @@ -267,8 +267,8 @@ "lightbox.expand": "הרחבת קופסת צפייה בתמונה", "lightbox.next": "הלאה", "lightbox.previous": "הקודם", - "limited_account_hint.action": "Show profile anyway", - "limited_account_hint.title": "This profile has been hidden by the moderators of your server.", + "limited_account_hint.action": "הצג חשבון בכל זאת", + "limited_account_hint.title": "פרופיל זה הוסתר ע\"י מנהלי השרת שלך.", "lists.account.add": "הוסף לרשימה", "lists.account.remove": "הסר מרשימה", "lists.delete": "מחיקת רשימה", @@ -288,32 +288,32 @@ "missing_indicator.label": "לא נמצא", "missing_indicator.sublabel": "לא ניתן היה למצוא את המשאב", "mute_modal.duration": "משך הזמן", - "mute_modal.hide_notifications": "להסתיר הודעות מחשבון זה?", + "mute_modal.hide_notifications": "להסתיר התראות מחשבון זה?", "mute_modal.indefinite": "ללא תאריך סיום", "navigation_bar.apps": "יישומונים לנייד", - "navigation_bar.blocks": "חסימות", + "navigation_bar.blocks": "משתמשים חסומים", "navigation_bar.bookmarks": "סימניות", - "navigation_bar.community_timeline": "ציר זמן מקומי", - "navigation_bar.compose": "Compose new toot", + "navigation_bar.community_timeline": "פיד שרת מקומי", + "navigation_bar.compose": "צור פוסט חדש", "navigation_bar.direct": "הודעות ישירות", "navigation_bar.discover": "גלה", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "קהילות (שמות מתחם) חסומות", "navigation_bar.edit_profile": "עריכת פרופיל", - "navigation_bar.explore": "חקור", + "navigation_bar.explore": "סיור", "navigation_bar.favourites": "חיבובים", "navigation_bar.filters": "מילים מושתקות", "navigation_bar.follow_requests": "בקשות מעקב", "navigation_bar.follows_and_followers": "נעקבים ועוקבים", - "navigation_bar.info": "מידע נוסף", + "navigation_bar.info": "אודות שרת זה", "navigation_bar.keyboard_shortcuts": "קיצורי מקלדת", "navigation_bar.lists": "רשימות", - "navigation_bar.logout": "יציאה", + "navigation_bar.logout": "התנתקות", "navigation_bar.mutes": "השתקות", "navigation_bar.personal": "אישי", - "navigation_bar.pins": "חיצרוצים מקובעים", + "navigation_bar.pins": "פוסטים נעוצים", "navigation_bar.preferences": "העדפות", "navigation_bar.public_timeline": "ציר זמן בין-קהילתי", - "navigation_bar.security": "בטיחות", + "navigation_bar.security": "אבטחה", "notification.admin.sign_up": "{name} נרשמו", "notification.favourite": "חצרוצך חובב על ידי {name}", "notification.follow": "{name} במעקב אחרייך", @@ -365,20 +365,20 @@ "poll.refresh": "רענון", "poll.total_people": "{count, plural, one {# איש/אישה} other {# אנשים}}", "poll.total_votes": "{count, plural, one {# קול} other {# קולות}}", - "poll.vote": "קול", + "poll.vote": "הצבעה", "poll.voted": "הצבעת לתשובה זו", "poll.votes": "{votes, plural, one {# קול} other {# קולות}}", "poll_button.add_poll": "הוספת סקר", "poll_button.remove_poll": "הסרת סקר", "privacy.change": "שינוי פרטיות ההודעה", - "privacy.direct.long": "הצג רק למי שהודעה זו פונה אליו", - "privacy.direct.short": "אנשים מוזכרים בלבד", + "privacy.direct.long": "רק למשתמשים מאוזכרים (mentioned)", + "privacy.direct.short": "למאוזכרים בלבד", "privacy.private.long": "הצג לעוקבים בלבד", - "privacy.private.short": "עוקבים בלבד", + "privacy.private.short": "לעוקבים בלבד", "privacy.public.long": "גלוי לכל", "privacy.public.short": "פומבי", "privacy.unlisted.long": "גלוי לכל, אבל מוסתר מאמצעי גילוי", - "privacy.unlisted.short": "לא לפיד הכללי", + "privacy.unlisted.short": "לא רשום (לא לפיד הכללי)", "refresh": "רענון", "regeneration_indicator.label": "טוען…", "regeneration_indicator.sublabel": "פיד הבית שלך בהכנה!", @@ -395,7 +395,7 @@ "relative_time.today": "היום", "reply_indicator.cancel": "ביטול", "report.block": "לחסום", - "report.block_explanation": "לא ניתן יהיה לראות את חצרוציהם. הם לא יוכלו לראות את חצרוציך או לעקוב אחריך. הם יוכלו לדעת שהם חסומים.", + "report.block_explanation": "לא ניתן יהיה לראות את הפוסטים שלהן. הן לא יוכלו לראות את הפוסטים שלך או לעקוב אחריך. הם יוכלו לדעת שהם חסומים.", "report.categories.other": "אחר", "report.categories.spam": "ספאם", "report.categories.violation": "התוכן מפר אחד או יותר מחוקי השרת", @@ -451,7 +451,7 @@ "status.bookmark": "סימניה", "status.cancel_reblog_private": "הסרת הדהוד", "status.cannot_reblog": "לא ניתן להדהד הודעה זו", - "status.copy": "Copy link to status", + "status.copy": "העתק/י קישור לפוסט זה", "status.delete": "מחיקה", "status.detailed_status": "תצוגת שיחה מפורטת", "status.direct": "הודעה ישירה ל@{name}", @@ -469,8 +469,8 @@ "status.more": "עוד", "status.mute": "להשתיק את @{name}", "status.mute_conversation": "השתקת שיחה", - "status.open": "הרחבת הודעה", - "status.pin": "לקבע באודות", + "status.open": "הרחבת פוסט זה", + "status.pin": "הצמדה לפרופיל שלי", "status.pinned": "Pinned toot", "status.read_more": "לקרוא עוד", "status.reblog": "הדהוד", @@ -480,7 +480,7 @@ "status.redraft": "מחיקה ועריכה מחדש", "status.remove_bookmark": "הסרת סימניה", "status.reply": "תגובה", - "status.replyAll": "תגובה לכולם", + "status.replyAll": "תגובה לפתיל", "status.report": "דיווח על @{name}", "status.sensitive_warning": "תוכן רגיש", "status.share": "שיתוף", @@ -488,15 +488,15 @@ "status.show_less_all": "להציג פחות מהכל", "status.show_more": "הראה יותר", "status.show_more_all": "להציג יותר מהכל", - "status.show_thread": "להציג סיב", + "status.show_thread": "הצג כחלק מפתיל", "status.uncached_media_warning": "לא זמין", "status.unmute_conversation": "הסרת השתקת שיחה", "status.unpin": "לשחרר מקיבוע באודות", "suggestions.dismiss": "להתעלם מהצעה", "suggestions.header": "ייתכן שזה יעניין אותך…", - "tabs_bar.federated_timeline": "ציר זמן בין-קהילתי", - "tabs_bar.home": "בבית", - "tabs_bar.local_timeline": "ציר זמן מקומי", + "tabs_bar.federated_timeline": "פיד כללי (בין-קהילתי)", + "tabs_bar.home": "פיד הבית", + "tabs_bar.local_timeline": "פיד שרת מקומי", "tabs_bar.notifications": "התראות", "tabs_bar.search": "חיפוש", "time_remaining.days": "נותרו {number, plural, one {# יום} other {# ימים}}", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 9b8b6f5fedb..10f80ee6165 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -95,7 +95,7 @@ "compose.language.change": "Ganti bahasa", "compose.language.search": "Telusuri bahasa...", "compose_form.direct_message_warning_learn_more": "Pelajari selengkapnya", - "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", + "compose_form.encryption_warning": "Kiriman di Mastodon tidak dienkripsi end-to-end. Jangan bagikan informasi sensitif melalui Mastodon.", "compose_form.hashtag_warning": "Toot ini tidak akan ada dalam daftar tagar manapun karena telah diatur sebagai tidak terdaftar. Hanya postingan publik yang bisa dicari dengan tagar.", "compose_form.lock_disclaimer": "Akun anda tidak {locked}. Semua orang dapat mengikuti anda untuk melihat postingan khusus untuk pengikut anda.", "compose_form.lock_disclaimer.lock": "terkunci", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 4c609edb7ff..3eea9dcca8d 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -442,7 +442,7 @@ "search_results.all": "Omna", "search_results.hashtags": "Hashtagi", "search_results.nothing_found": "Ne povas ganar irgo per ca trovvorti", - "search_results.statuses": "Toots", + "search_results.statuses": "Posti", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {rezulto} other {rezulti}}", "status.admin_account": "Apertez jerintervizajo por @{name}", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index 12c15e38978..a38f18fa345 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Vê hilbijarê rake", "compose_form.poll.switch_to_multiple": "Rapirsî yê biguherînin da ku destûr bidin vebijarkên pirjimar", "compose_form.poll.switch_to_single": "Rapirsîyê biguherîne da ku mafê bidî tenê vebijêrkek", - "compose_form.publish": "Publish", + "compose_form.publish": "Biweşîne", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Guhertinan tomar bike", "compose_form.sensitive.hide": "{count, plural, one {Medya wekî hestiyar nîşan bide} other {Medya wekî hestiyar nîşan bide}}", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 1a981ea0e47..b889948cf5c 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -26,7 +26,7 @@ "account.joined": "Pievienojās {date}", "account.link_verified_on": "Šīs saites piederība ir pārbaudīta {date}", "account.locked_info": "Šī konta privātuma statuss ir slēgts. Īpašnieks izskatīs, kurš viņam drīkst sekot.", - "account.media": "Mediji", + "account.media": "Multivide", "account.mention": "Piemin @{name}", "account.moved_to": "{name} ir pārcelts uz:", "account.mute": "Apklusināt @{name}", @@ -90,7 +90,7 @@ "column_header.unpin": "Atspraust", "column_subheading.settings": "Iestatījumi", "community.column_settings.local_only": "Tikai vietējie", - "community.column_settings.media_only": "Tikai mediji", + "community.column_settings.media_only": "Tikai multivide", "community.column_settings.remote_only": "Tikai attālinātie", "compose.language.change": "Mainīt valodu", "compose.language.search": "Meklēt valodas...", @@ -109,9 +109,9 @@ "compose_form.publish": "Publicēt", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Saglabāt izmaiņas", - "compose_form.sensitive.hide": "{count, plural, one {Atzīmēt mediju kā sensitīvu} other {Atzīmēt medijus kā sensitīvus}}", - "compose_form.sensitive.marked": "{count, plural, one {Medijs ir atzīmēts kā sensitīvs} other {Mediji ir atzīmēti kā sensitīvi}}", - "compose_form.sensitive.unmarked": "{count, plural, one {Medijs nav atzīmēts kā sensitīvs} other {Mediji nav atzīmēti kā sensitīvi}}", + "compose_form.sensitive.hide": "{count, plural, one {Atzīmēt multividi kā sensitīvu} other {Atzīmēt multivides kā sensitīvas}}", + "compose_form.sensitive.marked": "{count, plural, one {Multivide ir atzīmēta kā sensitīva} other {Multivides ir atzīmētas kā sensitīvas}}", + "compose_form.sensitive.unmarked": "{count, plural, one {Multivide nav atzīmēts kā sensitīva} other {Multivides nav atzīmētas kā sensitīvas}}", "compose_form.spoiler.marked": "Noņemt satura brīdinājumu", "compose_form.spoiler.unmarked": "Pievienot satura brīdinājumu", "compose_form.spoiler_placeholder": "Ieraksti savu brīdinājumu šeit", @@ -124,7 +124,7 @@ "confirmations.delete_list.confirm": "Dzēst", "confirmations.delete_list.message": "Vai tiešam vēlies neatgriezeniski dzēst šo sarakstu?", "confirmations.discard_edit_media.confirm": "Izmest", - "confirmations.discard_edit_media.message": "Vai tev ir nesaglabātas izmaiņas mediju aprakstā vai priekšskatījumā, vai tomēr atmest tās?", + "confirmations.discard_edit_media.message": "Vai tev ir nesaglabātas izmaiņas multivides aprakstā vai priekšskatījumā, vai tomēr atmest tās?", "confirmations.domain_block.confirm": "Bloķēt visu domēnu", "confirmations.domain_block.message": "Vai tu tiešām, tiešam vēlies bloķēt visu domēnu {domain}? Lielākajā daļā gadījumu pietiek ja nobloķē vai apklusini kādu. Tu neredzēsi saturu vai paziņojumus no šī domēna nevienā laika līnijā. Tavi sekotāji no šī domēna tiks noņemti.", "confirmations.logout.confirm": "Iziet", @@ -171,7 +171,7 @@ "empty_column.community": "Vietējā ziņu lenta ir tukša. Uzraksti kaut ko publiski, lai viss notiktu!", "empty_column.direct": "Patrez tev nav privātu ziņu. Tiklīdz tādu nosūtīsi vai saņemsi, tās parādīsies šeit.", "empty_column.domain_blocks": "Vēl nav neviena bloķēta domēna.", - "empty_column.explore_statuses": "Pašlaik nekas nav tendēts. Pārbaudiet vēlāk!", + "empty_column.explore_statuses": "Pašlaik nekā aktuāla nav. Pārbaudi vēlāk!", "empty_column.favourited_statuses": "Patreiz tev nav neviena izceltā ieraksta. Kad kādu izcelsi, tas parādīsies šeit.", "empty_column.favourites": "Neviens šo ziņojumu vel nav izcēlis. Kad būs, tie parādīsies šeit.", "empty_column.follow_recommendations": "Šķiet, ka tev nevarēja ģenerēt ieteikumus. Vari mēģināt izmantot meklēšanu, lai meklētu cilvēkus, kurus tu varētu pazīt, vai izpētīt populārākās atsauces.", @@ -188,7 +188,7 @@ "error.unexpected_crash.explanation_addons": "Šo lapu nevarēja parādīt pareizi. Šo kļūdu, iespējams, izraisīja pārlūkprogrammas papildinājums vai automātiskās tulkošanas rīki.", "error.unexpected_crash.next_steps": "Mēģini atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai vietējo lietotni.", "error.unexpected_crash.next_steps_addons": "Mēģini tos atspējot un atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai vietējo lietotni.", - "errors.unexpected_crash.copy_stacktrace": "Iekopēt starpliktuvē", + "errors.unexpected_crash.copy_stacktrace": "Kopēt stacktrace uz starpliktuvi", "errors.unexpected_crash.report_issue": "Ziņot par problēmu", "explore.search_results": "Meklēšanas rezultāti", "explore.suggested_follows": "Tev", @@ -207,7 +207,7 @@ "getting_started.directory": "Profila direktorija", "getting_started.documentation": "Dokumentācija", "getting_started.heading": "Darba sākšana", - "getting_started.invite": "Uzaiciniet cilvēkus", + "getting_started.invite": "Uzaicini cilvēkus", "getting_started.open_source_notice": "Mastodon ir atvērtā koda programmatūra. Tu vari dot savu ieguldījumu vai arī ziņot par problēmām {github}.", "getting_started.security": "Konta iestatījumi", "getting_started.terms": "Pakalpojuma noteikumi", @@ -230,7 +230,7 @@ "intervals.full.minutes": "{number, plural, one {# minūte} other {# minūtes}}", "keyboard_shortcuts.back": "Pāriet atpakaļ", "keyboard_shortcuts.blocked": "Atvērt bloķēto lietotāju sarakstu", - "keyboard_shortcuts.boost": "Palielināt ziņu", + "keyboard_shortcuts.boost": "Atbalstīt ziņu", "keyboard_shortcuts.column": "Fokusēt kolonnu", "keyboard_shortcuts.compose": "Fokusēt veidojamā teksta lauku", "keyboard_shortcuts.description": "Apraksts", @@ -245,11 +245,11 @@ "keyboard_shortcuts.hotkey": "Ātrais taustiņš", "keyboard_shortcuts.legend": "Parādīt šo leģendu", "keyboard_shortcuts.local": "Atvērt vietējo ziņu lenti", - "keyboard_shortcuts.mention": "Minējuma autors", + "keyboard_shortcuts.mention": "Pieminēt autoru", "keyboard_shortcuts.muted": "Atvērt apklusināto lietotāju sarakstu", - "keyboard_shortcuts.my_profile": "Atvērt manu profilu", + "keyboard_shortcuts.my_profile": "Atvērt savu profilu", "keyboard_shortcuts.notifications": "Atvērt paziņojumu kolonnu", - "keyboard_shortcuts.open_media": "Atvērt mediju", + "keyboard_shortcuts.open_media": "Atvērt multividi", "keyboard_shortcuts.pinned": "Atvērt piesprausto ziņu sarakstu", "keyboard_shortcuts.profile": "Atvērt autora profilu", "keyboard_shortcuts.reply": "Atbildēt", @@ -258,15 +258,15 @@ "keyboard_shortcuts.spoilers": "Rādīt/slēpt CW lauku", "keyboard_shortcuts.start": "Atvērt kolonnu “Darba sākšana”", "keyboard_shortcuts.toggle_hidden": "Rādīt/slēpt tekstu aiz CW", - "keyboard_shortcuts.toggle_sensitivity": "Rādīt/slēpt mediju", - "keyboard_shortcuts.toot": "Sākt jaunu ziņu", + "keyboard_shortcuts.toggle_sensitivity": "Rādīt/slēpt multividi", + "keyboard_shortcuts.toot": "Sāc jaunu ziņu", "keyboard_shortcuts.unfocus": "Atfokusēt teksta veidošanu/meklēšanu", "keyboard_shortcuts.up": "Pārvietot sarakstā uz augšu", "lightbox.close": "Aizvērt", - "lightbox.compress": "Saspiest attēla ietvaru", - "lightbox.expand": "Paplašināt attēla ietvaru", + "lightbox.compress": "Saspiest attēla skata lodziņu", + "lightbox.expand": "Izvērst attēla skata lodziņu", "lightbox.next": "Tālāk", - "lightbox.previous": "Iepriekš", + "lightbox.previous": "Iepriekšējais", "limited_account_hint.action": "Tik un tā rādīt profilu", "limited_account_hint.title": "Tava servera moderatori ir paslēpuši šo profilu.", "lists.account.add": "Pievienot sarakstam", @@ -276,10 +276,10 @@ "lists.edit.submit": "Mainīt virsrakstu", "lists.new.create": "Pievienot sarakstu", "lists.new.title_placeholder": "Jaunais saraksta nosaukums", - "lists.replies_policy.followed": "Jebkuram lietotājam, kuram seko", + "lists.replies_policy.followed": "Jebkurš sekots lietotājs", "lists.replies_policy.list": "Saraksta dalībnieki", "lists.replies_policy.none": "Nevienam", - "lists.replies_policy.title": "Rādīt atbildes:", + "lists.replies_policy.title": "Rādīt atbildes uz:", "lists.search": "Meklēt starp cilvēkiem, kuriem tu seko", "lists.subheading": "Tavi saraksti", "load_pending": "{count, plural, one {# jauna lieta} other {# jaunas lietas}}", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 62c64acecae..3a57a5c3fdf 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Levar aquesta opcion", "compose_form.poll.switch_to_multiple": "Cambiar lo sondatge per permetre de causidas multiplas", "compose_form.poll.switch_to_single": "Cambiar lo sondatge per permetre una sola causida", - "compose_form.publish": "Publish", + "compose_form.publish": "Publicar", "compose_form.publish_loud": "{publish} !", "compose_form.save_changes": "Salvar los cambiaments", "compose_form.sensitive.hide": "Marcar coma sensible", @@ -396,7 +396,7 @@ "reply_indicator.cancel": "Anullar", "report.block": "Blocar", "report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.", - "report.categories.other": "Other", + "report.categories.other": "Autre", "report.categories.spam": "Spam", "report.categories.violation": "Content violates one or more server rules", "report.category.subtitle": "Choose the best match", @@ -427,9 +427,9 @@ "report.target": "Senhalar {target}", "report.thanks.take_action": "Here are your options for controlling what you see on Mastodon:", "report.thanks.take_action_actionable": "While we review this, you can take action against @{name}:", - "report.thanks.title": "Don't want to see this?", + "report.thanks.title": "Volètz pas veire aquò ?", "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", - "report.unfollow": "Unfollow @{name}", + "report.unfollow": "Quitar de sègre {name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", "search.placeholder": "Recercar", "search_popout.search_format": "Format recèrca avançada", @@ -439,7 +439,7 @@ "search_popout.tips.text": "Lo tèxte brut tòrna escais, noms d’utilizaire e etiquetas correspondents", "search_popout.tips.user": "utilizaire", "search_results.accounts": "Gents", - "search_results.all": "All", + "search_results.all": "Tot", "search_results.hashtags": "Etiquetas", "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Tuts", @@ -457,12 +457,12 @@ "status.direct": "Messatge per @{name}", "status.edit": "Modificar", "status.edited": "Edited {date}", - "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", + "status.edited_x_times": "Modificat {count, plural, un {{count} còp} other {{count} còps}}", "status.embed": "Embarcar", "status.favourite": "Apondre als favorits", "status.filtered": "Filtrat", - "status.history.created": "{name} created {date}", - "status.history.edited": "{name} edited {date}", + "status.history.created": "{name} o creèt lo {date}", + "status.history.edited": "{name} o modifiquèt lo {date}", "status.load_more": "Cargar mai", "status.media_hidden": "Mèdia rescondut", "status.mention": "Mencionar", @@ -520,7 +520,7 @@ "upload_error.poll": "Lo mandadís de fichièr es pas autorizat pels sondatges.", "upload_form.audio_description": "Descriure per las personas amb pèrdas auditivas", "upload_form.description": "Descripcion pels mal vesents", - "upload_form.description_missing": "No description added", + "upload_form.description_missing": "Cap de descripcion pas aponduda", "upload_form.edit": "Modificar", "upload_form.thumbnail": "Cambiar la vinheta", "upload_form.undo": "Suprimir", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 71a57bcb45b..bdf973e040a 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -95,7 +95,7 @@ "compose.language.change": "Alterar idioma", "compose.language.search": "Pesquisar idiomas...", "compose_form.direct_message_warning_learn_more": "Saiba mais", - "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", + "compose_form.encryption_warning": "Postagens no Mastodon não são criptografadas de ponta-a-ponta. Não compartilhe nenhuma informação sensível no Mastodon.", "compose_form.hashtag_warning": "Este toot não aparecerá em nenhuma hashtag porque está como não-listado. Somente toots públicos podem ser pesquisados por hashtag.", "compose_form.lock_disclaimer": "Seu perfil não está {locked}. Qualquer um pode te seguir e ver os toots privados.", "compose_form.lock_disclaimer.lock": "trancado", @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Remover opção", "compose_form.poll.switch_to_multiple": "Permitir múltiplas escolhas", "compose_form.poll.switch_to_single": "Opção única", - "compose_form.publish": "Publish", + "compose_form.publish": "Publicar", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Salvar alterações", "compose_form.sensitive.hide": "{count, plural, one {Marcar mídia como sensível} other {Marcar mídias como sensível}}", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index bec2fae642b..861722c2fca 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -32,7 +32,7 @@ "account.mute": "Nevšímaj si @{name}", "account.mute_notifications": "Stĺm oboznámenia od @{name}", "account.muted": "Nevšímaný/á", - "account.posts": "Príspevky", + "account.posts": "Príspevky/ov", "account.posts_with_replies": "Príspevky, aj s odpoveďami", "account.report": "Nahlás @{name}", "account.requested": "Čaká na schválenie. Klikni pre zrušenie žiadosti", @@ -93,7 +93,7 @@ "community.column_settings.media_only": "Iba médiá", "community.column_settings.remote_only": "Iba odľahlé", "compose.language.change": "Zmeň jazyk", - "compose.language.search": "Search languages...", + "compose.language.search": "Hľadaj medzi jazykmi...", "compose_form.direct_message_warning_learn_more": "Zisti viac", "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", "compose_form.hashtag_warning": "Tento toot nebude zobrazený pod žiadným haštagom lebo nieje listovaný. Iba verejné tooty môžu byť nájdené podľa haštagu.", @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Odstráň túto voľbu", "compose_form.poll.switch_to_multiple": "Zmeň anketu pre povolenie viacerých možností", "compose_form.poll.switch_to_single": "Zmeň anketu na takú s jedinou voľbou", - "compose_form.publish": "Publish", + "compose_form.publish": "Zverejni", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Ulož zmeny", "compose_form.sensitive.hide": "Označ médiá ako chúlostivé", @@ -149,7 +149,7 @@ "embed.instructions": "Umiestni kód uvedený nižšie pre pridanie tohto statusu na tvoju web stránku.", "embed.preview": "Tu je ako to bude vyzerať:", "emoji_button.activity": "Aktivita", - "emoji_button.clear": "Clear", + "emoji_button.clear": "Vyčisti", "emoji_button.custom": "Vlastné", "emoji_button.flags": "Vlajky", "emoji_button.food": "Jedlá a nápoje", @@ -169,7 +169,7 @@ "empty_column.blocks": "Ešte si nikoho nezablokoval/a.", "empty_column.bookmarked_statuses": "Ešte nemáš žiadné záložky. Keď si pridáš príspevok k záložkám, zobrazí sa tu.", "empty_column.community": "Lokálna časová os je prázdna. Napíšte niečo, aby sa to tu začalo hýbať!", - "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.direct": "Ešte nemáš žiadne priame správy. Keď nejakú pošleš, alebo dostaneš, ukáže sa tu.", "empty_column.domain_blocks": "Žiadne domény ešte niesú skryté.", "empty_column.explore_statuses": "Nothing is trending right now. Check back later!", "empty_column.favourited_statuses": "Nemáš obľúbené ešte žiadne príspevky. Keď si nejaký obľúbiš, bude zobrazený práve tu.", @@ -267,7 +267,7 @@ "lightbox.expand": "Rozšíriť náhľad obrázku", "lightbox.next": "Ďalšie", "lightbox.previous": "Predchádzajúci", - "limited_account_hint.action": "Show profile anyway", + "limited_account_hint.action": "Ukáž profil aj tak", "limited_account_hint.title": "This profile has been hidden by the moderators of your server.", "lists.account.add": "Pridaj do zoznamu", "lists.account.remove": "Odober zo zoznamu", @@ -372,10 +372,10 @@ "poll_button.remove_poll": "Odstráň anketu", "privacy.change": "Uprav súkromie príspevku", "privacy.direct.long": "Pošli iba spomenutým užívateľom", - "privacy.direct.short": "Direct", + "privacy.direct.short": "Iba spomenutým ľudom", "privacy.private.long": "Pošli iba následovateľom", - "privacy.private.short": "Followers-only", - "privacy.public.long": "Visible for all", + "privacy.private.short": "Iba pre sledujúcich", + "privacy.public.long": "Viditeľné pre všetkých", "privacy.public.short": "Verejné", "privacy.unlisted.long": "Visible for all, but opted-out of discovery features", "privacy.unlisted.short": "Verejne, ale nezobraziť v osi", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 5aa5d5ef36d..ba354e98b1e 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -92,10 +92,10 @@ "community.column_settings.local_only": "Vetëm vendore", "community.column_settings.media_only": "Vetëm Media", "community.column_settings.remote_only": "Vetëm të largëta", - "compose.language.change": "Change language", - "compose.language.search": "Search languages...", + "compose.language.change": "Ndryshoni gjuhën", + "compose.language.search": "Kërkoni te gjuhët…", "compose_form.direct_message_warning_learn_more": "Mësoni më tepër", - "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", + "compose_form.encryption_warning": "Postimet në Mastodon nuk fshehtëzohen skaj-më-skaj. Mos ndani me të tjerë gjëra me spec në Mastodon.", "compose_form.hashtag_warning": "Ky mesazh s’do të paraqitet nën ndonjë hashtag, ngaqë s’i është caktuar ndonjë. Vetëm mesazhet publike mund të kërkohen sipas hashtagësh.", "compose_form.lock_disclaimer": "Llogaria juaj s’është {locked}. Mund ta ndjekë cilido, për të parë postimet tuaja vetëm për ndjekësit.", "compose_form.lock_disclaimer.lock": "e kyçur", @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Hiqe këtë zgjedhje", "compose_form.poll.switch_to_multiple": "Ndrysho votimin për të lejuar shumë zgjedhje", "compose_form.poll.switch_to_single": "Ndrysho votimin për të lejuar vetëm një zgjedhje", - "compose_form.publish": "Publish", + "compose_form.publish": "Botoje", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Ruaji ndryshimet", "compose_form.sensitive.hide": "{count, plural, one {Vëri shenjë medias si rezervat} other {Vëru shenjë mediave si rezervat}}", @@ -149,7 +149,7 @@ "embed.instructions": "Trupëzojeni këtë gjendje në sajtin tuaj duke kopjuar kodin më poshtë.", "embed.preview": "Ja si do të duket:", "emoji_button.activity": "Veprimtari", - "emoji_button.clear": "Clear", + "emoji_button.clear": "Spastroje", "emoji_button.custom": "Vetjak", "emoji_button.flags": "Flamuj", "emoji_button.food": "Ushqim & Pije", @@ -228,47 +228,47 @@ "intervals.full.days": "{number, plural, one {# ditë} other {# ditë}}", "intervals.full.hours": "{number, plural, one {# orë} other {# orë}}", "intervals.full.minutes": "{number, plural, one {# minutë} other {# minuta}}", - "keyboard_shortcuts.back": "për shkuarje mbrapsht", - "keyboard_shortcuts.blocked": "për hapje liste përdoruesish të bllokuar", - "keyboard_shortcuts.boost": "për përforcim", - "keyboard_shortcuts.column": "për kalim fokusi mbi një gjendje te një nga shtyllat", - "keyboard_shortcuts.compose": "për kalim fokusi te fusha e hartimit të mesazheve", + "keyboard_shortcuts.back": "Për shkuarje mbrapsht", + "keyboard_shortcuts.blocked": "Për hapje liste përdoruesish të bllokuar", + "keyboard_shortcuts.boost": "Përforcim postimi", + "keyboard_shortcuts.column": "Fokusi mbi një shtyllë", + "keyboard_shortcuts.compose": "Fokusi te fusha e hartimit të mesazheve", "keyboard_shortcuts.description": "Përshkrim", "keyboard_shortcuts.direct": "për hapje shtylle mesazhesh të drejtpërdrejtë", - "keyboard_shortcuts.down": "për zbritje poshtë nëpër listë", - "keyboard_shortcuts.enter": "për hapje gjendjeje", - "keyboard_shortcuts.favourite": "për t’i vënë shenjë si të parapëlqyer", - "keyboard_shortcuts.favourites": "për hapje liste të parapëlqyerish", - "keyboard_shortcuts.federated": "për hapje rrjedhe kohore të të federuarve", + "keyboard_shortcuts.down": "Për zbritje poshtë nëpër listë", + "keyboard_shortcuts.enter": "Për hapje postimi", + "keyboard_shortcuts.favourite": "Për t’i vënë shenjë si të parapëlqyer një postimi", + "keyboard_shortcuts.favourites": "Për hapje liste të parapëlqyerish", + "keyboard_shortcuts.federated": "Për hapje rrjedhe kohore të të federuarve", "keyboard_shortcuts.heading": "Shkurtore tastiere", - "keyboard_shortcuts.home": "për hapje rrjedhe kohore vetjake", + "keyboard_shortcuts.home": "Për hapje rrjedhe kohore vetjake", "keyboard_shortcuts.hotkey": "Tast përkatës", - "keyboard_shortcuts.legend": "për shfaqje të kësaj legjende", - "keyboard_shortcuts.local": "për hapje rrjedhe kohore vendore", - "keyboard_shortcuts.mention": "për përmendje të autorit", - "keyboard_shortcuts.muted": "për hapje liste përdoruesish të heshtuar", - "keyboard_shortcuts.my_profile": "për hapjen e profilit tuaj", - "keyboard_shortcuts.notifications": "për hapje shtylle njoftimesh", - "keyboard_shortcuts.open_media": "për hapje mediash", - "keyboard_shortcuts.pinned": "për hapje liste mesazhesh të fiksuar", - "keyboard_shortcuts.profile": "për hapje të profilit të autorit", - "keyboard_shortcuts.reply": "për t’u përgjigjur", - "keyboard_shortcuts.requests": "për hapje liste kërkesash për ndjekje", - "keyboard_shortcuts.search": "për kalim fokusi te kërkimi", - "keyboard_shortcuts.spoilers": "për shfaqje/fshehje fushe CW", - "keyboard_shortcuts.start": "për hapjen e shtyllës “fillojani”", - "keyboard_shortcuts.toggle_hidden": "për shfaqje/fshehje teksti pas CW", - "keyboard_shortcuts.toggle_sensitivity": "për shfaqje/fshehje mediash", - "keyboard_shortcuts.toot": "për të filluar një mesazh fringo të ri", - "keyboard_shortcuts.unfocus": "për heqjen e fokusit nga fusha e hartimit të mesazheve apo kërkimeve", - "keyboard_shortcuts.up": "për ngjitje sipër nëpër listë", + "keyboard_shortcuts.legend": "Për shfaqje të kësaj legjende", + "keyboard_shortcuts.local": "Për hapje rrjedhe kohore vendore", + "keyboard_shortcuts.mention": "Për përmendje të autorit", + "keyboard_shortcuts.muted": "Për hapje liste përdoruesish të heshtuar", + "keyboard_shortcuts.my_profile": "Për hapjen e profilit tuaj", + "keyboard_shortcuts.notifications": "Për hapje shtylle njoftimesh", + "keyboard_shortcuts.open_media": "Për hapje mediash", + "keyboard_shortcuts.pinned": "Për hapje liste mesazhesh të fiksuar", + "keyboard_shortcuts.profile": "Për hapje të profilit të autorit", + "keyboard_shortcuts.reply": "Për t’iu përgjigjur një postimi", + "keyboard_shortcuts.requests": "Për hapje liste kërkesash për ndjekje", + "keyboard_shortcuts.search": "Për kalim fokusi te kërkimi", + "keyboard_shortcuts.spoilers": "Për shfaqje/fshehje fushe CW", + "keyboard_shortcuts.start": "Për hapjen e shtyllës “fillojani”", + "keyboard_shortcuts.toggle_hidden": "Për shfaqje/fshehje teksti pas CW", + "keyboard_shortcuts.toggle_sensitivity": "Për shfaqje/fshehje mediash", + "keyboard_shortcuts.toot": "Për të filluar një mesazh të ri", + "keyboard_shortcuts.unfocus": "Për heqjen e fokusit nga fusha e hartimit të mesazheve apo kërkimeve", + "keyboard_shortcuts.up": "Për ngjitje sipër nëpër listë", "lightbox.close": "Mbylle", "lightbox.compress": "Ngjeshe kuadratin e parjes së figurave", "lightbox.expand": "Zgjeroje kuadratin e parjes së figurave", "lightbox.next": "Pasuesja", "lightbox.previous": "E mëparshmja", - "limited_account_hint.action": "Show profile anyway", - "limited_account_hint.title": "This profile has been hidden by the moderators of your server.", + "limited_account_hint.action": "Shfaqe profilin sido qoftë", + "limited_account_hint.title": "Ky profil është fshehur nga moderatorët e shërbyesit tuaj.", "lists.account.add": "Shto në listë", "lists.account.remove": "Hiqe nga lista", "lists.delete": "Fshije listën", diff --git a/config/locales/activerecord.af.yml b/config/locales/activerecord.af.yml index 8882df613e5..c41e2341d0d 100644 --- a/config/locales/activerecord.af.yml +++ b/config/locales/activerecord.af.yml @@ -21,6 +21,14 @@ af: username: invalid: moet slegs letters, nommers en onderstrepe bevat reserved: is gereserveer + admin/webhook: + attributes: + url: + invalid: is nie 'n geldige URL nie + doorkeeper/application: + attributes: + website: + invalid: is nie 'n geldige URL nie status: attributes: reblog: diff --git a/config/locales/activerecord.ast.yml b/config/locales/activerecord.ast.yml index 4f7c734d90a..d35b95dfc20 100644 --- a/config/locales/activerecord.ast.yml +++ b/config/locales/activerecord.ast.yml @@ -9,3 +9,13 @@ ast: username: Nome d'usuariu user/invite_request: text: Motivu + errors: + models: + admin/webhook: + attributes: + url: + invalid: nun ye una URL válida + doorkeeper/application: + attributes: + website: + invalid: nun ye una URL válida diff --git a/config/locales/activerecord.ca.yml b/config/locales/activerecord.ca.yml index 03b594c0a02..056137276a6 100644 --- a/config/locales/activerecord.ca.yml +++ b/config/locales/activerecord.ca.yml @@ -21,6 +21,14 @@ ca: username: invalid: només pot contenir lletres, números i guions baixos reserved: està reservat + admin/webhook: + attributes: + url: + invalid: no és una URL vàlida + doorkeeper/application: + attributes: + website: + invalid: no és una URL vàlida status: attributes: reblog: diff --git a/config/locales/activerecord.cs.yml b/config/locales/activerecord.cs.yml index bd0b28efb35..d306fe627aa 100644 --- a/config/locales/activerecord.cs.yml +++ b/config/locales/activerecord.cs.yml @@ -21,6 +21,14 @@ cs: username: invalid: musí obsahovat pouze písmena, číslice a podtržítka reserved: je vyhrazeno + admin/webhook: + attributes: + url: + invalid: není platná URL + doorkeeper/application: + attributes: + website: + invalid: není platná URL status: attributes: reblog: diff --git a/config/locales/activerecord.da.yml b/config/locales/activerecord.da.yml index 081f4af76f1..3566abf4395 100644 --- a/config/locales/activerecord.da.yml +++ b/config/locales/activerecord.da.yml @@ -21,6 +21,14 @@ da: username: invalid: må kun indeholde cifre, bogstaver og understreger reserved: er reserveret + admin/webhook: + attributes: + url: + invalid: "'er ikke en gyldig URL" + doorkeeper/application: + attributes: + website: + invalid: "'er ikke en gyldig URL" status: attributes: reblog: diff --git a/config/locales/activerecord.de.yml b/config/locales/activerecord.de.yml index 31c410fa354..a24862a7055 100644 --- a/config/locales/activerecord.de.yml +++ b/config/locales/activerecord.de.yml @@ -21,6 +21,14 @@ de: username: invalid: nur Buchstaben, Ziffern und Unterstriche reserved: ist reserviert + admin/webhook: + attributes: + url: + invalid: ist keine gültige URL + doorkeeper/application: + attributes: + website: + invalid: ist keine gültige URL status: attributes: reblog: diff --git a/config/locales/activerecord.en-GB.yml b/config/locales/activerecord.en-GB.yml new file mode 100644 index 00000000000..ef03d181049 --- /dev/null +++ b/config/locales/activerecord.en-GB.yml @@ -0,0 +1 @@ +en-GB: diff --git a/config/locales/activerecord.es-AR.yml b/config/locales/activerecord.es-AR.yml index 9d6a479a72a..8a9b75a8c7a 100644 --- a/config/locales/activerecord.es-AR.yml +++ b/config/locales/activerecord.es-AR.yml @@ -21,6 +21,14 @@ es-AR: username: invalid: sólo letras, números y subguiones ("_") reserved: está reservado + admin/webhook: + attributes: + url: + invalid: no es una dirección web válida + doorkeeper/application: + attributes: + website: + invalid: no es una dirección web válida status: attributes: reblog: diff --git a/config/locales/activerecord.es.yml b/config/locales/activerecord.es.yml index 0c4d6e5cf67..805e6b92043 100644 --- a/config/locales/activerecord.es.yml +++ b/config/locales/activerecord.es.yml @@ -21,6 +21,14 @@ es: username: invalid: solo puede contener letras, números y guiones bajos reserved: está reservado + admin/webhook: + attributes: + url: + invalid: no es una URL válida + doorkeeper/application: + attributes: + website: + invalid: no es una URL válida status: attributes: reblog: diff --git a/config/locales/activerecord.fr.yml b/config/locales/activerecord.fr.yml index 34cf0b837a8..4ab8f6a919f 100644 --- a/config/locales/activerecord.fr.yml +++ b/config/locales/activerecord.fr.yml @@ -21,6 +21,14 @@ fr: username: invalid: seulement des lettres, des nombres et des tirets bas reserved: est réservé + admin/webhook: + attributes: + url: + invalid: n’est pas une URL valide + doorkeeper/application: + attributes: + website: + invalid: n’est pas une URL valide status: attributes: reblog: diff --git a/config/locales/activerecord.gl.yml b/config/locales/activerecord.gl.yml index cbdd801e5a1..4b039f5afe0 100644 --- a/config/locales/activerecord.gl.yml +++ b/config/locales/activerecord.gl.yml @@ -21,6 +21,14 @@ gl: username: invalid: só letras, números e trazo baixo reserved: está reservado + admin/webhook: + attributes: + url: + invalid: non é un URL válido + doorkeeper/application: + attributes: + website: + invalid: non é un URL válido status: attributes: reblog: diff --git a/config/locales/activerecord.hu.yml b/config/locales/activerecord.hu.yml index ac8cfd77315..442bf385813 100644 --- a/config/locales/activerecord.hu.yml +++ b/config/locales/activerecord.hu.yml @@ -21,6 +21,14 @@ hu: username: invalid: csak betűket, számokat vagy alávonást tartalmazhat reserved: fenntartott + admin/webhook: + attributes: + url: + invalid: nem érvényes URL + doorkeeper/application: + attributes: + website: + invalid: nem érvényes URL status: attributes: reblog: diff --git a/config/locales/activerecord.io.yml b/config/locales/activerecord.io.yml index 38304ef9351..9779cbdd113 100644 --- a/config/locales/activerecord.io.yml +++ b/config/locales/activerecord.io.yml @@ -21,6 +21,14 @@ io: username: invalid: mustas konsistar nur literi, nombri e sublinei reserved: rezervitas + admin/webhook: + attributes: + url: + invalid: ne esas valida URL + doorkeeper/application: + attributes: + website: + invalid: ne esas valida URL status: attributes: reblog: diff --git a/config/locales/activerecord.it.yml b/config/locales/activerecord.it.yml index c6587f1fd8d..307bd801e8a 100644 --- a/config/locales/activerecord.it.yml +++ b/config/locales/activerecord.it.yml @@ -21,6 +21,14 @@ it: username: invalid: solo lettere, numeri e trattini bassi reserved: è riservato + admin/webhook: + attributes: + url: + invalid: non è un URL valido + doorkeeper/application: + attributes: + website: + invalid: non è un URL valido status: attributes: reblog: diff --git a/config/locales/activerecord.ja.yml b/config/locales/activerecord.ja.yml index ab13dce6cbc..52b1b37fd9f 100644 --- a/config/locales/activerecord.ja.yml +++ b/config/locales/activerecord.ja.yml @@ -21,6 +21,14 @@ ja: username: invalid: アルファベット・数字・アンダーバーの組み合わせで入力してください reserved: は予約されています + admin/webhook: + attributes: + url: + invalid: は無効なURLです + doorkeeper/application: + attributes: + website: + invalid: は無効なURLです status: attributes: reblog: diff --git a/config/locales/activerecord.ku.yml b/config/locales/activerecord.ku.yml index 340b7a777ce..b440181d804 100644 --- a/config/locales/activerecord.ku.yml +++ b/config/locales/activerecord.ku.yml @@ -21,6 +21,14 @@ ku: username: invalid: pêdivî ye ku tenê tîp, hejmar û xêzikên jêrîn hebin reserved: hatiye bikaranîn + admin/webhook: + attributes: + url: + invalid: ev girêdaneke nederbasdar e + doorkeeper/application: + attributes: + website: + invalid: ev girêdaneke nederbasdar e status: attributes: reblog: diff --git a/config/locales/activerecord.lv.yml b/config/locales/activerecord.lv.yml index ad9fa660458..89a1fb09439 100644 --- a/config/locales/activerecord.lv.yml +++ b/config/locales/activerecord.lv.yml @@ -21,6 +21,14 @@ lv: username: invalid: drīkst saturēt tikai burtus, ciparus un pasvītras reserved: ir rezervēts + admin/webhook: + attributes: + url: + invalid: nav derīgs URL + doorkeeper/application: + attributes: + website: + invalid: nav derīgs URL status: attributes: reblog: diff --git a/config/locales/activerecord.pl.yml b/config/locales/activerecord.pl.yml index c7b1e7faba8..e9af762449e 100644 --- a/config/locales/activerecord.pl.yml +++ b/config/locales/activerecord.pl.yml @@ -21,6 +21,14 @@ pl: username: invalid: może składać się tylko z liter, cyfr i podkreślników reserved: jest zarezerwowana + admin/webhook: + attributes: + url: + invalid: nie jest poprawnym adresem URL + doorkeeper/application: + attributes: + website: + invalid: nie jest poprawnym adresem URL status: attributes: reblog: diff --git a/config/locales/activerecord.pt-PT.yml b/config/locales/activerecord.pt-PT.yml index 17c199ea875..5b89ee5a2d5 100644 --- a/config/locales/activerecord.pt-PT.yml +++ b/config/locales/activerecord.pt-PT.yml @@ -21,6 +21,14 @@ pt-PT: username: invalid: apenas letras, números e underscores reserved: está reservado + admin/webhook: + attributes: + url: + invalid: não é um URL válido + doorkeeper/application: + attributes: + website: + invalid: não é um URL válido status: attributes: reblog: diff --git a/config/locales/activerecord.ru.yml b/config/locales/activerecord.ru.yml index 2f921051953..758fe7dd4d1 100644 --- a/config/locales/activerecord.ru.yml +++ b/config/locales/activerecord.ru.yml @@ -21,6 +21,14 @@ ru: username: invalid: только буквы, цифры и символ подчёркивания reserved: зарезервировано + admin/webhook: + attributes: + url: + invalid: не является допустимым URL + doorkeeper/application: + attributes: + website: + invalid: не является допустимым URL status: attributes: reblog: diff --git a/config/locales/activerecord.sl.yml b/config/locales/activerecord.sl.yml index d7fbb446de3..7927cb4fc39 100644 --- a/config/locales/activerecord.sl.yml +++ b/config/locales/activerecord.sl.yml @@ -21,6 +21,14 @@ sl: username: invalid: samo črke, številke in podčrtaji reserved: je rezerviran + admin/webhook: + attributes: + url: + invalid: ni veljaven URL + doorkeeper/application: + attributes: + website: + invalid: ni veljaven URL status: attributes: reblog: diff --git a/config/locales/activerecord.sq.yml b/config/locales/activerecord.sq.yml index 920b73e7a11..57de9d3cb81 100644 --- a/config/locales/activerecord.sq.yml +++ b/config/locales/activerecord.sq.yml @@ -21,6 +21,14 @@ sq: username: invalid: duhet të përmbajë vetëm shkronja, numra dhe nënvija reserved: është i rezervuar + admin/webhook: + attributes: + url: + invalid: s’është URL e vlefshme + doorkeeper/application: + attributes: + website: + invalid: s’është URL status: attributes: reblog: diff --git a/config/locales/activerecord.tr.yml b/config/locales/activerecord.tr.yml index 890f065b1e3..ac40e061599 100644 --- a/config/locales/activerecord.tr.yml +++ b/config/locales/activerecord.tr.yml @@ -21,6 +21,14 @@ tr: username: invalid: sadece harfler, sayılar ve alt çizgiler reserved: kullanılamaz + admin/webhook: + attributes: + url: + invalid: geçerli bir URL değil + doorkeeper/application: + attributes: + website: + invalid: geçerli bir URL değil status: attributes: reblog: diff --git a/config/locales/activerecord.uk.yml b/config/locales/activerecord.uk.yml index 38d4771b337..06967ddc77c 100644 --- a/config/locales/activerecord.uk.yml +++ b/config/locales/activerecord.uk.yml @@ -21,6 +21,14 @@ uk: username: invalid: тільки літери, цифри та підкреслення reserved: зарезервовано + admin/webhook: + attributes: + url: + invalid: не є дійсною URL-адресою + doorkeeper/application: + attributes: + website: + invalid: не є дійсною URL-адресою status: attributes: reblog: diff --git a/config/locales/activerecord.vi.yml b/config/locales/activerecord.vi.yml index c0e989563bf..6c7c4190359 100644 --- a/config/locales/activerecord.vi.yml +++ b/config/locales/activerecord.vi.yml @@ -21,6 +21,14 @@ vi: username: invalid: chỉ chấp nhận ký tự, số và dấu gạch dưới reserved: bị cấm sử dụng + admin/webhook: + attributes: + url: + invalid: không phải là một URL hợp lệ + doorkeeper/application: + attributes: + website: + invalid: không phải là một URL hợp lệ status: attributes: reblog: diff --git a/config/locales/activerecord.zh-CN.yml b/config/locales/activerecord.zh-CN.yml index 946e81893cb..855e79de6c8 100644 --- a/config/locales/activerecord.zh-CN.yml +++ b/config/locales/activerecord.zh-CN.yml @@ -21,6 +21,10 @@ zh-CN: username: invalid: 只能使用字母、数字和下划线 reserved: 是保留关键字 + admin/webhook: + attributes: + url: + invalid: 不是有效的 URL。 status: attributes: reblog: diff --git a/config/locales/activerecord.zh-TW.yml b/config/locales/activerecord.zh-TW.yml index c6856c386a7..bea950ed685 100644 --- a/config/locales/activerecord.zh-TW.yml +++ b/config/locales/activerecord.zh-TW.yml @@ -21,6 +21,14 @@ zh-TW: username: invalid: 只能有字母、數字及底線 reserved: 是保留關鍵字 + admin/webhook: + attributes: + url: + invalid: 不是有效的 URL + doorkeeper/application: + attributes: + website: + invalid: 不是有效的 URL status: attributes: reblog: diff --git a/config/locales/af.yml b/config/locales/af.yml index bc54cfdfd44..d69e6b92d11 100644 --- a/config/locales/af.yml +++ b/config/locales/af.yml @@ -8,10 +8,28 @@ af: federation_hint_html: Met 'n rekening op %{instance} sal jy in staat wees om mense op enige Mastodon en federasie bediener te volg. get_apps: Probeer 'n mobiele toepassing hosted_on: Mastodon gehuisves op %{domain} + tagline: Gedesentraliseerde sosiale netwerk admin: + domain_blocks: + existing_domain_block: Jy het alreeds strenger perke ingelê op %{name}. trends: only_allowed: Slegs toegelate trending: Gewild + webhooks: + add_new: Voeg end-punt by + delete: Wis uit + disable: Deaktiveer + disabled: Gedeaktiveer + edit: Redigeer end-punt + empty: Jy het tans geen opgestelde web-hoek end-punte nie. + enable: Aktiveer + enabled: Aktief + new: Nuwe web-hoek + rotate_secret: Roteer geheim + secret: Onderteken geheim + status: Status + title: Web-hoeke + webhook: Web-hoek disputes: strikes: approve_appeal: Aanvaar appêl diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 9d78451bbde..01f55f344e0 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -42,7 +42,6 @@ ar: two: منشورات zero: منشورات status_count_before: نشروا - tagline: اتبع أصدقائك وصديقاتك واكتشف آخرين وأخريات terms: شروط الخدمة unavailable_content: محتوى غير متوفر unavailable_content_description: @@ -842,7 +841,6 @@ ar: applications: created: تم إنشاء التطبيق بنجاح destroyed: تم حذف التطبيق بنجاح - invalid_url: إن الرابط المقدم غير صالح regenerate_token: إعادة توليد رمز النفاذ token_regenerated: تم إعادة إنشاء الرمز الوصول بنجاح warning: كن حذرا مع هذه البيانات. لا تقم أبدا بمشاركتها مع الآخَرين! diff --git a/config/locales/ast.yml b/config/locales/ast.yml index a9bcbbdf7eb..1fb1cee900d 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -24,7 +24,6 @@ ast: one: artículu other: artículos status_count_before: Que crearon - tagline: Sigui a persones y conoz a más xente terms: Términos del serviciu unavailable_content_description: domain: Sirvidor @@ -144,6 +143,8 @@ ast: site_title: Nome del sirvidor title: Axustes del sitiu title: Alministración + webhooks: + events: Eventos admin_mailer: new_pending_account: body: Los detalles de la cuenta nueva tán embaxo. Pues aprobar o refugar esta aplicación. @@ -164,7 +165,6 @@ ast: sensitive_content: Conteníu sensible toot_layout: Distribución de los barritos applications: - invalid_url: La URL apurrida nun ye válida warning: Ten munchu curiáu con estos datos, ¡enxamás nun los compartas con naide! auth: change_password: Contraseña diff --git a/config/locales/bg.yml b/config/locales/bg.yml index c9e2647878d..04296b342aa 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -29,7 +29,6 @@ bg: one: състояние other: състояния status_count_before: Написали - tagline: Следвайте приятели и открийте нови terms: Условия за ползване unavailable_content: Модерирани сървъри unavailable_content_description: @@ -178,8 +177,6 @@ bg: application_mailer: settings: 'Промяна на предпочитанията за e-mail: %{link}' view: 'Преглед:' - applications: - invalid_url: Предоставеният URL е невалиден auth: didnt_get_confirmation: Не получих инструкции за потвърждение forgot_password: Забравих си паролата diff --git a/config/locales/bn.yml b/config/locales/bn.yml index 20a99fd2fc5..ae1ced4506e 100644 --- a/config/locales/bn.yml +++ b/config/locales/bn.yml @@ -31,7 +31,6 @@ bn: one: অবস্থা other: স্থিতিগুলি status_count_before: কে লিখেছে - tagline: পরিচিতজনদের সাথে যুক্ত হন এবং নতুনদের সাথে পরিচিত হন terms: ব্যবহারের শর্তাবলী unavailable_content: অনুপলব্ধ সামগ্রী unavailable_content_description: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index f0efd3f5038..8c8fa1ffb82 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -38,7 +38,7 @@ ca: one: publicació other: publicacions status_count_before: Qui ha publicat - tagline: Segueix els teus amics i descobreix-ne de nous + tagline: Xarxa social descentralitzada terms: Condicions de servei unavailable_content: Servidors moderats unavailable_content_description: @@ -852,6 +852,26 @@ ca: edit_preset: Edita l'avís predeterminat empty: Encara no has definit cap preavís. title: Gestiona les configuracions predefinides dels avisos + webhooks: + add_new: Afegir extrem + delete: Elimina + description_html: Un webhook habilita Mastodon per a empènyer notificacions en temps real sobre els esdeveniments escollits de la teva pròpia aplicació, per tant la teva aplicació pot activar reaccions automaticament. + disable: Desactiva + disabled: Desactivat + edit: Editar extrem + empty: Encara no tens cap extrem de webhook configurat. + enable: Activa + enabled: Actiu + enabled_events: + one: 1 esdeveniment activat + other: "%{count} esdeveniments activats" + events: Esdeveniments + new: Nou webhook + rotate_secret: Rota el secret + secret: Signant el secret + status: Estat + title: Webhooks + webhook: Webhook admin_mailer: new_appeal: actions: @@ -916,7 +936,6 @@ ca: applications: created: L'aplicació s'ha creat correctament destroyed: L'aplicació s'ha suprimit correctament - invalid_url: L'URL proporcionat no és correcte regenerate_token: Torna a generar l'identificador d'accés token_regenerated: L'identificador d'accés s'ha generat correctament warning: Aneu amb compte amb aquestes dades. No les compartiu mai amb ningú! diff --git a/config/locales/ckb.yml b/config/locales/ckb.yml index 6429696ed25..35e826c9c4f 100644 --- a/config/locales/ckb.yml +++ b/config/locales/ckb.yml @@ -37,7 +37,6 @@ ckb: one: دۆخ other: پۆست status_count_before: لە لایەن یەکەوە - tagline: دوای هاوڕێکان بکەوە و ئەوانەی نوێ بدۆزیەوە terms: مەرجەکانی خزمەتگوزاری unavailable_content: ڕاژەی چاودێریکراو unavailable_content_description: @@ -721,7 +720,6 @@ ckb: applications: created: بەرنامە بە سەرکەوتوویی دروست کرا destroyed: بەرنامە بە سەرکەوتوویی سڕدراوەتەوە - invalid_url: بەستەری دابینکراو نادروستە regenerate_token: دووبارە دروستکردنەوەی نیشانەی چوونە ژوورەوە token_regenerated: کۆدی دەستپێگەیشتن بە سەرکەوتوویی دروستکرا warning: زۆر ئاگاداربە لەم داتایە. هەرگیز لەگەڵ کەس دا هاوبەشی مەکە! diff --git a/config/locales/co.yml b/config/locales/co.yml index ca4c7ed3d93..183439447fc 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -35,7 +35,6 @@ co: one: statutu other: statuti status_count_before: Chì anu pubblicatu - tagline: Siguità amichi è scopre ancu di più altri terms: Cundizione di u serviziu unavailable_content: Cuntinutu micca dispunibule unavailable_content_description: @@ -705,7 +704,6 @@ co: applications: created: Applicazione creata destroyed: Applicazione sguassata - invalid_url: L’URL ch’è stata pruvista ùn hè valida regenerate_token: Creà un’altra fiscia d’accessu token_regenerated: A fiscia d’accessu hè stata rigenerata warning: Abbadate à quessi dati. Ùn i date à nisunu! diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 0140d412768..1868b9dd738 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -40,7 +40,7 @@ cs: one: příspěvek other: příspěvků status_count_before: Kteří napsali - tagline: Sledujte své přátele a objevujte nové + tagline: Decentralizovaná sociální síť terms: Podmínky používání unavailable_content: Moderované servery unavailable_content_description: @@ -886,6 +886,28 @@ cs: edit_preset: Upravit předlohu pro varování empty: Zatím jste nedefinovali žádné předlohy varování. title: Spravovat předlohy pro varování + webhooks: + add_new: Přidat koncový bod + delete: Smazat + description_html: "Webhook umožňuje Mastodonu o vybraných událostech notifikovat v reálném čase vaši vlastní aplikaci, aby mohla automaticky spouštět reakce." + disable: Vypnout + disabled: Vypnuto + edit: Upravit koncový bod + empty: Nemáte ještě nastavené žádné koncové body webhooků. + enable: Zapnout + enabled: Aktivní + enabled_events: + few: "%{count} zapnuté události" + many: "%{count} zapnutých událostí" + one: 1 zapnutá událost + other: "%{count} zapnutých událostí" + events: Události + new: Nový webhook + rotate_secret: Obnovit klíč + secret: Podpisový klíč + status: Stav + title: Webhooky + webhook: Webhook admin_mailer: new_appeal: actions: @@ -950,7 +972,6 @@ cs: applications: created: Aplikace úspěšně vytvořena destroyed: Aplikace úspěšně smazána - invalid_url: Zadaná URL adresa je neplatná regenerate_token: Znovu vygenerovat přístupový token token_regenerated: Přístupový token byl úspěšně vygenerován warning: Zacházejte s těmito daty opatrně. Nikdy je s nikým nesdílejte! @@ -1334,7 +1355,7 @@ cs: description_html: Zapnete-li dvoufázové ověřování pomocí ověřovací aplikace, k přihlášení budete u sebe muset mít svůj mobil, který pro Vás bude generovat kódy k opsání. enable: Zapnout instructions_html: "Naskenujte tento QR kód do Google Authenticator nebo podobné TOTP aplikace na svém telefonu. Následně bude tato aplikace generovat kódy, které budete zadávat při přihlašování." - manual_instructions: 'Nemůžete-li načíst QR kód a potřebujete ho zadat ručně, zde je tajemství v textové podobě:' + manual_instructions: 'Nemůžete-li načíst QR kód a potřebujete ho zadat ručně, zde je klíč v textové podobě:' setup: Nastavit wrong_code: Zadaný kód je neplatný! Je čas na serveru i zařízení generujícím kód správný? pagination: diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 35106734676..91375332568 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -42,7 +42,6 @@ cy: two: statwsau zero: statwsau status_count_before: Ysgrifennwyd gan - tagline: Dilyn ffrindiau a darganfod rhai newydd terms: Telerau gwasanaeth unavailable_content: Cynnwys nad yw ar gael unavailable_content_description: @@ -587,7 +586,6 @@ cy: applications: created: Cais wedi ei greu'n llwyddiannus destroyed: Cais wedi ei ddileu'n llwyddiannus - invalid_url: Mae'r URL a ddarparwyd yn annilys regenerate_token: Adfywio tocyn mynediad token_regenerated: Adfywiwyd y tocyn mynediad yn llwyddiannus warning: Byddwch yn ofalus a'r data hyn. Peidiwch a'i rannu byth! diff --git a/config/locales/da.yml b/config/locales/da.yml index 0195aa5a3e7..337005369e2 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -38,7 +38,7 @@ da: one: indlæg other: indlæg status_count_before: Som har postet - tagline: Følg venner og opdag nye + tagline: Decentraliseret socialt netværk terms: Tjenestevilkår unavailable_content: Modererede servere unavailable_content_description: @@ -852,6 +852,26 @@ da: edit_preset: Redigér advarselsforvalg empty: Ingen advarselsforvalg defineret endnu. title: Håndtérr advarselsforvalg + webhooks: + add_new: Tilføj endepunkt + delete: Slet + description_html: En webhook lader Mastodon pushe notifikationer i realtid om valgte begivenheder til ens egen applikation, så denne automatisk kan udløse reaktioner. + disable: Deaktivér + disabled: Deaktiveret + edit: Redigér endepunkt + empty: Der er endnu ikke opsat nogen webhook-endepunkter. + enable: Aktivér + enabled: Aktiv + enabled_events: + one: 1 aktiv begivenhed + other: "%{count} aktive begivenheder" + events: Begivenheder + new: Ny webhook + rotate_secret: Rotér hemmelighed + secret: Signeringshemmelighed + status: Status + title: Webhooks + webhook: Webhook admin_mailer: new_appeal: actions: @@ -916,7 +936,6 @@ da: applications: created: Applikation oprettet destroyed: Applikation slettet - invalid_url: Den angivne URL er ugyldig regenerate_token: Regenerér adgangstoken token_regenerated: Adgangstoken regenereret warning: Vær meget påpasselig med disse data. Del dem aldrig med nogen! diff --git a/config/locales/de.yml b/config/locales/de.yml index a52841a3967..d15011a5ea5 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -38,7 +38,7 @@ de: one: Beitrag other: Beiträge status_count_before: mit - tagline: Finde deine Freunde und entdecke neue + tagline: Dezentrales soziales Netzwerk terms: Nutzungsbedingungen unavailable_content: Nicht verfügbarer Inhalt unavailable_content_description: @@ -428,6 +428,7 @@ de: destroyed_msg: Die Domain-Blockade wurde rückgängig gemacht domain: Domain edit: Domainblockade bearbeiten + existing_domain_block: Du hast %{name} bereits stärker eingeschränkt. existing_domain_block_html: Es gibt schon eine Blockade für %{name}, diese muss erst aufgehoben werden. new: create: Blockade einrichten @@ -851,6 +852,26 @@ de: edit_preset: Warnungsvorlage bearbeiten empty: Du hast noch keine Warnungsvorlagen hinzugefügt. title: Warnungsvorlagen verwalten + webhooks: + add_new: Endpunkt hinzufügen + delete: Löschen + description_html: Ein Webhook ermöglicht Mastodon Echtzeitbenachrichtigungen über ausgewählte Ereignisse an deine eigene Anwendung zu senden damit deine Anwendung automatisch Reaktionen auslösen kann. + disable: Deaktivieren + disabled: Deaktiviert + edit: Endpunkt bearbeiten + empty: Du hast noch keine Webhook Endpunkte konfiguriert. + enable: Aktivieren + enabled: Aktiv + enabled_events: + one: 1 aktiviertes Ereignis + other: "%{count} aktivierte Ereignisse" + events: Ereignisse + new: Neuer Webhook + rotate_secret: Geheimen Schlüssel rotieren + secret: Signaturgeheimnis + status: Status + title: Webhooks + webhook: Webhook admin_mailer: new_appeal: actions: @@ -915,7 +936,6 @@ de: applications: created: Anwendung erfolgreich erstellt destroyed: Anwendung erfolgreich gelöscht - invalid_url: Die angegebene URL ist ungültig regenerate_token: Zugangs-Token neu erstellen token_regenerated: Zugangs-Token neu erstellt warning: Sei mit diesen Daten sehr vorsichtig. Teile sie mit niemandem! diff --git a/config/locales/doorkeeper.af.yml b/config/locales/doorkeeper.af.yml index 252f9fd5a25..ec1eda8bd13 100644 --- a/config/locales/doorkeeper.af.yml +++ b/config/locales/doorkeeper.af.yml @@ -1 +1,164 @@ +--- af: + activerecord: + attributes: + doorkeeper/application: + name: Toepassing naam + redirect_uri: Herlei URI + scopes: Bestekke + website: Toepassing webtuiste + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: kan nie 'n vragment bevat nie. + invalid_uri: moet 'n geldige URI wees. + relative_uri: moet 'n absolute URI wees. + secured_uri: moet 'n HTTPS/SSL URI wees. + doorkeeper: + applications: + buttons: + authorize: Magtig + cancel: Kanselleer + destroy: Vernietig + edit: Redigeer + submit: Dien in + confirmations: + destroy: Is jy seker? + edit: + title: Redigeer toepassing + form: + error: Oeps! Hersien jou vorm vir moontlike foute + help: + native_redirect_uri: Gebruik %{native_redirect_uri} vir plaaslike toetse + redirect_uri: Gebruik een lyn per URI + scopes: Verdeel omvang-grense met spasies. Los dit leeg om verstek omvange te gebruik. + index: + application: Toepassing + callback_url: Terugroep URL + delete: Wis uit + empty: Jy het geen toepassings nie. + name: Naam + new: Nuwe toepassing + scopes: Omvange + show: Vertoon + title: Jou toepassings + new: + title: Nuwe toepassing + show: + actions: Aksies + application_id: Kliënt sleutel + callback_urls: Terugroep URL'e + scopes: Omvange + secret: Kliënt geheim + title: 'Toepassing: %{name}' + authorizations: + buttons: + authorize: Magtig + deny: Weier + error: + title: "'n Fout het plaasgevind" + new: + prompt_html: "%{client_name} wil toegang hê tot jou rekening. Dit is a derde party toepassing. Indien jy dit nie vertrou nie, moet dit nie bemagtig word nie." + review_permissions: Hersien toestemming + title: Benodig magtiging + show: + title: Kopieër hierdie magtigings kode en plaas dit in die toepassing. + authorized_applications: + buttons: + revoke: Herroep + confirmations: + revoke: Is jy seker? + index: + authorized_at: Bemagtig op %{date} + description_html: Hierdie is toepassings wat deur middel van die API toegang tot jou rekening kan verkry. As daar enige toepassings is wat jy nie herken nie, of 'n toepassing is wat wangedra, kan die bemagtiging herroep word. + last_used_at: Laas gebruik op %{date} + never_used: Noot gebruik nie + scopes: Magtiging + superapp: Intern + title: Jou gemagtigde toepassings + errors: + messages: + access_denied: Die hulpbron eienaar of magtigingsbediener het die aansoek afgekeur. + credential_flow_not_configured: Hulpbron Eienaar Wagwoord Geloofsbrewe vloei het gefaal omdat Doorkeeper.configure.resource_owner_from_credentials nie opgestel is nie. + flash: + applications: + create: + notice: Toepassing geskep. + destroy: + notice: Toepassing uitgewis. + update: + notice: Toepassing opdateer. + authorized_applications: + destroy: + notice: Toepassing herroep. + grouped_scopes: + access: + read: Slegs-lees toegang + read/write: Lees en skryf toegang + write: Slegs-skryf toegang + title: + accounts: Rekeninge + admin/accounts: Administrasie van rekeninge + admin/all: Alle administratiewe funksies + admin/reports: Administrasie van rapporteringe + all: Alles + blocks: Blokkeringe + bookmarks: Boekmerke + conversations: Gesprekke + crypto: End-tot-end enkripsie + favourites: Gunstelinge + filters: Filters + follow: Verhoudinge + lists: Lyste + media: Media aanhegsels + mutes: Dempinge + notifications: Kennisgewings + push: Stoot kennisgewings + reports: Rapporteringe + search: Soek + statuses: Plasings + layouts: + admin: + nav: + applications: Toepassings + oauth2_provider: OAuth2 Verskaffer + application: + title: Benodig OAuth bemagtiging + scopes: + admin:read: lees alle data op die bediener + admin:read:accounts: lees sensitiewe inligting vanaf alle rekeninge + admin:read:reports: lees sensitiewe inligting van alle verslae end aangeklaagde rekeninge + admin:write: verander alle data op die bediener + admin:write:accounts: voer modereer aksies uit op rekeninge + admin:write:reports: voer modereer aksies uit op verslae + crypto: gebruik end-tot-end enkripsie + follow: verander rekening verhoudinge + push: ontvang jou stootkennisgewings + read: lees die data van al jou rekeninge + read:accounts: sien rekening inligting + read:blocks: sien blokeringe + read:bookmarks: sien jou boekmerke + read:favourites: sien jou gunstelinge + read:filters: sien jou filters + read:lists: sien jou lyste + read:mutes: sien jou stilmake + read:notifications: sien jou kennisgewinge + read:reports: sien jou rapporteringe + read:search: soek namens jou + read:statuses: sien alle plasings + write: verander alle data van jou rekening + write:accounts: verander jou profiel + write:blocks: blokeer rekeninge en domeine + write:bookmarks: boekmerk plasings + write:conversations: demp en wis gesprekke uit + write:favourites: merk gunsteling plasings + write:filters: skep filters + write:follows: volg mense + write:lists: skep lyste + write:media: laai meda lêers op + write:mutes: demp mense en gesprekke + write:notifications: maak jou kennisgewings skoon + write:reports: rapporteer ander mense + write:statuses: publiseer plasings diff --git a/config/locales/doorkeeper.pt-BR.yml b/config/locales/doorkeeper.pt-BR.yml index 684b993abc0..0a0b6b1beb8 100644 --- a/config/locales/doorkeeper.pt-BR.yml +++ b/config/locales/doorkeeper.pt-BR.yml @@ -60,7 +60,8 @@ pt-BR: error: title: Ocorreu um erro new: - review_permissions: Analisar permissões + prompt_html: O %{client_name} gostaria de ter permissão para acessar sua conta. É uma aplicação de terceiros. Se você não confia, então você não deve autorizá-lo. + review_permissions: Revisar permissões title: Autorização necessária show: title: Copie este código de autorização e cole no aplicativo. @@ -71,6 +72,8 @@ pt-BR: revoke: Você tem certeza? index: authorized_at: Autorizado em %{date} + description_html: Estas são as aplicações que podem acessar sua conta usando a API. Se houver aplicativos que você não reconhece ou com mau funcionamento, você pode revogar seu acesso. + last_used_at: Última vez usado em %{date} never_used: Nunca usado scopes: Permissões superapp: Interno @@ -110,16 +113,23 @@ pt-BR: destroy: notice: Aplicativo revogado. grouped_scopes: + access: + read: Acesso somente para leitura + read/write: Acesso de leitura e escrita + write: Acesso somente para escrita title: accounts: Contas + admin/accounts: Administração de contas + admin/all: Todas as funções administrativas + admin/reports: Administração de relatórios all: Tudo - blocks: Blocos + blocks: Bloqueios bookmarks: Salvos conversations: Conversas crypto: Criptografia de ponta a ponta favourites: Favoritos filters: Filtros - follow: Relações + follow: Relacionamentos lists: Listas media: Mídias anexadas notifications: Notificações @@ -161,6 +171,7 @@ pt-BR: write:accounts: alterar seu perfil write:blocks: bloquear contas e domínios write:bookmarks: salvar toots + write:conversations: silenciar e excluir conversas write:favourites: favoritar toots write:filters: criar filtros write:follows: seguir pessoas diff --git a/config/locales/el.yml b/config/locales/el.yml index 1320dcbb40e..96ec15247a4 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -36,7 +36,7 @@ el: one: δημοσίευση other: δημοσιεύσεις status_count_before: Που έγραψαν - tagline: Ακολούθησε τους γνωστούς σου και ανακάλυψε νέους ανθρώπους + tagline: Αποκεντρωμένο κοινωνικό δίκτυο terms: Όροι χρήσης unavailable_content: Μη διαθέσιμο unavailable_content_description: @@ -618,6 +618,12 @@ el: edit_preset: Ενημέρωση προκαθορισμένης προειδοποίησης empty: Δεν έχετε ακόμη ορίσει κάποια προεπιλογή προειδοποίησης. title: Διαχείριση προκαθορισμένων προειδοποιήσεων + webhooks: + delete: Διαγραφή + disable: Απενεργοποίηση + disabled: Απενεργοποιημένα + enable: Ενεργοποίηση + status: Κατάσταση admin_mailer: new_appeal: actions: @@ -658,7 +664,6 @@ el: applications: created: Η εφαρμογή δημιουργήθηκε επιτυχώς destroyed: Η εφαρμογή διαγράφηκε επιτυχώς - invalid_url: Το URL δεν είναι έγκυρο regenerate_token: Αναδημιουργία του διακριτικού πρόσβασης (access token) token_regenerated: Το διακριτικό πρόσβασης (access token) αναδημιουργήθηκε επιτυχώς warning: Μεγάλη προσοχή με αυτά τα στοιχεία. Μην τα μοιραστείς ποτέ με κανέναν! diff --git a/config/locales/eo.yml b/config/locales/eo.yml index babbce7da41..d287fb59065 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -36,9 +36,8 @@ eo: one: mesaĝo other: mesaĝoj status_count_before: Kie skribiĝis - tagline: Sekvi amikojn kaj trovi iujn novajn terms: Uzkondiĉoj - unavailable_content: Kontrolitaj serviloj + unavailable_content: Moderigitaj serviloj unavailable_content_description: domain: Servilo reason: 'Kialo:' @@ -86,8 +85,8 @@ eo: title: Plenumi kontrolan agon al %{acct} account_moderation_notes: create: Lasi noton - created_msg: Kontrola noto sukcese kreita! - destroyed_msg: Kontrola noto sukcese detruita! + created_msg: Noto de mederigado sukcese kreita! + destroyed_msg: Noto de moderigado sukcese detruita! accounts: add_email_domain_block: Bloki retadresan domajnon approve: Aprobi @@ -140,8 +139,8 @@ eo: all: Ĉio pending: Pritraktata suspended: Haltigita - title: Kontrolado - moderation_notes: Kontrolaj notoj + title: Moderigado + moderation_notes: Notoj de moderigado most_recent_activity: Lasta ago most_recent_ip: Lasta IP no_account_selected: Neniu konto estis ŝanĝita ĉar neniu estis selektita @@ -167,7 +166,7 @@ eo: role: Permesoj roles: admin: Administranto - moderator: Kontrolanto + moderator: Moderigisto staff: Teamo user: Uzanto search: Serĉi @@ -416,7 +415,7 @@ eo: moderation: all: Ĉiuj limited: Limigita - title: Kontrolo + title: Moderigado private_comment: Privata komento public_comment: Publika komento purge: Purigu @@ -697,7 +696,6 @@ eo: applications: created: Aplikaĵo sukcese kreita destroyed: Aplikaĵo sukcese forigita - invalid_url: La URL donita ne estas valida regenerate_token: Rekrei aliran ĵetonon token_regenerated: Alira ĵetono sukcese rekreita warning: Estu tre atenta kun ĉi tiu datumo. Neniam diskonigu ĝin al iu ajn! @@ -950,7 +948,7 @@ eo: only_redirect_html: Alie, vi povas nur aldoni alidirekton en via profilo. other_data: Neniu alia datumo estos movita aŭtomate moderation: - title: Kontrolado + title: Moderigado notification_mailer: digest: action: Vidi ĉiujn sciigojn diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index aeba0b97d97..79ae68bf45b 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -38,7 +38,7 @@ es-AR: one: mensaje other: mensajes status_count_before: Que enviaron - tagline: Seguí a tus amigos y descubrí nueva gente + tagline: Red social descentralizada terms: Términos del servicio unavailable_content: Servidores moderados unavailable_content_description: @@ -852,6 +852,26 @@ es-AR: edit_preset: Editar preajuste de advertencia empty: Aún no ha definido ningún preajuste de advertencia. title: Administrar preajustes de advertencia + webhooks: + add_new: Agregar punto final + delete: Eliminar + description_html: Un webhook habilita a Mastodon a enviar notificaciones en tiempo real sobre los eventos elegidos a tu propia aplicación, así la misma puede activar automáticamente las reacciones. + disable: Deshabilitar + disabled: Deshabilitada + edit: Editar punto final + empty: Todavía no tenés configurado ningún punto final de webhook. + enable: Habilitar + enabled: Activar + enabled_events: + one: 1 evento habilitado + other: "%{count} eventos habilitados" + events: Eventos + new: Nuevo webhook + rotate_secret: Rotar secreto + secret: Firma secreta + status: Estado + title: Webhooks + webhook: Webhook admin_mailer: new_appeal: actions: @@ -916,7 +936,6 @@ es-AR: applications: created: Aplicación creada exitosamente destroyed: Aplicación eliminada exitosamente - invalid_url: La dirección web ofrecida no es válida regenerate_token: Regenerar clave de acceso token_regenerated: Clave de acceso regenerada exitosamente warning: Ojo con estos datos. ¡Nunca los compartas con nadie! diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 5f9a9f5e7ee..f57fb960156 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -38,7 +38,7 @@ es-MX: one: estado other: estados status_count_before: Qué han escrito - tagline: Seguir a amigos existentes y descubre nuevos + tagline: Red social descentralizada terms: Condiciones de servicio unavailable_content: Contenido no disponible unavailable_content_description: @@ -428,6 +428,7 @@ es-MX: destroyed_msg: El bloque de dominio se deshizo domain: Dominio edit: Editar nuevo dominio bloqueado + existing_domain_block: Ya ha impuesto límites más estrictos a %{name}. existing_domain_block_html: Ya ha impuesto límites más estrictos a %{name}, necesita desbloquearlo primero. new: create: Crear bloque @@ -915,7 +916,6 @@ es-MX: applications: created: Aplicación creada exitosamente destroyed: Apicación eliminada exitosamente - invalid_url: La URL proporcionada es incorrecta regenerate_token: Regenerar token de acceso token_regenerated: Token de acceso regenerado exitosamente warning: Ten mucho cuidado con estos datos. ¡No los compartas con nadie! diff --git a/config/locales/es.yml b/config/locales/es.yml index 9001931341b..96d985f530a 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -38,7 +38,7 @@ es: one: estado other: estados status_count_before: Qué han escrito - tagline: Seguir a amigos existentes y descubre nuevos + tagline: Red social descentralizada terms: Condiciones de servicio unavailable_content: Contenido no disponible unavailable_content_description: @@ -852,6 +852,26 @@ es: edit_preset: Editar aviso predeterminado empty: Aún no has definido ningún preajuste de advertencia. title: Editar configuración predeterminada de avisos + webhooks: + add_new: Añadir endpoint + delete: Eliminar + description_html: Un webhook permite a Mastodon enviar notificaciones en tiempo real sobre los eventos elegidos a tu propia aplicación, para que tu aplicación pueda lanzar reacciones automáticamente. + disable: Deshabilitar + disabled: Deshabilitado + edit: Editar endpoint + empty: Aún no tienes ningún endpoint de webhook configurado. + enable: Habilitar + enabled: Activo + enabled_events: + one: 1 evento habilitado + other: "%{count} eventos habilitados" + events: Eventos + new: Nuevo webhook + rotate_secret: Rotar secreto + secret: Firmando secreto + status: Estado + title: Webhooks + webhook: Webhook admin_mailer: new_appeal: actions: @@ -916,7 +936,6 @@ es: applications: created: Aplicación creada exitosamente destroyed: Apicación eliminada exitosamente - invalid_url: La URL proporcionada es incorrecta regenerate_token: Regenerar token de acceso token_regenerated: Token de acceso regenerado exitosamente warning: Ten mucho cuidado con estos datos. ¡No los compartas con nadie! diff --git a/config/locales/et.yml b/config/locales/et.yml index 3c48bad5b7a..a551ab42459 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -35,7 +35,6 @@ et: one: postitust other: staatuseid status_count_before: Kes on avaldanud - tagline: Jälgi sõpru ja leia uusi terms: Kasutustingimused unavailable_content: Sisu pole saadaval unavailable_content_description: @@ -540,7 +539,6 @@ et: applications: created: Rakenduse loomine õnnestus destroyed: Rakenduse kustutamine õnnestus - invalid_url: Antud URL on vale regenerate_token: Loo uus access token token_regenerated: Access tokeni loomine õnnestus warning: Olge nende andmetega ettevaatlikud. Ärge jagage neid kellegagi! diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 096dd276b56..a71cd186d1e 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -36,7 +36,6 @@ eu: one: bidalketa other: bidalketa status_count_before: Hauek - tagline: Jarraitu lagunak eta egin berriak terms: Erabilera baldintzak unavailable_content: Eduki eskuraezina unavailable_content_description: @@ -855,7 +854,6 @@ eu: applications: created: Aplikazioa ongi sortu da destroyed: Aplikazioa ongi ezabatu da - invalid_url: Emandako URL-a baliogabea da regenerate_token: Birsortu sarbide token-a token_regenerated: Sarbide token-a ongi birsortu da warning: Kontuz datu hauekin, ez partekatu inoiz inorekin! diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 1c7b9f9cc22..93b766859a7 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -38,7 +38,6 @@ fa: one: چیز نوشته‌اند other: چیز نوشته‌اند status_count_before: که در کنار هم - tagline: با دوستان خود در ارتباط باشید و دوستان تازه پیدا کنید terms: شرایط خدمت unavailable_content: محتوای ناموجود unavailable_content_description: @@ -813,7 +812,6 @@ fa: applications: created: برنامه با موفقیت ساخته شد destroyed: برنامه با موفقیت پاک شد - invalid_url: نشانی واردشده معتبر نیست regenerate_token: دوباره‌سازی کد دسترسی token_regenerated: کد دسترسی با موفقیت ساخته شد warning: خیلی مواظب این اطلاعات باشید و آن را به هیچ کس ندهید! diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 55e2332cfc4..ff369f2fe78 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -38,7 +38,6 @@ fi: one: julkaisun other: julkaisua status_count_before: Julkaistu - tagline: Seuraa ja löydä uusia kavereita terms: Käyttöehdot unavailable_content: Moderoidut palvelimet unavailable_content_description: @@ -860,7 +859,6 @@ fi: applications: created: Sovelluksen luonti onnistui destroyed: Sovelluksen poisto onnistui - invalid_url: Annettu URL on virheellinen regenerate_token: Luo pääsytunnus uudelleen token_regenerated: Pääsytunnuksen uudelleenluonti onnistui warning: Säilytä tietoa hyvin. Älä milloinkaan jaa sitä muille! diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 109fd68496b..5f74972f951 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -37,8 +37,8 @@ fr: status_count_after: one: message other: messages - status_count_before: Qui a publié - tagline: Suivez vos ami·e·s et découvrez-en de nouveaux·elles + status_count_before: Ayant publié + tagline: Réseau social décentralisé terms: Conditions d’utilisation unavailable_content: Serveurs modérés unavailable_content_description: @@ -428,6 +428,7 @@ fr: destroyed_msg: Le blocage de domaine a été désactivé domain: Domaine edit: Modifier le blocage de domaine + existing_domain_block: Vous avez déjà imposé des limites plus strictes à %{name}. existing_domain_block_html: Vous avez déjà imposé des limites plus strictes à %{name}, vous devez d’abord le/la débloquer. new: create: Créer le blocage @@ -851,6 +852,25 @@ fr: edit_preset: Éditer les avertissements prédéfinis empty: Vous n'avez pas encore créé de paramètres prédéfinis pour les avertissements. title: Gérer les avertissements prédéfinis + webhooks: + add_new: Ajouter un point de terminaison + delete: Supprimer + description_html: Un point d'ancrage web permet à Mastodon d'envoyer des notifications en temps réel concernant des événements sélectionnés vers votre propre application, afin que celle-ci puisse déclencher automatiquement des réactions. + disable: Désactiver + disabled: Désactivé + edit: Modifier le point de terminaison + empty: Pour l'instant, vous n'avez configuré aucun lien d'ancrage web pour point de terminaison. + enable: Activer + enabled: Actif + enabled_events: + one: 1 événement activé + other: "%{count} événements activés" + events: Événements + new: Nouveau point d’ancrage web + rotate_secret: Effectuer une rotation du secret + status: État + title: Points d’ancrage web + webhook: Point d’ancrage web admin_mailer: new_appeal: actions: @@ -915,7 +935,6 @@ fr: applications: created: Application créée avec succès destroyed: Application supprimée avec succès - invalid_url: L’URL fournie est invalide regenerate_token: Régénérer le jeton d’accès token_regenerated: Jeton d’accès régénéré avec succès warning: Soyez prudent·e avec ces données. Ne les partagez pas ! @@ -1519,6 +1538,9 @@ fr: pinned: Message épinglé reblogged: a partagé sensitive_content: Contenu sensible + strikes: + errors: + too_late: Il est trop tard pour faire appel à cette sanction tags: does_not_match_previous_name: ne correspond pas au nom précédent terms: diff --git a/config/locales/gd.yml b/config/locales/gd.yml index 931cea4fb18..387ba6c2a38 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -40,7 +40,6 @@ gd: other: post two: phost status_count_before: A dh’fhoillsich - tagline: Lean air caraidean ’s rùraich feadhainn ùra terms: Teirmichean na seirbheise unavailable_content: Frithealaichean fo mhaorsainneachd unavailable_content_description: @@ -446,6 +445,7 @@ gd: destroyed_msg: Chan eil an àrainn ’ga bacadh tuilleadh domain: Àrainn edit: Deasaich bacadh na h-àrainne + existing_domain_block: Chuir thu cuingeachaidhean nas teinne air %{name} mu thràth. existing_domain_block_html: Chuir thu cuingeachadh nas teinne air %{name} mu thràth, feumaidh tu a dì-bhacadh an toiseach. new: create: Cruthaich bacadh @@ -949,7 +949,6 @@ gd: applications: created: Chaidh an t-iarrtas a chruthachadh destroyed: Chaidh an t-iarrtas a sguabadh às - invalid_url: Tha an t-URL a thugadh seachad mì-dhligheach regenerate_token: Ath-ghin an tòcan inntrigidh token_regenerated: Chaidh an tòcan inntrigidh ath-ghintinn warning: Bi glè chùramach leis an dàta seo. Na co-roinn le duine sam bith e! diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 48435b45bbd..5b303b08f1b 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -11,8 +11,8 @@ gl: apps: Aplicacións móbiles apps_platforms: Emprega Mastodon dende iOS, Android e outras plataformas browse_directory: Mira o directorio e filtra por intereses - browse_local_posts: Navega polas publicacións públicas deste servidor en tempo real - browse_public_posts: Navega polas publicacións públicas de Mastodon en tempo real + browse_local_posts: Unha ollada aos últimos comentarios públicos neste servidor + browse_public_posts: Cronoloxía en directo cos comentarios públicos en Mastodon contact: Contacto contact_missing: Non establecido contact_unavailable: Non dispoñíbel @@ -31,14 +31,14 @@ gl: privacy_policy: Política de privacidade rules: Regras do servidor rules_html: 'Aquí tes un resumo das regras que debes seguir se queres ter unha conta neste servidor de Mastodon:' - see_whats_happening: Ver o que está a acontecer + see_whats_happening: Mira o que acontece server_stats: 'Estatísticas do servidor:' source_code: Código fonte status_count_after: one: publicación other: publicacións status_count_before: Que publicaron - tagline: Segue ás túas amizades e coñece novas + tagline: Rede social descentralizada terms: Termos do servizo unavailable_content: Contido non dispoñíbel unavailable_content_description: @@ -852,6 +852,26 @@ gl: edit_preset: Editar aviso preestablecido empty: Non definiches os avisos prestablecidos. title: Xestionar avisos preestablecidos + webhooks: + add_new: Engadir punto de extremo + delete: Eliminar + description_html: Un webhook permítelle a Mastodon enviar notificacións en tempo real á túa aplicación acerca dos eventos elexidos e así, a aplicación activará automáticamente a súa programación. + disable: Desactivar + disabled: Desactivado + edit: Editar extremo + empty: Non tes configurado ningún punto extremo para o webhook. + enable: Activar + enabled: Activo + enabled_events: + one: 1 evento activado + other: "%{count} eventos activados" + events: Eventos + new: Novo webhook + rotate_secret: Rotar segredo + secret: Segredo de acceso + status: Estado + title: Webhooks + webhook: Webhook admin_mailer: new_appeal: actions: @@ -916,7 +936,6 @@ gl: applications: created: Creouse con éxito este aplicativo destroyed: Eliminouse con éxito o aplicativo - invalid_url: A URL proporcionada non é válida regenerate_token: Votar a xenerar o testemuño de acceso token_regenerated: Rexenerouse con éxito o testemuño de acceso warning: Ten moito tino con estos datos. Non os compartas nunca con ninguén! diff --git a/config/locales/he.yml b/config/locales/he.yml index 2d0cf8ae941..04003412559 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -1,7 +1,7 @@ --- he: about: - about_hashtag_html: אלו סטטוסים פומביים המתוייגים בתור#%{hashtag}. ניתן להגיב, להדהד או לחבב אותם אם יש לך חשבון בכל מקום בפדרציה. + about_hashtag_html: אלו הודעות פומביות המתוייגות בתור#%{hashtag}. ניתן להגיב, להדהד או לחבב אותם אם יש לך חשבון בכל מקום שהוא בפדרציה. about_mastodon_html: מסטודון היא רשת חברתית חופשית, מבוססת תוכנה חופשית ("קוד פתוח"). כאלטרנטיבה בלתי ריכוזית לפלטפרומות המסחריות, מסטודון מאפשרת להמנע מהסיכונים הנלווים להפקדת התקשורת שלך בידי חברה יחידה. שמת את מבטחך בשרת אחד — לא משנה במי בחרת, תמיד אפשר לדבר עם כל שאר המשתמשים. לכל מי שרוצה יש את האפשרות להקים שרת מסטודון עצמאי, ולהשתתף ברשת החברתית באופן חלק. about_this: אודות שרת זה active_count_after: פעיל @@ -40,7 +40,6 @@ he: other: חצרוצים two: חצרוצים status_count_before: שכתבו - tagline: מעקב אחרי חברים וגילוי חדשים terms: תנאי שימוש unavailable_content: שרתים מוגבלים unavailable_content_description: @@ -885,6 +884,14 @@ he: edit_preset: ערוך/י טקסט מוכן מראש לאזהרה empty: לא הגדרת עדיין שום טקסט מוכן מראש לאזהרה. title: ניהול טקסטים מוכנים מראש לאזהרות + webhooks: + delete: מחיקה + disable: כיבוי + disabled: כבוי + enable: אפשר + enabled: פעילים + events: אירועים + status: סטטוס admin_mailer: new_appeal: actions: @@ -949,7 +956,6 @@ he: applications: created: ישום נוצר בהצלחה destroyed: ישום נמחק בהצלחה - invalid_url: כתובת הקישורית אינה חוקית regenerate_token: יצירת אסימון גישה מחדש token_regenerated: אסימון גישה יוצר מחדש בהצלחה warning: זהירות רבה נדרשת עם מידע זה. אין לחלוק אותו אף פעם עם אף אחד! diff --git a/config/locales/hr.yml b/config/locales/hr.yml index dd3b99dccb8..fd90a5ac469 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -79,8 +79,6 @@ hr: application_mailer: settings: 'Promijeni postavke e-pošte: %{link}' view: 'Vidi:' - applications: - invalid_url: Unesena poveznica nije valjana auth: didnt_get_confirmation: Niste primili upute za potvrđivanje? forgot_password: Zaboravljena lozinka? diff --git a/config/locales/hu.yml b/config/locales/hu.yml index faee9de06f7..5ee01ea2cfa 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -38,7 +38,7 @@ hu: one: bejegyzést írt other: bejegyzést írt status_count_before: Eddig - tagline: Kövess barátokat és találj újakat + tagline: Decentralizált szociális hálózat terms: Felhasználási feltételek unavailable_content: Kimoderált szerverek unavailable_content_description: @@ -854,6 +854,26 @@ hu: edit_preset: Figyelmeztetés szerkesztése empty: Nem definiáltál még egyetlen figyelmeztetést sem. title: Figyelmeztetések + webhooks: + add_new: Végpont hozzáadása + delete: Törlés + description_html: Egy webhook lehetővé teszi a Mastodon számára, hogy valósidejű értesítéseket küldjön le a kiválasztott eseményekről a te alkalmazásodnak, így az alkalmazásod automatikusan reagálhat ezekre. + disable: Letiltás + disabled: Letiltva + edit: Végpont szerkesztése + empty: Még nincs beállított webhook végpontod. + enable: Engedélyezés + enabled: Aktív + enabled_events: + one: 1 engedélyezett esemény + other: "%{count} engedélyezett esemény" + events: Események + new: Új webhook + rotate_secret: Titok forgatása + secret: Titok aláírása + status: Állapot + title: Webhookok + webhook: Webhook admin_mailer: new_appeal: actions: @@ -918,7 +938,6 @@ hu: applications: created: Alkalmazás sikeresen létrehozva destroyed: Alkalmazás sikeresen eltávolítva - invalid_url: A megadott URL nem megfelelő regenerate_token: Hozzáférési kulcs újragenerálása token_regenerated: Hozzáférési kulcs sikeresen újragenerálva warning: Ez érzékeny adat. Soha ne oszd meg másokkal! diff --git a/config/locales/hy.yml b/config/locales/hy.yml index f24b3197e69..831ca662165 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -33,7 +33,6 @@ hy: one: գրառում other: ստատուս status_count_before: Որոնք արել են՝ - tagline: Հետեւիր ընկերներիդ եւ գտիր նորերին terms: Ծառայութեան պայմանները unavailable_content: Մոդերացուող սպասարկիչներ unavailable_content_description: @@ -551,7 +550,6 @@ hy: view_profile: Նայել անձնական էջը view_status: Նայել գրառումը applications: - invalid_url: Տրամադրուած URL անվաւեր է regenerate_token: Ստեղծել նոր հասանելիութեան կտրոն your_token: Քո մուտքի բանալին auth: diff --git a/config/locales/id.yml b/config/locales/id.yml index c278f749f6b..368b21add11 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -35,7 +35,7 @@ id: status_count_after: other: status status_count_before: Yang telah menulis - tagline: Ikuti teman dan temukan yang baru + tagline: Jejaring sosial terdesentralisasi terms: Kebijakan layanan unavailable_content: Konten tak tersedia unavailable_content_description: @@ -833,6 +833,21 @@ id: edit_preset: Sunting preset peringatan empty: Anda belum mendefinisikan peringatan apapun. title: Kelola preset peringatan + webhooks: + add_new: Tambah titik akhir + delete: Hapus + disable: Matikan + disabled: Nonaktif + edit: Edit titik akhir + enable: Aktifkan + enabled: Aktif + enabled_events: + other: "%{count} acara aktif" + events: Acara + new: Webhook baru + status: Status + title: Webhook + webhook: Webhook admin_mailer: new_appeal: actions: @@ -897,7 +912,6 @@ id: applications: created: Aplikasi berhasil dibuat destroyed: Aplikasi berhasil dihapus - invalid_url: URL tidak sesuai regenerate_token: Buat ulang token akses token_regenerated: Token akses berhasil dibuat ulang warning: Hati-hati dengan data ini. Jangan bagikan kepada siapapun! diff --git a/config/locales/io.yml b/config/locales/io.yml index 3649ec946b2..7cf253089e1 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -38,7 +38,7 @@ io: one: posto other: posti status_count_before: Qua publikigis - tagline: Sequez amiki e deskovrez nova personi + tagline: Necentralizita sociala reto terms: Serveskondicioni unavailable_content: Jerata servili unavailable_content_description: @@ -852,6 +852,26 @@ io: edit_preset: Modifikez avertfixito empty: Vu ne fixis irga avertfixito til nun. title: Jerez avertfixiti + webhooks: + add_new: Insertez finpunto + delete: Efacez + description_html: "Rethoko povigas Mastodon sendar samtempoavizi pri selektita eventi a vua sua apliko, por ke vua apliko povas automate kauzigar reakti." + disable: Desaktivigez + disabled: Desaktivigita + edit: Modifikez finpunto + empty: Vu ne havas irga ajustita finpunti ankore. + enable: Aktivigez + enabled: Aktiva + enabled_events: + one: 1 aktivigita evento + other: "%{count} aktivigita eventi" + events: Eventi + new: Nova rethoko + rotate_secret: Rotacigez sekreto + secret: Signosekreto + status: Stando + title: Rethoki + webhook: Rethok admin_mailer: new_appeal: actions: @@ -916,7 +936,6 @@ io: applications: created: Apliko sucesoze kreesas destroyed: Apliko sucesoze efacesas - invalid_url: La URL donita ne esas valida regenerate_token: Rifacez acesficho token_regenerated: Acesficho sucesoze riganesas warning: Sorgemez per ca informi. Ne partigez kun irgu! diff --git a/config/locales/is.yml b/config/locales/is.yml index 4e3f9353eb6..f9d408822f8 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -38,7 +38,7 @@ is: one: færsla other: færslur status_count_before: Sem stóðu fyrir - tagline: Fylgstu með vinum og uppgötvaðu nýja + tagline: Dreift samfélagsnet terms: Þjónustuskilmálar unavailable_content: Ekki tiltækt efni unavailable_content_description: @@ -852,6 +852,14 @@ is: edit_preset: Breyta forstilltri aðvörun empty: Þú hefur ekki enn skilgreint neinar aðvaranaforstillingar. title: Sýsla með forstilltar aðvaranir + webhooks: + delete: Eyða + disable: Gera óvirkt + disabled: Óvirkt + enable: Virkja + enabled: Virkt + events: Atburðir + status: Staða admin_mailer: new_appeal: actions: @@ -916,7 +924,6 @@ is: applications: created: Það tókst að búa til forrit destroyed: Það tókst að eyða forriti - invalid_url: Slóðin sem þú gafst upp er ógild regenerate_token: Endurgera aðgangsteikn token_regenerated: Það tókst að endurgera aðgangsteiknið warning: Farðu mjög varlega með þessi gögn. Þú skalt aldrei deila þeim með neinum! diff --git a/config/locales/it.yml b/config/locales/it.yml index 708436ee1c4..f97779d26c2 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -38,7 +38,7 @@ it: one: stato other: stati status_count_before: Che hanno pubblicato - tagline: Segui amici e trovane di nuovi + tagline: Social network decentralizzato terms: Termini di Servizio unavailable_content: Server moderati unavailable_content_description: @@ -852,6 +852,26 @@ it: edit_preset: Modifica avviso predefinito empty: Non hai ancora definito alcun avviso preimpostato. title: Gestisci avvisi predefiniti + webhooks: + add_new: Aggiungi endpoint + delete: Elimina + description_html: Un webhook consente a Mastodon di inviare notifiche in tempo reale su determinati eventi alla tua applicazione, così la tua applicazione può attivare automaticamente delle reazioni. + disable: Disabilita + disabled: Disabilitato + edit: Modifica endpoint + empty: Non hai ancora configurato alcun endpoint per webhook. + enable: Abilita + enabled: Attivo + enabled_events: + one: 1 evento abilitato + other: "%{count} eventi abilitati" + events: Eventi + new: Nuovo webhook + rotate_secret: Ruota segreto + secret: Segreto per firma + status: Stato + title: Webhook + webhook: Webhook admin_mailer: new_appeal: actions: @@ -918,7 +938,6 @@ it: applications: created: Applicazione creata con successo destroyed: Applicazione eliminata con successo - invalid_url: L'URL fornito non è valido regenerate_token: Rigenera il token di accesso token_regenerated: Token di accesso rigenerato warning: Fa' molta attenzione con questi dati. Non fornirli mai a nessun altro! diff --git a/config/locales/ja.yml b/config/locales/ja.yml index defd5ab7ca7..b7139523b5a 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -35,7 +35,7 @@ ja: status_count_after: other: 投稿 status_count_before: 投稿数 - tagline: Follow friends and discover new ones + tagline: 分散型ソーシャルネットワーク terms: 利用規約 unavailable_content: 制限中のサーバー unavailable_content_description: @@ -825,6 +825,18 @@ ja: edit_preset: プリセット警告文を編集 empty: まだプリセット警告文が作成されていません。 title: プリセット警告文を管理 + webhooks: + add_new: エンドポイントを追加 + delete: 削除 + disable: 無効化 + disabled: 無効 + edit: エンドポイントを編集 + enable: 有効化 + enabled: アクティブ + events: イベント + new: 新しいwebhook + title: Webhooks + webhook: Webhook admin_mailer: new_appeal: actions: @@ -885,7 +897,6 @@ ja: applications: created: アプリが作成されました destroyed: アプリが削除されました - invalid_url: URLが無効です regenerate_token: アクセストークンの再生成 token_regenerated: アクセストークンが再生成されました warning: このデータは気をつけて取り扱ってください。他の人と共有しないでください! diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 7e6d591ecab..bd02b0f8de4 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -305,7 +305,6 @@ ka: applications: created: აპლიკაცია წარმატებით შეიქმნა destroyed: აპლიკაცია წარმატებით გაუქმდა - invalid_url: მოწოდებული ურლ არასწორია regenerate_token: წვდომის ტოკენის რეგენერაცია token_regenerated: წვდომის ტოკენის რეგენერაცია მოხერხდა warning: იყავით ძალიან ფრთხილად ამ მონაცემთან. არასდროს გააზიაროთ ეს! diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 66d029d7a9b..0db4e1c9dcb 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -29,7 +29,6 @@ kab: one: n tsuffeɣt other: n tsuffiɣin status_count_before: I d-yessuffɣen - tagline: Ḍfeṛ imddukkal-ik tissineḍ-d wiyaḍ terms: Tiwetlin n useqdec unavailable_content: Ulac agbur unavailable_content_description: diff --git a/config/locales/kk.yml b/config/locales/kk.yml index a01a2424aa1..406f7e3c87b 100644 --- a/config/locales/kk.yml +++ b/config/locales/kk.yml @@ -32,7 +32,6 @@ kk: one: жазба other: жазба status_count_before: Барлығы - tagline: Достарыңызды оқыңыз және жаңа авторларды табыңыз terms: Қолдану шарттары unavailable_content: Қолжетімсіз контент unavailable_content_description: @@ -477,7 +476,6 @@ kk: applications: created: Application succеssfully created destroyed: Application succеssfully deleted - invalid_url: The providеd URL is invalid regenerate_token: Regenerate accеss token token_regenerated: Access token succеssfully regenerated warning: Be very carеful with this data. Never share it with anyone! diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 630beabfbde..65bc57e3ae2 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -37,7 +37,7 @@ ko: status_count_after: other: 개 status_count_before: 게시물 수 - tagline: 친구들을 팔로우 하고 새로운 사람들도 만나기 + tagline: 분산화된 소셜 네트워크 terms: 이용약관 unavailable_content: 이용 불가능한 컨텐츠 unavailable_content_description: @@ -837,6 +837,14 @@ ko: edit_preset: 경고 틀 수정 empty: 아직 어떤 경고 틀도 정의되지 않았습니다. title: 경고 틀 관리 + webhooks: + add_new: 엔드포인트 추가 + delete: 삭제 + disable: 비활성화 + disabled: 비활성화됨 + edit: 엔드포인트 수정 + enable: 활성화 + enabled: 활성화됨 admin_mailer: new_appeal: actions: @@ -901,7 +909,6 @@ ko: applications: created: 애플리케이션이 성공적으로 생성되었습니다 destroyed: 애플리케이션이 성공적으로 삭제되었습니다 - invalid_url: 올바르지 않은 URL입니다 regenerate_token: 토큰 재생성 token_regenerated: 액세스 토큰이 성공적으로 재생성되었습니다 warning: 이 데이터를 조심히 다뤄 주세요. 다른 사람들과 절대로 공유하지 마세요! diff --git a/config/locales/ku.yml b/config/locales/ku.yml index 78d99c2e519..a157dbb4e4b 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -38,7 +38,7 @@ ku: one: şandî other: şandî status_count_before: Hatin weşan - tagline: Hevalên xwe bişopîne û yên nû bibîne + tagline: Tora civakî ya nenavendî terms: Peyama mercan unavailable_content: Rajekarên li hev kirî unavailable_content_description: @@ -854,6 +854,26 @@ ku: edit_preset: Hişyariyên pêşsazkirî serrast bike empty: Te hin tu hişyariyên pêşsazkirî destnîşan nekirine. title: Hişyariyên pêşsazkirî bi rêve bibe + webhooks: + add_new: Xala dawîbûnê tevlî bike + delete: Jê bibe + description_html: "çengeleke tevnê dihêle ku Mastodon agahdariyên dema-rastîn ên derbarê çalakiyên hilbijartî de bisepîne ser sepana te, bi vî awayî sepana te dikare reaksiyonan bi awayekî bixweber nîşan bide." + disable: Neçalak bike + disabled: Neçalakkirî + edit: Xala dawîbûnê serrast bike + empty: Hîn çengela tevnê ya xala dawîbûnê ya te ku hatiye pevesazkirin tune ne. + enable: Çalak bike + enabled: Çalak + enabled_events: + one: 1 bûyer çalakkirî + other: "%{count} bûyer çalakkirî" + events: Bûyer + new: Çengela tevnê ya nû + rotate_secret: Veşartî bizivirîne + secret: Îmzekirina veşartî + status: Rewş + title: Çengelên tevnê + webhook: Çengela tevnê admin_mailer: new_appeal: actions: @@ -918,7 +938,6 @@ ku: applications: created: Sepan bi awayekî serkeftî hat çêkirin destroyed: Sepan bi awayekî serkeftî hat jêbirin - invalid_url: URL ya hatiye dayîn ne derbasdar e regenerate_token: Nîşandera gihandinê bi nûve çêbike token_regenerated: Nîşandera gihandinê bi serkeftî nû ve hat çêkirin warning: Bi van daneyan re pir baldar be. Tu caran bi kesî re parve neke! diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 864d2f43f3e..5846f7d5d4a 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -353,7 +353,6 @@ lt: applications: created: Aplikacija sėkmingai sukurta destroyed: Aplikacija sėkmingai ištrinta - invalid_url: Gauta URL nuoroda netinkama regenerate_token: Regeneruoti prieigos žetoną token_regenerated: Prieigos žetonas sėkmingai sugeneruotas warning: Būkite atsargūs su šia informacija. Niekada jos nesidalinkite! diff --git a/config/locales/lv.yml b/config/locales/lv.yml index f9d404303d9..2ceec30b222 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -39,13 +39,13 @@ lv: other: ziņas zero: nav status_count_before: Kurš publicējis - tagline: Seko draugiem un atrodi jaunus + tagline: Decentralizēts sociālais tīkls terms: Pakalpojuma noteikumi unavailable_content: Moderētie serveri unavailable_content_description: domain: Serveris reason: Iemesls - rejecting_media: 'Multivides faili no šiem serveriem netiks apstrādāti vai saglabāti, un netiks parādīti sīktēli, kuriem nepieciešama manuāla noklikšķināšana uz sākotnējā faila:' + rejecting_media: 's faili no šiem serveriem netiks apstrādāti vai saglabāti, un netiks parādīti sīktēli, kuriem nepieciešama manuāla noklikšķināšana uz sākotnējā faila:' rejecting_media_title: Filtrēts saturs silenced: 'Ziņas no šiem serveriem tiks paslēptas publiskās ziņu lentās un sarunās, un no lietotāju mijiedarbības netiks ģenerēti paziņojumi, ja vien tu tiem nesekosi:' silenced_title: Ierobežoti serveri @@ -72,7 +72,7 @@ lv: joined: Pievienojās %{date} last_active: pēdējā aktivitāte link_verified_on: Šīs saites piederība tika pārbaudīta %{date} - media: Mediji + media: Multivide moved_html: "%{name} ir pārcēlies uz %{new_profile_link}:" network_hidden: Šāda informācija nav pieejama nothing_here: Te nekā nav! @@ -770,7 +770,7 @@ lv: report: Ziņojums deleted: Dzēstie media: - title: Mediji + title: Multivide no_status_selected: Neviena ziņa netika mainīta, jo neviena netika atlasīta title: Konta ziņas with_media: Ar medijiem @@ -869,6 +869,27 @@ lv: edit_preset: Labot iepriekš iestatītus brīdinājumus empty: Tu vēl neesi definējis iepriekš iestatītos brīdinājumus. title: Pārvaldīt brīdinājuma iestatījumus + webhooks: + add_new: Pievienot galapunktu + delete: Dzēst + description_html: Izmantojot tīmekļa aizķeri, Mastodon var nosūtīt jūsu lietojumprogrammai reāllaika paziņojumus par izvēlētajiem notikumiem, lai tava lietojumprogramma varētu automātiski izraisīt reakcijas. + disable: Atspējot + disabled: Atspējots + edit: Rediģēt galapunktu + empty: Tev vēl nav konfigurēts neviens tīmekļa aizķeres galapunkts. + enable: Iespējot + enabled: Aktīvie + enabled_events: + one: 1 iespējots notikums + other: "%{count} iespējoti notikumi" + zero: "%{count} iespējotu notikumu" + events: Notikumi + new: Jauna tīmekļa aizķere + rotate_secret: Pagriezt noslēpumu + secret: Paraksta noslēpums + status: Statuss + title: Tīmekļa āķi + webhook: Tīmekļa āķis admin_mailer: new_appeal: actions: @@ -933,7 +954,6 @@ lv: applications: created: Lietojumprogramma ir veiksmīgi izveidota destroyed: Lietojumprogramma ir veiksmīgi dzēsta - invalid_url: Norādītais URL nav derīgs regenerate_token: Atjaunot piekļuves marķieri token_regenerated: Piekļuves marķieris veiksmīgi atjaunots warning: Esi ļoti uzmanīgs ar šiem datiem. Nekad nedalies ne ar vienu ar tiem! diff --git a/config/locales/ml.yml b/config/locales/ml.yml index daee6098c5b..f035633ca9b 100644 --- a/config/locales/ml.yml +++ b/config/locales/ml.yml @@ -15,7 +15,6 @@ ml: see_whats_happening: എന്തൊക്കെ സംഭവിക്കുന്നു എന്ന് കാണുക source_code: സോഴ്സ് കോഡ് status_count_before: ആരാൽ എഴുതപ്പെട്ടു - tagline: സുഹൃത്തുക്കളെ പിന്തുടരുകയും പുതിയവരെ കണ്ടെത്തുകയും ചെയ്യുക terms: സേവന വ്യവസ്ഥകൾ unavailable_content: ലഭ്യമല്ലാത്ത ഉള്ളടക്കം unavailable_content_description: diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 4e101a890dc..d400d3256a0 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -34,7 +34,6 @@ ms: status_count_after: other: hantaran status_count_before: Siapa terbitkan - tagline: Ikuti rakan lama dan terokai rakan baharu terms: Terma perkhidmatan unavailable_content: Pelayan disederhanakan unavailable_content_description: diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 764ae42d69a..db49efbb9ea 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -36,7 +36,7 @@ nl: one: toot other: berichten status_count_before: Zij schreven - tagline: Vrienden volgen en nieuwe ontdekken + tagline: Gedecentraliseerd sociaal netwerk terms: Gebruiksvoorwaarden unavailable_content: Gemodereerde servers unavailable_content_description: @@ -680,7 +680,6 @@ nl: applications: created: Aanmaken toepassing geslaagd destroyed: Verwijderen toepassing geslaagd - invalid_url: De opgegeven URL is ongeldig regenerate_token: Toegangscode opnieuw aanmaken token_regenerated: Opnieuw aanmaken toegangscode geslaagd warning: Wees voorzichtig met deze gegevens. Deel het nooit met iemand anders! diff --git a/config/locales/nn.yml b/config/locales/nn.yml index ea5020bbfe1..5218270da46 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -30,7 +30,6 @@ nn: server_stats: 'Tenarstatistikk:' source_code: Kjeldekode status_count_before: Som skreiv - tagline: Fylg vener og oppdag nye terms: Brukarvilkår unavailable_content: Utilgjengeleg innhald unavailable_content_description: @@ -634,7 +633,6 @@ nn: applications: created: Søknad laga destroyed: Søknad sletta - invalid_url: Denne lenkja er ugyldig regenerate_token: Lag tilgangsnykel på nytt token_regenerated: Tilgangsnykel laga på nytt warning: Ver varsam med dette datumet. Aldri del det med nokon! diff --git a/config/locales/no.yml b/config/locales/no.yml index 4abc8f086d9..30b7a56fb7d 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -33,7 +33,6 @@ one: innlegg other: statuser status_count_before: Som skrev - tagline: Følg venner og oppdag nye terms: Bruksvilkår unavailable_content: Utilgjengelig innhold unavailable_content_description: @@ -629,7 +628,6 @@ applications: created: Søknaden ble vellykket oppretttet destroyed: Søknaden ble vellykket slettet - invalid_url: Den oppgitte URLen er ugyldig regenerate_token: Regenerer tilgangsnøkkel token_regenerated: Tilgangsnøkkel vellykket regenerert warning: Vær veldig forsiktig med denne data. Aldri del den med noen! diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 678d5d0dcdd..57cecbdc403 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -31,7 +31,6 @@ oc: one: estatut other: estatuts status_count_before: qu’an escrich - tagline: Seguètz d’amics e trobatz-ne de nòus terms: Condicions d’utilizacion unavailable_content: Contengut pas disponible unavailable_content_description: @@ -573,7 +572,6 @@ oc: applications: created: Aplicacion ben creada destroyed: Aplication corrcètament suprimida - invalid_url: L’URL donada es invalida regenerate_token: Tornar generar lo geton d’accès token_regenerated: Geton d’accès ben regenerat warning: Mèfi ! Agachatz de partejar aquela donada amb degun ! diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 2709572defa..7557ab83f14 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -40,7 +40,6 @@ pl: one: wpisu other: wpisów status_count_before: Są autorami - tagline: Śledź znajomych i poznawaj nowych terms: Zasady użytkowania unavailable_content: Niedostępne treści unavailable_content_description: @@ -871,6 +870,28 @@ pl: edit_preset: Edytuj szablon ostrzeżenia empty: Nie zdefiniowano jeszcze żadnych szablonów ostrzegawczych. title: Zarządzaj szablonami ostrzeżeń + webhooks: + add_new: Dodaj punkt końcowy + delete: Usuń + description_html: "webhook umożliwia Mastodon dostarczanie powiadomień w czasie rzeczywistym o wybranych wydarzeniach do twojej aplikacji, aby mogła automatycznie wyzwalać reakcje." + disable: Wyłącz + disabled: Wyłączone + edit: Edytuj punkt końcowy + empty: Nie masz jeszcze skonfigurowanych żadnych webhooków do punktów końcowych. + enable: Włącz + enabled: Aktywne + enabled_events: + few: "%{count} włączone zdarzenia" + many: "%{count} włączonych zdarzeń" + one: 1 włączone zdarzenie + other: "%{count} włączonych zdarzeń" + events: Zdarzenia + new: Nowy webhook + rotate_secret: Odśwież klucz szyfrowania + secret: Podpisywanie klucza szyfrowania + status: Stan + title: Webhooki + webhook: Webhook admin_mailer: new_appeal: actions: @@ -935,7 +956,6 @@ pl: applications: created: Pomyślnie utworzono aplikację destroyed: Pomyślnie usunięto aplikację - invalid_url: Wprowadzony adres URL jest nieprawidłowy regenerate_token: Wygeneruj nowy token dostępu token_regenerated: Pomyślnie wygenerowano nowy token dostępu warning: Przechowuj te dane ostrożnie. Nie udostępniaj ich nikomu! diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index b248110490a..7661df9a0d5 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -38,7 +38,6 @@ pt-BR: one: toot other: toots status_count_before: Autores de - tagline: Siga seus amigos e faça novas amizades terms: Termos de serviço unavailable_content: Conteúdo indisponível unavailable_content_description: @@ -428,6 +427,7 @@ pt-BR: destroyed_msg: Domínio desbloqueado domain: Domínio edit: Editar bloqueio de domínio + existing_domain_block: Você já impôs limites mais rigorosos em %{name}. existing_domain_block_html: Você já impôs limites mais estritos em %{name}, você precisa desbloqueá-lo primeiro. new: create: Criar bloqueio @@ -615,6 +615,7 @@ pt-BR: forwarded: Encaminhados forwarded_to: Encaminhado para %{domain} mark_as_resolved: Marcar como resolvido + mark_as_sensitive: Marcar como sensível mark_as_unresolved: Marcar como não resolvido no_one_assigned: Ninguém notes: @@ -800,6 +801,7 @@ pt-BR: usable: Pode ser usado usage_comparison: Usado %{today} vezes hoje, em comparação com %{yesterday} de ontem title: Em alta + trending: Em alta warning_presets: add_new: Adicionar novo delete: Excluir @@ -807,6 +809,12 @@ pt-BR: empty: Você ainda não definiu nenhuma predefinição de alerta. title: Gerenciar os avisos pré-definidos admin_mailer: + new_appeal: + actions: + delete_statuses: para excluir suas publicações + none: um aviso + sensitive: para marcar sua conta como sensível + silence: para limitar sua conta new_pending_account: body: Os detalhes da nova conta estão abaixo. Você pode aprovar ou vetar. subject: Nova conta para revisão em %{instance} (%{username}) @@ -851,7 +859,6 @@ pt-BR: applications: created: Aplicativo criado com sucesso destroyed: Aplicativo excluído com sucesso - invalid_url: O link fornecido é inválido regenerate_token: Gerar código de acesso token_regenerated: Código de acesso gerado com sucesso warning: Tenha cuidado com estes dados. Nunca compartilhe com alguém! diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 377360a9d81..9607762bbd5 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -38,7 +38,7 @@ pt-PT: one: publicação other: publicações status_count_before: Que fizeram - tagline: Siga os seus amigos e descubra novas amizades + tagline: Rede social descentralizada terms: Termos de serviço unavailable_content: Conteúdo indisponível unavailable_content_description: @@ -852,6 +852,26 @@ pt-PT: edit_preset: Editar o aviso predefinido empty: Ainda não definiu nenhum aviso predefinido. title: Gerir os avisos predefinidos + webhooks: + add_new: Adicionar endpoint + delete: Eliminar + description_html: Um webhook possibilita que o Mastodon envie notificações em tempo real de eventos seleccionados, para um seu aplicativo, para que este possa acionar ações automaticamente. + disable: Desativar + disabled: Desativado + edit: Editar endpoint + empty: Não tem ainda qualquer endpoint de webhook configurado. + enable: Ativar + enabled: Activo + enabled_events: + one: 1 evento ativado + other: "%{count} eventos ativados" + events: Eventos + new: Novo webhook + rotate_secret: Alternar segredo + secret: Segredo de assinatura + status: Estado + title: Webhooks + webhook: Webhook admin_mailer: new_appeal: actions: @@ -916,7 +936,6 @@ pt-PT: applications: created: Aplicação criada com sucesso destroyed: Aplicação eliminada com sucesso - invalid_url: O URL é inválido regenerate_token: Regenerar token de acesso token_regenerated: Token de acesso regenerado com sucesso warning: Cuidado com estes dados. Não partilhar com ninguém! diff --git a/config/locales/ro.yml b/config/locales/ro.yml index d13aa546476..3203e9178b6 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -36,7 +36,6 @@ ro: one: stare other: de stări status_count_before: Care au postat - tagline: Urmăriți prietenii și descoperiți alții noi terms: Termeni de serviciu unavailable_content: Conținut indisponibil unavailable_content_description: @@ -295,7 +294,6 @@ ro: applications: created: Aplicație creată cu succes destroyed: Aplicație ștearsă cu succes - invalid_url: URL-ul furnizat nu este valid regenerate_token: Regenerează token-ul de acces token_regenerated: Token de acces regenerat cu succes warning: Fiți foarte atent cu aceste date. Nu le împărtășiți niciodată cu cineva! diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 39a3b3eb7d4..47f944129d9 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -40,7 +40,7 @@ ru: one: пост other: поста status_count_before: И опубликовано - tagline: Подписывайтесь на друзей и заводите новые знакомства + tagline: Децентрализованная социальная сеть terms: Условия использования unavailable_content: Недоступный контент unavailable_content_description: @@ -403,6 +403,16 @@ ru: media_storage: Медиа файлы new_users: новые пользователи opened_reports: жалоб открыто + pending_reports_html: + few: "%{count} ожидающих отчета" + many: "%{count} ожидающих отчетов" + one: "%{count} ожидающий отчет" + other: "%{count} ожидающих отчетов" + pending_users_html: + few: "%{count} ожидающих пользователя" + many: "%{count} ожидающих пользователей" + one: "%{count} ожидающий пользователь" + other: "%{count} ожидающих пользователей" resolved_reports: жалоб решено software: Программное обеспечение sources: Источники регистрации @@ -500,6 +510,7 @@ ru: suspend: Приостановить policy: Политика reason: Публичная причина + title: Политика контента dashboard: instance_accounts_dimension: Популярные аккаунты instance_accounts_measure: сохраненные учетные записи @@ -803,6 +814,8 @@ ru: statuses: allow: Разрешить пост allow_account: Разрешить автора + disallow: Запретить пост + disallow_account: Запретить автора title: Популярные посты tags: current_score: Текущий счет %{score} @@ -818,6 +831,7 @@ ru: peaked_on_and_decaying: Последний пик — %{date}, сейчас идёт на спад title: Актуальные хэштеги trendable: Может появляться в списке «актуального» + trending_rank: 'Популярное #%{rank}' usable: Может использоваться usage_comparison: Использовано %{today} сегодня, для сравнения вчера %{yesterday} used_by_over_week: @@ -833,12 +847,35 @@ ru: edit_preset: Удалить шаблон предупреждения empty: Вы еще не определили пресеты предупреждений. title: Управление шаблонами предупреждений + webhooks: + add_new: Добавить конечную точку + delete: Удалить + description_html: "Вебхуки позволяют Mastodon отправлять вашим приложениям уведомления в реальном времени о выбранных происходящих событиях, а они могут обрабатывать их в автоматическом режиме." + disable: Отключить + disabled: Отключено + edit: Редактировать вебхук + empty: У вас пока нет настроенных конечных точек вебхуков. + enable: Включить + enabled: Активен + enabled_events: + few: "%{count} события включено" + many: "%{count} событий включено" + one: "%{count} событие включено" + other: "%{count} событий включено" + events: События + new: Новый вебхук + rotate_secret: Сгенерировать новый + secret: Ключ подписи + status: Состояние + title: Вебхуки + webhook: Вебхук admin_mailer: new_appeal: actions: none: предупреждение silence: ограничить учётную запись suspend: приостановить действие учётной записи + body: "%{target} обжалуют решение модератора %{action_taken_by} от %{date}, которое %{type}. Они написали:" subject: "%{username} обжалует решение модерации на %{instance}" new_pending_account: body: Ниже указана информация учётной записи. Вы можете одобрить или отклонить заявку. @@ -885,7 +922,6 @@ ru: applications: created: Приложение успешно создано destroyed: Приложение успешно удалено - invalid_url: Введенный URL неверен regenerate_token: Повторно сгенерировать токен доступа token_regenerated: Токен доступа успешно сгенерирован warning: Будьте очень внимательны с этими данными. Не делитесь ими ни с кем! diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 99cd3f0b58f..4906541437a 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -35,7 +35,6 @@ sc: one: istadu other: istados status_count_before: Atributzione de - tagline: Sighi is amistades tuas e iscoberi·nde àteras terms: Cunditziones de su servìtziu unavailable_content: Serbidores moderados unavailable_content_description: @@ -659,7 +658,6 @@ sc: applications: created: Aplicatzione creada destroyed: Aplicatzione cantzellada - invalid_url: S'URL frunidu no est curretu regenerate_token: Torra a generare s'identificadore de atzessu token_regenerated: Identificadore de atzessu generadu warning: Dae cara a custos datos. Non ddos cumpartzas mai cun nemos! diff --git a/config/locales/simple_form.af.yml b/config/locales/simple_form.af.yml index 252f9fd5a25..a52c53eba1a 100644 --- a/config/locales/simple_form.af.yml +++ b/config/locales/simple_form.af.yml @@ -1 +1,11 @@ +--- af: + simple_form: + hints: + webhook: + events: Kies gebeurtenisse om te stuur + url: Waarheen gebeurtenisse gestuur sal word + labels: + webhook: + events: Geaktiveerde gebeurtenisse + url: End-punt URL diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 2e06326484e..ccbb902823d 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -91,6 +91,9 @@ ca: name: Només pots canviar la caixa de les lletres, per exemple, per fer-la més llegible user: chosen_languages: Quan estigui marcat, només es mostraran les publicacions en les llengües seleccionades en les línies de temps públiques + webhook: + events: Selecciona esdeveniments a enviar + url: On els esdeveniments seran enviats labels: account: fields: @@ -219,6 +222,9 @@ ca: name: Etiqueta trendable: Permet que aquesta etiqueta aparegui en les tendències usable: Permetre a les publicacions emprar aquesta etiqueta + webhook: + events: Esdeveniments activats + url: URL del extrem 'no': 'No' recommended: Recomanat required: diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml index 32711aa0df7..789b328b598 100644 --- a/config/locales/simple_form.cs.yml +++ b/config/locales/simple_form.cs.yml @@ -91,6 +91,9 @@ cs: name: Můžete měnit pouze velikost písmen, například kvůli lepší čitelnosti user: chosen_languages: Po zaškrtnutí budou ve veřejných časových osách zobrazeny pouze příspěvky ve zvolených jazycích + webhook: + events: Zvolte odesílané události + url: Kam budou události odesílány labels: account: fields: @@ -219,6 +222,9 @@ cs: name: Hashtag trendable: Povolit zobrazení tohoto hashtagu mezi populárními usable: Povolit používat tento hashtag v příspěvcích + webhook: + events: Zapnuté události + url: URL koncového bodu 'no': Ne recommended: Doporučeno required: diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index 88b17a6c53b..84450c768d1 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -91,6 +91,9 @@ da: name: Kun bogstavtyper (store/små) kan ændres, eksempelvis for at gøre det mere læsbart user: chosen_languages: Når markeret, vil kun indlæg på de valgte sprog fremgå på offentlige tidslinjer + webhook: + events: Vælg begivenheder at sende + url: Hvor begivenheder sendes til labels: account: fields: @@ -219,6 +222,9 @@ da: name: Hashtag trendable: Tillad visning af dette hashtag under trends usable: Tillad indlæg at benytte dette hashtag + webhook: + events: Aktive begivenheder + url: Endepunkts-URL 'no': Nej recommended: Anbefalet required: diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index e9ae1720698..46472cdcfdd 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -91,6 +91,9 @@ de: name: Du kannst zum Beispiel nur die Groß- und Kleinschreibung der Buchstaben ändern, um es lesbarer zu machen user: chosen_languages: Wenn aktiviert, werden nur Beiträge in den ausgewählten Sprachen auf den öffentlichen Zeitleisten angezeigt + webhook: + events: Zu sendende Ereignisse auswählen + url: Wo Ereignisse hingesendet werden labels: account: fields: @@ -219,6 +222,9 @@ de: name: Hashtag trendable: Erlaube es diesen Hashtag in den Trends erscheinen zu lassen usable: Beiträge erlauben, diesen Hashtag zu verwenden + webhook: + events: Aktivierte Ereignisse + url: Endpunkt-URL 'no': Nein recommended: Empfohlen required: diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml new file mode 100644 index 00000000000..ef03d181049 --- /dev/null +++ b/config/locales/simple_form.en-GB.yml @@ -0,0 +1 @@ +en-GB: diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml index d4a9ad264f7..8f30266e362 100644 --- a/config/locales/simple_form.es-AR.yml +++ b/config/locales/simple_form.es-AR.yml @@ -91,6 +91,9 @@ es-AR: name: Sólo podés cambiar la capitalización de las letras, por ejemplo, para que sea más legible user: chosen_languages: Cuando estén marcados, sólo se mostrarán los mensajes en los idiomas seleccionados en las líneas temporales públicas + webhook: + events: Seleccionar eventos para enviar + url: Adónde serán enviados los eventos labels: account: fields: @@ -219,6 +222,9 @@ es-AR: name: Etiqueta trendable: Permitir que esta etiqueta aparezca bajo tendencias usable: Permitir a los mensajes usar esta etiqueta + webhook: + events: Eventos habilitados + url: Dirección web del punto final 'no': 'No' recommended: Opción recomendada required: diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index d02e97a3adb..66efd68abc4 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -49,6 +49,7 @@ es-MX: phrase: Se aplicará sin importar las mayúsculas o los avisos de contenido de un toot scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionas el alcance de nivel mas alto, no necesitas seleccionar las individuales. setting_aggregate_reblogs: No mostrar nuevos retoots para los toots que han sido recientemente retooteados (sólo afecta a los retoots recibidos recientemente) + setting_always_send_emails: Normalmente las notificaciones por correo electrónico no se enviarán cuando estés usando Mastodon activamente setting_default_sensitive: El contenido multimedia sensible está oculto por defecto y puede ser mostrado con un click setting_display_media_default: Ocultar contenido multimedia marcado como sensible setting_display_media_hide_all: Siempre ocultar todo el contenido multimedia @@ -151,6 +152,7 @@ es-MX: phrase: Palabra clave o frase setting_advanced_layout: Habilitar interfaz web avanzada setting_aggregate_reblogs: Agrupar retoots en las líneas de tiempo + setting_always_send_emails: Enviar siempre notificaciones por correo setting_auto_play_gif: Reproducir automáticamente los GIFs animados setting_boost_modal: Mostrar ventana de confirmación antes de un Retoot setting_crop_images: Recortar a 16x9 las imágenes de los toots no expandidos diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml index 53c6d9c45eb..53863ba311b 100644 --- a/config/locales/simple_form.es.yml +++ b/config/locales/simple_form.es.yml @@ -91,6 +91,9 @@ es: name: Sólo se puede cambiar el cajón de las letras, por ejemplo, para que sea más legible user: chosen_languages: Cuando se marca, solo se mostrarán las publicaciones en los idiomas seleccionados en las líneas de tiempo públicas + webhook: + events: Seleccionar eventos para enviar + url: Donde los eventos serán enviados labels: account: fields: @@ -219,6 +222,9 @@ es: name: Etiqueta trendable: Permitir que esta etiqueta aparezca bajo tendencias usable: Permitir a las publicaciones usar esta etiqueta + webhook: + events: Eventos habilitados + url: URL de Endpoint 'no': 'No' recommended: Recomendado required: diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index 9a777c45cef..c4fd49040df 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -91,6 +91,9 @@ fr: name: Vous ne pouvez modifier que la casse des lettres, par exemple, pour le rendre plus lisible user: chosen_languages: Lorsque coché, seuls les messages dans les langues sélectionnées seront affichés sur les fils publics + webhook: + events: Sélectionnez les événements à envoyer + url: Là où les événements seront envoyés labels: account: fields: @@ -219,6 +222,9 @@ fr: name: Hashtag trendable: Autoriser ce hashtag à apparaitre dans les tendances usable: Autoriser les messages à utiliser ce hashtag + webhook: + events: Événements activés + url: URL du point de terminaison 'no': Non recommended: Recommandé required: diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index 83447f7ec18..28d0986309f 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -91,6 +91,9 @@ gl: name: Só podes cambiar maiús/minúsculas, por exemplo, mellorar a lexibilidade user: chosen_languages: Se ten marca, só as publicacións nos idiomas seleccionados serán mostrados en cronoloxías públicas + webhook: + events: Elexir eventos a enviar + url: Cando serán enviados os eventos labels: account: fields: @@ -219,6 +222,9 @@ gl: name: Cancelo trendable: Permitir que este cancelo apareza en tendencias usable: Permitir que as publicacións utilicen este cancelo + webhook: + events: Eventos activados + url: URL do extremo 'no': Non recommended: Recomendado required: diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml index 6faf1842a37..c7fe6026cb8 100644 --- a/config/locales/simple_form.he.yml +++ b/config/locales/simple_form.he.yml @@ -91,6 +91,8 @@ he: name: ניתן רק להחליף בין אותיות קטנות וגדולות, למשל כדי לשפר את הקריאות user: chosen_languages: אם פעיל, רק חצרוצים בשפות הנבחרות יוצגו לפידים הפומביים + webhook: + events: בחר אירועים לשליחה labels: account: fields: diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index fb147a22ce8..3aba3399542 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -91,6 +91,9 @@ hu: name: Csak a kis/nagybetűséget változtathatod meg, pl. hogy olvashatóbb legyen user: chosen_languages: Ha aktív, csak a kiválasztott nyelvű bejegyzések jelennek majd meg a nyilvános idővonalon + webhook: + events: Válaszd ki a küldendő eseményeket + url: Ahová az eseményket küldjük labels: account: fields: @@ -219,6 +222,9 @@ hu: name: Hashtag trendable: A hashtag megjelenhet a felkapottak között usable: Bejegyzések használhatják ezt a hashtaget + webhook: + events: Engedélyezett események + url: Végponti URL 'no': Nem recommended: Ajánlott required: diff --git a/config/locales/simple_form.io.yml b/config/locales/simple_form.io.yml index 0e2d5e3a939..5f72276b7c2 100644 --- a/config/locales/simple_form.io.yml +++ b/config/locales/simple_form.io.yml @@ -91,6 +91,9 @@ io: name: Vu povas nur chanjar literkaso, por exemplo, por kauzigar lu divenar plu lektebla user: chosen_languages: Kande marketigesis, nur posti en selektesis lingui montresos en publika tempolinei + webhook: + events: Selektigez eventi por sendar + url: Ibe eventi sendesos labels: account: fields: @@ -219,6 +222,9 @@ io: name: Hashtago trendable: Permisez ca hashtago aparar che tendenci usable: Permisez posti uzar ca hashtago + webhook: + events: Aktivigita eventi + url: URL di finpunto 'no': Ne recommended: Rekomendito required: diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index 7eb014193e1..4d86f24dfe6 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -91,6 +91,9 @@ it: name: Puoi cambiare solo il minuscolo/maiuscolo delle lettere, ad esempio, per renderlo più leggibile user: chosen_languages: Quando una o più lingue sono contrassegnate, nelle timeline pubbliche vengono mostrati solo i toot nelle lingue selezionate + webhook: + events: Seleziona eventi da inviare + url: Dove gli eventi saranno inviati labels: account: fields: @@ -219,6 +222,9 @@ it: name: Hashtag trendable: Permetti a questo hashtag di apparire nelle tendenze usable: Permetti ai post di usare questo hashtag + webhook: + events: Eventi abilitati + url: URL endpoint 'no': 'No' recommended: Consigliato required: diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 5f61ee19cd0..cde47dbd042 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -219,6 +219,9 @@ ja: name: ハッシュタグ trendable: トレンドへの表示を許可する usable: 投稿への使用を許可する + webhook: + events: 有効なイベント + url: エンドポイントURL 'no': いいえ recommended: おすすめ required: diff --git a/config/locales/simple_form.ku.yml b/config/locales/simple_form.ku.yml index e9e6603cd04..9cfe371b555 100644 --- a/config/locales/simple_form.ku.yml +++ b/config/locales/simple_form.ku.yml @@ -93,6 +93,9 @@ ku: name: Tîpan, mînak ji bo ku bêhtir paknivîs bibe, tenê rewşa tîpên girdek/hûrdek dikarî biguherînî user: chosen_languages: Dema were nîşankirin, tenê parvekirinên bi zimanên hilbijartî dê di rêzikên giştî de werin nîşandan + webhook: + events: Bûyeran hilbijêre bo şandinê + url: Cihê ku bûyer wê werin şandin labels: account: fields: @@ -221,6 +224,9 @@ ku: name: Hashtag trendable: Bihêle ku ev hashtag werê xuyakirin di bin rojevê de usable: Bihêle ku şandî ev hashtag bi kar bînin + webhook: + events: Bûyerên çalakkirî + url: Girêdana xala dawîbûnê 'no': Na recommended: Pêşniyarkirî required: diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index e512551ba94..97fa2bff4d7 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -91,6 +91,9 @@ lv: name: Tu vari mainīt tikai burtu lielumu, piemēram, lai tie būtu vieglāk lasāmi user: chosen_languages: Ja ieķeksēts, publiskos laika grafikos tiks parādītas tikai ziņas noteiktajās valodās + webhook: + events: Atlasi nosūtāmos notikums + url: Kur notikumi tiks nosūtīti labels: account: fields: @@ -219,6 +222,9 @@ lv: name: Tēmturis trendable: Atļaut šim tēmturim parādīties zem tendencēm usable: Atļaut lietot ziņās šo tēmturi + webhook: + events: Iespējotie notikumi + url: Galapunkta URL 'no': Nē recommended: Ieteicams required: diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index 0793f55bcd8..b0373fbc629 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -91,6 +91,9 @@ pl: name: Możesz zmieniać tylko wielkość liter, np. aby były bardziej widoczne user: chosen_languages: Jeżeli zaznaczone, tylko wpisy w wybranych językach będą wyświetlane na publicznych osiach czasu + webhook: + events: Wybierz zdarzenia do wysłania + url: Dokąd będą wysłane zdarzenia labels: account: fields: @@ -219,6 +222,9 @@ pl: name: Hashtag trendable: Pozwól na wyświetlanie tego hashtagu w „Na czasie” usable: Pozwól na umieszczanie tego hashtagu we wpisach + webhook: + events: Włączone zdarzenia + url: Endpoint URL 'no': Nie recommended: Polecane required: diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml index 42116174f3b..16972ca6ab2 100644 --- a/config/locales/simple_form.pt-PT.yml +++ b/config/locales/simple_form.pt-PT.yml @@ -91,6 +91,9 @@ pt-PT: name: Só pode alterar a capitalização das letras, por exemplo, para torná-las mais legíveis user: chosen_languages: Quando seleccionado, só publicações nas línguas escolhidas serão mostradas nas cronologias públicas + webhook: + events: Selecione os eventos a enviar + url: Para onde os eventos serão enviados labels: account: fields: @@ -219,6 +222,9 @@ pt-PT: name: Hashtag trendable: Permitir que esta hashtag apareça em destaque usable: Permitir que toots utilizem esta hashtag + webhook: + events: Eventos ativados + url: URL do Endpoint 'no': Não recommended: Recomendado required: diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index 839be0a69e7..571411c096e 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -91,6 +91,9 @@ ru: name: Вы можете изменить только регистр букв чтобы, например, сделать тег более читаемым user: chosen_languages: Если выбрано, то в публичных лентах будут показаны только посты на выбранных языках. + webhook: + events: Выберите события для отправки + url: Куда события будут отправляться labels: account: fields: @@ -219,6 +222,9 @@ ru: name: Хэштег trendable: Разрешить показ хэштега в трендах usable: Разрешить использовать этот хэштег в постах + webhook: + events: Включенные события + url: Endpoint URL 'no': Нет recommended: Рекомендуем required: diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml index 5ae4b2e047f..bd482f77866 100644 --- a/config/locales/simple_form.sk.yml +++ b/config/locales/simple_form.sk.yml @@ -111,7 +111,7 @@ sk: max_uses: Najviac možno použiť new_password: Nové heslo note: O tebe - otp_attempt: Dvoj-faktorový overovací (2FA) kód + otp_attempt: Dvoj-faktorový overovací kód password: Heslo phrase: Kľúčové slovo, alebo fráza setting_advanced_layout: Zapni pokročilé užívateľské rozhranie @@ -139,6 +139,7 @@ sk: setting_use_blurhash: Ukáž farebné prechody pre skryté médiá setting_use_pending_items: Pomalý režim severity: Závažnosť + sign_in_token_attempt: Bezpečnostný kód type: Typ importu username: Prezývka username_or_email: Prezývka, alebo email diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml index f1870ab9ae6..04df4eb4964 100644 --- a/config/locales/simple_form.sl.yml +++ b/config/locales/simple_form.sl.yml @@ -91,6 +91,9 @@ sl: name: Spremenite lahko le npr. velikost črk (velike/male), da je bolj berljivo user: chosen_languages: Ko je označeno, bodo v javnih časovnicah prikazane samo objave v izbranih jezikih + webhook: + events: Izberite dogodke za pošiljanje + url: Kam bodo poslani dogodki labels: account: fields: @@ -219,6 +222,9 @@ sl: name: Ključnik trendable: Dovoli, da se ta ključnik pojavi med trendi usable: Dovoli, da objave uporabljajo ta ključnik + webhook: + events: Omogočeni dogodki + url: URL končne točke 'no': Ne recommended: Priporočeno required: diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index 1136169b7fc..0e2fb4ab88b 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -91,6 +91,9 @@ sq: name: Mund të ndryshoni shkronjat vetëm nga të mëdha në të vogla ose anasjelltas, për shembull, për t’i bërë më të lexueshme user: chosen_languages: Në iu vëntë shenjë, te rrjedha kohore publike do të shfaqen vetëm mesazhe në gjuhët e përzgjedhura + webhook: + events: Përzgjidhni akte për dërgim + url: Ku do të dërgohen aktet labels: account: fields: @@ -219,6 +222,9 @@ sq: name: Hashtag trendable: Lejoje këtë hashtag të shfaqet në prirje usable: Lejoji mesazhet të përdorin këtë hashtag + webhook: + events: Akte të aktivizuar + url: URL pikëmbarimi 'no': Jo recommended: E rekomanduar required: diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index 21e3aab7848..99421306594 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -91,6 +91,9 @@ tr: name: Harflerin, örneğin daha okunabilir yapmak için, sadece büyük/küçük harf durumlarını değiştirebilirsiniz user: chosen_languages: İşaretlendiğinde, yalnızca seçilen dillerdeki tootlar genel zaman çizelgelerinde görüntülenir + webhook: + events: Gönderilecek etkinlikleri seçin + url: Olayların gönderileceği yer labels: account: fields: @@ -219,6 +222,9 @@ tr: name: Etiket trendable: Bu etiketin gündem altında görünmesine izin ver usable: Tootların bu etiketi kullanmasına izin ver + webhook: + events: Etkin olaylar + url: Uç nokta URL’si 'no': Hayır recommended: Önerilen required: diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml index 4d023b77d3d..9b8ecb5734e 100644 --- a/config/locales/simple_form.uk.yml +++ b/config/locales/simple_form.uk.yml @@ -91,6 +91,9 @@ uk: name: Тут ви можете лише змінювати регістр літер, щоб підвищити читабельність user: chosen_languages: У глобальних стрічках будуть відображатися дмухи тільки обраними мовами + webhook: + events: Оберіть події для надсилання + url: Куди надсилатимуться події labels: account: fields: @@ -219,6 +222,9 @@ uk: name: Хештеґ trendable: Дозволити появу цього хештеґа у списку популярних хештеґів usable: Дозволити дмухам використовувати цей хештеґ + webhook: + events: Увімкнені події + url: URL кінцевої точки 'no': Ні recommended: Рекомендовано required: diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index 59c7a634bf2..729be663484 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -91,6 +91,9 @@ vi: name: Bạn có thể thay đổi cách viết hoa các chữ cái để giúp nó dễ đọc hơn user: chosen_languages: Chỉ hiển thị những tút viết bằng các ngôn ngữ được chọn sau + webhook: + events: Chọn sự kiện để gửi + url: Nơi những sự kiện được gửi đến labels: account: fields: @@ -219,6 +222,9 @@ vi: name: Hashtag trendable: Cho phép xuất hiện trong xu hướng usable: Cho phép dùng trong tút + webhook: + events: Những sự kiện đã bật + url: URL endpoint 'no': Tắt recommended: Đề xuất required: diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml index 86103ec96a9..4cc6af416c0 100644 --- a/config/locales/simple_form.zh-TW.yml +++ b/config/locales/simple_form.zh-TW.yml @@ -91,6 +91,9 @@ zh-TW: name: 您只能變更大小寫,例如,以使其更易讀。 user: chosen_languages: 當核取時,只有選取語言的嘟文會在公開時間軸中顯示 + webhook: + events: 請選擇要傳送的事件 + url: 事件會被傳送至何處 labels: account: fields: @@ -219,6 +222,9 @@ zh-TW: name: 主題標籤 trendable: 允許此主題標籤在趨勢下顯示 usable: 允許嘟文使用此主題標籤 + webhook: + events: 已啟用的事件 + url: 端點 URL 'no': 否 recommended: 建議 required: diff --git a/config/locales/sk.yml b/config/locales/sk.yml index d59e81cc8a0..1f64c78c723 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -38,7 +38,7 @@ sk: one: príspevok other: príspevky status_count_before: Ktorí napísali - tagline: Nasleduj kamarátov, a objavuj nových + tagline: Decentralizovaná sociálna sieť terms: Podmienky užitia unavailable_content: Nedostupný obsah unavailable_content_description: @@ -634,7 +634,6 @@ sk: applications: created: Aplikácia bola vytvorená úspešne destroyed: Aplikáciu sa podarilo odstrániť - invalid_url: Zadaná URL adresa je nesprávna regenerate_token: Znovu vygeneruj prístupový token token_regenerated: Prístupový token bol úspešne vygenerovaný znova warning: Na tieto údaje dávaj ohromný pozor. Nikdy ich s nikým nezďieľaj! diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 8f54e9f74f9..ff3492d6056 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -40,7 +40,7 @@ sl: other: objav two: stanja status_count_before: Ki so avtorji - tagline: Sledite prijateljem in odkrijte nove + tagline: Decentralizirano družbeno omrežje terms: Pogoji storitve unavailable_content: Moderirani strežniki unavailable_content_description: @@ -886,6 +886,23 @@ sl: edit_preset: Uredi prednastavitev opozoril empty: Zaenkrat še niste določili nobenih opozorilnih prednastavitev. title: Upravljaj prednastavitev opozoril + webhooks: + add_new: Dodaj končno točko + delete: Izbriši + description_html: "Spletna zanka omogoča, da Mastodon potiska obvestila v resničnem času o izbranih dogodkih vašemu programu, tako da ta lahko samodejno proži odzive." + disable: Onemogoči + disabled: Onemogočeno + edit: Uredi končno točko + empty: Zaenkrat še nimate prilagojenih končnih točk spletnih zank. + enable: Omogoči + enabled: Dejaven + events: Dogodki + new: Nova spletna zanka + rotate_secret: Zasukaj skrivnost + secret: Skrivnost podpisovanja + status: Stanje + title: Spletne zanke + webhook: Spletna zanka admin_mailer: new_appeal: actions: @@ -950,7 +967,6 @@ sl: applications: created: Aplikacija je bila uspešno ustvarjena destroyed: Aplikacija je bila uspešno izbrisana - invalid_url: Navedeni URL je neveljaven regenerate_token: Obnovite dostopni žeton token_regenerated: Dostopni žeton je bil uspešno regeneriran warning: Bodite zelo previdni s temi podatki. Nikoli jih ne delite z nikomer! diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 8974b9c841b..0e4d9871eea 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -38,7 +38,7 @@ sq: one: mesazh other: mesazhe status_count_before: Që kanë krijuar - tagline: Ndiqni shokë dhe zbuloni të rinj + tagline: Rrjet shoqëror i decentralizuar terms: Kushte shërbimi unavailable_content: Shërbyes të moderuar unavailable_content_description: @@ -200,7 +200,7 @@ sq: only_password: Vetëm fjalëkalim password_and_2fa: Fjalëkalim dhe 2FA sensitive: Rezervat - sensitized: iu vu shenjë si rezervat + sensitized: Iu vu shenjë si rezervat shared_inbox_url: URL kutie të përbashkët mesazhesh show: created_reports: Ka bërë raportime @@ -428,6 +428,7 @@ sq: destroyed_msg: Bllokimi i përkatësisë u hoq domain: Përkatësi edit: Përpunoni bllokim përkatësie + existing_domain_block: Keni vendosur tashmë kufizime më të rrepta mbi %{name}. existing_domain_block_html: Keni vendosur tashmë kufizime më të rrepta mbi %{name}, lypset ta zhbllokoni së pari. new: create: Krijoni bllokim @@ -516,6 +517,7 @@ sq: delivery: all: Krejt clear: Spastro gabime dërgimi + failing: Dështim restart: Rinis dërgimin stop: Ndale dërgimin unavailable: Jo i passhëm @@ -839,12 +841,32 @@ sq: one: Përdorur nga një person gjatë javës së kaluar other: Përdorur nga %{count} vetë gjatë javës së kaluar title: Në modë + trending: Në modë warning_presets: add_new: Shtoni të ri delete: Fshije edit_preset: Përpunoni sinjalizim të paracaktuar empty: S’keni përcaktuar ende sinjalizime të gatshme. title: Administroni sinjalizime të paracaktuara + webhooks: + add_new: Shtoni pikëmbarim + delete: Fshije + description_html: Një webhook i bën të mundur Mastodon-it t’i dërgojë aplikacioni tuaj njoftime aty për aty rreth aktesh që keni zgjedhur, që kështu aplikacioni juaj të mund të prodhojë automatikisht reagime. + disable: Çaktivizoje + disabled: Të çaktivizuar + edit: Përpunoni pikëmbarim + empty: S’keni ende ndonjë pikëmbarim webhook të formësuar. + enable: Aktivizoje + enabled: Aktiv + enabled_events: + one: 1 akt i aktivizuar + other: "%{count}s akte të aktivizuar" + events: Akte + new: "Webhook i ri" + rotate_secret: Ciklo të fshehtën + secret: E fshehtë nënshkrimesh + status: Gjendje + title: Webhook-ë admin_mailer: new_appeal: actions: @@ -906,7 +928,6 @@ sq: applications: created: Aplikimi u krijua me sukses destroyed: Aplikimi u fshi me sukses - invalid_url: URL-ja e dhënë është e pavlefshme regenerate_token: Riprodho token hyrjesh token_regenerated: Token-i i hyrjeve u riprodhua me sukses warning: Bëni shumë kujdes me ato të dhëna. Mos ia jepni kurrë njeriu! @@ -1510,9 +1531,93 @@ sq: pinned: Mesazh i fiksuar reblogged: të përforcuara sensitive_content: Lëndë rezervat + strikes: + errors: + too_late: Është shumë vonë për apelim të këtij paralajmërimi tags: does_not_match_previous_name: s’përputhet me emrin e mëparshëm terms: + body_html: | +

Rregulla Privatësie

+

Ç’informacion mbledhim?

+ +
    +
  • Hollësi elementare llogarish: Nëse regjistroheni në këtë shërbyes, mund t’ju kërkohet të jepni një emër përdoruesi, një adresë email dhe një fjalëkalim. Mund të jepni edhe hollësi shtesë profili, bie fjala, një emër për në ekran dhe jetëshkrim, si dhe të ngarkoni një foto profili dhe një figurë kryesh. Emri i përdoruesit, emri në ekran, jetëshkrimi, fotoja e profilit dhe figura e kryes janë përherë të dukshme publikisht.
  • +
  • Postime, ndjekje dhe të tjera hollësi publike: Lista e personave që ndiqni tregohet publikisht, po kjo vlen edhe për ndjekësit tuaj. Kur parashtroni një mesazh, depozitohen gjithashtu data dhe koha, si dhe aplikacioni prej nga parashtruar mesazhin. Mesazhet mund të përmbajnë bashkëngjitje media, bie fjala, foto dhe video. Postimet publike dhe jo të tilla janë të passhme publikisht. Kur te profili juaj përfshini një postim, edhe ky është informacion i passhëm publikisht. Postimet tuaja u dërgohen ndjekësve tuaj, në disa raste kjo do të thotë se dërgohen te shërbyes të ndryshëm dhe në ta depozitohen kopje të tyre. Kur fshini postime, kjo ka gjasa t’u dërgohet ndjekësve tuaj. Veprimi i riblogimit, ose vënia shenjë si i parapëlqyer një postimi tjetër është përherë gjë publike.
  • +
  • Postime të drejtpërdrejta dhe vetëm për ndjekës: Krejt postimet depozitohen dhe përpunohen te shërbyesi. Postimet vetëm për ndjekës u dërgohen ndjekësve tuaj dhe përdoruesve që përmenden në ta, kurse postimet e drejtpërdrejta u dërgohen vetëm përdoruesve të përmendur në to. Në disa raste kjo do të thotë se dërgohen në shërbyes të ndryshëm dhe kopje të tyre depozitohen atje. Përpiqemi në mirëbesim të kufizojmë hyrjen në këto postime të vetëm personave të autorizuar, por shërbyes të tjerë mund të mos bëjnë kështu. Ndaj është e rëndësishme të shqyrtohen shërbyesit të cilëve u përkasin ndjekësit tuaj. Që nga rregullimet mund të aktivizoni/çaktivizoni një mundësi për miratim dhe hedhje poshtë dorazi të ndjekësve të rinj. Ju lutemi, kini parasysh se operatorët e shërbyesve dhe cilido shërbyes marrës mund t’i shohë këto mesazhe, si dhe se marrësit mund të bëjnë foto ekrani, kopjojnë, ose rindajnë me të tjerët ato mesazhe. Mos ndani me të tjerë gjëra me spec përmes Mastodon-it.
  • +
  • IP-ra dhe të tjera tejtëdhëna: Kur bëni hyrjen në llogari, regjistrojmë adresën IP prej nga hyni, si dhe emrin e aplikacionit që përdorni për shfletim. Krejt sesionet me hyrje mund t’i shqyrtoni dhe shfuqizoni që nga rregullimet. Adresa e fundit IP e përdorur depozitohet për deri 12 muaj. Mund të mbajmë gjithashtu regjistra shërbyesi që përfshijnë adresën IP të çdo kërkese ndaj shërbyesit tonë.
  • +
+ +
+ +

Për se e përdorim informacionin tuaj?

+ +

Çfarëdo hollësi që mbledhim prej jush mund të përdoret në rrugët vijuese:

+ +
    +
  • Për të dhënë funksionet bazë të Mastodon-it. Me lëndën e personave të tjerë mund të ndërveproni, si dhe të postoni lëndën tuaj, vetëm kur jeni i futur në llogarinë tuaj. Për shembull, mund të ndiqni persona të tjerë për të parë postimet e tyre në rrjedhën tuaj kohore të personalizuar.
  • +
  • Për të ndihmuar në moderimin e bashkësisë, për shembull, krahasimi i adresës tuaj IP me të tjera të ditura, për të pikasur shmangie dëbimesh, apo cenime të tjera.
  • +
  • Adresa email që jepni mund të përdoret për t’ju dërguar informacion, njoftime mbi persona të tjerë që ndërveprojnë me lëndën tuaj, ose që ju dërgojnë mesazhe, si dhe për t’iu përgjigjur kërkesave dhe/ose çështjeve apo pyetjeve të tjera.
  • +
+ +
+ +

Si e mbrojmë informacionin tuaj?

+ +

Sendërtojmë një larmi masash sigurie për të ruajtur parrezikshmërinë e informacionit tuaj personal, kur jepni, parashtroni ose përdorni informacionin tuaj personal. Mes të tjerash, sesioni i shfletuesit tuaj, si dhe trafiku mes aplikacioneve tuaja dhe API-t sigurohen me SSL dhe fjalëkalimi juaj fshehtëzohet me një algoritëm të fuqishëm njëkahësh. Për të siguruar më tej hyrjen në llogarinë tuaj, mund të aktivizoni mirëfilltësim dufaktorësh.

+ +
+ +

Cili është rregulli ynë për mbajtje të dhënash?

+ +

Do të përpiqemi në mirëbesim:

+ +
    +
  • Të mbajmë regjistra shërbyesi që përmbajnë adresën IP të krejt kërkesave të bëra këtij shërbyesi, ashtu siç mbahen këta regjistra, për jo më shumë se 90 ditë.
  • +
  • Të mbajmë për jo më shumë se 12 muaj adresat IP përshoqëruar përdoruesve të regjistruar.
  • +
+ +

Mund të kërkoni dhe shkarkoni një arkiv të lëndës tuaj, përfshi postimet tuaja, bashkëngjitje media, foto profili dhe figure kryesh.

+ +

Mund të fshini kurdo në mënyrë të pakthyeshme llogarinë tuaj.

+ +
+ +

A përdorim cookies?

+ +

Po. Cookie-t janë kartela të vockla që një sajt ose furnizuesi i shërbimit përkatës shpërngul në diskun e kompjuterit tuaj përmes shfletuesit tuaj (nëse e lejoni). Këto cookies i bëjnë të mundur sajtit të njohë shfletuesin tuaj dhe, nëse keni regjistruar një llogari, t’ia përshoqërojë atë llogarisë që keni regjistruar.

+ +

Cookie-t i përdorim për të kuptuar dhe ruajtur parapëlqimet tuaja për vizita të ardhshme.

+ +
+ +

A u japim palëve të jashtme ndonjë informacion?

+ +

Nuk u shesim, shkëmbejmë, apo shpërngulim informacion tuajin personalisht të identifikueshëm palëve të jashtme. Këtu nuk përfshin palë të treta të besuara që na ndihmojnë në funksionimin e sajtit tonë, në mbajtjen në këmbë të biznesit tonë, ose për t’ju shërbyer juve, për sa kohë që këto palë pajtohen me mbajtjen rezervat të këtij informacioni. Mundet edhe të japim informacion tuajin, kur besojmë se dhënia është e duhur për të qenë në pajtim me ligjet, për të zbatuar rregullat tonë mbi sajtin, ose për të mbrojtur të drejtat, pronën apo sigurinë tonë apo të të tjerëve.

+ +

Lënda juaj publike mund të shkarkohet nga shërbyes të tjerë në rrjet. Postim tuaja publike, si dhe ato vetëm për ndjekësit, u dërgohen shërbyesve ku gjenden ndjekësit tuaj, ndërsa mesazhet e drejtpërdrejtë u dërgohen shërbyesve të marrësve, në rastin kur këta ndjekës apo marrës gjenden në një tjetër shërbyes nga ky.

+ +

Kur autorizoni një aplikacion të përdorë llogarinë tuaj, në varësi të fushëveprimit të lejeve që miratoni, ky mund të hyjë në hollësitë e profilit tuaj publik, listën e atyre që ndiqni, ndjekësit tuaj, listat tuaja, krejt postimet tuaja dhe të parapëlqyerit tuaj. Aplikaconet s’mund të njohin kurrë adresën tuaj email dhe fjalëkalimin tuaj.

+ +
+ +

Përdorim sajti nga fëmijë

+ +

Nëse ky shërbyes gjendet në BE ose ZEE: Sajti, produktet dhe shërbimet tona u adresohen të tëra personave që janë të paktën 16 vjeç. Nëse jeni nën moshën 16 vjeç, sipas domosdoshmërive të GDPR-së (Rregullorja e Përgjithshme e Mbrojtjes së të Dhënave) mos e përdorni këtë sajt.

+ +

Nëse ky shërbyes gjendet në ShBA: Sajti, produktet dhe shërbimet tona u adresohen të tëra personave që janë të paktën 13 vjeç. Nëse jeni nën moshën 13 vjeç, sipas domosdoshmërive të COPPA-s (Ligji i Mbrojtjes së Privatësisë Internetore të Fëmijëve) mos e përdorni këtë sajt.

+ +

kërkesat ligjore mund të jenë të tjera, nëse ky shërbyes gjendet nën një juridiksion tjetër.

+ +
+ +

Ndryshime te Rregullat tona të Privatësisë

+ +

Nëse vendosim të ndryshojmë rregullat tona të privatësisë, ato ndryshime do t’i postojmë te kjo faqe.

+ +

Ky dokument licencohet sipas CC-BY-SA. Qe përditësuar së fundi më 26 maj 2022.

+ +

Përshtatur fillimisht prej rregulave të privatësisë së Discourse-it.

title: Kushte Shërbimi dhe Rregulla Privatësie te %{instance} themes: contrast: Mastodon (Me shumë kontrast) diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index 321fc6398b0..cfea20c5557 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -220,7 +220,6 @@ sr-Latn: applications: created: Aplikacija uspešno napravljena destroyed: Aplikacija uspešno obrisana - invalid_url: Data adresa nije ispravna regenerate_token: Rekreiraj pristupni token token_regenerated: Pristupni token uspešno rekreiran warning: Oprezno sa ovim podacima. Nikad je ne delite ni sa kim! diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 94d8c43cf2c..445f8f32656 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -368,7 +368,6 @@ sr: applications: created: Апликација успешно направљена destroyed: Апликација успешно обрисана - invalid_url: Дата адреса није исправна regenerate_token: Рекреирај приступни токен token_regenerated: Приступни токен успешно рекреиран warning: Опрезно са овим подацима. Никад је не делите ни са ким! diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 715358d5ead..a84ae6cfec0 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -36,7 +36,6 @@ sv: one: status other: statusar status_count_before: Som skapat - tagline: Följ vänner och upptäck nya terms: Användarvillkor unavailable_content: Otillgängligt innehåll unavailable_content_description: @@ -668,7 +667,6 @@ sv: applications: created: Ansökan är framgångsrikt skapad destroyed: Ansökan är framgångsrikt borttagen - invalid_url: Den angivna webbadressen är ogiltig regenerate_token: Regenerera access token token_regenerated: Access token lyckades regenereras warning: Var mycket försiktig med denna data. Dela aldrig den med någon! diff --git a/config/locales/ta.yml b/config/locales/ta.yml index e3b61a487b6..3016250ccdd 100644 --- a/config/locales/ta.yml +++ b/config/locales/ta.yml @@ -28,7 +28,6 @@ ta: one: பதிவு other: பதிவுகள் status_count_before: எழுதிய - tagline: நண்பர்களைப் பின்தொடரவும் மற்றும் புதியவர்களைக் கண்டுபிடிக்கவும் terms: சேவை விதிமுறைகள் unavailable_content: விசயங்கள் இல்லை unavailable_content_description: diff --git a/config/locales/th.yml b/config/locales/th.yml index 9fd23f5b356..c5f70753dc6 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -34,7 +34,6 @@ th: status_count_after: other: โพสต์ status_count_before: ผู้เผยแพร่ - tagline: ติดตามเพื่อน ๆ และค้นพบเพื่อนใหม่ ๆ terms: เงื่อนไขการให้บริการ unavailable_content: เซิร์ฟเวอร์ที่มีการควบคุม unavailable_content_description: @@ -842,7 +841,6 @@ th: applications: created: สร้างแอปพลิเคชันสำเร็จ destroyed: ลบแอปพลิเคชันสำเร็จ - invalid_url: URL ที่ระบุไม่ถูกต้อง regenerate_token: สร้างโทเคนการเข้าถึงใหม่ token_regenerated: สร้างโทเคนการเข้าถึงใหม่สำเร็จ warning: ระวังเป็นอย่างสูงกับข้อมูลนี้ อย่าแบ่งปันข้อมูลกับใครก็ตาม! diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 23fe6508b95..9159acba32c 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -38,7 +38,7 @@ tr: one: durum yazıldı other: durum yazıldı status_count_before: Şu ana kadar - tagline: Arkadaşlarını takip et ve yenilerini keşfet + tagline: Merkezi olmayan sosyal ağ terms: Kullanım şartları unavailable_content: Denetlenen sunucular unavailable_content_description: @@ -428,6 +428,7 @@ tr: destroyed_msg: Domain bloğu silindi domain: Alan adı edit: Etki alanı bloğunu düzenle + existing_domain_block: Zaten %{name} için daha katı sınırlamalar dayatmıştınız. existing_domain_block_html: '%{name}''e zaten daha katı sınırlar uyguladınız, önce engellemesini kaldırmanız gerekiyor.' new: create: Yeni blok oluştur @@ -851,6 +852,23 @@ tr: edit_preset: Uyarı ön-ayarını düzenle empty: Henüz önceden ayarlanmış bir uyarı tanımlanmadı. title: Uyarı ön-ayarlarını yönet + webhooks: + add_new: Uç nokta ekle + delete: Sil + description_html: Bir web kancası Mastodon'un, uygulamanızda seçili olaylar hakkında gerçek zamanlı bildirimler göndermesini sağlar, böylece uygulamanız otomatik olarak tepkileri tetikleyebilir. + disable: Devre dışı bırak + disabled: Devre dışı + edit: Uç nokta düzenle + empty: Henüz yapılandırılmış bir web kancanız yok. + enable: Etkinleştir + enabled: Etkin + events: Olaylar + new: Yeni web kancası + rotate_secret: Gizi döndür + secret: Gizi imzalama + status: Durum + title: Web kancaları + webhook: Web kancası admin_mailer: new_appeal: actions: @@ -915,7 +933,6 @@ tr: applications: created: Uygulama başarıyla oluşturuldu destroyed: Uygulama başarıyla silindi - invalid_url: Verilen URL geçerli değil regenerate_token: Erişim belirtecini yeniden oluştur token_regenerated: Erişim belirteci başarıyla oluşturuldu warning: Bu verilere çok dikkat edin. Asla kimseyle paylaşmayın! diff --git a/config/locales/uk.yml b/config/locales/uk.yml index aa210c980ea..53a4b356734 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -38,7 +38,7 @@ uk: one: статус other: статуси status_count_before: Опубліковано - tagline: Слідкуйте за друзями та знаходьте нових + tagline: Децентралізована соціальна мережа terms: Правила використання unavailable_content: Недоступний вміст unavailable_content_description: @@ -864,6 +864,28 @@ uk: edit_preset: Редагувати шаблон попередження empty: Ви ще не визначили жодних попереджень. title: Управління шаблонами попереджень + webhooks: + add_new: Додати кінцеву точку + delete: Видалити + description_html: "Вебхук дає змогу Mastodon надсилати повідомлення про обрані події до вашого застосунку в реальному часі, щоб застосунок міг автоматично реагувати на реакції." + disable: Вимкнути + disabled: Вимкнено + edit: Редагувати кінцеву точку + empty: Ще не налаштовано жодних кінцевих точок вебхука. + enable: Увімкнути + enabled: Активні + enabled_events: + few: "%{count} увімкнені події" + many: "%{count} увімкнених подій" + one: 1 увімкнена подія + other: "%{count} увімкнені події" + events: Події + new: Новий вебхук + rotate_secret: Обернути секрет + secret: Секрет підписування + status: Стан + title: Вебхуки + webhook: Вебхук admin_mailer: new_appeal: actions: @@ -923,7 +945,6 @@ uk: applications: created: Застосунок успішно створений destroyed: Застосунок успішно видалений - invalid_url: Введена URL неправильна regenerate_token: Перегенерувати токен доступу token_regenerated: Токен доступу успішне перегенеровано warning: Будьте дуже обережні з цими даними. Ніколи не діліться ними ні з ким! diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 7f0022191d4..72d06ab5569 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -35,7 +35,7 @@ vi: status_count_after: other: tút status_count_before: Nơi lưu giữ - tagline: Theo dõi bạn bè và khám phá thế giới + tagline: Mạng xã hội liên hợp terms: Điều khoản dịch vụ unavailable_content: Giới hạn chung unavailable_content_description: @@ -417,6 +417,7 @@ vi: destroyed_msg: Đã thôi chặn máy chủ domain: Máy chủ edit: Chỉnh sửa máy chủ bị chặn + existing_domain_block: Bạn đã hạn chế %{name} trước đó. existing_domain_block_html: Bạn đã áp đặt các giới hạn chặt chẽ hơn cho %{name}, trước tiên bạn cần bỏ chặn nó. new: create: Tạo chặn @@ -832,6 +833,25 @@ vi: edit_preset: Sửa mẫu có sẵn empty: Bạn chưa thêm mẫu nhắc nhở nào cả. title: Quản lý mẫu nhắc nhở + webhooks: + add_new: Thêm endpoint + delete: Xóa bỏ + description_html: "Webhook cho phép Mastodon gửi nhận thông báo đẩy thời gian thật về những sự kiện cho ứng dụng thứ ba của bạn, cho ứng dụng của bạn có thể tự động kích hoạt reaction." + disable: Tắt + disabled: Đã tắt + edit: Sửa endpoint + empty: Bạn chưa thiết lập webhook endpoint nào. + enable: Bật + enabled: Hoạt động + enabled_events: + other: "%{count} sự kiện đã bật" + events: Sự kiện + new: Webhook mới + rotate_secret: Xoay bí mật + secret: Token đăng nhập + status: Trạng thái + title: Webhook + webhook: Webhook admin_mailer: new_appeal: actions: @@ -896,7 +916,6 @@ vi: applications: created: Đơn đăng ký được tạo thành công destroyed: Đã xóa đơn đăng ký - invalid_url: Cung cấp URL không hợp lệ regenerate_token: Tạo lại mã truy cập token_regenerated: Mã truy cập được tạo lại thành công warning: Hãy rất cẩn thận với dữ liệu này. Không bao giờ chia sẻ nó với bất cứ ai! diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 783733a0a69..475d03a2a3f 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -19,7 +19,7 @@ zh-CN: continue_to_web: 继续前往网页应用 discover_users: 发现用户 documentation: 文档 - federation_hint_html: 在 %{instance} 上拥有账号后,你可以关注任何兼容Mastodon的服务器上的人。 + federation_hint_html: 在 %{instance} 上拥有账号后,你可以关注任何兼容 Mastodon 服务器上的人。 get_apps: 尝试移动应用 hosted_on: 运行在 %{domain} 上的 Mastodon 站点 instance_actor_flash: '这个账号是个虚拟账号,不代表任何用户,只用来代表服务器本身。它用于和其它服务器互通,所以不应该被封禁,除非你想封禁整个实例。但是想封禁整个实例的时候,你应该用域名封禁。 @@ -37,7 +37,7 @@ zh-CN: status_count_after: other: 条嘟文 status_count_before: 他们共嘟出了 - tagline: 关注并发现新朋友 + tagline: 分布式社交网络 terms: 使用条款 unavailable_content: 被限制的服务器 unavailable_content_description: @@ -419,6 +419,7 @@ zh-CN: destroyed_msg: 域名屏蔽已撤销 domain: 域名 edit: 编辑域名屏蔽 + existing_domain_block: 您已经对 %{name} 设置了更严格的限制。 existing_domain_block_html: 你已经对 %{name} 施加了更严格的限制,你需要先 解封。 new: create: 添加屏蔽 @@ -434,7 +435,7 @@ zh-CN: private_comment: 私密评论 private_comment_hint: 给这一域名限制添加备注,供监察员内部使用 public_comment: 公开评论 - public_comment_hint: 给这一域名限制添加公开的评论,如果你推广你的域名限制列表的话,这些评论就会显示出来。 + public_comment_hint: 给这一域名限制添加公开的评论,在公告域名限制列表开启时这些评论将会公开可见。 reject_media: 拒绝接收媒体文件 reject_media_hint: 删除本站已缓存的媒体文件,并且不再接收来自该域名的任何媒体文件。此选项不影响封禁 reject_reports: 拒绝接收举报 @@ -834,6 +835,10 @@ zh-CN: edit_preset: 编辑预置警告 empty: 你尚未定义任何警告预设。 title: 管理预设警告 + webhooks: + delete: 删除 + disable: 禁用 + enable: 启用 admin_mailer: new_appeal: actions: @@ -898,7 +903,6 @@ zh-CN: applications: created: 应用创建成功 destroyed: 应用删除成功 - invalid_url: URL 无效 regenerate_token: 重置访问令牌 token_regenerated: 访问令牌重置成功 warning: 一定小心,千万不要把它分享给任何人! diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index bbf5b4dad1a..5b6e0b83a26 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -34,7 +34,6 @@ zh-HK: status_count_after: other: 篇文章 status_count_before: 共發佈了 - tagline: 關注朋友並探索新朋友 terms: 使用條款 unavailable_content: 受限制的伺服器 unavailable_content_description: @@ -679,7 +678,6 @@ zh-HK: applications: created: 已建立應用程式 destroyed: 已刪除應用程式 - invalid_url: 所提供的網址不正確 regenerate_token: 重設 token token_regenerated: 已重設 token warning: 警告,不要把它分享給任何人! diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 032a5c95172..7d2bb80cbea 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -35,7 +35,7 @@ zh-TW: status_count_after: other: 條嘟文 status_count_before: 他們共嘟出了 - tagline: 關注朋友並探索新朋友 + tagline: 去中心化社群網路 terms: 使用條款 unavailable_content: 無法取得的內容 unavailable_content_description: @@ -835,6 +835,25 @@ zh-TW: edit_preset: 編輯預設警告 empty: 您未曾定義任何預設警告 title: 管理預設警告 + webhooks: + add_new: 新增端點 + delete: 刪除 + description_html: "Webhook 讓 Mastodon 可以將關於選定的事件的即時通知推送到您自己的應用程式,如此您的應用程式就可以自動觸發反應。" + disable: 停用 + disabled: 已停用 + edit: 編輯端點 + empty: 您沒有任何設定好的 webhook 端點。 + enable: 啟用 + enabled: 生效 + enabled_events: + other: "%{count} 個已啟用的端點" + events: 事件 + new: 新增 Webhook + rotate_secret: 更換密鑰 + secret: 簽署密鑰 + status: 狀態 + title: Webhooks + webhook: Webhook admin_mailer: new_appeal: actions: @@ -899,7 +918,6 @@ zh-TW: applications: created: 已建立應用 destroyed: 已刪除應用 - invalid_url: 網址不正確 regenerate_token: 重設 token token_regenerated: 已重設 token warning: 警告,不要把它分享給任何人! From aab1a1c409fadfc0ae83c2ede600796659b01c97 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Jun 2022 20:33:21 +0900 Subject: [PATCH 018/646] Bump wicg-inert from 3.1.1 to 3.1.2 (#18655) Bumps [wicg-inert](https://github.com/WICG/inert) from 3.1.1 to 3.1.2. - [Release notes](https://github.com/WICG/inert/releases) - [Commits](https://github.com/WICG/inert/compare/v3.1.1...v3.1.2) --- updated-dependencies: - dependency-name: wicg-inert dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 625d920f97e..5382c0c9fec 100644 --- a/package.json +++ b/package.json @@ -133,7 +133,7 @@ "webpack-bundle-analyzer": "^4.5.0", "webpack-cli": "^3.3.12", "webpack-merge": "^5.8.0", - "wicg-inert": "^3.1.1", + "wicg-inert": "^3.1.2", "ws": "^8.7.0" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index 85547ee8fe8..2e8e1df35d3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11681,10 +11681,10 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -wicg-inert@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/wicg-inert/-/wicg-inert-3.1.1.tgz#b033fd4fbfb9e3fd709e5d84becbdf2e06e5c229" - integrity sha512-PhBaNh8ur9Xm4Ggy4umelwNIP6pPP1bv3EaWaKqfb/QNme2rdLjm7wIInvV4WhxVHhzA4Spgw9qNSqWtB/ca2A== +wicg-inert@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/wicg-inert/-/wicg-inert-3.1.2.tgz#df10cf756b773a96fce107c3ddcd43be5d1e3944" + integrity sha512-Ba9tGNYxXwaqKEi9sJJvPMKuo063umUPsHN0JJsjrs2j8KDSzkWLMZGZ+MH1Jf1Fq4OWZ5HsESJID6nRza2ang== wide-align@^1.1.5: version "1.1.5" From 73c903e63d99ba5dbc6a09db22d15da1f673773a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Jun 2022 20:35:44 +0900 Subject: [PATCH 019/646] Bump sidekiq-scheduler from 4.0.0 to 4.0.1 (#18654) Bumps [sidekiq-scheduler](https://github.com/moove-it/sidekiq-scheduler) from 4.0.0 to 4.0.1. - [Release notes](https://github.com/moove-it/sidekiq-scheduler/releases) - [Changelog](https://github.com/moove-it/sidekiq-scheduler/blob/master/CHANGELOG.md) - [Commits](https://github.com/moove-it/sidekiq-scheduler/compare/v4.0.0...v4.0.1) --- updated-dependencies: - dependency-name: sidekiq-scheduler dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 9790df2c9a9..64d2a6d7f87 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -606,7 +606,7 @@ GEM redis (>= 4.2.0) sidekiq-bulk (0.2.0) sidekiq - sidekiq-scheduler (4.0.0) + sidekiq-scheduler (4.0.1) redis (>= 4.2.0) rufus-scheduler (~> 3.2) sidekiq (>= 4) From 6e226a873688287429fbbf865a5ed1df2fef438a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Jun 2022 20:42:17 +0900 Subject: [PATCH 020/646] Bump @babel/plugin-transform-runtime from 7.18.2 to 7.18.5 (#18647) Bumps [@babel/plugin-transform-runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-runtime) from 7.18.2 to 7.18.5. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.5/packages/babel-plugin-transform-runtime) --- updated-dependencies: - dependency-name: "@babel/plugin-transform-runtime" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5382c0c9fec..3fe34a6ca51 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@babel/core": "^7.18.5", "@babel/plugin-proposal-decorators": "^7.18.2", "@babel/plugin-transform-react-inline-elements": "^7.16.7", - "@babel/plugin-transform-runtime": "^7.18.2", + "@babel/plugin-transform-runtime": "^7.18.5", "@babel/preset-env": "^7.18.2", "@babel/preset-react": "^7.17.12", "@babel/runtime": "^7.18.3", diff --git a/yarn.lock b/yarn.lock index 2e8e1df35d3..89deee99b3f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -897,10 +897,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-transform-runtime@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.2.tgz#04637de1e45ae8847ff14b9beead09c33d34374d" - integrity sha512-mr1ufuRMfS52ttq+1G1PD8OJNqgcTFjq3hwn8SZ5n1x1pBhi0E36rYMdTK0TsKtApJ4lDEdfXJwtGobQMHSMPg== +"@babel/plugin-transform-runtime@^7.18.5": + version "7.18.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.5.tgz#f4d3188ba6a8815793993c71c2c225d0ee1d7743" + integrity sha512-Q17hHxXr2fplrE+5BSC1j1Fo5cOA8YeP8XW3/1paI8MzF/faZGh0MaH1KC4jLAvqLPamQWHB5/B7KqSLY1kuHA== dependencies: "@babel/helper-module-imports" "^7.16.7" "@babel/helper-plugin-utils" "^7.17.12" From 7aa2a059f8a7e21b66cb2d5bb3c856eb6be38de2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Jun 2022 20:43:24 +0900 Subject: [PATCH 021/646] Bump net-ldap from 0.17.0 to 0.17.1 (#18648) Bumps [net-ldap](https://github.com/ruby-ldap/ruby-net-ldap) from 0.17.0 to 0.17.1. - [Release notes](https://github.com/ruby-ldap/ruby-net-ldap/releases) - [Changelog](https://github.com/ruby-ldap/ruby-net-ldap/blob/master/History.rdoc) - [Commits](https://github.com/ruby-ldap/ruby-net-ldap/compare/v0.17.0...v0.17.1) --- updated-dependencies: - dependency-name: net-ldap dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 64d2a6d7f87..a2c2360ca6e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -399,7 +399,7 @@ GEM msgpack (1.5.2) multi_json (1.15.0) multipart-post (2.1.1) - net-ldap (0.17.0) + net-ldap (0.17.1) net-scp (3.0.0) net-ssh (>= 2.6.5, < 7.0.0) net-ssh (6.1.0) From 757fe82fd5a5be6fed35aab3cbd41fa9497ee79c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Jun 2022 20:46:48 +0900 Subject: [PATCH 022/646] Bump reselect from 4.1.5 to 4.1.6 (#18646) Bumps [reselect](https://github.com/reduxjs/reselect) from 4.1.5 to 4.1.6. - [Release notes](https://github.com/reduxjs/reselect/releases) - [Changelog](https://github.com/reduxjs/reselect/blob/master/CHANGELOG.md) - [Commits](https://github.com/reduxjs/reselect/compare/v4.1.5...v4.1.6) --- updated-dependencies: - dependency-name: reselect dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 3fe34a6ca51..0322c5e184c 100644 --- a/package.json +++ b/package.json @@ -115,7 +115,7 @@ "regenerator-runtime": "^0.13.9", "rellax": "^1.12.1", "requestidlecallback": "^0.3.0", - "reselect": "^4.1.5", + "reselect": "^4.1.6", "rimraf": "^3.0.2", "sass": "^1.52.3", "sass-loader": "^10.2.0", diff --git a/yarn.lock b/yarn.lock index 89deee99b3f..14dc6910471 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9621,10 +9621,10 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= -reselect@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.5.tgz#852c361247198da6756d07d9296c2b51eddb79f6" - integrity sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ== +reselect@^4.1.6: + version "4.1.6" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.6.tgz#19ca2d3d0b35373a74dc1c98692cdaffb6602656" + integrity sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ== resolve-cwd@^2.0.0: version "2.0.0" From 7a75bce1b43df290baf6842e2bb3d3eb0acd76d5 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 16 Jun 2022 15:37:59 +0200 Subject: [PATCH 023/646] Fix checkmark on interaction buttons with larger fonts (#1799) Fixes #1796 --- app/javascript/flavours/glitch/components/icon_button.js | 4 ++-- app/javascript/flavours/glitch/styles/accessibility.scss | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/javascript/flavours/glitch/components/icon_button.js b/app/javascript/flavours/glitch/components/icon_button.js index 3999409cdf9..9a05badd035 100644 --- a/app/javascript/flavours/glitch/components/icon_button.js +++ b/app/javascript/flavours/glitch/components/icon_button.js @@ -86,13 +86,13 @@ export default class IconButton extends React.PureComponent { render () { let style = { fontSize: `${this.props.size}px`, - height: `${this.props.size * 1.28571429}px`, + height: '1.28571429em', lineHeight: `${this.props.size}px`, ...this.props.style, ...(this.props.active ? this.props.activeStyle : {}), }; if (!this.props.label) { - style.width = `${this.props.size * 1.28571429}px`; + style.width = '1.28571429em'; } else { style.textAlign = 'left'; } diff --git a/app/javascript/flavours/glitch/styles/accessibility.scss b/app/javascript/flavours/glitch/styles/accessibility.scss index 96e20f8393e..9b36bfd8ddf 100644 --- a/app/javascript/flavours/glitch/styles/accessibility.scss +++ b/app/javascript/flavours/glitch/styles/accessibility.scss @@ -22,8 +22,8 @@ $emojis-requiring-inversion: 'back' 'copyright' 'curly_loop' 'currency_exchange' content: "\F00C"; font-size: 50%; font-family: FontAwesome; - right: -5px; - top: -4px; + right: -0.55em; + top: -0.44em; } } From b37825f2e22a7b68e91b1c7cafd486ee35c683c0 Mon Sep 17 00:00:00 2001 From: Yamagishi Kazutoshi Date: Fri, 17 Jun 2022 05:07:10 +0900 Subject: [PATCH 024/646] Add GitHub Actions to package-ecosystem (#18603) --- .github/dependabot.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index bb1fccf7ca4..c785d4a3579 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -20,3 +20,11 @@ updates: open-pull-requests-limit: 99 allow: - dependency-type: direct + + - package-ecosystem: github-actions + directory: '/' + schedule: + interval: weekly + open-pull-requests-limit: 99 + allow: + - dependency-type: direct From e789b8d4c13bae4cbc7e156b073b4e46accd8b34 Mon Sep 17 00:00:00 2001 From: Yamagishi Kazutoshi Date: Fri, 17 Jun 2022 05:09:43 +0900 Subject: [PATCH 025/646] Set-up Problem Matchers (#18598) --- .github/stylelint-matcher.json | 21 +++++++++++++++++++++ .github/workflows/linter.yml | 12 ++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 .github/stylelint-matcher.json diff --git a/.github/stylelint-matcher.json b/.github/stylelint-matcher.json new file mode 100644 index 00000000000..cdfd4086bd4 --- /dev/null +++ b/.github/stylelint-matcher.json @@ -0,0 +1,21 @@ +{ + "problemMatcher": [ + { + "owner": "stylelint", + "pattern": [ + { + "regexp": "^([^\\s].*)$", + "file": 1 + }, + { + "regexp": "^\\s+((\\d+):(\\d+))?\\s+(✖|×)\\s+(.*)\\s{2,}(.*)$", + "line": 2, + "column": 3, + "message": 5, + "code": 6, + "loop": true + } + ] + } + ] +} diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index fd535ea9a53..f77a9720e08 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -50,8 +50,19 @@ jobs: # Full git history is needed to get a proper list of changed files within `super-linter` fetch-depth: 0 + - name: Set-up Node.js + uses: actions/setup-node@v3 + with: + node-version: 16.x + cache: yarn - name: Intall dependencies run: yarn install --frozen-lockfile + - name: Set-up RuboCop Problem Mathcher + uses: r7kamura/rubocop-problem-matchers-action@v1 + - name: Set-up Stylelint Problem Matcher + uses: xt0rted/stylelint-problem-matcher@v1 + # https://github.com/xt0rted/stylelint-problem-matcher/issues/360 + - run: echo "::add-matcher::.github/stylelint-matcher.json" ################################ # Run Linter against code base # @@ -61,6 +72,7 @@ jobs: env: CSS_FILE_NAME: stylelint.config.js DEFAULT_BRANCH: main + NO_COLOR: 1 # https://github.com/xt0rted/stylelint-problem-matcher/issues/360 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} JAVASCRIPT_ES_CONFIG_FILE: .eslintrc.js LINTER_RULES_PATH: . From 4e26fb0ea945212609eb03245b2d615f2782b435 Mon Sep 17 00:00:00 2001 From: Yamagishi Kazutoshi Date: Fri, 17 Jun 2022 05:09:58 +0900 Subject: [PATCH 026/646] Drop support for Ruby v2.5 and Node.js v12 (#18323) * Drop support for Ruby v2.5 and Node.js v12 * Update package.json --- README.md | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d47bb7ab486..5019bd09750 100644 --- a/README.md +++ b/README.md @@ -72,8 +72,8 @@ Mastodon acts as an OAuth2 provider, so 3rd party apps can use the REST and Stre - **PostgreSQL** 9.5+ - **Redis** 4+ -- **Ruby** 2.5+ -- **Node.js** 12+ +- **Ruby** 2.6+ +- **Node.js** 14+ The repository includes deployment configurations for **Docker and docker-compose** as well as specific platforms like **Heroku**, **Scalingo**, and **Nanobox**. The [**standalone** installation guide](https://docs.joinmastodon.org/admin/install/) is available in the documentation. diff --git a/package.json b/package.json index 0322c5e184c..80ad1add3b8 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@mastodon/mastodon", "license": "AGPL-3.0-or-later", "engines": { - "node": ">=12" + "node": ">=14" }, "scripts": { "postversion": "git push --tags", From 9cec3f3597350045702dc2ac34099de78672e5e4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jun 2022 14:38:07 +0900 Subject: [PATCH 027/646] Bump actions/checkout from 2 to 3 (#18679) Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-image.yml | 2 +- .github/workflows/check-i18n.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index 75c7b54a65d..d215650ea3f 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -14,7 +14,7 @@ jobs: build-image: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: docker/setup-qemu-action@v1 - uses: docker/setup-buildx-action@v1 - uses: docker/login-action@v1 diff --git a/.github/workflows/check-i18n.yml b/.github/workflows/check-i18n.yml index be38a096de6..1c60515f8c9 100644 --- a/.github/workflows/check-i18n.yml +++ b/.github/workflows/check-i18n.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Install system dependencies run: | sudo apt-get update From 943dfb854c1752b452d49dcadc49eebf2bbd86b7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jun 2022 14:39:21 +0900 Subject: [PATCH 028/646] Bump docker/metadata-action from 3 to 4 (#18674) Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 3 to 4. - [Release notes](https://github.com/docker/metadata-action/releases) - [Upgrade guide](https://github.com/docker/metadata-action/blob/master/UPGRADE.md) - [Commits](https://github.com/docker/metadata-action/compare/v3...v4) --- updated-dependencies: - dependency-name: docker/metadata-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index d215650ea3f..a51debf6bf2 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -22,7 +22,7 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} if: github.event_name != 'pull_request' - - uses: docker/metadata-action@v3 + - uses: docker/metadata-action@v4 id: meta with: images: tootsuite/mastodon From 5d3995e51e5095615a637696029f9d0e54c790ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jun 2022 14:40:46 +0900 Subject: [PATCH 029/646] Bump docker/build-push-action from 2 to 3 (#18675) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 2 to 3. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v2...v3) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index a51debf6bf2..ac2f777b50d 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -32,7 +32,7 @@ jobs: type=edge,branch=main type=match,pattern=v(.*),group=0 type=ref,event=pr - - uses: docker/build-push-action@v2 + - uses: docker/build-push-action@v3 with: context: . platforms: linux/amd64,linux/arm64 From d5a890c7660902b8e8f5ff6bd0bd185b0f56754e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jun 2022 14:42:02 +0900 Subject: [PATCH 030/646] Bump i18n-tasks from 1.0.10 to 1.0.11 (#18683) Bumps [i18n-tasks](https://github.com/glebm/i18n-tasks) from 1.0.10 to 1.0.11. - [Release notes](https://github.com/glebm/i18n-tasks/releases) - [Changelog](https://github.com/glebm/i18n-tasks/blob/main/CHANGES.md) - [Commits](https://github.com/glebm/i18n-tasks/compare/v1.0.10...v1.0.11) --- updated-dependencies: - dependency-name: i18n-tasks dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index a2c2360ca6e..1966e6d2d56 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -306,7 +306,7 @@ GEM rainbow (>= 2.0.0) i18n (1.10.0) concurrent-ruby (~> 1.0) - i18n-tasks (1.0.10) + i18n-tasks (1.0.11) activesupport (>= 4.0.2) ast (>= 2.1.0) better_html (~> 1.0) @@ -395,7 +395,7 @@ GEM mime-types-data (3.2022.0105) mini_mime (1.1.2) mini_portile2 (2.8.0) - minitest (5.15.0) + minitest (5.16.0) msgpack (1.5.2) multi_json (1.15.0) multipart-post (2.1.1) @@ -511,7 +511,7 @@ GEM rails-dom-testing (2.0.3) activesupport (>= 4.2.0) nokogiri (>= 1.6) - rails-html-sanitizer (1.4.2) + rails-html-sanitizer (1.4.3) loofah (~> 2.3) rails-i18n (6.0.0) i18n (>= 0.7, < 2) @@ -719,7 +719,7 @@ GEM xorcist (1.1.2) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.5.4) + zeitwerk (2.6.0) PLATFORMS ruby From 2c5fbf68b737aff34d2d5808d0ccfb6046558806 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jun 2022 14:42:43 +0900 Subject: [PATCH 031/646] Bump bullet from 7.0.1 to 7.0.2 (#18617) Bumps [bullet](https://github.com/flyerhzm/bullet) from 7.0.1 to 7.0.2. - [Release notes](https://github.com/flyerhzm/bullet/releases) - [Changelog](https://github.com/flyerhzm/bullet/blob/master/CHANGELOG.md) - [Commits](https://github.com/flyerhzm/bullet/compare/7.0.1...7.0.2) --- updated-dependencies: - dependency-name: bullet dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 1966e6d2d56..8db79d0c334 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -122,7 +122,7 @@ GEM concurrent-ruby (~> 1.0, >= 1.0.5) redis (>= 1.0, <= 5.0) builder (3.2.4) - bullet (7.0.1) + bullet (7.0.2) activesupport (>= 3.0.0) uniform_notifier (~> 1.11) bundler-audit (0.9.1) @@ -678,7 +678,7 @@ GEM unf_ext unf_ext (0.0.8) unicode-display_width (2.1.0) - uniform_notifier (1.14.2) + uniform_notifier (1.16.0) validate_email (0.1.6) activemodel (>= 3.0) mail (>= 2.2.5) From 9ba42984e6925197a5bb91f30d616f04d457f94e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jun 2022 14:43:21 +0900 Subject: [PATCH 032/646] Bump rubocop-rails from 2.14.2 to 2.15.0 (#18681) Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.14.2 to 2.15.0. - [Release notes](https://github.com/rubocop/rubocop-rails/releases) - [Changelog](https://github.com/rubocop/rubocop-rails/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop-rails/compare/v2.14.2...v2.15.0) --- updated-dependencies: - dependency-name: rubocop-rails dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index e0005faba70..bf04d968e7c 100644 --- a/Gemfile +++ b/Gemfile @@ -133,7 +133,7 @@ group :development do gem 'letter_opener_web', '~> 2.0' gem 'memory_profiler' gem 'rubocop', '~> 1.30', require: false - gem 'rubocop-rails', '~> 2.14', require: false + gem 'rubocop-rails', '~> 2.15', require: false gem 'brakeman', '~> 5.2', require: false gem 'bundler-audit', '~> 0.9', require: false diff --git a/Gemfile.lock b/Gemfile.lock index 8db79d0c334..43beba76921 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -579,7 +579,7 @@ GEM unicode-display_width (>= 1.4.0, < 3.0) rubocop-ast (1.18.0) parser (>= 3.1.1.0) - rubocop-rails (2.14.2) + rubocop-rails (2.15.0) activesupport (>= 4.2.0) rack (>= 1.1) rubocop (>= 1.7.0, < 2.0) @@ -821,7 +821,7 @@ DEPENDENCIES rspec-sidekiq (~> 3.1) rspec_junit_formatter (~> 0.5) rubocop (~> 1.30) - rubocop-rails (~> 2.14) + rubocop-rails (~> 2.15) ruby-progressbar (~> 1.11) sanitize (~> 6.0) scenic (~> 1.6) From 81d68a458aef20deb98dad3c119a30ba993013da Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jun 2022 14:43:55 +0900 Subject: [PATCH 033/646] Bump prettier from 2.6.2 to 2.7.1 (#18684) Bumps [prettier](https://github.com/prettier/prettier) from 2.6.2 to 2.7.1. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/2.6.2...2.7.1) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 80ad1add3b8..470cc330fa3 100644 --- a/package.json +++ b/package.json @@ -149,7 +149,7 @@ "jest": "^28.1.0", "jest-environment-jsdom": "^28.1.0", "postcss-scss": "^4.0.4", - "prettier": "^2.6.2", + "prettier": "^2.7.1", "raf": "^3.4.1", "react-intl-translations-manager": "^5.0.3", "react-test-renderer": "^16.14.0", diff --git a/yarn.lock b/yarn.lock index 14dc6910471..ca1995ff154 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8822,10 +8822,10 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prettier@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" - integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== +prettier@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== pretty-format@^25.2.1, pretty-format@^25.5.0: version "25.5.0" From bb096ed888e760cf85d83494fe7b0120c42b7e64 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jun 2022 14:44:57 +0900 Subject: [PATCH 034/646] Bump intersection-observer from 0.12.0 to 0.12.2 (#18682) Bumps [intersection-observer](https://github.com/GoogleChromeLabs/intersection-observer) from 0.12.0 to 0.12.2. - [Release notes](https://github.com/GoogleChromeLabs/intersection-observer/releases) - [Commits](https://github.com/GoogleChromeLabs/intersection-observer/commits) --- updated-dependencies: - dependency-name: intersection-observer dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 470cc330fa3..6fe43c86655 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "http-link-header": "^1.0.4", "immutable": "^4.1.0", "imports-loader": "^1.2.0", - "intersection-observer": "^0.12.0", + "intersection-observer": "^0.12.2", "intl": "^1.2.5", "intl-messageformat": "^2.2.0", "intl-relativeformat": "^6.4.3", diff --git a/yarn.lock b/yarn.lock index ca1995ff154..8603a4e62ce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5895,10 +5895,10 @@ interpret@^1.4.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -intersection-observer@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/intersection-observer/-/intersection-observer-0.12.0.tgz#6c84628f67ce8698e5f9ccf857d97718745837aa" - integrity sha512-2Vkz8z46Dv401zTWudDGwO7KiGHNDkMv417T5ItcNYfmvHR/1qCTVBO9vwH8zZmQ0WkA/1ARwpysR9bsnop4NQ== +intersection-observer@^0.12.0, intersection-observer@^0.12.2: + version "0.12.2" + resolved "https://registry.yarnpkg.com/intersection-observer/-/intersection-observer-0.12.2.tgz#4a45349cc0cd91916682b1f44c28d7ec737dc375" + integrity sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg== intl-format-cache@^2.0.5: version "2.2.9" From 89ac84d0766b7bb29a25f88aa14c941cb68e1d6a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jun 2022 14:46:13 +0900 Subject: [PATCH 035/646] Bump stylelint from 14.8.5 to 14.9.1 (#18653) Bumps [stylelint](https://github.com/stylelint/stylelint) from 14.8.5 to 14.9.1. - [Release notes](https://github.com/stylelint/stylelint/releases) - [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md) - [Commits](https://github.com/stylelint/stylelint/compare/14.8.5...14.9.1) --- updated-dependencies: - dependency-name: stylelint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 136 +++++++++------------------------------------------ 2 files changed, 25 insertions(+), 113 deletions(-) diff --git a/package.json b/package.json index 6fe43c86655..d1022f39a1f 100644 --- a/package.json +++ b/package.json @@ -153,7 +153,7 @@ "raf": "^3.4.1", "react-intl-translations-manager": "^5.0.3", "react-test-renderer": "^16.14.0", - "stylelint": "^14.8.5", + "stylelint": "^14.9.1", "stylelint-config-standard-scss": "^4.0.0", "webpack-dev-server": "^3.11.3", "yargs": "^17.5.1" diff --git a/yarn.lock b/yarn.lock index 8603a4e62ce..24ed84ee35e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1124,6 +1124,11 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@csstools/selector-specificity@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.0.1.tgz#b6b8d81780b9a9f6459f4bfe9226ac6aefaefe87" + integrity sha512-aG20vknL4/YjQF9BSV7ts4EWm/yrjagAN7OWBNmlbEOUiu0llj4OGrFoOKK3g2vey4/p2omKCoHrWtPxSwV3HA== + "@emotion/babel-plugin@^11.7.1": version "11.9.2" resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.9.2.tgz#723b6d394c89fb2ef782229d92ba95a740576e95" @@ -2815,7 +2820,7 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: +braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -3673,10 +3678,10 @@ css-font-weight-keywords@^1.0.0: resolved "https://registry.yarnpkg.com/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz#9bc04671ac85bc724b574ef5d3ac96b0d604fd97" integrity sha1-m8BGcayFvHJLV07106yWsNYE/Zc= -css-functions-list@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.0.1.tgz#1460df7fb584d1692c30b105151dbb988c8094f9" - integrity sha512-PriDuifDt4u4rkDgnqRCLnjfMatufLmWNfQnGCq34xZwpY3oabwhB9SqRBmuvWUgndbemCFlKqg+nO7C2q0SBw== +css-functions-list@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.1.0.tgz#cf5b09f835ad91a00e5959bcfc627cd498e1321b" + integrity sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w== css-global-keywords@^1.0.1: version "1.0.1" @@ -7065,11 +7070,6 @@ lockfile@^1.0: dependencies: signal-exit "^3.0.2" -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -7322,15 +7322,7 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -micromatch@^4.0.5: +micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -7576,11 +7568,6 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== -nanoid@^3.1.23: - version "3.2.0" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c" - integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA== - nanoid@^3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" @@ -8693,7 +8680,7 @@ postcss-selector-parser@^3.0.0: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.6: +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.6: version "6.0.10" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== @@ -8701,25 +8688,6 @@ postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.6: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-selector-parser@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" - integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== - dependencies: - cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" - integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== - dependencies: - cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - util-deprecate "^1.0.2" - postcss-svgo@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" @@ -8743,12 +8711,7 @@ postcss-value-parser@^3.0.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" - integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== - -postcss-value-parser@^4.2.0: +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== @@ -8772,16 +8735,7 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.27, postcss@^7.0.32: source-map "^0.6.1" supports-color "^6.1.0" -postcss@^8.2.15: - version "8.3.0" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.0.tgz#b1a713f6172ca427e3f05ef1303de8b65683325f" - integrity sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ== - dependencies: - colorette "^1.2.2" - nanoid "^3.1.23" - source-map-js "^0.6.2" - -postcss@^8.4.14: +postcss@^8.2.15, postcss@^8.4.14: version "8.4.14" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== @@ -10140,11 +10094,6 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-js@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" - integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== - source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -10254,11 +10203,6 @@ spdy@^4.0.2: select-hose "^2.0.0" spdy-transport "^3.0.0" -specificity@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" - integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg== - split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -10476,14 +10420,7 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-ansi@^6.0.1: +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -10581,15 +10518,16 @@ stylelint-scss@^4.0.0: postcss-selector-parser "^6.0.6" postcss-value-parser "^4.1.0" -stylelint@^14.8.5: - version "14.8.5" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.8.5.tgz#0fcbf5b6821283b5a249dde36d70f1158da0a2a3" - integrity sha512-e3t4H/hlWlspkcNUrkhf44RU3OpPTA7uBOoREGBzSwdEF+2g/+gbZq7WEpMP7BpopcSe/uLaTvDuL+URL7cdnQ== +stylelint@^14.9.1: + version "14.9.1" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.9.1.tgz#6494ed38f148b1e75b402d678a3b6a8aae86dfda" + integrity sha512-RdAkJdPiLqHawCSnu21nE27MjNXaVd4WcOHA4vK5GtIGjScfhNnaOuWR2wWdfKFAvcWQPOYe311iveiVKSmwsA== dependencies: + "@csstools/selector-specificity" "^2.0.1" balanced-match "^2.0.0" colord "^2.9.2" cosmiconfig "^7.0.1" - css-functions-list "^3.0.1" + css-functions-list "^3.1.0" debug "^4.3.4" execall "^2.0.0" fast-glob "^3.2.11" @@ -10617,7 +10555,6 @@ stylelint@^14.8.5: postcss-selector-parser "^6.0.10" postcss-value-parser "^4.2.0" resolve-from "^5.0.0" - specificity "^0.4.1" string-width "^4.2.3" strip-ansi "^6.0.1" style-search "^0.1.0" @@ -10677,15 +10614,7 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" - integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -supports-hyperlinks@^2.2.0: +supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== @@ -10727,19 +10656,7 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^6.0.9: - version "6.7.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" - integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== - dependencies: - ajv "^8.0.1" - lodash.clonedeep "^4.5.0" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.0" - strip-ansi "^6.0.0" - -table@^6.8.0: +table@^6.0.9, table@^6.8.0: version "6.8.0" resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== @@ -11320,12 +11237,7 @@ uuid@^8.3.1: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" - integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== - -v8-compile-cache@^2.3.0: +v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1, v8-compile-cache@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== From 7b5100aaedc27fbc60cf4064313dcafe237bdf53 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jun 2022 14:47:12 +0900 Subject: [PATCH 036/646] Bump ws from 8.7.0 to 8.8.0 (#18652) Bumps [ws](https://github.com/websockets/ws) from 8.7.0 to 8.8.0. - [Release notes](https://github.com/websockets/ws/releases) - [Commits](https://github.com/websockets/ws/compare/8.7.0...8.8.0) --- updated-dependencies: - dependency-name: ws dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index d1022f39a1f..df61125aca6 100644 --- a/package.json +++ b/package.json @@ -134,7 +134,7 @@ "webpack-cli": "^3.3.12", "webpack-merge": "^5.8.0", "wicg-inert": "^3.1.2", - "ws": "^8.7.0" + "ws": "^8.8.0" }, "devDependencies": { "@babel/eslint-parser": "^7.18.2", diff --git a/yarn.lock b/yarn.lock index 24ed84ee35e..5bd929f424f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11665,10 +11665,10 @@ ws@^7.3.1: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -ws@^8.2.3, ws@^8.7.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.7.0.tgz#eaf9d874b433aa00c0e0d8752532444875db3957" - integrity sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg== +ws@^8.2.3, ws@^8.8.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.0.tgz#8e71c75e2f6348dbf8d78005107297056cb77769" + integrity sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ== xml-name-validator@^4.0.0: version "4.0.0" From 0391b2a6033b56bd0ce213c35a21186fdcb607bc Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 19 Jun 2022 08:18:08 +0200 Subject: [PATCH 037/646] Fix contrast of some elements with new brand colors (#18691) --- app/javascript/styles/contrast/variables.scss | 8 ++--- .../styles/mastodon-light/variables.scss | 5 +-- app/javascript/styles/mastodon/admin.scss | 6 ++-- .../styles/mastodon/components.scss | 32 ++++++++----------- .../styles/mastodon/containers.scss | 2 +- app/javascript/styles/mastodon/dashboard.scss | 4 +-- app/javascript/styles/mastodon/forms.scss | 13 +++----- app/javascript/styles/mastodon/statuses.scss | 4 +-- app/javascript/styles/mastodon/variables.scss | 2 +- 9 files changed, 34 insertions(+), 42 deletions(-) diff --git a/app/javascript/styles/contrast/variables.scss b/app/javascript/styles/contrast/variables.scss index cfe3b21dbc6..9edfd6d8d73 100644 --- a/app/javascript/styles/contrast/variables.scss +++ b/app/javascript/styles/contrast/variables.scss @@ -4,19 +4,17 @@ $black: #000000; $classic-base-color: #282c37; $classic-primary-color: #9baec8; $classic-secondary-color: #d9e1e8; -$classic-highlight-color: #2b90d9; +$classic-highlight-color: #6364ff; $ui-base-color: $classic-base-color !default; $ui-primary-color: $classic-primary-color !default; $ui-secondary-color: $classic-secondary-color !default; - -// Differences -$ui-highlight-color: #2b5fd9; +$ui-highlight-color: $classic-highlight-color !default; $darker-text-color: lighten($ui-primary-color, 20%) !default; $dark-text-color: lighten($ui-primary-color, 12%) !default; $secondary-text-color: lighten($ui-secondary-color, 6%) !default; -$highlight-text-color: $classic-highlight-color !default; +$highlight-text-color: lighten($ui-highlight-color, 8%) !default; $action-button-color: #8d9ac2; $inverted-text-color: $black !default; diff --git a/app/javascript/styles/mastodon-light/variables.scss b/app/javascript/styles/mastodon-light/variables.scss index f6bc3ac9607..cae065878c5 100644 --- a/app/javascript/styles/mastodon-light/variables.scss +++ b/app/javascript/styles/mastodon-light/variables.scss @@ -5,7 +5,7 @@ $white: #ffffff; $classic-base-color: #282c37; $classic-primary-color: #9baec8; $classic-secondary-color: #d9e1e8; -$classic-highlight-color: #2b90d9; +$classic-highlight-color: #6364ff; // Differences $success-green: lighten(#3c754d, 8%); @@ -17,10 +17,11 @@ $ui-base-color: $classic-secondary-color !default; $ui-base-lighter-color: #b0c0cf; $ui-primary-color: #9bcbed; $ui-secondary-color: $classic-base-color !default; -$ui-highlight-color: #2b90d9; +$ui-highlight-color: $classic-highlight-color !default; $primary-text-color: $black !default; $darker-text-color: $classic-base-color !default; +$highlight-text-color: darken($ui-highlight-color, 8%) !default; $dark-text-color: #444b5d; $action-button-color: #606984; diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index 18638e18f51..f83d6424ad4 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -133,12 +133,12 @@ $content-width: 840px; .simple-navigation-active-leaf a { color: $primary-text-color; - background-color: $ui-highlight-color; + background-color: darken($ui-highlight-color, 2%); border-bottom: 0; border-radius: 0; &:hover { - background-color: lighten($ui-highlight-color, 5%); + background-color: $ui-highlight-color; } } } @@ -885,7 +885,7 @@ a.name-tag, border: 0; a { - color: lighten($ui-highlight-color, 8%); + color: $highlight-text-color; } dl:first-child .verified { diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 13474a00352..1ada1fcf7d4 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -42,7 +42,7 @@ } .button { - background-color: $ui-highlight-color; + background-color: darken($ui-highlight-color, 2%); border: 10px none; border-radius: 4px; box-sizing: border-box; @@ -60,20 +60,16 @@ text-align: center; text-decoration: none; text-overflow: ellipsis; - transition: all 100ms ease-in; white-space: nowrap; width: auto; &:active, &:focus, &:hover { - background-color: lighten($ui-highlight-color, 10%); - transition: all 200ms ease-out; + background-color: $ui-highlight-color; } &--destructive { - transition: none; - &:active, &:focus, &:hover { @@ -829,7 +825,7 @@ } a.unhandled-link { - color: lighten($ui-highlight-color, 8%); + color: $highlight-text-color; } .status__content__spoiler-link { @@ -899,7 +895,7 @@ } &.unhandled-link { - color: lighten($ui-highlight-color, 8%); + color: $highlight-text-color; } } } @@ -912,7 +908,7 @@ display: block; font-size: 15px; line-height: 20px; - color: lighten($ui-highlight-color, 8%); + color: $highlight-text-color; border: 0; background: transparent; padding: 0; @@ -2437,7 +2433,7 @@ a.account__display-name { height: 3.9375rem; bottom: 1.3125rem; right: 1.3125rem; - background: darken($ui-highlight-color, 3%); + background: darken($ui-highlight-color, 2%); color: $white; border-radius: 50%; font-size: 21px; @@ -2448,7 +2444,7 @@ a.account__display-name { &:hover, &:focus, &:active { - background: lighten($ui-highlight-color, 7%); + background: $ui-highlight-color; } } @@ -2881,11 +2877,11 @@ a.account__display-name { } .react-toggle--checked .react-toggle-track { - background-color: $ui-highlight-color; + background-color: darken($ui-highlight-color, 2%); } .react-toggle--checked:is(:hover, :focus-within):not(.react-toggle--disabled) .react-toggle-track { - background-color: lighten($ui-highlight-color, 10%); + background-color: $ui-highlight-color; } .react-toggle-track-check { @@ -2974,7 +2970,7 @@ a.account__display-name { } &.active { - color: $ui-highlight-color; + color: $highlight-text-color; } } } @@ -3407,14 +3403,14 @@ a.status-card.compact:hover { } a { - color: lighten($ui-highlight-color, 8%); + color: $highlight-text-color; text-decoration: none; &:hover, &:focus, &:active { text-decoration: underline; - color: lighten($ui-highlight-color, 12%); + color: lighten($highlight-text-color, 4%); } } } @@ -6427,8 +6423,8 @@ a.status-card.compact:hover { vertical-align: middle; &.checked { - border-color: lighten($ui-highlight-color, 8%); - background: lighten($ui-highlight-color, 8%); + border-color: lighten($ui-highlight-color, 4%); + background: lighten($ui-highlight-color, 4%); } } } diff --git a/app/javascript/styles/mastodon/containers.scss b/app/javascript/styles/mastodon/containers.scss index 23dbece6b3d..5703a64e362 100644 --- a/app/javascript/styles/mastodon/containers.scss +++ b/app/javascript/styles/mastodon/containers.scss @@ -791,7 +791,7 @@ border-top: 0; a { - color: lighten($ui-highlight-color, 8%); + color: $highlight-text-color; } dl:first-child .verified { diff --git a/app/javascript/styles/mastodon/dashboard.scss b/app/javascript/styles/mastodon/dashboard.scss index 7d0e51fdee2..c21fc9eba84 100644 --- a/app/javascript/styles/mastodon/dashboard.scss +++ b/app/javascript/styles/mastodon/dashboard.scss @@ -82,7 +82,7 @@ display: flex; align-items: baseline; border-radius: 4px; - background: $ui-highlight-color; + background: darken($ui-highlight-color, 2%); color: $primary-text-color; transition: all 100ms ease-in; font-size: 14px; @@ -95,7 +95,7 @@ &:active, &:focus, &:hover { - background-color: lighten($ui-highlight-color, 10%); + background-color: $ui-highlight-color; transition: all 200ms ease-out; } diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 94f553b76c2..d57eabc09ff 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -463,14 +463,14 @@ code { width: 100%; border: 0; border-radius: 4px; - background: $ui-highlight-color; + background: darken($ui-highlight-color, 2%); color: $primary-text-color; font-size: 18px; line-height: inherit; height: auto; padding: 10px; - text-transform: uppercase; text-decoration: none; + text-transform: uppercase; text-align: center; box-sizing: border-box; cursor: pointer; @@ -483,13 +483,10 @@ code { margin-right: 0; } - &:hover { - background-color: lighten($ui-highlight-color, 5%); - } - &:active, - &:focus { - background-color: darken($ui-highlight-color, 5%); + &:focus, + &:hover { + background-color: $ui-highlight-color; } &:disabled:hover { diff --git a/app/javascript/styles/mastodon/statuses.scss b/app/javascript/styles/mastodon/statuses.scss index a926aff9691..a3237a63073 100644 --- a/app/javascript/styles/mastodon/statuses.scss +++ b/app/javascript/styles/mastodon/statuses.scss @@ -80,7 +80,7 @@ .button.logo-button { flex: 0 auto; font-size: 14px; - background: $ui-highlight-color; + background: darken($ui-highlight-color, 2%); color: $primary-text-color; text-transform: none; line-height: 1.2; @@ -104,7 +104,7 @@ &:active, &:focus, &:hover { - background: lighten($ui-highlight-color, 10%); + background: $ui-highlight-color; } &:disabled, diff --git a/app/javascript/styles/mastodon/variables.scss b/app/javascript/styles/mastodon/variables.scss index 544f33ebff6..be2c900eaa1 100644 --- a/app/javascript/styles/mastodon/variables.scss +++ b/app/javascript/styles/mastodon/variables.scss @@ -34,7 +34,7 @@ $primary-text-color: $white !default; $darker-text-color: $ui-primary-color !default; $dark-text-color: $ui-base-lighter-color !default; $secondary-text-color: $ui-secondary-color !default; -$highlight-text-color: $ui-highlight-color !default; +$highlight-text-color: lighten($ui-highlight-color, 8%) !default; $action-button-color: $ui-base-lighter-color !default; $passive-text-color: $gold-star !default; $active-passive-text-color: $success-green !default; From 14dff49f92db0c9ad22575920fc8f00bd201ce42 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jun 2022 15:53:39 +0900 Subject: [PATCH 038/646] Bump jest from 28.1.0 to 28.1.1 (#18657) Bumps [jest](https://github.com/facebook/jest/tree/HEAD/packages/jest) from 28.1.0 to 28.1.1. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v28.1.1/packages/jest) --- updated-dependencies: - dependency-name: jest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 643 ++++++++++++++++++++++++++++++++------------------- 2 files changed, 404 insertions(+), 241 deletions(-) diff --git a/package.json b/package.json index df61125aca6..1d2fdaa5d58 100644 --- a/package.json +++ b/package.json @@ -146,7 +146,7 @@ "eslint-plugin-jsx-a11y": "~6.5.1", "eslint-plugin-promise": "~6.0.0", "eslint-plugin-react": "~7.30.0", - "jest": "^28.1.0", + "jest": "^28.1.1", "jest-environment-jsdom": "^28.1.0", "postcss-scss": "^4.0.4", "prettier": "^2.7.1", diff --git a/yarn.lock b/yarn.lock index 5bd929f424f..aec39d0a07b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1284,28 +1284,28 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@jest/console@^28.1.0": - version "28.1.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.0.tgz#db78222c3d3b0c1db82f1b9de51094c2aaff2176" - integrity sha512-tscn3dlJFGay47kb4qVruQg/XWlmvU0xp3EJOjzzY+sBaI+YgwKcvAmTcyYU7xEiLLIY5HCdWRooAL8dqkFlDA== +"@jest/console@^28.1.1": + version "28.1.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.1.tgz#305f8ca50b6e70413839f54c0e002b60a0f2fd7d" + integrity sha512-0RiUocPVFEm3WRMOStIHbRWllG6iW6E3/gUPnf4lkrVFyXIIDeCe+vlKeYyFOMhB2EPE6FLFCNADSOOQMaqvyA== dependencies: - "@jest/types" "^28.1.0" + "@jest/types" "^28.1.1" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^28.1.0" - jest-util "^28.1.0" + jest-message-util "^28.1.1" + jest-util "^28.1.1" slash "^3.0.0" -"@jest/core@^28.1.0": - version "28.1.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.1.0.tgz#784a1e6ce5358b46fcbdcfbbd93b1b713ed4ea80" - integrity sha512-/2PTt0ywhjZ4NwNO4bUqD9IVJfmFVhVKGlhvSpmEfUCuxYf/3NHcKmRFI+I71lYzbTT3wMuYpETDCTHo81gC/g== +"@jest/core@^28.1.1": + version "28.1.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.1.1.tgz#086830bec6267accf9af5ca76f794858e9f9f092" + integrity sha512-3pYsBoZZ42tXMdlcFeCc/0j9kOlK7MYuXs2B1QbvDgMoW1K9NJ4G/VYvIbMb26iqlkTfPHo7SC2JgjDOk/mxXw== dependencies: - "@jest/console" "^28.1.0" - "@jest/reporters" "^28.1.0" - "@jest/test-result" "^28.1.0" - "@jest/transform" "^28.1.0" - "@jest/types" "^28.1.0" + "@jest/console" "^28.1.1" + "@jest/reporters" "^28.1.1" + "@jest/test-result" "^28.1.1" + "@jest/transform" "^28.1.1" + "@jest/types" "^28.1.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" @@ -1313,20 +1313,20 @@ exit "^0.1.2" graceful-fs "^4.2.9" jest-changed-files "^28.0.2" - jest-config "^28.1.0" - jest-haste-map "^28.1.0" - jest-message-util "^28.1.0" + jest-config "^28.1.1" + jest-haste-map "^28.1.1" + jest-message-util "^28.1.1" jest-regex-util "^28.0.2" - jest-resolve "^28.1.0" - jest-resolve-dependencies "^28.1.0" - jest-runner "^28.1.0" - jest-runtime "^28.1.0" - jest-snapshot "^28.1.0" - jest-util "^28.1.0" - jest-validate "^28.1.0" - jest-watcher "^28.1.0" + jest-resolve "^28.1.1" + jest-resolve-dependencies "^28.1.1" + jest-runner "^28.1.1" + jest-runtime "^28.1.1" + jest-snapshot "^28.1.1" + jest-util "^28.1.1" + jest-validate "^28.1.1" + jest-watcher "^28.1.1" micromatch "^4.0.4" - pretty-format "^28.1.0" + pretty-format "^28.1.1" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" @@ -1341,20 +1341,30 @@ "@types/node" "*" jest-mock "^28.1.0" -"@jest/expect-utils@^28.1.0": - version "28.1.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.1.0.tgz#a5cde811195515a9809b96748ae8bcc331a3538a" - integrity sha512-5BrG48dpC0sB80wpeIX5FU6kolDJI4K0n5BM9a5V38MGx0pyRvUBSS0u2aNTdDzmOrCjhOg8pGs6a20ivYkdmw== +"@jest/environment@^28.1.1": + version "28.1.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.1.tgz#c4cbf85283278d768f816ebd1a258ea6f9e39d4f" + integrity sha512-9auVQ2GzQ7nrU+lAr8KyY838YahElTX9HVjbQPPS2XjlxQ+na18G113OoBhyBGBtD6ZnO/SrUy5WR8EzOj1/Uw== + dependencies: + "@jest/fake-timers" "^28.1.1" + "@jest/types" "^28.1.1" + "@types/node" "*" + jest-mock "^28.1.1" + +"@jest/expect-utils@^28.1.1": + version "28.1.1" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.1.1.tgz#d84c346025b9f6f3886d02c48a6177e2b0360587" + integrity sha512-n/ghlvdhCdMI/hTcnn4qV57kQuV9OTsZzH1TTCVARANKhl6hXJqLKUkwX69ftMGpsbpt96SsDD8n8LD2d9+FRw== dependencies: jest-get-type "^28.0.2" -"@jest/expect@^28.1.0": - version "28.1.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.1.0.tgz#2e5a31db692597070932366a1602b5157f0f217c" - integrity sha512-be9ETznPLaHOmeJqzYNIXv1ADEzENuQonIoobzThOYPuK/6GhrWNIJDVTgBLCrz3Am73PyEU2urQClZp0hLTtA== +"@jest/expect@^28.1.1": + version "28.1.1" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.1.1.tgz#ea4fcc8504b45835029221c0dc357c622a761326" + integrity sha512-/+tQprrFoT6lfkMj4mW/mUIfAmmk/+iQPmg7mLDIFOf2lyf7EBHaS+x3RbeR0VZVMe55IvX7QRoT/2aK3AuUXg== dependencies: - expect "^28.1.0" - jest-snapshot "^28.1.0" + expect "^28.1.1" + jest-snapshot "^28.1.1" "@jest/fake-timers@^28.1.0": version "28.1.0" @@ -1368,25 +1378,37 @@ jest-mock "^28.1.0" jest-util "^28.1.0" -"@jest/globals@^28.1.0": - version "28.1.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.1.0.tgz#a4427d2eb11763002ff58e24de56b84ba79eb793" - integrity sha512-3m7sTg52OTQR6dPhsEQSxAvU+LOBbMivZBwOvKEZ+Rb+GyxVnXi9HKgOTYkx/S99T8yvh17U4tNNJPIEQmtwYw== +"@jest/fake-timers@^28.1.1": + version "28.1.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.1.tgz#47ce33296ab9d680c76076d51ddbe65ceb3337f1" + integrity sha512-BY/3+TyLs5+q87rGWrGUY5f8e8uC3LsVHS9Diz8+FV3ARXL4sNnkLlIB8dvDvRrp+LUCGM+DLqlsYubizGUjIA== dependencies: - "@jest/environment" "^28.1.0" - "@jest/expect" "^28.1.0" - "@jest/types" "^28.1.0" + "@jest/types" "^28.1.1" + "@sinonjs/fake-timers" "^9.1.1" + "@types/node" "*" + jest-message-util "^28.1.1" + jest-mock "^28.1.1" + jest-util "^28.1.1" -"@jest/reporters@^28.1.0": - version "28.1.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.1.0.tgz#5183a28b9b593b6000fa9b89b031c7216b58a9a0" - integrity sha512-qxbFfqap/5QlSpIizH9c/bFCDKsQlM4uAKSOvZrP+nIdrjqre3FmKzpTtYyhsaVcOSNK7TTt2kjm+4BJIjysFA== +"@jest/globals@^28.1.1": + version "28.1.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.1.1.tgz#c0a7977f85e26279cc090d9adcdf82b8a34c4061" + integrity sha512-dEgl/6v7ToB4vXItdvcltJBgny0xBE6xy6IYQrPJAJggdEinGxCDMivNv7sFzPcTITGquXD6UJwYxfJ/5ZwDSg== + dependencies: + "@jest/environment" "^28.1.1" + "@jest/expect" "^28.1.1" + "@jest/types" "^28.1.1" + +"@jest/reporters@^28.1.1": + version "28.1.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.1.1.tgz#9389f4bb3cce4d9b586f6195f83c79cd2a1c8662" + integrity sha512-597Zj4D4d88sZrzM4atEGLuO7SdA/YrOv9SRXHXRNC+/FwPCWxZhBAEzhXoiJzfRwn8zes/EjS8Lo6DouGN5Gg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^28.1.0" - "@jest/test-result" "^28.1.0" - "@jest/transform" "^28.1.0" - "@jest/types" "^28.1.0" + "@jest/console" "^28.1.1" + "@jest/test-result" "^28.1.1" + "@jest/transform" "^28.1.1" + "@jest/types" "^28.1.1" "@jridgewell/trace-mapping" "^0.3.7" "@types/node" "*" chalk "^4.0.0" @@ -1399,8 +1421,9 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-util "^28.1.0" - jest-worker "^28.1.0" + jest-message-util "^28.1.1" + jest-util "^28.1.1" + jest-worker "^28.1.1" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" @@ -1423,24 +1446,24 @@ callsites "^3.0.0" graceful-fs "^4.2.9" -"@jest/test-result@^28.1.0": - version "28.1.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.0.tgz#fd149dee123510dd2fcadbbf5f0020f98ad7f12c" - integrity sha512-sBBFIyoPzrZho3N+80P35A5oAkSKlGfsEFfXFWuPGBsW40UAjCkGakZhn4UQK4iQlW2vgCDMRDOob9FGKV8YoQ== +"@jest/test-result@^28.1.1": + version "28.1.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.1.tgz#c6f18d1bbb01aa88925dd687872a75f8414b317a" + integrity sha512-hPmkugBktqL6rRzwWAtp1JtYT4VHwv8OQ+9lE5Gymj6dHzubI/oJHMUpPOt8NrdVWSrz9S7bHjJUmv2ggFoUNQ== dependencies: - "@jest/console" "^28.1.0" - "@jest/types" "^28.1.0" + "@jest/console" "^28.1.1" + "@jest/types" "^28.1.1" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^28.1.0": - version "28.1.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-28.1.0.tgz#ce7294bbe986415b9a30e218c7e705e6ebf2cdf2" - integrity sha512-tZCEiVWlWNTs/2iK9yi6o3AlMfbbYgV4uuZInSVdzZ7ftpHZhCMuhvk2HLYhCZzLgPFQ9MnM1YaxMnh3TILFiQ== +"@jest/test-sequencer@^28.1.1": + version "28.1.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-28.1.1.tgz#f594ee2331df75000afe0d1ae3237630ecec732e" + integrity sha512-nuL+dNSVMcWB7OOtgb0EGH5AjO4UBCt68SLP08rwmC+iRhyuJWS9MtZ/MpipxFwKAlHFftbMsydXqWre8B0+XA== dependencies: - "@jest/test-result" "^28.1.0" + "@jest/test-result" "^28.1.1" graceful-fs "^4.2.9" - jest-haste-map "^28.1.0" + jest-haste-map "^28.1.1" slash "^3.0.0" "@jest/transform@^28.1.0": @@ -1464,6 +1487,27 @@ slash "^3.0.0" write-file-atomic "^4.0.1" +"@jest/transform@^28.1.1": + version "28.1.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.1.tgz#83541f2a3f612077c8501f49cc4e205d4e4a6b27" + integrity sha512-PkfaTUuvjUarl1EDr5ZQcCA++oXkFCP9QFUkG0yVKVmNObjhrqDy0kbMpMebfHWm3CCDHjYNem9eUSH8suVNHQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^28.1.1" + "@jridgewell/trace-mapping" "^0.3.7" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.1" + jest-regex-util "^28.0.2" + jest-util "^28.1.1" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.1" + "@jest/types@^25.5.0": version "25.5.0" resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" @@ -1485,10 +1529,10 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jest/types@^28.1.0": - version "28.1.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.0.tgz#508327a89976cbf9bd3e1cc74641a29fd7dfd519" - integrity sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA== +"@jest/types@^28.1.0", "@jest/types@^28.1.1": + version "28.1.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.1.tgz#d059bbc80e6da6eda9f081f293299348bd78ee0b" + integrity sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw== dependencies: "@jest/schemas" "^28.0.2" "@types/istanbul-lib-coverage" "^2.0.0" @@ -2524,6 +2568,19 @@ babel-jest@^28.1.0: graceful-fs "^4.2.9" slash "^3.0.0" +babel-jest@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.1.tgz#2a3a4ae50964695b2d694ccffe4bec537c5a3586" + integrity sha512-MEt0263viUdAkTq5D7upHPNxvt4n9uLUGa6pPz3WviNBMtOmStb1lIXS3QobnoqM+qnH+vr4EKlvhe8QcmxIYw== + dependencies: + "@jest/transform" "^28.1.1" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^28.1.1" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + babel-loader@^8.2.5: version "8.2.5" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" @@ -2562,6 +2619,16 @@ babel-plugin-jest-hoist@^28.0.2: "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" +babel-plugin-jest-hoist@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.1.tgz#5e055cdcc47894f28341f87f5e35aad2df680b11" + integrity sha512-NovGCy5Hn25uMJSAU8FaHqzs13cFoOI4lhIujiepssjCKRsAo3TA734RDWSGxuFTsUJXerYOqQQodlxgmtqbzw== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + babel-plugin-lodash@^3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz#4f6844358a1340baed182adbeffa8df9967bc196" @@ -2669,6 +2736,14 @@ babel-preset-jest@^28.0.2: babel-plugin-jest-hoist "^28.0.2" babel-preset-current-node-syntax "^1.0.0" +babel-preset-jest@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-28.1.1.tgz#5b6e5e69f963eb2d70f739c607b8f723c0ee75e4" + integrity sha512-FCq9Oud0ReTeWtcneYf/48981aTfXYuB9gbU4rBNNJVBSQ6ssv7E6v/qvbBxtOWwZFXjLZwpg+W3q7J6vhH25g== + dependencies: + babel-plugin-jest-hoist "^28.1.1" + babel-preset-current-node-syntax "^1.0.0" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -4092,10 +4167,10 @@ diff-sequences@^25.2.6: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== -diff-sequences@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.0.2.tgz#40f8d4ffa081acbd8902ba35c798458d0ff1af41" - integrity sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ== +diff-sequences@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" + integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== diffie-hellman@^5.0.0: version "5.0.3" @@ -4795,16 +4870,16 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.0.tgz#10e8da64c0850eb8c39a480199f14537f46e8360" - integrity sha512-qFXKl8Pmxk8TBGfaFKRtcQjfXEnKAs+dmlxdwvukJZorwrAabT7M3h8oLOG01I2utEhkmUTi17CHaPBovZsKdw== +expect@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.1.tgz#ca6fff65f6517cf7220c2e805a49c19aea30b420" + integrity sha512-/AANEwGL0tWBwzLNOvO0yUdy2D52jVdNXppOqswC49sxMN2cPWsGCQdzuIf9tj6hHoBQzNvx75JUYuQAckPo3w== dependencies: - "@jest/expect-utils" "^28.1.0" + "@jest/expect-utils" "^28.1.1" jest-get-type "^28.0.2" - jest-matcher-utils "^28.1.0" - jest-message-util "^28.1.0" - jest-util "^28.1.0" + jest-matcher-utils "^28.1.1" + jest-message-util "^28.1.1" + jest-util "^28.1.1" express@^4.17.1, express@^4.18.1: version "4.18.1" @@ -6405,74 +6480,74 @@ jest-changed-files@^28.0.2: execa "^5.0.0" throat "^6.0.1" -jest-circus@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.1.0.tgz#e229f590911bd54d60efaf076f7acd9360296dae" - integrity sha512-rNYfqfLC0L0zQKRKsg4n4J+W1A2fbyGH7Ss/kDIocp9KXD9iaL111glsLu7+Z7FHuZxwzInMDXq+N1ZIBkI/TQ== +jest-circus@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.1.1.tgz#3d27da6a974d85a466dc0cdc6ddeb58daaa57bb4" + integrity sha512-75+BBVTsL4+p2w198DQpCeyh1RdaS2lhEG87HkaFX/UG0gJExVq2skG2pT7XZEGBubNj2CytcWSPan4QEPNosw== dependencies: - "@jest/environment" "^28.1.0" - "@jest/expect" "^28.1.0" - "@jest/test-result" "^28.1.0" - "@jest/types" "^28.1.0" + "@jest/environment" "^28.1.1" + "@jest/expect" "^28.1.1" + "@jest/test-result" "^28.1.1" + "@jest/types" "^28.1.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" is-generator-fn "^2.0.0" - jest-each "^28.1.0" - jest-matcher-utils "^28.1.0" - jest-message-util "^28.1.0" - jest-runtime "^28.1.0" - jest-snapshot "^28.1.0" - jest-util "^28.1.0" - pretty-format "^28.1.0" + jest-each "^28.1.1" + jest-matcher-utils "^28.1.1" + jest-message-util "^28.1.1" + jest-runtime "^28.1.1" + jest-snapshot "^28.1.1" + jest-util "^28.1.1" + pretty-format "^28.1.1" slash "^3.0.0" stack-utils "^2.0.3" throat "^6.0.1" -jest-cli@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.1.0.tgz#cd1d8adb9630102d5ba04a22895f63decdd7ac1f" - integrity sha512-fDJRt6WPRriHrBsvvgb93OxgajHHsJbk4jZxiPqmZbMDRcHskfJBBfTyjFko0jjfprP544hOktdSi9HVgl4VUQ== +jest-cli@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.1.1.tgz#23ddfde8940e1818585ae4a568877b33b0e51cfe" + integrity sha512-+sUfVbJqb1OjBZ0OdBbI6OWfYM1i7bSfzYy6gze1F1w3OKWq8ZTEKkZ8a7ZQPq6G/G1qMh/uKqpdWhgl11NFQQ== dependencies: - "@jest/core" "^28.1.0" - "@jest/test-result" "^28.1.0" - "@jest/types" "^28.1.0" + "@jest/core" "^28.1.1" + "@jest/test-result" "^28.1.1" + "@jest/types" "^28.1.1" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^28.1.0" - jest-util "^28.1.0" - jest-validate "^28.1.0" + jest-config "^28.1.1" + jest-util "^28.1.1" + jest-validate "^28.1.1" prompts "^2.0.1" yargs "^17.3.1" -jest-config@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.1.0.tgz#fca22ca0760e746fe1ce1f9406f6b307ab818501" - integrity sha512-aOV80E9LeWrmflp7hfZNn/zGA4QKv/xsn2w8QCBP0t0+YqObuCWTSgNbHJ0j9YsTuCO08ZR/wsvlxqqHX20iUA== +jest-config@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.1.1.tgz#e90b97b984f14a6c24a221859e81b258990fce2f" + integrity sha512-tASynMhS+jVV85zKvjfbJ8nUyJS/jUSYZ5KQxLUN2ZCvcQc/OmhQl2j6VEL3ezQkNofxn5pQ3SPYWPHb0unTZA== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^28.1.0" - "@jest/types" "^28.1.0" - babel-jest "^28.1.0" + "@jest/test-sequencer" "^28.1.1" + "@jest/types" "^28.1.1" + babel-jest "^28.1.1" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^28.1.0" - jest-environment-node "^28.1.0" + jest-circus "^28.1.1" + jest-environment-node "^28.1.1" jest-get-type "^28.0.2" jest-regex-util "^28.0.2" - jest-resolve "^28.1.0" - jest-runner "^28.1.0" - jest-util "^28.1.0" - jest-validate "^28.1.0" + jest-resolve "^28.1.1" + jest-runner "^28.1.1" + jest-util "^28.1.1" + jest-validate "^28.1.1" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^28.1.0" + pretty-format "^28.1.1" slash "^3.0.0" strip-json-comments "^3.1.1" @@ -6486,33 +6561,33 @@ jest-diff@^25.2.1: jest-get-type "^25.2.6" pretty-format "^25.5.0" -jest-diff@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.0.tgz#77686fef899ec1873dbfbf9330e37dd429703269" - integrity sha512-8eFd3U3OkIKRtlasXfiAQfbovgFgRDb0Ngcs2E+FMeBZ4rUezqIaGjuyggJBp+llosQXNEWofk/Sz4Hr5gMUhA== +jest-diff@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.1.tgz#1a3eedfd81ae79810931c63a1d0f201b9120106c" + integrity sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg== dependencies: chalk "^4.0.0" - diff-sequences "^28.0.2" + diff-sequences "^28.1.1" jest-get-type "^28.0.2" - pretty-format "^28.1.0" + pretty-format "^28.1.1" -jest-docblock@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-28.0.2.tgz#3cab8abea53275c9d670cdca814fc89fba1298c2" - integrity sha512-FH10WWw5NxLoeSdQlJwu+MTiv60aXV/t8KEwIRGEv74WARE1cXIqh1vGdy2CraHuWOOrnzTWj/azQKqW4fO7xg== +jest-docblock@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-28.1.1.tgz#6f515c3bf841516d82ecd57a62eed9204c2f42a8" + integrity sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA== dependencies: detect-newline "^3.0.0" -jest-each@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-28.1.0.tgz#54ae66d6a0a5b1913e9a87588d26c2687c39458b" - integrity sha512-a/XX02xF5NTspceMpHujmOexvJ4GftpYXqr6HhhmKmExtMXsyIN/fvanQlt/BcgFoRKN4OCXxLQKth9/n6OPFg== +jest-each@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-28.1.1.tgz#ba5238dacf4f31d9fe23ddc2c44c01e7c23885c4" + integrity sha512-A042rqh17ZvEhRceDMi784ppoXR7MWGDEKTXEZXb4svt0eShMZvijGxzKsx+yIjeE8QYmHPrnHiTSQVhN4nqaw== dependencies: - "@jest/types" "^28.1.0" + "@jest/types" "^28.1.1" chalk "^4.0.0" jest-get-type "^28.0.2" - jest-util "^28.1.0" - pretty-format "^28.1.0" + jest-util "^28.1.1" + pretty-format "^28.1.1" jest-environment-jsdom@^28.1.0: version "28.1.0" @@ -6528,17 +6603,17 @@ jest-environment-jsdom@^28.1.0: jest-util "^28.1.0" jsdom "^19.0.0" -jest-environment-node@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.1.0.tgz#6ed2150aa31babba0c488c5b4f4d813a585c68e6" - integrity sha512-gBLZNiyrPw9CSMlTXF1yJhaBgWDPVvH0Pq6bOEwGMXaYNzhzhw2kA/OijNF8egbCgDS0/veRv97249x2CX+udQ== +jest-environment-node@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.1.1.tgz#1c86c59003a7d319fa06ea3b1bbda6c193715c67" + integrity sha512-2aV/eeY/WNgUUJrrkDJ3cFEigjC5fqT1+fCclrY6paqJ5zVPoM//sHmfgUUp7WLYxIdbPwMiVIzejpN56MxnNA== dependencies: - "@jest/environment" "^28.1.0" - "@jest/fake-timers" "^28.1.0" - "@jest/types" "^28.1.0" + "@jest/environment" "^28.1.1" + "@jest/fake-timers" "^28.1.1" + "@jest/types" "^28.1.1" "@types/node" "*" - jest-mock "^28.1.0" - jest-util "^28.1.0" + jest-mock "^28.1.1" + jest-util "^28.1.1" jest-get-type@^25.2.6: version "25.2.6" @@ -6569,23 +6644,42 @@ jest-haste-map@^28.1.0: optionalDependencies: fsevents "^2.3.2" -jest-leak-detector@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-28.1.0.tgz#b65167776a8787443214d6f3f54935a4c73c8a45" - integrity sha512-uIJDQbxwEL2AMMs2xjhZl2hw8s77c3wrPaQ9v6tXJLGaaQ+4QrNJH5vuw7hA7w/uGT/iJ42a83opAqxGHeyRIA== +jest-haste-map@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.1.tgz#471685f1acd365a9394745bb97c8fc16289adca3" + integrity sha512-ZrRSE2o3Ezh7sb1KmeLEZRZ4mgufbrMwolcFHNRSjKZhpLa8TdooXOOFlSwoUzlbVs1t0l7upVRW2K7RWGHzbQ== + dependencies: + "@jest/types" "^28.1.1" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^28.0.2" + jest-util "^28.1.1" + jest-worker "^28.1.1" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-28.1.1.tgz#537f37afd610a4b3f4cab15e06baf60484548efb" + integrity sha512-4jvs8V8kLbAaotE+wFR7vfUGf603cwYtFf1/PYEsyX2BAjSzj8hQSVTP6OWzseTl0xL6dyHuKs2JAks7Pfubmw== dependencies: jest-get-type "^28.0.2" - pretty-format "^28.1.0" + pretty-format "^28.1.1" -jest-matcher-utils@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.0.tgz#2ae398806668eeabd293c61712227cb94b250ccf" - integrity sha512-onnax0n2uTLRQFKAjC7TuaxibrPSvZgKTcSCnNUz/tOjJ9UhxNm7ZmPpoQavmTDUjXvUQ8KesWk2/VdrxIFzTQ== +jest-matcher-utils@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz#a7c4653c2b782ec96796eb3088060720f1e29304" + integrity sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw== dependencies: chalk "^4.0.0" - jest-diff "^28.1.0" + jest-diff "^28.1.1" jest-get-type "^28.0.2" - pretty-format "^28.1.0" + pretty-format "^28.1.1" jest-message-util@^28.1.0: version "28.1.0" @@ -6602,6 +6696,21 @@ jest-message-util@^28.1.0: slash "^3.0.0" stack-utils "^2.0.3" +jest-message-util@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.1.tgz#60aa0b475cfc08c8a9363ed2fb9108514dd9ab89" + integrity sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^28.1.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^28.1.1" + slash "^3.0.0" + stack-utils "^2.0.3" + jest-mock@^28.1.0: version "28.1.0" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.1.0.tgz#ccc7cc12a9b330b3182db0c651edc90d163ff73e" @@ -6610,6 +6719,14 @@ jest-mock@^28.1.0: "@jest/types" "^28.1.0" "@types/node" "*" +jest-mock@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.1.1.tgz#37903d269427fa1ef5b2447be874e1c62a39a371" + integrity sha512-bDCb0FjfsmKweAvE09dZT59IMkzgN0fYBH6t5S45NoJfd2DHkS3ySG2K+hucortryhO3fVuXdlxWcbtIuV/Skw== + dependencies: + "@jest/types" "^28.1.1" + "@types/node" "*" + jest-pnp-resolver@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" @@ -6620,111 +6737,111 @@ jest-regex-util@^28.0.2: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== -jest-resolve-dependencies@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.0.tgz#167becb8bee6e20b5ef4a3a728ec67aef6b0b79b" - integrity sha512-Ue1VYoSZquPwEvng7Uefw8RmZR+me/1kr30H2jMINjGeHgeO/JgrR6wxj2ofkJ7KSAA11W3cOrhNCbj5Dqqd9g== +jest-resolve-dependencies@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.1.tgz#3dffaaa56f4b41bc6b61053899d1756401763a27" + integrity sha512-p8Y150xYJth4EXhOuB8FzmS9r8IGLEioiaetgdNGb9VHka4fl0zqWlVe4v7mSkYOuEUg2uB61iE+zySDgrOmgQ== dependencies: jest-regex-util "^28.0.2" - jest-snapshot "^28.1.0" + jest-snapshot "^28.1.1" -jest-resolve@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-28.1.0.tgz#b1f32748a6cee7d1779c7ef639c0a87078de3d35" - integrity sha512-vvfN7+tPNnnhDvISuzD1P+CRVP8cK0FHXRwPAcdDaQv4zgvwvag2n55/h5VjYcM5UJG7L4TwE5tZlzcI0X2Lhw== +jest-resolve@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-28.1.1.tgz#bc2eaf384abdcc1aaf3ba7c50d1adf01e59095e5" + integrity sha512-/d1UbyUkf9nvsgdBildLe6LAD4DalgkgZcKd0nZ8XUGPyA/7fsnaQIlKVnDiuUXv/IeZhPEDrRJubVSulxrShA== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^28.1.0" + jest-haste-map "^28.1.1" jest-pnp-resolver "^1.2.2" - jest-util "^28.1.0" - jest-validate "^28.1.0" + jest-util "^28.1.1" + jest-validate "^28.1.1" resolve "^1.20.0" resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.1.0.tgz#aefe2a1e618a69baa0b24a50edc54fdd7e728eaa" - integrity sha512-FBpmuh1HB2dsLklAlRdOxNTTHKFR6G1Qmd80pVDvwbZXTriqjWqjei5DKFC1UlM732KjYcE6yuCdiF0WUCOS2w== +jest-runner@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.1.1.tgz#9ecdb3f27a00059986797aa6b012ba8306aa436c" + integrity sha512-W5oFUiDBgTsCloTAj6q95wEvYDB0pxIhY6bc5F26OucnwBN+K58xGTGbliSMI4ChQal5eANDF+xvELaYkJxTmA== dependencies: - "@jest/console" "^28.1.0" - "@jest/environment" "^28.1.0" - "@jest/test-result" "^28.1.0" - "@jest/transform" "^28.1.0" - "@jest/types" "^28.1.0" + "@jest/console" "^28.1.1" + "@jest/environment" "^28.1.1" + "@jest/test-result" "^28.1.1" + "@jest/transform" "^28.1.1" + "@jest/types" "^28.1.1" "@types/node" "*" chalk "^4.0.0" emittery "^0.10.2" graceful-fs "^4.2.9" - jest-docblock "^28.0.2" - jest-environment-node "^28.1.0" - jest-haste-map "^28.1.0" - jest-leak-detector "^28.1.0" - jest-message-util "^28.1.0" - jest-resolve "^28.1.0" - jest-runtime "^28.1.0" - jest-util "^28.1.0" - jest-watcher "^28.1.0" - jest-worker "^28.1.0" + jest-docblock "^28.1.1" + jest-environment-node "^28.1.1" + jest-haste-map "^28.1.1" + jest-leak-detector "^28.1.1" + jest-message-util "^28.1.1" + jest-resolve "^28.1.1" + jest-runtime "^28.1.1" + jest-util "^28.1.1" + jest-watcher "^28.1.1" + jest-worker "^28.1.1" source-map-support "0.5.13" throat "^6.0.1" -jest-runtime@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.1.0.tgz#4847dcb2a4eb4b0f9eaf41306897e51fb1665631" - integrity sha512-wNYDiwhdH/TV3agaIyVF0lsJ33MhyujOe+lNTUiolqKt8pchy1Hq4+tDMGbtD5P/oNLA3zYrpx73T9dMTOCAcg== +jest-runtime@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.1.1.tgz#569e1dc3c36c6c4c0b29516c1c49b6ad580abdaf" + integrity sha512-J89qEJWW0leOsqyi0D9zHpFEYHwwafFdS9xgvhFHtIdRghbadodI0eA+DrthK/1PebBv3Px8mFSMGKrtaVnleg== dependencies: - "@jest/environment" "^28.1.0" - "@jest/fake-timers" "^28.1.0" - "@jest/globals" "^28.1.0" + "@jest/environment" "^28.1.1" + "@jest/fake-timers" "^28.1.1" + "@jest/globals" "^28.1.1" "@jest/source-map" "^28.0.2" - "@jest/test-result" "^28.1.0" - "@jest/transform" "^28.1.0" - "@jest/types" "^28.1.0" + "@jest/test-result" "^28.1.1" + "@jest/transform" "^28.1.1" + "@jest/types" "^28.1.1" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^28.1.0" - jest-message-util "^28.1.0" - jest-mock "^28.1.0" + jest-haste-map "^28.1.1" + jest-message-util "^28.1.1" + jest-mock "^28.1.1" jest-regex-util "^28.0.2" - jest-resolve "^28.1.0" - jest-snapshot "^28.1.0" - jest-util "^28.1.0" + jest-resolve "^28.1.1" + jest-snapshot "^28.1.1" + jest-util "^28.1.1" slash "^3.0.0" strip-bom "^4.0.0" -jest-snapshot@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.1.0.tgz#4b74fa8816707dd10fe9d551c2c258e5a67b53b6" - integrity sha512-ex49M2ZrZsUyQLpLGxQtDbahvgBjlLPgklkqGM0hq/F7W/f8DyqZxVHjdy19QKBm4O93eDp+H5S23EiTbbUmHw== +jest-snapshot@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.1.1.tgz#ab825c16c8d8b5e883bd57eee6ca8748c42ab848" + integrity sha512-1KjqHJ98adRcbIdMizjF5DipwZFbvxym/kFO4g4fVZCZRxH/dqV8TiBFCa6rqic3p0karsy8RWS1y4E07b7P0A== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^28.1.0" - "@jest/transform" "^28.1.0" - "@jest/types" "^28.1.0" + "@jest/expect-utils" "^28.1.1" + "@jest/transform" "^28.1.1" + "@jest/types" "^28.1.1" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^28.1.0" + expect "^28.1.1" graceful-fs "^4.2.9" - jest-diff "^28.1.0" + jest-diff "^28.1.1" jest-get-type "^28.0.2" - jest-haste-map "^28.1.0" - jest-matcher-utils "^28.1.0" - jest-message-util "^28.1.0" - jest-util "^28.1.0" + jest-haste-map "^28.1.1" + jest-matcher-utils "^28.1.1" + jest-message-util "^28.1.1" + jest-util "^28.1.1" natural-compare "^1.4.0" - pretty-format "^28.1.0" + pretty-format "^28.1.1" semver "^7.3.5" jest-util@^28.1.0: @@ -6739,30 +6856,42 @@ jest-util@^28.1.0: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-28.1.0.tgz#8a6821f48432aba9f830c26e28226ad77b9a0e18" - integrity sha512-Lly7CJYih3vQBfjLeANGgBSBJ7pEa18cxpQfQEq2go2xyEzehnHfQTjoUia8xUv4x4J80XKFIDwJJThXtRFQXQ== +jest-util@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.1.tgz#ff39e436a1aca397c0ab998db5a51ae2b7080d05" + integrity sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw== dependencies: - "@jest/types" "^28.1.0" + "@jest/types" "^28.1.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-28.1.1.tgz#59b7b339b3c85b5144bd0c06ad3600f503a4acc8" + integrity sha512-Kpf6gcClqFCIZ4ti5++XemYJWUPCFUW+N2gknn+KgnDf549iLul3cBuKVe1YcWRlaF8tZV8eJCap0eECOEE3Ug== + dependencies: + "@jest/types" "^28.1.1" camelcase "^6.2.0" chalk "^4.0.0" jest-get-type "^28.0.2" leven "^3.1.0" - pretty-format "^28.1.0" + pretty-format "^28.1.1" -jest-watcher@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.0.tgz#aaa7b4164a4e77eeb5f7d7b25ede5e7b4e9c9aaf" - integrity sha512-tNHMtfLE8Njcr2IRS+5rXYA4BhU90gAOwI9frTGOqd+jX0P/Au/JfRSNqsf5nUTcWdbVYuLxS1KjnzILSoR5hA== +jest-watcher@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.1.tgz#533597fb3bfefd52b5cd115cd916cffd237fb60c" + integrity sha512-RQIpeZ8EIJMxbQrXpJQYIIlubBnB9imEHsxxE41f54ZwcqWLysL/A0ZcdMirf+XsMn3xfphVQVV4EW0/p7i7Ug== dependencies: - "@jest/test-result" "^28.1.0" - "@jest/types" "^28.1.0" + "@jest/test-result" "^28.1.1" + "@jest/types" "^28.1.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.10.2" - jest-util "^28.1.0" + jest-util "^28.1.1" string-length "^4.0.1" jest-worker@^26.5.0: @@ -6783,14 +6912,24 @@ jest-worker@^28.1.0: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.0.tgz#f420e41c8f2395b9a30445a97189ebb57593d831" - integrity sha512-TZR+tHxopPhzw3c3560IJXZWLNHgpcz1Zh0w5A65vynLGNcg/5pZ+VildAd7+XGOu6jd58XMY/HNn0IkZIXVXg== +jest-worker@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.1.tgz#3480c73247171dfd01eda77200f0063ab6a3bf28" + integrity sha512-Au7slXB08C6h+xbJPp7VIb6U0XX5Kc9uel/WFc6/rcTzGiaVCBRngBExSYuXSLFPULPSYU3cJ3ybS988lNFQhQ== dependencies: - "@jest/core" "^28.1.0" + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.1.tgz#3c39a3a09791e16e9ef283597d24ab19a0df701e" + integrity sha512-qw9YHBnjt6TCbIDMPMpJZqf9E12rh6869iZaN08/vpOGgHJSAaLLUn6H8W3IAEuy34Ls3rct064mZLETkxJ2XA== + dependencies: + "@jest/core" "^28.1.1" + "@jest/types" "^28.1.1" import-local "^3.0.2" - jest-cli "^28.1.0" + jest-cli "^28.1.1" js-base64@^2.1.9: version "2.6.4" @@ -7176,6 +7315,13 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: dependencies: semver "^6.0.0" +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -8811,6 +8957,16 @@ pretty-format@^28.1.0: ansi-styles "^5.0.0" react-is "^18.0.0" +pretty-format@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.1.tgz#f731530394e0f7fcd95aba6b43c50e02d86b95cb" + integrity sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw== + dependencies: + "@jest/schemas" "^28.0.2" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^18.0.0" + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -10833,7 +10989,7 @@ tiny-warning@^1.0.0: resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== -tmpl@1.0.x: +tmpl@1.0.5, tmpl@1.0.x: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== @@ -11305,6 +11461,13 @@ walker@^1.0.7: dependencies: makeerror "1.0.x" +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + warning@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" From d31ecdec5ab5f975e57c52ac2d37447f31280dfa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jun 2022 16:10:14 +0900 Subject: [PATCH 039/646] Bump jest-environment-jsdom from 28.1.0 to 28.1.1 (#18656) Bumps [jest-environment-jsdom](https://github.com/facebook/jest/tree/HEAD/packages/jest-environment-jsdom) from 28.1.0 to 28.1.1. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v28.1.1/packages/jest-environment-jsdom) --- updated-dependencies: - dependency-name: jest-environment-jsdom dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 87 ++++++---------------------------------------------- 2 files changed, 11 insertions(+), 78 deletions(-) diff --git a/package.json b/package.json index 1d2fdaa5d58..708cfa42e0b 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "eslint-plugin-promise": "~6.0.0", "eslint-plugin-react": "~7.30.0", "jest": "^28.1.1", - "jest-environment-jsdom": "^28.1.0", + "jest-environment-jsdom": "^28.1.1", "postcss-scss": "^4.0.4", "prettier": "^2.7.1", "raf": "^3.4.1", diff --git a/yarn.lock b/yarn.lock index aec39d0a07b..ac6a55c83a4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1331,16 +1331,6 @@ slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^28.1.0": - version "28.1.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.0.tgz#dedf7d59ec341b9292fcf459fd0ed819eb2e228a" - integrity sha512-S44WGSxkRngzHslhV6RoAExekfF7Qhwa6R5+IYFa81mpcj0YgdBnRSmvHe3SNwOt64yXaE5GG8Y2xM28ii5ssA== - dependencies: - "@jest/fake-timers" "^28.1.0" - "@jest/types" "^28.1.0" - "@types/node" "*" - jest-mock "^28.1.0" - "@jest/environment@^28.1.1": version "28.1.1" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.1.tgz#c4cbf85283278d768f816ebd1a258ea6f9e39d4f" @@ -1366,18 +1356,6 @@ expect "^28.1.1" jest-snapshot "^28.1.1" -"@jest/fake-timers@^28.1.0": - version "28.1.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.0.tgz#ea77878aabd5c5d50e1fc53e76d3226101e33064" - integrity sha512-Xqsf/6VLeAAq78+GNPzI7FZQRf5cCHj1qgQxCjws9n8rKw8r1UYoeaALwBvyuzOkpU3c1I6emeMySPa96rxtIg== - dependencies: - "@jest/types" "^28.1.0" - "@sinonjs/fake-timers" "^9.1.1" - "@types/node" "*" - jest-message-util "^28.1.0" - jest-mock "^28.1.0" - jest-util "^28.1.0" - "@jest/fake-timers@^28.1.1": version "28.1.1" resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.1.tgz#47ce33296ab9d680c76076d51ddbe65ceb3337f1" @@ -6589,18 +6567,18 @@ jest-each@^28.1.1: jest-util "^28.1.1" pretty-format "^28.1.1" -jest-environment-jsdom@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-28.1.0.tgz#1042cffd0343615c5fac2d2c8da20d1d43b73ef8" - integrity sha512-8n6P4xiDjNVqTWv6W6vJPuQdLx+ZiA3dbYg7YJ+DPzR+9B61K6pMVJrSs2IxfGRG4J7pyAUA5shQ9G0KEun78w== +jest-environment-jsdom@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-28.1.1.tgz#8bd721915b32f9b196723292c4461a0ad548b55b" + integrity sha512-41ZvgSoPNcKG5q3LuuOcAczdBxRq9DbZkPe24okN6ZCmiZdAfFtPg3z+lOtsT1fM6OAERApKT+3m0MRDQH2zIA== dependencies: - "@jest/environment" "^28.1.0" - "@jest/fake-timers" "^28.1.0" - "@jest/types" "^28.1.0" + "@jest/environment" "^28.1.1" + "@jest/fake-timers" "^28.1.1" + "@jest/types" "^28.1.1" "@types/jsdom" "^16.2.4" "@types/node" "*" - jest-mock "^28.1.0" - jest-util "^28.1.0" + jest-mock "^28.1.1" + jest-util "^28.1.1" jsdom "^19.0.0" jest-environment-node@^28.1.1: @@ -6681,21 +6659,6 @@ jest-matcher-utils@^28.1.1: jest-get-type "^28.0.2" pretty-format "^28.1.1" -jest-message-util@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.0.tgz#7e8f0b9049e948e7b94c2a52731166774ba7d0af" - integrity sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^28.1.0" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^28.1.0" - slash "^3.0.0" - stack-utils "^2.0.3" - jest-message-util@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.1.tgz#60aa0b475cfc08c8a9363ed2fb9108514dd9ab89" @@ -6711,14 +6674,6 @@ jest-message-util@^28.1.1: slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.1.0.tgz#ccc7cc12a9b330b3182db0c651edc90d163ff73e" - integrity sha512-H7BrhggNn77WhdL7O1apG0Q/iwl0Bdd5E1ydhCJzL3oBLh/UYxAwR3EJLsBZ9XA3ZU4PA3UNw4tQjduBTCTmLw== - dependencies: - "@jest/types" "^28.1.0" - "@types/node" "*" - jest-mock@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.1.1.tgz#37903d269427fa1ef5b2447be874e1c62a39a371" @@ -6844,19 +6799,7 @@ jest-snapshot@^28.1.1: pretty-format "^28.1.1" semver "^7.3.5" -jest-util@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.0.tgz#d54eb83ad77e1dd441408738c5a5043642823be5" - integrity sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA== - dependencies: - "@jest/types" "^28.1.0" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-util@^28.1.1: +jest-util@^28.1.0, jest-util@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.1.tgz#ff39e436a1aca397c0ab998db5a51ae2b7080d05" integrity sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw== @@ -8947,16 +8890,6 @@ pretty-format@^27.0.2: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.0.tgz#8f5836c6a0dfdb834730577ec18029052191af55" - integrity sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q== - dependencies: - "@jest/schemas" "^28.0.2" - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^18.0.0" - pretty-format@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.1.tgz#f731530394e0f7fcd95aba6b43c50e02d86b95cb" From f7d589aa87df2896e03bf16595c9741876dba1ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jun 2022 16:10:40 +0900 Subject: [PATCH 040/646] Bump babel-jest from 28.1.0 to 28.1.1 (#18649) Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 28.1.0 to 28.1.1. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v28.1.1/packages/babel-jest) --- updated-dependencies: - dependency-name: babel-jest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 96 +--------------------------------------------------- 2 files changed, 2 insertions(+), 96 deletions(-) diff --git a/package.json b/package.json index 708cfa42e0b..30fe8b67252 100644 --- a/package.json +++ b/package.json @@ -140,7 +140,7 @@ "@babel/eslint-parser": "^7.18.2", "@testing-library/jest-dom": "^5.16.4", "@testing-library/react": "^12.1.5", - "babel-jest": "^28.1.0", + "babel-jest": "^28.1.1", "eslint": "^7.32.0", "eslint-plugin-import": "~2.26.0", "eslint-plugin-jsx-a11y": "~6.5.1", diff --git a/yarn.lock b/yarn.lock index ac6a55c83a4..42d877453f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1444,27 +1444,6 @@ jest-haste-map "^28.1.1" slash "^3.0.0" -"@jest/transform@^28.1.0": - version "28.1.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.0.tgz#224a3c9ba4cc98e2ff996c0a89a2d59db15c74ce" - integrity sha512-omy2xe5WxlAfqmsTjTPxw+iXRTRnf+NtX0ToG+4S0tABeb4KsKmPUHq5UBuwunHg3tJRwgEQhEp0M/8oiatLEA== - dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^28.1.0" - "@jridgewell/trace-mapping" "^0.3.7" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^28.1.0" - jest-regex-util "^28.0.2" - jest-util "^28.1.0" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.1" - "@jest/transform@^28.1.1": version "28.1.1" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.1.tgz#83541f2a3f612077c8501f49cc4e205d4e4a6b27" @@ -2533,19 +2512,6 @@ axobject-query@^2.2.0: resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== -babel-jest@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.0.tgz#95a67f8e2e7c0042e7b3ad3951b8af41a533b5ea" - integrity sha512-zNKk0yhDZ6QUwfxh9k07GII6siNGMJWVUU49gmFj5gfdqDKLqa2RArXOF2CODp4Dr7dLxN2cvAV+667dGJ4b4w== - dependencies: - "@jest/transform" "^28.1.0" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^28.0.2" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - babel-jest@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.1.tgz#2a3a4ae50964695b2d694ccffe4bec537c5a3586" @@ -2587,16 +2553,6 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.0.2.tgz#9307d03a633be6fc4b1a6bc5c3a87e22bd01dd3b" - integrity sha512-Kizhn/ZL+68ZQHxSnHyuvJv8IchXD62KQxV77TBDV/xoBFBOfgRAk97GNs6hXdTTCiVES9nB2I6+7MXXrk5llQ== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" - babel-plugin-jest-hoist@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.1.tgz#5e055cdcc47894f28341f87f5e35aad2df680b11" @@ -2706,14 +2662,6 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-28.0.2.tgz#d8210fe4e46c1017e9fa13d7794b166e93aa9f89" - integrity sha512-sYzXIdgIXXroJTFeB3S6sNDWtlJ2dllCdTEsnZ65ACrMojj3hVNFRmnJ1HZtomGi+Be7aqpY/HJ92fr8OhKVkQ== - dependencies: - babel-plugin-jest-hoist "^28.0.2" - babel-preset-current-node-syntax "^1.0.0" - babel-preset-jest@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-28.1.1.tgz#5b6e5e69f963eb2d70f739c607b8f723c0ee75e4" @@ -6603,25 +6551,6 @@ jest-get-type@^28.0.2: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== -jest-haste-map@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.0.tgz#6c1ee2daf1c20a3e03dbd8e5b35c4d73d2349cf0" - integrity sha512-xyZ9sXV8PtKi6NCrJlmq53PyNVHzxmcfXNVvIRHpHmh1j/HChC4pwKgyjj7Z9us19JMw8PpQTJsFWOsIfT93Dw== - dependencies: - "@jest/types" "^28.1.0" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^28.0.2" - jest-util "^28.1.0" - jest-worker "^28.1.0" - micromatch "^4.0.4" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.3.2" - jest-haste-map@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.1.tgz#471685f1acd365a9394745bb97c8fc16289adca3" @@ -6846,15 +6775,6 @@ jest-worker@^26.5.0: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.0.tgz#ced54757a035e87591e1208253a6e3aac1a855e5" - integrity sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - jest-worker@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.1.tgz#3480c73247171dfd01eda77200f0063ab6a3bf28" @@ -7265,13 +7185,6 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= - dependencies: - tmpl "1.0.x" - map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -10922,7 +10835,7 @@ tiny-warning@^1.0.0: resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== -tmpl@1.0.5, tmpl@1.0.x: +tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== @@ -11387,13 +11300,6 @@ w3c-xmlserializer@^3.0.0: dependencies: xml-name-validator "^4.0.0" -walker@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= - dependencies: - makeerror "1.0.x" - walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" From 50e261ff66991dd3b01a326d6cadb6c6acf6a20d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 18:52:12 +0900 Subject: [PATCH 041/646] Bump docker/setup-qemu-action from 1 to 2 (#18676) Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 1 to 2. - [Release notes](https://github.com/docker/setup-qemu-action/releases) - [Commits](https://github.com/docker/setup-qemu-action/compare/v1...v2) --- updated-dependencies: - dependency-name: docker/setup-qemu-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index ac2f777b50d..6c75ec72233 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: docker/setup-qemu-action@v1 + - uses: docker/setup-qemu-action@v2 - uses: docker/setup-buildx-action@v1 - uses: docker/login-action@v1 with: From 0aee67fa3536e98e91a331e61eca2f74e4f0ae62 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 18:52:36 +0900 Subject: [PATCH 042/646] Bump docker/login-action from 1 to 2 (#18678) Bumps [docker/login-action](https://github.com/docker/login-action) from 1 to 2. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v1...v2) --- updated-dependencies: - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index 6c75ec72233..df96436969b 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -17,7 +17,7 @@ jobs: - uses: actions/checkout@v3 - uses: docker/setup-qemu-action@v2 - uses: docker/setup-buildx-action@v1 - - uses: docker/login-action@v1 + - uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} From 27f41768e8d66d97c8d705d764e534e52ea13af9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 19:10:11 +0900 Subject: [PATCH 043/646] Bump sidekiq-unique-jobs from 7.1.24 to 7.1.25 (#18680) Bumps [sidekiq-unique-jobs](https://github.com/mhenrixon/sidekiq-unique-jobs) from 7.1.24 to 7.1.25. - [Release notes](https://github.com/mhenrixon/sidekiq-unique-jobs/releases) - [Changelog](https://github.com/mhenrixon/sidekiq-unique-jobs/blob/main/CHANGELOG.md) - [Commits](https://github.com/mhenrixon/sidekiq-unique-jobs/compare/v7.1.24...v7.1.25) --- updated-dependencies: - dependency-name: sidekiq-unique-jobs dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 43beba76921..eb167e5a267 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -611,7 +611,7 @@ GEM rufus-scheduler (~> 3.2) sidekiq (>= 4) tilt (>= 1.4.0) - sidekiq-unique-jobs (7.1.24) + sidekiq-unique-jobs (7.1.25) brpoplpush-redis_script (> 0.1.1, <= 2.0.0) concurrent-ruby (~> 1.0, >= 1.0.5) sidekiq (>= 5.0, < 8.0) From 353e2c5d84fcfe253d58e0a0038deac0bfc867e3 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 19 Jun 2022 08:18:08 +0200 Subject: [PATCH 044/646] [Glitch] Fix contrast of some elements with new brand colors Port 0391b2a6033b56bd0ce213c35a21186fdcb607bc to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/styles/admin.scss | 6 +++--- .../glitch/styles/components/announcements.scss | 2 +- .../glitch/styles/components/columns.scss | 2 +- .../glitch/styles/components/directory.scss | 4 ++-- .../flavours/glitch/styles/components/index.scss | 16 +++++----------- .../glitch/styles/components/single_column.scss | 4 ++-- .../glitch/styles/components/status.scss | 2 +- .../flavours/glitch/styles/containers.scss | 2 +- .../glitch/styles/contrast/variables.scss | 8 +++----- .../flavours/glitch/styles/dashboard.scss | 4 ++-- app/javascript/flavours/glitch/styles/forms.scss | 13 +++++-------- .../glitch/styles/mastodon-light/variables.scss | 3 ++- .../flavours/glitch/styles/statuses.scss | 6 +++--- .../flavours/glitch/styles/variables.scss | 2 +- 14 files changed, 32 insertions(+), 42 deletions(-) diff --git a/app/javascript/flavours/glitch/styles/admin.scss b/app/javascript/flavours/glitch/styles/admin.scss index d14648bb5c0..9553aa4ae2b 100644 --- a/app/javascript/flavours/glitch/styles/admin.scss +++ b/app/javascript/flavours/glitch/styles/admin.scss @@ -133,12 +133,12 @@ $content-width: 840px; .simple-navigation-active-leaf a { color: $primary-text-color; - background-color: $ui-highlight-color; + background-color: darken($ui-highlight-color, 2%); border-bottom: 0; border-radius: 0; &:hover { - background-color: lighten($ui-highlight-color, 5%); + background-color: $ui-highlight-color; } } } @@ -904,7 +904,7 @@ a.name-tag, border: 0; a { - color: lighten($ui-highlight-color, 8%); + color: $highlight-text-color; } dl:first-child .verified { diff --git a/app/javascript/flavours/glitch/styles/components/announcements.scss b/app/javascript/flavours/glitch/styles/components/announcements.scss index 52feefd3ca7..85af9afc83a 100644 --- a/app/javascript/flavours/glitch/styles/components/announcements.scss +++ b/app/javascript/flavours/glitch/styles/components/announcements.scss @@ -36,7 +36,7 @@ } &.unhandled-link { - color: lighten($ui-highlight-color, 8%); + color: $highlight-text-color; } } } diff --git a/app/javascript/flavours/glitch/styles/components/columns.scss b/app/javascript/flavours/glitch/styles/components/columns.scss index 8d51ef8165d..1440682f3f6 100644 --- a/app/javascript/flavours/glitch/styles/components/columns.scss +++ b/app/javascript/flavours/glitch/styles/components/columns.scss @@ -201,7 +201,7 @@ } &.active { - color: $ui-highlight-color; + color: $highlight-text-color; } } } diff --git a/app/javascript/flavours/glitch/styles/components/directory.scss b/app/javascript/flavours/glitch/styles/components/directory.scss index b48c6c102b4..803e075c9e8 100644 --- a/app/javascript/flavours/glitch/styles/components/directory.scss +++ b/app/javascript/flavours/glitch/styles/components/directory.scss @@ -58,8 +58,8 @@ vertical-align: middle; &.checked { - border-color: lighten($ui-highlight-color, 8%); - background: lighten($ui-highlight-color, 8%); + border-color: lighten($ui-highlight-color, 4%); + background: lighten($ui-highlight-color, 4%); } } } diff --git a/app/javascript/flavours/glitch/styles/components/index.scss b/app/javascript/flavours/glitch/styles/components/index.scss index da9fb6ad2d5..7f9ed218603 100644 --- a/app/javascript/flavours/glitch/styles/components/index.scss +++ b/app/javascript/flavours/glitch/styles/components/index.scss @@ -51,22 +51,16 @@ text-align: center; text-decoration: none; text-overflow: ellipsis; - transition: all 100ms ease-in; - transition-property: background-color; white-space: nowrap; width: auto; &:active, &:focus, &:hover { - background-color: lighten($ui-highlight-color, 7%); - transition: all 200ms ease-out; - transition-property: background-color; + background-color: $ui-highlight-color; } &--destructive { - transition: none; - &:active, &:focus, &:hover { @@ -916,11 +910,11 @@ } .react-toggle--checked .react-toggle-track { - background-color: $ui-highlight-color; + background-color: darken($ui-highlight-color, 2%); } .react-toggle--checked:is(:hover, :focus-within):not(.react-toggle--disabled) .react-toggle-track { - background-color: lighten($ui-highlight-color, 10%); + background-color: $ui-highlight-color; } .react-toggle-track-check { @@ -1216,14 +1210,14 @@ button.icon-button.active i.fa-retweet { } a { - color: lighten($ui-highlight-color, 8%); + color: $highlight-text-color; text-decoration: none; &:hover, &:focus, &:active { text-decoration: underline; - color: lighten($ui-highlight-color, 12%); + color: lighten($highlight-text-color, 4%); } } } diff --git a/app/javascript/flavours/glitch/styles/components/single_column.scss b/app/javascript/flavours/glitch/styles/components/single_column.scss index ba43e7f2911..d10fc1d3e8e 100644 --- a/app/javascript/flavours/glitch/styles/components/single_column.scss +++ b/app/javascript/flavours/glitch/styles/components/single_column.scss @@ -199,7 +199,7 @@ height: 3.9375rem; bottom: 1.3125rem; right: 1.3125rem; - background: darken($ui-highlight-color, 3%); + background: darken($ui-highlight-color, 2%); color: $white; border-radius: 50%; font-size: 21px; @@ -210,7 +210,7 @@ &:hover, &:focus, &:active { - background: lighten($ui-highlight-color, 7%); + background: $ui-highlight-color; } } diff --git a/app/javascript/flavours/glitch/styles/components/status.scss b/app/javascript/flavours/glitch/styles/components/status.scss index cc424f941c8..9e346c5f08f 100644 --- a/app/javascript/flavours/glitch/styles/components/status.scss +++ b/app/javascript/flavours/glitch/styles/components/status.scss @@ -187,7 +187,7 @@ } a.unhandled-link { - color: lighten($ui-highlight-color, 8%); + color: $highlight-text-color; .link-origin-tag { color: $gold-star; diff --git a/app/javascript/flavours/glitch/styles/containers.scss b/app/javascript/flavours/glitch/styles/containers.scss index 2bc55a1d73e..b8d0fdad2ad 100644 --- a/app/javascript/flavours/glitch/styles/containers.scss +++ b/app/javascript/flavours/glitch/styles/containers.scss @@ -797,7 +797,7 @@ border-top: 0; a { - color: lighten($ui-highlight-color, 8%); + color: $highlight-text-color; } dl:first-child .verified { diff --git a/app/javascript/flavours/glitch/styles/contrast/variables.scss b/app/javascript/flavours/glitch/styles/contrast/variables.scss index f6cadf0298c..ab14a7b7389 100644 --- a/app/javascript/flavours/glitch/styles/contrast/variables.scss +++ b/app/javascript/flavours/glitch/styles/contrast/variables.scss @@ -4,19 +4,17 @@ $black: #000000; $classic-base-color: #282c37; $classic-primary-color: #9baec8; $classic-secondary-color: #d9e1e8; -$classic-highlight-color: #2b90d9; +$classic-highlight-color: #6364ff; $ui-base-color: $classic-base-color !default; $ui-primary-color: $classic-primary-color !default; $ui-secondary-color: $classic-secondary-color !default; - -// Differences -$ui-highlight-color: #2b5fd9; +$ui-highlight-color: $classic-highlight-color !default; $darker-text-color: lighten($ui-primary-color, 20%) !default; $dark-text-color: lighten($ui-primary-color, 12%) !default; $secondary-text-color: lighten($ui-secondary-color, 6%) !default; -$highlight-text-color: $classic-highlight-color !default; +$highlight-text-color: lighten($ui-highlight-color, 8%) !default; $action-button-color: #8d9ac2; $inverted-text-color: $black !default; diff --git a/app/javascript/flavours/glitch/styles/dashboard.scss b/app/javascript/flavours/glitch/styles/dashboard.scss index 0a881bc1085..9b06b44d6d1 100644 --- a/app/javascript/flavours/glitch/styles/dashboard.scss +++ b/app/javascript/flavours/glitch/styles/dashboard.scss @@ -83,7 +83,7 @@ display: flex; align-items: baseline; border-radius: 4px; - background: $ui-highlight-color; + background: darken($ui-highlight-color, 2%); color: $primary-text-color; transition: all 100ms ease-in; font-size: 14px; @@ -96,7 +96,7 @@ &:active, &:focus, &:hover { - background-color: lighten($ui-highlight-color, 10%); + background-color: $ui-highlight-color; transition: all 200ms ease-out; } diff --git a/app/javascript/flavours/glitch/styles/forms.scss b/app/javascript/flavours/glitch/styles/forms.scss index a08ca24f14f..5aa75b41e34 100644 --- a/app/javascript/flavours/glitch/styles/forms.scss +++ b/app/javascript/flavours/glitch/styles/forms.scss @@ -454,14 +454,14 @@ code { width: 100%; border: 0; border-radius: 4px; - background: $ui-highlight-color; + background: darken($ui-highlight-color, 2%); color: $primary-text-color; font-size: 18px; line-height: inherit; height: auto; padding: 10px; - text-transform: uppercase; text-decoration: none; + text-transform: uppercase; text-align: center; box-sizing: border-box; cursor: pointer; @@ -474,13 +474,10 @@ code { margin-right: 0; } - &:hover { - background-color: lighten($ui-highlight-color, 5%); - } - &:active, - &:focus { - background-color: darken($ui-highlight-color, 5%); + &:focus, + &:hover { + background-color: $ui-highlight-color; } &:disabled:hover { diff --git a/app/javascript/flavours/glitch/styles/mastodon-light/variables.scss b/app/javascript/flavours/glitch/styles/mastodon-light/variables.scss index 7709d453546..f1c8a3503a8 100644 --- a/app/javascript/flavours/glitch/styles/mastodon-light/variables.scss +++ b/app/javascript/flavours/glitch/styles/mastodon-light/variables.scss @@ -5,7 +5,7 @@ $white: #ffffff; $classic-base-color: #282c37; $classic-primary-color: #9baec8; $classic-secondary-color: #d9e1e8; -$classic-highlight-color: #2b90d9; +$classic-highlight-color: #6364ff; $ui-base-color: $classic-secondary-color !default; $ui-base-lighter-color: darken($ui-base-color, 57%); @@ -15,6 +15,7 @@ $ui-secondary-color: $classic-base-color !default; $primary-text-color: $black !default; $darker-text-color: $classic-base-color !default; +$highlight-text-color: darken($ui-highlight-color, 8%) !default; $dark-text-color: #444b5d; $action-button-color: #606984; diff --git a/app/javascript/flavours/glitch/styles/statuses.scss b/app/javascript/flavours/glitch/styles/statuses.scss index b807fa45a8e..c302fc0d0d0 100644 --- a/app/javascript/flavours/glitch/styles/statuses.scss +++ b/app/javascript/flavours/glitch/styles/statuses.scss @@ -76,7 +76,7 @@ .button.logo-button { flex: 0 auto; font-size: 14px; - background: $ui-highlight-color; + background: darken($ui-highlight-color, 2%); color: $primary-text-color; text-transform: none; line-height: 1.2; @@ -100,7 +100,7 @@ &:active, &:focus, &:hover { - background: lighten($ui-highlight-color, 10%); + background: $ui-highlight-color; } &:disabled, @@ -267,7 +267,7 @@ a.button.logo-button { display: block; font-size: 15px; line-height: 20px; - color: lighten($ui-highlight-color, 8%); + color: $highlight-text-color; border: 0; background: transparent; padding: 0; diff --git a/app/javascript/flavours/glitch/styles/variables.scss b/app/javascript/flavours/glitch/styles/variables.scss index c2da24184d2..65758e6e094 100644 --- a/app/javascript/flavours/glitch/styles/variables.scss +++ b/app/javascript/flavours/glitch/styles/variables.scss @@ -34,7 +34,7 @@ $primary-text-color: $white !default; $darker-text-color: $ui-primary-color !default; $dark-text-color: $ui-base-lighter-color !default; $secondary-text-color: $ui-secondary-color !default; -$highlight-text-color: $ui-highlight-color !default; +$highlight-text-color: lighten($ui-highlight-color, 8%) !default; $action-button-color: $ui-base-lighter-color !default; $passive-text-color: $gold-star !default; $active-passive-text-color: $success-green !default; From 327eed00767a08217c09addeddfed97c9b91c95f Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 21 Jun 2022 15:16:22 +0200 Subject: [PATCH 045/646] Fix suspicious sign-in mails never being sent (#18599) * Add tests * Fix suspicious sign-in mails never being sent --- app/controllers/auth/sessions_controller.rb | 9 ++++++- .../auth/sessions_controller_spec.rb | 26 +++++++++++++++++++ spec/fabricators/login_activity_fabricator.rb | 10 +++---- 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/app/controllers/auth/sessions_controller.rb b/app/controllers/auth/sessions_controller.rb index c4c8151e333..f9a55eb4bd0 100644 --- a/app/controllers/auth/sessions_controller.rb +++ b/app/controllers/auth/sessions_controller.rb @@ -7,11 +7,18 @@ class Auth::SessionsController < Devise::SessionsController skip_before_action :require_functional! skip_before_action :update_user_sign_in + prepend_before_action :check_suspicious!, only: [:create] + include TwoFactorAuthenticationConcern before_action :set_instance_presenter, only: [:new] before_action :set_body_classes + def check_suspicious! + user = find_user + @login_is_suspicious = suspicious_sign_in?(user) unless user.nil? + end + def create super do |resource| # We only need to call this if this hasn't already been @@ -142,7 +149,7 @@ class Auth::SessionsController < Devise::SessionsController user_agent: request.user_agent ) - UserMailer.suspicious_sign_in(user, request.remote_ip, request.user_agent, Time.now.utc).deliver_later! if suspicious_sign_in?(user) + UserMailer.suspicious_sign_in(user, request.remote_ip, request.user_agent, Time.now.utc).deliver_later! if @login_is_suspicious end def suspicious_sign_in?(user) diff --git a/spec/controllers/auth/sessions_controller_spec.rb b/spec/controllers/auth/sessions_controller_spec.rb index 1b8fd0b7b0a..d3db7aa1ab2 100644 --- a/spec/controllers/auth/sessions_controller_spec.rb +++ b/spec/controllers/auth/sessions_controller_spec.rb @@ -119,6 +119,32 @@ RSpec.describe Auth::SessionsController, type: :controller do end end + context 'using a valid password on a previously-used account with a new IP address' do + let(:previous_ip) { '1.2.3.4' } + let(:current_ip) { '4.3.2.1' } + + let!(:previous_login) { Fabricate(:login_activity, user: user, ip: previous_ip) } + + before do + allow_any_instance_of(ActionDispatch::Request).to receive(:remote_ip).and_return(current_ip) + allow(UserMailer).to receive(:suspicious_sign_in).and_return(double('email', 'deliver_later!': nil)) + user.update(current_sign_in_at: 1.month.ago) + post :create, params: { user: { email: user.email, password: user.password } } + end + + it 'redirects to home' do + expect(response).to redirect_to(root_path) + end + + it 'logs the user in' do + expect(controller.current_user).to eq user + end + + it 'sends a suspicious sign-in mail' do + expect(UserMailer).to have_received(:suspicious_sign_in).with(user, current_ip, anything, anything) + end + end + context 'using email with uppercase letters' do before do post :create, params: { user: { email: user.email.upcase, password: user.password } } diff --git a/spec/fabricators/login_activity_fabricator.rb b/spec/fabricators/login_activity_fabricator.rb index 931d3082ccf..686fd6483d9 100644 --- a/spec/fabricators/login_activity_fabricator.rb +++ b/spec/fabricators/login_activity_fabricator.rb @@ -1,8 +1,8 @@ Fabricator(:login_activity) do user - strategy 'password' - success true - failure_reason nil - ip { Faker::Internet.ip_v4_address } - user_agent { Faker::Internet.user_agent } + authentication_method 'password' + success true + failure_reason nil + ip { Faker::Internet.ip_v4_address } + user_agent { Faker::Internet.user_agent } end From 9134ed63f3250fb69ddf3f5a39e1222e4a904e49 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Jun 2022 11:35:39 +0900 Subject: [PATCH 046/646] Bump docker/setup-buildx-action from 1 to 2 (#18677) Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 1 to 2. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/v1...v2) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index df96436969b..157c2fcde17 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -16,7 +16,7 @@ jobs: steps: - uses: actions/checkout@v3 - uses: docker/setup-qemu-action@v2 - - uses: docker/setup-buildx-action@v1 + - uses: docker/setup-buildx-action@v2 - uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} From 47f2ff617ded1c3cc523e6bb803e26a0e6dd4103 Mon Sep 17 00:00:00 2001 From: tateisu Date: Thu, 23 Jun 2022 08:44:27 +0900 Subject: [PATCH 047/646] use Notification::TYPES for api push subscription alerts (#18709) --- app/controllers/api/v1/push/subscriptions_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/api/v1/push/subscriptions_controller.rb b/app/controllers/api/v1/push/subscriptions_controller.rb index 47f2e6440c8..7148d63a4ee 100644 --- a/app/controllers/api/v1/push/subscriptions_controller.rb +++ b/app/controllers/api/v1/push/subscriptions_controller.rb @@ -52,6 +52,6 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController def data_params return {} if params[:data].blank? - params.require(:data).permit(:policy, alerts: [:follow, :follow_request, :favourite, :reblog, :mention, :poll, :status]) + params.require(:data).permit(:policy, alerts: Notification::TYPES) end end From 65ad58984808c482de60894f4210a5595bd96eb2 Mon Sep 17 00:00:00 2001 From: mayaeh Date: Fri, 24 Jun 2022 06:08:52 +0900 Subject: [PATCH 048/646] Fixed the setting page's logo that is not displayed on the smartphone (#18710) --- app/javascript/styles/mastodon/admin.scss | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index f83d6424ad4..66e2997f1f8 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -75,6 +75,13 @@ $content-width: 840px; height: 100px; } + .logo--wordmark { + display: inherit; + margin: inherit; + width: inherit; + height: 20px; + } + @media screen and (max-width: $no-columns-breakpoint) { & > a:first-child { display: none; From 6c2d3038f421a94171594c70d490daeec1e1a2d7 Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Fri, 24 Jun 2022 06:09:32 +0900 Subject: [PATCH 049/646] Fix CDN_HOST not affected on full_asset_url (#18662) * Fix CDN_HOST not affected to assets url * Fix typo --- app/helpers/routing_helper.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/helpers/routing_helper.rb b/app/helpers/routing_helper.rb index f95f46a5609..0d5a8505a20 100644 --- a/app/helpers/routing_helper.rb +++ b/app/helpers/routing_helper.rb @@ -16,7 +16,11 @@ module RoutingHelper def full_asset_url(source, **options) source = ActionController::Base.helpers.asset_url(source, **options) unless use_storage? - URI.join(root_url, source).to_s + URI.join(asset_host, source).to_s + end + + def asset_host + Rails.configuration.action_controller.asset_host || root_url end def full_pack_url(source, **options) From 9c571a95db125aa2cbf31d1406d4327032ce9111 Mon Sep 17 00:00:00 2001 From: Takeshi Umeda Date: Fri, 24 Jun 2022 06:10:03 +0900 Subject: [PATCH 050/646] Fix missing , (#18660) --- app/lib/activitypub/parser/media_attachment_parser.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/activitypub/parser/media_attachment_parser.rb b/app/lib/activitypub/parser/media_attachment_parser.rb index 30bea1f0e6f..656be84b73f 100644 --- a/app/lib/activitypub/parser/media_attachment_parser.rb +++ b/app/lib/activitypub/parser/media_attachment_parser.rb @@ -50,7 +50,7 @@ class ActivityPub::Parser::MediaAttachmentParser components = begin blurhash = @json['blurhash'] - if blurhash.present? && /^[\w#$%*+-.:;=?@\[\]^{|}~]+$/.match?(blurhash) + if blurhash.present? && /^[\w#$%*+,-.:;=?@\[\]^{|}~]+$/.match?(blurhash) Blurhash.components(blurhash) end end From 35588d09e2fb720542f45fcc3a75c9c7c9f8d0a4 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 23 Jun 2022 23:12:01 +0200 Subject: [PATCH 051/646] Add /api/v1/admin/domain_allows (#18668) - `GET /api/v1/admin/domain_allows` lists allowed domains - `GET /api/v1/admin/domain_allows/:id` shows one by ID - `DELETE /api/v1/admin/domain_allows/:id` deletes a given domain from the list of allowed domains - `POST /api/v1/admin/domain_allows` to allow a new domain: if that domain is already allowed, the existing DomainAllow will be returned --- .../api/v1/admin/domain_allows_controller.rb | 95 ++++++++++++++ app/models/domain_allow.rb | 1 + app/policies/domain_allow_policy.rb | 8 ++ .../rest/admin/domain_allow_serializer.rb | 9 ++ config/routes.rb | 1 + .../v1/admin/domain_allows_controller_spec.rb | 118 ++++++++++++++++++ 6 files changed, 232 insertions(+) create mode 100644 app/controllers/api/v1/admin/domain_allows_controller.rb create mode 100644 app/serializers/rest/admin/domain_allow_serializer.rb create mode 100644 spec/controllers/api/v1/admin/domain_allows_controller_spec.rb diff --git a/app/controllers/api/v1/admin/domain_allows_controller.rb b/app/controllers/api/v1/admin/domain_allows_controller.rb new file mode 100644 index 00000000000..838978ddb3e --- /dev/null +++ b/app/controllers/api/v1/admin/domain_allows_controller.rb @@ -0,0 +1,95 @@ +# frozen_string_literal: true + +class Api::V1::Admin::DomainAllowsController < Api::BaseController + include Authorization + include AccountableConcern + + LIMIT = 100 + + before_action -> { authorize_if_got_token! :'admin:read', :'admin:read:domain_allows' }, only: [:index, :show] + before_action -> { authorize_if_got_token! :'admin:write', :'admin:write:domain_allows' }, except: [:index, :show] + before_action :require_staff! + before_action :set_domain_allows, only: :index + before_action :set_domain_allow, only: [:show, :destroy] + + after_action :insert_pagination_headers, only: :index + + PAGINATION_PARAMS = %i(limit).freeze + + def create + authorize :domain_allow, :create? + + @domain_allow = DomainAllow.find_by(resource_params) + + if @domain_allow.nil? + @domain_allow = DomainAllow.create!(resource_params) + log_action :create, @domain_allow + end + + render json: @domain_allow, serializer: REST::Admin::DomainAllowSerializer + end + + def index + authorize :domain_allow, :index? + render json: @domain_allows, each_serializer: REST::Admin::DomainAllowSerializer + end + + def show + authorize @domain_allow, :show? + render json: @domain_allow, serializer: REST::Admin::DomainAllowSerializer + end + + def destroy + authorize @domain_allow, :destroy? + UnallowDomainService.new.call(@domain_allow) + log_action :destroy, @domain_allow + render json: @domain_allow, serializer: REST::Admin::DomainAllowSerializer + end + + private + + def set_domain_allows + @domain_allows = filtered_domain_allows.order(id: :desc).to_a_paginated_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id)) + end + + def set_domain_allow + @domain_allow = DomainAllow.find(params[:id]) + end + + def filtered_domain_allows + # TODO: no filtering yet + DomainAllow.all + end + + def insert_pagination_headers + set_pagination_headers(next_path, prev_path) + end + + def next_path + api_v1_admin_domain_allows_url(pagination_params(max_id: pagination_max_id)) if records_continue? + end + + def prev_path + api_v1_admin_domain_allows_url(pagination_params(min_id: pagination_since_id)) unless @domain_allows.empty? + end + + def pagination_max_id + @domain_allows.last.id + end + + def pagination_since_id + @domain_allows.first.id + end + + def records_continue? + @domain_allows.size == limit_param(LIMIT) + end + + def pagination_params(core_params) + params.slice(*PAGINATION_PARAMS).permit(*PAGINATION_PARAMS).merge(core_params) + end + + def resource_params + params.permit(:domain) + end +end diff --git a/app/models/domain_allow.rb b/app/models/domain_allow.rb index 4b0a89c184c..6aa9267fe2b 100644 --- a/app/models/domain_allow.rb +++ b/app/models/domain_allow.rb @@ -11,6 +11,7 @@ # class DomainAllow < ApplicationRecord + include Paginable include DomainNormalizable include DomainMaterializable diff --git a/app/policies/domain_allow_policy.rb b/app/policies/domain_allow_policy.rb index 5030453bbcc..7a5b5d78081 100644 --- a/app/policies/domain_allow_policy.rb +++ b/app/policies/domain_allow_policy.rb @@ -1,6 +1,14 @@ # frozen_string_literal: true class DomainAllowPolicy < ApplicationPolicy + def index? + admin? + end + + def show? + admin? + end + def create? admin? end diff --git a/app/serializers/rest/admin/domain_allow_serializer.rb b/app/serializers/rest/admin/domain_allow_serializer.rb new file mode 100644 index 00000000000..ebdf33815f2 --- /dev/null +++ b/app/serializers/rest/admin/domain_allow_serializer.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class REST::Admin::DomainAllowSerializer < ActiveModel::Serializer + attributes :id, :domain, :created_at + + def id + object.id.to_s + end +end diff --git a/config/routes.rb b/config/routes.rb index 87833539f4d..1b9c5079970 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -570,6 +570,7 @@ Rails.application.routes.draw do end end + resources :domain_allows, only: [:index, :show, :create, :destroy] resources :domain_blocks, only: [:index, :show, :update, :create, :destroy] namespace :trends do diff --git a/spec/controllers/api/v1/admin/domain_allows_controller_spec.rb b/spec/controllers/api/v1/admin/domain_allows_controller_spec.rb new file mode 100644 index 00000000000..edee3ab6c50 --- /dev/null +++ b/spec/controllers/api/v1/admin/domain_allows_controller_spec.rb @@ -0,0 +1,118 @@ +require 'rails_helper' + +RSpec.describe Api::V1::Admin::DomainAllowsController, type: :controller do + render_views + + let(:role) { 'admin' } + let(:user) { Fabricate(:user, role: role) } + let(:scopes) { 'admin:read admin:write' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + + before do + allow(controller).to receive(:doorkeeper_token) { token } + end + + shared_examples 'forbidden for wrong scope' do |wrong_scope| + let(:scopes) { wrong_scope } + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end + + shared_examples 'forbidden for wrong role' do |wrong_role| + let(:role) { wrong_role } + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end + + describe 'GET #index' do + let!(:domain_allow) { Fabricate(:domain_allow) } + + before do + get :index + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + it_behaves_like 'forbidden for wrong role', 'user' + it_behaves_like 'forbidden for wrong role', 'moderator' + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'returns the expected domain allows' do + json = body_as_json + expect(json.length).to eq 1 + expect(json[0][:id].to_i).to eq domain_allow.id + end + end + + describe 'GET #show' do + let!(:domain_allow) { Fabricate(:domain_allow) } + + before do + get :show, params: { id: domain_allow.id } + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + it_behaves_like 'forbidden for wrong role', 'user' + it_behaves_like 'forbidden for wrong role', 'moderator' + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'returns expected domain name' do + json = body_as_json + expect(json[:domain]).to eq domain_allow.domain + end + end + + describe 'DELETE #destroy' do + let!(:domain_allow) { Fabricate(:domain_allow) } + + before do + delete :destroy, params: { id: domain_allow.id } + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + it_behaves_like 'forbidden for wrong role', 'user' + it_behaves_like 'forbidden for wrong role', 'moderator' + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'deletes the block' do + expect(DomainAllow.find_by(id: domain_allow.id)).to be_nil + end + end + + describe 'POST #create' do + let!(:domain_allow) { Fabricate(:domain_allow, domain: 'example.com') } + + before do + post :create, params: { domain: 'foo.bar.com' } + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + it_behaves_like 'forbidden for wrong role', 'user' + it_behaves_like 'forbidden for wrong role', 'moderator' + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'returns expected domain name' do + json = body_as_json + expect(json[:domain]).to eq 'foo.bar.com' + end + + it 'creates a domain block' do + expect(DomainAllow.find_by(domain: 'foo.bar.com')).to_not be_nil + end + end +end From 829b978a89f71ecc76286be510d5ab70642ff014 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 26 Jun 2022 05:08:08 +0200 Subject: [PATCH 052/646] New Crowdin updates (#18671) * New translations en.json (Esperanto) * New translations en.json (Esperanto) * New translations en.json (Esperanto) * New translations en.yml (Korean) * New translations simple_form.en.yml (Korean) * New translations activerecord.en.yml (Korean) * New translations en.yml (German) * New translations en.yml (Dutch) * New translations simple_form.en.yml (Dutch) * New translations activerecord.en.yml (Dutch) * New translations en.yml (Dutch) * New translations en.yml (Icelandic) * New translations en.yml (Icelandic) * New translations simple_form.en.yml (Icelandic) * New translations activerecord.en.yml (Icelandic) * New translations en.yml (Thai) * New translations en.json (Thai) * New translations simple_form.en.yml (Thai) * New translations activerecord.en.yml (Thai) * New translations activerecord.en.yml (Indonesian) * New translations en.yml (Turkish) * New translations en.json (Galician) * New translations en.yml (Slovenian) * New translations en.yml (Galician) * New translations en.json (Esperanto) * New translations en.yml (Esperanto) * New translations en.yml (Esperanto) * New translations en.json (Esperanto) * New translations en.json (Esperanto) * New translations en.yml (Galician) * New translations en.json (Esperanto) * New translations en.json (Esperanto) * New translations en.json (Esperanto) * New translations simple_form.en.yml (Galician) * New translations en.json (Esperanto) * New translations en.json (Esperanto) * New translations en.yml (Esperanto) * New translations en.yml (Esperanto) * New translations en.json (Esperanto) * New translations en.yml (Ukrainian) * New translations en.yml (Ukrainian) * Run `yarn manage:translations` * Run `bundle exec i18n-tasks normalize` Co-authored-by: Yamagishi Kazutoshi --- app/javascript/mastodon/locales/eo.json | 120 ++++++++++++------------ app/javascript/mastodon/locales/gl.json | 2 +- app/javascript/mastodon/locales/th.json | 2 +- config/locales/activerecord.id.yml | 8 ++ config/locales/activerecord.is.yml | 8 ++ config/locales/activerecord.ko.yml | 8 ++ config/locales/activerecord.nl.yml | 8 ++ config/locales/activerecord.th.yml | 8 ++ config/locales/eo.yml | 16 ++-- config/locales/gl.yml | 4 +- config/locales/is.yml | 12 +++ config/locales/ko.yml | 11 +++ config/locales/nl.yml | 5 +- config/locales/simple_form.gl.yml | 4 +- config/locales/simple_form.is.yml | 6 ++ config/locales/simple_form.ko.yml | 6 ++ config/locales/simple_form.nl.yml | 4 + config/locales/simple_form.th.yml | 4 + config/locales/th.yml | 15 +++ config/locales/tr.yml | 3 + config/locales/uk.yml | 16 ++++ 21 files changed, 195 insertions(+), 75 deletions(-) diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 236d2549697..999f34be6ce 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -7,13 +7,13 @@ "account.block_domain": "Bloki domajnon {domain}", "account.blocked": "Blokita", "account.browse_more_on_origin_server": "Vidi pli ĉe la originala profilo", - "account.cancel_follow_request": "Nuligi peton de sekvado", + "account.cancel_follow_request": "Nuligi la demandon de sekvado", "account.direct": "Rekte mesaĝi @{name}", "account.disable_notifications": "Ĉesu sciigi min kiam @{name} mesaĝi", "account.domain_blocked": "Domajno blokita", - "account.edit_profile": "Redakti profilon", - "account.enable_notifications": "Sciigi min kiam @{name} mesaĝi", - "account.endorse": "Montri en profilo", + "account.edit_profile": "Redakti la profilon", + "account.enable_notifications": "Sciigi min kiam @{name} mesaĝas", + "account.endorse": "Rekomendi ĉe via profilo", "account.follow": "Sekvi", "account.followers": "Sekvantoj", "account.followers.empty": "Ankoraŭ neniu sekvas tiun uzanton.", @@ -22,7 +22,7 @@ "account.following_counter": "{count, plural, one {{counter} Sekvato} other {{counter} Sekvatoj}}", "account.follows.empty": "Tiu uzanto ankoraŭ ne sekvas iun.", "account.follows_you": "Sekvas vin", - "account.hide_reblogs": "Kaŝi plusendojn de @{name}", + "account.hide_reblogs": "Kaŝi la plusendojn de @{name}", "account.joined": "Kuniĝis {date}", "account.link_verified_on": "La posedanto de tiu ligilo estis kontrolita je {date}", "account.locked_info": "La privateco de tiu konto estas elektita kiel fermita. La posedanto povas mane akcepti tiun, kiu povas sekvi rin.", @@ -34,7 +34,7 @@ "account.muted": "Silentigita", "account.posts": "Mesaĝoj", "account.posts_with_replies": "Mesaĝoj kaj respondoj", - "account.report": "Signali @{name}", + "account.report": "Raporti @{name}", "account.requested": "Atendo de aprobo. Alklaku por nuligi peton de sekvado", "account.share": "Kundividi la profilon de @{name}", "account.show_reblogs": "Montri la plusendojn de @{name}", @@ -42,62 +42,62 @@ "account.unblock": "Malbloki @{name}", "account.unblock_domain": "Malbloki {domain}", "account.unblock_short": "Malbloki", - "account.unendorse": "Ne montri en profilo", + "account.unendorse": "Ne rekomendi ĉe la profilo", "account.unfollow": "Ne plu sekvi", - "account.unmute": "Malsilentigi @{name}", - "account.unmute_notifications": "Malsilentigi sciigojn de @{name}", - "account.unmute_short": "Malsilentigi", - "account_note.placeholder": "Alklaku por aldoni noton", + "account.unmute": "Ne plu silentigi @{name}", + "account.unmute_notifications": "Reebligi la sciigojn de @{name}", + "account.unmute_short": "Ne plu silentigi", + "account_note.placeholder": "Klaku por aldoni noton", "admin.dashboard.daily_retention": "User retention rate by day after sign-up", "admin.dashboard.monthly_retention": "User retention rate by month after sign-up", "admin.dashboard.retention.average": "Averaĝa", - "admin.dashboard.retention.cohort": "Registriĝo monato", + "admin.dashboard.retention.cohort": "Monato de registriĝo", "admin.dashboard.retention.cohort_size": "Novaj uzantoj", "alert.rate_limited.message": "Bonvolu reprovi post {retry_time, time, medium}.", "alert.rate_limited.title": "Mesaĝkvante limigita", "alert.unexpected.message": "Neatendita eraro okazis.", - "alert.unexpected.title": "Ups!", + "alert.unexpected.title": "Aj!", "announcement.announcement": "Anonco", "attachments_list.unprocessed": "(neprilaborita)", "autosuggest_hashtag.per_week": "{count} semajne", "boost_modal.combo": "Vi povas premi {combo} por preterpasi sekvafoje", "bundle_column_error.body": "Io misfunkciis en la ŝargado de ĉi tiu elemento.", - "bundle_column_error.retry": "Bonvolu reprovi", - "bundle_column_error.title": "Reta eraro", + "bundle_column_error.retry": "Provu refoje", + "bundle_column_error.title": "Eraro de reto", "bundle_modal_error.close": "Fermi", "bundle_modal_error.message": "Io misfunkciis en la ŝargado de ĉi tiu elemento.", - "bundle_modal_error.retry": "Bonvolu reprovi", + "bundle_modal_error.retry": "Provu refoje", "column.blocks": "Blokitaj uzantoj", "column.bookmarks": "Legosignoj", "column.community": "Loka templinio", "column.direct": "Rektaj mesaĝoj", "column.directory": "Trarigardi profilojn", "column.domain_blocks": "Blokitaj domajnoj", - "column.favourites": "Stelumoj", + "column.favourites": "Preferaĵoj", "column.follow_requests": "Demandoj de sekvado", "column.home": "Hejmo", "column.lists": "Listoj", "column.mutes": "Silentigitaj uzantoj", "column.notifications": "Sciigoj", "column.pins": "Alpinglitaj mesaĝoj", - "column.public": "Fratara templinio", + "column.public": "Federata templinio", "column_back_button.label": "Reveni", - "column_header.hide_settings": "Kaŝi agordojn", + "column_header.hide_settings": "Kaŝi la agordojn", "column_header.moveLeft_settings": "Movi kolumnon maldekstren", "column_header.moveRight_settings": "Movi kolumnon dekstren", "column_header.pin": "Alpingli", - "column_header.show_settings": "Montri agordojn", + "column_header.show_settings": "Montri la agordojn", "column_header.unpin": "Depingli", - "column_subheading.settings": "Agordado", + "column_subheading.settings": "Agordoj", "community.column_settings.local_only": "Nur loka", "community.column_settings.media_only": "Nur aŭdovidaĵoj", - "community.column_settings.remote_only": "Nur malproksima", + "community.column_settings.remote_only": "Nur fora", "compose.language.change": "Ŝanĝi lingvon", "compose.language.search": "Serĉi lingvojn...", "compose_form.direct_message_warning_learn_more": "Lerni pli", - "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", + "compose_form.encryption_warning": "La mesaĵoj en Mastodono ne estas ĉifrita de tutvojo. Ne kundividu sentemajn informojn ĉe Mastodono.", "compose_form.hashtag_warning": "Ĉi tiu mesaĝo ne estos listigita per ajna kradvorto. Nur publikaj mesaĝoj estas serĉeblaj per kradvortoj.", - "compose_form.lock_disclaimer": "Via konta ne estas {locked}. Iu ajn povas sekvi vin por vidi viajn mesaĝojn, kiuj estas nur por sekvantoj.", + "compose_form.lock_disclaimer": "Via konto ne estas {locked}. Iu ajn povas sekvi vin por vidi viajn mesaĝojn nur al la sekvantoj.", "compose_form.lock_disclaimer.lock": "ŝlosita", "compose_form.placeholder": "Kion vi pensas?", "compose_form.poll.add_option": "Aldoni elekteblon", @@ -116,7 +116,7 @@ "compose_form.spoiler.unmarked": "Teksto ne kaŝita", "compose_form.spoiler_placeholder": "Skribu vian averton ĉi tie", "confirmation_modal.cancel": "Nuligi", - "confirmations.block.block_and_report": "Bloki kaj signali", + "confirmations.block.block_and_report": "Bloki kaj raporti", "confirmations.block.confirm": "Bloki", "confirmations.block.message": "Ĉu vi certas, ke vi volas bloki {name}?", "confirmations.delete.confirm": "Forigi", @@ -124,7 +124,7 @@ "confirmations.delete_list.confirm": "Forigi", "confirmations.delete_list.message": "Ĉu vi certas, ke vi volas porĉiame forigi ĉi tiun liston?", "confirmations.discard_edit_media.confirm": "Ne konservi", - "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", + "confirmations.discard_edit_media.message": "Vi havas nekonservitan ŝanĝon de la priskribo aŭ de la antaŭvido de aŭdvidaĵo, ĉu vi forigu ĝin?", "confirmations.domain_block.confirm": "Bloki la tutan domajnon", "confirmations.domain_block.message": "Ĉu vi vere, vere certas, ke vi volas tute bloki {domain}? Plej ofte, trafa blokado kaj silentigado sufiĉas kaj preferindas. Vi ne vidos enhavon de tiu domajno en publika templinio aŭ en viaj sciigoj. Viaj sekvantoj de tiu domajno estos forigitaj.", "confirmations.logout.confirm": "Adiaŭi", @@ -133,7 +133,7 @@ "confirmations.mute.explanation": "Ĉi-tio kaŝos mesaĝojn el ili kaj mesaĝojn kiuj mencias ilin, sed ili ankoraŭ rajtos vidi viajn mesaĝojn kaj sekvi vin.", "confirmations.mute.message": "Ĉu vi certas, ke vi volas silentigi {name}?", "confirmations.redraft.confirm": "Forigi kaj reskribi", - "confirmations.redraft.message": "Ĉu vi certas ke vi volas forigi tiun mesaĝon kaj reskribi ĝin? Ĉiuj diskonigoj kaj stelumoj estos perditaj, kaj respondoj al la originala mesaĝo estos senparentaj.", + "confirmations.redraft.message": "Ĉu vi certas ke vi volas forigi kaj reskribi la mesaĝon? Ĝiaj preferitaĵoj kaj ĝiaj plusendoj estos perditaj, kaj la respondoj al la originala mesaĝo estos orfaj.", "confirmations.reply.confirm": "Respondi", "confirmations.reply.message": "Respondi nun anstataŭigos la mesaĝon, kiun vi nun skribas. Ĉu vi certas, ke vi volas daŭrigi?", "confirmations.unfollow.confirm": "Ne plu sekvi", @@ -172,8 +172,8 @@ "empty_column.direct": "Vi ankoraŭ ne havas rektan mesaĝon. Kiam vi sendos aŭ ricevos iun, ĝi aperos ĉi tie.", "empty_column.domain_blocks": "Ankoraŭ neniu domajno estas blokita.", "empty_column.explore_statuses": "Nenio tendencas nun. Rekontrolu poste!", - "empty_column.favourited_statuses": "Vi ankoraŭ ne stelumis mesaĝon. Kiam vi stelumos iun, tiu aperos ĉi tie.", - "empty_column.favourites": "Ankoraŭ neniu stelumis tiun mesaĝon. Kiam iu faros tion, tiu aperos ĉi tie.", + "empty_column.favourited_statuses": "Vi ankoraŭ ne havas mesaĝon en la preferaĵoj. Kiam vi aldonas ion, ĝi aperos ĉi tie.", + "empty_column.favourites": "Ankoraŭ neniu preferis la mesaĝon. Kiam iu faros ĉi tion, ili aperos ĉi tie.", "empty_column.follow_recommendations": "Ŝajnas, ke neniuj sugestoj povis esti generitaj por vi. Vi povas provi uzi serĉon por serĉi homojn, kiujn vi eble konas, aŭ esplori tendencajn kradvortojn.", "empty_column.follow_requests": "Vi ne ankoraŭ havas iun peton de sekvado. Kiam vi ricevos unu, ĝi aperos ĉi tie.", "empty_column.hashtag": "Ankoraŭ estas nenio per ĉi tiu kradvorto.", @@ -198,10 +198,10 @@ "explore.trending_tags": "Kradvortoj", "follow_recommendations.done": "Farita", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", - "follow_recommendations.lead": "La mesaĝoj de personoj kiujn vi sekvas, aperos kronologie en via abonfluo. Ne timu erari, vi povas ĉesi sekvi facile iam ajn!", + "follow_recommendations.lead": "La mesaĝoj de personoj kiujn vi sekvas, kronologie aperos en via hejma templinio. Ne timu erari, vi povas ĉesi sekvi facile iam ajn!", "follow_request.authorize": "Rajtigi", "follow_request.reject": "Rifuzi", - "follow_requests.unlocked_explanation": "Kvankam via konto ne estas ŝlosita, la teamo de {domain} pensis ke vi eble volas kontroli la demandojn de sekvado de ĉi tiuj kontoj permane.", + "follow_requests.unlocked_explanation": "Kvankam via konto ne estas ŝlosita, la teamo de {domain} pensis ke vi eble volas permane kontroli la demandojn de sekvado de ĉi tiuj kontoj.", "generic.saved": "Konservita", "getting_started.developers": "Programistoj", "getting_started.directory": "Profilujo", @@ -237,9 +237,9 @@ "keyboard_shortcuts.direct": "malfermi la kolumnon de rektaj mesaĝoj", "keyboard_shortcuts.down": "iri suben en la listo", "keyboard_shortcuts.enter": "malfermi mesaĝon", - "keyboard_shortcuts.favourite": "stelumi", - "keyboard_shortcuts.favourites": "malfermi la liston de stelumoj", - "keyboard_shortcuts.federated": "Malfermi la frataran templinion", + "keyboard_shortcuts.favourite": "Aldoni la mesaĝon al preferaĵoj", + "keyboard_shortcuts.favourites": "Malfermi la liston de preferaĵoj", + "keyboard_shortcuts.federated": "Malfermi la federatan templinion", "keyboard_shortcuts.heading": "Klavaraj mallongigoj", "keyboard_shortcuts.home": "Malfermi la hejman templinion", "keyboard_shortcuts.hotkey": "Rapidklavo", @@ -279,7 +279,7 @@ "lists.replies_policy.followed": "Iu sekvanta uzanto", "lists.replies_policy.list": "Membroj de la listo", "lists.replies_policy.none": "Neniu", - "lists.replies_policy.title": "Montri respondon al:", + "lists.replies_policy.title": "Montri respondojn al:", "lists.search": "Serĉi inter la homoj, kiujn vi sekvas", "lists.subheading": "Viaj listoj", "load_pending": "{count,plural, one {# nova elemento} other {# novaj elementoj}}", @@ -312,10 +312,10 @@ "navigation_bar.personal": "Persone", "navigation_bar.pins": "Alpinglitaj mesaĝoj", "navigation_bar.preferences": "Preferoj", - "navigation_bar.public_timeline": "Fratara templinio", + "navigation_bar.public_timeline": "Federata templinio", "navigation_bar.security": "Sekureco", "notification.admin.sign_up": "{name} registris", - "notification.favourite": "{name} stelumis vian mesaĝon", + "notification.favourite": "{name} preferis vian mesaĝon", "notification.follow": "{name} eksekvis vin", "notification.follow_request": "{name} petis sekvi vin", "notification.mention": "{name} menciis vin", @@ -328,10 +328,10 @@ "notifications.clear_confirmation": "Ĉu vi certas, ke vi volas porĉiame forviŝi ĉiujn viajn sciigojn?", "notifications.column_settings.admin.sign_up": "Novaj registriĝoj:", "notifications.column_settings.alert": "Retumilaj sciigoj", - "notifications.column_settings.favourite": "Stelumoj:", + "notifications.column_settings.favourite": "Preferaĵoj:", "notifications.column_settings.filter_bar.advanced": "Montri ĉiujn kategoriojn", "notifications.column_settings.filter_bar.category": "Rapida filtra breto", - "notifications.column_settings.filter_bar.show_bar": "Montru filtrilon", + "notifications.column_settings.filter_bar.show_bar": "Montri la breton de filtrilo", "notifications.column_settings.follow": "Novaj sekvantoj:", "notifications.column_settings.follow_request": "Novaj petoj de sekvado:", "notifications.column_settings.mention": "Mencioj:", @@ -346,7 +346,7 @@ "notifications.column_settings.update": "Redaktoj:", "notifications.filter.all": "Ĉiuj", "notifications.filter.boosts": "Plusendoj", - "notifications.filter.favourites": "Stelumoj", + "notifications.filter.favourites": "Preferaĵoj", "notifications.filter.follows": "Sekvoj", "notifications.filter.mentions": "Mencioj", "notifications.filter.polls": "Balotenketaj rezultoj", @@ -381,7 +381,7 @@ "privacy.unlisted.short": "Nelistigita", "refresh": "Refreŝigu", "regeneration_indicator.label": "Ŝargado…", - "regeneration_indicator.sublabel": "Via hejma fluo pretiĝas!", + "regeneration_indicator.sublabel": "Via abonfluo estas preparata!", "relative_time.days": "{number}t", "relative_time.full.days": "{number, plural, one {# day} other {# days}} ago", "relative_time.full.hours": "{number, plural, one {# hour} other {# hours}} ago", @@ -397,18 +397,18 @@ "report.block": "Bloki", "report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.", "report.categories.other": "Aliaj", - "report.categories.spam": "Spamo", + "report.categories.spam": "Trudaĵo", "report.categories.violation": "Content violates one or more server rules", "report.category.subtitle": "Elektu la plej bonan kongruon", "report.category.title": "Diru al ni kio okazas pri ĉi tiu {type}", "report.category.title_account": "profilo", "report.category.title_status": "afiŝo", "report.close": "Farita", - "report.comment.title": "Is there anything else you think we should know?", + "report.comment.title": "Ĉu estas io alia kion vi pensas ke ni devas scii?", "report.forward": "Plusendi al {target}", - "report.forward_hint": "La konto estas en alia servilo. Ĉu sendi sennomigitan kopion de la signalo ankaŭ tien?", + "report.forward_hint": "La konto estas de alia servilo. Ĉu vi volas sendi anoniman kopion de la informo ankaŭ al tie?", "report.mute": "Silentigi", - "report.mute_explanation": "Vi ne vidos iliajn afiŝojn. Ili ankoraŭ povas sekvi vin kaj vidi viajn afiŝojn, kaj ne scios ke si estas silentigitaj.", + "report.mute_explanation": "Vi ne vidos iliajn afiŝojn. Ili ankoraŭ povas sekvi vin kaj vidi viajn afiŝojn, kaj ne scios ke ili estas silentigitaj.", "report.next": "Sekva", "report.placeholder": "Pliaj komentoj", "report.reasons.dislike": "Mi ne ŝatas ĝin", @@ -417,20 +417,20 @@ "report.reasons.other_description": "La problemo ne taŭgas en aliaj kategorioj", "report.reasons.spam": "Ĝi estas trudaĵo", "report.reasons.spam_description": "Malicious links, fake engagement, or repetitive replies", - "report.reasons.violation": "Ĝi malrespektas servilajn regulojn", + "report.reasons.violation": "Ĝi malobservas la regulojn de la servilo", "report.reasons.violation_description": "You are aware that it breaks specific rules", "report.rules.subtitle": "Elektu ĉiujn, kiuj validas", "report.rules.title": "Kiuj reguloj estas malobservataj?", "report.statuses.subtitle": "Elektu ĉiujn, kiuj validas", "report.statuses.title": "Are there any posts that back up this report?", "report.submit": "Sendi", - "report.target": "Signali {target}", + "report.target": "Raporto pri {target}", "report.thanks.take_action": "Here are your options for controlling what you see on Mastodon:", "report.thanks.take_action_actionable": "While we review this, you can take action against @{name}:", "report.thanks.title": "Ĉu vi ne volas vidi ĉi tion?", "report.thanks.title_actionable": "Dankon pro raporti, ni esploros ĉi tion.", "report.unfollow": "Malsekvi @{name}", - "report.unfollow_explanation": "Vi estas sekvanta ĉi tiun konton. Por ne plu vidi ties afiŝojn en via hejma templinio, malsekvu ilin.", + "report.unfollow_explanation": "Vi sekvas ĉi tiun konton. Por ne plu vidi ĝiajn abonfluojn en via hejma templinio, ĉesu sekvi ĝin.", "search.placeholder": "Serĉi", "search_popout.search_format": "Detala serĉo", "search_popout.tips.full_text": "Simplaj tekstoj montras la mesaĝojn, kiujn vi skribis, stelumis, diskonigis, aŭ en kiuj vi estis menciita, sed ankaŭ kongruajn uzantnomojn, montratajn nomojn, kaj kradvortojn.", @@ -459,7 +459,7 @@ "status.edited": "Redaktita {date}", "status.edited_x_times": "Redactita {count, plural, one {{count} fojon} other {{count} fojojn}}", "status.embed": "Enkorpigi", - "status.favourite": "Stelumi", + "status.favourite": "Preferaĵo", "status.filtered": "Filtrita", "status.history.created": "{name} kreis {date}", "status.history.edited": "{name} redaktis {date}", @@ -469,8 +469,8 @@ "status.more": "Pli", "status.mute": "Silentigi @{name}", "status.mute_conversation": "Silentigi konversacion", - "status.open": "Grandigi ĉi tiun mesaĝon", - "status.pin": "Alpingli profile", + "status.open": "Disvolvi la mesaĝon", + "status.pin": "Alpingli al la profilo", "status.pinned": "Alpinglita mesaĝo", "status.read_more": "Legi pli", "status.reblog": "Plusendi", @@ -481,20 +481,20 @@ "status.remove_bookmark": "Forigi legosignon", "status.reply": "Respondi", "status.replyAll": "Respondi al la fadeno", - "status.report": "Signali @{name}", + "status.report": "Raporti @{name}", "status.sensitive_warning": "Tikla enhavo", - "status.share": "Diskonigi", - "status.show_less": "Malgrandigi", - "status.show_less_all": "Malgrandigi ĉiujn", - "status.show_more": "Grandigi", - "status.show_more_all": "Malfoldi ĉiun", - "status.show_thread": "Montri la fadenon", + "status.share": "Kundividi", + "status.show_less": "Montri malpli", + "status.show_less_all": "Montri malpli ĉiun", + "status.show_more": "Montri pli", + "status.show_more_all": "Montri pli ĉiun", + "status.show_thread": "Montri la mesaĝaron", "status.uncached_media_warning": "Nedisponebla", "status.unmute_conversation": "Malsilentigi la konversacion", "status.unpin": "Depingli de profilo", "suggestions.dismiss": "Forigi la proponon", "suggestions.header": "Vi povus interesiĝi pri…", - "tabs_bar.federated_timeline": "Fratara templinio", + "tabs_bar.federated_timeline": "Federata", "tabs_bar.home": "Hejmo", "tabs_bar.local_timeline": "Loka templinio", "tabs_bar.notifications": "Sciigoj", @@ -539,7 +539,7 @@ "video.close": "Fermi la videon", "video.download": "Elŝuti dosieron", "video.exit_fullscreen": "Eksigi plenekrana", - "video.expand": "Grandigi la videon", + "video.expand": "Pligrandigi la videon", "video.fullscreen": "Igi plenekrana", "video.hide": "Kaŝi la videon", "video.mute": "Silentigi", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 0a6aac28752..01fd9a567ef 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -8,7 +8,7 @@ "account.blocked": "Bloqueada", "account.browse_more_on_origin_server": "Busca máis no perfil orixinal", "account.cancel_follow_request": "Desbotar solicitude de seguimento", - "account.direct": "Mensaxe directa @{name}", + "account.direct": "Mensaxe directa a @{name}", "account.disable_notifications": "Deixar de notificarme cando @{name} publica", "account.domain_blocked": "Dominio agochado", "account.edit_profile": "Editar perfil", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 5bc08533ee5..b4e85be06e8 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "เอาตัวเลือกนี้ออก", "compose_form.poll.switch_to_multiple": "เปลี่ยนการสำรวจความคิดเห็นเป็นอนุญาตหลายตัวเลือก", "compose_form.poll.switch_to_single": "เปลี่ยนการสำรวจความคิดเห็นเป็นอนุญาตตัวเลือกเดี่ยว", - "compose_form.publish": "Publish", + "compose_form.publish": "เผยแพร่", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "บันทึกการเปลี่ยนแปลง", "compose_form.sensitive.hide": "{count, plural, other {ทำเครื่องหมายสื่อว่าละเอียดอ่อน}}", diff --git a/config/locales/activerecord.id.yml b/config/locales/activerecord.id.yml index dc90c132202..88fdb3f756d 100644 --- a/config/locales/activerecord.id.yml +++ b/config/locales/activerecord.id.yml @@ -21,6 +21,14 @@ id: username: invalid: hanya boleh berisi huruf, angka, dan garis bawah reserved: sudah dipesan + admin/webhook: + attributes: + url: + invalid: bukan URL valid + doorkeeper/application: + attributes: + website: + invalid: bukan URL valid status: attributes: reblog: diff --git a/config/locales/activerecord.is.yml b/config/locales/activerecord.is.yml index 8ecb02e7449..75c18c6a37e 100644 --- a/config/locales/activerecord.is.yml +++ b/config/locales/activerecord.is.yml @@ -21,6 +21,14 @@ is: username: invalid: má aðeins innihalda bókstafi, tölur og undirstrik reserved: er frátekið + admin/webhook: + attributes: + url: + invalid: er ekki gild vefslóð + doorkeeper/application: + attributes: + website: + invalid: er ekki gild vefslóð status: attributes: reblog: diff --git a/config/locales/activerecord.ko.yml b/config/locales/activerecord.ko.yml index 07f8a39f77d..4db8d73af8d 100644 --- a/config/locales/activerecord.ko.yml +++ b/config/locales/activerecord.ko.yml @@ -21,6 +21,14 @@ ko: username: invalid: 영문자, 숫자, _만 사용 가능 reserved: 이미 예약되어 있습니다 + admin/webhook: + attributes: + url: + invalid: 올바른 URL이 아닙니다 + doorkeeper/application: + attributes: + website: + invalid: 올바른 URL이 아닙니다 status: attributes: reblog: diff --git a/config/locales/activerecord.nl.yml b/config/locales/activerecord.nl.yml index b5a12200117..9d3adf29054 100644 --- a/config/locales/activerecord.nl.yml +++ b/config/locales/activerecord.nl.yml @@ -21,6 +21,14 @@ nl: username: invalid: alleen letters, nummers en underscores reserved: gereserveerd + admin/webhook: + attributes: + url: + invalid: is een ongeldige URL + doorkeeper/application: + attributes: + website: + invalid: is een ongeldige URL status: attributes: reblog: diff --git a/config/locales/activerecord.th.yml b/config/locales/activerecord.th.yml index 26604ba5fe3..60908144f80 100644 --- a/config/locales/activerecord.th.yml +++ b/config/locales/activerecord.th.yml @@ -21,6 +21,14 @@ th: username: invalid: ต้องมีเฉพาะตัวอักษร, ตัวเลข และขีดล่างเท่านั้น reserved: ถูกสงวนไว้ + admin/webhook: + attributes: + url: + invalid: ไม่ใช่ URL ที่ถูกต้อง + doorkeeper/application: + attributes: + website: + invalid: ไม่ใช่ URL ที่ถูกต้อง status: attributes: reblog: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index d287fb59065..9e1eaaffa8a 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -22,9 +22,9 @@ eo: federation_hint_html: Per konto ĉe %{instance}, vi povos sekvi homojn ĉe iu ajn Mastodon nodo kaj preter. get_apps: Provu telefonan aplikaĵon hosted_on: "%{domain} estas nodo de Mastodon" - instance_actor_flash: | - Ĉi tiu konto estas virtuala ulo uzata por reprezenti la servilon mem kaj ne iun apartan uzanton. - Ĝi estas uzata por frataraj celoj kaj ĝi ne devus esti blokita krom se vi volas bloki la tutan servilon, tiuokaze vi devus uzi domajnan blokadon. + instance_actor_flash: 'Ĉi tiu konto estas virtuala aganto uzata por reprezenti la servilon mem kaj neniun individuan uzanton. Ĝi estas uzata por celoj de la federaĵo kaj devas ne esti brokita se vi ne volas bloki la tutan servilon, tiuokaze vi devas uzi blokadon de domajno. + + ' learn_more: Lerni pli logout_before_registering: Vi jam salutis. privacy_policy: Privateca politiko @@ -179,8 +179,8 @@ eo: sensitized: markita tikla shared_inbox_url: URL de kunhavigita leterkesto show: - created_reports: Kreitaj signaloj - targeted_reports: Signalitaj de aliaj + created_reports: Kreitaj raportoj + targeted_reports: Raporitaj de alia silence: Kaŝi silenced: Silentigita statuses: Mesaĝoj @@ -1164,10 +1164,10 @@ eo: one: "%{count} voĉdono" other: "%{count} voĉdonoj" vote: Voĉdoni - show_more: Malfoldi + show_more: Montri pli show_newer: Montri pli novajn show_older: Montri pli malnovajn - show_thread: Montri la fadenon + show_thread: Montri la mesaĝaron sign_in_to_participate: Ensaluti por partopreni en la konversacio title: "%{name}: “%{quote}”" visibilities: @@ -1255,7 +1255,7 @@ eo: review_preferences_action: Ŝanĝi preferojn review_preferences_step: Estu certa ke vi agordis viajn preferojn, kiel kiujn retmesaĝojn vi ŝatus ricevi, aŭ kiun dekomencan privatecan nivelon vi ŝatus ke viaj mesaĝoj havu. Se tio ne ĝenas vin, vi povas ebligi aŭtomatan ekigon de GIF-oj. subject: Bonvenon en Mastodon - tip_federated_timeline: La fratara templinio estas antaŭvido de la reto de Mastodon. Sed ĝi enhavas nur homojn, kiuj estas sekvataj de aliaj homoj de via nodo, do ĝi ne estas kompleta. + tip_federated_timeline: La federata templinio estas rekta vido de la reto de Mastodon. Sed ĝi inkluzivas nur personojn kiujn via najbaroj abonas, do ĝi ne estas kompleta. tip_following: Vi dekomence sekvas la administrantojn de via servilo. Por trovi pli da interesaj homoj, rigardu la lokan kaj frataran templiniojn. tip_local_timeline: La loka templinio estas antaŭvido de la homoj en %{instance}. Ĉi tiuj estas viaj apudaj najbaroj! tip_mobile_webapp: Se via telefona retumilo proponas al vi aldoni Mastodon al via hejma ekrano, vi povas ricevi puŝsciigojn. Tio multmaniere funkcias kiel operaciuma aplikaĵo! diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 5b303b08f1b..10454b5fde3 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -941,7 +941,7 @@ gl: warning: Ten moito tino con estos datos. Non os compartas nunca con ninguén! your_token: O seu testemuño de acceso auth: - apply_for_account: Solicite un convite + apply_for_account: Solicita un convite change_password: Contrasinal checkbox_agreement_html: Acepto as regras do servidor e os termos do servizo checkbox_agreement_without_rules_html: Acepto os termos do servizo @@ -954,7 +954,7 @@ gl: didnt_get_confirmation: Non recibiches as instruccións de confirmación? dont_have_your_security_key: "¿Non tes a túa chave de seguridade?" forgot_password: Non lembras o contrasinal? - invalid_reset_password_token: O testemuño para restablecer o contrasinal non é válido ou caducou. Por favor solicite un novo. + invalid_reset_password_token: O token para restablecer o contrasinal non é válido ou caducou. Por favor solicita un novo. link_to_otp: Escribe o código do segundo factor do móbil ou un código de recuperación link_to_webauth: Usa o teu dispositivo de chave de seguridade log_in_with: Accede con diff --git a/config/locales/is.yml b/config/locales/is.yml index f9d408822f8..5978ac41c36 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -853,13 +853,25 @@ is: empty: Þú hefur ekki enn skilgreint neinar aðvaranaforstillingar. title: Sýsla með forstilltar aðvaranir webhooks: + add_new: Bæta við endapunkti delete: Eyða + description_html: "webhook-vefkrækja gerir Mastodon kleift að ýta rauntíma-tilkynningum um valda atburði til þinna eigin forrita, þannig að þau forrit getir sett sjálfvirk viðbrögð í gang." disable: Gera óvirkt disabled: Óvirkt + edit: Breyta endapunkti + empty: Þú ert ekki enn búin/n að stilla neina endapunkta á webhook-vefkrækjum. enable: Virkja enabled: Virkt + enabled_events: + one: 1 virkjaður atburður + other: "%{count} virkjaðir atburðir" events: Atburðir + new: Ný webhook-vefkrækja + rotate_secret: Skipta um leyniteikn + secret: Leyniteikn undirritunar status: Staða + title: Webhook-vefkrækjur + webhook: Webhook-vefkrækja admin_mailer: new_appeal: actions: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 65bc57e3ae2..2397b63e587 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -840,11 +840,22 @@ ko: webhooks: add_new: 엔드포인트 추가 delete: 삭제 + description_html: "웹훅은 선택한 이벤트에 대해 마스토돈이 실시간 알림을 각자의 응용프로그램에게 보냄으로서, 당신의 응용프로그램이 자동으로 반응을 할 수 있도록 만듧니다." disable: 비활성화 disabled: 비활성화됨 edit: 엔드포인트 수정 + empty: 아직 설정한 웹훅 엔드포인트가 없습니다. enable: 활성화 enabled: 활성화됨 + enabled_events: + other: "%{count}개의 이벤트가 활성화되어 있습니다" + events: 이벤트 + new: 새 웹훅 + rotate_secret: 비밀키 회전 + secret: 비밀키 서명 + status: 상태 + title: 웹훅 + webhook: 웹훅 admin_mailer: new_appeal: actions: diff --git a/config/locales/nl.yml b/config/locales/nl.yml index db49efbb9ea..b5040153e12 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -36,7 +36,7 @@ nl: one: toot other: berichten status_count_before: Zij schreven - tagline: Gedecentraliseerd sociaal netwerk + tagline: Decentraal sociaal netwerk terms: Gebruiksvoorwaarden unavailable_content: Gemodereerde servers unavailable_content_description: @@ -1306,6 +1306,9 @@ nl: subject: Jouw archief staat klaar om te worden gedownload title: Archief ophalen warning: + explanation: + mark_statuses_as_sensitive: Sommige van jouw berichten zijn als gevoelig gemarkeerd door de moderatoren van %{instance}. Dit betekent dat mensen op de media in de berichten moeten klikken/tikken om deze weer te geven. Je kunt media in de toekomst ook zelf als gevoelig markeren. + sensitive: Vanaf nu worden al jouw geüploade media als gevoelig gemarkeerd en verborgen achter een waarschuwing. subject: disable: Jouw account %{acct} is bevroren none: Waarschuwing voor %{acct} diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index 28d0986309f..e7fc36c6477 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -57,7 +57,7 @@ gl: setting_hide_network: Non se mostrará no teu perfil quen te segue e a quen estás a seguir setting_noindex: Afecta ao teu perfil público e páxinas de publicación setting_show_application: A aplicación que estás a utilizar para enviar publicacións mostrarase na vista detallada da publicación - setting_use_blurhash: Os gradientes toman as cores da imaxe oculta pero esborranchando todos os detalles + setting_use_blurhash: Os gradientes toman as cores da imaxe oculta pero esvaecendo tódolos detalles setting_use_pending_items: Agochar actualizacións da cronoloxía tras un click no lugar de desprazar automáticamente os comentarios username: O teu nome de usuaria será único en %{domain} whole_word: Se a chave ou frase de paso é só alfanumérica, só se aplicará se concorda a palabra completa @@ -177,7 +177,7 @@ gl: setting_theme: Decorado da instancia setting_trends: Mostrar as tendencias de hoxe setting_unfollow_modal: Solicitar confirmación antes de deixar de seguir alguén - setting_use_blurhash: Mostrar gradientes coloridos para medios ocultos + setting_use_blurhash: Mostrar gradientes coloridos para multimedia oculto setting_use_pending_items: Modo lento severity: Severidade sign_in_token_attempt: Código de seguridade diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml index 528e9a52a7c..638458dae8b 100644 --- a/config/locales/simple_form.is.yml +++ b/config/locales/simple_form.is.yml @@ -91,6 +91,9 @@ is: name: Þú getur aðeins breytt stafstöði mill há-/lágstafa, til gæmis til að gera þetta læsilegra user: chosen_languages: Þegar merkt er við þetta, birtast einungis færslur á völdum tungumálum á opinberum tímalínum + webhook: + events: Veldu atburði sem á að senda + url: Hvert atburðir verða sendir labels: account: fields: @@ -219,6 +222,9 @@ is: name: Myllumerki trendable: Leyfa þessu myllumerki að birtast undir tilhneigingum usable: Leyfa færslum að nota þetta myllumerki + webhook: + events: Virkjaðir atburðir + url: Slóð á endapunkt 'no': Nei recommended: Mælt með required: diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index 71d4058c82b..d79b7951300 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -91,6 +91,9 @@ ko: name: 읽기 쉽게하기 위한 글자의 대소문자만 변경할 수 있습니다. user: chosen_languages: 체크하면, 선택 된 언어로 작성된 게시물들만 공개 타임라인에 보여집니다 + webhook: + events: 전송할 이벤트를 선택하세요 + url: 이벤트가 어디로 전송될 지 labels: account: fields: @@ -219,6 +222,9 @@ ko: name: 해시태그 trendable: 이 해시태그가 유행에 보여지도록 허용 usable: 이 해시태그를 게시물에 사용 가능하도록 허용 + webhook: + events: 활성화된 이벤트 + url: 엔드포인트 URL 'no': 아니오 recommended: 추천함 required: diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index 33968b50854..09dd2bd1bb1 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -201,6 +201,8 @@ nl: mention: Wanneer iemand jou heeft vermeld pending_account: Wanneer een nieuw account moet worden beoordeeld reblog: Wanneer iemand jouw bericht heeft geboost + report: Nieuwe rapportage is ingediend + trending_tag: Nieuwe trend vereist beoordeling rule: text: Regel tag: @@ -208,6 +210,8 @@ nl: name: Hashtag trendable: Toestaan dat deze hashtag onder trends te zien valt usable: Toestaan dat deze hashtag in berichten gebruikt mag worden + webhook: + url: Eindpunt URL 'no': Nee recommended: Aanbevolen required: diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index 8df50ab3a10..a33e87593d7 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -88,6 +88,8 @@ th: name: คุณสามารถเปลี่ยนได้เฉพาะตัวพิมพ์ใหญ่เล็กของตัวอักษรเท่านั้น ตัวอย่างเช่น เพื่อทำให้ตัวอักษรอ่านได้ง่ายขึ้น user: chosen_languages: เมื่อกาเครื่องหมาย จะแสดงเฉพาะโพสต์ในภาษาที่เลือกในเส้นเวลาสาธารณะเท่านั้น + webhook: + events: เลือกเหตุการณ์ที่จะส่ง labels: account: fields: @@ -214,6 +216,8 @@ th: name: แฮชแท็ก trendable: อนุญาตให้แฮชแท็กนี้ปรากฏภายใต้แนวโน้ม usable: อนุญาตให้โพสต์ใช้แฮชแท็กนี้ + webhook: + url: URL ปลายทาง 'no': ไม่ recommended: แนะนำ required: diff --git a/config/locales/th.yml b/config/locales/th.yml index c5f70753dc6..57fbc1fddb0 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -34,6 +34,7 @@ th: status_count_after: other: โพสต์ status_count_before: ผู้เผยแพร่ + tagline: เครือข่ายสังคมแบบกระจายศูนย์ terms: เงื่อนไขการให้บริการ unavailable_content: เซิร์ฟเวอร์ที่มีการควบคุม unavailable_content_description: @@ -782,6 +783,16 @@ th: edit_preset: แก้ไขคำเตือนที่ตั้งไว้ล่วงหน้า empty: คุณยังไม่ได้กำหนดคำเตือนที่ตั้งไว้ล่วงหน้าใด ๆ title: จัดการคำเตือนที่ตั้งไว้ล่วงหน้า + webhooks: + add_new: เพิ่มปลายทาง + delete: ลบ + disable: ปิดใช้งาน + disabled: ปิดใช้งานอยู่ + edit: แก้ไขปลายทาง + enable: เปิดใช้งาน + enabled: ใช้งานอยู่ + events: เหตุการณ์ + status: สถานะ admin_mailer: new_appeal: actions: @@ -1248,6 +1259,10 @@ th: reports: errors: invalid_rules: ไม่ได้อ้างอิงกฎที่ถูกต้อง + rss: + content_warning: 'คำเตือนเนื้อหา:' + descriptions: + account: โพสต์สาธารณะจาก @%{acct} scheduled_statuses: too_soon: วันที่ตามกำหนดการต้องอยู่ในอนาคต sessions: diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 9159acba32c..7bd5723c43c 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -862,6 +862,9 @@ tr: empty: Henüz yapılandırılmış bir web kancanız yok. enable: Etkinleştir enabled: Etkin + enabled_events: + one: 1 aktif etkinlik + other: "%{count} aktif etkinlik" events: Olaylar new: Yeni web kancası rotate_secret: Gizi döndür diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 53a4b356734..2612237b885 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -646,6 +646,7 @@ uk: placeholder: Опишіть, які дії були виконані, або інші зміни, що стосуються справи... title: Примітки notes_description_html: Переглядайте та залишайте примітки для інших модераторів та для себе на майбутнє + quick_actions_description_html: 'Виберіть швидку дію або гортайте вниз, щоб побачити матеріал, на який надійшла скарга:' remote_user_placeholder: віддалений користувач із %{instance} reopen: Перевідкрити скаргу report: 'Скарга #%{id}' @@ -896,6 +897,7 @@ uk: sensitive: щоб позначати їхній обліковий запис делікатним silence: щоб обмежити їхній обліковий запис suspend: щоб призупинити їхній обліковий запис + body: "%{target} оскаржує модерацію %{action_taken_by} від %{date}, яка була %{type}. Вони написали:" next_steps: Ви можете схвалити апеляцію, щоб скасувати рішення про модерацію або проігнорувати її. subject: "%{username} апелює до рішення про модерацію на %{instance}" new_pending_account: @@ -991,6 +993,7 @@ uk: functional: Ваш обліковий запис повністю робочий. pending: Ваша заява очікує на розгляд нашим персоналом. Це може зайняти деякий час. Ви отримаєте електронний лист, якщо ваша заява буде схвалена. redirecting_to: Ваш обліковий запис наразі неактивний, тому що він перенаправлений до %{acct}. + view_strikes: Переглянути попередні попередження вашому обліковому запису too_fast: Форму подано занадто швидко, спробуйте ще раз. trouble_logging_in: Проблема під час входу? use_security_key: Використовувати ключ безпеки @@ -1058,6 +1061,7 @@ uk: strikes: action_taken: Дію виконано appeal: Апеляція + appeal_approved: Це попередження було успішно оскаржене і більше не дійсне appeal_rejected: Апеляцію було відхилено appeal_submitted_at: Апеляцію надіслано appealed_msg: Вашу апеляцію було надіслано. Якщо її погодять, вам буде повідомлено про це. @@ -1392,6 +1396,9 @@ uk: invalid_rules: не посилається на чинні правила rss: content_warning: 'Попередження про матеріали:' + descriptions: + account: Загальнодоступні дописи від @%{acct} + tag: 'Загальнодоступні дописи позначені #%{hashtag}' scheduled_statuses: over_daily_limit: Ви перевищили ліміт в %{limit} запланованих дмухів на сьогодні over_total_limit: Ви перевищили ліміт в %{limit} запланованих дмухів @@ -1562,6 +1569,9 @@ uk: pinned: Закріплений пост reblogged: передмухнув(-ла) sensitive_content: Дражливий зміст + strikes: + errors: + too_late: Запізно оскаржувати це попередження tags: does_not_match_previous_name: не збігається з попереднім ім'ям terms: @@ -1593,9 +1603,11 @@ uk: user_mailer: appeal_approved: action: Перейти у ваш обліковий запис + explanation: Оскарження попередження вашому обліковому запису %{strike_date}, яке ви надіслали %{appeal_date} було схвалено. Ваш обліковий запис знову вважається добропорядним. subject: Вашу апеляцію від %{date} було схвалено title: Апеляцію схвалено appeal_rejected: + explanation: Оскарження попередження вашому обліковому запису %{strike_date}, яке ви надіслали %{appeal_date} було відхилено. subject: Вашу апеляцію від %{date} було відхилено title: Апеляцію відхилено backup_ready: @@ -1611,12 +1623,14 @@ uk: title: Новий вхід warning: appeal: Подати апеляцію + appeal_description: Якщо ви вважаєте, що це помилка, ви можете надіслати оскаржити дії персоналу %{instance}. categories: spam: Спам violation: Вміст порушує такі правила спільноти explanation: delete_statuses: Деякі з ваших дописів порушили одне або кілька правил спільноти, і модератори %{instance} видалили їх. disable: Ви можете більше не використовувати свій обліковий запис, але ваш профіль та інші дані залишаються недоторканими. Ви можете надіслати запит на створення резервної копії ваших даних, змінити налаштування облікового запису або видалити свій обліковий запис. + mark_statuses_as_sensitive: Деякі з ваших дописів модератори %{instance} позначили делікатними. Це означає, що людям потрібно буде торкнутися медіа у дописах перед тим, як буде показано попередній перегляд. Ви можете самостійно позначити медіа делікатним, коли розміщуватимете його в майбутньому. sensitive: Відтепер усі ваші завантажені медіафайли будуть позначені делікатними й приховані за попередженням. silence: Ви й надалі можете користуватися своїм обліковим записом, але ваші дописи на цьому сервері бачитимуть лише ті люди, які вже стежать за вами, а вас може бути виключено з різних можливостей виявлення. Проте, інші можуть почати стежити за вами вручну. suspend: Ви більше не можете користуватися своїм обліковим записом, а ваші інші дані більше недоступні. Ви досі можете увійти, щоб надіслати запит на отримання резервної копії своїх даних до повного видалення впродовж приблизно 30 днів, але ми збережемо деякі основні дані, щоб унеможливити ухилення вами від призупинення. @@ -1625,7 +1639,9 @@ uk: subject: delete_statuses: Ваші дописи на %{acct} були вилучені disable: Ваш обліковий запис %{acct} було заморожено + mark_statuses_as_sensitive: Ваші дописи на %{acct} позначені делікатними none: Попередження для %{acct} + sensitive: Ваші дописи на %{acct} відтепер будуть позначені делікатними silence: Ваш обліковий запис %{acct} було обмежено suspend: Ваш обліковий запис %{acct} було призупинено title: From 602f291da9f4fa157233b29dc6ac96e784203c98 Mon Sep 17 00:00:00 2001 From: Shlee Date: Mon, 27 Jun 2022 07:02:48 +0000 Subject: [PATCH 053/646] Update Dockerfile (#18717) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 2073cbebff1..6180e0796eb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ SHELL ["/bin/bash", "-c"] RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections # Install Node v16 (LTS) -ENV NODE_VER="16.14.2" +ENV NODE_VER="16.15.1" RUN ARCH= && \ dpkgArch="$(dpkg --print-architecture)" && \ case "${dpkgArch##*-}" in \ From 2936f42a14cfdca70d4a9653dab29382315945e7 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 27 Jun 2022 09:30:15 +0200 Subject: [PATCH 054/646] Add notifications for new reports (#18697) --- .../mastodon/actions/notifications.js | 6 ++ .../mastodon/components/icon_button.js | 12 +++- .../components/column_settings.js | 13 ++++ .../notifications/components/notification.js | 30 +++++++++ .../notifications/components/report.js | 62 +++++++++++++++++++ .../containers/notification_container.js | 4 +- .../mastodon/locales/defaultMessages.json | 33 ++++++++++ app/javascript/mastodon/locales/en.json | 7 +++ .../mastodon/reducers/notifications.js | 3 +- app/javascript/mastodon/reducers/settings.js | 3 + app/javascript/mastodon/selectors/index.js | 17 ++--- .../styles/mastodon/components.scss | 39 ++++++++++++ app/models/notification.rb | 5 +- .../rest/admin/report_serializer.rb | 2 +- .../rest/notification_serializer.rb | 5 ++ app/serializers/rest/report_serializer.rb | 5 +- app/services/report_service.rb | 4 +- config/locales/en.yml | 2 + 18 files changed, 235 insertions(+), 17 deletions(-) create mode 100644 app/javascript/mastodon/features/notifications/components/report.js diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index 96cf628d693..84dfbeef3d1 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -91,6 +91,10 @@ export function updateNotifications(notification, intlMessages, intlLocale) { dispatch(importFetchedStatus(notification.status)); } + if (notification.report) { + dispatch(importFetchedAccount(notification.report.target_account)); + } + dispatch({ type: NOTIFICATIONS_UPDATE, notification, @@ -134,6 +138,7 @@ const excludeTypesFromFilter = filter => { 'status', 'update', 'admin.sign_up', + 'admin.report', ]); return allTypes.filterNot(item => item === filter).toJS(); @@ -179,6 +184,7 @@ export function expandNotifications({ maxId } = {}, done = noOp) { dispatch(importFetchedAccounts(response.data.map(item => item.account))); dispatch(importFetchedStatuses(response.data.map(item => item.status).filter(status => !!status))); + dispatch(importFetchedAccounts(response.data.filter(item => item.report).map(item => item.report.target_account))); dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null, isLoadingMore, isLoadingRecent, isLoadingRecent && preferPendingItems)); fetchRelatedRelationships(dispatch, response.data); diff --git a/app/javascript/mastodon/components/icon_button.js b/app/javascript/mastodon/components/icon_button.js index 6a653675b83..81743a1dbe1 100644 --- a/app/javascript/mastodon/components/icon_button.js +++ b/app/javascript/mastodon/components/icon_button.js @@ -132,8 +132,16 @@ export default class IconButton extends React.PureComponent { ); if (href) { - contents = ( - + return ( + {contents} ); diff --git a/app/javascript/mastodon/features/notifications/components/column_settings.js b/app/javascript/mastodon/features/notifications/components/column_settings.js index 1cdb2408677..61df79b4646 100644 --- a/app/javascript/mastodon/features/notifications/components/column_settings.js +++ b/app/javascript/mastodon/features/notifications/components/column_settings.js @@ -178,6 +178,19 @@ export default class ColumnSettings extends React.PureComponent { )} + + {isStaff && ( +
+ + +
+ + {showPushSettings && } + + +
+
+ )} ); } diff --git a/app/javascript/mastodon/features/notifications/components/notification.js b/app/javascript/mastodon/features/notifications/components/notification.js index 9198e9c9d88..0af71418c4c 100644 --- a/app/javascript/mastodon/features/notifications/components/notification.js +++ b/app/javascript/mastodon/features/notifications/components/notification.js @@ -7,6 +7,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import { me } from 'mastodon/initial_state'; import StatusContainer from 'mastodon/containers/status_container'; import AccountContainer from 'mastodon/containers/account_container'; +import Report from './report'; import FollowRequestContainer from '../containers/follow_request_container'; import Icon from 'mastodon/components/icon'; import Permalink from 'mastodon/components/permalink'; @@ -21,6 +22,7 @@ const messages = defineMessages({ status: { id: 'notification.status', defaultMessage: '{name} just posted' }, update: { id: 'notification.update', defaultMessage: '{name} edited a post' }, adminSignUp: { id: 'notification.admin.sign_up', defaultMessage: '{name} signed up' }, + adminReport: { id: 'notification.admin.report', defaultMessage: '{name} reported {target}' }, }); const notificationForScreenReader = (intl, message, timestamp) => { @@ -367,6 +369,32 @@ class Notification extends ImmutablePureComponent { ); } + renderAdminReport (notification, account, link) { + const { intl, unread, report } = this.props; + + const targetAccount = report.get('target_account'); + const targetDisplayNameHtml = { __html: targetAccount.get('display_name_html') }; + const targetLink = ; + + return ( + +
+
+
+ +
+ + + + +
+ +
+
+ ); + } + render () { const { notification } = this.props; const account = notification.get('account'); @@ -392,6 +420,8 @@ class Notification extends ImmutablePureComponent { return this.renderPoll(notification, account); case 'admin.sign_up': return this.renderAdminSignUp(notification, account, link); + case 'admin.report': + return this.renderAdminReport(notification, account, link); } return null; diff --git a/app/javascript/mastodon/features/notifications/components/report.js b/app/javascript/mastodon/features/notifications/components/report.js new file mode 100644 index 00000000000..3ce3eb9d32f --- /dev/null +++ b/app/javascript/mastodon/features/notifications/components/report.js @@ -0,0 +1,62 @@ +import React, { Fragment } from 'react'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import PropTypes from 'prop-types'; +import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import AvatarOverlay from 'mastodon/components/avatar_overlay'; +import RelativeTimestamp from 'mastodon/components/relative_timestamp'; + +const messages = defineMessages({ + openReport: { id: 'report_notification.open', defaultMessage: 'Open report' }, + other: { id: 'report_notification.categories.other', defaultMessage: 'Other' }, + spam: { id: 'report_notification.categories.spam', defaultMessage: 'Spam' }, + violation: { id: 'report_notification.categories.violation', defaultMessage: 'Rule violation' }, +}); + +export default @injectIntl +class Report extends ImmutablePureComponent { + + static propTypes = { + account: ImmutablePropTypes.map.isRequired, + report: ImmutablePropTypes.map.isRequired, + hidden: PropTypes.bool, + intl: PropTypes.object.isRequired, + }; + + render () { + const { intl, hidden, report, account } = this.props; + + if (!report) { + return null; + } + + if (hidden) { + return ( + + {report.get('id')} + + ); + } + + return ( +
+
+ +
+ +
+
+ · +
+ {intl.formatMessage(messages[report.get('category')])} +
+ + +
+
+ ); + } + +} diff --git a/app/javascript/mastodon/features/notifications/containers/notification_container.js b/app/javascript/mastodon/features/notifications/containers/notification_container.js index 5c984197faa..8bd5b3d782b 100644 --- a/app/javascript/mastodon/features/notifications/containers/notification_container.js +++ b/app/javascript/mastodon/features/notifications/containers/notification_container.js @@ -1,5 +1,5 @@ import { connect } from 'react-redux'; -import { makeGetNotification, makeGetStatus } from '../../../selectors'; +import { makeGetNotification, makeGetStatus, makeGetReport } from '../../../selectors'; import Notification from '../components/notification'; import { initBoostModal } from '../../../actions/boosts'; import { mentionCompose } from '../../../actions/compose'; @@ -18,12 +18,14 @@ import { boostModal } from '../../../initial_state'; const makeMapStateToProps = () => { const getNotification = makeGetNotification(); const getStatus = makeGetStatus(); + const getReport = makeGetReport(); const mapStateToProps = (state, props) => { const notification = getNotification(state, props.notification, props.accountId); return { notification: notification, status: notification.get('status') ? getStatus(state, { id: notification.get('status') }) : null, + report: notification.get('report') ? getReport(state, notification.get('report'), notification.getIn(['report', 'target_account', 'id'])) : null, }; }; diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index 250987be3fe..7cd913493e3 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -2532,6 +2532,10 @@ { "defaultMessage": "New sign-ups:", "id": "notifications.column_settings.admin.sign_up" + }, + { + "defaultMessage": "New reports:", + "id": "notifications.column_settings.admin.report" } ], "path": "app/javascript/mastodon/features/notifications/components/column_settings.json" @@ -2625,6 +2629,10 @@ "defaultMessage": "{name} signed up", "id": "notification.admin.sign_up" }, + { + "defaultMessage": "{name} reported {target}", + "id": "notification.admin.report" + }, { "defaultMessage": "{name} has requested to follow you", "id": "notification.follow_request" @@ -2653,6 +2661,31 @@ ], "path": "app/javascript/mastodon/features/notifications/components/notifications_permission_banner.json" }, + { + "descriptors": [ + { + "defaultMessage": "Open report", + "id": "report_notification.open" + }, + { + "defaultMessage": "Other", + "id": "report_notification.categories.other" + }, + { + "defaultMessage": "Spam", + "id": "report_notification.categories.spam" + }, + { + "defaultMessage": "Rule violation", + "id": "report_notification.categories.violation" + }, + { + "defaultMessage": "{count, plural, one {{count} post} other {{count} posts}} attached", + "id": "report_notification.attached_statuses" + } + ], + "path": "app/javascript/mastodon/features/notifications/components/report.json" + }, { "descriptors": [ { diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index a0a1e1cdf61..9082c420254 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferences", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} favourited your post", "notification.follow": "{name} followed you", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favourites:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Search", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns posts you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", diff --git a/app/javascript/mastodon/reducers/notifications.js b/app/javascript/mastodon/reducers/notifications.js index b587b6d0f61..4b460bc10cb 100644 --- a/app/javascript/mastodon/reducers/notifications.js +++ b/app/javascript/mastodon/reducers/notifications.js @@ -28,7 +28,7 @@ import { } from '../actions/app'; import { DOMAIN_BLOCK_SUCCESS } from 'mastodon/actions/domain_blocks'; import { TIMELINE_DELETE, TIMELINE_DISCONNECT } from '../actions/timelines'; -import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; +import { fromJS, Map as ImmutableMap, List as ImmutableList } from 'immutable'; import compareId from '../compare_id'; const initialState = ImmutableMap({ @@ -52,6 +52,7 @@ const notificationToMap = notification => ImmutableMap({ account: notification.account.id, created_at: notification.created_at, status: notification.status ? notification.status.id : null, + report: notification.report ? fromJS(notification.report) : null, }); const normalizeNotification = (state, notification, usePendingItems) => { diff --git a/app/javascript/mastodon/reducers/settings.js b/app/javascript/mastodon/reducers/settings.js index afffce91729..f9d3236e4a4 100644 --- a/app/javascript/mastodon/reducers/settings.js +++ b/app/javascript/mastodon/reducers/settings.js @@ -39,6 +39,7 @@ const initialState = ImmutableMap({ status: false, update: false, 'admin.sign_up': false, + 'admin.report': false, }), quickFilter: ImmutableMap({ @@ -60,6 +61,7 @@ const initialState = ImmutableMap({ status: true, update: true, 'admin.sign_up': true, + 'admin.report': true, }), sounds: ImmutableMap({ @@ -72,6 +74,7 @@ const initialState = ImmutableMap({ status: true, update: true, 'admin.sign_up': true, + 'admin.report': true, }), }), diff --git a/app/javascript/mastodon/selectors/index.js b/app/javascript/mastodon/selectors/index.js index 3121774b3d6..fbd25b605a3 100644 --- a/app/javascript/mastodon/selectors/index.js +++ b/app/javascript/mastodon/selectors/index.js @@ -152,14 +152,15 @@ export const getAlerts = createSelector([getAlertsBase], (base) => { return arr; }); -export const makeGetNotification = () => { - return createSelector([ - (_, base) => base, - (state, _, accountId) => state.getIn(['accounts', accountId]), - ], (base, account) => { - return base.set('account', account); - }); -}; +export const makeGetNotification = () => createSelector([ + (_, base) => base, + (state, _, accountId) => state.getIn(['accounts', accountId]), +], (base, account) => base.set('account', account)); + +export const makeGetReport = () => createSelector([ + (_, base) => base, + (state, _, targetAccountId) => state.getIn(['accounts', targetAccountId]), +], (base, targetAccount) => base.set('target_account', targetAccount)); export const getAccountGallery = createSelector([ (state, id) => state.getIn(['timelines', `account:${id}:media`, 'items'], ImmutableList()), diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 1ada1fcf7d4..7e3ce3de241 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -1355,6 +1355,8 @@ a .account__avatar { .account__avatar-overlay { @include avatar-size(48px); + position: relative; + &-base { @include avatar-radius; @include avatar-size(36px); @@ -1620,6 +1622,33 @@ a.account__display-name { } } +.notification__report { + padding: 8px 10px; + padding-left: 68px; + position: relative; + border-bottom: 1px solid lighten($ui-base-color, 8%); + min-height: 54px; + + &__details { + display: flex; + justify-content: space-between; + align-items: center; + color: $darker-text-color; + font-size: 15px; + line-height: 22px; + + strong { + font-weight: 500; + } + } + + &__avatar { + position: absolute; + left: 10px; + top: 10px; + } +} + .notification__message { margin: 0 10px 0 68px; padding: 8px 0 0; @@ -2360,6 +2389,16 @@ a.account__display-name { padding-top: 15px; } + .notification__report { + padding: 15px 15px 15px (48px + 15px * 2); + min-height: 48px + 2px; + + &__avatar { + left: 15px; + top: 17px; + } + } + .status { padding: 15px 15px 15px (48px + 15px * 2); min-height: 48px + 2px; diff --git a/app/models/notification.rb b/app/models/notification.rb index ba94b54d126..bbc63c1c05e 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -37,6 +37,7 @@ class Notification < ApplicationRecord poll update admin.sign_up + admin.report ).freeze TARGET_STATUS_INCLUDES_BY_TYPE = { @@ -46,6 +47,7 @@ class Notification < ApplicationRecord favourite: [favourite: :status], poll: [poll: :status], update: :status, + 'admin.report': [report: :target_account], }.freeze belongs_to :account, optional: true @@ -58,6 +60,7 @@ class Notification < ApplicationRecord belongs_to :follow_request, foreign_key: 'activity_id', optional: true belongs_to :favourite, foreign_key: 'activity_id', optional: true belongs_to :poll, foreign_key: 'activity_id', optional: true + belongs_to :report, foreign_key: 'activity_id', optional: true validates :type, inclusion: { in: TYPES } @@ -146,7 +149,7 @@ class Notification < ApplicationRecord return unless new_record? case activity_type - when 'Status', 'Follow', 'Favourite', 'FollowRequest', 'Poll' + when 'Status', 'Follow', 'Favourite', 'FollowRequest', 'Poll', 'Report' self.from_account_id = activity&.account_id when 'Mention' self.from_account_id = activity&.status&.account_id diff --git a/app/serializers/rest/admin/report_serializer.rb b/app/serializers/rest/admin/report_serializer.rb index 237f41d8e55..44b4726e436 100644 --- a/app/serializers/rest/admin/report_serializer.rb +++ b/app/serializers/rest/admin/report_serializer.rb @@ -2,7 +2,7 @@ class REST::Admin::ReportSerializer < ActiveModel::Serializer attributes :id, :action_taken, :action_taken_at, :category, :comment, - :created_at, :updated_at + :forwarded, :created_at, :updated_at has_one :account, serializer: REST::Admin::AccountSerializer has_one :target_account, serializer: REST::Admin::AccountSerializer diff --git a/app/serializers/rest/notification_serializer.rb b/app/serializers/rest/notification_serializer.rb index 69b81f6deb0..137fc53ddab 100644 --- a/app/serializers/rest/notification_serializer.rb +++ b/app/serializers/rest/notification_serializer.rb @@ -5,6 +5,7 @@ class REST::NotificationSerializer < ActiveModel::Serializer belongs_to :from_account, key: :account, serializer: REST::AccountSerializer belongs_to :target_status, key: :status, if: :status_type?, serializer: REST::StatusSerializer + belongs_to :report, if: :report_type?, serializer: REST::ReportSerializer def id object.id.to_s @@ -13,4 +14,8 @@ class REST::NotificationSerializer < ActiveModel::Serializer def status_type? [:favourite, :reblog, :status, :mention, :poll, :update].include?(object.type) end + + def report_type? + object.type == :'admin.report' + end end diff --git a/app/serializers/rest/report_serializer.rb b/app/serializers/rest/report_serializer.rb index ecb88d653fa..de68dfc6daa 100644 --- a/app/serializers/rest/report_serializer.rb +++ b/app/serializers/rest/report_serializer.rb @@ -1,7 +1,10 @@ # frozen_string_literal: true class REST::ReportSerializer < ActiveModel::Serializer - attributes :id, :action_taken + attributes :id, :action_taken, :action_taken_at, :category, :comment, + :forwarded, :created_at, :status_ids, :rule_ids + + has_one :target_account, serializer: REST::AccountSerializer def id object.id.to_s diff --git a/app/services/report_service.rb b/app/services/report_service.rb index d251bb33f07..70212a6a75e 100644 --- a/app/services/report_service.rb +++ b/app/services/report_service.rb @@ -39,8 +39,8 @@ class ReportService < BaseService return if @report.unresolved_siblings? User.staff.includes(:account).each do |u| - next unless u.allows_report_emails? - AdminMailer.new_report(u.account, @report).deliver_later + LocalNotificationWorker.perform_async(u.account_id, @report.id, 'Report', 'admin.report') + AdminMailer.new_report(u.account, @report).deliver_later if u.allows_report_emails? end end diff --git a/config/locales/en.yml b/config/locales/en.yml index cedcc9361c6..5a0fc3da88e 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1251,6 +1251,8 @@ en: copy_account_note_text: 'This user moved from %{acct}, here were your previous notes about them:' notification_mailer: admin: + report: + subject: "%{name} submitted a report" sign_up: subject: "%{name} signed up" digest: From 5c6a2fcefe34a1bafbf546a7690639fc8b345bc6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jun 2022 20:54:46 +0900 Subject: [PATCH 055/646] Bump http from 5.0.4 to 5.1.0 (#18696) Bumps [http](https://github.com/httprb/http) from 5.0.4 to 5.1.0. - [Release notes](https://github.com/httprb/http/releases) - [Changelog](https://github.com/httprb/http/blob/main/CHANGES.md) - [Commits](https://github.com/httprb/http/compare/v5.0.4...v5.1.0) --- updated-dependencies: - dependency-name: http dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index bf04d968e7c..5847173d750 100644 --- a/Gemfile +++ b/Gemfile @@ -53,7 +53,7 @@ gem 'fastimage' gem 'hiredis', '~> 0.6' gem 'redis-namespace', '~> 1.8' gem 'htmlentities', '~> 4.3' -gem 'http', '~> 5.0' +gem 'http', '~> 5.1' gem 'http_accept_language', '~> 2.1' gem 'httplog', '~> 1.5.0' gem 'idn-ruby', require: 'idn' diff --git a/Gemfile.lock b/Gemfile.lock index eb167e5a267..0db3e47333f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -291,12 +291,12 @@ GEM hkdf (0.3.0) html_tokenizer (0.0.7) htmlentities (4.3.4) - http (5.0.4) + http (5.1.0) addressable (~> 2.8) http-cookie (~> 1.0) http-form_data (~> 2.2) llhttp-ffi (~> 0.4.0) - http-cookie (1.0.4) + http-cookie (1.0.5) domain_name (~> 0.5) http-form_data (2.3.0) http_accept_language (2.1.1) @@ -676,7 +676,7 @@ GEM tzinfo (>= 1.0.0) unf (0.1.4) unf_ext - unf_ext (0.0.8) + unf_ext (0.0.8.2) unicode-display_width (2.1.0) uniform_notifier (1.16.0) validate_email (0.1.6) @@ -767,7 +767,7 @@ DEPENDENCIES hamlit-rails (~> 0.2) hiredis (~> 0.6) htmlentities (~> 4.3) - http (~> 5.0) + http (~> 5.1) http_accept_language (~> 2.1) httplog (~> 1.5.0) i18n-tasks (~> 1.0) From 5823ae70c4c7c297c8d69ecd0be8df65019411e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jun 2022 20:55:18 +0900 Subject: [PATCH 056/646] Bump pg from 1.3.5 to 1.4.0 (#18695) Bumps [pg](https://github.com/ged/ruby-pg) from 1.3.5 to 1.4.0. - [Release notes](https://github.com/ged/ruby-pg/releases) - [Changelog](https://github.com/ged/ruby-pg/blob/master/History.rdoc) - [Commits](https://github.com/ged/ruby-pg/compare/v1.3.5...v1.4.0) --- updated-dependencies: - dependency-name: pg dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 5847173d750..d732f6eed65 100644 --- a/Gemfile +++ b/Gemfile @@ -13,7 +13,7 @@ gem 'thor', '~> 1.2' gem 'rack', '~> 2.2.3' gem 'hamlit-rails', '~> 0.2' -gem 'pg', '~> 1.3' +gem 'pg', '~> 1.4' gem 'makara', '~> 0.5' gem 'pghero', '~> 2.8' gem 'dotenv-rails', '~> 2.7' diff --git a/Gemfile.lock b/Gemfile.lock index 0db3e47333f..36a0984e196 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -446,7 +446,7 @@ GEM parslet (2.0.0) pastel (0.8.0) tty-color (~> 0.5) - pg (1.3.5) + pg (1.4.0) pghero (2.8.3) activerecord (>= 5) pkg-config (1.4.7) @@ -795,7 +795,7 @@ DEPENDENCIES omniauth-saml (~> 1.10) ox (~> 2.14) parslet - pg (~> 1.3) + pg (~> 1.4) pghero (~> 2.8) pkg-config (~> 1.4) posix-spawn From 02851848e964675bb59919fa5fd1bdee2c1c29db Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 28 Jun 2022 09:42:13 +0200 Subject: [PATCH 057/646] Revamp post filtering system (#18058) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add model for custom filter keywords * Use CustomFilterKeyword internally Does not change the API * Fix /filters/edit and /filters/new * Add migration tests * Remove whole_word column from custom_filters (covered by custom_filter_keywords) * Redesign /filters Instead of a list, present a card that displays more information and handles multiple keywords per filter. * Redesign /filters/new and /filters/edit to add and remove keywords This adds a new gem dependency: cocoon, as well as a npm dependency: cocoon-js-vanilla. Those are used to easily populate and remove form fields from the user interface when manipulating multiple keyword filters at once. * Add /api/v2/filters to edit filter with multiple keywords Entities: - `Filter`: `id`, `title`, `filter_action` (either `hide` or `warn`), `context` `keywords` - `FilterKeyword`: `id`, `keyword`, `whole_word` API endpoits: - `GET /api/v2/filters` to list filters (including keywords) - `POST /api/v2/filters` to create a new filter `keywords_attributes` can also be passed to create keywords in one request - `GET /api/v2/filters/:id` to read a particular filter - `PUT /api/v2/filters/:id` to update a new filter `keywords_attributes` can also be passed to edit, delete or add keywords in one request - `DELETE /api/v2/filters/:id` to delete a particular filter - `GET /api/v2/filters/:id/keywords` to list keywords for a filter - `POST /api/v2/filters/:filter_id/keywords/:id` to add a new keyword to a filter - `GET /api/v2/filter_keywords/:id` to read a particular keyword - `PUT /api/v2/filter_keywords/:id` to edit a particular keyword - `DELETE /api/v2/filter_keywords/:id` to delete a particular keyword * Change from `irreversible` boolean to `action` enum * Remove irrelevent `irreversible_must_be_within_context` check * Fix /filters/new and /filters/edit with update for filter_action * Fix Rubocop/Codeclimate complaining about task names * Refactor FeedManager#phrase_filtered? This moves regexp building and filter caching to the `CustomFilter` class. This does not change the functional behavior yet, but this changes how the cache is built, doing per-custom_filter regexps so that filters can be matched independently, while still offering caching. * Perform server-side filtering and output result in REST API * Fix numerous filters_changed events being sent when editing multiple keywords at once * Add some tests * Use the new API in the WebUI - use client-side logic for filters we have fetched rules for. This is so that filter changes can be retroactively applied without reloading the UI. - use server-side logic for filters we haven't fetched rules for yet (e.g. network error, or initial timeline loading) * Minor optimizations and refactoring * Perform server-side filtering on the streaming server * Change the wording of filter action labels * Fix issues pointed out by linter * Change design of “Show anyway” link in accordence to review comments * Drop “irreversible” filtering behavior * Move /api/v2/filter_keywords to /api/v1/filters/keywords * Rename `filter_results` attribute to `filtered` * Rename REST::LegacyFilterSerializer to REST::V1::FilterSerializer * Fix systemChannelId value in streaming server * Simplify code by removing client-side filtering code The simplifcation comes at a cost though: filters aren't retroactively applied anymore. --- .circleci/config.yml | 18 ++- Gemfile | 2 + Gemfile.lock | 2 + .../api/v1/filters/keywords_controller.rb | 50 ++++++ app/controllers/api/v1/filters_controller.rb | 35 ++++- app/controllers/api/v2/filters_controller.rb | 48 ++++++ app/controllers/filters_controller.rb | 12 +- app/javascript/mastodon/actions/filters.js | 26 ---- .../mastodon/actions/importer/index.js | 11 ++ .../mastodon/actions/importer/normalizer.js | 12 ++ .../mastodon/actions/notifications.js | 13 +- app/javascript/mastodon/actions/streaming.js | 4 - app/javascript/mastodon/components/status.js | 21 ++- .../mastodon/components/status_action_bar.js | 17 +++ app/javascript/mastodon/features/ui/index.js | 3 +- app/javascript/mastodon/reducers/filters.js | 34 ++++- app/javascript/mastodon/selectors/index.js | 51 +++---- app/javascript/packs/public.js | 1 + app/javascript/styles/mastodon/admin.scss | 33 +++- .../styles/mastodon/components.scss | 15 ++ app/javascript/styles/mastodon/forms.scss | 31 ++++ app/lib/feed_manager.rb | 30 ---- app/models/concerns/account_interactions.rb | 13 ++ app/models/custom_filter.rb | 87 ++++++++--- app/models/custom_filter_keyword.rb | 34 +++++ app/presenters/filter_result_presenter.rb | 5 + .../status_relationships_presenter.rb | 24 ++- .../rest/filter_keyword_serializer.rb | 9 ++ .../rest/filter_result_serializer.rb | 6 + app/serializers/rest/filter_serializer.rb | 8 +- app/serializers/rest/status_serializer.rb | 9 ++ app/serializers/rest/v1/filter_serializer.rb | 26 ++++ app/views/filters/_fields.html.haml | 16 -- app/views/filters/_filter.html.haml | 32 ++++ app/views/filters/_filter_fields.html.haml | 33 ++++ app/views/filters/_keyword_fields.html.haml | 8 + app/views/filters/edit.html.haml | 2 +- app/views/filters/index.html.haml | 17 +-- app/views/filters/new.html.haml | 4 +- config/locales/en.yml | 11 +- config/locales/simple_form.en.yml | 10 ++ config/routes.rb | 9 +- ...613110628_create_custom_filter_keywords.rb | 13 ++ .../20220613110711_migrate_custom_filters.rb | 34 +++++ ...0613110834_add_action_to_custom_filters.rb | 20 +++ ...2_remove_whole_word_from_custom_filters.rb | 20 +++ ...remove_irreversible_from_custom_filters.rb | 20 +++ db/schema.rb | 15 +- lib/tasks/tests.rake | 18 ++- package.json | 2 + .../v1/filters/keywords_controller_spec.rb | 142 ++++++++++++++++++ .../api/v1/filters_controller_spec.rb | 27 ++-- .../api/v1/statuses_controller_spec.rb | 52 +++++++ .../api/v2/filters_controller_spec.rb | 121 +++++++++++++++ .../custom_filter_keyword_fabricator.rb | 4 + spec/lib/feed_manager_spec.rb | 32 ---- spec/models/custom_filter_keyword_spec.rb | 4 + .../status_relationships_presenter_spec.rb | 29 +++- streaming/index.js | 90 ++++++++++- yarn.lock | 67 ++++++++- 60 files changed, 1292 insertions(+), 250 deletions(-) create mode 100644 app/controllers/api/v1/filters/keywords_controller.rb create mode 100644 app/controllers/api/v2/filters_controller.rb delete mode 100644 app/javascript/mastodon/actions/filters.js create mode 100644 app/models/custom_filter_keyword.rb create mode 100644 app/presenters/filter_result_presenter.rb create mode 100644 app/serializers/rest/filter_keyword_serializer.rb create mode 100644 app/serializers/rest/filter_result_serializer.rb create mode 100644 app/serializers/rest/v1/filter_serializer.rb delete mode 100644 app/views/filters/_fields.html.haml create mode 100644 app/views/filters/_filter.html.haml create mode 100644 app/views/filters/_filter_fields.html.haml create mode 100644 app/views/filters/_keyword_fields.html.haml create mode 100644 db/migrate/20220613110628_create_custom_filter_keywords.rb create mode 100644 db/migrate/20220613110711_migrate_custom_filters.rb create mode 100644 db/migrate/20220613110834_add_action_to_custom_filters.rb create mode 100644 db/post_migrate/20220613110802_remove_whole_word_from_custom_filters.rb create mode 100644 db/post_migrate/20220613110903_remove_irreversible_from_custom_filters.rb create mode 100644 spec/controllers/api/v1/filters/keywords_controller_spec.rb create mode 100644 spec/controllers/api/v2/filters_controller_spec.rb create mode 100644 spec/fabricators/custom_filter_keyword_fabricator.rb create mode 100644 spec/models/custom_filter_keyword_spec.rb diff --git a/.circleci/config.yml b/.circleci/config.yml index b9228f996cf..2a60ae68413 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -133,6 +133,12 @@ jobs: - run: command: ./bin/rails tests:migrations:populate_v2_4 name: Populate database with test data + - run: + command: ./bin/rails db:migrate VERSION=20180707154237 + name: Run migrations up to v2.4.3 + - run: + command: ./bin/rails tests:migrations:populate_v2_4_3 + name: Populate database with test data - run: command: ./bin/rails db:migrate name: Run all remaining migrations @@ -167,14 +173,22 @@ jobs: - run: command: ./bin/rails tests:migrations:populate_v2_4 name: Populate database with test data + - run: + command: ./bin/rails db:migrate VERSION=20180707154237 + name: Run migrations up to v2.4.3 + environment: + SKIP_POST_DEPLOYMENT_MIGRATIONS: true + - run: + command: ./bin/rails tests:migrations:populate_v2_4_3 + name: Populate database with test data - run: command: ./bin/rails db:migrate - name: Run all pre-deployment migrations + name: Run all remaining pre-deployment migrations environment: SKIP_POST_DEPLOYMENT_MIGRATIONS: true - run: command: ./bin/rails db:migrate - name: Run all post-deployment remaining migrations + name: Run all post-deployment migrations - run: command: ./bin/rails tests:migrations:check_database name: Check migration result diff --git a/Gemfile b/Gemfile index d732f6eed65..9a7635b0606 100644 --- a/Gemfile +++ b/Gemfile @@ -153,3 +153,5 @@ gem 'concurrent-ruby', require: false gem 'connection_pool', require: false gem 'xorcist', '~> 1.1' + +gem 'cocoon', '~> 1.2' diff --git a/Gemfile.lock b/Gemfile.lock index 36a0984e196..7e022b19861 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -163,6 +163,7 @@ GEM elasticsearch-dsl chunky_png (1.4.0) climate_control (0.2.0) + cocoon (1.2.15) coderay (1.1.3) color_diff (0.1) concurrent-ruby (1.1.10) @@ -746,6 +747,7 @@ DEPENDENCIES charlock_holmes (~> 0.7.7) chewy (~> 7.2) climate_control (~> 0.2) + cocoon (~> 1.2) color_diff (~> 0.1) concurrent-ruby connection_pool diff --git a/app/controllers/api/v1/filters/keywords_controller.rb b/app/controllers/api/v1/filters/keywords_controller.rb new file mode 100644 index 00000000000..d3718a1371d --- /dev/null +++ b/app/controllers/api/v1/filters/keywords_controller.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +class Api::V1::Filters::KeywordsController < Api::BaseController + before_action -> { doorkeeper_authorize! :read, :'read:filters' }, only: [:index, :show] + before_action -> { doorkeeper_authorize! :write, :'write:filters' }, except: [:index, :show] + before_action :require_user! + + before_action :set_keywords, only: :index + before_action :set_keyword, only: [:show, :update, :destroy] + + def index + render json: @keywords, each_serializer: REST::FilterKeywordSerializer + end + + def create + @keyword = current_account.custom_filters.find(params[:filter_id]).keywords.create!(resource_params) + + render json: @keyword, serializer: REST::FilterKeywordSerializer + end + + def show + render json: @keyword, serializer: REST::FilterKeywordSerializer + end + + def update + @keyword.update!(resource_params) + + render json: @keyword, serializer: REST::FilterKeywordSerializer + end + + def destroy + @keyword.destroy! + render_empty + end + + private + + def set_keywords + filter = current_account.custom_filters.includes(:keywords).find(params[:filter_id]) + @keywords = filter.keywords + end + + def set_keyword + @keyword = CustomFilterKeyword.includes(:custom_filter).where(custom_filter: { account: current_account }).find(params[:id]) + end + + def resource_params + params.permit(:keyword, :whole_word) + end +end diff --git a/app/controllers/api/v1/filters_controller.rb b/app/controllers/api/v1/filters_controller.rb index b0ace3af04c..07cd1414780 100644 --- a/app/controllers/api/v1/filters_controller.rb +++ b/app/controllers/api/v1/filters_controller.rb @@ -8,21 +8,32 @@ class Api::V1::FiltersController < Api::BaseController before_action :set_filter, only: [:show, :update, :destroy] def index - render json: @filters, each_serializer: REST::FilterSerializer + render json: @filters, each_serializer: REST::V1::FilterSerializer end def create - @filter = current_account.custom_filters.create!(resource_params) - render json: @filter, serializer: REST::FilterSerializer + ApplicationRecord.transaction do + filter_category = current_account.custom_filters.create!(resource_params) + @filter = filter_category.keywords.create!(keyword_params) + end + + render json: @filter, serializer: REST::V1::FilterSerializer end def show - render json: @filter, serializer: REST::FilterSerializer + render json: @filter, serializer: REST::V1::FilterSerializer end def update - @filter.update!(resource_params) - render json: @filter, serializer: REST::FilterSerializer + ApplicationRecord.transaction do + @filter.update!(keyword_params) + @filter.custom_filter.assign_attributes(filter_params) + raise Mastodon::ValidationError, I18n.t('filters.errors.deprecated_api_multiple_keywords') if @filter.custom_filter.changed? && @filter.custom_filter.keywords.count > 1 + + @filter.custom_filter.save! + end + + render json: @filter, serializer: REST::V1::FilterSerializer end def destroy @@ -33,14 +44,22 @@ class Api::V1::FiltersController < Api::BaseController private def set_filters - @filters = current_account.custom_filters + @filters = CustomFilterKeyword.includes(:custom_filter).where(custom_filter: { account: current_account }) end def set_filter - @filter = current_account.custom_filters.find(params[:id]) + @filter = CustomFilterKeyword.includes(:custom_filter).where(custom_filter: { account: current_account }).find(params[:id]) end def resource_params params.permit(:phrase, :expires_in, :irreversible, :whole_word, context: []) end + + def filter_params + resource_params.slice(:expires_in, :irreversible, :context) + end + + def keyword_params + resource_params.slice(:phrase, :whole_word) + end end diff --git a/app/controllers/api/v2/filters_controller.rb b/app/controllers/api/v2/filters_controller.rb new file mode 100644 index 00000000000..8ff3076cfba --- /dev/null +++ b/app/controllers/api/v2/filters_controller.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +class Api::V2::FiltersController < Api::BaseController + before_action -> { doorkeeper_authorize! :read, :'read:filters' }, only: [:index, :show] + before_action -> { doorkeeper_authorize! :write, :'write:filters' }, except: [:index, :show] + before_action :require_user! + before_action :set_filters, only: :index + before_action :set_filter, only: [:show, :update, :destroy] + + def index + render json: @filters, each_serializer: REST::FilterSerializer, rules_requested: true + end + + def create + @filter = current_account.custom_filters.create!(resource_params) + + render json: @filter, serializer: REST::FilterSerializer, rules_requested: true + end + + def show + render json: @filter, serializer: REST::FilterSerializer, rules_requested: true + end + + def update + @filter.update!(resource_params) + + render json: @filter, serializer: REST::FilterSerializer, rules_requested: true + end + + def destroy + @filter.destroy! + render_empty + end + + private + + def set_filters + @filters = current_account.custom_filters.includes(:keywords) + end + + def set_filter + @filter = current_account.custom_filters.find(params[:id]) + end + + def resource_params + params.permit(:title, :expires_in, :filter_action, context: [], keywords_attributes: [:id, :keyword, :whole_word, :_destroy]) + end +end diff --git a/app/controllers/filters_controller.rb b/app/controllers/filters_controller.rb index 79a1ab02b1f..5ed53bce1d2 100644 --- a/app/controllers/filters_controller.rb +++ b/app/controllers/filters_controller.rb @@ -4,16 +4,16 @@ class FiltersController < ApplicationController layout 'admin' before_action :authenticate_user! - before_action :set_filters, only: :index before_action :set_filter, only: [:edit, :update, :destroy] before_action :set_body_classes def index - @filters = current_account.custom_filters.order(:phrase) + @filters = current_account.custom_filters.includes(:keywords).order(:phrase) end def new - @filter = current_account.custom_filters.build + @filter = current_account.custom_filters.build(action: :warn) + @filter.keywords.build end def create @@ -43,16 +43,12 @@ class FiltersController < ApplicationController private - def set_filters - @filters = current_account.custom_filters - end - def set_filter @filter = current_account.custom_filters.find(params[:id]) end def resource_params - params.require(:custom_filter).permit(:phrase, :expires_in, :irreversible, :whole_word, context: []) + params.require(:custom_filter).permit(:title, :expires_in, :filter_action, context: [], keywords_attributes: [:id, :keyword, :whole_word, :_destroy]) end def set_body_classes diff --git a/app/javascript/mastodon/actions/filters.js b/app/javascript/mastodon/actions/filters.js deleted file mode 100644 index 7fa1c9a70d1..00000000000 --- a/app/javascript/mastodon/actions/filters.js +++ /dev/null @@ -1,26 +0,0 @@ -import api from '../api'; - -export const FILTERS_FETCH_REQUEST = 'FILTERS_FETCH_REQUEST'; -export const FILTERS_FETCH_SUCCESS = 'FILTERS_FETCH_SUCCESS'; -export const FILTERS_FETCH_FAIL = 'FILTERS_FETCH_FAIL'; - -export const fetchFilters = () => (dispatch, getState) => { - dispatch({ - type: FILTERS_FETCH_REQUEST, - skipLoading: true, - }); - - api(getState) - .get('/api/v1/filters') - .then(({ data }) => dispatch({ - type: FILTERS_FETCH_SUCCESS, - filters: data, - skipLoading: true, - })) - .catch(err => dispatch({ - type: FILTERS_FETCH_FAIL, - err, - skipLoading: true, - skipAlert: true, - })); -}; diff --git a/app/javascript/mastodon/actions/importer/index.js b/app/javascript/mastodon/actions/importer/index.js index f4372fb31d0..9c69be601ed 100644 --- a/app/javascript/mastodon/actions/importer/index.js +++ b/app/javascript/mastodon/actions/importer/index.js @@ -5,6 +5,7 @@ export const ACCOUNTS_IMPORT = 'ACCOUNTS_IMPORT'; export const STATUS_IMPORT = 'STATUS_IMPORT'; export const STATUSES_IMPORT = 'STATUSES_IMPORT'; export const POLLS_IMPORT = 'POLLS_IMPORT'; +export const FILTERS_IMPORT = 'FILTERS_IMPORT'; function pushUnique(array, object) { if (array.every(element => element.id !== object.id)) { @@ -28,6 +29,10 @@ export function importStatuses(statuses) { return { type: STATUSES_IMPORT, statuses }; } +export function importFilters(filters) { + return { type: FILTERS_IMPORT, filters }; +} + export function importPolls(polls) { return { type: POLLS_IMPORT, polls }; } @@ -61,11 +66,16 @@ export function importFetchedStatuses(statuses) { const accounts = []; const normalStatuses = []; const polls = []; + const filters = []; function processStatus(status) { pushUnique(normalStatuses, normalizeStatus(status, getState().getIn(['statuses', status.id]))); pushUnique(accounts, status.account); + if (status.filtered) { + status.filtered.forEach(result => pushUnique(filters, result.filter)); + } + if (status.reblog && status.reblog.id) { processStatus(status.reblog); } @@ -80,6 +90,7 @@ export function importFetchedStatuses(statuses) { dispatch(importPolls(polls)); dispatch(importFetchedAccounts(accounts)); dispatch(importStatuses(normalStatuses)); + dispatch(importFilters(filters)); }; } diff --git a/app/javascript/mastodon/actions/importer/normalizer.js b/app/javascript/mastodon/actions/importer/normalizer.js index ca76e3494d1..8a22f83fa43 100644 --- a/app/javascript/mastodon/actions/importer/normalizer.js +++ b/app/javascript/mastodon/actions/importer/normalizer.js @@ -42,6 +42,14 @@ export function normalizeAccount(account) { return account; } +export function normalizeFilterResult(result) { + const normalResult = { ...result }; + + normalResult.filter = normalResult.filter.id; + + return normalResult; +} + export function normalizeStatus(status, normalOldStatus) { const normalStatus = { ...status }; normalStatus.account = status.account.id; @@ -54,6 +62,10 @@ export function normalizeStatus(status, normalOldStatus) { normalStatus.poll = status.poll.id; } + if (status.filtered) { + normalStatus.filtered = status.filtered.map(normalizeFilterResult); + } + // Only calculate these values when status first encountered and // when the underlying values change. Otherwise keep the ones // already in the reducer diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index 84dfbeef3d1..3c42f71da32 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -12,10 +12,8 @@ import { saveSettings } from './settings'; import { defineMessages } from 'react-intl'; import { List as ImmutableList } from 'immutable'; import { unescapeHTML } from '../utils/html'; -import { getFiltersRegex } from '../selectors'; import { usePendingItems as preferPendingItems } from 'mastodon/initial_state'; import compareId from 'mastodon/compare_id'; -import { searchTextFromRawStatus } from 'mastodon/actions/importer/normalizer'; import { requestNotificationPermission } from '../utils/notifications'; export const NOTIFICATIONS_UPDATE = 'NOTIFICATIONS_UPDATE'; @@ -62,20 +60,17 @@ export function updateNotifications(notification, intlMessages, intlLocale) { const showInColumn = activeFilter === 'all' ? getState().getIn(['settings', 'notifications', 'shows', notification.type], true) : activeFilter === notification.type; const showAlert = getState().getIn(['settings', 'notifications', 'alerts', notification.type], true); const playSound = getState().getIn(['settings', 'notifications', 'sounds', notification.type], true); - const filters = getFiltersRegex(getState(), { contextType: 'notifications' }); let filtered = false; - if (['mention', 'status'].includes(notification.type)) { - const dropRegex = filters[0]; - const regex = filters[1]; - const searchIndex = searchTextFromRawStatus(notification.status); + if (['mention', 'status'].includes(notification.type) && notification.status.filtered) { + const filters = notification.status.filtered.filter(result => result.filter.context.includes('notifications')); - if (dropRegex && dropRegex.test(searchIndex)) { + if (filters.some(result => result.filter.filter_action === 'hide')) { return; } - filtered = regex && regex.test(searchIndex); + filtered = filters.length > 0; } if (['follow_request'].includes(notification.type)) { diff --git a/app/javascript/mastodon/actions/streaming.js b/app/javascript/mastodon/actions/streaming.js index d76f045c878..84709083fa2 100644 --- a/app/javascript/mastodon/actions/streaming.js +++ b/app/javascript/mastodon/actions/streaming.js @@ -21,7 +21,6 @@ import { updateReaction as updateAnnouncementsReaction, deleteAnnouncement, } from './announcements'; -import { fetchFilters } from './filters'; import { getLocale } from '../locales'; const { messages } = getLocale(); @@ -97,9 +96,6 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti case 'conversation': dispatch(updateConversations(JSON.parse(data.payload))); break; - case 'filters_changed': - dispatch(fetchFilters()); - break; case 'announcement': dispatch(updateAnnouncements(JSON.parse(data.payload))); break; diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js index 7c44669d2b5..4ca39282426 100644 --- a/app/javascript/mastodon/components/status.js +++ b/app/javascript/mastodon/components/status.js @@ -116,6 +116,7 @@ class Status extends ImmutablePureComponent { state = { showMedia: defaultMediaVisibility(this.props.status), statusId: undefined, + forceFilter: undefined, }; static getDerivedStateFromProps(nextProps, prevState) { @@ -277,6 +278,15 @@ class Status extends ImmutablePureComponent { this.handleToggleMediaVisibility(); } + handleUnfilterClick = e => { + this.setState({ forceFilter: false }); + e.preventDefault(); + } + + handleFilterClick = () => { + this.setState({ forceFilter: true }); + } + _properStatus () { const { status } = this.props; @@ -328,7 +338,8 @@ class Status extends ImmutablePureComponent { ); } - if (status.get('filtered') || status.getIn(['reblog', 'filtered'])) { + const matchedFilters = status.get('filtered') || status.getIn(['reblog', 'filtered']); + if (this.state.forceFilter === undefined ? matchedFilters : this.state.forceFilter) { const minHandlers = this.props.muted ? {} : { moveUp: this.handleHotkeyMoveUp, moveDown: this.handleHotkeyMoveDown, @@ -337,7 +348,11 @@ class Status extends ImmutablePureComponent { return (
- + : {matchedFilters.join(', ')}. + {' '} +
); @@ -496,7 +511,7 @@ class Status extends ImmutablePureComponent { {media} - + diff --git a/app/javascript/mastodon/components/status_action_bar.js b/app/javascript/mastodon/components/status_action_bar.js index 1d8fe23dae8..ab8755be04c 100644 --- a/app/javascript/mastodon/components/status_action_bar.js +++ b/app/javascript/mastodon/components/status_action_bar.js @@ -38,6 +38,7 @@ const messages = defineMessages({ admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' }, admin_status: { id: 'status.admin_status', defaultMessage: 'Open this status in the moderation interface' }, copy: { id: 'status.copy', defaultMessage: 'Copy link to status' }, + hide: { id: 'status.hide', defaultMessage: 'Hide toot' }, blockDomain: { id: 'account.block_domain', defaultMessage: 'Block domain {domain}' }, unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unblock domain {domain}' }, unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' }, @@ -76,6 +77,7 @@ class StatusActionBar extends ImmutablePureComponent { onMuteConversation: PropTypes.func, onPin: PropTypes.func, onBookmark: PropTypes.func, + onFilter: PropTypes.func, withDismiss: PropTypes.bool, withCounters: PropTypes.bool, scrollKey: PropTypes.string, @@ -207,6 +209,10 @@ class StatusActionBar extends ImmutablePureComponent { this.props.onMuteConversation(this.props.status); } + handleFilter = () => { + this.props.onFilter(); + } + handleCopy = () => { const url = this.props.status.get('url'); const textarea = document.createElement('textarea'); @@ -226,6 +232,11 @@ class StatusActionBar extends ImmutablePureComponent { } } + + handleFilterClick = () => { + this.props.onFilter(); + } + render () { const { status, relationship, intl, withDismiss, withCounters, scrollKey } = this.props; @@ -329,6 +340,10 @@ class StatusActionBar extends ImmutablePureComponent { ); + const filterButton = this.props.onFilter && ( + + ); + return (
@@ -337,6 +352,8 @@ class StatusActionBar extends ImmutablePureComponent { {shareButton} + {filterButton} +
this.props.dispatch(fetchFilters()), 500); + setTimeout(() => this.props.dispatch(fetchRules()), 3000); this.hotkeys.__mousetrap__.stopCallback = (e, element) => { diff --git a/app/javascript/mastodon/reducers/filters.js b/app/javascript/mastodon/reducers/filters.js index 33f0c673280..14b7040273e 100644 --- a/app/javascript/mastodon/reducers/filters.js +++ b/app/javascript/mastodon/reducers/filters.js @@ -1,10 +1,34 @@ -import { FILTERS_FETCH_SUCCESS } from '../actions/filters'; -import { List as ImmutableList, fromJS } from 'immutable'; +import { FILTERS_IMPORT } from '../actions/importer'; +import { Map as ImmutableMap, is, fromJS } from 'immutable'; -export default function filters(state = ImmutableList(), action) { +const normalizeFilter = (state, filter) => { + const normalizedFilter = fromJS({ + id: filter.id, + title: filter.title, + context: filter.context, + filter_action: filter.filter_action, + expires_at: filter.expires_at ? Date.parse(filter.expires_at) : null, + }); + + if (is(state.get(filter.id), normalizedFilter)) { + return state; + } else { + return state.set(filter.id, normalizedFilter); + } +}; + +const normalizeFilters = (state, filters) => { + filters.forEach(filter => { + state = normalizeFilter(state, filter); + }); + + return state; +}; + +export default function filters(state = ImmutableMap(), action) { switch(action.type) { - case FILTERS_FETCH_SUCCESS: - return fromJS(action.filters); + case FILTERS_IMPORT: + return normalizeFilters(state, action.filters); default: return state; } diff --git a/app/javascript/mastodon/selectors/index.js b/app/javascript/mastodon/selectors/index.js index fbd25b605a3..6aeb8b7bdde 100644 --- a/app/javascript/mastodon/selectors/index.js +++ b/app/javascript/mastodon/selectors/index.js @@ -40,15 +40,15 @@ const toServerSideType = columnType => { const escapeRegExp = string => string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string -const regexFromFilters = filters => { - if (filters.size === 0) { +const regexFromKeywords = keywords => { + if (keywords.size === 0) { return null; } - return new RegExp(filters.map(filter => { - let expr = escapeRegExp(filter.get('phrase')); + return new RegExp(keywords.map(keyword_filter => { + let expr = escapeRegExp(keyword_filter.get('keyword')); - if (filter.get('whole_word')) { + if (keyword_filter.get('whole_word')) { if (/^[\w]/.test(expr)) { expr = `\\b${expr}`; } @@ -62,27 +62,15 @@ const regexFromFilters = filters => { }).join('|'), 'i'); }; -// Memoize the filter regexps for each valid server contextType -const makeGetFiltersRegex = () => { - let memo = {}; +const getFilters = (state, { contextType }) => { + if (!contextType) return null; - return (state, { contextType }) => { - if (!contextType) return ImmutableList(); + const serverSideType = toServerSideType(contextType); + const now = new Date(); - const serverSideType = toServerSideType(contextType); - const filters = state.get('filters', ImmutableList()).filter(filter => filter.get('context').includes(serverSideType) && (filter.get('expires_at') === null || Date.parse(filter.get('expires_at')) > (new Date()))); - - if (!memo[serverSideType] || !is(memo[serverSideType].filters, filters)) { - const dropRegex = regexFromFilters(filters.filter(filter => filter.get('irreversible'))); - const regex = regexFromFilters(filters); - memo[serverSideType] = { filters: filters, results: [dropRegex, regex] }; - } - return memo[serverSideType].results; - }; + return state.get('filters').filter((filter) => filter.get('context').includes(serverSideType) && (filter.get('expires_at') === null || filter.get('expires_at') > now)); }; -export const getFiltersRegex = makeGetFiltersRegex(); - export const makeGetStatus = () => { return createSelector( [ @@ -90,10 +78,10 @@ export const makeGetStatus = () => { (state, { id }) => state.getIn(['statuses', state.getIn(['statuses', id, 'reblog'])]), (state, { id }) => state.getIn(['accounts', state.getIn(['statuses', id, 'account'])]), (state, { id }) => state.getIn(['accounts', state.getIn(['statuses', state.getIn(['statuses', id, 'reblog']), 'account'])]), - getFiltersRegex, + getFilters, ], - (statusBase, statusReblog, accountBase, accountReblog, filtersRegex) => { + (statusBase, statusReblog, accountBase, accountReblog, filters) => { if (!statusBase) { return null; } @@ -104,14 +92,17 @@ export const makeGetStatus = () => { statusReblog = null; } - const dropRegex = (accountReblog || accountBase).get('id') !== me && filtersRegex[0]; - if (dropRegex && dropRegex.test(statusBase.get('reblog') ? statusReblog.get('search_index') : statusBase.get('search_index'))) { - return null; + let filtered = false; + if ((accountReblog || accountBase).get('id') !== me && filters) { + let filterResults = statusReblog?.get('filtered') || statusBase.get('filtered') || ImmutableList(); + if (filterResults.some((result) => filters.getIn([result.get('filter'), 'filter_action']) === 'hide')) { + return null; + } + if (!filterResults.isEmpty()) { + filtered = filterResults.map(result => filters.getIn([result.get('filter'), 'title'])); + } } - const regex = (accountReblog || accountBase).get('id') !== me && filtersRegex[1]; - const filtered = regex && regex.test(statusBase.get('reblog') ? statusReblog.get('search_index') : statusBase.get('search_index')); - return statusBase.withMutations(map => { map.set('reblog', statusReblog); map.set('account', accountBase); diff --git a/app/javascript/packs/public.js b/app/javascript/packs/public.js index 3d0a937e1f8..e42468e0c69 100644 --- a/app/javascript/packs/public.js +++ b/app/javascript/packs/public.js @@ -4,6 +4,7 @@ import loadPolyfills from '../mastodon/load_polyfills'; import ready from '../mastodon/ready'; import { start } from '../mastodon/common'; import loadKeyboardExtensions from '../mastodon/load_keyboard_extensions'; +import 'cocoon-js-vanilla'; start(); diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index 66e2997f1f8..4ce5cd10139 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -915,7 +915,8 @@ a.name-tag, text-align: center; } -.applications-list__item { +.applications-list__item, +.filters-list__item { padding: 15px 0; background: $ui-base-color; border: 1px solid lighten($ui-base-color, 4%); @@ -923,7 +924,8 @@ a.name-tag, margin-top: 15px; } -.announcements-list { +.announcements-list, +.filters-list { border: 1px solid lighten($ui-base-color, 4%); border-radius: 4px; @@ -976,6 +978,33 @@ a.name-tag, } } +.filters-list__item { + &__title { + display: flex; + justify-content: space-between; + margin-bottom: 0; + } + + &__permissions { + margin-top: 0; + margin-bottom: 10px; + } + + .expiration { + font-size: 13px; + } + + &.expired { + .expiration { + color: lighten($error-red, 12%); + } + + .permissions-list__item__icon { + color: $dark-text-color; + } + } +} + .dashboard__counters.admin-account-counters { margin-top: 10px; } diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 7e3ce3de241..592ce91f3bd 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -959,6 +959,21 @@ width: 100%; clear: both; border-bottom: 1px solid lighten($ui-base-color, 8%); + + &__button { + display: inline; + color: lighten($ui-highlight-color, 8%); + border: 0; + background: transparent; + padding: 0; + font-size: inherit; + line-height: inherit; + + &:hover, + &:active { + text-decoration: underline; + } + } } .status__prepend-icon-wrapper { diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index d57eabc09ff..da699dd25ed 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -1070,3 +1070,34 @@ code { } } } + +.keywords-table { + thead { + th { + white-space: nowrap; + } + + th:first-child { + width: 100%; + } + } + + tfoot { + td { + border: 0; + } + } + + .input.string { + margin-bottom: 0; + } + + .label_input__wrapper { + margin-top: 10px; + } + + .table-action-link { + margin-top: 10px; + white-space: nowrap; + } +} diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index 4811ebbcc1b..2eb4ba2f4df 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -352,7 +352,6 @@ class FeedManager def filter_from_home?(status, receiver_id, crutches) return false if receiver_id == status.account_id return true if status.reply? && (status.in_reply_to_id.nil? || status.in_reply_to_account_id.nil?) - return true if phrase_filtered?(status, receiver_id, :home) check_for_blocks = crutches[:active_mentions][status.id] || [] check_for_blocks.concat([status.account_id]) @@ -388,7 +387,6 @@ class FeedManager # @return [Boolean] def filter_from_mentions?(status, receiver_id) return true if receiver_id == status.account_id - return true if phrase_filtered?(status, receiver_id, :notifications) # This filter is called from NotifyService, but already after the sender of # the notification has been checked for mute/block. Therefore, it's not @@ -418,34 +416,6 @@ class FeedManager false end - # Check if the status hits a phrase filter - # @param [Status] status - # @param [Integer] receiver_id - # @param [Symbol] context - # @return [Boolean] - def phrase_filtered?(status, receiver_id, context) - active_filters = Rails.cache.fetch("filters:#{receiver_id}") { CustomFilter.where(account_id: receiver_id).active_irreversible.to_a }.to_a - - active_filters.select! { |filter| filter.context.include?(context.to_s) && !filter.expired? } - - active_filters.map! do |filter| - if filter.whole_word - sb = /\A[[:word:]]/.match?(filter.phrase) ? '\b' : '' - eb = /[[:word:]]\z/.match?(filter.phrase) ? '\b' : '' - - /(?mix:#{sb}#{Regexp.escape(filter.phrase)}#{eb})/ - else - /#{Regexp.escape(filter.phrase)}/i - end - end - - return false if active_filters.empty? - - combined_regex = Regexp.union(active_filters) - - combined_regex.match?(status.proper.searchable_text) - end - # Adds a status to an account's feed, returning true if a status was # added, and false if it was not added to the feed. Note that this is # an internal helper: callers must call trim or push updates if diff --git a/app/models/concerns/account_interactions.rb b/app/models/concerns/account_interactions.rb index ad1665dc41e..a7401362f40 100644 --- a/app/models/concerns/account_interactions.rb +++ b/app/models/concerns/account_interactions.rb @@ -247,6 +247,19 @@ module AccountInteractions account_pins.where(target_account: account).exists? end + def status_matches_filters(status) + active_filters = CustomFilter.cached_filters_for(id) + + filter_matches = active_filters.filter_map do |filter, rules| + next if rules[:keywords].blank? + + match = rules[:keywords].match(status.proper.searchable_text) + FilterResultPresenter.new(filter: filter, keyword_matches: [match.to_s]) unless match.nil? + end + + filter_matches + end + def followers_for_local_distribution followers.local .joins(:user) diff --git a/app/models/custom_filter.rb b/app/models/custom_filter.rb index 8e347679414..e98ed7df9fb 100644 --- a/app/models/custom_filter.rb +++ b/app/models/custom_filter.rb @@ -3,18 +3,22 @@ # # Table name: custom_filters # -# id :bigint(8) not null, primary key -# account_id :bigint(8) -# expires_at :datetime -# phrase :text default(""), not null -# context :string default([]), not null, is an Array -# whole_word :boolean default(TRUE), not null -# irreversible :boolean default(FALSE), not null -# created_at :datetime not null -# updated_at :datetime not null +# id :bigint not null, primary key +# account_id :bigint +# expires_at :datetime +# phrase :text default(""), not null +# context :string default([]), not null, is an Array +# created_at :datetime not null +# updated_at :datetime not null +# action :integer default(0), not null # class CustomFilter < ApplicationRecord + self.ignored_columns = %w(whole_word irreversible) + + alias_attribute :title, :phrase + alias_attribute :filter_action, :action + VALID_CONTEXTS = %w( home notifications @@ -26,16 +30,20 @@ class CustomFilter < ApplicationRecord include Expireable include Redisable + enum action: [:warn, :hide], _suffix: :action + belongs_to :account + has_many :keywords, class_name: 'CustomFilterKeyword', foreign_key: :custom_filter_id, inverse_of: :custom_filter, dependent: :destroy + accepts_nested_attributes_for :keywords, reject_if: :all_blank, allow_destroy: true - validates :phrase, :context, presence: true + validates :title, :context, presence: true validate :context_must_be_valid - validate :irreversible_must_be_within_context - - scope :active_irreversible, -> { where(irreversible: true).where(Arel.sql('expires_at IS NULL OR expires_at > NOW()')) } before_validation :clean_up_contexts - after_commit :remove_cache + + before_save :prepare_cache_invalidation! + before_destroy :prepare_cache_invalidation! + after_commit :invalidate_cache! def expires_in return @expires_in if defined?(@expires_in) @@ -44,22 +52,55 @@ class CustomFilter < ApplicationRecord [30.minutes, 1.hour, 6.hours, 12.hours, 1.day, 1.week].find { |expires_in| expires_in.from_now >= expires_at } end + def irreversible=(value) + self.action = value ? :hide : :warn + end + + def irreversible? + hide_action? + end + + def self.cached_filters_for(account_id) + active_filters = Rails.cache.fetch("filters:v3:#{account_id}") do + scope = CustomFilterKeyword.includes(:custom_filter).where(custom_filter: { account_id: account_id }).where(Arel.sql('expires_at IS NULL OR expires_at > NOW()')) + scope.to_a.group_by(&:custom_filter).map do |filter, keywords| + keywords.map! do |keyword| + if keyword.whole_word + sb = /\A[[:word:]]/.match?(keyword.keyword) ? '\b' : '' + eb = /[[:word:]]\z/.match?(keyword.keyword) ? '\b' : '' + + /(?mix:#{sb}#{Regexp.escape(keyword.keyword)}#{eb})/ + else + /#{Regexp.escape(keyword.keyword)}/i + end + end + [filter, { keywords: Regexp.union(keywords) }] + end + end.to_a + + active_filters.select { |custom_filter, _| !custom_filter.expired? } + end + + def prepare_cache_invalidation! + @should_invalidate_cache = true + end + + def invalidate_cache! + return unless @should_invalidate_cache + @should_invalidate_cache = false + + Rails.cache.delete("filters:v3:#{account_id}") + redis.publish("timeline:#{account_id}", Oj.dump(event: :filters_changed)) + redis.publish("timeline:system:#{account_id}", Oj.dump(event: :filters_changed)) + end + private def clean_up_contexts self.context = Array(context).map(&:strip).filter_map(&:presence) end - def remove_cache - Rails.cache.delete("filters:#{account_id}") - redis.publish("timeline:#{account_id}", Oj.dump(event: :filters_changed)) - end - def context_must_be_valid errors.add(:context, I18n.t('filters.errors.invalid_context')) if context.empty? || context.any? { |c| !VALID_CONTEXTS.include?(c) } end - - def irreversible_must_be_within_context - errors.add(:irreversible, I18n.t('filters.errors.invalid_irreversible')) if irreversible? && !context.include?('home') && !context.include?('notifications') - end end diff --git a/app/models/custom_filter_keyword.rb b/app/models/custom_filter_keyword.rb new file mode 100644 index 00000000000..bf5c5574693 --- /dev/null +++ b/app/models/custom_filter_keyword.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true +# == Schema Information +# +# Table name: custom_filter_keywords +# +# id :bigint not null, primary key +# custom_filter_id :bigint not null +# keyword :text default(""), not null +# whole_word :boolean default(TRUE), not null +# created_at :datetime not null +# updated_at :datetime not null +# + +class CustomFilterKeyword < ApplicationRecord + belongs_to :custom_filter + + validates :keyword, presence: true + + alias_attribute :phrase, :keyword + + before_save :prepare_cache_invalidation! + before_destroy :prepare_cache_invalidation! + after_commit :invalidate_cache! + + private + + def prepare_cache_invalidation! + custom_filter.prepare_cache_invalidation! + end + + def invalidate_cache! + custom_filter.invalidate_cache! + end +end diff --git a/app/presenters/filter_result_presenter.rb b/app/presenters/filter_result_presenter.rb new file mode 100644 index 00000000000..677225f5ec2 --- /dev/null +++ b/app/presenters/filter_result_presenter.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +class FilterResultPresenter < ActiveModelSerializers::Model + attributes :filter, :keyword_matches +end diff --git a/app/presenters/status_relationships_presenter.rb b/app/presenters/status_relationships_presenter.rb index 4163bb098c0..d7ffb1954af 100644 --- a/app/presenters/status_relationships_presenter.rb +++ b/app/presenters/status_relationships_presenter.rb @@ -2,7 +2,7 @@ class StatusRelationshipsPresenter attr_reader :reblogs_map, :favourites_map, :mutes_map, :pins_map, - :bookmarks_map + :bookmarks_map, :filters_map def initialize(statuses, current_account_id = nil, **options) if current_account_id.nil? @@ -11,12 +11,14 @@ class StatusRelationshipsPresenter @bookmarks_map = {} @mutes_map = {} @pins_map = {} + @filters_map = {} else statuses = statuses.compact status_ids = statuses.flat_map { |s| [s.id, s.reblog_of_id] }.uniq.compact conversation_ids = statuses.filter_map(&:conversation_id).uniq pinnable_status_ids = statuses.map(&:proper).filter_map { |s| s.id if s.account_id == current_account_id && %w(public unlisted private).include?(s.visibility) } + @filters_map = build_filters_map(statuses, current_account_id).merge(options[:filters_map] || {}) @reblogs_map = Status.reblogs_map(status_ids, current_account_id).merge(options[:reblogs_map] || {}) @favourites_map = Status.favourites_map(status_ids, current_account_id).merge(options[:favourites_map] || {}) @bookmarks_map = Status.bookmarks_map(status_ids, current_account_id).merge(options[:bookmarks_map] || {}) @@ -24,4 +26,24 @@ class StatusRelationshipsPresenter @pins_map = Status.pins_map(pinnable_status_ids, current_account_id).merge(options[:pins_map] || {}) end end + + private + + def build_filters_map(statuses, current_account_id) + active_filters = CustomFilter.cached_filters_for(current_account_id) + + @filters_map = statuses.each_with_object({}) do |status, h| + filter_matches = active_filters.filter_map do |filter, rules| + next if rules[:keywords].blank? + + match = rules[:keywords].match(status.proper.searchable_text) + FilterResultPresenter.new(filter: filter, keyword_matches: [match.to_s]) unless match.nil? + end + + unless filter_matches.empty? + h[status.id] = filter_matches + h[status.reblog_of_id] = filter_matches if status.reblog? + end + end + end end diff --git a/app/serializers/rest/filter_keyword_serializer.rb b/app/serializers/rest/filter_keyword_serializer.rb new file mode 100644 index 00000000000..dd2ebac6eae --- /dev/null +++ b/app/serializers/rest/filter_keyword_serializer.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class REST::FilterKeywordSerializer < ActiveModel::Serializer + attributes :id, :keyword, :whole_word + + def id + object.id.to_s + end +end diff --git a/app/serializers/rest/filter_result_serializer.rb b/app/serializers/rest/filter_result_serializer.rb new file mode 100644 index 00000000000..0ef4db79a87 --- /dev/null +++ b/app/serializers/rest/filter_result_serializer.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +class REST::FilterResultSerializer < ActiveModel::Serializer + belongs_to :filter, serializer: REST::FilterSerializer + has_many :keyword_matches +end diff --git a/app/serializers/rest/filter_serializer.rb b/app/serializers/rest/filter_serializer.rb index 57205630bbb..98d7edb175a 100644 --- a/app/serializers/rest/filter_serializer.rb +++ b/app/serializers/rest/filter_serializer.rb @@ -1,10 +1,14 @@ # frozen_string_literal: true class REST::FilterSerializer < ActiveModel::Serializer - attributes :id, :phrase, :context, :whole_word, :expires_at, - :irreversible + attributes :id, :title, :context, :expires_at, :filter_action + has_many :keywords, serializer: REST::FilterKeywordSerializer, if: :rules_requested? def id object.id.to_s end + + def rules_requested? + instance_options[:rules_requested] + end end diff --git a/app/serializers/rest/status_serializer.rb b/app/serializers/rest/status_serializer.rb index 6bd6a23e51b..e0b8f32a68f 100644 --- a/app/serializers/rest/status_serializer.rb +++ b/app/serializers/rest/status_serializer.rb @@ -13,6 +13,7 @@ class REST::StatusSerializer < ActiveModel::Serializer attribute :muted, if: :current_user? attribute :bookmarked, if: :current_user? attribute :pinned, if: :pinnable? + has_many :filtered, serializer: REST::FilterResultSerializer, if: :current_user? attribute :content, unless: :source_requested? attribute :text, if: :source_requested? @@ -120,6 +121,14 @@ class REST::StatusSerializer < ActiveModel::Serializer end end + def filtered + if instance_options && instance_options[:relationships] + instance_options[:relationships].filters_map[object.id] || [] + else + current_user.account.status_matches_filters(object) + end + end + def pinnable? current_user? && current_user.account_id == object.account_id && diff --git a/app/serializers/rest/v1/filter_serializer.rb b/app/serializers/rest/v1/filter_serializer.rb new file mode 100644 index 00000000000..455f17efdb3 --- /dev/null +++ b/app/serializers/rest/v1/filter_serializer.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +class REST::V1::FilterSerializer < ActiveModel::Serializer + attributes :id, :phrase, :context, :whole_word, :expires_at, + :irreversible + + delegate :context, :expires_at, to: :custom_filter + + def id + object.id.to_s + end + + def phrase + object.keyword + end + + def irreversible + custom_filter.irreversible? + end + + private + + def custom_filter + object.custom_filter + end +end diff --git a/app/views/filters/_fields.html.haml b/app/views/filters/_fields.html.haml deleted file mode 100644 index 84dcdcca515..00000000000 --- a/app/views/filters/_fields.html.haml +++ /dev/null @@ -1,16 +0,0 @@ -.fields-row - .fields-row__column.fields-row__column-6.fields-group - = f.input :phrase, as: :string, wrapper: :with_label, hint: false - .fields-row__column.fields-row__column-6.fields-group - = f.input :expires_in, wrapper: :with_label, collection: [30.minutes, 1.hour, 6.hours, 12.hours, 1.day, 1.week].map(&:to_i), label_method: lambda { |i| I18n.t("invites.expires_in.#{i}") }, include_blank: I18n.t('invites.expires_in_prompt') - -.fields-group - = f.input :context, wrapper: :with_block_label, collection: CustomFilter::VALID_CONTEXTS, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', label_method: lambda { |context| I18n.t("filters.contexts.#{context}") }, include_blank: false - -%hr.spacer/ - -.fields-group - = f.input :irreversible, wrapper: :with_label - -.fields-group - = f.input :whole_word, wrapper: :with_label diff --git a/app/views/filters/_filter.html.haml b/app/views/filters/_filter.html.haml new file mode 100644 index 00000000000..2ab014081c8 --- /dev/null +++ b/app/views/filters/_filter.html.haml @@ -0,0 +1,32 @@ +.filters-list__item{ class: [filter.expired? && 'expired'] } + = link_to edit_filter_path(filter), class: 'filters-list__item__title' do + = filter.title + + - if filter.expires? + .expiration{ title: t('filters.index.expires_on', date: l(filter.expires_at)) } + - if filter.expired? + = t('invites.expired') + - else + = t('filters.index.expires_in', distance: distance_of_time_in_words_to_now(filter.expires_at)) + + .filters-list__item__permissions + %ul.permissions-list + - unless filter.keywords.empty? + %li.permissions-list__item + .permissions-list__item__icon + = fa_icon('paragraph') + .permissions-list__item__text + .permissions-list__item__text__title + = t('filters.index.keywords', count: filter.keywords.size) + .permissions-list__item__text__type + - keywords = filter.keywords.map(&:keyword) + - keywords = keywords.take(5) + ['…'] if keywords.size > 5 # TODO + = keywords.join(', ') + + .announcements-list__item__action-bar + .announcements-list__item__meta + = t('filters.index.contexts', contexts: filter.context.map { |context| I18n.t("filters.contexts.#{context}") }.join(', ')) + + %div + = table_link_to 'pencil', t('filters.edit.title'), edit_filter_path(filter) + = table_link_to 'times', t('filters.index.delete'), filter_path(filter), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } diff --git a/app/views/filters/_filter_fields.html.haml b/app/views/filters/_filter_fields.html.haml new file mode 100644 index 00000000000..1a52faa7af5 --- /dev/null +++ b/app/views/filters/_filter_fields.html.haml @@ -0,0 +1,33 @@ +.fields-row + .fields-row__column.fields-row__column-6.fields-group + = f.input :title, as: :string, wrapper: :with_label, hint: false + .fields-row__column.fields-row__column-6.fields-group + = f.input :expires_in, wrapper: :with_label, collection: [30.minutes, 1.hour, 6.hours, 12.hours, 1.day, 1.week].map(&:to_i), label_method: lambda { |i| I18n.t("invites.expires_in.#{i}") }, include_blank: I18n.t('invites.expires_in_prompt') + +.fields-group + = f.input :context, wrapper: :with_block_label, collection: CustomFilter::VALID_CONTEXTS, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', label_method: lambda { |context| I18n.t("filters.contexts.#{context}") }, include_blank: false + +%hr.spacer/ + +.fields-group + = f.input :filter_action, as: :radio_buttons, collection: %i(warn hide), include_blank: false, wrapper: :with_block_label, label_method: ->(action) { safe_join([t("simple_form.labels.filters.actions.#{action}"), content_tag(:span, t("simple_form.hints.filters.actions.#{action}"), class: 'hint')]) }, hint: t('simple_form.hints.filters.action'), required: true + +%hr.spacer/ + +%h4= t('filters.edit.keywords') + +.table-wrapper + %table.table.keywords-table + %thead + %tr + %th= t('simple_form.labels.defaults.phrase') + %th= t('simple_form.labels.defaults.whole_word') + %th + %tbody + = f.simple_fields_for :keywords do |keyword| + = render 'keyword_fields', f: keyword + %tfoot + %tr + %td{ colspan: 3} + = link_to_add_association f, :keywords, class: 'table-action-link', partial: 'keyword_fields', 'data-association-insertion-node': '.keywords-table tbody', 'data-association-insertion-method': 'append' do + = safe_join([fa_icon('plus'), t('filters.edit.add_keyword')]) diff --git a/app/views/filters/_keyword_fields.html.haml b/app/views/filters/_keyword_fields.html.haml new file mode 100644 index 00000000000..eedd514ef52 --- /dev/null +++ b/app/views/filters/_keyword_fields.html.haml @@ -0,0 +1,8 @@ +%tr.nested-fields + %td= f.input :keyword, as: :string + %td + .label_input__wrapper= f.input_field :whole_word + %td + = f.hidden_field :id if f.object&.persisted? # Required so Rails doesn't put the field outside of the + = link_to_remove_association(f, class: 'table-action-link') do + = safe_join([fa_icon('times'), t('filters.index.delete')]) diff --git a/app/views/filters/edit.html.haml b/app/views/filters/edit.html.haml index e971215ac6b..3dc3f07b72c 100644 --- a/app/views/filters/edit.html.haml +++ b/app/views/filters/edit.html.haml @@ -2,7 +2,7 @@ = t('filters.edit.title') = simple_form_for @filter, url: filter_path(@filter), method: :put do |f| - = render 'fields', f: f + = render 'filter_fields', f: f .actions = f.button :button, t('generic.save_changes'), type: :submit diff --git a/app/views/filters/index.html.haml b/app/views/filters/index.html.haml index b4d5333aa10..0227526a47e 100644 --- a/app/views/filters/index.html.haml +++ b/app/views/filters/index.html.haml @@ -7,18 +7,5 @@ - if @filters.empty? %div.muted-hint.center-text= t 'filters.index.empty' - else - .table-wrapper - %table.table - %thead - %tr - %th= t('simple_form.labels.defaults.phrase') - %th= t('simple_form.labels.defaults.context') - %th - %tbody - - @filters.each do |filter| - %tr - %td= filter.phrase - %td= filter.context.map { |context| I18n.t("filters.contexts.#{context}") }.join(', ') - %td - = table_link_to 'pencil', t('filters.edit.title'), edit_filter_path(filter) - = table_link_to 'times', t('filters.index.delete'), filter_path(filter), method: :delete + .applications-list + = render partial: 'filter', collection: @filters diff --git a/app/views/filters/new.html.haml b/app/views/filters/new.html.haml index 05bec343f85..5f400e604a7 100644 --- a/app/views/filters/new.html.haml +++ b/app/views/filters/new.html.haml @@ -2,7 +2,7 @@ = t('filters.new.title') = simple_form_for @filter, url: filters_path do |f| - = render 'fields', f: f + = render 'filter_fields', f: f .actions - = f.button :button, t('filters.new.title'), type: :submit + = f.button :button, t('filters.new.save'), type: :submit diff --git a/config/locales/en.yml b/config/locales/en.yml index 5a0fc3da88e..91ae3a3bce6 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1124,15 +1124,24 @@ en: public: Public timelines thread: Conversations edit: + add_keyword: Add keyword + keywords: Keywords title: Edit filter errors: + deprecated_api_multiple_keywords: These parameters cannot be changed from this application because they apply to more than one filter keyword. Use a more recent application or the web interface. invalid_context: None or invalid context supplied - invalid_irreversible: Irreversible filtering only works with home or notifications context index: + contexts: Filters in %{contexts} delete: Delete empty: You have no filters. + expires_in: Expires in %{distance} + expires_on: Expires on %{date} + keywords: + one: "%{count} keyword" + other: "%{count} keywords" title: Filters new: + save: Save new filter title: Add new filter footer: developers: Developers diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 7e4f52849a1..ea4f68562a0 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -68,6 +68,11 @@ en: with_dns_records: An attempt to resolve the given domain's DNS records will be made and the results will also be blocked featured_tag: name: 'You might want to use one of these:' + filters: + action: Chose which action to perform when a post matches the filter + actions: + hide: Completely hide the filtered content, behaving as if it did not exist + warn: Hide the filtered content behind a warning mentioning the filter's title form_challenge: current_password: You are entering a secure area imports: @@ -181,6 +186,7 @@ en: setting_use_pending_items: Slow mode severity: Severity sign_in_token_attempt: Security code + title: Title type: Import type username: Username username_or_email: Username or Email @@ -189,6 +195,10 @@ en: with_dns_records: Include MX records and IPs of the domain featured_tag: name: Hashtag + filters: + actions: + hide: Hide completely + warn: Hide with a warning interactions: must_be_follower: Block notifications from non-followers must_be_following: Block notifications from people you don't follow diff --git a/config/routes.rb b/config/routes.rb index 1b9c5079970..4abf55655d6 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -451,10 +451,16 @@ Rails.application.routes.draw do resources :bookmarks, only: [:index] resources :reports, only: [:create] resources :trends, only: [:index], controller: 'trends/tags' - resources :filters, only: [:index, :create, :show, :update, :destroy] + resources :filters, only: [:index, :create, :show, :update, :destroy] do + resources :keywords, only: [:index, :create], controller: 'filters/keywords' + end resources :endorsements, only: [:index] resources :markers, only: [:index, :create] + namespace :filters do + resources :keywords, only: [:show, :update, :destroy] + end + namespace :apps do get :verify_credentials, to: 'credentials#show' end @@ -589,6 +595,7 @@ Rails.application.routes.draw do resources :media, only: [:create] get '/search', to: 'search#index', as: :search resources :suggestions, only: [:index] + resources :filters, only: [:index, :create, :show, :update, :destroy] namespace :admin do resources :accounts, only: [:index] diff --git a/db/migrate/20220613110628_create_custom_filter_keywords.rb b/db/migrate/20220613110628_create_custom_filter_keywords.rb new file mode 100644 index 00000000000..353fc334f0a --- /dev/null +++ b/db/migrate/20220613110628_create_custom_filter_keywords.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class CreateCustomFilterKeywords < ActiveRecord::Migration[6.1] + def change + create_table :custom_filter_keywords do |t| + t.belongs_to :custom_filter, foreign_key: { on_delete: :cascade }, null: false + t.text :keyword, null: false, default: '' + t.boolean :whole_word, null: false, default: true + + t.timestamps + end + end +end diff --git a/db/migrate/20220613110711_migrate_custom_filters.rb b/db/migrate/20220613110711_migrate_custom_filters.rb new file mode 100644 index 00000000000..ea6a9b8c6d1 --- /dev/null +++ b/db/migrate/20220613110711_migrate_custom_filters.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +class MigrateCustomFilters < ActiveRecord::Migration[6.1] + def up + # Preserve IDs as much as possible to not confuse existing clients. + # As long as this migration is irreversible, we do not have to deal with conflicts. + safety_assured do + execute <<-SQL.squish + INSERT INTO custom_filter_keywords (id, custom_filter_id, keyword, whole_word, created_at, updated_at) + SELECT id, id, phrase, whole_word, created_at, updated_at + FROM custom_filters + SQL + end + end + + def down + # Copy back changes from custom filters guaranteed to be from the old API + safety_assured do + execute <<-SQL.squish + UPDATE custom_filters + SET phrase = custom_filter_keywords.keyword, whole_word = custom_filter_keywords.whole_word + FROM custom_filter_keywords + WHERE custom_filters.id = custom_filter_keywords.id AND custom_filters.id = custom_filter_keywords.custom_filter_id + SQL + end + + # Drop every keyword as we can't safely provide a 1:1 mapping + safety_assured do + execute <<-SQL.squish + TRUNCATE custom_filter_keywords RESTART IDENTITY + SQL + end + end +end diff --git a/db/migrate/20220613110834_add_action_to_custom_filters.rb b/db/migrate/20220613110834_add_action_to_custom_filters.rb new file mode 100644 index 00000000000..9427a66fc48 --- /dev/null +++ b/db/migrate/20220613110834_add_action_to_custom_filters.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class AddActionToCustomFilters < ActiveRecord::Migration[6.1] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + def up + safety_assured do + add_column_with_default :custom_filters, :action, :integer, allow_null: false, default: 0 + execute 'UPDATE custom_filters SET action = 1 WHERE irreversible IS TRUE' + end + end + + def down + execute 'UPDATE custom_filters SET irreversible = (action = 1)' + remove_column :custom_filters, :action + end +end diff --git a/db/post_migrate/20220613110802_remove_whole_word_from_custom_filters.rb b/db/post_migrate/20220613110802_remove_whole_word_from_custom_filters.rb new file mode 100644 index 00000000000..7ef0749e542 --- /dev/null +++ b/db/post_migrate/20220613110802_remove_whole_word_from_custom_filters.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class RemoveWholeWordFromCustomFilters < ActiveRecord::Migration[6.1] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + def up + safety_assured do + remove_column :custom_filters, :whole_word + end + end + + def down + safety_assured do + add_column_with_default :custom_filters, :whole_word, :boolean, default: true, allow_null: false + end + end +end diff --git a/db/post_migrate/20220613110903_remove_irreversible_from_custom_filters.rb b/db/post_migrate/20220613110903_remove_irreversible_from_custom_filters.rb new file mode 100644 index 00000000000..6ed8bcfeee9 --- /dev/null +++ b/db/post_migrate/20220613110903_remove_irreversible_from_custom_filters.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class RemoveIrreversibleFromCustomFilters < ActiveRecord::Migration[6.1] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + def up + safety_assured do + remove_column :custom_filters, :irreversible + end + end + + def down + safety_assured do + add_column_with_default :custom_filters, :irreversible, :boolean, allow_null: false, default: false + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 5d8aea60106..759dc712bfe 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2022_06_06_044941) do +ActiveRecord::Schema.define(version: 2022_06_13_110903) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -339,15 +339,23 @@ ActiveRecord::Schema.define(version: 2022_06_06_044941) do t.index ["shortcode", "domain"], name: "index_custom_emojis_on_shortcode_and_domain", unique: true end + create_table "custom_filter_keywords", force: :cascade do |t| + t.bigint "custom_filter_id", null: false + t.text "keyword", default: "", null: false + t.boolean "whole_word", default: true, null: false + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["custom_filter_id"], name: "index_custom_filter_keywords_on_custom_filter_id" + end + create_table "custom_filters", force: :cascade do |t| t.bigint "account_id" t.datetime "expires_at" t.text "phrase", default: "", null: false t.string "context", default: [], null: false, array: true - t.boolean "irreversible", default: false, null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.boolean "whole_word", default: true, null: false + t.integer "action", default: 0, null: false t.index ["account_id"], name: "index_custom_filters_on_account_id" end @@ -1082,6 +1090,7 @@ ActiveRecord::Schema.define(version: 2022_06_06_044941) do add_foreign_key "canonical_email_blocks", "accounts", column: "reference_account_id", on_delete: :cascade add_foreign_key "conversation_mutes", "accounts", name: "fk_225b4212bb", on_delete: :cascade add_foreign_key "conversation_mutes", "conversations", on_delete: :cascade + add_foreign_key "custom_filter_keywords", "custom_filters", on_delete: :cascade add_foreign_key "custom_filters", "accounts", on_delete: :cascade add_foreign_key "devices", "accounts", on_delete: :cascade add_foreign_key "devices", "oauth_access_tokens", column: "access_token_id", on_delete: :cascade diff --git a/lib/tasks/tests.rake b/lib/tasks/tests.rake index 0f3b44a7443..65bff6a8e8f 100644 --- a/lib/tasks/tests.rake +++ b/lib/tasks/tests.rake @@ -38,10 +38,26 @@ namespace :tests do puts 'Instance actor does not have a private key' exit(1) end + + unless Account.find_by(username: 'user', domain: nil).custom_filters.map { |filter| filter.keywords.pluck(:keyword) } == [['test'], ['take']] + puts 'CustomFilterKeyword records not created as expected' + exit(1) + end + end + + desc 'Populate the database with test data for 2.4.3' + task populate_v2_4_3: :environment do # rubocop:disable Naming/VariableNumber + ActiveRecord::Base.connection.execute(<<~SQL) + INSERT INTO "custom_filters" + (id, account_id, phrase, context, whole_word, irreversible, created_at, updated_at) + VALUES + (1, 2, 'test', '{ "home", "public" }', true, true, now(), now()), + (2, 2, 'take', '{ "home" }', false, false, now(), now()); + SQL end desc 'Populate the database with test data for 2.4.0' - task populate_v2_4: :environment do + task populate_v2_4: :environment do # rubocop:disable Naming/VariableNumber ActiveRecord::Base.connection.execute(<<~SQL) INSERT INTO "settings" (id, thing_type, thing_id, var, value, created_at, updated_at) diff --git a/package.json b/package.json index 30fe8b67252..343a8267e55 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "babel-plugin-transform-react-remove-prop-types": "^0.4.24", "blurhash": "^1.1.5", "classnames": "^2.3.1", + "cocoon-js-vanilla": "^1.2.0", "color-blend": "^3.0.1", "compression-webpack-plugin": "^6.1.1", "cross-env": "^7.0.3", @@ -71,6 +72,7 @@ "intl-relativeformat": "^6.4.3", "is-nan": "^1.3.2", "js-yaml": "^4.1.0", + "jsdom": "^20.0.0", "lodash": "^4.17.21", "mark-loader": "^0.1.6", "marky": "^1.2.4", diff --git a/spec/controllers/api/v1/filters/keywords_controller_spec.rb b/spec/controllers/api/v1/filters/keywords_controller_spec.rb new file mode 100644 index 00000000000..aecb4e41c93 --- /dev/null +++ b/spec/controllers/api/v1/filters/keywords_controller_spec.rb @@ -0,0 +1,142 @@ +require 'rails_helper' + +RSpec.describe Api::V1::Filters::KeywordsController, type: :controller do + render_views + + let(:user) { Fabricate(:user) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:filter) { Fabricate(:custom_filter, account: user.account) } + let(:other_user) { Fabricate(:user) } + let(:other_filter) { Fabricate(:custom_filter, account: other_user.account) } + + before do + allow(controller).to receive(:doorkeeper_token) { token } + end + + describe 'GET #index' do + let(:scopes) { 'read:filters' } + let!(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) } + + it 'returns http success' do + get :index, params: { filter_id: filter.id } + expect(response).to have_http_status(200) + end + + context "when trying to access another's user filters" do + it 'returns http not found' do + get :index, params: { filter_id: other_filter.id } + expect(response).to have_http_status(404) + end + end + end + + describe 'POST #create' do + let(:scopes) { 'write:filters' } + let(:filter_id) { filter.id } + + before do + post :create, params: { filter_id: filter_id, keyword: 'magic', whole_word: false } + end + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'returns a keyword' do + json = body_as_json + expect(json[:keyword]).to eq 'magic' + expect(json[:whole_word]).to eq false + end + + it 'creates a keyword' do + filter = user.account.custom_filters.first + expect(filter).to_not be_nil + expect(filter.keywords.pluck(:keyword)).to eq ['magic'] + end + + context "when trying to add to another another's user filters" do + let(:filter_id) { other_filter.id } + + it 'returns http not found' do + expect(response).to have_http_status(404) + end + end + end + + describe 'GET #show' do + let(:scopes) { 'read:filters' } + let(:keyword) { Fabricate(:custom_filter_keyword, keyword: 'foo', whole_word: false, custom_filter: filter) } + + before do + get :show, params: { id: keyword.id } + end + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'returns expected data' do + json = body_as_json + expect(json[:keyword]).to eq 'foo' + expect(json[:whole_word]).to eq false + end + + context "when trying to access another user's filter keyword" do + let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: other_filter) } + + it 'returns http not found' do + expect(response).to have_http_status(404) + end + end + end + + describe 'PUT #update' do + let(:scopes) { 'write:filters' } + let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) } + + before do + get :update, params: { id: keyword.id, keyword: 'updated' } + end + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'updates the keyword' do + expect(keyword.reload.keyword).to eq 'updated' + end + + context "when trying to update another user's filter keyword" do + let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: other_filter) } + + it 'returns http not found' do + expect(response).to have_http_status(404) + end + end + end + + describe 'DELETE #destroy' do + let(:scopes) { 'write:filters' } + let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) } + + before do + delete :destroy, params: { id: keyword.id } + end + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'removes the filter' do + expect { keyword.reload }.to raise_error ActiveRecord::RecordNotFound + end + + context "when trying to update another user's filter keyword" do + let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: other_filter) } + + it 'returns http not found' do + expect(response).to have_http_status(404) + end + end + end +end diff --git a/spec/controllers/api/v1/filters_controller_spec.rb b/spec/controllers/api/v1/filters_controller_spec.rb index 5948809e3f1..af1951f0ba6 100644 --- a/spec/controllers/api/v1/filters_controller_spec.rb +++ b/spec/controllers/api/v1/filters_controller_spec.rb @@ -34,7 +34,7 @@ RSpec.describe Api::V1::FiltersController, type: :controller do it 'creates a filter' do filter = user.account.custom_filters.first expect(filter).to_not be_nil - expect(filter.phrase).to eq 'magic' + expect(filter.keywords.pluck(:keyword)).to eq ['magic'] expect(filter.context).to eq %w(home) expect(filter.irreversible?).to be true expect(filter.expires_at).to be_nil @@ -42,21 +42,23 @@ RSpec.describe Api::V1::FiltersController, type: :controller do end describe 'GET #show' do - let(:scopes) { 'read:filters' } - let(:filter) { Fabricate(:custom_filter, account: user.account) } + let(:scopes) { 'read:filters' } + let(:filter) { Fabricate(:custom_filter, account: user.account) } + let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) } it 'returns http success' do - get :show, params: { id: filter.id } + get :show, params: { id: keyword.id } expect(response).to have_http_status(200) end end describe 'PUT #update' do - let(:scopes) { 'write:filters' } - let(:filter) { Fabricate(:custom_filter, account: user.account) } + let(:scopes) { 'write:filters' } + let(:filter) { Fabricate(:custom_filter, account: user.account) } + let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) } before do - put :update, params: { id: filter.id, phrase: 'updated' } + put :update, params: { id: keyword.id, phrase: 'updated' } end it 'returns http success' do @@ -64,16 +66,17 @@ RSpec.describe Api::V1::FiltersController, type: :controller do end it 'updates the filter' do - expect(filter.reload.phrase).to eq 'updated' + expect(keyword.reload.phrase).to eq 'updated' end end describe 'DELETE #destroy' do - let(:scopes) { 'write:filters' } - let(:filter) { Fabricate(:custom_filter, account: user.account) } + let(:scopes) { 'write:filters' } + let(:filter) { Fabricate(:custom_filter, account: user.account) } + let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) } before do - delete :destroy, params: { id: filter.id } + delete :destroy, params: { id: keyword.id } end it 'returns http success' do @@ -81,7 +84,7 @@ RSpec.describe Api::V1::FiltersController, type: :controller do end it 'removes the filter' do - expect { filter.reload }.to raise_error ActiveRecord::RecordNotFound + expect { keyword.reload }.to raise_error ActiveRecord::RecordNotFound end end end diff --git a/spec/controllers/api/v1/statuses_controller_spec.rb b/spec/controllers/api/v1/statuses_controller_spec.rb index 2eb30af74be..4d104a198db 100644 --- a/spec/controllers/api/v1/statuses_controller_spec.rb +++ b/spec/controllers/api/v1/statuses_controller_spec.rb @@ -20,6 +20,58 @@ RSpec.describe Api::V1::StatusesController, type: :controller do get :show, params: { id: status.id } expect(response).to have_http_status(200) end + + context 'when post includes filtered terms' do + let(:status) { Fabricate(:status, text: 'this toot is about that banned word') } + + before do + user.account.custom_filters.create!(phrase: 'filter1', context: %w(home), action: :hide, keywords_attributes: [{ keyword: 'banned' }, { keyword: 'irrelevant' }]) + end + + it 'returns http success' do + get :show, params: { id: status.id } + expect(response).to have_http_status(200) + end + + it 'returns filter information' do + get :show, params: { id: status.id } + json = body_as_json + expect(json[:filtered][0]).to include({ + filter: a_hash_including({ + id: user.account.custom_filters.first.id.to_s, + title: 'filter1', + filter_action: 'hide', + }), + keyword_matches: ['banned'], + }) + end + end + + context 'when reblog includes filtered terms' do + let(:status) { Fabricate(:status, reblog: Fabricate(:status, text: 'this toot is about that banned word')) } + + before do + user.account.custom_filters.create!(phrase: 'filter1', context: %w(home), action: :hide, keywords_attributes: [{ keyword: 'banned' }, { keyword: 'irrelevant' }]) + end + + it 'returns http success' do + get :show, params: { id: status.id } + expect(response).to have_http_status(200) + end + + it 'returns filter information' do + get :show, params: { id: status.id } + json = body_as_json + expect(json[:reblog][:filtered][0]).to include({ + filter: a_hash_including({ + id: user.account.custom_filters.first.id.to_s, + title: 'filter1', + filter_action: 'hide', + }), + keyword_matches: ['banned'], + }) + end + end end describe 'GET #context' do diff --git a/spec/controllers/api/v2/filters_controller_spec.rb b/spec/controllers/api/v2/filters_controller_spec.rb new file mode 100644 index 00000000000..cc0070d577e --- /dev/null +++ b/spec/controllers/api/v2/filters_controller_spec.rb @@ -0,0 +1,121 @@ +require 'rails_helper' + +RSpec.describe Api::V2::FiltersController, type: :controller do + render_views + + let(:user) { Fabricate(:user) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + + before do + allow(controller).to receive(:doorkeeper_token) { token } + end + + describe 'GET #index' do + let(:scopes) { 'read:filters' } + let!(:filter) { Fabricate(:custom_filter, account: user.account) } + + it 'returns http success' do + get :index + expect(response).to have_http_status(200) + end + end + + describe 'POST #create' do + let(:scopes) { 'write:filters' } + + before do + post :create, params: { title: 'magic', context: %w(home), filter_action: 'hide', keywords_attributes: [keyword: 'magic'] } + end + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'returns a filter with keywords' do + json = body_as_json + expect(json[:title]).to eq 'magic' + expect(json[:filter_action]).to eq 'hide' + expect(json[:context]).to eq ['home'] + expect(json[:keywords].map { |keyword| keyword.slice(:keyword, :whole_word) }).to eq [{ keyword: 'magic', whole_word: true }] + end + + it 'creates a filter' do + filter = user.account.custom_filters.first + expect(filter).to_not be_nil + expect(filter.keywords.pluck(:keyword)).to eq ['magic'] + expect(filter.context).to eq %w(home) + expect(filter.irreversible?).to be true + expect(filter.expires_at).to be_nil + end + end + + describe 'GET #show' do + let(:scopes) { 'read:filters' } + let(:filter) { Fabricate(:custom_filter, account: user.account) } + + it 'returns http success' do + get :show, params: { id: filter.id } + expect(response).to have_http_status(200) + end + end + + describe 'PUT #update' do + let(:scopes) { 'write:filters' } + let!(:filter) { Fabricate(:custom_filter, account: user.account) } + let!(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) } + + context 'updating filter parameters' do + before do + put :update, params: { id: filter.id, title: 'updated', context: %w(home public) } + end + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'updates the filter title' do + expect(filter.reload.title).to eq 'updated' + end + + it 'updates the filter context' do + expect(filter.reload.context).to eq %w(home public) + end + end + + context 'updating keywords in bulk' do + before do + allow(redis).to receive_messages(publish: nil) + put :update, params: { id: filter.id, keywords_attributes: [{ id: keyword.id, keyword: 'updated' }] } + end + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'updates the keyword' do + expect(keyword.reload.keyword).to eq 'updated' + end + + it 'sends exactly one filters_changed event' do + expect(redis).to have_received(:publish).with("timeline:#{user.account.id}", Oj.dump(event: :filters_changed)).once + end + end + end + + describe 'DELETE #destroy' do + let(:scopes) { 'write:filters' } + let(:filter) { Fabricate(:custom_filter, account: user.account) } + + before do + delete :destroy, params: { id: filter.id } + end + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'removes the filter' do + expect { filter.reload }.to raise_error ActiveRecord::RecordNotFound + end + end +end diff --git a/spec/fabricators/custom_filter_keyword_fabricator.rb b/spec/fabricators/custom_filter_keyword_fabricator.rb new file mode 100644 index 00000000000..0f101dcd1ab --- /dev/null +++ b/spec/fabricators/custom_filter_keyword_fabricator.rb @@ -0,0 +1,4 @@ +Fabricator(:custom_filter_keyword) do + custom_filter + keyword 'discourse' +end diff --git a/spec/lib/feed_manager_spec.rb b/spec/lib/feed_manager_spec.rb index 3ba8aaa9fa9..48c57b86e11 100644 --- a/spec/lib/feed_manager_spec.rb +++ b/spec/lib/feed_manager_spec.rb @@ -127,38 +127,6 @@ RSpec.describe FeedManager do reblog = Fabricate(:status, reblog: status, account: jeff) expect(FeedManager.instance.filter?(:home, reblog, alice)).to be true end - - context 'for irreversibly muted phrases' do - it 'considers word boundaries when matching' do - alice.custom_filters.create!(phrase: 'bob', context: %w(home), irreversible: true) - alice.follow!(jeff) - status = Fabricate(:status, text: 'bobcats', account: jeff) - expect(FeedManager.instance.filter?(:home, status, alice)).to be_falsy - end - - it 'returns true if phrase is contained' do - alice.custom_filters.create!(phrase: 'farts', context: %w(home public), irreversible: true) - alice.custom_filters.create!(phrase: 'pop tarts', context: %w(home), irreversible: true) - alice.follow!(jeff) - status = Fabricate(:status, text: 'i sure like POP TARts', account: jeff) - expect(FeedManager.instance.filter?(:home, status, alice)).to be true - end - - it 'matches substrings if whole_word is false' do - alice.custom_filters.create!(phrase: 'take', context: %w(home), whole_word: false, irreversible: true) - alice.follow!(jeff) - status = Fabricate(:status, text: 'shiitake', account: jeff) - expect(FeedManager.instance.filter?(:home, status, alice)).to be true - end - - it 'returns true if phrase is contained in a poll option' do - alice.custom_filters.create!(phrase: 'farts', context: %w(home public), irreversible: true) - alice.custom_filters.create!(phrase: 'pop tarts', context: %w(home), irreversible: true) - alice.follow!(jeff) - status = Fabricate(:status, text: 'what do you prefer', poll: Fabricate(:poll, options: %w(farts POP TARts)), account: jeff) - expect(FeedManager.instance.filter?(:home, status, alice)).to be true - end - end end context 'for mentions feed' do diff --git a/spec/models/custom_filter_keyword_spec.rb b/spec/models/custom_filter_keyword_spec.rb new file mode 100644 index 00000000000..e15b9dad507 --- /dev/null +++ b/spec/models/custom_filter_keyword_spec.rb @@ -0,0 +1,4 @@ +require 'rails_helper' + +RSpec.describe CustomFilterKeyword, type: :model do +end diff --git a/spec/presenters/status_relationships_presenter_spec.rb b/spec/presenters/status_relationships_presenter_spec.rb index 03296bd179c..5cd4929a63c 100644 --- a/spec/presenters/status_relationships_presenter_spec.rb +++ b/spec/presenters/status_relationships_presenter_spec.rb @@ -5,7 +5,7 @@ require 'rails_helper' RSpec.describe StatusRelationshipsPresenter do describe '.initialize' do before do - allow(Status).to receive(:reblogs_map).with(status_ids, current_account_id).and_return(default_map) + allow(Status).to receive(:reblogs_map).with(match_array(status_ids), current_account_id).and_return(default_map) allow(Status).to receive(:favourites_map).with(status_ids, current_account_id).and_return(default_map) allow(Status).to receive(:bookmarks_map).with(status_ids, current_account_id).and_return(default_map) allow(Status).to receive(:mutes_map).with(anything, current_account_id).and_return(default_map) @@ -15,7 +15,7 @@ RSpec.describe StatusRelationshipsPresenter do let(:presenter) { StatusRelationshipsPresenter.new(statuses, current_account_id, **options) } let(:current_account_id) { Fabricate(:account).id } let(:statuses) { [Fabricate(:status)] } - let(:status_ids) { statuses.map(&:id) } + let(:status_ids) { statuses.map(&:id) + statuses.map(&:reblog_of_id).compact } let(:default_map) { { 1 => true } } context 'options are not set' do @@ -69,5 +69,30 @@ RSpec.describe StatusRelationshipsPresenter do expect(presenter.pins_map).to eq default_map.merge(options[:pins_map]) end end + + context 'when post includes filtered terms' do + let(:statuses) { [Fabricate(:status, text: 'this toot is about that banned word'), Fabricate(:status, reblog: Fabricate(:status, text: 'this toot is about an irrelevant word'))] } + let(:options) { {} } + + before do + Account.find(current_account_id).custom_filters.create!(phrase: 'filter1', context: %w(home), action: :hide, keywords_attributes: [{ keyword: 'banned' }, { keyword: 'irrelevant' }]) + end + + it 'sets @filters_map to filter top-level status' do + matched_filters = presenter.filters_map[statuses[0].id] + expect(matched_filters.size).to eq 1 + + expect(matched_filters[0].filter.title).to eq 'filter1' + expect(matched_filters[0].keyword_matches).to eq ['banned'] + end + + it 'sets @filters_map to filter reblogged status' do + matched_filters = presenter.filters_map[statuses[1].reblog_of_id] + expect(matched_filters.size).to eq 1 + + expect(matched_filters[0].filter.title).to eq 'filter1' + expect(matched_filters[0].keyword_matches).to eq ['irrelevant'] + end + end end end diff --git a/streaming/index.js b/streaming/index.js index 6935c47645c..792ec5a445e 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -12,6 +12,7 @@ const url = require('url'); const uuid = require('uuid'); const fs = require('fs'); const WebSocket = require('ws'); +const { JSDOM } = require('jsdom'); const env = process.env.NODE_ENV || 'development'; const alwaysRequireAuth = process.env.LIMITED_FEDERATION_MODE === 'true' || process.env.WHITELIST_MODE === 'true' || process.env.AUTHORIZED_FETCH === 'true'; @@ -503,6 +504,9 @@ const startWorker = async (workerId) => { if (event === 'kill') { log.verbose(req.requestId, `Closing connection for ${req.accountId} due to expired access token`); eventHandlers.onKill(); + } else if (event === 'filters_changed') { + log.verbose(req.requestId, `Invalidating filters cache for ${req.accountId}`); + req.cachedFilters = null; } }; }; @@ -512,7 +516,8 @@ const startWorker = async (workerId) => { * @param {any} res */ const subscribeHttpToSystemChannel = (req, res) => { - const systemChannelId = `timeline:access_token:${req.accessTokenId}`; + const accessTokenChannelId = `timeline:access_token:${req.accessTokenId}`; + const systemChannelId = `timeline:system:${req.accountId}`; const listener = createSystemMessageListener(req, { @@ -523,9 +528,11 @@ const startWorker = async (workerId) => { }); res.on('close', () => { + unsubscribe(`${redisPrefix}${accessTokenChannelId}`, listener); unsubscribe(`${redisPrefix}${systemChannelId}`, listener); }); + subscribe(`${redisPrefix}${accessTokenChannelId}`, listener); subscribe(`${redisPrefix}${systemChannelId}`, listener); }; @@ -674,17 +681,84 @@ const startWorker = async (workerId) => { queries.push(client.query('SELECT 1 FROM account_domain_blocks WHERE account_id = $1 AND domain = $2', [req.accountId, accountDomain])); } + if (!unpackedPayload.filter_results && !req.cachedFilters) { + queries.push(client.query('SELECT filter.id AS id, filter.phrase AS title, filter.context AS context, filter.expires_at AS expires_at, filter.action AS filter_action, keyword.keyword AS keyword, keyword.whole_word AS whole_word FROM custom_filter_keywords keyword JOIN custom_filters filter ON keyword.custom_filter_id = filter.id WHERE filter.account_id = $1 AND filter.expires_at IS NULL OR filter.expires_at > NOW()', [req.accountId])); + } + Promise.all(queries).then(values => { done(); - if (values[0].rows.length > 0 || (values.length > 1 && values[1].rows.length > 0)) { + if (values[0].rows.length > 0 || (accountDomain && values[1].rows.length > 0)) { return; } + if (!unpackedPayload.filter_results && !req.cachedFilters) { + const filterRows = values[accountDomain ? 2 : 1].rows; + + req.cachedFilters = filterRows.reduce((cache, row) => { + if (cache[row.id]) { + cache[row.id].keywords.push([row.keyword, row.whole_word]); + } else { + cache[row.id] = { + keywords: [[row.keyword, row.whole_word]], + expires_at: row.expires_at, + repr: { + id: row.id, + title: row.title, + context: row.context, + expires_at: row.expires_at, + filter_action: row.filter_action, + }, + }; + } + + return cache; + }, {}); + + Object.keys(req.cachedFilters).forEach((key) => { + req.cachedFilters[key].regexp = new RegExp(req.cachedFilters[key].keywords.map(([keyword, whole_word]) => { + let expr = keyword.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');; + + if (whole_word) { + if (/^[\w]/.test(expr)) { + expr = `\\b${expr}`; + } + + if (/[\w]$/.test(expr)) { + expr = `${expr}\\b`; + } + } + + return expr; + }).join('|'), 'i'); + }); + } + + // Check filters + if (req.cachedFilters && !unpackedPayload.filter_results) { + const status = unpackedPayload; + const searchContent = ([status.spoiler_text || '', status.content].concat((status.poll && status.poll.options) ? status.poll.options.map(option => option.title) : [])).concat(status.media_attachments.map(att => att.description)).join('\n\n').replace(//g, '\n').replace(/<\/p>

/g, '\n\n'); + const searchIndex = JSDOM.fragment(searchContent).textContent; + + const now = new Date(); + payload.filter_results = []; + Object.values(req.cachedFilters).forEach((cachedFilter) => { + if ((cachedFilter.expires_at === null || cachedFilter.expires_at > now)) { + const keyword_matches = searchIndex.match(cachedFilter.regexp); + if (keyword_matches) { + payload.filter_results.push({ + filter: cachedFilter.repr, + keyword_matches, + }); + } + } + }); + } + transmit(); }).catch(err => { - done(); log.error(err); + done(); }); }); }; @@ -1009,7 +1083,8 @@ const startWorker = async (workerId) => { * @param {WebSocketSession} session */ const subscribeWebsocketToSystemChannel = ({ socket, request, subscriptions }) => { - const systemChannelId = `timeline:access_token:${request.accessTokenId}`; + const accessTokenChannelId = `timeline:access_token:${request.accessTokenId}`; + const systemChannelId = `timeline:system:${request.accountId}`; const listener = createSystemMessageListener(request, { @@ -1019,8 +1094,15 @@ const startWorker = async (workerId) => { }); + subscribe(`${redisPrefix}${accessTokenChannelId}`, listener); subscribe(`${redisPrefix}${systemChannelId}`, listener); + subscriptions[accessTokenChannelId] = { + listener, + stopHeartbeat: () => { + }, + }; + subscriptions[systemChannelId] = { listener, stopHeartbeat: () => { diff --git a/yarn.lock b/yarn.lock index 42d877453f9..7901b9fd595 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1486,7 +1486,7 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jest/types@^28.1.0", "@jest/types@^28.1.1": +"@jest/types@^28.1.1": version "28.1.1" resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.1.tgz#d059bbc80e6da6eda9f081f293299348bd78ee0b" integrity sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw== @@ -2153,7 +2153,7 @@ acorn@^8.0.4: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.3.0.tgz#1193f9b96c4e8232f00b11a9edff81b2c8b98b88" integrity sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw== -acorn@^8.5.0: +acorn@^8.5.0, acorn@^8.7.1: version "8.7.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== @@ -3304,6 +3304,11 @@ coa@^2.0.2: chalk "^2.4.1" q "^1.1.2" +cocoon-js-vanilla@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/cocoon-js-vanilla/-/cocoon-js-vanilla-1.2.0.tgz#595348499d315d3b5828dd77a20974756cf59321" + integrity sha512-qLomIVL0Krfc983WLgaYPPktMjMtBN+F/CV15NPVDc9U9BCe2OL5WyAIYkPrVhDRphoYBmHCdIlZkq+vSBI4xg== + collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -3892,7 +3897,7 @@ damerau-levenshtein@^1.0.7: resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz#64368003512a1a6992593741a09a9d31a836f55d" integrity sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw== -data-urls@^3.0.1: +data-urls@^3.0.1, data-urls@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== @@ -4338,6 +4343,11 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== +entities@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.3.0.tgz#62915f08d67353bb4eb67e3d62641a4059aec656" + integrity sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg== + errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" @@ -5700,7 +5710,7 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -https-proxy-agent@^5.0.0: +https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -6728,7 +6738,7 @@ jest-snapshot@^28.1.1: pretty-format "^28.1.1" semver "^7.3.5" -jest-util@^28.1.0, jest-util@^28.1.1: +jest-util@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.1.tgz#ff39e436a1aca397c0ab998db5a51ae2b7080d05" integrity sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw== @@ -6852,6 +6862,39 @@ jsdom@^19.0.0: ws "^8.2.3" xml-name-validator "^4.0.0" +jsdom@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.0.tgz#882825ac9cc5e5bbee704ba16143e1fa78361ebf" + integrity sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA== + dependencies: + abab "^2.0.6" + acorn "^8.7.1" + acorn-globals "^6.0.0" + cssom "^0.5.0" + cssstyle "^2.3.0" + data-urls "^3.0.2" + decimal.js "^10.3.1" + domexception "^4.0.0" + escodegen "^2.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "^7.0.0" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^3.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + ws "^8.8.0" + xml-name-validator "^4.0.0" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -8141,6 +8184,13 @@ parse5@6.0.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parse5@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.0.0.tgz#51f74a5257f5fcc536389e8c2d0b3802e1bfa91a" + integrity sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g== + dependencies: + entities "^4.3.0" + parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -9771,6 +9821,13 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== + dependencies: + xmlchars "^2.2.0" + scheduler@^0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" From 97f81577f1f3dd2964141a741c98fc71db78f474 Mon Sep 17 00:00:00 2001 From: mayaeh Date: Fri, 24 Jun 2022 06:08:52 +0900 Subject: [PATCH 058/646] [Glitch] Fixed the setting page's logo that is not displayed on the smartphone Port 65ad58984808c482de60894f4210a5595bd96eb2 to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/styles/admin.scss | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/javascript/flavours/glitch/styles/admin.scss b/app/javascript/flavours/glitch/styles/admin.scss index 9553aa4ae2b..a582b0e3d62 100644 --- a/app/javascript/flavours/glitch/styles/admin.scss +++ b/app/javascript/flavours/glitch/styles/admin.scss @@ -75,6 +75,13 @@ $content-width: 840px; height: 100px; } + .logo--wordmark { + display: inherit; + margin: inherit; + width: inherit; + height: 20px; + } + @media screen and (max-width: $no-columns-breakpoint) { & > a:first-child { display: none; From f218e633b4c2a14971bd84de34ad484d8b61cc5f Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 28 Jun 2022 09:42:13 +0200 Subject: [PATCH 059/646] [Glitch] [SSR only] Revamp post filtering system Port CSS and JS for Server-Side Rendered pages from 02851848e964675bb59919fa5fd1bdee2c1c29db Signed-off-by: Claire --- .../flavours/glitch/packs/settings.js | 1 + .../flavours/glitch/styles/admin.scss | 33 +++++++++++++++++-- .../flavours/glitch/styles/forms.scss | 31 +++++++++++++++++ 3 files changed, 63 insertions(+), 2 deletions(-) diff --git a/app/javascript/flavours/glitch/packs/settings.js b/app/javascript/flavours/glitch/packs/settings.js index 0a53e1c25ae..de88d4f5237 100644 --- a/app/javascript/flavours/glitch/packs/settings.js +++ b/app/javascript/flavours/glitch/packs/settings.js @@ -2,6 +2,7 @@ import 'packs/public-path'; import loadPolyfills from 'flavours/glitch/util/load_polyfills'; import ready from 'flavours/glitch/util/ready'; import loadKeyboardExtensions from 'flavours/glitch/util/load_keyboard_extensions'; +import 'cocoon-js-vanilla'; function main() { const { delegate } = require('@rails/ujs'); diff --git a/app/javascript/flavours/glitch/styles/admin.scss b/app/javascript/flavours/glitch/styles/admin.scss index a582b0e3d62..6ed67edc49b 100644 --- a/app/javascript/flavours/glitch/styles/admin.scss +++ b/app/javascript/flavours/glitch/styles/admin.scss @@ -934,7 +934,8 @@ a.name-tag, text-align: center; } -.applications-list__item { +.applications-list__item, +.filters-list__item { padding: 15px 0; background: $ui-base-color; border: 1px solid lighten($ui-base-color, 4%); @@ -942,7 +943,8 @@ a.name-tag, margin-top: 15px; } -.announcements-list { +.announcements-list, +.filters-list { border: 1px solid lighten($ui-base-color, 4%); border-radius: 4px; @@ -995,6 +997,33 @@ a.name-tag, } } +.filters-list__item { + &__title { + display: flex; + justify-content: space-between; + margin-bottom: 0; + } + + &__permissions { + margin-top: 0; + margin-bottom: 10px; + } + + .expiration { + font-size: 13px; + } + + &.expired { + .expiration { + color: lighten($error-red, 12%); + } + + .permissions-list__item__icon { + color: $dark-text-color; + } + } +} + .dashboard__counters.admin-account-counters { margin-top: 10px; } diff --git a/app/javascript/flavours/glitch/styles/forms.scss b/app/javascript/flavours/glitch/styles/forms.scss index 5aa75b41e34..1ce13b874d8 100644 --- a/app/javascript/flavours/glitch/styles/forms.scss +++ b/app/javascript/flavours/glitch/styles/forms.scss @@ -1065,3 +1065,34 @@ code { } } } + +.keywords-table { + thead { + th { + white-space: nowrap; + } + + th:first-child { + width: 100%; + } + } + + tfoot { + td { + border: 0; + } + } + + .input.string { + margin-bottom: 0; + } + + .label_input__wrapper { + margin-top: 10px; + } + + .table-action-link { + margin-top: 10px; + white-space: nowrap; + } +} From efa65267edec78ad1b2656be14e76749ed25b51b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Jun 2022 18:55:47 +0900 Subject: [PATCH 060/646] Bump @babel/core from 7.18.5 to 7.18.6 (#18734) Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.18.5 to 7.18.6. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.6/packages/babel-core) --- updated-dependencies: - dependency-name: "@babel/core" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 225 +++++++++++++++++++++++++++++++-------------------- 2 files changed, 138 insertions(+), 89 deletions(-) diff --git a/package.json b/package.json index 343a8267e55..74a4a62087d 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ }, "private": true, "dependencies": { - "@babel/core": "^7.18.5", + "@babel/core": "^7.18.6", "@babel/plugin-proposal-decorators": "^7.18.2", "@babel/plugin-transform-react-inline-elements": "^7.16.7", "@babel/plugin-transform-runtime": "^7.18.5", diff --git a/yarn.lock b/yarn.lock index 7901b9fd595..e2deea41a70 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16,33 +16,38 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: - "@babel/highlight" "^7.16.7" + "@babel/highlight" "^7.18.6" "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.17.10": version "7.17.10" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.10.tgz#711dc726a492dfc8be8220028b1b92482362baab" integrity sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw== -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.5", "@babel/core@^7.7.2": - version "7.18.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.5.tgz#c597fa680e58d571c28dda9827669c78cdd7f000" - integrity sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ== +"@babel/compat-data@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.6.tgz#8b37d24e88e8e21c499d4328db80577d8882fa53" + integrity sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.6", "@babel/core@^7.7.2": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.6.tgz#54a107a3c298aee3fe5e1947a6464b9b6faca03d" + integrity sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ== dependencies: "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.18.2" - "@babel/helper-compilation-targets" "^7.18.2" - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helpers" "^7.18.2" - "@babel/parser" "^7.18.5" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.5" - "@babel/types" "^7.18.4" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.6" + "@babel/helper-compilation-targets" "^7.18.6" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helpers" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -58,12 +63,12 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.0" -"@babel/generator@^7.18.2", "@babel/generator@^7.7.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.2.tgz#33873d6f89b21efe2da63fe554460f3df1c5880d" - integrity sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw== +"@babel/generator@^7.18.6", "@babel/generator@^7.7.2": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.6.tgz#9ab2d46d3cbf631f0e80f72e72874a04c3fc12a9" + integrity sha512-AIwwoOS8axIC5MZbhNHRLKi3D+DMpvDf9XUcu3pIVAfOHFT45f4AoDAltRbHIQomCipkCZxrNkfpOEHhJz/VKw== dependencies: - "@babel/types" "^7.18.2" + "@babel/types" "^7.18.6" "@jridgewell/gen-mapping" "^0.3.0" jsesc "^2.5.1" @@ -90,13 +95,13 @@ "@babel/helper-annotate-as-pure" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.10", "@babel/helper-compilation-targets@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz#67a85a10cbd5fc7f1457fec2e7f45441dc6c754b" - integrity sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.10", "@babel/helper-compilation-targets@^7.18.2", "@babel/helper-compilation-targets@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz#18d35bfb9f83b1293c22c55b3d576c1315b6ed96" + integrity sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg== dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-validator-option" "^7.16.7" + "@babel/compat-data" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" browserslist "^4.20.2" semver "^6.3.0" @@ -169,6 +174,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz#8a6d2dedb53f6bf248e31b4baf38739ee4a637bd" integrity sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ== +"@babel/helper-environment-visitor@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz#b7eee2b5b9d70602e59d1a6cad7dd24de7ca6cd7" + integrity sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q== + "@babel/helper-explode-assignable-expression@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" @@ -193,6 +203,14 @@ "@babel/template" "^7.16.7" "@babel/types" "^7.17.0" +"@babel/helper-function-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz#8334fecb0afba66e6d87a7e8c6bb7fed79926b83" + integrity sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.6" + "@babel/helper-get-function-arity@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" @@ -207,6 +225,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-member-expression-to-functions@^7.17.7": version "7.17.7" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" @@ -221,19 +246,26 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-module-transforms@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz#baf05dec7a5875fb9235bd34ca18bad4e21221cd" - integrity sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA== +"@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.0" - "@babel/types" "^7.18.0" + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.18.0", "@babel/helper-module-transforms@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz#57e3ca669e273d55c3cda55e6ebf552f37f483c8" + integrity sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw== + dependencies: + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" "@babel/helper-optimise-call-expression@^7.16.7": version "7.16.7" @@ -267,13 +299,6 @@ "@babel/traverse" "^7.18.2" "@babel/types" "^7.18.2" -"@babel/helper-simple-access@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367" - integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA== - dependencies: - "@babel/types" "^7.17.0" - "@babel/helper-simple-access@^7.18.2": version "7.18.2" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz#4dc473c2169ac3a1c9f4a51cfcd091d1c36fcff9" @@ -281,6 +306,13 @@ dependencies: "@babel/types" "^7.18.2" +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" @@ -295,6 +327,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-validator-identifier@^7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" @@ -305,11 +344,21 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + "@babel/helper-validator-option@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + "@babel/helper-wrap-function@^7.16.8": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" @@ -320,14 +369,14 @@ "@babel/traverse" "^7.16.8" "@babel/types" "^7.16.8" -"@babel/helpers@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.2.tgz#970d74f0deadc3f5a938bfa250738eb4ac889384" - integrity sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg== +"@babel/helpers@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.6.tgz#4c966140eaa1fcaa3d5a8c09d7db61077d4debfd" + integrity sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ== dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.2" - "@babel/types" "^7.18.2" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" "@babel/highlight@^7.10.4": version "7.12.13" @@ -338,19 +387,19 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/highlight@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.7.tgz#81a01d7d675046f0d96f82450d9d9578bdfd6b0b" - integrity sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw== +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" + "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.18.5": - version "7.18.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.5.tgz#337062363436a893a2d22faa60be5bb37091c83c" - integrity sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.6.tgz#845338edecad65ebffef058d3be851f1d28a63bc" + integrity sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12": version "7.17.12" @@ -1086,37 +1135,37 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.16.7", "@babel/template@^7.3.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== +"@babel/template@^7.16.7", "@babel/template@^7.18.6", "@babel/template@^7.3.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" + integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2", "@babel/traverse@^7.18.5", "@babel/traverse@^7.7.2": - version "7.18.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.5.tgz#94a8195ad9642801837988ab77f36e992d9a20cd" - integrity sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA== +"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.18.2", "@babel/traverse@^7.18.6", "@babel/traverse@^7.7.2": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.6.tgz#a228562d2f46e89258efa4ddd0416942e2fd671d" + integrity sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw== dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.18.2" - "@babel/helper-environment-visitor" "^7.18.2" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.18.5" - "@babel/types" "^7.18.4" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.12", "@babel/types@^7.18.0", "@babel/types@^7.18.2", "@babel/types@^7.18.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.18.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.4.tgz#27eae9b9fd18e9dccc3f9d6ad051336f307be354" - integrity sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw== +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.12", "@babel/types@^7.18.2", "@babel/types@^7.18.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.6.tgz#5d781dd10a3f0c9f1f931bd19de5eb26ec31acf0" + integrity sha512-NdBNzPDwed30fZdDQtVR7ZgaO4UKjuaQFH9VArS+HMnurlOY0JWN+4ROlu/iapMFwjRQU4pOG4StZfDmulEwGA== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" + "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": From 07e2519054ed2dab3b72e0dda51dc58666d4331f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Jun 2022 18:56:20 +0900 Subject: [PATCH 061/646] Bump @babel/plugin-transform-runtime from 7.18.5 to 7.18.6 (#18722) Bumps [@babel/plugin-transform-runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-runtime) from 7.18.5 to 7.18.6. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.6/packages/babel-plugin-transform-runtime) --- updated-dependencies: - dependency-name: "@babel/plugin-transform-runtime" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 131 ++++++++++++++++++++++++++++++++------------------- 2 files changed, 84 insertions(+), 49 deletions(-) diff --git a/package.json b/package.json index 74a4a62087d..8b814530fef 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@babel/core": "^7.18.6", "@babel/plugin-proposal-decorators": "^7.18.2", "@babel/plugin-transform-react-inline-elements": "^7.16.7", - "@babel/plugin-transform-runtime": "^7.18.5", + "@babel/plugin-transform-runtime": "^7.18.6", "@babel/preset-env": "^7.18.2", "@babel/preset-react": "^7.17.12", "@babel/runtime": "^7.18.3", diff --git a/yarn.lock b/yarn.lock index e2deea41a70..70b1ec3c5b6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -134,20 +134,6 @@ "@babel/helper-annotate-as-pure" "^7.16.7" regexpu-core "^5.0.1" -"@babel/helper-define-polyfill-provider@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz#c5b10cf4b324ff840140bb07e05b8564af2ae971" - integrity sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - "@babel/helper-define-polyfill-provider@^0.3.1": version "0.3.1" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" @@ -239,12 +225,12 @@ dependencies: "@babel/types" "^7.17.0" -"@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== +"@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.18.6" "@babel/helper-module-imports@^7.18.6": version "7.18.6" @@ -274,10 +260,10 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz#86c2347da5acbf5583ba0a10aed4c9bf9da9cf96" - integrity sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz#9448974dd4fb1d80fefe72e8a0af37809cd30d6d" + integrity sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg== "@babel/helper-remap-async-to-generator@^7.16.8": version "7.16.8" @@ -946,16 +932,16 @@ dependencies: "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-transform-runtime@^7.18.5": - version "7.18.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.5.tgz#f4d3188ba6a8815793993c71c2c225d0ee1d7743" - integrity sha512-Q17hHxXr2fplrE+5BSC1j1Fo5cOA8YeP8XW3/1paI8MzF/faZGh0MaH1KC4jLAvqLPamQWHB5/B7KqSLY1kuHA== +"@babel/plugin-transform-runtime@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.6.tgz#77b14416015ea93367ca06979710f5000ff34ccb" + integrity sha512-8uRHk9ZmRSnWqUgyae249EJZ94b0yAGLBIqzZzl+0iEdbno55Pmlt/32JZsHwXD9k/uZj18Aqqk35wBX4CBTXA== dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.17.12" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + babel-plugin-polyfill-corejs2 "^0.3.1" + babel-plugin-polyfill-corejs3 "^0.5.2" + babel-plugin-polyfill-regenerator "^0.3.1" semver "^6.3.0" "@babel/plugin-transform-shorthand-properties@^7.16.7": @@ -1168,6 +1154,14 @@ "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" +"@babel/types@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.6.tgz#5d781dd10a3f0c9f1f931bd19de5eb26ec31acf0" + integrity sha512-NdBNzPDwed30fZdDQtVR7ZgaO4UKjuaQFH9VArS+HMnurlOY0JWN+4ROlu/iapMFwjRQU4pOG4StZfDmulEwGA== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -2641,29 +2635,29 @@ babel-plugin-macros@^3.0.1: cosmiconfig "^7.0.0" resolve "^1.19.0" -babel-plugin-polyfill-corejs2@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz#407082d0d355ba565af24126fb6cb8e9115251fd" - integrity sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA== +babel-plugin-polyfill-corejs2@^0.3.0, babel-plugin-polyfill-corejs2@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" + integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== dependencies: "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.0" + "@babel/helper-define-polyfill-provider" "^0.3.1" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.1.tgz#d66183bf10976ea677f4149a7fcc4d8df43d4060" - integrity sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A== +babel-plugin-polyfill-corejs3@^0.5.0, babel-plugin-polyfill-corejs3@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" + integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== dependencies: "@babel/helper-define-polyfill-provider" "^0.3.1" - core-js-compat "^3.20.0" + core-js-compat "^3.21.0" -babel-plugin-polyfill-regenerator@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz#9ebbcd7186e1a33e21c5e20cae4e7983949533be" - integrity sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg== +babel-plugin-polyfill-regenerator@^0.3.0, babel-plugin-polyfill-regenerator@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" + integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.0" + "@babel/helper-define-polyfill-provider" "^0.3.1" babel-plugin-preval@^5.1.0: version "5.1.0" @@ -2977,6 +2971,16 @@ browserslist@^4.20.2, browserslist@^4.20.3: node-releases "^2.0.3" picocolors "^1.0.0" +browserslist@^4.21.0: + version "4.21.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.0.tgz#7ab19572361a140ecd1e023e2c1ed95edda0cefe" + integrity sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA== + dependencies: + caniuse-lite "^1.0.30001358" + electron-to-chromium "^1.4.164" + node-releases "^2.0.5" + update-browserslist-db "^1.0.0" + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -3165,6 +3169,11 @@ caniuse-lite@^1.0.30001332: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001335.tgz#899254a0b70579e5a957c32dced79f0727c61f2a" integrity sha512-ddP1Tgm7z2iIxu6QTtbZUv6HJxSaV/PZeSrWFZtbY4JZ69tOeNhBCl3HyRQgeNZKE5AOn1kpV7fhljigy0Ty3w== +caniuse-lite@^1.0.30001358: + version "1.0.30001359" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz#a1c1cbe1c2da9e689638813618b4219acbd4925e" + integrity sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw== + chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -3570,7 +3579,15 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.20.0, core-js-compat@^3.22.1: +core-js-compat@^3.21.0: + version "3.23.3" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.23.3.tgz#7d8503185be76bb6d8d592c291a4457a8e440aa9" + integrity sha512-WSzUs2h2vvmKsacLHNTdpyOC9k43AEhcGoFlVgCY4L7aw98oSBKtPL6vD0/TqZjRWRQYdDSLkzZIni4Crbbiqw== + dependencies: + browserslist "^4.21.0" + semver "7.0.0" + +core-js-compat@^3.22.1: version "3.22.4" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.22.4.tgz#d700f451e50f1d7672dcad0ac85d910e6691e579" integrity sha512-dIWcsszDezkFZrfm1cnB4f/J85gyhiCpxbgBdohWCDtSVuAaChTSpPV7ldOQf/Xds2U5xCIJZOK82G4ZPAIswA== @@ -4307,6 +4324,11 @@ electron-to-chromium@^1.4.118: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.129.tgz#c675793885721beefff99da50f57c6525c2cd238" integrity sha512-GgtN6bsDtHdtXJtlMYZWGB/uOyjZWjmRDumXTas7dGBaB9zUyCjzHet1DY2KhyHN8R0GLbzZWqm4efeddqqyRQ== +electron-to-chromium@^1.4.164: + version "1.4.170" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.170.tgz#0415fc489402e09bfbe1f0c99bbf4d73f31d48d4" + integrity sha512-rZ8PZLhK4ORPjFqLp9aqC4/S1j4qWFsPPz13xmWdrbBkU/LlxMcok+f+6f8YnQ57MiZwKtOaW15biZZsY5Igvw== + elliptic@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -7770,6 +7792,11 @@ node-releases@^2.0.3: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.4.tgz#f38252370c43854dc48aa431c766c6c398f40476" integrity sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ== +node-releases@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666" + integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q== + normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -11244,6 +11271,14 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +update-browserslist-db@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz#dbfc5a789caa26b1db8990796c2c8ebbce304824" + integrity sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + uri-js@^4.2.2: version "4.4.0" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" From 38f9b18343b18cd10968d9ce404639dd54df652a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Jun 2022 18:56:43 +0900 Subject: [PATCH 062/646] Bump @babel/runtime from 7.18.3 to 7.18.6 (#18728) Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.18.3 to 7.18.6. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.6/packages/babel-runtime) --- updated-dependencies: - dependency-name: "@babel/runtime" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 8b814530fef..922830c9070 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "@babel/plugin-transform-runtime": "^7.18.6", "@babel/preset-env": "^7.18.2", "@babel/preset-react": "^7.17.12", - "@babel/runtime": "^7.18.3", + "@babel/runtime": "^7.18.6", "@gamestdio/websocket": "^0.3.2", "@github/webauthn-json": "^0.5.7", "@rails/ujs": "^6.1.6", diff --git a/yarn.lock b/yarn.lock index 70b1ec3c5b6..43fb715c4af 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1114,10 +1114,10 @@ dependencies: regenerator-runtime "^0.12.0" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.18.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.3.tgz#c7b654b57f6f63cf7f8b418ac9ca04408c4579f4" - integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.6.tgz#6a1ef59f838debd670421f8c7f2cbb8da9751580" + integrity sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ== dependencies: regenerator-runtime "^0.13.4" From 47d74256c4a914b0548ac76db5fdade3d788b27e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Jun 2022 19:08:05 +0900 Subject: [PATCH 063/646] Bump @babel/plugin-transform-react-inline-elements from 7.16.7 to 7.18.6 (#18729) Bumps [@babel/plugin-transform-react-inline-elements](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-react-inline-elements) from 7.16.7 to 7.18.6. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.6/packages/babel-plugin-transform-react-inline-elements) --- updated-dependencies: - dependency-name: "@babel/plugin-transform-react-inline-elements" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 46 +++++++++++++++++++--------------------------- 2 files changed, 20 insertions(+), 28 deletions(-) diff --git a/package.json b/package.json index 922830c9070..2af701c2989 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "dependencies": { "@babel/core": "^7.18.6", "@babel/plugin-proposal-decorators": "^7.18.2", - "@babel/plugin-transform-react-inline-elements": "^7.16.7", + "@babel/plugin-transform-react-inline-elements": "^7.18.6", "@babel/plugin-transform-runtime": "^7.18.6", "@babel/preset-env": "^7.18.2", "@babel/preset-react": "^7.17.12", diff --git a/yarn.lock b/yarn.lock index 43fb715c4af..b00a24ca155 100644 --- a/yarn.lock +++ b/yarn.lock @@ -79,6 +79,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" @@ -87,13 +94,13 @@ "@babel/helper-explode-assignable-expression" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-builder-react-jsx@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.16.7.tgz#6f9da7cea0fde8420e0938d490837feb5bde8dda" - integrity sha512-XKorXOl2868Un8/XK2o4GLlXr8Q08KthWI5W3qyCkh6tCGf5Ncg3HR4oN2UO+sqPoAlcMgz9elFW/FZvAHYotA== +"@babel/helper-builder-react-jsx@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.18.6.tgz#b3a302c0eb4949e5356b400cb752a91e93bf9b79" + integrity sha512-2ndBVP5f9zwHWQeBr5EgqTAvFhPDViMW969bbJzRhKUUylnC39CdFZdVmqk+UtkxIpwm/efPgm3SzXUSlJnjAw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/types" "^7.18.6" "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.10", "@babel/helper-compilation-targets@^7.18.2", "@babel/helper-compilation-targets@^7.18.6": version "7.18.6" @@ -232,13 +239,6 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== - dependencies: - "@babel/types" "^7.18.6" - "@babel/helper-module-transforms@^7.18.0", "@babel/helper-module-transforms@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz#57e3ca669e273d55c3cda55e6ebf552f37f483c8" @@ -883,13 +883,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-react-inline-elements@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-inline-elements/-/plugin-transform-react-inline-elements-7.16.7.tgz#87d470ae5fc8ad5c803494070f7dc513846c03fe" - integrity sha512-jFGuZSebHob02zhrXsJhnI8xcemiDfdlJa1KR2LUfVj/4y9G2iwbJNGVsiH8mW6HEQVh5XwzWWbo/YoroDlQRg== +"@babel/plugin-transform-react-inline-elements@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-inline-elements/-/plugin-transform-react-inline-elements-7.18.6.tgz#d0676948eb5a11d547de6add7e8a2c522ec708f5" + integrity sha512-uo3yD1EXhDxmk1Y/CeFDdHS5t22IOUBooLPFOrrjfpYmDM9Vg61xbIaWeWkbYQ7Aq0zMf30/FfKoQgFwyqw6Bg== dependencies: - "@babel/helper-builder-react-jsx" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-builder-react-jsx" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-react-jsx-development@^7.16.7": version "7.16.7" @@ -1154,14 +1154,6 @@ "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" -"@babel/types@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.6.tgz#5d781dd10a3f0c9f1f931bd19de5eb26ec31acf0" - integrity sha512-NdBNzPDwed30fZdDQtVR7ZgaO4UKjuaQFH9VArS+HMnurlOY0JWN+4ROlu/iapMFwjRQU4pOG4StZfDmulEwGA== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - to-fast-properties "^2.0.0" - "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" From 8cc86af76bbd4310c49e408ba167a7cdc2ab8378 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Jun 2022 19:19:39 +0900 Subject: [PATCH 064/646] Bump @babel/preset-react from 7.17.12 to 7.18.6 (#18724) Bumps [@babel/preset-react](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-react) from 7.17.12 to 7.18.6. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.6/packages/babel-preset-react) --- updated-dependencies: - dependency-name: "@babel/preset-react" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 89 +++++++++++++++++++++++++--------------------------- 2 files changed, 43 insertions(+), 48 deletions(-) diff --git a/package.json b/package.json index 2af701c2989..c093a57a295 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@babel/plugin-transform-react-inline-elements": "^7.18.6", "@babel/plugin-transform-runtime": "^7.18.6", "@babel/preset-env": "^7.18.2", - "@babel/preset-react": "^7.17.12", + "@babel/preset-react": "^7.18.6", "@babel/runtime": "^7.18.6", "@gamestdio/websocket": "^0.3.2", "@github/webauthn-json": "^0.5.7", diff --git a/yarn.lock b/yarn.lock index b00a24ca155..b04ccf4ff3a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -335,12 +335,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helper-validator-option@^7.18.6": +"@babel/helper-validator-option@^7.16.7", "@babel/helper-validator-option@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== @@ -620,12 +615,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-syntax-jsx@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz#834035b45061983a491f60096f61a2e7c5674a47" - integrity sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog== +"@babel/plugin-syntax-jsx@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -876,12 +871,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-react-display-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340" - integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== +"@babel/plugin-transform-react-display-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" + integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-react-inline-elements@^7.18.6": version "7.18.6" @@ -891,31 +886,31 @@ "@babel/helper-builder-react-jsx" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-react-jsx-development@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" - integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== +"@babel/plugin-transform-react-jsx-development@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" + integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== dependencies: - "@babel/plugin-transform-react-jsx" "^7.16.7" + "@babel/plugin-transform-react-jsx" "^7.18.6" -"@babel/plugin-transform-react-jsx@^7.16.7", "@babel/plugin-transform-react-jsx@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz#2aa20022709cd6a3f40b45d60603d5f269586dba" - integrity sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ== +"@babel/plugin-transform-react-jsx@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz#2721e96d31df96e3b7ad48ff446995d26bc028ff" + integrity sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-jsx" "^7.17.12" - "@babel/types" "^7.17.12" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-jsx" "^7.18.6" + "@babel/types" "^7.18.6" -"@babel/plugin-transform-react-pure-annotations@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz#232bfd2f12eb551d6d7d01d13fe3f86b45eb9c67" - integrity sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA== +"@babel/plugin-transform-react-pure-annotations@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" + integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-regenerator@^7.18.0": version "7.18.0" @@ -1087,17 +1082,17 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.17.12.tgz#62adbd2d1870c0de3893095757ed5b00b492ab3d" - integrity sha512-h5U+rwreXtZaRBEQhW1hOJLMq8XNJBQ/9oymXiCXTuT/0uOwpbT0gUt+sXeOqoXBgNuUKI7TaObVwoEyWkpFgA== +"@babel/preset-react@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" + integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-react-display-name" "^7.16.7" - "@babel/plugin-transform-react-jsx" "^7.17.12" - "@babel/plugin-transform-react-jsx-development" "^7.16.7" - "@babel/plugin-transform-react-pure-annotations" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-react-display-name" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-pure-annotations" "^7.18.6" "@babel/runtime-corejs3@^7.10.2": version "7.10.3" @@ -1146,7 +1141,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.12", "@babel/types@^7.18.2", "@babel/types@^7.18.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.18.2", "@babel/types@^7.18.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.6.tgz#5d781dd10a3f0c9f1f931bd19de5eb26ec31acf0" integrity sha512-NdBNzPDwed30fZdDQtVR7ZgaO4UKjuaQFH9VArS+HMnurlOY0JWN+4ROlu/iapMFwjRQU4pOG4StZfDmulEwGA== From 9820751a598cdcdb9bfd85aa9d2f186a1c5babbc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Jun 2022 19:20:09 +0900 Subject: [PATCH 065/646] Bump @babel/plugin-proposal-decorators from 7.18.2 to 7.18.6 (#18725) Bumps [@babel/plugin-proposal-decorators](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-proposal-decorators) from 7.18.2 to 7.18.6. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.6/packages/babel-plugin-proposal-decorators) --- updated-dependencies: - dependency-name: "@babel/plugin-proposal-decorators" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 107 +++++++++++++++++++++++---------------------------- 2 files changed, 49 insertions(+), 60 deletions(-) diff --git a/package.json b/package.json index c093a57a295..1ceabdbc0d2 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "private": true, "dependencies": { "@babel/core": "^7.18.6", - "@babel/plugin-proposal-decorators": "^7.18.2", + "@babel/plugin-proposal-decorators": "^7.18.6", "@babel/plugin-transform-react-inline-elements": "^7.18.6", "@babel/plugin-transform-runtime": "^7.18.6", "@babel/preset-env": "^7.18.2", diff --git a/yarn.lock b/yarn.lock index b04ccf4ff3a..39db89cf5a3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -112,18 +112,18 @@ browserslist "^4.20.2" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.17.12", "@babel/helper-create-class-features-plugin@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz#fac430912606331cb075ea8d82f9a4c145a4da19" - integrity sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg== +"@babel/helper-create-class-features-plugin@^7.17.12", "@babel/helper-create-class-features-plugin@^7.18.0", "@babel/helper-create-class-features-plugin@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz#6f15f8459f3b523b39e00a99982e2c040871ed72" + integrity sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-member-expression-to-functions" "^7.18.6" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" "@babel/helper-create-regexp-features-plugin@^7.16.7": version "7.16.7" @@ -162,11 +162,6 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-environment-visitor@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz#8a6d2dedb53f6bf248e31b4baf38739ee4a637bd" - integrity sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ== - "@babel/helper-environment-visitor@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz#b7eee2b5b9d70602e59d1a6cad7dd24de7ca6cd7" @@ -225,12 +220,12 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-member-expression-to-functions@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" - integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw== +"@babel/helper-member-expression-to-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.6.tgz#44802d7d602c285e1692db0bad9396d007be2afc" + integrity sha512-CeHxqwwipekotzPDUuJOfIMtcIHBuc7WAzLmTYWctVigqS5RktNMQ5bEwQSuGewzYnCtTWa3BARXeiLxDTv+Ng== dependencies: - "@babel/types" "^7.17.0" + "@babel/types" "^7.18.6" "@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": version "7.18.6" @@ -260,6 +255,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz#9448974dd4fb1d80fefe72e8a0af37809cd30d6d" @@ -274,16 +276,16 @@ "@babel/helper-wrap-function" "^7.16.8" "@babel/types" "^7.16.8" -"@babel/helper-replace-supers@^7.16.7", "@babel/helper-replace-supers@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz#41fdfcc9abaf900e18ba6e5931816d9062a7b2e0" - integrity sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q== +"@babel/helper-replace-supers@^7.16.7", "@babel/helper-replace-supers@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz#efedf51cfccea7b7b8c0f00002ab317e7abfe420" + integrity sha512-fTf7zoXnUGl9gF25fXCWE26t7Tvtyn6H4hkLSYhATwJvw2uYxd3aoXplMSe0g9XbwK7bmxNes7+FGO0rB/xC0g== dependencies: - "@babel/helper-environment-visitor" "^7.18.2" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.18.2" - "@babel/types" "^7.18.2" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-member-expression-to-functions" "^7.18.6" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" "@babel/helper-simple-access@^7.18.2": version "7.18.2" @@ -306,14 +308,7 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-split-export-declaration@^7.18.6": +"@babel/helper-split-export-declaration@^7.16.7", "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== @@ -424,17 +419,16 @@ "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-decorators@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.2.tgz#dbe4086d2d42db489399783c3aa9272e9700afd4" - integrity sha512-kbDISufFOxeczi0v4NQP3p5kIeW6izn/6klfWBrIIdGZZe4UpHR+QU03FAoWjGGd9SUXAwbw2pup1kaL4OQsJQ== +"@babel/plugin-proposal-decorators@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.6.tgz#68e9fd0f022b944f84a8824bb28bfaee724d2595" + integrity sha512-gAdhsjaYmiZVxx5vTMiRfj31nB7LhwBJFMSLzeDxc7X4tKLixup0+k9ughn0RcpBrv9E3PBaXJW7jF5TCihAOg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-replace-supers" "^7.18.2" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/plugin-syntax-decorators" "^7.17.12" - charcodes "^0.2.0" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/plugin-syntax-decorators" "^7.18.6" "@babel/plugin-proposal-dynamic-import@^7.16.7": version "7.16.7" @@ -566,12 +560,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.12.tgz#02e8f678602f0af8222235271efea945cfdb018a" - integrity sha512-D1Hz0qtGTza8K2xGyEdVNCYLdVHukAcbQr4K3/s6r/esadyEriZovpJimQOpu8ju4/jV8dW/1xdaE0UpDroidw== +"@babel/plugin-syntax-decorators@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.18.6.tgz#2e45af22835d0b0f8665da2bfd4463649ce5dbc1" + integrity sha512-fqyLgjcxf/1yhyZ6A+yo1u9gJ7eleFQod2lkaUsF9DQ7sbbY3Ligym3L0+I2c0WmqNKDpoD9UTb1AKP3qRMOAQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" @@ -1125,7 +1119,7 @@ "@babel/parser" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.18.2", "@babel/traverse@^7.18.6", "@babel/traverse@^7.7.2": +"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.18.6", "@babel/traverse@^7.7.2": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.6.tgz#a228562d2f46e89258efa4ddd0416942e2fd671d" integrity sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw== @@ -3202,11 +3196,6 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -charcodes@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/charcodes/-/charcodes-0.2.0.tgz#5208d327e6cc05f99eb80ffc814707572d1f14e4" - integrity sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ== - "chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1: version "3.5.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" From f804c00920f4f5a59cea43268c11fa8492bc18f5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Jun 2022 19:34:42 +0900 Subject: [PATCH 066/646] Bump @babel/preset-env from 7.18.2 to 7.18.6 (#18733) Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.18.2 to 7.18.6. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.6/packages/babel-preset-env) --- updated-dependencies: - dependency-name: "@babel/preset-env" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 958 ++++++++++++++++++++++----------------------------- 2 files changed, 409 insertions(+), 551 deletions(-) diff --git a/package.json b/package.json index 1ceabdbc0d2..c263538e969 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@babel/plugin-proposal-decorators": "^7.18.6", "@babel/plugin-transform-react-inline-elements": "^7.18.6", "@babel/plugin-transform-runtime": "^7.18.6", - "@babel/preset-env": "^7.18.2", + "@babel/preset-env": "^7.18.6", "@babel/preset-react": "^7.18.6", "@babel/runtime": "^7.18.6", "@gamestdio/websocket": "^0.3.2", diff --git a/yarn.lock b/yarn.lock index 39db89cf5a3..12b02d95c9e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,12 +23,7 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.10.tgz#711dc726a492dfc8be8220028b1b92482362baab" - integrity sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw== - -"@babel/compat-data@^7.18.6": +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.6.tgz#8b37d24e88e8e21c499d4328db80577d8882fa53" integrity sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ== @@ -72,13 +67,6 @@ "@jridgewell/gen-mapping" "^0.3.0" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" @@ -86,13 +74,13 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" - integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.6.tgz#f14d640ed1ee9246fb33b8255f08353acfe70e6a" + integrity sha512-KT10c1oWEpmrIRYnthbzHgoOf6B+Xd6a5yhdbNtdhtG7aO1or5HViuf1TQR36xY/QprXA5nvxO6nAjhJ4y38jw== dependencies: - "@babel/helper-explode-assignable-expression" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.6" "@babel/helper-builder-react-jsx@^7.18.6": version "7.18.6" @@ -102,7 +90,7 @@ "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.10", "@babel/helper-compilation-targets@^7.18.2", "@babel/helper-compilation-targets@^7.18.6": +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz#18d35bfb9f83b1293c22c55b3d576c1315b6ed96" integrity sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg== @@ -112,7 +100,7 @@ browserslist "^4.20.2" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.17.12", "@babel/helper-create-class-features-plugin@^7.18.0", "@babel/helper-create-class-features-plugin@^7.18.6": +"@babel/helper-create-class-features-plugin@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz#6f15f8459f3b523b39e00a99982e2c040871ed72" integrity sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw== @@ -125,21 +113,13 @@ "@babel/helper-replace-supers" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" -"@babel/helper-create-regexp-features-plugin@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48" - integrity sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g== +"@babel/helper-create-regexp-features-plugin@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz#3e35f4e04acbbf25f1b3534a657610a000543d3c" + integrity sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - regexpu-core "^4.7.1" - -"@babel/helper-create-regexp-features-plugin@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz#bb37ca467f9694bbe55b884ae7a5cc1e0084e4fd" - integrity sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - regexpu-core "^5.0.1" + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.1.0" "@babel/helper-define-polyfill-provider@^0.3.1": version "0.3.1" @@ -155,41 +135,17 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-environment-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" - integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-environment-visitor@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz#b7eee2b5b9d70602e59d1a6cad7dd24de7ca6cd7" integrity sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q== -"@babel/helper-explode-assignable-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" - integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== +"@babel/helper-explode-assignable-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" + integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" - integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== - dependencies: - "@babel/helper-get-function-arity" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-function-name@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12" - integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== - dependencies: - "@babel/template" "^7.16.7" - "@babel/types" "^7.17.0" + "@babel/types" "^7.18.6" "@babel/helper-function-name@^7.18.6": version "7.18.6" @@ -199,20 +155,6 @@ "@babel/template" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-get-function-arity@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" - integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" @@ -227,14 +169,14 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": +"@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-transforms@^7.18.0", "@babel/helper-module-transforms@^7.18.6": +"@babel/helper-module-transforms@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz#57e3ca669e273d55c3cda55e6ebf552f37f483c8" integrity sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw== @@ -248,13 +190,6 @@ "@babel/traverse" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-optimise-call-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" - integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-optimise-call-expression@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" @@ -262,21 +197,22 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz#9448974dd4fb1d80fefe72e8a0af37809cd30d6d" integrity sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg== -"@babel/helper-remap-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" - integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== +"@babel/helper-remap-async-to-generator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.6.tgz#fa1f81acd19daee9d73de297c0308783cd3cfc23" + integrity sha512-z5wbmV55TveUPZlCLZvxWHtrjuJd+8inFhk7DG0WW87/oJuGDcjDiu7HIvGcpf5464L6xKCg3vNkmlVVz9hwyQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-wrap-function" "^7.16.8" - "@babel/types" "^7.16.8" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-wrap-function" "^7.18.6" + "@babel/types" "^7.18.6" -"@babel/helper-replace-supers@^7.16.7", "@babel/helper-replace-supers@^7.18.6": +"@babel/helper-replace-supers@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz#efedf51cfccea7b7b8c0f00002ab317e7abfe420" integrity sha512-fTf7zoXnUGl9gF25fXCWE26t7Tvtyn6H4hkLSYhATwJvw2uYxd3aoXplMSe0g9XbwK7bmxNes7+FGO0rB/xC0g== @@ -287,13 +223,6 @@ "@babel/traverse" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-simple-access@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz#4dc473c2169ac3a1c9f4a51cfcd091d1c36fcff9" - integrity sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ== - dependencies: - "@babel/types" "^7.18.2" - "@babel/helper-simple-access@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" @@ -301,14 +230,14 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" - integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== +"@babel/helper-skip-transparent-expression-wrappers@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.6.tgz#7dff00a5320ca4cf63270e5a0eca4b268b7380d9" + integrity sha512-4KoLhwGS9vGethZpAhYnMejWkX64wsnHPDwvOsKWU6Fg4+AlK2Jz3TyjQLMEPvz+1zemi/WBdkYxCD0bAfIkiw== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.18.6" -"@babel/helper-split-export-declaration@^7.16.7", "@babel/helper-split-export-declaration@^7.18.6": +"@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== @@ -320,30 +249,25 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - "@babel/helper-validator-identifier@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== -"@babel/helper-validator-option@^7.16.7", "@babel/helper-validator-option@^7.18.6": +"@babel/helper-validator-option@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== -"@babel/helper-wrap-function@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" - integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== +"@babel/helper-wrap-function@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.18.6.tgz#ec44ea4ad9d8988b90c3e465ba2382f4de81a073" + integrity sha512-I5/LZfozwMNbwr/b1vhhuYD+J/mU+gfGAj5td7l5Rv9WYmH6i3Om69WGKNmlIpsVW/mF6O5bvTKbvDQZVgjqOw== dependencies: - "@babel/helper-function-name" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.8" - "@babel/types" "^7.16.8" + "@babel/helper-function-name" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" "@babel/helpers@^7.18.6": version "7.18.6" @@ -377,46 +301,47 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.6.tgz#845338edecad65ebffef058d3be851f1d28a63bc" integrity sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz#1dca338caaefca368639c9ffb095afbd4d420b1e" - integrity sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz#0d498ec8f0374b1e2eb54b9cb2c4c78714c77753" - integrity sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.6.tgz#b4e4dbc2cd1acd0133479918f7c6412961c9adb8" + integrity sha512-Udgu8ZRgrBrttVz6A0EVL0SJ1z+RLbIeqsu632SA1hf0awEppD6TvdznoH+orIF8wtFFAV/Enmw9Y+9oV8TQcw== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.6" -"@babel/plugin-proposal-async-generator-functions@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz#094a417e31ce7e692d84bab06c8e2a607cbeef03" - integrity sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ== +"@babel/plugin-proposal-async-generator-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz#aedac81e6fc12bb643374656dd5f2605bf743d17" + integrity sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz#84f65c0cc247d46f40a6da99aadd6438315d80a4" - integrity sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw== +"@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-class-static-block@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz#7d02253156e3c3793bdb9f2faac3a1c05f0ba710" - integrity sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA== +"@babel/plugin-proposal-class-static-block@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" + integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-decorators@^7.18.6": @@ -430,107 +355,107 @@ "@babel/helper-split-export-declaration" "^7.18.6" "@babel/plugin-syntax-decorators" "^7.18.6" -"@babel/plugin-proposal-dynamic-import@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" - integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz#b22864ccd662db9606edb2287ea5fd1709f05378" - integrity sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ== +"@babel/plugin-proposal-export-namespace-from@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.6.tgz#1016f0aa5ab383bbf8b3a85a2dcaedf6c8ee7491" + integrity sha512-zr/QcUlUo7GPo6+X1wC98NJADqmy5QTFWWhqeQWiki4XHafJtLl/YMGkmRB2szDD2IYJCCdBTd4ElwhId9T7Xw== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz#f4642951792437233216d8c1af370bb0fbff4664" - integrity sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg== +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz#c64a1bcb2b0a6d0ed2ff674fd120f90ee4b88a23" - integrity sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q== +"@babel/plugin-proposal-logical-assignment-operators@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.6.tgz#3b9cac6f1ffc2aa459d111df80c12020dfc6b665" + integrity sha512-zMo66azZth/0tVd7gmkxOkOjs2rpHyhpcFo565PUP37hSp6hSd9uUKIfTDFMz58BwqgQKhJ9YxtM5XddjXVn+Q== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz#1e93079bbc2cbc756f6db6a1925157c4a92b94be" - integrity sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" - integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== +"@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz#79f2390c892ba2a68ec112eb0d895cfbd11155e8" - integrity sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw== +"@babel/plugin-proposal-object-rest-spread@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.6.tgz#ec93bba06bfb3e15ebd7da73e953d84b094d5daf" + integrity sha512-9yuM6wr4rIsKa1wlUAbZEazkCrgw2sMPEXCr4Rnwetu7cEW1NydkCWytLuYletbf8vFxdJxFhwEZqMpOx2eZyw== dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-compilation-targets" "^7.17.10" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/compat-data" "^7.18.6" + "@babel/helper-compilation-targets" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.17.12" + "@babel/plugin-transform-parameters" "^7.18.6" -"@babel/plugin-proposal-optional-catch-binding@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" - integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz#f96949e9bacace3a9066323a5cf90cfb9de67174" - integrity sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ== +"@babel/plugin-proposal-optional-chaining@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.6.tgz#46d4f2ffc20e87fad1d98bc4fa5d466366f6aa0b" + integrity sha512-PatI6elL5eMzoypFAiYDpYQyMtXTn+iMhuxxQt5mAXD4fEmKorpSI3PHd+i3JXBJN3xyA6MvJv7at23HffFHwA== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz#c2ca3a80beb7539289938da005ad525a038a819c" - integrity sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A== +"@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-private-property-in-object@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz#b02efb7f106d544667d91ae97405a9fd8c93952d" - integrity sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg== +"@babel/plugin-proposal-private-property-in-object@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" + integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-create-class-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.17.12", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz#3dbd7a67bd7f94c8238b394da112d86aaf32ad4d" - integrity sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A== +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -581,12 +506,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz#58096a92b11b2e4e54b24c6a0cc0e5e607abcedd" - integrity sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw== +"@babel/plugin-syntax-import-assertions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz#cd6190500a4fa2fe31990a963ffab4b63e4505e4" + integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -679,191 +604,191 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz#dddd783b473b1b1537ef46423e3944ff24898c45" - integrity sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA== +"@babel/plugin-transform-arrow-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" + integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-async-to-generator@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz#dbe5511e6b01eee1496c944e35cdfe3f58050832" - integrity sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ== +"@babel/plugin-transform-async-to-generator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" + integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" -"@babel/plugin-transform-block-scoped-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" - integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-block-scoping@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.17.12.tgz#68fc3c4b3bb7dfd809d97b7ed19a584052a2725c" - integrity sha512-jw8XW/B1i7Lqwqj2CbrViPcZijSxfguBWZP2aN59NHgxUyO/OcO1mfdCxH13QhN5LbWhPkX+f+brKGhZTiqtZQ== +"@babel/plugin-transform-block-scoping@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.6.tgz#b5f78318914615397d86a731ef2cc668796a726c" + integrity sha512-pRqwb91C42vs1ahSAWJkxOxU1RHWDn16XAa6ggQ72wjLlWyYeAcLvTtE0aM8ph3KNydy9CQF2nLYcjq1WysgxQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-classes@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.17.12.tgz#da889e89a4d38375eeb24985218edeab93af4f29" - integrity sha512-cvO7lc7pZat6BsvH6l/EGaI8zpl8paICaoGk+7x7guvtfak/TbIf66nYmJOH13EuG0H+Xx3M+9LQDtSvZFKXKw== +"@babel/plugin-transform-classes@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.6.tgz#3501a8f3f4c7d5697c27a3eedbee71d68312669f" + integrity sha512-XTg8XW/mKpzAF3actL554Jl/dOYoJtv3l8fxaEczpgz84IeeVf+T1u2CSvPHuZbt0w3JkIx4rdn/MRQI7mo0HQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz#bca616a83679698f3258e892ed422546e531387f" - integrity sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ== +"@babel/plugin-transform-computed-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.6.tgz#5d15eb90e22e69604f3348344c91165c5395d032" + integrity sha512-9repI4BhNrR0KenoR9vm3/cIc1tSBIo+u1WVjKCAynahj25O8zfbiE6JtAtHPGQSs4yZ+bA8mRasRP+qc+2R5A== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-destructuring@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz#dc4f92587e291b4daa78aa20cc2d7a63aa11e858" - integrity sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw== +"@babel/plugin-transform-destructuring@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.6.tgz#a98b0e42c7ffbf5eefcbcf33280430f230895c6f" + integrity sha512-tgy3u6lRp17ilY8r1kP4i2+HDUwxlVqq3RTc943eAWSzGgpU1qhiKpqZ5CMyHReIYPHdo3Kg8v8edKtDqSVEyQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" - integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-duplicate-keys@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz#a09aa709a3310013f8e48e0e23bc7ace0f21477c" - integrity sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw== +"@babel/plugin-transform-duplicate-keys@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.6.tgz#e6c94e8cd3c9dd8a88144f7b78ae22975a7ff473" + integrity sha512-NJU26U/208+sxYszf82nmGYqVF9QN8py2HFTblPT9hbawi8+1C5a9JubODLTGFuT0qlkqVinmkwOD13s0sZktg== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-exponentiation-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" - integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-for-of@^7.18.1": - version "7.18.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz#ed14b657e162b72afbbb2b4cdad277bf2bb32036" - integrity sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg== +"@babel/plugin-transform-for-of@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.6.tgz#e0fdb813be908e91ccc9ec87b30cc2eabf046f7c" + integrity sha512-WAjoMf4wIiSsy88KmG7tgj2nFdEK7E46tArVtcgED7Bkj6Fg/tG5SbvNIOKxbFS2VFgNh6+iaPswBeQZm4ox8w== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" - integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== +"@babel/plugin-transform-function-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.6.tgz#6a7e4ae2893d336fd1b8f64c9f92276391d0f1b4" + integrity sha512-kJha/Gbs5RjzIu0CxZwf5e3aTTSlhZnHMT8zPWnJMjNpLOUgqevg+PN5oMH68nMCXnfiMo4Bhgxqj59KHTlAnA== dependencies: - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-compilation-targets" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-literals@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz#97131fbc6bbb261487105b4b3edbf9ebf9c830ae" - integrity sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ== +"@babel/plugin-transform-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.6.tgz#9d6af353b5209df72960baf4492722d56f39a205" + integrity sha512-x3HEw0cJZVDoENXOp20HlypIHfl0zMIhMVZEBVTfmqbObIpsMxMbmU5nOEO8R7LYT+z5RORKPlTI5Hj4OsO9/Q== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-member-expression-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" - integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-modules-amd@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz#7ef1002e67e36da3155edc8bf1ac9398064c02ed" - integrity sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA== +"@babel/plugin-transform-modules-amd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz#8c91f8c5115d2202f277549848874027d7172d21" + integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== dependencies: - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz#1aa8efa2e2a6e818b6a7f2235fceaf09bdb31e9e" - integrity sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ== +"@babel/plugin-transform-modules-commonjs@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz#afd243afba166cca69892e24a8fd8c9f2ca87883" + integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== dependencies: - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-simple-access" "^7.18.2" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.0.tgz#50ecdb43de97c8483824402f7125edb94cddb09a" - integrity sha512-vwKpxdHnlM5tIrRt/eA0bzfbi7gUBLN08vLu38np1nZevlPySRe6yvuATJB5F/WPJ+ur4OXwpVYq9+BsxqAQuQ== +"@babel/plugin-transform-modules-systemjs@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.6.tgz#026511b7657d63bf5d4cf2fd4aeb963139914a54" + integrity sha512-UbPYpXxLjTw6w6yXX2BYNxF3p6QY225wcTkfQCy3OMnSlS/C3xGtwUjEzGkldb/sy6PWLiCQ3NbYfjWUTI3t4g== dependencies: - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-validator-identifier" "^7.16.7" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz#56aac64a2c2a1922341129a4597d1fd5c3ff020f" - integrity sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA== +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== dependencies: - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-named-capturing-groups-regex@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz#9c4a5a5966e0434d515f2675c227fd8cc8606931" - integrity sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz#c89bfbc7cc6805d692f3a49bc5fc1b630007246d" + integrity sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-new-target@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.17.12.tgz#10842cd605a620944e81ea6060e9e65c265742e3" - integrity sha512-CaOtzk2fDYisbjAD4Sd1MTKGVIpRtx9bWLyj24Y/k6p4s4gQ3CqDGJauFJxt8M/LEx003d0i3klVqnN73qvK3w== +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-object-super@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" - integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-parameters@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz#eb467cd9586ff5ff115a9880d6fdbd4a846b7766" - integrity sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA== +"@babel/plugin-transform-parameters@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.6.tgz#cbe03d5a4c6385dd756034ac1baa63c04beab8dc" + integrity sha512-FjdqgMv37yVl/gwvzkcB+wfjRI8HQmc5EgOG9iGNvUY1ok+TjsoaMP7IqCDZBhkFcM5f3OPVMs6Dmp03C5k4/A== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-property-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" - integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-react-display-name@^7.18.6": version "7.18.6" @@ -906,20 +831,20 @@ "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz#44274d655eb3f1af3f3a574ba819d3f48caf99d5" - integrity sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw== +"@babel/plugin-transform-regenerator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" + integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" regenerator-transform "^0.15.0" -"@babel/plugin-transform-reserved-words@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz#7dbd349f3cdffba751e817cf40ca1386732f652f" - integrity sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA== +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-runtime@^7.18.6": version "7.18.6" @@ -933,89 +858,89 @@ babel-plugin-polyfill-regenerator "^0.3.1" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" - integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-spread@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz#c112cad3064299f03ea32afed1d659223935d1f5" - integrity sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg== +"@babel/plugin-transform-spread@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.6.tgz#82b080241965f1689f0a60ecc6f1f6575dbdb9d6" + integrity sha512-ayT53rT/ENF8WWexIRg9AiV9h0aIteyWn5ptfZTZQrjk/+f3WdrJGCY4c9wcgl2+MKkKPhzbYp97FTsquZpDCw== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" -"@babel/plugin-transform-sticky-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" - integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-template-literals@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz#31ed6915721864847c48b656281d0098ea1add28" - integrity sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g== +"@babel/plugin-transform-template-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.6.tgz#b763f4dc9d11a7cce58cf9a490d82e80547db9c2" + integrity sha512-UuqlRrQmT2SWRvahW46cGSany0uTlcj8NYOS5sRGYi8FxPYPoLd5DDmMd32ZXEj2Jq+06uGVQKHxa/hJx2EzKw== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-typeof-symbol@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz#0f12f57ac35e98b35b4ed34829948d42bd0e6889" - integrity sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw== +"@babel/plugin-transform-typeof-symbol@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.6.tgz#486bb39d5a18047358e0d04dc0d2f322f0b92e92" + integrity sha512-7m71iS/QhsPk85xSjFPovHPcH3H9qeyzsujhTc+vcdnsXavoWYJ74zx0lP5RhpC5+iDnVLO+PPMHzC11qels1g== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-unicode-escapes@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" - integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== +"@babel/plugin-transform-unicode-escapes@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz#0d01fb7fb2243ae1c033f65f6e3b4be78db75f27" + integrity sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-unicode-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" - integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/preset-env@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.2.tgz#f47d3000a098617926e674c945d95a28cb90977a" - integrity sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q== +"@babel/preset-env@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.6.tgz#953422e98a5f66bc56cd0b9074eaea127ec86ace" + integrity sha512-WrthhuIIYKrEFAwttYzgRNQ5hULGmwTj+D6l7Zdfsv5M7IWV/OZbUfbeL++Qrzx1nVJwWROIFhCHRYQV4xbPNw== dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-compilation-targets" "^7.18.2" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.17.12" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.17.12" - "@babel/plugin-proposal-async-generator-functions" "^7.17.12" - "@babel/plugin-proposal-class-properties" "^7.17.12" - "@babel/plugin-proposal-class-static-block" "^7.18.0" - "@babel/plugin-proposal-dynamic-import" "^7.16.7" - "@babel/plugin-proposal-export-namespace-from" "^7.17.12" - "@babel/plugin-proposal-json-strings" "^7.17.12" - "@babel/plugin-proposal-logical-assignment-operators" "^7.17.12" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.17.12" - "@babel/plugin-proposal-numeric-separator" "^7.16.7" - "@babel/plugin-proposal-object-rest-spread" "^7.18.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" - "@babel/plugin-proposal-optional-chaining" "^7.17.12" - "@babel/plugin-proposal-private-methods" "^7.17.12" - "@babel/plugin-proposal-private-property-in-object" "^7.17.12" - "@babel/plugin-proposal-unicode-property-regex" "^7.17.12" + "@babel/compat-data" "^7.18.6" + "@babel/helper-compilation-targets" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.6" + "@babel/plugin-proposal-async-generator-functions" "^7.18.6" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.6" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.6" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.18.6" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.6" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.17.12" + "@babel/plugin-syntax-import-assertions" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" @@ -1025,43 +950,43 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.17.12" - "@babel/plugin-transform-async-to-generator" "^7.17.12" - "@babel/plugin-transform-block-scoped-functions" "^7.16.7" - "@babel/plugin-transform-block-scoping" "^7.17.12" - "@babel/plugin-transform-classes" "^7.17.12" - "@babel/plugin-transform-computed-properties" "^7.17.12" - "@babel/plugin-transform-destructuring" "^7.18.0" - "@babel/plugin-transform-dotall-regex" "^7.16.7" - "@babel/plugin-transform-duplicate-keys" "^7.17.12" - "@babel/plugin-transform-exponentiation-operator" "^7.16.7" - "@babel/plugin-transform-for-of" "^7.18.1" - "@babel/plugin-transform-function-name" "^7.16.7" - "@babel/plugin-transform-literals" "^7.17.12" - "@babel/plugin-transform-member-expression-literals" "^7.16.7" - "@babel/plugin-transform-modules-amd" "^7.18.0" - "@babel/plugin-transform-modules-commonjs" "^7.18.2" - "@babel/plugin-transform-modules-systemjs" "^7.18.0" - "@babel/plugin-transform-modules-umd" "^7.18.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.17.12" - "@babel/plugin-transform-new-target" "^7.17.12" - "@babel/plugin-transform-object-super" "^7.16.7" - "@babel/plugin-transform-parameters" "^7.17.12" - "@babel/plugin-transform-property-literals" "^7.16.7" - "@babel/plugin-transform-regenerator" "^7.18.0" - "@babel/plugin-transform-reserved-words" "^7.17.12" - "@babel/plugin-transform-shorthand-properties" "^7.16.7" - "@babel/plugin-transform-spread" "^7.17.12" - "@babel/plugin-transform-sticky-regex" "^7.16.7" - "@babel/plugin-transform-template-literals" "^7.18.2" - "@babel/plugin-transform-typeof-symbol" "^7.17.12" - "@babel/plugin-transform-unicode-escapes" "^7.16.7" - "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.18.6" + "@babel/plugin-transform-classes" "^7.18.6" + "@babel/plugin-transform-computed-properties" "^7.18.6" + "@babel/plugin-transform-destructuring" "^7.18.6" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.6" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.6" + "@babel/plugin-transform-function-name" "^7.18.6" + "@babel/plugin-transform-literals" "^7.18.6" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.18.6" + "@babel/plugin-transform-modules-commonjs" "^7.18.6" + "@babel/plugin-transform-modules-systemjs" "^7.18.6" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.18.6" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.18.6" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.18.6" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.6" + "@babel/plugin-transform-typeof-symbol" "^7.18.6" + "@babel/plugin-transform-unicode-escapes" "^7.18.6" + "@babel/plugin-transform-unicode-regex" "^7.18.6" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.18.2" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" + "@babel/types" "^7.18.6" + babel-plugin-polyfill-corejs2 "^0.3.1" + babel-plugin-polyfill-corejs3 "^0.5.2" + babel-plugin-polyfill-regenerator "^0.3.1" core-js-compat "^3.22.1" semver "^6.3.0" @@ -1110,7 +1035,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.16.7", "@babel/template@^7.18.6", "@babel/template@^7.3.3": +"@babel/template@^7.18.6", "@babel/template@^7.3.3": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== @@ -1119,7 +1044,7 @@ "@babel/parser" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.18.6", "@babel/traverse@^7.7.2": +"@babel/traverse@^7.13.0", "@babel/traverse@^7.18.6", "@babel/traverse@^7.7.2": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.6.tgz#a228562d2f46e89258efa4ddd0416942e2fd671d" integrity sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw== @@ -1135,7 +1060,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.18.2", "@babel/types@^7.18.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.18.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.6.tgz#5d781dd10a3f0c9f1f931bd19de5eb26ec31acf0" integrity sha512-NdBNzPDwed30fZdDQtVR7ZgaO4UKjuaQFH9VArS+HMnurlOY0JWN+4ROlu/iapMFwjRQU4pOG4StZfDmulEwGA== @@ -2616,7 +2541,7 @@ babel-plugin-macros@^3.0.1: cosmiconfig "^7.0.0" resolve "^1.19.0" -babel-plugin-polyfill-corejs2@^0.3.0, babel-plugin-polyfill-corejs2@^0.3.1: +babel-plugin-polyfill-corejs2@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== @@ -2625,7 +2550,7 @@ babel-plugin-polyfill-corejs2@^0.3.0, babel-plugin-polyfill-corejs2@^0.3.1: "@babel/helper-define-polyfill-provider" "^0.3.1" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.0, babel-plugin-polyfill-corejs3@^0.5.2: +babel-plugin-polyfill-corejs3@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== @@ -2633,7 +2558,7 @@ babel-plugin-polyfill-corejs3@^0.5.0, babel-plugin-polyfill-corejs3@^0.5.2: "@babel/helper-define-polyfill-provider" "^0.3.1" core-js-compat "^3.21.0" -babel-plugin-polyfill-regenerator@^0.3.0, babel-plugin-polyfill-regenerator@^0.3.1: +babel-plugin-polyfill-regenerator@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== @@ -2941,7 +2866,7 @@ browserslist@^4.0.0, browserslist@^4.12.0: escalade "^3.1.1" node-releases "^1.1.71" -browserslist@^4.20.2, browserslist@^4.20.3: +browserslist@^4.20.2: version "4.20.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.3.tgz#eb7572f49ec430e054f56d52ff0ebe9be915f8bf" integrity sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg== @@ -3555,7 +3480,7 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.21.0: +core-js-compat@^3.21.0, core-js-compat@^3.22.1: version "3.23.3" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.23.3.tgz#7d8503185be76bb6d8d592c291a4457a8e440aa9" integrity sha512-WSzUs2h2vvmKsacLHNTdpyOC9k43AEhcGoFlVgCY4L7aw98oSBKtPL6vD0/TqZjRWRQYdDSLkzZIni4Crbbiqw== @@ -3563,14 +3488,6 @@ core-js-compat@^3.21.0: browserslist "^4.21.0" semver "7.0.0" -core-js-compat@^3.22.1: - version "3.22.4" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.22.4.tgz#d700f451e50f1d7672dcad0ac85d910e6691e579" - integrity sha512-dIWcsszDezkFZrfm1cnB4f/J85gyhiCpxbgBdohWCDtSVuAaChTSpPV7ldOQf/Xds2U5xCIJZOK82G4ZPAIswA== - dependencies: - browserslist "^4.20.3" - semver "7.0.0" - core-js-pure@^3.0.0: version "3.6.5" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" @@ -9517,18 +9434,6 @@ regenerate-unicode-properties@^10.0.1: dependencies: regenerate "^1.4.2" -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" - integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== - regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" @@ -9581,22 +9486,10 @@ regexpp@^3.1.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== -regexpu-core@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -regexpu-core@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" - integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== +regexpu-core@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.1.0.tgz#2f8504c3fd0ebe11215783a41541e21c79942c6d" + integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA== dependencies: regenerate "^1.4.2" regenerate-unicode-properties "^10.0.1" @@ -9605,23 +9498,11 @@ regexpu-core@^5.0.1: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.0.0" -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - regjsgen@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== -regjsparser@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" - integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== - dependencies: - jsesc "~0.5.0" - regjsparser@^0.8.2: version "0.8.4" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" @@ -11139,24 +11020,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - unicode-match-property-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" @@ -11165,21 +11033,11 @@ unicode-match-property-ecmascript@^2.0.0: unicode-canonical-property-names-ecmascript "^2.0.0" unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== - unicode-match-property-value-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== - unicode-property-aliases-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" From 485b43ed7e312ab2c3bad446132c57d6a0ce7de4 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 27 Jun 2022 09:30:15 +0200 Subject: [PATCH 067/646] [Glitch] Add notifications for new reports Port 2936f42a14cfdca70d4a9653dab29382315945e7 to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/actions/notifications.js | 6 + .../flavours/glitch/components/icon_button.js | 12 +- .../notifications/components/admin_report.js | 108 ++++++++++++++++++ .../components/column_settings.js | 13 +++ .../notifications/components/notification.js | 14 +++ .../notifications/components/report.js | 62 ++++++++++ .../containers/admin_report_container.js | 13 +++ .../flavours/glitch/reducers/notifications.js | 3 +- .../flavours/glitch/reducers/settings.js | 3 + .../flavours/glitch/selectors/index.js | 17 +-- .../glitch/styles/components/accounts.scss | 29 +++++ .../styles/components/single_column.scss | 10 ++ 12 files changed, 279 insertions(+), 11 deletions(-) create mode 100644 app/javascript/flavours/glitch/features/notifications/components/admin_report.js create mode 100644 app/javascript/flavours/glitch/features/notifications/components/report.js create mode 100644 app/javascript/flavours/glitch/features/notifications/containers/admin_report_container.js diff --git a/app/javascript/flavours/glitch/actions/notifications.js b/app/javascript/flavours/glitch/actions/notifications.js index 85938867bf0..3993b1ea5b9 100644 --- a/app/javascript/flavours/glitch/actions/notifications.js +++ b/app/javascript/flavours/glitch/actions/notifications.js @@ -103,6 +103,10 @@ export function updateNotifications(notification, intlMessages, intlLocale) { dispatch(importFetchedStatus(notification.status)); } + if (notification.report) { + dispatch(importFetchedAccount(notification.report.target_account)); + } + dispatch({ type: NOTIFICATIONS_UPDATE, notification, @@ -146,6 +150,7 @@ const excludeTypesFromFilter = filter => { 'status', 'update', 'admin.sign_up', + 'admin.report', ]); return allTypes.filterNot(item => item === filter).toJS(); @@ -191,6 +196,7 @@ export function expandNotifications({ maxId } = {}, done = noOp) { dispatch(importFetchedAccounts(response.data.map(item => item.account))); dispatch(importFetchedStatuses(response.data.map(item => item.status).filter(status => !!status))); + dispatch(importFetchedAccounts(response.data.filter(item => item.report).map(item => item.report.target_account))); dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null, isLoadingMore, isLoadingRecent, isLoadingRecent && preferPendingItems)); fetchRelatedRelationships(dispatch, response.data); diff --git a/app/javascript/flavours/glitch/components/icon_button.js b/app/javascript/flavours/glitch/components/icon_button.js index 9a05badd035..be2468d688e 100644 --- a/app/javascript/flavours/glitch/components/icon_button.js +++ b/app/javascript/flavours/glitch/components/icon_button.js @@ -140,8 +140,16 @@ export default class IconButton extends React.PureComponent { ); if (href) { - contents = ( - + return ( + {contents} ); diff --git a/app/javascript/flavours/glitch/features/notifications/components/admin_report.js b/app/javascript/flavours/glitch/features/notifications/components/admin_report.js new file mode 100644 index 00000000000..80beeb9da95 --- /dev/null +++ b/app/javascript/flavours/glitch/features/notifications/components/admin_report.js @@ -0,0 +1,108 @@ +// Package imports. +import React from 'react'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import PropTypes from 'prop-types'; +import { FormattedMessage, defineMessages, injectIntl } from 'react-intl'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import { HotKeys } from 'react-hotkeys'; +import classNames from 'classnames'; + +// Our imports. +import Permalink from 'flavours/glitch/components/permalink'; +import AccountContainer from 'flavours/glitch/containers/account_container'; +import NotificationOverlayContainer from '../containers/overlay_container'; +import Icon from 'flavours/glitch/components/icon'; +import Report from './report'; + +const messages = defineMessages({ + adminReport: { id: 'notification.admin.report', defaultMessage: '{name} reported {target}' }, +}); + +export default class AdminReport extends ImmutablePureComponent { + + static propTypes = { + hidden: PropTypes.bool, + id: PropTypes.string.isRequired, + account: ImmutablePropTypes.map.isRequired, + notification: ImmutablePropTypes.map.isRequired, + unread: PropTypes.bool, + report: ImmutablePropTypes.map.isRequired, + }; + + handleMoveUp = () => { + const { notification, onMoveUp } = this.props; + onMoveUp(notification.get('id')); + } + + handleMoveDown = () => { + const { notification, onMoveDown } = this.props; + onMoveDown(notification.get('id')); + } + + handleOpen = () => { + this.handleOpenProfile(); + } + + handleOpenProfile = () => { + const { notification } = this.props; + this.context.router.history.push(`/@${notification.getIn(['account', 'acct'])}`); + } + + handleMention = e => { + e.preventDefault(); + + const { notification, onMention } = this.props; + onMention(notification.get('account'), this.context.router.history); + } + + getHandlers () { + return { + moveUp: this.handleMoveUp, + moveDown: this.handleMoveDown, + open: this.handleOpen, + openProfile: this.handleOpenProfile, + mention: this.handleMention, + reply: this.handleMention, + }; + } + + render () { + const { intl, account, notification, unread, report } = this.props; + + // Links to the display name. + const displayName = account.get('display_name_html') || account.get('username'); + const link = ( + + ); + + const targetAccount = report.get('target_account'); + const targetDisplayNameHtml = { __html: targetAccount.get('display_name_html') }; + const targetLink = ; + + return ( + +

+
+
+ +
+ + + + +
+ +
+ + ); + } + +} diff --git a/app/javascript/flavours/glitch/features/notifications/components/column_settings.js b/app/javascript/flavours/glitch/features/notifications/components/column_settings.js index 0be2a7e13c9..a8502f5637e 100644 --- a/app/javascript/flavours/glitch/features/notifications/components/column_settings.js +++ b/app/javascript/flavours/glitch/features/notifications/components/column_settings.js @@ -179,6 +179,19 @@ export default class ColumnSettings extends React.PureComponent {
)} + + {isStaff && ( +
+ + +
+ + {showPushSettings && } + + +
+
+ )} ); } diff --git a/app/javascript/flavours/glitch/features/notifications/components/notification.js b/app/javascript/flavours/glitch/features/notifications/components/notification.js index e0cd3c7a608..d676a4207c2 100644 --- a/app/javascript/flavours/glitch/features/notifications/components/notification.js +++ b/app/javascript/flavours/glitch/features/notifications/components/notification.js @@ -9,6 +9,7 @@ import StatusContainer from 'flavours/glitch/containers/status_container'; import NotificationFollow from './follow'; import NotificationFollowRequestContainer from '../containers/follow_request_container'; import NotificationAdminSignup from './admin_signup'; +import NotificationAdminReportContainer from '../containers/admin_report_container'; export default class Notification extends ImmutablePureComponent { @@ -77,6 +78,19 @@ export default class Notification extends ImmutablePureComponent { unread={this.props.unread} /> ); + case 'admin.report': + return ( +
diff --git a/app/javascript/flavours/glitch/features/status/components/action_bar.js b/app/javascript/flavours/glitch/features/status/components/action_bar.js index a67a045da98..ef0f0f2b7e8 100644 --- a/app/javascript/flavours/glitch/features/status/components/action_bar.js +++ b/app/javascript/flavours/glitch/features/status/components/action_bar.js @@ -4,9 +4,10 @@ import IconButton from 'flavours/glitch/components/icon_button'; import ImmutablePropTypes from 'react-immutable-proptypes'; import DropdownMenuContainer from 'flavours/glitch/containers/dropdown_menu_container'; import { defineMessages, injectIntl } from 'react-intl'; -import { me, isStaff } from 'flavours/glitch/util/initial_state'; +import { me } from 'flavours/glitch/util/initial_state'; import { accountAdminLink, statusAdminLink } from 'flavours/glitch/util/backend_links'; import classNames from 'classnames'; +import { PERMISSION_MANAGE_USERS } from 'flavours/glitch/permissions'; const messages = defineMessages({ delete: { id: 'status.delete', defaultMessage: 'Delete' }, @@ -41,6 +42,7 @@ class ActionBar extends React.PureComponent { static contextTypes = { router: PropTypes.object, + identity: PropTypes.object, }; static propTypes = { @@ -182,7 +184,7 @@ class ActionBar extends React.PureComponent { menu.push({ text: intl.formatMessage(messages.mute, { name: status.getIn(['account', 'username']) }), action: this.handleMuteClick }); menu.push({ text: intl.formatMessage(messages.block, { name: status.getIn(['account', 'username']) }), action: this.handleBlockClick }); menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport }); - if (isStaff && (accountAdminLink || statusAdminLink)) { + if ((this.context.identity.permissions & PERMISSION_MANAGE_USERS) === PERMISSION_MANAGE_USERS && (accountAdminLink || statusAdminLink)) { menu.push(null); if (accountAdminLink !== undefined) { menu.push({ diff --git a/app/javascript/flavours/glitch/features/ui/components/link_footer.js b/app/javascript/flavours/glitch/features/ui/components/link_footer.js index d9579e9c9ac..3abdaad4bdd 100644 --- a/app/javascript/flavours/glitch/features/ui/components/link_footer.js +++ b/app/javascript/flavours/glitch/features/ui/components/link_footer.js @@ -3,10 +3,11 @@ import React from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage, defineMessages, injectIntl } from 'react-intl'; import { Link } from 'react-router-dom'; -import { invitesEnabled, limitedFederationMode, version, repository, source_url } from 'flavours/glitch/util/initial_state'; +import { limitedFederationMode, version, repository, source_url } from 'flavours/glitch/util/initial_state'; import { signOutLink, securityLink } from 'flavours/glitch/util/backend_links'; import { logOut } from 'flavours/glitch/util/log_out'; import { openModal } from 'flavours/glitch/actions/modal'; +import { PERMISSION_INVITE_USERS } from 'flavours/glitch/permissions'; const messages = defineMessages({ logoutMessage: { id: 'confirmations.logout.message', defaultMessage: 'Are you sure you want to log out?' }, @@ -28,6 +29,10 @@ export default @injectIntl @connect(null, mapDispatchToProps) class LinkFooter extends React.PureComponent { + static contextTypes = { + identity: PropTypes.object, + }; + static propTypes = { onLogout: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, @@ -46,7 +51,7 @@ class LinkFooter extends React.PureComponent { return (
    - {invitesEnabled &&
  • ·
  • } + {((this.context.identity.permissions & PERMISSION_INVITE_USERS) === PERMISSION_INVITE_USERS) &&
  • ·
  • } {!!securityLink &&
  • ·
  • } {!limitedFederationMode &&
  • ·
  • }
  • ·
  • diff --git a/app/javascript/flavours/glitch/permissions.js b/app/javascript/flavours/glitch/permissions.js new file mode 100644 index 00000000000..752ddd6c531 --- /dev/null +++ b/app/javascript/flavours/glitch/permissions.js @@ -0,0 +1,3 @@ +export const PERMISSION_INVITE_USERS = 0x0000000000010000; +export const PERMISSION_MANAGE_USERS = 0x0000000000000400; +export const PERMISSION_MANAGE_REPORTS = 0x0000000000000010; diff --git a/app/javascript/flavours/glitch/reducers/meta.js b/app/javascript/flavours/glitch/reducers/meta.js index a98dc436a01..0f3ab3b848e 100644 --- a/app/javascript/flavours/glitch/reducers/meta.js +++ b/app/javascript/flavours/glitch/reducers/meta.js @@ -4,12 +4,13 @@ import { Map as ImmutableMap } from 'immutable'; const initialState = ImmutableMap({ streaming_api_base_url: null, access_token: null, + permissions: '0', }); export default function meta(state = initialState, action) { switch(action.type) { case STORE_HYDRATE: - return state.merge(action.state.get('meta')); + return state.merge(action.state.get('meta')).set('permissions', action.state.getIn(['role', 'permissions'])); default: return state; } diff --git a/app/javascript/flavours/glitch/styles/admin.scss b/app/javascript/flavours/glitch/styles/admin.scss index 6ed67edc49b..77890c467c0 100644 --- a/app/javascript/flavours/glitch/styles/admin.scss +++ b/app/javascript/flavours/glitch/styles/admin.scss @@ -943,6 +943,10 @@ a.name-tag, margin-top: 15px; } +.user-role { + color: var(--user-role-accent); +} + .announcements-list, .filters-list { border: 1px solid lighten($ui-base-color, 4%); @@ -979,6 +983,17 @@ a.name-tag, &__meta { padding: 0 15px; color: $dark-text-color; + + a { + color: inherit; + text-decoration: underline; + + &:hover, + &:focus, + &:active { + text-decoration: none; + } + } } &__action-bar { diff --git a/app/javascript/flavours/glitch/styles/forms.scss b/app/javascript/flavours/glitch/styles/forms.scss index 1ce13b874d8..8ae2b5bd845 100644 --- a/app/javascript/flavours/glitch/styles/forms.scss +++ b/app/javascript/flavours/glitch/styles/forms.scss @@ -247,6 +247,10 @@ code { } } + .input.with_block_label.user_role_permissions_as_keys ul { + columns: unset; + } + .input.datetime .label_input select { display: inline-block; width: auto; diff --git a/app/javascript/flavours/glitch/util/initial_state.js b/app/javascript/flavours/glitch/util/initial_state.js index b6eab0c871d..90dada4b31d 100644 --- a/app/javascript/flavours/glitch/util/initial_state.js +++ b/app/javascript/flavours/glitch/util/initial_state.js @@ -23,14 +23,12 @@ export const me = getMeta('me'); export const searchEnabled = getMeta('search_enabled'); export const maxChars = (initialState && initialState.max_toot_chars) || 500; export const pollLimits = (initialState && initialState.poll_limits); -export const invitesEnabled = getMeta('invites_enabled'); export const limitedFederationMode = getMeta('limited_federation_mode'); export const repository = getMeta('repository'); export const source_url = getMeta('source_url'); export const version = getMeta('version'); export const mascot = getMeta('mascot'); export const profile_directory = getMeta('profile_directory'); -export const isStaff = getMeta('is_staff'); export const defaultContentType = getMeta('default_content_type'); export const forceSingleColumn = getMeta('advanced_layout') === false; export const useBlurhash = getMeta('use_blurhash'); From 75279377583c6e2aa04cc8d7380c593979630b38 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 5 Jul 2022 11:57:30 +0200 Subject: [PATCH 080/646] Fix authorization check in domain blocks controller --- app/controllers/admin/domain_blocks_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/admin/domain_blocks_controller.rb b/app/controllers/admin/domain_blocks_controller.rb index 48e9781d606..32f1f9a5d3a 100644 --- a/app/controllers/admin/domain_blocks_controller.rb +++ b/app/controllers/admin/domain_blocks_controller.rb @@ -5,6 +5,7 @@ module Admin before_action :set_domain_block, only: [:show, :destroy, :edit, :update] def batch + authorize :domain_block, :create? @form = Form::DomainBlockBatch.new(form_domain_block_batch_params.merge(current_account: current_account, action: action_from_button)) @form.save rescue ActionController::ParameterMissing From 9094c2f52c24e1c00b594e7c11cd00e4a07eb431 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 5 Jul 2022 12:00:27 +0200 Subject: [PATCH 081/646] Fix tests --- spec/controllers/admin/domain_allows_controller_spec.rb | 2 +- spec/controllers/admin/export_domain_allows_controller_spec.rb | 2 +- spec/controllers/admin/export_domain_blocks_controller_spec.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/controllers/admin/domain_allows_controller_spec.rb b/spec/controllers/admin/domain_allows_controller_spec.rb index 8bacdd3e40c..6c4e677876e 100644 --- a/spec/controllers/admin/domain_allows_controller_spec.rb +++ b/spec/controllers/admin/domain_allows_controller_spec.rb @@ -4,7 +4,7 @@ RSpec.describe Admin::DomainAllowsController, type: :controller do render_views before do - sign_in Fabricate(:user, admin: true), scope: :user + sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')), scope: :user end describe 'GET #new' do diff --git a/spec/controllers/admin/export_domain_allows_controller_spec.rb b/spec/controllers/admin/export_domain_allows_controller_spec.rb index f6275c2d659..1e1a5ae7d4f 100644 --- a/spec/controllers/admin/export_domain_allows_controller_spec.rb +++ b/spec/controllers/admin/export_domain_allows_controller_spec.rb @@ -4,7 +4,7 @@ RSpec.describe Admin::ExportDomainAllowsController, type: :controller do render_views before do - sign_in Fabricate(:user, admin: true), scope: :user + sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')), scope: :user end describe 'GET #export' do diff --git a/spec/controllers/admin/export_domain_blocks_controller_spec.rb b/spec/controllers/admin/export_domain_blocks_controller_spec.rb index 0493df85912..8697e0c2156 100644 --- a/spec/controllers/admin/export_domain_blocks_controller_spec.rb +++ b/spec/controllers/admin/export_domain_blocks_controller_spec.rb @@ -4,7 +4,7 @@ RSpec.describe Admin::ExportDomainBlocksController, type: :controller do render_views before do - sign_in Fabricate(:user, admin: true), scope: :user + sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')), scope: :user end describe 'GET #export' do From 0665ba8a2307f7e894c99261864536d9998b2ca1 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 5 Jul 2022 20:01:50 +0200 Subject: [PATCH 082/646] Fix incorrect param in role card link (#18776) --- app/views/admin/roles/_role.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/roles/_role.html.haml b/app/views/admin/roles/_role.html.haml index 6804f4f1549..1ca5ca39206 100644 --- a/app/views/admin/roles/_role.html.haml +++ b/app/views/admin/roles/_role.html.haml @@ -13,6 +13,6 @@ - if role.everyone? = t('admin.roles.everyone_full_description_html') - else - = link_to t('admin.roles.assigned_users', count: role.users.count), admin_accounts_path(role_id: role.id) + = link_to t('admin.roles.assigned_users', count: role.users.count), admin_accounts_path(role_ids: role.id) • %abbr{ title: role.permissions_as_keys.map { |privilege| I18n.t("admin.roles.privileges.#{privilege}") }.join(', ') }= t('admin.roles.permissions_count', count: role.permissions_as_keys.size) From d8082ed7725e6538c83c7a3e3cde2978d14a27cc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 09:11:00 +0900 Subject: [PATCH 083/646] Bump sidekiq from 6.4.2 to 6.5.1 (#18672) Bumps [sidekiq](https://github.com/mperham/sidekiq) from 6.4.2 to 6.5.1. - [Release notes](https://github.com/mperham/sidekiq/releases) - [Changelog](https://github.com/mperham/sidekiq/blob/main/Changes.md) - [Commits](https://github.com/mperham/sidekiq/compare/v6.4.2...v6.5.1) --- updated-dependencies: - dependency-name: sidekiq dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 05b238b658b..b4d38160c56 100644 --- a/Gemfile +++ b/Gemfile @@ -78,7 +78,7 @@ gem 'rqrcode', '~> 2.1' gem 'ruby-progressbar', '~> 1.11' gem 'sanitize', '~> 6.0' gem 'scenic', '~> 1.6' -gem 'sidekiq', '~> 6.4' +gem 'sidekiq', '~> 6.5' gem 'sidekiq-scheduler', '~> 4.0' gem 'sidekiq-unique-jobs', '~> 7.1' gem 'sidekiq-bulk', '~> 0.2.0' diff --git a/Gemfile.lock b/Gemfile.lock index b020263a7ad..ed82a08961d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -601,7 +601,7 @@ GEM railties (>= 4.0.0) securecompare (1.0.0) semantic_range (3.0.0) - sidekiq (6.4.2) + sidekiq (6.5.1) connection_pool (>= 2.2.2) rack (~> 2.0) redis (>= 4.2.0) @@ -827,7 +827,7 @@ DEPENDENCIES ruby-progressbar (~> 1.11) sanitize (~> 6.0) scenic (~> 1.6) - sidekiq (~> 6.4) + sidekiq (~> 6.5) sidekiq-bulk (~> 0.2.0) sidekiq-scheduler (~> 4.0) sidekiq-unique-jobs (~> 7.1) From 15ec3c357f9af6d6268acb198e4408c2ff061a5c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 09:14:46 +0900 Subject: [PATCH 084/646] Bump react-select from 5.3.2 to 5.4.0 (#18772) Bumps [react-select](https://github.com/JedWatson/react-select) from 5.3.2 to 5.4.0. - [Release notes](https://github.com/JedWatson/react-select/releases) - [Changelog](https://github.com/JedWatson/react-select/blob/master/docs/CHANGELOG.md) - [Commits](https://github.com/JedWatson/react-select/compare/react-select@5.3.2...react-select@5.4.0) --- updated-dependencies: - dependency-name: react-select dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index b6343395b21..1fb6a41e6ab 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "react-redux-loading-bar": "^4.0.8", "react-router-dom": "^4.1.1", "react-router-scroll-4": "^1.0.0-beta.1", - "react-select": "^5.3.2", + "react-select": "^5.4.0", "react-sparklines": "^1.7.0", "react-swipeable-views": "^0.14.0", "react-textarea-autosize": "^8.3.4", diff --git a/yarn.lock b/yarn.lock index acd6fc370c3..ed01714a224 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9216,10 +9216,10 @@ react-router@^4.3.1: prop-types "^15.6.1" warning "^4.0.1" -react-select@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.3.2.tgz#ecee0d5c59ed4acb7f567f7de3c75a488d93dacb" - integrity sha512-W6Irh7U6Ha7p5uQQ2ZnemoCQ8mcfgOtHfw3wuMzG6FAu0P+CYicgofSLOq97BhjMx8jS+h+wwWdCBeVVZ9VqlQ== +react-select@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.4.0.tgz#81f6ac73906126706f104751ee14437bd16798f4" + integrity sha512-CjE9RFLUvChd5SdlfG4vqxZd55AZJRrLrHzkQyTYeHlpOztqcgnyftYAolJ0SGsBev6zAs6qFrjm6KU3eo2hzg== dependencies: "@babel/runtime" "^7.12.0" "@emotion/cache" "^11.4.0" From 35c69f0e1f82ceae65b984b70ef12569725a86b1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 09:16:52 +0900 Subject: [PATCH 085/646] Bump oj from 3.13.14 to 3.13.15 (#18765) Bumps [oj](https://github.com/ohler55/oj) from 3.13.14 to 3.13.15. - [Release notes](https://github.com/ohler55/oj/releases) - [Changelog](https://github.com/ohler55/oj/blob/develop/CHANGELOG.md) - [Commits](https://github.com/ohler55/oj/compare/v3.13.14...v3.13.15) --- updated-dependencies: - dependency-name: oj dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index ed82a08961d..711abdeb397 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -413,7 +413,7 @@ GEM concurrent-ruby (~> 1.0, >= 1.0.2) sidekiq (>= 3.5) statsd-ruby (~> 1.4, >= 1.4.0) - oj (3.13.14) + oj (3.13.15) omniauth (1.9.1) hashie (>= 3.4.6) rack (>= 1.6.2, < 3) From 1b9030bff4de9d6977a8f452cb1f8940c5829189 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 09:17:32 +0900 Subject: [PATCH 086/646] Bump babel-jest from 28.1.1 to 28.1.2 (#18770) Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 28.1.1 to 28.1.2. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v28.1.2/packages/babel-jest) --- updated-dependencies: - dependency-name: babel-jest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 28 ++++++++++++++++++---------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 1fb6a41e6ab..3856bf36bf8 100644 --- a/package.json +++ b/package.json @@ -142,7 +142,7 @@ "@babel/eslint-parser": "^7.18.2", "@testing-library/jest-dom": "^5.16.4", "@testing-library/react": "^12.1.5", - "babel-jest": "^28.1.1", + "babel-jest": "^28.1.2", "eslint": "^7.32.0", "eslint-plugin-import": "~2.26.0", "eslint-plugin-jsx-a11y": "~6.6.0", diff --git a/yarn.lock b/yarn.lock index ed01714a224..23a00aef504 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1393,14 +1393,14 @@ jest-haste-map "^28.1.1" slash "^3.0.0" -"@jest/transform@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.1.tgz#83541f2a3f612077c8501f49cc4e205d4e4a6b27" - integrity sha512-PkfaTUuvjUarl1EDr5ZQcCA++oXkFCP9QFUkG0yVKVmNObjhrqDy0kbMpMebfHWm3CCDHjYNem9eUSH8suVNHQ== +"@jest/transform@^28.1.1", "@jest/transform@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.2.tgz#b367962c53fd53821269bde050ce373e111327c1" + integrity sha512-3o+lKF6iweLeJFHBlMJysdaPbpoMmtbHEFsjzSv37HIq/wWt5ijTeO2Yf7MO5yyczCopD507cNwNLeX8Y/CuIg== dependencies: "@babel/core" "^7.11.6" "@jest/types" "^28.1.1" - "@jridgewell/trace-mapping" "^0.3.7" + "@jridgewell/trace-mapping" "^0.3.13" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^1.4.0" @@ -1479,6 +1479,14 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/trace-mapping@^0.3.13": + version "0.3.14" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" + integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping@^0.3.7": version "0.3.9" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" @@ -2461,12 +2469,12 @@ axobject-query@^2.2.0: resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== -babel-jest@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.1.tgz#2a3a4ae50964695b2d694ccffe4bec537c5a3586" - integrity sha512-MEt0263viUdAkTq5D7upHPNxvt4n9uLUGa6pPz3WviNBMtOmStb1lIXS3QobnoqM+qnH+vr4EKlvhe8QcmxIYw== +babel-jest@^28.1.1, babel-jest@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.2.tgz#2b37fb81439f14d34d8b2cc4a4bd7efabf9acbfe" + integrity sha512-pfmoo6sh4L/+5/G2OOfQrGJgvH7fTa1oChnuYH2G/6gA+JwDvO8PELwvwnofKBMNrQsam0Wy/Rw+QSrBNewq2Q== dependencies: - "@jest/transform" "^28.1.1" + "@jest/transform" "^28.1.2" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" babel-preset-jest "^28.1.1" From 9442017224ffeca280b7e573fed7d708235a4895 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 09:17:57 +0900 Subject: [PATCH 087/646] Bump jest-environment-jsdom from 28.1.1 to 28.1.2 (#18766) Bumps [jest-environment-jsdom](https://github.com/facebook/jest/tree/HEAD/packages/jest-environment-jsdom) from 28.1.1 to 28.1.2. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v28.1.2/packages/jest-environment-jsdom) --- updated-dependencies: - dependency-name: jest-environment-jsdom dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 34 +++++++++++++++++----------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index 3856bf36bf8..b67b429b00e 100644 --- a/package.json +++ b/package.json @@ -149,7 +149,7 @@ "eslint-plugin-promise": "~6.0.0", "eslint-plugin-react": "~7.30.1", "jest": "^28.1.1", - "jest-environment-jsdom": "^28.1.1", + "jest-environment-jsdom": "^28.1.2", "postcss-scss": "^4.0.4", "prettier": "^2.7.1", "raf": "^3.4.1", diff --git a/yarn.lock b/yarn.lock index 23a00aef504..e02ce60437d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1280,12 +1280,12 @@ slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.1.tgz#c4cbf85283278d768f816ebd1a258ea6f9e39d4f" - integrity sha512-9auVQ2GzQ7nrU+lAr8KyY838YahElTX9HVjbQPPS2XjlxQ+na18G113OoBhyBGBtD6ZnO/SrUy5WR8EzOj1/Uw== +"@jest/environment@^28.1.1", "@jest/environment@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.2.tgz#94a052c0c5f9f8c8e6d13ea6da78dbc5d7d9b85b" + integrity sha512-I0CR1RUMmOzd0tRpz10oUfaChBWs+/Hrvn5xYhMEF/ZqrDaaeHwS8yDBqEWCrEnkH2g+WE/6g90oBv3nKpcm8Q== dependencies: - "@jest/fake-timers" "^28.1.1" + "@jest/fake-timers" "^28.1.2" "@jest/types" "^28.1.1" "@types/node" "*" jest-mock "^28.1.1" @@ -1305,13 +1305,13 @@ expect "^28.1.1" jest-snapshot "^28.1.1" -"@jest/fake-timers@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.1.tgz#47ce33296ab9d680c76076d51ddbe65ceb3337f1" - integrity sha512-BY/3+TyLs5+q87rGWrGUY5f8e8uC3LsVHS9Diz8+FV3ARXL4sNnkLlIB8dvDvRrp+LUCGM+DLqlsYubizGUjIA== +"@jest/fake-timers@^28.1.1", "@jest/fake-timers@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.2.tgz#d49e8ee4e02ba85a6e844a52a5e7c59c23e3b76f" + integrity sha512-xSYEI7Y0D5FbZN2LsCUj/EKRR1zfQYmGuAUVh6xTqhx7V5JhjgMcK5Pa0iR6WIk0GXiHDe0Ke4A+yERKE9saqg== dependencies: "@jest/types" "^28.1.1" - "@sinonjs/fake-timers" "^9.1.1" + "@sinonjs/fake-timers" "^9.1.2" "@types/node" "*" jest-message-util "^28.1.1" jest-mock "^28.1.1" @@ -1588,7 +1588,7 @@ dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^9.1.1": +"@sinonjs/fake-timers@^9.1.2": version "9.1.2" resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== @@ -6498,13 +6498,13 @@ jest-each@^28.1.1: jest-util "^28.1.1" pretty-format "^28.1.1" -jest-environment-jsdom@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-28.1.1.tgz#8bd721915b32f9b196723292c4461a0ad548b55b" - integrity sha512-41ZvgSoPNcKG5q3LuuOcAczdBxRq9DbZkPe24okN6ZCmiZdAfFtPg3z+lOtsT1fM6OAERApKT+3m0MRDQH2zIA== +jest-environment-jsdom@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-28.1.2.tgz#d3fe82ef8f900c34ab582df7d3002c5079e3d8ab" + integrity sha512-Ujhx/xFZGVPuxAVpseQ7KqdBErenuWH3Io2HujkGOKMS2VWmpnTGYHzv+73p21QJ9yYQlJkeg06rTe1svV+u0g== dependencies: - "@jest/environment" "^28.1.1" - "@jest/fake-timers" "^28.1.1" + "@jest/environment" "^28.1.2" + "@jest/fake-timers" "^28.1.2" "@jest/types" "^28.1.1" "@types/jsdom" "^16.2.4" "@types/node" "*" From fff0a55df215010abddb218b598049a6fb0ed669 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 09:40:06 +0900 Subject: [PATCH 088/646] Bump jest from 28.1.1 to 28.1.2 (#18769) Bumps [jest](https://github.com/facebook/jest/tree/HEAD/packages/jest) from 28.1.1 to 28.1.2. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v28.1.2/packages/jest) --- updated-dependencies: - dependency-name: jest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 220 +++++++++++++++++++++++++-------------------------- 2 files changed, 107 insertions(+), 115 deletions(-) diff --git a/package.json b/package.json index b67b429b00e..50524735096 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "eslint-plugin-jsx-a11y": "~6.6.0", "eslint-plugin-promise": "~6.0.0", "eslint-plugin-react": "~7.30.1", - "jest": "^28.1.1", + "jest": "^28.1.2", "jest-environment-jsdom": "^28.1.2", "postcss-scss": "^4.0.4", "prettier": "^2.7.1", diff --git a/yarn.lock b/yarn.lock index e02ce60437d..c0de7a650cb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1245,15 +1245,15 @@ jest-util "^28.1.1" slash "^3.0.0" -"@jest/core@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.1.1.tgz#086830bec6267accf9af5ca76f794858e9f9f092" - integrity sha512-3pYsBoZZ42tXMdlcFeCc/0j9kOlK7MYuXs2B1QbvDgMoW1K9NJ4G/VYvIbMb26iqlkTfPHo7SC2JgjDOk/mxXw== +"@jest/core@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.1.2.tgz#eac519b9acbd154313854b8823a47b5c645f785a" + integrity sha512-Xo4E+Sb/nZODMGOPt2G3cMmCBqL4/W2Ijwr7/mrXlq4jdJwcFQ/9KrrJZT2adQRk2otVBXXOz1GRQ4Z5iOgvRQ== dependencies: "@jest/console" "^28.1.1" - "@jest/reporters" "^28.1.1" + "@jest/reporters" "^28.1.2" "@jest/test-result" "^28.1.1" - "@jest/transform" "^28.1.1" + "@jest/transform" "^28.1.2" "@jest/types" "^28.1.1" "@types/node" "*" ansi-escapes "^4.2.1" @@ -1262,15 +1262,15 @@ exit "^0.1.2" graceful-fs "^4.2.9" jest-changed-files "^28.0.2" - jest-config "^28.1.1" + jest-config "^28.1.2" jest-haste-map "^28.1.1" jest-message-util "^28.1.1" jest-regex-util "^28.0.2" jest-resolve "^28.1.1" - jest-resolve-dependencies "^28.1.1" - jest-runner "^28.1.1" - jest-runtime "^28.1.1" - jest-snapshot "^28.1.1" + jest-resolve-dependencies "^28.1.2" + jest-runner "^28.1.2" + jest-runtime "^28.1.2" + jest-snapshot "^28.1.2" jest-util "^28.1.1" jest-validate "^28.1.1" jest-watcher "^28.1.1" @@ -1280,7 +1280,7 @@ slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^28.1.1", "@jest/environment@^28.1.2": +"@jest/environment@^28.1.2": version "28.1.2" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.2.tgz#94a052c0c5f9f8c8e6d13ea6da78dbc5d7d9b85b" integrity sha512-I0CR1RUMmOzd0tRpz10oUfaChBWs+/Hrvn5xYhMEF/ZqrDaaeHwS8yDBqEWCrEnkH2g+WE/6g90oBv3nKpcm8Q== @@ -1297,15 +1297,15 @@ dependencies: jest-get-type "^28.0.2" -"@jest/expect@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.1.1.tgz#ea4fcc8504b45835029221c0dc357c622a761326" - integrity sha512-/+tQprrFoT6lfkMj4mW/mUIfAmmk/+iQPmg7mLDIFOf2lyf7EBHaS+x3RbeR0VZVMe55IvX7QRoT/2aK3AuUXg== +"@jest/expect@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.1.2.tgz#0b25acedff46e1e1e5606285306c8a399c12534f" + integrity sha512-HBzyZBeFBiOelNbBKN0pilWbbrGvwDUwAqMC46NVJmWm8AVkuE58NbG1s7DR4cxFt4U5cVLxofAoHxgvC5MyOw== dependencies: expect "^28.1.1" - jest-snapshot "^28.1.1" + jest-snapshot "^28.1.2" -"@jest/fake-timers@^28.1.1", "@jest/fake-timers@^28.1.2": +"@jest/fake-timers@^28.1.2": version "28.1.2" resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.2.tgz#d49e8ee4e02ba85a6e844a52a5e7c59c23e3b76f" integrity sha512-xSYEI7Y0D5FbZN2LsCUj/EKRR1zfQYmGuAUVh6xTqhx7V5JhjgMcK5Pa0iR6WIk0GXiHDe0Ke4A+yERKE9saqg== @@ -1317,26 +1317,26 @@ jest-mock "^28.1.1" jest-util "^28.1.1" -"@jest/globals@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.1.1.tgz#c0a7977f85e26279cc090d9adcdf82b8a34c4061" - integrity sha512-dEgl/6v7ToB4vXItdvcltJBgny0xBE6xy6IYQrPJAJggdEinGxCDMivNv7sFzPcTITGquXD6UJwYxfJ/5ZwDSg== +"@jest/globals@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.1.2.tgz#92fab296e337c7309c25e4202fb724f62249d83f" + integrity sha512-cz0lkJVDOtDaYhvT3Fv2U1B6FtBnV+OpEyJCzTHM1fdoTsU4QNLAt/H4RkiwEUU+dL4g/MFsoTuHeT2pvbo4Hg== dependencies: - "@jest/environment" "^28.1.1" - "@jest/expect" "^28.1.1" + "@jest/environment" "^28.1.2" + "@jest/expect" "^28.1.2" "@jest/types" "^28.1.1" -"@jest/reporters@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.1.1.tgz#9389f4bb3cce4d9b586f6195f83c79cd2a1c8662" - integrity sha512-597Zj4D4d88sZrzM4atEGLuO7SdA/YrOv9SRXHXRNC+/FwPCWxZhBAEzhXoiJzfRwn8zes/EjS8Lo6DouGN5Gg== +"@jest/reporters@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.1.2.tgz#0327be4ce4d0d9ae49e7908656f89669d0c2a260" + integrity sha512-/whGLhiwAqeCTmQEouSigUZJPVl7sW8V26EiboImL+UyXznnr1a03/YZ2BX8OlFw0n+Zlwu+EZAITZtaeRTxyA== dependencies: "@bcoe/v8-coverage" "^0.2.3" "@jest/console" "^28.1.1" "@jest/test-result" "^28.1.1" - "@jest/transform" "^28.1.1" + "@jest/transform" "^28.1.2" "@jest/types" "^28.1.1" - "@jridgewell/trace-mapping" "^0.3.7" + "@jridgewell/trace-mapping" "^0.3.13" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" @@ -1355,7 +1355,7 @@ string-length "^4.0.1" strip-ansi "^6.0.0" terminal-link "^2.0.0" - v8-to-istanbul "^9.0.0" + v8-to-istanbul "^9.0.1" "@jest/schemas@^28.0.2": version "28.0.2" @@ -1364,12 +1364,12 @@ dependencies: "@sinclair/typebox" "^0.23.3" -"@jest/source-map@^28.0.2": - version "28.0.2" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-28.0.2.tgz#914546f4410b67b1d42c262a1da7e0406b52dc90" - integrity sha512-Y9dxC8ZpN3kImkk0LkK5XCEneYMAXlZ8m5bflmSL5vrwyeUpJfentacCUg6fOb8NOpOO7hz2+l37MV77T6BFPw== +"@jest/source-map@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-28.1.2.tgz#7fe832b172b497d6663cdff6c13b0a920e139e24" + integrity sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww== dependencies: - "@jridgewell/trace-mapping" "^0.3.7" + "@jridgewell/trace-mapping" "^0.3.13" callsites "^3.0.0" graceful-fs "^4.2.9" @@ -1393,7 +1393,7 @@ jest-haste-map "^28.1.1" slash "^3.0.0" -"@jest/transform@^28.1.1", "@jest/transform@^28.1.2": +"@jest/transform@^28.1.2": version "28.1.2" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.2.tgz#b367962c53fd53821269bde050ce373e111327c1" integrity sha512-3o+lKF6iweLeJFHBlMJysdaPbpoMmtbHEFsjzSv37HIq/wWt5ijTeO2Yf7MO5yyczCopD507cNwNLeX8Y/CuIg== @@ -1479,7 +1479,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.13": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13": version "0.3.14" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== @@ -1487,14 +1487,6 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.7": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping@^0.3.9": version "0.3.13" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" @@ -2469,7 +2461,7 @@ axobject-query@^2.2.0: resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== -babel-jest@^28.1.1, babel-jest@^28.1.2: +babel-jest@^28.1.2: version "28.1.2" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.2.tgz#2b37fb81439f14d34d8b2cc4a4bd7efabf9acbfe" integrity sha512-pfmoo6sh4L/+5/G2OOfQrGJgvH7fTa1oChnuYH2G/6gA+JwDvO8PELwvwnofKBMNrQsam0Wy/Rw+QSrBNewq2Q== @@ -6389,13 +6381,13 @@ jest-changed-files@^28.0.2: execa "^5.0.0" throat "^6.0.1" -jest-circus@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.1.1.tgz#3d27da6a974d85a466dc0cdc6ddeb58daaa57bb4" - integrity sha512-75+BBVTsL4+p2w198DQpCeyh1RdaS2lhEG87HkaFX/UG0gJExVq2skG2pT7XZEGBubNj2CytcWSPan4QEPNosw== +jest-circus@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.1.2.tgz#0d5a5623eccb244efe87d1edc365696e4fcf80ce" + integrity sha512-E2vdPIJG5/69EMpslFhaA46WkcrN74LI5V/cSJ59L7uS8UNoXbzTxmwhpi9XrIL3zqvMt5T0pl5k2l2u2GwBNQ== dependencies: - "@jest/environment" "^28.1.1" - "@jest/expect" "^28.1.1" + "@jest/environment" "^28.1.2" + "@jest/expect" "^28.1.2" "@jest/test-result" "^28.1.1" "@jest/types" "^28.1.1" "@types/node" "*" @@ -6406,52 +6398,52 @@ jest-circus@^28.1.1: jest-each "^28.1.1" jest-matcher-utils "^28.1.1" jest-message-util "^28.1.1" - jest-runtime "^28.1.1" - jest-snapshot "^28.1.1" + jest-runtime "^28.1.2" + jest-snapshot "^28.1.2" jest-util "^28.1.1" pretty-format "^28.1.1" slash "^3.0.0" stack-utils "^2.0.3" throat "^6.0.1" -jest-cli@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.1.1.tgz#23ddfde8940e1818585ae4a568877b33b0e51cfe" - integrity sha512-+sUfVbJqb1OjBZ0OdBbI6OWfYM1i7bSfzYy6gze1F1w3OKWq8ZTEKkZ8a7ZQPq6G/G1qMh/uKqpdWhgl11NFQQ== +jest-cli@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.1.2.tgz#b89012e5bad14135e71b1628b85475d3773a1bbc" + integrity sha512-l6eoi5Do/IJUXAFL9qRmDiFpBeEJAnjJb1dcd9i/VWfVWbp3mJhuH50dNtX67Ali4Ecvt4eBkWb4hXhPHkAZTw== dependencies: - "@jest/core" "^28.1.1" + "@jest/core" "^28.1.2" "@jest/test-result" "^28.1.1" "@jest/types" "^28.1.1" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^28.1.1" + jest-config "^28.1.2" jest-util "^28.1.1" jest-validate "^28.1.1" prompts "^2.0.1" yargs "^17.3.1" -jest-config@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.1.1.tgz#e90b97b984f14a6c24a221859e81b258990fce2f" - integrity sha512-tASynMhS+jVV85zKvjfbJ8nUyJS/jUSYZ5KQxLUN2ZCvcQc/OmhQl2j6VEL3ezQkNofxn5pQ3SPYWPHb0unTZA== +jest-config@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.1.2.tgz#ba00ad30caf62286c86e7c1099e915218a0ac8c6" + integrity sha512-g6EfeRqddVbjPVBVY4JWpUY4IvQoFRIZcv4V36QkqzE0IGhEC/VkugFeBMAeUE7PRgC8KJF0yvJNDeQRbamEVA== dependencies: "@babel/core" "^7.11.6" "@jest/test-sequencer" "^28.1.1" "@jest/types" "^28.1.1" - babel-jest "^28.1.1" + babel-jest "^28.1.2" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^28.1.1" - jest-environment-node "^28.1.1" + jest-circus "^28.1.2" + jest-environment-node "^28.1.2" jest-get-type "^28.0.2" jest-regex-util "^28.0.2" jest-resolve "^28.1.1" - jest-runner "^28.1.1" + jest-runner "^28.1.2" jest-util "^28.1.1" jest-validate "^28.1.1" micromatch "^4.0.4" @@ -6512,13 +6504,13 @@ jest-environment-jsdom@^28.1.2: jest-util "^28.1.1" jsdom "^19.0.0" -jest-environment-node@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.1.1.tgz#1c86c59003a7d319fa06ea3b1bbda6c193715c67" - integrity sha512-2aV/eeY/WNgUUJrrkDJ3cFEigjC5fqT1+fCclrY6paqJ5zVPoM//sHmfgUUp7WLYxIdbPwMiVIzejpN56MxnNA== +jest-environment-node@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.1.2.tgz#3e2eb47f6d173b0648d5f7c717cb1c26651d5c8a" + integrity sha512-oYsZz9Qw27XKmOgTtnl0jW7VplJkN2oeof+SwAwKFQacq3CLlG9u4kTGuuLWfvu3J7bVutWlrbEQMOCL/jughw== dependencies: - "@jest/environment" "^28.1.1" - "@jest/fake-timers" "^28.1.1" + "@jest/environment" "^28.1.2" + "@jest/fake-timers" "^28.1.2" "@jest/types" "^28.1.1" "@types/node" "*" jest-mock "^28.1.1" @@ -6604,13 +6596,13 @@ jest-regex-util@^28.0.2: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== -jest-resolve-dependencies@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.1.tgz#3dffaaa56f4b41bc6b61053899d1756401763a27" - integrity sha512-p8Y150xYJth4EXhOuB8FzmS9r8IGLEioiaetgdNGb9VHka4fl0zqWlVe4v7mSkYOuEUg2uB61iE+zySDgrOmgQ== +jest-resolve-dependencies@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.2.tgz#ca528858e0c6642d5a1dda8fc7cda10230c275bc" + integrity sha512-OXw4vbOZuyRTBi3tapWBqdyodU+T33ww5cPZORuTWkg+Y8lmsxQlVu3MWtJh6NMlKRTHQetF96yGPv01Ye7Mbg== dependencies: jest-regex-util "^28.0.2" - jest-snapshot "^28.1.1" + jest-snapshot "^28.1.2" jest-resolve@^28.1.1: version "28.1.1" @@ -6627,44 +6619,44 @@ jest-resolve@^28.1.1: resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.1.1.tgz#9ecdb3f27a00059986797aa6b012ba8306aa436c" - integrity sha512-W5oFUiDBgTsCloTAj6q95wEvYDB0pxIhY6bc5F26OucnwBN+K58xGTGbliSMI4ChQal5eANDF+xvELaYkJxTmA== +jest-runner@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.1.2.tgz#f293409592a62234285a71237e38499a3554e350" + integrity sha512-6/k3DlAsAEr5VcptCMdhtRhOoYClZQmxnVMZvZ/quvPGRpN7OBQYPIC32tWSgOnbgqLXNs5RAniC+nkdFZpD4A== dependencies: "@jest/console" "^28.1.1" - "@jest/environment" "^28.1.1" + "@jest/environment" "^28.1.2" "@jest/test-result" "^28.1.1" - "@jest/transform" "^28.1.1" + "@jest/transform" "^28.1.2" "@jest/types" "^28.1.1" "@types/node" "*" chalk "^4.0.0" emittery "^0.10.2" graceful-fs "^4.2.9" jest-docblock "^28.1.1" - jest-environment-node "^28.1.1" + jest-environment-node "^28.1.2" jest-haste-map "^28.1.1" jest-leak-detector "^28.1.1" jest-message-util "^28.1.1" jest-resolve "^28.1.1" - jest-runtime "^28.1.1" + jest-runtime "^28.1.2" jest-util "^28.1.1" jest-watcher "^28.1.1" jest-worker "^28.1.1" source-map-support "0.5.13" throat "^6.0.1" -jest-runtime@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.1.1.tgz#569e1dc3c36c6c4c0b29516c1c49b6ad580abdaf" - integrity sha512-J89qEJWW0leOsqyi0D9zHpFEYHwwafFdS9xgvhFHtIdRghbadodI0eA+DrthK/1PebBv3Px8mFSMGKrtaVnleg== +jest-runtime@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.1.2.tgz#d68f34f814a848555a345ceda23289f14d59a688" + integrity sha512-i4w93OsWzLOeMXSi9epmakb2+3z0AchZtUQVF1hesBmcQQy4vtaql5YdVe9KexdJaVRyPDw8DoBR0j3lYsZVYw== dependencies: - "@jest/environment" "^28.1.1" - "@jest/fake-timers" "^28.1.1" - "@jest/globals" "^28.1.1" - "@jest/source-map" "^28.0.2" + "@jest/environment" "^28.1.2" + "@jest/fake-timers" "^28.1.2" + "@jest/globals" "^28.1.2" + "@jest/source-map" "^28.1.2" "@jest/test-result" "^28.1.1" - "@jest/transform" "^28.1.1" + "@jest/transform" "^28.1.2" "@jest/types" "^28.1.1" chalk "^4.0.0" cjs-module-lexer "^1.0.0" @@ -6677,15 +6669,15 @@ jest-runtime@^28.1.1: jest-mock "^28.1.1" jest-regex-util "^28.0.2" jest-resolve "^28.1.1" - jest-snapshot "^28.1.1" + jest-snapshot "^28.1.2" jest-util "^28.1.1" slash "^3.0.0" strip-bom "^4.0.0" -jest-snapshot@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.1.1.tgz#ab825c16c8d8b5e883bd57eee6ca8748c42ab848" - integrity sha512-1KjqHJ98adRcbIdMizjF5DipwZFbvxym/kFO4g4fVZCZRxH/dqV8TiBFCa6rqic3p0karsy8RWS1y4E07b7P0A== +jest-snapshot@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.1.2.tgz#93d31b87b11b384f5946fe0767541496135f8d52" + integrity sha512-wzrieFttZYfLvrCVRJxX+jwML2YTArOUqFpCoSVy1QUapx+LlV9uLbV/mMEhYj4t7aMeE9aSQFHSvV/oNoDAMA== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" @@ -6693,7 +6685,7 @@ jest-snapshot@^28.1.1: "@babel/traverse" "^7.7.2" "@babel/types" "^7.3.3" "@jest/expect-utils" "^28.1.1" - "@jest/transform" "^28.1.1" + "@jest/transform" "^28.1.2" "@jest/types" "^28.1.1" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" @@ -6767,15 +6759,15 @@ jest-worker@^28.1.1: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.1.tgz#3c39a3a09791e16e9ef283597d24ab19a0df701e" - integrity sha512-qw9YHBnjt6TCbIDMPMpJZqf9E12rh6869iZaN08/vpOGgHJSAaLLUn6H8W3IAEuy34Ls3rct064mZLETkxJ2XA== +jest@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.2.tgz#451ff24081ce31ca00b07b60c61add13aa96f8eb" + integrity sha512-Tuf05DwLeCh2cfWCQbcz9UxldoDyiR1E9Igaei5khjonKncYdc6LDfynKCEWozK0oLE3GD+xKAo2u8x/0s6GOg== dependencies: - "@jest/core" "^28.1.1" + "@jest/core" "^28.1.2" "@jest/types" "^28.1.1" import-local "^3.0.2" - jest-cli "^28.1.1" + jest-cli "^28.1.2" js-base64@^2.1.9: version "2.6.4" @@ -11228,12 +11220,12 @@ v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1, v8-compile-cache@^2.3.0: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -v8-to-istanbul@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.0.tgz#be0dae58719fc53cb97e5c7ac1d7e6d4f5b19511" - integrity sha512-HcvgY/xaRm7isYmyx+lFKA4uQmfUbN0J4M0nNItvzTvH/iQ9kW5j/t4YSR+Ge323/lrgDAWJoF46tzGQHwBHFw== +v8-to-istanbul@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" + integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== dependencies: - "@jridgewell/trace-mapping" "^0.3.7" + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" From fa01b993cfbb7d2137386287313178dcdc452b36 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 09:42:11 +0900 Subject: [PATCH 089/646] Bump http-link-header from 1.0.4 to 1.0.5 (#18767) Bumps [http-link-header](https://github.com/jhermsmeier/node-http-link-header) from 1.0.4 to 1.0.5. - [Release notes](https://github.com/jhermsmeier/node-http-link-header/releases) - [Changelog](https://github.com/jhermsmeier/node-http-link-header/blob/master/CHANGELOG.md) - [Commits](https://github.com/jhermsmeier/node-http-link-header/compare/v1.0.4...v1.0.5) --- updated-dependencies: - dependency-name: http-link-header dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 50524735096..e087bdab8b6 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "fuzzysort": "^1.9.0", "glob": "^8.0.3", "history": "^4.10.1", - "http-link-header": "^1.0.4", + "http-link-header": "^1.0.5", "immutable": "^4.1.0", "imports-loader": "^1.2.0", "intersection-observer": "^0.12.2", diff --git a/yarn.lock b/yarn.lock index c0de7a650cb..82eea048bfc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5627,10 +5627,10 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" -http-link-header@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/http-link-header/-/http-link-header-1.0.4.tgz#f4efc76c6151ed0ba0d1a2d679798a18854a4a99" - integrity sha512-Cnv3Q+FF+35avekdnH/ML8dls++tdnSgrvUIWw0YEszrWeLSuw5Iq1vyCVTb5v0rEUgFTy0x4shxXyrO0MDUzw== +http-link-header@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/http-link-header/-/http-link-header-1.0.5.tgz#8e6d9ed1d393e8d5e01aa5c48bd97aa38d7e261c" + integrity sha512-msKrMbv/xHzhdOD4sstbEr+NbGqpv8ZtZliiCeByGENJo1jK1GZ/81zHF9HpWtEH5ihovPpdqHXniwZapJCKEA== "http-parser-js@>=0.4.0 <0.4.11": version "0.4.10" From 0e785b130982a17c54d43e1de9b609c533c09c97 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 09:44:02 +0900 Subject: [PATCH 090/646] Bump gitlab-omniauth-openid-connect from 0.9.1 to 0.10.0 (#18574) Bumps [gitlab-omniauth-openid-connect](https://gitlab.com/gitlab-org/gitlab-omniauth-openid-connect) from 0.9.1 to 0.10.0. - [Release notes](https://gitlab.com/gitlab-org/gitlab-omniauth-openid-connect/tags) - [Changelog](https://gitlab.com/gitlab-org/gitlab-omniauth-openid-connect/blob/master/CHANGELOG.md) - [Commits](https://gitlab.com/gitlab-org/gitlab-omniauth-openid-connect/compare/v0.9.1...v0.10.0) --- updated-dependencies: - dependency-name: gitlab-omniauth-openid-connect dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index b4d38160c56..7d3cff7ddbb 100644 --- a/Gemfile +++ b/Gemfile @@ -40,7 +40,7 @@ end gem 'net-ldap', '~> 0.17' gem 'omniauth-cas', '~> 2.0' gem 'omniauth-saml', '~> 1.10' -gem 'gitlab-omniauth-openid-connect', '~>0.9.1', require: 'omniauth_openid_connect' +gem 'gitlab-omniauth-openid-connect', '~>0.10.0', require: 'omniauth_openid_connect' gem 'omniauth', '~> 1.9' gem 'omniauth-rails_csrf_protection', '~> 0.1' diff --git a/Gemfile.lock b/Gemfile.lock index 711abdeb397..d35ef988ee2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -270,9 +270,9 @@ GEM fuubar (2.5.1) rspec-core (~> 3.0) ruby-progressbar (~> 1.4) - gitlab-omniauth-openid-connect (0.9.1) + gitlab-omniauth-openid-connect (0.10.0) addressable (~> 2.7) - omniauth (~> 1.9) + omniauth (>= 1.9, < 3) openid_connect (~> 1.2) globalid (1.0.0) activesupport (>= 5.0) @@ -683,7 +683,7 @@ GEM validate_email (0.1.6) activemodel (>= 3.0) mail (>= 2.2.5) - validate_url (1.0.13) + validate_url (1.0.15) activemodel (>= 3.0.0) public_suffix warden (1.2.9) @@ -765,7 +765,7 @@ DEPENDENCIES fog-core (<= 2.1.0) fog-openstack (~> 0.3) fuubar (~> 2.5) - gitlab-omniauth-openid-connect (~> 0.9.1) + gitlab-omniauth-openid-connect (~> 0.10.0) hamlit-rails (~> 0.2) hiredis (~> 0.6) htmlentities (~> 4.3) From 65537ff4d9ecbd36784596f57ce0753cf412d66e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 09:47:18 +0900 Subject: [PATCH 091/646] Bump marky from 1.2.4 to 1.2.5 (#18771) Bumps [marky](https://github.com/nolanlawson/marky) from 1.2.4 to 1.2.5. - [Release notes](https://github.com/nolanlawson/marky/releases) - [Commits](https://github.com/nolanlawson/marky/compare/v1.2.4...v1.2.5) --- updated-dependencies: - dependency-name: marky dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e087bdab8b6..5c94e8fefe2 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "jsdom": "^20.0.0", "lodash": "^4.17.21", "mark-loader": "^0.1.6", - "marky": "^1.2.4", + "marky": "^1.2.5", "mini-css-extract-plugin": "^1.6.2", "mkdirp": "^1.0.4", "npmlog": "^6.0.2", diff --git a/yarn.lock b/yarn.lock index 82eea048bfc..c93c30ede10 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7220,10 +7220,10 @@ mark-loader@^0.1.6: resolved "https://registry.yarnpkg.com/mark-loader/-/mark-loader-0.1.6.tgz#0abb477dca7421d70e20128ff6489f5cae8676d5" integrity sha1-CrtHfcp0IdcOIBKP9kifXK6GdtU= -marky@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/marky/-/marky-1.2.4.tgz#d02bb4c08be2366687c778ecd2a328971ce23d7f" - integrity sha512-zd2/GiSn6U3/jeFVZ0J9CA1LzQ8RfIVvXkb/U0swFHF/zT+dVohTAWjmo2DcIuofmIIIROlwTbd+shSeXmxr0w== +marky@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/marky/-/marky-1.2.5.tgz#55796b688cbd72390d2d399eaaf1832c9413e3c0" + integrity sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q== mathml-tag-names@^2.1.3: version "2.1.3" From 3eeb10d9febf1844cc9b31f3c4e0255958ca0c37 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 09:54:41 +0900 Subject: [PATCH 092/646] Bump rack from 2.2.3.1 to 2.2.4 (#18768) Bumps [rack](https://github.com/rack/rack) from 2.2.3.1 to 2.2.4. - [Release notes](https://github.com/rack/rack/releases) - [Changelog](https://github.com/rack/rack/blob/main/CHANGELOG.md) - [Commits](https://github.com/rack/rack/compare/2.2.3.1...2.2.4) --- updated-dependencies: - dependency-name: rack dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 7d3cff7ddbb..ce5e231d06a 100644 --- a/Gemfile +++ b/Gemfile @@ -10,7 +10,7 @@ gem 'puma', '~> 5.6' gem 'rails', '~> 6.1.6' gem 'sprockets', '~> 3.7.2' gem 'thor', '~> 1.2' -gem 'rack', '~> 2.2.3' +gem 'rack', '~> 2.2.4' gem 'hamlit-rails', '~> 0.2' gem 'pg', '~> 1.4' diff --git a/Gemfile.lock b/Gemfile.lock index d35ef988ee2..9b610400498 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -475,7 +475,7 @@ GEM activesupport (>= 3.0.0) raabro (1.4.0) racc (1.6.0) - rack (2.2.3.1) + rack (2.2.4) rack-attack (6.6.1) rack (>= 1.0, < 3) rack-cors (1.1.1) @@ -807,7 +807,7 @@ DEPENDENCIES pry-rails (~> 0.3) puma (~> 5.6) pundit (~> 2.2) - rack (~> 2.2.3) + rack (~> 2.2.4) rack-attack (~> 6.6) rack-cors (~> 1.1) rails (~> 6.1.6) From c9d6571da82e48ecfbbb40b63815e6dfc42bb1b3 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 6 Jul 2022 22:58:31 +0200 Subject: [PATCH 093/646] New Crowdin updates (#18716) * New translations en.yml (Portuguese, Brazilian) * New translations en.yml (Norwegian Nynorsk) * New translations en.yml (Telugu) * New translations en.yml (Malay) * New translations en.yml (Latvian) * New translations en.yml (Estonian) * New translations en.yml (Kazakh) * New translations en.yml (Spanish, Argentina) * New translations en.yml (Croatian) * New translations en.yml (Indonesian) * New translations en.yml (Persian) * New translations en.yml (Tamil) * New translations en.json (Spanish, Mexico) * New translations en.yml (Spanish, Mexico) * New translations en.yml (Bengali) * New translations en.yml (Malayalam) * New translations en.yml (Sinhala) * New translations en.yml (Breton) * New translations en.yml (Tatar) * New translations en.yml (Chinese Traditional, Hong Kong) * New translations en.yml (Welsh) * New translations en.yml (Standard Moroccan Tamazight) * New translations en.yml (Scottish Gaelic) * New translations en.yml (Asturian) * New translations en.yml (Occitan) * New translations en.yml (Serbian (Latin)) * New translations en.yml (Kurmanji (Kurdish)) * New translations en.yml (Sorani (Kurdish)) * New translations en.yml (Corsican) * New translations en.yml (Sardinian) * New translations en.yml (Kabyle) * New translations en.yml (Ido) * New translations simple_form.en.yml (Spanish, Mexico) * New translations activerecord.en.yml (Japanese) * New translations activerecord.en.yml (Finnish) * New translations doorkeeper.en.yml (Danish) * New translations activerecord.en.yml (German) * New translations doorkeeper.en.yml (German) * New translations activerecord.en.yml (Greek) * New translations doorkeeper.en.yml (Greek) * New translations activerecord.en.yml (Frisian) * New translations doorkeeper.en.yml (Frisian) * New translations activerecord.en.yml (Basque) * New translations doorkeeper.en.yml (Basque) * New translations doorkeeper.en.yml (Finnish) * New translations doorkeeper.en.yml (Czech) * New translations activerecord.en.yml (Hebrew) * New translations doorkeeper.en.yml (Hebrew) * New translations activerecord.en.yml (Hungarian) * New translations doorkeeper.en.yml (Hungarian) * New translations activerecord.en.yml (Armenian) * New translations doorkeeper.en.yml (Armenian) * New translations activerecord.en.yml (Italian) * New translations doorkeeper.en.yml (Italian) * New translations activerecord.en.yml (Danish) * New translations activerecord.en.yml (Czech) * New translations activerecord.en.yml (French) * New translations activerecord.en.yml (Romanian) * New translations doorkeeper.en.yml (Romanian) * New translations doorkeeper.en.yml (Catalan) * New translations doorkeeper.en.yml (French) * New translations activerecord.en.yml (Spanish) * New translations doorkeeper.en.yml (Spanish) * New translations activerecord.en.yml (Afrikaans) * New translations doorkeeper.en.yml (Afrikaans) * New translations activerecord.en.yml (Arabic) * New translations doorkeeper.en.yml (Arabic) * New translations activerecord.en.yml (Bulgarian) * New translations doorkeeper.en.yml (Bulgarian) * New translations activerecord.en.yml (Catalan) * New translations doorkeeper.en.yml (Japanese) * New translations doorkeeper.en.yml (Chinese Traditional) * New translations activerecord.en.yml (Swedish) * New translations doorkeeper.en.yml (Swedish) * New translations activerecord.en.yml (Turkish) * New translations doorkeeper.en.yml (Turkish) * New translations activerecord.en.yml (Ukrainian) * New translations doorkeeper.en.yml (Ukrainian) * New translations activerecord.en.yml (Chinese Simplified) * New translations doorkeeper.en.yml (Chinese Simplified) * New translations activerecord.en.yml (Chinese Traditional) * New translations activerecord.en.yml (Serbian (Cyrillic)) * New translations activerecord.en.yml (Vietnamese) * New translations doorkeeper.en.yml (Vietnamese) * New translations activerecord.en.yml (Galician) * New translations doorkeeper.en.yml (Galician) * New translations activerecord.en.yml (Icelandic) * New translations doorkeeper.en.yml (Icelandic) * New translations doorkeeper.en.yml (Portuguese, Brazilian) * New translations activerecord.en.yml (Indonesian) * New translations doorkeeper.en.yml (Indonesian) * New translations doorkeeper.en.yml (Serbian (Cyrillic)) * New translations doorkeeper.en.yml (Albanian) * New translations activerecord.en.yml (Georgian) * New translations doorkeeper.en.yml (Georgian) * New translations activerecord.en.yml (Korean) * New translations doorkeeper.en.yml (Korean) * New translations doorkeeper.en.yml (Dutch) * New translations activerecord.en.yml (Norwegian) * New translations doorkeeper.en.yml (Norwegian) * New translations activerecord.en.yml (Albanian) * New translations activerecord.en.yml (Polish) * New translations doorkeeper.en.yml (Polish) * New translations activerecord.en.yml (Portuguese) * New translations doorkeeper.en.yml (Portuguese) * New translations activerecord.en.yml (Russian) * New translations doorkeeper.en.yml (Russian) * New translations activerecord.en.yml (Slovak) * New translations doorkeeper.en.yml (Slovak) * New translations activerecord.en.yml (Slovenian) * New translations doorkeeper.en.yml (Slovenian) * New translations activerecord.en.yml (Persian) * New translations doorkeeper.en.yml (Persian) * New translations activerecord.en.yml (Kazakh) * New translations activerecord.en.yml (Tamil) * New translations doorkeeper.en.yml (Hindi) * New translations activerecord.en.yml (Hindi) * New translations doorkeeper.en.yml (Latvian) * New translations activerecord.en.yml (Latvian) * New translations doorkeeper.en.yml (Estonian) * New translations activerecord.en.yml (Estonian) * New translations doorkeeper.en.yml (Kazakh) * New translations doorkeeper.en.yml (Norwegian Nynorsk) * New translations activerecord.en.yml (Bengali) * New translations activerecord.en.yml (Norwegian Nynorsk) * New translations doorkeeper.en.yml (Tamil) * New translations activerecord.en.yml (Spanish, Argentina) * New translations doorkeeper.en.yml (Spanish, Argentina) * New translations doorkeeper.en.yml (Spanish, Mexico) * New translations activerecord.en.yml (Spanish, Mexico) * New translations activerecord.en.yml (Marathi) * New translations doorkeeper.en.yml (Marathi) * New translations activerecord.en.yml (Thai) * New translations doorkeeper.en.yml (Thai) * New translations activerecord.en.yml (Croatian) * New translations doorkeeper.en.yml (Croatian) * New translations doorkeeper.en.yml (Malayalam) * New translations activerecord.en.yml (Scottish Gaelic) * New translations doorkeeper.en.yml (Breton) * New translations activerecord.en.yml (Breton) * New translations activerecord.en.yml (Esperanto) * New translations activerecord.en.yml (Malayalam) * New translations doorkeeper.en.yml (Tatar) * New translations activerecord.en.yml (Tatar) * New translations doorkeeper.en.yml (Chinese Traditional, Hong Kong) * New translations activerecord.en.yml (Chinese Traditional, Hong Kong) * New translations doorkeeper.en.yml (Welsh) * New translations activerecord.en.yml (Welsh) * New translations doorkeeper.en.yml (Scottish Gaelic) * New translations activerecord.en.yml (Asturian) * New translations activerecord.en.yml (Standard Moroccan Tamazight) * New translations doorkeeper.en.yml (Ido) * New translations activerecord.en.yml (Ido) * New translations doorkeeper.en.yml (Kabyle) * New translations activerecord.en.yml (Kabyle) * New translations doorkeeper.en.yml (Sardinian) * New translations activerecord.en.yml (Occitan) * New translations activerecord.en.yml (Sardinian) * New translations doorkeeper.en.yml (Corsican) * New translations activerecord.en.yml (Corsican) * New translations doorkeeper.en.yml (Sorani (Kurdish)) * New translations activerecord.en.yml (Sorani (Kurdish)) * New translations doorkeeper.en.yml (Kurmanji (Kurdish)) * New translations activerecord.en.yml (Kurmanji (Kurdish)) * New translations doorkeeper.en.yml (Serbian (Latin)) * New translations activerecord.en.yml (Serbian (Latin)) * New translations doorkeeper.en.yml (Occitan) * New translations doorkeeper.en.yml (Standard Moroccan Tamazight) * New translations en.yml (Korean) * New translations simple_form.en.yml (Korean) * New translations en.yml (Chinese Traditional) * New translations en.yml (Spanish, Argentina) * New translations simple_form.en.yml (Chinese Traditional) * New translations simple_form.en.yml (Spanish, Argentina) * New translations activerecord.en.yml (Korean) * New translations activerecord.en.yml (Chinese Traditional) * New translations activerecord.en.yml (Spanish, Argentina) * New translations en.yml (Galician) * New translations en.yml (Chinese Traditional) * New translations en.yml (Galician) * New translations simple_form.en.yml (Galician) * New translations en.yml (Chinese Traditional) * New translations activerecord.en.yml (Galician) * New translations en.yml (Catalan) * New translations en.yml (Slovenian) * New translations en.yml (Turkish) * New translations en.yml (Catalan) * New translations en.yml (Czech) * New translations en.yml (Greek) * New translations simple_form.en.yml (Slovenian) * New translations activerecord.en.yml (Slovenian) * New translations en.yml (Turkish) * New translations en.yml (Russian) * New translations simple_form.en.yml (Russian) * New translations simple_form.en.yml (Turkish) * New translations activerecord.en.yml (Russian) * New translations activerecord.en.yml (Turkish) * New translations en.yml (Hungarian) * New translations en.yml (Polish) * New translations en.yml (Icelandic) * New translations simple_form.en.yml (Icelandic) * New translations en.yml (Polish) * New translations activerecord.en.yml (Icelandic) * New translations en.json (Esperanto) * New translations en.yml (Danish) * New translations en.yml (Italian) * New translations devise.en.yml (Esperanto) * New translations en.json (Esperanto) * New translations simple_form.en.yml (Esperanto) * New translations en.yml (Danish) * New translations en.yml (Italian) * New translations simple_form.en.yml (Italian) * New translations activerecord.en.yml (Italian) * New translations en.yml (Danish) * New translations simple_form.en.yml (Czech) * New translations en.yml (Danish) * New translations en.yml (Vietnamese) * New translations simple_form.en.yml (Vietnamese) * New translations activerecord.en.yml (Vietnamese) * New translations en.yml (Latvian) * New translations simple_form.en.yml (Latvian) * New translations activerecord.en.yml (Latvian) * New translations en.yml (Icelandic) * New translations en.yml (Spanish) * New translations en.yml (Icelandic) * New translations en.yml (Czech) * New translations simple_form.en.yml (Spanish) * New translations activerecord.en.yml (Spanish) * New translations en.yml (Czech) * New translations en.yml (Czech) * New translations en.yml (Czech) * New translations en.yml (Kurmanji (Kurdish)) * New translations simple_form.en.yml (Kurmanji (Kurdish)) * New translations en.yml (Esperanto) * New translations en.json (Esperanto) * New translations simple_form.en.yml (Esperanto) * New translations en.yml (Czech) * New translations simple_form.en.yml (Czech) * New translations en.yml (Czech) * New translations en.yml (Czech) * New translations simple_form.en.yml (Czech) * New translations en.yml (Czech) * New translations en.json (Esperanto) * New translations simple_form.en.yml (Czech) * New translations en.yml (Asturian) * New translations simple_form.en.yml (Asturian) * New translations en.yml (Czech) * Run `yarn manage:translations` * Run `bundle exec i18n-tasks normalize` Co-authored-by: Yamagishi Kazutoshi --- app/javascript/mastodon/locales/af.json | 9 + app/javascript/mastodon/locales/ar.json | 9 + app/javascript/mastodon/locales/ast.json | 21 +- app/javascript/mastodon/locales/bg.json | 9 + app/javascript/mastodon/locales/bn.json | 9 + app/javascript/mastodon/locales/br.json | 9 + app/javascript/mastodon/locales/ca.json | 9 + app/javascript/mastodon/locales/ckb.json | 9 + app/javascript/mastodon/locales/co.json | 9 + app/javascript/mastodon/locales/cs.json | 9 + app/javascript/mastodon/locales/cy.json | 9 + app/javascript/mastodon/locales/da.json | 9 + app/javascript/mastodon/locales/de.json | 9 + .../mastodon/locales/defaultMessages.json | 8 + app/javascript/mastodon/locales/el.json | 9 + app/javascript/mastodon/locales/en-GB.json | 9 + app/javascript/mastodon/locales/en.json | 2 + app/javascript/mastodon/locales/eo.json | 111 +- app/javascript/mastodon/locales/es-AR.json | 9 + app/javascript/mastodon/locales/es-MX.json | 9 + app/javascript/mastodon/locales/es.json | 9 + app/javascript/mastodon/locales/et.json | 9 + app/javascript/mastodon/locales/eu.json | 9 + app/javascript/mastodon/locales/fa.json | 9 + app/javascript/mastodon/locales/fi.json | 9 + app/javascript/mastodon/locales/fr.json | 9 + app/javascript/mastodon/locales/fy.json | 9 + app/javascript/mastodon/locales/ga.json | 9 + app/javascript/mastodon/locales/gd.json | 9 + app/javascript/mastodon/locales/gl.json | 9 + app/javascript/mastodon/locales/he.json | 13 +- app/javascript/mastodon/locales/hi.json | 9 + app/javascript/mastodon/locales/hr.json | 9 + app/javascript/mastodon/locales/hu.json | 9 + app/javascript/mastodon/locales/hy.json | 9 + app/javascript/mastodon/locales/id.json | 9 + app/javascript/mastodon/locales/io.json | 9 + app/javascript/mastodon/locales/is.json | 9 + app/javascript/mastodon/locales/it.json | 9 + app/javascript/mastodon/locales/ja.json | 9 + app/javascript/mastodon/locales/ka.json | 9 + app/javascript/mastodon/locales/kab.json | 9 + app/javascript/mastodon/locales/kk.json | 9 + app/javascript/mastodon/locales/kn.json | 9 + app/javascript/mastodon/locales/ko.json | 9 + app/javascript/mastodon/locales/ku.json | 9 + app/javascript/mastodon/locales/kw.json | 9 + app/javascript/mastodon/locales/lt.json | 9 + app/javascript/mastodon/locales/lv.json | 9 + app/javascript/mastodon/locales/mk.json | 9 + app/javascript/mastodon/locales/ml.json | 9 + app/javascript/mastodon/locales/mr.json | 9 + app/javascript/mastodon/locales/ms.json | 9 + app/javascript/mastodon/locales/nl.json | 11 +- app/javascript/mastodon/locales/nn.json | 9 + app/javascript/mastodon/locales/no.json | 9 + app/javascript/mastodon/locales/oc.json | 9 + app/javascript/mastodon/locales/pa.json | 9 + app/javascript/mastodon/locales/pl.json | 9 + app/javascript/mastodon/locales/pt-BR.json | 9 + app/javascript/mastodon/locales/pt-PT.json | 9 + app/javascript/mastodon/locales/ro.json | 9 + app/javascript/mastodon/locales/ru.json | 11 +- app/javascript/mastodon/locales/sa.json | 9 + app/javascript/mastodon/locales/sc.json | 9 + app/javascript/mastodon/locales/si.json | 761 ++++----- app/javascript/mastodon/locales/sk.json | 11 +- app/javascript/mastodon/locales/sl.json | 9 + app/javascript/mastodon/locales/sq.json | 9 + app/javascript/mastodon/locales/sr-Latn.json | 9 + app/javascript/mastodon/locales/sr.json | 9 + app/javascript/mastodon/locales/sv.json | 9 + app/javascript/mastodon/locales/szl.json | 9 + app/javascript/mastodon/locales/ta.json | 9 + app/javascript/mastodon/locales/tai.json | 9 + app/javascript/mastodon/locales/te.json | 9 + app/javascript/mastodon/locales/th.json | 9 + app/javascript/mastodon/locales/tr.json | 9 + app/javascript/mastodon/locales/tt.json | 9 + app/javascript/mastodon/locales/ug.json | 9 + app/javascript/mastodon/locales/uk.json | 9 + app/javascript/mastodon/locales/ur.json | 9 + app/javascript/mastodon/locales/vi.json | 9 + app/javascript/mastodon/locales/zgh.json | 9 + app/javascript/mastodon/locales/zh-CN.json | 9 + app/javascript/mastodon/locales/zh-HK.json | 15 +- app/javascript/mastodon/locales/zh-TW.json | 9 + config/locales/activerecord.es-AR.yml | 9 + config/locales/activerecord.es-MX.yml | 8 + config/locales/activerecord.es.yml | 9 + config/locales/activerecord.gl.yml | 9 + config/locales/activerecord.is.yml | 9 + config/locales/activerecord.it.yml | 9 + config/locales/activerecord.ko.yml | 9 + config/locales/activerecord.lv.yml | 11 +- config/locales/activerecord.pt-BR.yml | 8 + config/locales/activerecord.ru.yml | 6 + config/locales/activerecord.sl.yml | 9 + config/locales/activerecord.tr.yml | 9 + config/locales/activerecord.vi.yml | 9 + config/locales/activerecord.zh-TW.yml | 9 + config/locales/ar.yml | 16 - config/locales/ast.yml | 15 +- config/locales/bg.yml | 3 - config/locales/bn.yml | 9 - config/locales/br.yml | 5 - config/locales/ca.yml | 93 +- config/locales/ckb.yml | 16 - config/locales/co.yml | 16 - config/locales/cs.yml | 70 +- config/locales/cy.yml | 15 - config/locales/da.yml | 85 +- config/locales/de.yml | 16 - config/locales/devise.si.yml | 83 +- config/locales/doorkeeper.eo.yml | 1 + config/locales/doorkeeper.si.yml | 135 +- config/locales/el.yml | 41 +- config/locales/eo.yml | 89 +- config/locales/es-AR.yml | 98 +- config/locales/es-MX.yml | 48 +- config/locales/es.yml | 98 +- config/locales/et.yml | 16 - config/locales/eu.yml | 16 - config/locales/fa.yml | 16 - config/locales/fi.yml | 16 - config/locales/fr.yml | 109 +- config/locales/ga.yml | 6 - config/locales/gd.yml | 16 - config/locales/gl.yml | 100 +- config/locales/he.yml | 16 - config/locales/hr.yml | 1 - config/locales/hu.yml | 52 +- config/locales/hy.yml | 15 - config/locales/id.yml | 16 - config/locales/io.yml | 25 +- config/locales/is.yml | 75 +- config/locales/it.yml | 98 +- config/locales/ja.yml | 20 +- config/locales/ka.yml | 16 - config/locales/kab.yml | 12 - config/locales/kk.yml | 16 - config/locales/ko.yml | 90 +- config/locales/ku.yml | 41 +- config/locales/lt.yml | 16 - config/locales/lv.yml | 105 +- config/locales/ml.yml | 5 - config/locales/ms.yml | 12 - config/locales/nl.yml | 164 +- config/locales/nn.yml | 15 - config/locales/no.yml | 15 - config/locales/oc.yml | 16 - config/locales/pl.yml | 103 +- config/locales/pt-BR.yml | 42 +- config/locales/pt-PT.yml | 28 +- config/locales/ro.yml | 10 - config/locales/ru.yml | 87 +- config/locales/sc.yml | 16 - config/locales/si.yml | 1360 ++++++++++++++++- config/locales/simple_form.ast.yml | 4 + config/locales/simple_form.ca.yml | 10 + config/locales/simple_form.cs.yml | 9 + config/locales/simple_form.da.yml | 10 + config/locales/simple_form.el.yml | 5 + config/locales/simple_form.eo.yml | 17 +- config/locales/simple_form.es-AR.yml | 25 + config/locales/simple_form.es-MX.yml | 16 + config/locales/simple_form.es.yml | 25 + config/locales/simple_form.fr.yml | 10 + config/locales/simple_form.gl.yml | 37 +- config/locales/simple_form.hu.yml | 10 + config/locales/simple_form.id.yml | 7 + config/locales/simple_form.io.yml | 5 + config/locales/simple_form.is.yml | 16 + config/locales/simple_form.it.yml | 25 + config/locales/simple_form.ko.yml | 24 + config/locales/simple_form.ku.yml | 6 + config/locales/simple_form.lv.yml | 25 + config/locales/simple_form.nl.yml | 15 + config/locales/simple_form.pl.yml | 10 + config/locales/simple_form.pt-BR.yml | 22 + config/locales/simple_form.pt-PT.yml | 10 + config/locales/simple_form.ru.yml | 20 + config/locales/simple_form.si.yml | 226 ++- config/locales/simple_form.sl.yml | 25 + config/locales/simple_form.tr.yml | 25 + config/locales/simple_form.uk.yml | 10 + config/locales/simple_form.vi.yml | 25 + config/locales/simple_form.zh-TW.yml | 25 + config/locales/sk.yml | 22 +- config/locales/sl.yml | 99 +- config/locales/sq.yml | 16 - config/locales/sr-Latn.yml | 13 - config/locales/sr.yml | 16 - config/locales/sv.yml | 15 - config/locales/ta.yml | 9 - config/locales/te.yml | 3 - config/locales/th.yml | 15 - config/locales/tr.yml | 98 +- config/locales/tt.yml | 5 - config/locales/uk.yml | 30 +- config/locales/vi.yml | 97 +- config/locales/zgh.yml | 2 - config/locales/zh-CN.yml | 18 +- config/locales/zh-HK.yml | 16 - config/locales/zh-TW.yml | 125 +- 205 files changed, 5266 insertions(+), 1546 deletions(-) diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json index 52cb08217bc..9e84a1bd7b6 100644 --- a/app/javascript/mastodon/locales/af.json +++ b/app/javascript/mastodon/locales/af.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferences", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} favourited your status", "notification.follow": "{name} followed you", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favourites:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Search", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Embed", "status.favourite": "Favourite", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Load more", @@ -484,6 +492,7 @@ "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", "status.share": "Share", + "status.show_filter_reason": "Show anyway", "status.show_less": "Show less", "status.show_less_all": "Show less for all", "status.show_more": "Show more", diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 406868d6504..d3f49b82fd3 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "التفضيلات", "navigation_bar.public_timeline": "الخيط العام الموحد", "navigation_bar.security": "الأمان", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "أنشأ {name} حسابًا", "notification.favourite": "أُعجِب {name} بمنشورك", "notification.follow": "{name} يتابعك", @@ -326,6 +327,7 @@ "notification.update": "عدّلَ {name} منشورًا", "notifications.clear": "امسح الإخطارات", "notifications.clear_confirmation": "أمتأكد من أنك تود مسح جل الإخطارات الخاصة بك و المتلقاة إلى حد الآن ؟", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "التسجيلات الجديدة:", "notifications.column_settings.alert": "إشعارات سطح المكتب", "notifications.column_settings.favourite": "المُفَضَّلة:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "شُكرًا لَكَ على الإبلاغ، سَوفَ نَنظُرُ فِي هَذَا الأمر.", "report.unfollow": "إلغاء متابعة @{name}", "report.unfollow_explanation": "أنت تتابع هذا الحساب، لإزالة مَنشوراته من تغذيَتِكَ الرئيسة ألغ متابعته.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "ابحث", "search_popout.search_format": "نمط البحث المتقدم", "search_popout.tips.full_text": "النص البسيط يقوم بعرض المنشورات التي كتبتها أو قمت بإرسالها أو ترقيتها أو تمت الإشارة إليك فيها من طرف آخرين ، بالإضافة إلى مطابقة أسماء المستخدمين وأسماء العرض وعلامات التصنيف.", @@ -461,6 +468,7 @@ "status.embed": "إدماج", "status.favourite": "أضف إلى المفضلة", "status.filtered": "مُصفّى", + "status.hide": "Hide toot", "status.history.created": "أنشأه {name} {date}", "status.history.edited": "عدله {name} {date}", "status.load_more": "حمّل المزيد", @@ -484,6 +492,7 @@ "status.report": "ابلِغ عن @{name}", "status.sensitive_warning": "محتوى حساس", "status.share": "مشاركة", + "status.show_filter_reason": "Show anyway", "status.show_less": "اعرض أقلّ", "status.show_less_all": "طي الكل", "status.show_more": "أظهر المزيد", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 0f18f7376eb..16fa5e1b665 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -33,7 +33,7 @@ "account.mute_notifications": "Mute notifications from @{name}", "account.muted": "Muted", "account.posts": "Barritos", - "account.posts_with_replies": "Barritos y rempuestes", + "account.posts_with_replies": "Artículos y rempuestes", "account.report": "Report @{name}", "account.requested": "Esperando pola aprobación. Calca pa encaboxar la solicitú de siguimientu", "account.share": "Share @{name}'s profile", @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferencies", "navigation_bar.public_timeline": "Llinia temporal federada", "navigation_bar.security": "Seguranza", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} favourited your status", "notification.follow": "{name} siguióte", @@ -326,6 +327,7 @@ "notification.update": "{name} editó l'artículu", "notifications.clear": "Llimpiar avisos", "notifications.clear_confirmation": "¿De xuru que quies llimpiar dafechu tolos avisos?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Avisos d'escritoriu", "notifications.column_settings.favourite": "Favoritos:", @@ -413,14 +415,14 @@ "report.placeholder": "Comentarios adicionales", "report.reasons.dislike": "I don't like it", "report.reasons.dislike_description": "It is not something you want to see", - "report.reasons.other": "It's something else", - "report.reasons.other_description": "The issue does not fit into other categories", - "report.reasons.spam": "It's spam", + "report.reasons.other": "Ye daqué más", + "report.reasons.other_description": "La incidencia nun s'axusta a les demás categoríes", + "report.reasons.spam": "Ye spam", "report.reasons.spam_description": "Malicious links, fake engagement, or repetitive replies", "report.reasons.violation": "Incumple les regles del sirvidor", "report.reasons.violation_description": "You are aware that it breaks specific rules", "report.rules.subtitle": "Select all that apply", - "report.rules.title": "Which rules are being violated?", + "report.rules.title": "¿Qué regles s'incumplen?", "report.statuses.subtitle": "Select all that apply", "report.statuses.title": "Are there any posts that back up this report?", "report.submit": "Unviar", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Buscar", "search_popout.search_format": "Formatu de gueta avanzada", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Empotrar", "status.favourite": "Favourite", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Cargar más", @@ -484,6 +492,7 @@ "status.report": "Report @{name}", "status.sensitive_warning": "Conteníu sensible", "status.share": "Share", + "status.show_filter_reason": "Show anyway", "status.show_less": "Amosar menos", "status.show_less_all": "Amosar menos en too", "status.show_more": "Amosar más", @@ -509,7 +518,7 @@ "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older posts", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", - "trends.trending_now": "Trending now", + "trends.trending_now": "En tendencia", "ui.beforeunload": "El borrador va perdese si coles de Mastodon.", "units.short.billion": "{count} B", "units.short.million": "{count} M", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 69f4796ff8b..18d95b5dd04 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Предпочитания", "navigation_bar.public_timeline": "Публичен канал", "navigation_bar.security": "Сигурност", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} хареса твоята публикация", "notification.follow": "{name} те последва", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Изчистване на известия", "notifications.clear_confirmation": "Сигурни ли сте, че искате да изчистите окончателно всичките си известия?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Десктоп известия", "notifications.column_settings.favourite": "Предпочитани:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Търсене", "search_popout.search_format": "Формат за разширено търсене", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Вграждане", "status.favourite": "Предпочитани", "status.filtered": "Филтрирано", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Зареждане на още", @@ -484,6 +492,7 @@ "status.report": "Докладване на @{name}", "status.sensitive_warning": "Деликатно съдържание", "status.share": "Споделяне", + "status.show_filter_reason": "Show anyway", "status.show_less": "Покажи по-малко", "status.show_less_all": "Покажи по-малко за всички", "status.show_more": "Покажи повече", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index 912a7eb7e05..34d650234b6 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "পছন্দসমূহ", "navigation_bar.public_timeline": "যুক্তবিশ্বের সময়রেখা", "navigation_bar.security": "নিরাপত্তা", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} আপনার কার্যক্রম পছন্দ করেছেন", "notification.follow": "{name} আপনাকে অনুসরণ করেছেন", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "প্রজ্ঞাপনগুলো মুছে ফেলতে", "notifications.clear_confirmation": "আপনি কি নির্চিত প্রজ্ঞাপনগুলো মুছে ফেলতে চান ?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "কম্পিউটারে প্রজ্ঞাপনগুলি", "notifications.column_settings.favourite": "পছন্দের:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "অনুসন্ধান", "search_popout.search_format": "বিস্তারিতভাবে খোঁজার পদ্ধতি", "search_popout.tips.full_text": "সাধারণ লেখা দিয়ে খুঁজলে বের হবে সেরকম আপনার লেখা, পছন্দের লেখা, সমর্থন করা লেখা, আপনাকে উল্লেখকরা কোনো লেখা, যা খুঁজছেন সেরকম কোনো ব্যবহারকারীর নাম বা কোনো হ্যাশট্যাগগুলো।", @@ -461,6 +468,7 @@ "status.embed": "এমবেড করতে", "status.favourite": "পছন্দের করতে", "status.filtered": "ছাঁকনিদিত", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "আরো দেখুন", @@ -484,6 +492,7 @@ "status.report": "@{name} কে রিপোর্ট করতে", "status.sensitive_warning": "সংবেদনশীল কিছু", "status.share": "অন্যদের জানান", + "status.show_filter_reason": "Show anyway", "status.show_less": "কম দেখতে", "status.show_less_all": "সবগুলোতে কম দেখতে", "status.show_more": "আরো দেখাতে", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index c5559a277fe..14a55e42046 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Gwellvezioù", "navigation_bar.public_timeline": "Red-amzer kevreet", "navigation_bar.security": "Diogelroez", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} en/he deus lakaet ho toud en e/he muiañ-karet", "notification.follow": "heuliañ a ra {name} ac'hanoc'h", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Skarzhañ ar c'hemennoù", "notifications.clear_confirmation": "Ha sur oc'h e fell deoc'h skarzhañ ho kemennoù penn-da-benn?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Kemennoù war ar burev", "notifications.column_settings.favourite": "Ar re vuiañ-karet:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Klask", "search_popout.search_format": "Framm klask araokaet", "search_popout.tips.full_text": "Testenn simpl a adkas toudoù skrivet ganeoc'h, merket ganeoc'h evel miuañ-karet, toudoù skignet, pe e-lec'h oc'h bet meneget, met ivez anvioù skrammañ, anvioù implijer ha gêrioù-klik hag a glot.", @@ -461,6 +468,7 @@ "status.embed": "Enframmañ", "status.favourite": "Muiañ-karet", "status.filtered": "Silet", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Kargañ muioc'h", @@ -484,6 +492,7 @@ "status.report": "Disklêriañ @{name}", "status.sensitive_warning": "Dalc'had kizidik", "status.share": "Rannañ", + "status.show_filter_reason": "Show anyway", "status.show_less": "Diskouez nebeutoc'h", "status.show_less_all": "Diskouez nebeutoc'h evit an holl", "status.show_more": "Diskouez muioc'h", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 5490bb6b712..0c942003582 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferències", "navigation_bar.public_timeline": "Línia de temps federada", "navigation_bar.security": "Seguretat", + "notification.admin.report": "{name} ha reportat {target}", "notification.admin.sign_up": "{name} s'ha registrat", "notification.favourite": "{name} ha afavorit la teva publicació", "notification.follow": "{name} et segueix", @@ -326,6 +327,7 @@ "notification.update": "{name} ha editat una publicació", "notifications.clear": "Esborra les notificacions", "notifications.clear_confirmation": "Segur que vols esborrar permanentment totes les teves notificacions?", + "notifications.column_settings.admin.report": "Nous informes:", "notifications.column_settings.admin.sign_up": "Nous registres:", "notifications.column_settings.alert": "Notificacions d'escriptori", "notifications.column_settings.favourite": "Preferits:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Gràcies per denunciar-ho. Ho investigarem.", "report.unfollow": "Deixa de seguir @{name}", "report.unfollow_explanation": "Estàs seguint aquest compte. Per no veure les seves publicacions a la teva línia de temps d'Inici, deixa de seguir-lo.", + "report_notification.attached_statuses": "{count, plural, one {{count} publicació} other {{count} publicacions}} attached", + "report_notification.categories.other": "Altres", + "report_notification.categories.spam": "Contingut brossa", + "report_notification.categories.violation": "Violació de norma", + "report_notification.open": "Informe obert", "search.placeholder": "Cerca", "search_popout.search_format": "Format de cerca avançada", "search_popout.tips.full_text": "El text simple recupera publicacions que has escrit, marcat com a preferides, que has impulsat o on t'han esmentat, així com els usuaris, els noms d'usuaris i les etiquetes.", @@ -461,6 +468,7 @@ "status.embed": "Incrusta", "status.favourite": "Favorit", "status.filtered": "Filtrat", + "status.hide": "Hide toot", "status.history.created": "{name} ha creat {date}", "status.history.edited": "{name} ha editat {date}", "status.load_more": "Carregar-ne més", @@ -484,6 +492,7 @@ "status.report": "Denuncia @{name}", "status.sensitive_warning": "Contingut sensible", "status.share": "Comparteix", + "status.show_filter_reason": "Show anyway", "status.show_less": "Mostrar-ne menys", "status.show_less_all": "Mostrar-ne menys per a tot", "status.show_more": "Mostrar-ne més", diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json index e7c4dab715f..223b0d41749 100644 --- a/app/javascript/mastodon/locales/ckb.json +++ b/app/javascript/mastodon/locales/ckb.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "پەسەندەکان", "navigation_bar.public_timeline": "نووسراوەکانی هەمووشوێنێک", "navigation_bar.security": "ئاسایش", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} تۆمارکرا", "notification.favourite": "{name} نووسراوەکەتی پەسەند کرد", "notification.follow": "{name} دوای تۆ کەوت", @@ -326,6 +327,7 @@ "notification.update": "{name} پۆستێکی دەستکاریکرد", "notifications.clear": "ئاگانامەکان بسڕیەوە", "notifications.clear_confirmation": "ئایا دڵنیایت لەوەی دەتەوێت بە هەمیشەیی هەموو ئاگانامەکانت بسڕیتەوە?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "چوونەژوورەوەی نوێ:", "notifications.column_settings.alert": "ئاگانامەکانی پیشانگەرر ڕومێزی", "notifications.column_settings.favourite": "دڵخوازترین:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "سوپاس بۆ ڕاپۆرتکردن، ئێمە سەیری ئەم بابەتە دەکەین.", "report.unfollow": "بەدوادانەچوو@{name}", "report.unfollow_explanation": "تۆ شوێنکەوتووی ئەم هەژماررەی دەکەیت. بۆ ئەوەی چیتر نووسراوەکانیان لە هۆم فیدی خۆت نەبینی، بەدوایان مەچۆ.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "گەڕان", "search_popout.search_format": "شێوەی گەڕانی پێشکەوتوو", "search_popout.tips.full_text": "گەڕانێکی دەقی سادە دەتوانێت توتەکانی ئێوە کە، نووسیوتانە،پەسەنتان کردووە، دووبارەتانکردووە، یان ئەو توتانە کە باسی ئێوەی تێدا کراوە پەیدا دەکا. هەروەها ناوی بەکارهێنەران، ناوی پیشاندراو و هەشتەگەکانیش لە خۆ دەگرێت.", @@ -461,6 +468,7 @@ "status.embed": "نیشتەجێ بکە", "status.favourite": "دڵخواز", "status.filtered": "پاڵاوتن", + "status.hide": "Hide toot", "status.history.created": "{name} دروستکراوە لە{date}", "status.history.edited": "{name} دروستکاریکراوە لە{date}", "status.load_more": "زیاتر بار بکە", @@ -484,6 +492,7 @@ "status.report": "گوزارشت @{name}", "status.sensitive_warning": "ناوەڕۆکی هەستیار", "status.share": "هاوبەشی بکە", + "status.show_filter_reason": "Show anyway", "status.show_less": "کەمتر نیشان بدە", "status.show_less_all": "هەمووی بچووک بکەوە", "status.show_more": "زیاتر نیشان بدە", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 9172aea2e44..9dd6f1a48bd 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferenze", "navigation_bar.public_timeline": "Linea pubblica glubale", "navigation_bar.security": "Sicurità", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} hà aghjuntu u vostru statutu à i so favuriti", "notification.follow": "{name} v'hà seguitatu", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Purgà e nutificazione", "notifications.clear_confirmation": "Site sicuru·a che vulete toglie tutte ste nutificazione?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Nutificazione nant'à l'urdinatore", "notifications.column_settings.favourite": "Favuriti:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Circà", "search_popout.search_format": "Ricerca avanzata", "search_popout.tips.full_text": "I testi simplici rimandanu i statuti ch'avete scritti, aghjunti à i vostri favuriti, spartuti o induve quelli site mintuvatu·a, è ancu i cugnomi, nomi pubblichi è hashtag chì currispondenu.", @@ -461,6 +468,7 @@ "status.embed": "Integrà", "status.favourite": "Aghjunghje à i favuriti", "status.filtered": "Filtratu", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Vede di più", @@ -484,6 +492,7 @@ "status.report": "Palisà @{name}", "status.sensitive_warning": "Cuntinutu sensibile", "status.share": "Sparte", + "status.show_filter_reason": "Show anyway", "status.show_less": "Ripiegà", "status.show_less_all": "Ripiegà tuttu", "status.show_more": "Slibrà", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index e1602dacf5b..9fee3948ad2 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Předvolby", "navigation_bar.public_timeline": "Federovaná časová osa", "navigation_bar.security": "Zabezpečení", + "notification.admin.report": "Uživatel {name} nahlásil {target}", "notification.admin.sign_up": "Uživatel {name} se zaregistroval", "notification.favourite": "Uživatel {name} si oblíbil váš příspěvek", "notification.follow": "Uživatel {name} vás začal sledovat", @@ -326,6 +327,7 @@ "notification.update": "Uživatel {name} upravil příspěvek", "notifications.clear": "Vymazat oznámení", "notifications.clear_confirmation": "Opravdu chcete trvale smazat všechna vaše oznámení?", + "notifications.column_settings.admin.report": "Nová hlášení:", "notifications.column_settings.admin.sign_up": "Nové registrace:", "notifications.column_settings.alert": "Oznámení na počítači", "notifications.column_settings.favourite": "Oblíbení:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Děkujeme za nahlášení, podíváme se na to.", "report.unfollow": "Přestat sledovat @{name}", "report.unfollow_explanation": "Tento účet sledujete. Abyste už neviděli jejich příspěvky ve své domácí časové ose, přestaňte je sledovat.", + "report_notification.attached_statuses": "{count, plural, one {{count} připojený příspěvek} few {{count} připojené příspěvky} many {{count} připojených příspěvků} other {{count} připojených příspěvků}}", + "report_notification.categories.other": "Ostatní", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Porušení pravidla", + "report_notification.open": "Otevřít hlášení", "search.placeholder": "Hledat", "search_popout.search_format": "Pokročilé hledání", "search_popout.tips.full_text": "Jednoduchý text vrací příspěvky, které jste napsali, oblíbili si, boostnuli, nebo vás v nich někdo zmínil, a také odpovídající přezdívky, zobrazovaná jména a hashtagy.", @@ -461,6 +468,7 @@ "status.embed": "Vložit na web", "status.favourite": "Oblíbit", "status.filtered": "Filtrováno", + "status.hide": "Hide toot", "status.history.created": "Uživatel {name} vytvořil {date}", "status.history.edited": "Uživatel {name} upravil {date}", "status.load_more": "Zobrazit více", @@ -484,6 +492,7 @@ "status.report": "Nahlásit @{name}", "status.sensitive_warning": "Citlivý obsah", "status.share": "Sdílet", + "status.show_filter_reason": "Show anyway", "status.show_less": "Zobrazit méně", "status.show_less_all": "Zobrazit méně pro všechny", "status.show_more": "Zobrazit více", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 42fef473249..9b2886b0112 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Dewisiadau", "navigation_bar.public_timeline": "Ffrwd y ffederasiwn", "navigation_bar.security": "Diogelwch", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "Cofrestrodd {name}", "notification.favourite": "Hoffodd {name} eich post", "notification.follow": "Dilynodd {name} chi", @@ -326,6 +327,7 @@ "notification.update": "Golygodd {name} bost", "notifications.clear": "Clirio hysbysiadau", "notifications.clear_confirmation": "Ydych chi'n sicr eich bod am glirio'ch holl hysbysiadau am byth?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "Cofrestriadau newydd:", "notifications.column_settings.alert": "Hysbysiadau bwrdd gwaith", "notifications.column_settings.favourite": "Ffefrynnau:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Diolch am adrodd, byddwn yn ymchwilio i hyn.", "report.unfollow": "Dad-ddilyn @{name}", "report.unfollow_explanation": "Rydych chi'n dilyn y cyfrif hwn. I beidio â gweld eu postiadau yn eich porthiant cartref mwyach, dad-ddilynwch nhw.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Chwilio", "search_popout.search_format": "Fformat chwilio uwch", "search_popout.tips.full_text": "Mae testun syml yn dychwelyd postiadau yr ydych wedi ysgrifennu, hoffi, wedi'u hybio, neu wedi'ch crybwyll ynddynt, ynghyd a chyfateb a enwau defnyddwyr, enwau arddangos ac hashnodau.", @@ -461,6 +468,7 @@ "status.embed": "Plannu", "status.favourite": "Hoffi", "status.filtered": "Wedi'i hidlo", + "status.hide": "Hide toot", "status.history.created": "{name} greuodd {date}", "status.history.edited": "{name} olygodd {date}", "status.load_more": "Llwythwch mwy", @@ -484,6 +492,7 @@ "status.report": "Adrodd @{name}", "status.sensitive_warning": "Cynnwys sensitif", "status.share": "Rhannu", + "status.show_filter_reason": "Show anyway", "status.show_less": "Dangos llai", "status.show_less_all": "Dangos llai i bawb", "status.show_more": "Dangos mwy", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 537fa6af690..11371dfd05c 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Præferencer", "navigation_bar.public_timeline": "Fælles tidslinje", "navigation_bar.security": "Sikkerhed", + "notification.admin.report": "{name} anmeldte {target}", "notification.admin.sign_up": "{name} tilmeldte sig", "notification.favourite": "{name} favoritmarkerede dit indlæg", "notification.follow": "{name} begyndte at følge dig", @@ -326,6 +327,7 @@ "notification.update": "{name} redigerede et indlæg", "notifications.clear": "Ryd notifikationer", "notifications.clear_confirmation": "Sikker på, at du vil rydde alle dine notifikationer permanent?", + "notifications.column_settings.admin.report": "Nye anmeldelser:", "notifications.column_settings.admin.sign_up": "Nye tilmeldinger:", "notifications.column_settings.alert": "Computernotifikationer", "notifications.column_settings.favourite": "Favoritter:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Tak for anmeldelsen, der vil blive set nærmere på dette.", "report.unfollow": "Følg ikke længere @{name}", "report.unfollow_explanation": "Denne konto følges. For at ophøre med at se vedkommendes indlæg på hjemmetidslinjen, vælg Følg ikke længere.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} poster}} vedhæftet", + "report_notification.categories.other": "Andre", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Regelovertrædelse", + "report_notification.open": "Åbn anmeldelse", "search.placeholder": "Søg", "search_popout.search_format": "Avanceret søgeformat", "search_popout.tips.full_text": "Simpel tekst returnerer indlæg, du har skrevet, favoritmarkeret, boostet eller som er nævnt i/matcher bruger- og profilnavne samt hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Indlejr", "status.favourite": "Favorit", "status.filtered": "Filtreret", + "status.hide": "Hide toot", "status.history.created": "{name} oprettet {date}", "status.history.edited": "{name} redigeret {date}", "status.load_more": "Indlæs mere", @@ -484,6 +492,7 @@ "status.report": "Anmeld @{name}", "status.sensitive_warning": "Følsomt indhold", "status.share": "Del", + "status.show_filter_reason": "Show anyway", "status.show_less": "Vis mindre", "status.show_less_all": "Vis mindre for alle", "status.show_more": "Vis mere", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index aaf552a1e35..ee6c7cfda2c 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Einstellungen", "navigation_bar.public_timeline": "Föderierte Zeitleiste", "navigation_bar.security": "Sicherheit", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} hat sich registriert", "notification.favourite": "{name} hat deinen Beitrag favorisiert", "notification.follow": "{name} folgt dir", @@ -326,6 +327,7 @@ "notification.update": "{name} bearbeitete einen Beitrag", "notifications.clear": "Mitteilungen löschen", "notifications.clear_confirmation": "Bist du dir sicher, dass du alle Mitteilungen löschen möchtest?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "Neue Anmeldungen:", "notifications.column_settings.alert": "Desktop-Benachrichtigungen", "notifications.column_settings.favourite": "Favorisierungen:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Vielen Dank für die Meldung, wir werden uns das ansehen.", "report.unfollow": "@{name} entfolgen", "report.unfollow_explanation": "Du folgst diesem Konto. Um die Beiträge nicht mehr auf deiner Startseite zu sehen, entfolge dem Konto.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Suche", "search_popout.search_format": "Fortgeschrittenes Suchformat", "search_popout.tips.full_text": "Einfache Texteingabe gibt Beiträge, die du geschrieben, favorisiert und geteilt hast zurück. Außerdem auch Beiträge in denen du erwähnt wurdest, aber auch passende Nutzernamen, Anzeigenamen oder Hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Einbetten", "status.favourite": "Favorisieren", "status.filtered": "Gefiltert", + "status.hide": "Hide toot", "status.history.created": "{name} erstellte {date}", "status.history.edited": "{name} bearbeitete {date}", "status.load_more": "Weitere laden", @@ -484,6 +492,7 @@ "status.report": "@{name} melden", "status.sensitive_warning": "NSFW", "status.share": "Teilen", + "status.show_filter_reason": "Show anyway", "status.show_less": "Weniger anzeigen", "status.show_less_all": "Alle Inhaltswarnungen zuklappen", "status.show_more": "Mehr anzeigen", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index 7cd913493e3..28618104a53 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -612,6 +612,10 @@ "defaultMessage": "Copy link to status", "id": "status.copy" }, + { + "defaultMessage": "Hide toot", + "id": "status.hide" + }, { "defaultMessage": "Block domain {domain}", "id": "account.block_domain" @@ -678,6 +682,10 @@ "defaultMessage": "Filtered", "id": "status.filtered" }, + { + "defaultMessage": "Show anyway", + "id": "status.show_filter_reason" + }, { "defaultMessage": "Pinned post", "id": "status.pinned" diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 6f324860c0a..c8f7999675d 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Προτιμήσεις", "navigation_bar.public_timeline": "Ομοσπονδιακή ροή", "navigation_bar.security": "Ασφάλεια", + "notification.admin.report": "{name} ανέφερε {target}", "notification.admin.sign_up": "{name} έχει εγγραφεί", "notification.favourite": "Ο/Η {name} σημείωσε ως αγαπημένη την κατάστασή σου", "notification.follow": "Ο/Η {name} σε ακολούθησε", @@ -326,6 +327,7 @@ "notification.update": "{name} επεξεργάστηκε μια δημοσίευση", "notifications.clear": "Καθαρισμός ειδοποιήσεων", "notifications.clear_confirmation": "Σίγουρα θέλεις να καθαρίσεις όλες τις ειδοποιήσεις σου;", + "notifications.column_settings.admin.report": "Νέες αναφορές:", "notifications.column_settings.admin.sign_up": "Νέες εγγραφές:", "notifications.column_settings.alert": "Ειδοποιήσεις επιφάνειας εργασίας", "notifications.column_settings.favourite": "Αγαπημένα:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Άλλες", + "report_notification.categories.spam": "Ανεπιθύμητα", + "report_notification.categories.violation": "Παραβίαση κανόνα", + "report_notification.open": "Open report", "search.placeholder": "Αναζήτηση", "search_popout.search_format": "Προχωρημένη αναζήτηση", "search_popout.tips.full_text": "Απλό κείμενο που επιστρέφει καταστάσεις που έχεις γράψει, έχεις σημειώσει ως αγαπημένες, έχεις προωθήσει ή έχεις αναφερθεί σε αυτές, καθώς και όσα ονόματα χρηστών και ετικέτες ταιριάζουν.", @@ -461,6 +468,7 @@ "status.embed": "Ενσωμάτωσε", "status.favourite": "Σημείωσε ως αγαπημένο", "status.filtered": "Φιλτραρισμένα", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Φόρτωσε περισσότερα", @@ -484,6 +492,7 @@ "status.report": "Κατάγγειλε @{name}", "status.sensitive_warning": "Ευαίσθητο περιεχόμενο", "status.share": "Μοιράσου", + "status.show_filter_reason": "Show anyway", "status.show_less": "Δείξε λιγότερα", "status.show_less_all": "Δείξε λιγότερα για όλα", "status.show_more": "Δείξε περισσότερα", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 71874cb45e6..561f1088bd0 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferences", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} favourited your status", "notification.follow": "{name} followed you", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favourites:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Search", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Embed", "status.favourite": "Favourite", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Load more", @@ -484,6 +492,7 @@ "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", "status.share": "Share", + "status.show_filter_reason": "Show anyway", "status.show_less": "Show less", "status.show_less_all": "Show less for all", "status.show_more": "Show more", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 9082c420254..b6bc2ac976b 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -468,6 +468,7 @@ "status.embed": "Embed", "status.favourite": "Favourite", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Load more", @@ -491,6 +492,7 @@ "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", "status.share": "Share", + "status.show_filter_reason": "Show anyway", "status.show_less": "Show less", "status.show_less_all": "Show less for all", "status.show_more": "Show more", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 999f34be6ce..d49c342f943 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -4,12 +4,12 @@ "account.badges.bot": "Roboto", "account.badges.group": "Grupo", "account.block": "Bloki @{name}", - "account.block_domain": "Bloki domajnon {domain}", + "account.block_domain": "Bloki la domajnon {domain}", "account.blocked": "Blokita", "account.browse_more_on_origin_server": "Vidi pli ĉe la originala profilo", "account.cancel_follow_request": "Nuligi la demandon de sekvado", "account.direct": "Rekte mesaĝi @{name}", - "account.disable_notifications": "Ĉesu sciigi min kiam @{name} mesaĝi", + "account.disable_notifications": "Ne plu sciigi min kiam @{name} mesaĝas", "account.domain_blocked": "Domajno blokita", "account.edit_profile": "Redakti la profilon", "account.enable_notifications": "Sciigi min kiam @{name} mesaĝas", @@ -18,9 +18,9 @@ "account.followers": "Sekvantoj", "account.followers.empty": "Ankoraŭ neniu sekvas tiun uzanton.", "account.followers_counter": "{count, plural, one{{counter} Sekvanto} other {{counter} Sekvantoj}}", - "account.following": "Sekvantaj", - "account.following_counter": "{count, plural, one {{counter} Sekvato} other {{counter} Sekvatoj}}", - "account.follows.empty": "Tiu uzanto ankoraŭ ne sekvas iun.", + "account.following": "Sekvadoj", + "account.following_counter": "{count, plural, one {{counter} Sekvado} other {{counter} Sekvadoj}}", + "account.follows.empty": "La uzanto ankoraŭ ne sekvas iun ajn.", "account.follows_you": "Sekvas vin", "account.hide_reblogs": "Kaŝi la plusendojn de @{name}", "account.joined": "Kuniĝis {date}", @@ -35,17 +35,17 @@ "account.posts": "Mesaĝoj", "account.posts_with_replies": "Mesaĝoj kaj respondoj", "account.report": "Raporti @{name}", - "account.requested": "Atendo de aprobo. Alklaku por nuligi peton de sekvado", + "account.requested": "Atendo de aprobo. Klaku por nuligi la demandon de sekvado", "account.share": "Kundividi la profilon de @{name}", "account.show_reblogs": "Montri la plusendojn de @{name}", "account.statuses_counter": "{count, plural, one {{counter} Mesaĝo} other {{counter} Mesaĝoj}}", "account.unblock": "Malbloki @{name}", - "account.unblock_domain": "Malbloki {domain}", + "account.unblock_domain": "Malbloki la domajnon {domain}", "account.unblock_short": "Malbloki", - "account.unendorse": "Ne rekomendi ĉe la profilo", + "account.unendorse": "Ne plu rekomendi ĉe la profilo", "account.unfollow": "Ne plu sekvi", "account.unmute": "Ne plu silentigi @{name}", - "account.unmute_notifications": "Reebligi la sciigojn de @{name}", + "account.unmute_notifications": "Ne plu silentigi la sciigojn de @{name}", "account.unmute_short": "Ne plu silentigi", "account_note.placeholder": "Klaku por aldoni noton", "admin.dashboard.daily_retention": "User retention rate by day after sign-up", @@ -71,7 +71,7 @@ "column.bookmarks": "Legosignoj", "column.community": "Loka templinio", "column.direct": "Rektaj mesaĝoj", - "column.directory": "Trarigardi profilojn", + "column.directory": "Foliumi la profilojn", "column.domain_blocks": "Blokitaj domajnoj", "column.favourites": "Preferaĵoj", "column.follow_requests": "Demandoj de sekvado", @@ -80,7 +80,7 @@ "column.mutes": "Silentigitaj uzantoj", "column.notifications": "Sciigoj", "column.pins": "Alpinglitaj mesaĝoj", - "column.public": "Federata templinio", + "column.public": "Fratara templinio", "column_back_button.label": "Reveni", "column_header.hide_settings": "Kaŝi la agordojn", "column_header.moveLeft_settings": "Movi kolumnon maldekstren", @@ -101,19 +101,19 @@ "compose_form.lock_disclaimer.lock": "ŝlosita", "compose_form.placeholder": "Kion vi pensas?", "compose_form.poll.add_option": "Aldoni elekteblon", - "compose_form.poll.duration": "Balotenketa daŭro", + "compose_form.poll.duration": "Daŭro de la balotenketo", "compose_form.poll.option_placeholder": "Elekteblo {number}", "compose_form.poll.remove_option": "Forigi ĉi tiu elekteblon", "compose_form.poll.switch_to_multiple": "Ŝanĝi la balotenketon por permesi multajn elektojn", "compose_form.poll.switch_to_single": "Ŝanĝi la balotenketon por permesi unu solan elekton", - "compose_form.publish": "Publish", + "compose_form.publish": "Publikigi", "compose_form.publish_loud": "{publish}!", - "compose_form.save_changes": "Konservi ŝanĝojn", + "compose_form.save_changes": "Konservi la ŝanĝojn", "compose_form.sensitive.hide": "Marki la aŭdovidaĵojn kiel tiklaj", "compose_form.sensitive.marked": "Aŭdovidaĵo markita tikla", "compose_form.sensitive.unmarked": "Aŭdovidaĵo ne markita tikla", - "compose_form.spoiler.marked": "Teksto kaŝita malantaŭ averto", - "compose_form.spoiler.unmarked": "Teksto ne kaŝita", + "compose_form.spoiler.marked": "Forigi la averton de enhavo", + "compose_form.spoiler.unmarked": "Aldoni averton de enhavo", "compose_form.spoiler_placeholder": "Skribu vian averton ĉi tie", "confirmation_modal.cancel": "Nuligi", "confirmations.block.block_and_report": "Bloki kaj raporti", @@ -123,8 +123,8 @@ "confirmations.delete.message": "Ĉu vi certas, ke vi volas forigi ĉi tiun mesaĝon?", "confirmations.delete_list.confirm": "Forigi", "confirmations.delete_list.message": "Ĉu vi certas, ke vi volas porĉiame forigi ĉi tiun liston?", - "confirmations.discard_edit_media.confirm": "Ne konservi", - "confirmations.discard_edit_media.message": "Vi havas nekonservitan ŝanĝon de la priskribo aŭ de la antaŭvido de aŭdvidaĵo, ĉu vi forigu ĝin?", + "confirmations.discard_edit_media.confirm": "Forlasi", + "confirmations.discard_edit_media.message": "Vi havas nekonservitan ŝanĝon de la priskribo aŭ de la antaŭvido de la aŭdovidaĵo, ĉu vi forigu ĝin?", "confirmations.domain_block.confirm": "Bloki la tutan domajnon", "confirmations.domain_block.message": "Ĉu vi vere, vere certas, ke vi volas tute bloki {domain}? Plej ofte, trafa blokado kaj silentigado sufiĉas kaj preferindas. Vi ne vidos enhavon de tiu domajno en publika templinio aŭ en viaj sciigoj. Viaj sekvantoj de tiu domajno estos forigitaj.", "confirmations.logout.confirm": "Adiaŭi", @@ -133,7 +133,7 @@ "confirmations.mute.explanation": "Ĉi-tio kaŝos mesaĝojn el ili kaj mesaĝojn kiuj mencias ilin, sed ili ankoraŭ rajtos vidi viajn mesaĝojn kaj sekvi vin.", "confirmations.mute.message": "Ĉu vi certas, ke vi volas silentigi {name}?", "confirmations.redraft.confirm": "Forigi kaj reskribi", - "confirmations.redraft.message": "Ĉu vi certas ke vi volas forigi kaj reskribi la mesaĝon? Ĝiaj preferitaĵoj kaj ĝiaj plusendoj estos perditaj, kaj la respondoj al la originala mesaĝo estos orfaj.", + "confirmations.redraft.message": "Ĉu vi certas, ke vi volas forigi kaj reskribi la mesaĝon? Plusendaĵoj kaj preferaĵoj de ĝi estos perditaj, kaj la respondoj al la originala mesaĝo estos orfaj.", "confirmations.reply.confirm": "Respondi", "confirmations.reply.message": "Respondi nun anstataŭigos la mesaĝon, kiun vi nun skribas. Ĉu vi certas, ke vi volas daŭrigi?", "confirmations.unfollow.confirm": "Ne plu sekvi", @@ -163,7 +163,7 @@ "emoji_button.search_results": "Serĉaj rezultoj", "emoji_button.symbols": "Simboloj", "emoji_button.travel": "Vojaĝoj kaj lokoj", - "empty_column.account_suspended": "Konto haltigita", + "empty_column.account_suspended": "Konto suspendita", "empty_column.account_timeline": "Neniu mesaĝo ĉi tie!", "empty_column.account_unavailable": "Profilo ne disponebla", "empty_column.blocks": "Vi ankoraŭ ne blokis uzanton.", @@ -173,9 +173,9 @@ "empty_column.domain_blocks": "Ankoraŭ neniu domajno estas blokita.", "empty_column.explore_statuses": "Nenio tendencas nun. Rekontrolu poste!", "empty_column.favourited_statuses": "Vi ankoraŭ ne havas mesaĝon en la preferaĵoj. Kiam vi aldonas ion, ĝi aperos ĉi tie.", - "empty_column.favourites": "Ankoraŭ neniu preferis la mesaĝon. Kiam iu faros ĉi tion, ili aperos ĉi tie.", + "empty_column.favourites": "Ankoraŭ neniu aldonis tiun mesaĝon al siaj preferaĵoj. Kiam iu faros ĉi tion, ili aperos ĉi tie.", "empty_column.follow_recommendations": "Ŝajnas, ke neniuj sugestoj povis esti generitaj por vi. Vi povas provi uzi serĉon por serĉi homojn, kiujn vi eble konas, aŭ esplori tendencajn kradvortojn.", - "empty_column.follow_requests": "Vi ne ankoraŭ havas iun peton de sekvado. Kiam vi ricevos unu, ĝi aperos ĉi tie.", + "empty_column.follow_requests": "Vi ankoraŭ ne havas demandon de sekvado. Kiam vi ricevas unu, ĝi aperas tie ĉi.", "empty_column.hashtag": "Ankoraŭ estas nenio per ĉi tiu kradvorto.", "empty_column.home": "Via hejma tempolinio estas malplena! Vizitu {public} aŭ uzu la serĉilon por renkonti aliajn uzantojn.", "empty_column.home.suggestions": "Vidu iujn sugestojn", @@ -197,11 +197,11 @@ "explore.trending_statuses": "Afiŝoj", "explore.trending_tags": "Kradvortoj", "follow_recommendations.done": "Farita", - "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", - "follow_recommendations.lead": "La mesaĝoj de personoj kiujn vi sekvas, kronologie aperos en via hejma templinio. Ne timu erari, vi povas ĉesi sekvi facile iam ajn!", + "follow_recommendations.heading": "Sekvi la personojn kies mesaĝojn vi volas vidi! Jen iom da sugestoj.", + "follow_recommendations.lead": "La mesaĝoj de personoj kiujn vi sekvas, aperos laŭ kronologia ordo en via hejma templinio. Ne timu erari, vi povas ĉesi sekvi facile iam ajn!", "follow_request.authorize": "Rajtigi", "follow_request.reject": "Rifuzi", - "follow_requests.unlocked_explanation": "Kvankam via konto ne estas ŝlosita, la teamo de {domain} pensis ke vi eble volas permane kontroli la demandojn de sekvado de ĉi tiuj kontoj.", + "follow_requests.unlocked_explanation": "Kvankam via konto ne estas ŝlosita, la teamo de {domain} pensas, ke vi eble volas permane kontroli la demandojn de sekvado de ĉi tiuj kontoj.", "generic.saved": "Konservita", "getting_started.developers": "Programistoj", "getting_started.directory": "Profilujo", @@ -210,7 +210,7 @@ "getting_started.invite": "Inviti homojn", "getting_started.open_source_notice": "Mastodon estas malfermitkoda programo. Vi povas kontribui aŭ raporti problemojn en GitHub je {github}.", "getting_started.security": "Sekureco", - "getting_started.terms": "Uzkondiĉoj", + "getting_started.terms": "Kondiĉoj de la servo", "hashtag.column_header.tag_mode.all": "kaj {additional}", "hashtag.column_header.tag_mode.any": "aŭ {additional}", "hashtag.column_header.tag_mode.none": "sen {additional}", @@ -223,14 +223,14 @@ "home.column_settings.basic": "Bazaj agordoj", "home.column_settings.show_reblogs": "Montri plusendojn", "home.column_settings.show_replies": "Montri respondojn", - "home.hide_announcements": "Kaŝi anoncojn", + "home.hide_announcements": "Kaŝi la anoncojn", "home.show_announcements": "Montri anoncojn", "intervals.full.days": "{number, plural, one {# tago} other {# tagoj}}", "intervals.full.hours": "{number, plural, one {# horo} other {# horoj}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutoj}}", "keyboard_shortcuts.back": "reveni", - "keyboard_shortcuts.blocked": "malfermi la liston de blokitaj uzantoj", - "keyboard_shortcuts.boost": "Plusendi", + "keyboard_shortcuts.blocked": "Malfermi la liston de blokitaj uzantoj", + "keyboard_shortcuts.boost": "Plusendi la mesaĝon", "keyboard_shortcuts.column": "fokusi mesaĝon en unu el la kolumnoj", "keyboard_shortcuts.compose": "enfokusigi la tekstujon", "keyboard_shortcuts.description": "Priskribo", @@ -239,7 +239,7 @@ "keyboard_shortcuts.enter": "malfermi mesaĝon", "keyboard_shortcuts.favourite": "Aldoni la mesaĝon al preferaĵoj", "keyboard_shortcuts.favourites": "Malfermi la liston de preferaĵoj", - "keyboard_shortcuts.federated": "Malfermi la federatan templinion", + "keyboard_shortcuts.federated": "Malfermi la frataran templinion", "keyboard_shortcuts.heading": "Klavaraj mallongigoj", "keyboard_shortcuts.home": "Malfermi la hejman templinion", "keyboard_shortcuts.hotkey": "Rapidklavo", @@ -253,22 +253,22 @@ "keyboard_shortcuts.pinned": "malfermi la liston de alpinglitaj mesaĝoj", "keyboard_shortcuts.profile": "malfermi la profilon de la aŭtoro", "keyboard_shortcuts.reply": "respondi", - "keyboard_shortcuts.requests": "malfermi la liston de petoj de sekvado", + "keyboard_shortcuts.requests": "Malfermi la liston de demandoj de sekvado", "keyboard_shortcuts.search": "enfokusigi la serĉilon", - "keyboard_shortcuts.spoilers": "montri/kaŝi la kampon de enhava averto", + "keyboard_shortcuts.spoilers": "Montri/kaŝi la kampon de averto de enhavo (\"CW\")", "keyboard_shortcuts.start": "malfermi la kolumnon «por komenci»", - "keyboard_shortcuts.toggle_hidden": "montri/kaŝi tekston malantaŭ enhava averto", - "keyboard_shortcuts.toggle_sensitivity": "montri/kaŝi aŭdovidaĵojn", + "keyboard_shortcuts.toggle_hidden": "Montri/kaŝi tekston malantaŭ la averto de enhavo (\"CW\")", + "keyboard_shortcuts.toggle_sensitivity": "Montri/kaŝi la aŭdovidaĵojn", "keyboard_shortcuts.toot": "Krei novan mesaĝon", "keyboard_shortcuts.unfocus": "malenfokusigi la tekstujon aŭ la serĉilon", "keyboard_shortcuts.up": "iri supren en la listo", "lightbox.close": "Fermi", "lightbox.compress": "Kunpremi bildan vidkeston", "lightbox.expand": "Pligrandigi bildan vidkeston", - "lightbox.next": "Sekva", - "lightbox.previous": "Antaŭa", + "lightbox.next": "Antaŭen", + "lightbox.previous": "Malantaŭen", "limited_account_hint.action": "Montru profilon ĉiukaze", - "limited_account_hint.title": "This profile has been hidden by the moderators of your server.", + "limited_account_hint.title": "La profilo estas kaŝita de la moderigantoj de via servilo.", "lists.account.add": "Aldoni al la listo", "lists.account.remove": "Forigi de la listo", "lists.delete": "Forigi la liston", @@ -300,9 +300,9 @@ "navigation_bar.domain_blocks": "Blokitaj domajnoj", "navigation_bar.edit_profile": "Redakti profilon", "navigation_bar.explore": "Esplori", - "navigation_bar.favourites": "Stelumoj", + "navigation_bar.favourites": "Preferaĵoj", "navigation_bar.filters": "Silentigitaj vortoj", - "navigation_bar.follow_requests": "Petoj de sekvado", + "navigation_bar.follow_requests": "Demandoj de sekvado", "navigation_bar.follows_and_followers": "Sekvatoj kaj sekvantoj", "navigation_bar.info": "Pri ĉi tiu servilo", "navigation_bar.keyboard_shortcuts": "Rapidklavoj", @@ -312,10 +312,11 @@ "navigation_bar.personal": "Persone", "navigation_bar.pins": "Alpinglitaj mesaĝoj", "navigation_bar.preferences": "Preferoj", - "navigation_bar.public_timeline": "Federata templinio", + "navigation_bar.public_timeline": "Fratara templinio", "navigation_bar.security": "Sekureco", + "notification.admin.report": "{name} raportis {target}", "notification.admin.sign_up": "{name} registris", - "notification.favourite": "{name} preferis vian mesaĝon", + "notification.favourite": "{name} aldonis vian mesaĝon al siaj preferaĵoj", "notification.follow": "{name} eksekvis vin", "notification.follow_request": "{name} petis sekvi vin", "notification.mention": "{name} menciis vin", @@ -326,14 +327,15 @@ "notification.update": "{name} redaktis afiŝon", "notifications.clear": "Forviŝi sciigojn", "notifications.clear_confirmation": "Ĉu vi certas, ke vi volas porĉiame forviŝi ĉiujn viajn sciigojn?", + "notifications.column_settings.admin.report": "Novaj raportoj:", "notifications.column_settings.admin.sign_up": "Novaj registriĝoj:", - "notifications.column_settings.alert": "Retumilaj sciigoj", + "notifications.column_settings.alert": "Sciigoj de la retumilo", "notifications.column_settings.favourite": "Preferaĵoj:", "notifications.column_settings.filter_bar.advanced": "Montri ĉiujn kategoriojn", "notifications.column_settings.filter_bar.category": "Rapida filtra breto", "notifications.column_settings.filter_bar.show_bar": "Montri la breton de filtrilo", "notifications.column_settings.follow": "Novaj sekvantoj:", - "notifications.column_settings.follow_request": "Novaj petoj de sekvado:", + "notifications.column_settings.follow_request": "Novaj demandoj de sekvado:", "notifications.column_settings.mention": "Mencioj:", "notifications.column_settings.poll": "Balotenketaj rezultoj:", "notifications.column_settings.push": "Puŝsciigoj", @@ -397,7 +399,7 @@ "report.block": "Bloki", "report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.", "report.categories.other": "Aliaj", - "report.categories.spam": "Trudaĵo", + "report.categories.spam": "Trudmesaĝo", "report.categories.violation": "Content violates one or more server rules", "report.category.subtitle": "Elektu la plej bonan kongruon", "report.category.title": "Diru al ni kio okazas pri ĉi tiu {type}", @@ -406,10 +408,10 @@ "report.close": "Farita", "report.comment.title": "Ĉu estas io alia kion vi pensas ke ni devas scii?", "report.forward": "Plusendi al {target}", - "report.forward_hint": "La konto estas de alia servilo. Ĉu vi volas sendi anoniman kopion de la informo ankaŭ al tie?", + "report.forward_hint": "La konto estas de alia servilo. Ĉu vi volas sendi anoniman kopion de la raporto ankaŭ al tie?", "report.mute": "Silentigi", "report.mute_explanation": "Vi ne vidos iliajn afiŝojn. Ili ankoraŭ povas sekvi vin kaj vidi viajn afiŝojn, kaj ne scios ke ili estas silentigitaj.", - "report.next": "Sekva", + "report.next": "Antaŭen", "report.placeholder": "Pliaj komentoj", "report.reasons.dislike": "Mi ne ŝatas ĝin", "report.reasons.dislike_description": "Ĝi ne estas io, kiun vi volas vidi", @@ -424,13 +426,18 @@ "report.statuses.subtitle": "Elektu ĉiujn, kiuj validas", "report.statuses.title": "Are there any posts that back up this report?", "report.submit": "Sendi", - "report.target": "Raporto pri {target}", + "report.target": "Raporti pri {target}", "report.thanks.take_action": "Here are your options for controlling what you see on Mastodon:", "report.thanks.take_action_actionable": "While we review this, you can take action against @{name}:", "report.thanks.title": "Ĉu vi ne volas vidi ĉi tion?", "report.thanks.title_actionable": "Dankon pro raporti, ni esploros ĉi tion.", "report.unfollow": "Malsekvi @{name}", "report.unfollow_explanation": "Vi sekvas ĉi tiun konton. Por ne plu vidi ĝiajn abonfluojn en via hejma templinio, ĉesu sekvi ĝin.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Malobservo de la regulo", + "report_notification.open": "Malfermi la raporton", "search.placeholder": "Serĉi", "search_popout.search_format": "Detala serĉo", "search_popout.tips.full_text": "Simplaj tekstoj montras la mesaĝojn, kiujn vi skribis, stelumis, diskonigis, aŭ en kiuj vi estis menciita, sed ankaŭ kongruajn uzantnomojn, montratajn nomojn, kaj kradvortojn.", @@ -459,8 +466,9 @@ "status.edited": "Redaktita {date}", "status.edited_x_times": "Redactita {count, plural, one {{count} fojon} other {{count} fojojn}}", "status.embed": "Enkorpigi", - "status.favourite": "Preferaĵo", + "status.favourite": "Aldoni al viaj preferaĵoj", "status.filtered": "Filtrita", + "status.hide": "Hide toot", "status.history.created": "{name} kreis {date}", "status.history.edited": "{name} redaktis {date}", "status.load_more": "Ŝargi pli", @@ -474,9 +482,9 @@ "status.pinned": "Alpinglita mesaĝo", "status.read_more": "Legi pli", "status.reblog": "Plusendi", - "status.reblog_private": "Plusendi kiel la originala videbleco", + "status.reblog_private": "Plusendi kun la originala videbleco", "status.reblogged_by": "{name} plusendis", - "status.reblogs.empty": "Neniu ankoraŭ plusendis la mesaĝon. Kiam iu faros tion, ili aperos ĉi tie.", + "status.reblogs.empty": "Ankoraŭ neniu plusendis la mesaĝon. Kiam iu faras tion, ili aperos ĉi tie.", "status.redraft": "Forigi kaj reskribi", "status.remove_bookmark": "Forigi legosignon", "status.reply": "Respondi", @@ -484,6 +492,7 @@ "status.report": "Raporti @{name}", "status.sensitive_warning": "Tikla enhavo", "status.share": "Kundividi", + "status.show_filter_reason": "Show anyway", "status.show_less": "Montri malpli", "status.show_less_all": "Montri malpli ĉiun", "status.show_more": "Montri pli", @@ -494,7 +503,7 @@ "status.unpin": "Depingli de profilo", "suggestions.dismiss": "Forigi la proponon", "suggestions.header": "Vi povus interesiĝi pri…", - "tabs_bar.federated_timeline": "Federata", + "tabs_bar.federated_timeline": "Fratara", "tabs_bar.home": "Hejmo", "tabs_bar.local_timeline": "Loka templinio", "tabs_bar.notifications": "Sciigoj", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 78d81b38f74..3a572524d57 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Configuración", "navigation_bar.public_timeline": "Línea temporal federada", "navigation_bar.security": "Seguridad", + "notification.admin.report": "{name} denunció a {target}", "notification.admin.sign_up": "Se registró {name}", "notification.favourite": "{name} marcó tu mensaje como favorito", "notification.follow": "{name} te empezó a seguir", @@ -326,6 +327,7 @@ "notification.update": "{name} editó un mensaje", "notifications.clear": "Limpiar notificaciones", "notifications.clear_confirmation": "¿Estás seguro que querés limpiar todas tus notificaciones permanentemente?", + "notifications.column_settings.admin.report": "Nuevas denuncias:", "notifications.column_settings.admin.sign_up": "Nuevos registros:", "notifications.column_settings.alert": "Notificaciones de escritorio", "notifications.column_settings.favourite": "Favoritos:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Gracias por tu denuncia, vamos a revisarla.", "report.unfollow": "Dejar de seguir a @{name}", "report.unfollow_explanation": "Estás siguiendo a esta cuenta. Para no ver sus mensajes en tu línea temporal principal, dejá de seguirla.", + "report_notification.attached_statuses": "{count, plural, one {{count} mensaje adjunto} other {{count} mensajes adjuntos}}", + "report_notification.categories.other": "Otros", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Violación de regla", + "report_notification.open": "Abrir denuncia", "search.placeholder": "Buscar", "search_popout.search_format": "Formato de búsqueda avanzada", "search_popout.tips.full_text": "Las búsquedas de texto simple devuelven los mensajes que escribiste, los marcados como favoritos, los adheridos o en los que te mencionaron, así como nombres de usuarios, nombres mostrados y etiquetas.", @@ -461,6 +468,7 @@ "status.embed": "Insertar", "status.favourite": "Marcar como favorito", "status.filtered": "Filtrado", + "status.hide": "Hide toot", "status.history.created": "Creado por {name} el {date}", "status.history.edited": "Editado por {name} el {date}", "status.load_more": "Cargar más", @@ -484,6 +492,7 @@ "status.report": "Denunciar a @{name}", "status.sensitive_warning": "Contenido sensible", "status.share": "Compartir", + "status.show_filter_reason": "Show anyway", "status.show_less": "Mostrar menos", "status.show_less_all": "Mostrar menos para todo", "status.show_more": "Mostrar más", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 570a031865f..0923a073439 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferencias", "navigation_bar.public_timeline": "Historia federada", "navigation_bar.security": "Seguridad", + "notification.admin.report": "{name} informó {target}", "notification.admin.sign_up": "{name} se unio", "notification.favourite": "{name} marcó tu estado como favorito", "notification.follow": "{name} te empezó a seguir", @@ -326,6 +327,7 @@ "notification.update": "{name} editó una publicación", "notifications.clear": "Limpiar notificaciones", "notifications.clear_confirmation": "¿Seguro que quieres limpiar permanentemente todas tus notificaciones?", + "notifications.column_settings.admin.report": "Nuevos informes:", "notifications.column_settings.admin.sign_up": "Registros nuevos:", "notifications.column_settings.alert": "Notificaciones de escritorio", "notifications.column_settings.favourite": "Favoritos:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Gracias por informar, estudiaremos esto.", "report.unfollow": "Dejar de seguir @{name}", "report.unfollow_explanation": "Estás siguiendo esta cuenta. Para no ver sus publicaciones en tu sección de noticias, deja de seguirlo.", + "report_notification.attached_statuses": "{count, plural, one {{count} publicación} other {{count} publicaciones}} adjunta(s)", + "report_notification.categories.other": "Otros", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Infracción de regla", + "report_notification.open": "Abrir informe", "search.placeholder": "Buscar", "search_popout.search_format": "Formato de búsqueda avanzada", "search_popout.tips.full_text": "Búsquedas de texto recuperan posts que has escrito, marcado como favoritos, retooteado o en los que has sido mencionado, así como usuarios, nombres y hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Incrustado", "status.favourite": "Favorito", "status.filtered": "Filtrado", + "status.hide": "Hide toot", "status.history.created": "{name} creó {date}", "status.history.edited": "{name} editado {date}", "status.load_more": "Cargar más", @@ -484,6 +492,7 @@ "status.report": "Reportar", "status.sensitive_warning": "Contenido sensible", "status.share": "Compartir", + "status.show_filter_reason": "Show anyway", "status.show_less": "Mostrar menos", "status.show_less_all": "Mostrar menos para todo", "status.show_more": "Mostrar más", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 0befa915306..652185a7b55 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferencias", "navigation_bar.public_timeline": "Línea de tiempo federada", "navigation_bar.security": "Seguridad", + "notification.admin.report": "{name} informó {target}", "notification.admin.sign_up": "{name} se registró", "notification.favourite": "{name} marcó tu estado como favorito", "notification.follow": "{name} te empezó a seguir", @@ -326,6 +327,7 @@ "notification.update": "{name} editó una publicación", "notifications.clear": "Limpiar notificaciones", "notifications.clear_confirmation": "¿Seguro que quieres limpiar permanentemente todas tus notificaciones?", + "notifications.column_settings.admin.report": "Nuevos informes:", "notifications.column_settings.admin.sign_up": "Nuevos registros:", "notifications.column_settings.alert": "Notificaciones de escritorio", "notifications.column_settings.favourite": "Favoritos:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Gracias por informar, estudiaremos esto.", "report.unfollow": "Dejar de seguir a @{name}", "report.unfollow_explanation": "Estás siguiendo esta cuenta. Para no ver sus publicaciones en tu muro de inicio, deja de seguirla.", + "report_notification.attached_statuses": "{count, plural, one {{count} publicación} other {{count} publicaciones}} adjunta(s)", + "report_notification.categories.other": "Otros", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Infracción de regla", + "report_notification.open": "Abrir informe", "search.placeholder": "Buscar", "search_popout.search_format": "Formato de búsqueda avanzada", "search_popout.tips.full_text": "Las búsquedas de texto recuperan publicaciones que has escrito, marcado como favoritas, retooteado o en los que has sido mencionado, así como usuarios, nombres y hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Incrustado", "status.favourite": "Favorito", "status.filtered": "Filtrado", + "status.hide": "Hide toot", "status.history.created": "{name} creó {date}", "status.history.edited": "{name} editó {date}", "status.load_more": "Cargar más", @@ -484,6 +492,7 @@ "status.report": "Reportar", "status.sensitive_warning": "Contenido sensible", "status.share": "Compartir", + "status.show_filter_reason": "Show anyway", "status.show_less": "Mostrar menos", "status.show_less_all": "Mostrar menos para todo", "status.show_more": "Mostrar más", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index eb3425f7974..2f2d29b8de8 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Eelistused", "navigation_bar.public_timeline": "Föderatiivne ajajoon", "navigation_bar.security": "Turvalisus", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} märkis Teie staatuse lemmikuks", "notification.follow": "{name} jälgib nüüd Teid", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Puhasta teated", "notifications.clear_confirmation": "Olete kindel, et soovite püsivalt kõik oma teated eemaldada?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Töölauateated", "notifications.column_settings.favourite": "Lemmikud:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Otsi", "search_popout.search_format": "Täiustatud otsiformaat", "search_popout.tips.full_text": "Lihtne tekst toob esile staatused mida olete kirjutanud, lisanud lemmikuks, upitanud või olete seal mainitud, ning lisaks veel kattuvad kasutajanimed, kuvanimed ja sildid.", @@ -461,6 +468,7 @@ "status.embed": "Sängita", "status.favourite": "Lemmik", "status.filtered": "Filtreeritud", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Lae rohkem", @@ -484,6 +492,7 @@ "status.report": "Raporteeri @{name}", "status.sensitive_warning": "Tundlik sisu", "status.share": "Jaga", + "status.show_filter_reason": "Show anyway", "status.show_less": "Näita vähem", "status.show_less_all": "Näita vähem kõigile", "status.show_more": "Näita veel", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index c8182640a3b..618b8265fa3 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Hobespenak", "navigation_bar.public_timeline": "Federatutako denbora-lerroa", "navigation_bar.security": "Segurtasuna", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} erabiltzailea erregistratu da", "notification.favourite": "{name}(e)k zure bidalketa gogoko du", "notification.follow": "{name}(e)k jarraitzen zaitu", @@ -326,6 +327,7 @@ "notification.update": "{name} erabiltzaileak bidalketa bat editatu du", "notifications.clear": "Garbitu jakinarazpenak", "notifications.clear_confirmation": "Ziur zure jakinarazpen guztiak behin betirako garbitu nahi dituzula?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "Izen-emate berriak:", "notifications.column_settings.alert": "Mahaigaineko jakinarazpenak", "notifications.column_settings.favourite": "Gogokoak:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Mila esker salaketagatik, berrikusiko dugu.", "report.unfollow": "@{name} jarraitzeari utzi", "report.unfollow_explanation": "Kontu hau jarraitzen ari zara. Zure denbora-lerro nagusian bere bidalketak ez ikusteko, jarraitzeari utzi.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Bilatu", "search_popout.search_format": "Bilaketa aurreratuaren formatua", "search_popout.tips.full_text": "Testu hutsarekin zuk idatzitako bidalketak, gogokoak, bultzadak edo aipamenak aurkitu ditzakezu, bat datozen erabiltzaile-izenak, pantaila-izenak, eta traolak.", @@ -461,6 +468,7 @@ "status.embed": "Txertatu", "status.favourite": "Gogokoa", "status.filtered": "Iragazita", + "status.hide": "Hide toot", "status.history.created": "{name} erabiltzaileak sortua {date}", "status.history.edited": "{name} erabiltzaileak editatua {date}", "status.load_more": "Kargatu gehiago", @@ -484,6 +492,7 @@ "status.report": "Salatu @{name}", "status.sensitive_warning": "Kontuz: Eduki hunkigarria", "status.share": "Partekatu", + "status.show_filter_reason": "Show anyway", "status.show_less": "Erakutsi gutxiago", "status.show_less_all": "Erakutsi denetarik gutxiago", "status.show_more": "Erakutsi gehiago", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index c76c596ebf2..99621747e2e 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "ترجیحات", "navigation_bar.public_timeline": "خط زمانی همگانی", "navigation_bar.security": "امنیت", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} ثبت نام کرد", "notification.favourite": "‫{name}‬ فرسته‌تان را پسندید", "notification.follow": "‫{name}‬ پی‌گیرتان شد", @@ -326,6 +327,7 @@ "notification.update": "{name} فرسته‌ای را ویرایش کرد", "notifications.clear": "پاک‌سازی آگاهی‌ها", "notifications.clear_confirmation": "مطمئنید می‌خواهید همهٔ آگاهی‌هایتان را برای همیشه پاک کنید؟", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "ثبت نام‌های جدید:", "notifications.column_settings.alert": "آگاهی‌های میزکار", "notifications.column_settings.favourite": "پسندیده‌ها:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "ممنون بابت گزارش، ما آن را بررسی خواهیم کرد.", "report.unfollow": "ناپی‌گیری ‎@{name}", "report.unfollow_explanation": "شما این حساب را پی‌گرفته‌اید، برای اینکه دیگر فرسته‌هایش را در خوراک خانه‌تان نبینید؛ آن را پی‌نگیرید.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "جست‌وجو", "search_popout.search_format": "راهنمای جست‌وجوی پیشرفته", "search_popout.tips.full_text": "جست‌وجوی متنی ساده فرسته‌هایی که نوشته، پسندیده، تقویت‌کرده یا در آن‌ها نام‌برده شده‌اید را به علاوهٔ نام‌های کاربری، نام‌های نمایشی و برچسب‌ها برمی‌گرداند.", @@ -461,6 +468,7 @@ "status.embed": "جاسازی", "status.favourite": "پسندیدن", "status.filtered": "پالوده", + "status.hide": "Hide toot", "status.history.created": "توسط {name} در {date} ایجاد شد", "status.history.edited": "توسط {name} در {date} ویرایش شد", "status.load_more": "بار کردن بیش‌تر", @@ -484,6 +492,7 @@ "status.report": "گزارش ‎@{name}", "status.sensitive_warning": "محتوای حساس", "status.share": "هم‌رسانی", + "status.show_filter_reason": "Show anyway", "status.show_less": "نمایش کمتر", "status.show_less_all": "نمایش کمتر همه", "status.show_more": "نمایش بیشتر", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index fb3725664a4..a423d1f0212 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Asetukset", "navigation_bar.public_timeline": "Yleinen aikajana", "navigation_bar.security": "Turvallisuus", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} rekisteröitynyt", "notification.favourite": "{name} tykkäsi viestistäsi", "notification.follow": "{name} seurasi sinua", @@ -326,6 +327,7 @@ "notification.update": "{name} muokkasi viestiä", "notifications.clear": "Tyhjennä ilmoitukset", "notifications.clear_confirmation": "Haluatko varmasti poistaa kaikki ilmoitukset pysyvästi?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "Uudet kirjautumiset:", "notifications.column_settings.alert": "Työpöytäilmoitukset", "notifications.column_settings.favourite": "Tykkäykset:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Kiitos raportista, tutkimme asiaa.", "report.unfollow": "Lopeta seuraaminen @{name}", "report.unfollow_explanation": "Seuraat tätä tiliä. Jotta et enää näkisi heidän kirjoituksiaan, lopeta niiden seuraaminen.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Hae", "search_popout.search_format": "Tarkennettu haku", "search_popout.tips.full_text": "Tekstihaku listaa tilapäivitykset, jotka olet kirjoittanut, lisännyt suosikkeihisi, boostannut tai joissa sinut mainitaan, sekä tekstin sisältävät käyttäjänimet, nimimerkit ja hastagit.", @@ -461,6 +468,7 @@ "status.embed": "Upota", "status.favourite": "Tykkää", "status.filtered": "Suodatettu", + "status.hide": "Hide toot", "status.history.created": "{name} luotu {date}", "status.history.edited": "{name} muokkasi {date}", "status.load_more": "Lataa lisää", @@ -484,6 +492,7 @@ "status.report": "Raportoi @{name}", "status.sensitive_warning": "Arkaluontoista sisältöä", "status.share": "Jaa", + "status.show_filter_reason": "Show anyway", "status.show_less": "Näytä vähemmän", "status.show_less_all": "Näytä vähemmän kaikista", "status.show_more": "Näytä lisää", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 0d8759e25e3..d1cebafd24e 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Préférences", "navigation_bar.public_timeline": "Fil public global", "navigation_bar.security": "Sécurité", + "notification.admin.report": "{name} a signalé {target}", "notification.admin.sign_up": "{name} s'est inscrit·e", "notification.favourite": "{name} a ajouté le message à ses favoris", "notification.follow": "{name} vous suit", @@ -326,6 +327,7 @@ "notification.update": "{name} a modifié un message", "notifications.clear": "Effacer les notifications", "notifications.clear_confirmation": "Voulez-vous vraiment effacer toutes vos notifications ?", + "notifications.column_settings.admin.report": "Nouveaux signalements :", "notifications.column_settings.admin.sign_up": "Nouvelles inscriptions :", "notifications.column_settings.alert": "Notifications du navigateur", "notifications.column_settings.favourite": "Favoris :", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Merci pour votre signalement, nous allons investiguer.", "report.unfollow": "Ne plus suivre @{name}", "report.unfollow_explanation": "Vous suivez ce compte. Désabonnez-vous pour ne plus en voir les messages sur votre fil principal.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Autre", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Infraction aux règles du serveur", + "report_notification.open": "Ouvrir le signalement", "search.placeholder": "Rechercher", "search_popout.search_format": "Recherche avancée", "search_popout.tips.full_text": "Un texte normal retourne les messages que vous avez écrits, ajoutés à vos favoris, partagés, ou vous mentionnant, ainsi que les identifiants, les noms affichés, et les hashtags des personnes et messages correspondants.", @@ -461,6 +468,7 @@ "status.embed": "Intégrer", "status.favourite": "Ajouter aux favoris", "status.filtered": "Filtré", + "status.hide": "Hide toot", "status.history.created": "créé par {name} {date}", "status.history.edited": "édité par {name} {date}", "status.load_more": "Charger plus", @@ -484,6 +492,7 @@ "status.report": "Signaler @{name}", "status.sensitive_warning": "Contenu sensible", "status.share": "Partager", + "status.show_filter_reason": "Show anyway", "status.show_less": "Replier", "status.show_less_all": "Tout replier", "status.show_more": "Déplier", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index f8485270a55..dd361b995e5 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Foarkarren", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} hat harren ynskreaun", "notification.favourite": "{name} hat jo berjocht as favoryt markearre", "notification.follow": "{name} folget jo", @@ -326,6 +327,7 @@ "notification.update": "{name} hat in berjocht feroare", "notifications.clear": "Notifikaasjes leegje", "notifications.clear_confirmation": "Wolle jo al jo notifikaasjes werklik foar ivich fuortsmite?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "Nije ynskriuwingen:", "notifications.column_settings.alert": "Desktop notifikaasjes", "notifications.column_settings.favourite": "Favoriten:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Search", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Ynslute", "status.favourite": "Favorite", "status.filtered": "Filtere", + "status.hide": "Hide toot", "status.history.created": "{name} makke dit {date}", "status.history.edited": "{name} feroare dit {date}", "status.load_more": "Load more", @@ -484,6 +492,7 @@ "status.report": "Jou @{name} oan", "status.sensitive_warning": "Sensitive content", "status.share": "Diele", + "status.show_filter_reason": "Show anyway", "status.show_less": "Minder sjen litte", "status.show_less_all": "Foar alles minder sjen litte", "status.show_more": "Mear sjen litte", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 2d2551845a2..f036e9b08c0 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferences", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "Roghnaigh {name} do phostáil", "notification.follow": "Lean {name} thú", @@ -326,6 +327,7 @@ "notification.update": "Chuir {name} postáil in eagar", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Roghanna:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Cuardaigh", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Embed", "status.favourite": "Rogha", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "Curtha in eagar ag {name} in {date}", "status.load_more": "Load more", @@ -484,6 +492,7 @@ "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", "status.share": "Share", + "status.show_filter_reason": "Show anyway", "status.show_less": "Show less", "status.show_less_all": "Show less for all", "status.show_more": "Show more", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index bdfc02af750..a0127c5784a 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Roghainnean", "navigation_bar.public_timeline": "Loidhne-ama cho-naisgte", "navigation_bar.security": "Tèarainteachd", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "Chlàraich {name}", "notification.favourite": "Is annsa le {name} am post agad", "notification.follow": "Tha {name} a’ leantainn ort a-nis", @@ -326,6 +327,7 @@ "notification.update": "Dheasaich {name} post", "notifications.clear": "Falamhaich na brathan", "notifications.clear_confirmation": "A bheil thu cinnteach gu bheil thu airson na brathan uile agad fhalamhachadh gu buan?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "Clàraidhean ùra:", "notifications.column_settings.alert": "Brathan deasga", "notifications.column_settings.favourite": "Na h-annsachdan:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Mòran taing airson a’ ghearain, bheir sinn sùil air.", "report.unfollow": "Na lean air @{name} tuilleadh", "report.unfollow_explanation": "Tha thu a’ leantainn air a’ chunntas seo. Sgur de leantainn orra ach nach fhaic thu na puist aca air inbhir na dachaigh agad.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Lorg", "search_popout.search_format": "Fòrmat adhartach an luirg", "search_popout.tips.full_text": "Bheir teacsa sìmplidh dhut na postaichean a sgrìobh thu, a tha nan annsachdan dhut, a bhrosnaich thu no san deach iomradh a thoirt ort cho math ri ainmean-cleachdaiche, ainmean taisbeanaidh agus tagaichean hais a mhaidsicheas.", @@ -461,6 +468,7 @@ "status.embed": "Leabaich", "status.favourite": "Cuir ris na h-annsachdan", "status.filtered": "Criathraichte", + "status.hide": "Hide toot", "status.history.created": "Chruthaich {name} {date} e", "status.history.edited": "Dheasaich {name} {date} e", "status.load_more": "Luchdaich barrachd dheth", @@ -484,6 +492,7 @@ "status.report": "Dèan gearan mu @{name}", "status.sensitive_warning": "Susbaint fhrionasach", "status.share": "Co-roinn", + "status.show_filter_reason": "Show anyway", "status.show_less": "Seall nas lugha dheth", "status.show_less_all": "Seall nas lugha dhen a h-uile", "status.show_more": "Seall barrachd dheth", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 01fd9a567ef..2dc7070d2a1 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferencias", "navigation_bar.public_timeline": "Cronoloxía federada", "navigation_bar.security": "Seguranza", + "notification.admin.report": "{name} denunciou a {target}", "notification.admin.sign_up": "{name} rexistrouse", "notification.favourite": "{name} marcou a túa publicación como favorita", "notification.follow": "{name} comezou a seguirte", @@ -326,6 +327,7 @@ "notification.update": "{name} editou unha publicación", "notifications.clear": "Limpar notificacións", "notifications.clear_confirmation": "Tes a certeza de querer limpar de xeito permanente todas as túas notificacións?", + "notifications.column_settings.admin.report": "Novas denuncias:", "notifications.column_settings.admin.sign_up": "Novas usuarias:", "notifications.column_settings.alert": "Notificacións de escritorio", "notifications.column_settings.favourite": "Favoritos:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Grazas pola denuncia, investigarémola.", "report.unfollow": "Non seguir a @{name}", "report.unfollow_explanation": "Estás a seguir esta conta. Deixar de ver as súas publicacións na túa cronoloxía, non seguila.", + "report_notification.attached_statuses": "Achegou {count, plural, one {{count} publicación} other {{count} publicacións}}", + "report_notification.categories.other": "Outro", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Faltou ás regras", + "report_notification.open": "Abrir a denuncia", "search.placeholder": "Procurar", "search_popout.search_format": "Formato de procura avanzada", "search_popout.tips.full_text": "Texto simple devolve toots que ti escribiches, promoviches, marcaches favoritos, ou foches mencionada, así como nomes de usuaria coincidentes, nomes públicos e cancelos.", @@ -461,6 +468,7 @@ "status.embed": "Incrustar", "status.favourite": "Favorito", "status.filtered": "Filtrado", + "status.hide": "Hide toot", "status.history.created": "{name} creouno o {date}", "status.history.edited": "{name} editouno o {date}", "status.load_more": "Cargar máis", @@ -484,6 +492,7 @@ "status.report": "Denunciar @{name}", "status.sensitive_warning": "Contido sensíbel", "status.share": "Compartir", + "status.show_filter_reason": "Show anyway", "status.show_less": "Amosar menos", "status.show_less_all": "Amosar menos para todos", "status.show_more": "Amosar máis", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index ecbc373c62e..5d71113e41d 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "העדפות", "navigation_bar.public_timeline": "ציר זמן בין-קהילתי", "navigation_bar.security": "אבטחה", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} נרשמו", "notification.favourite": "חצרוצך חובב על ידי {name}", "notification.follow": "{name} במעקב אחרייך", @@ -321,11 +322,12 @@ "notification.mention": "אוזכרת על ידי {name}", "notification.own_poll": "הסקר שלך הסתיים", "notification.poll": "סקר שהצבעת בו הסתיים", - "notification.reblog": "חצרוצך הודהד על ידי {name}", + "notification.reblog": "הפוסט הזה הודהד על ידי {name}", "notification.status": "{name} הרגע פרסמו", "notification.update": "{name} ערכו פוסט", "notifications.clear": "הסרת התראות", "notifications.clear_confirmation": "להסיר את כל ההתראות? בטוח?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "הרשמות חדשות:", "notifications.column_settings.alert": "התראות לשולחן העבודה", "notifications.column_settings.favourite": "מחובבים:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "תודה על הדיווח, נבדוק את העניין.", "report.unfollow": "הפסיקו לעקוב אחרי @{name}", "report.unfollow_explanation": "אתם עוקבים אחרי החשבון הזה. כדי להפסיק לראות את הפרסומים שלו בפיד הבית שלכם, הפסיקו לעקוב אחריהם.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "חיפוש", "search_popout.search_format": "מבנה חיפוש מתקדם", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "הטמעה", "status.favourite": "חיבוב", "status.filtered": "סונן", + "status.hide": "Hide toot", "status.history.created": "{name} יצר/ה {date}", "status.history.edited": "{name} ערך/ה {date}", "status.load_more": "עוד", @@ -475,7 +483,7 @@ "status.read_more": "לקרוא עוד", "status.reblog": "הדהוד", "status.reblog_private": "להדהד ברמת הנראות המקורית", - "status.reblogged_by": "הודהד על ידי {name}", + "status.reblogged_by": "{name} הידהד/ה:", "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", "status.redraft": "מחיקה ועריכה מחדש", "status.remove_bookmark": "הסרת סימניה", @@ -484,6 +492,7 @@ "status.report": "דיווח על @{name}", "status.sensitive_warning": "תוכן רגיש", "status.share": "שיתוף", + "status.show_filter_reason": "Show anyway", "status.show_less": "הראה פחות", "status.show_less_all": "להציג פחות מהכל", "status.show_more": "הראה יותר", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index df00850670d..0ff1fc7a16f 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferences", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} favourited your status", "notification.follow": "{name} followed you", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favourites:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "खोजें", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Embed", "status.favourite": "Favourite", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Load more", @@ -484,6 +492,7 @@ "status.report": "Report @{name}", "status.sensitive_warning": "संवेदनशील विषय वस्तु", "status.share": "शेयर करें", + "status.show_filter_reason": "Show anyway", "status.show_less": "कम दिखाएँ", "status.show_less_all": "Show less for all", "status.show_more": "और दिखाएँ", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 1ed57960e29..56678d12a95 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Postavke", "navigation_bar.public_timeline": "Federalna vremenska crta", "navigation_bar.security": "Sigurnost", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} je favorizirao/la Vaš toot", "notification.follow": "{name} Vas je počeo/la pratiti", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Očisti obavijesti", "notifications.clear_confirmation": "Želite li zaista trajno očistiti sve Vaše obavijesti?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Obavijesti radne površine", "notifications.column_settings.favourite": "Favoriti:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Traži", "search_popout.search_format": "Format naprednog pretraživanja", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Embed", "status.favourite": "Označi favoritom", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Učitaj više", @@ -484,6 +492,7 @@ "status.report": "Prijavi @{name}", "status.sensitive_warning": "Osjetljiv sadržaj", "status.share": "Podijeli", + "status.show_filter_reason": "Show anyway", "status.show_less": "Pokaži manje", "status.show_less_all": "Show less for all", "status.show_more": "Pokaži više", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 403e9edfeb5..530feba2cd0 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Beállítások", "navigation_bar.public_timeline": "Föderációs idővonal", "navigation_bar.security": "Biztonság", + "notification.admin.report": "{name} jelentette: {target}", "notification.admin.sign_up": "{name} regisztrált", "notification.favourite": "{name} kedvencnek jelölte a bejegyzésedet", "notification.follow": "{name} követ téged", @@ -326,6 +327,7 @@ "notification.update": "{name} szerkesztett egy bejegyzést", "notifications.clear": "Értesítések törlése", "notifications.clear_confirmation": "Biztos, hogy véglegesen törölni akarod az összes értesítésed?", + "notifications.column_settings.admin.report": "Új jelentések:", "notifications.column_settings.admin.sign_up": "Új regisztrálók:", "notifications.column_settings.alert": "Asztali értesítések", "notifications.column_settings.favourite": "Kedvencek:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Köszönjük, hogy jelentetted, megnézzük.", "report.unfollow": "@{name} követésének leállítása", "report.unfollow_explanation": "Követed ezt a fiókot. Hogy ne lásd a bejegyzéseit a saját idővonaladon, szüntesd meg a követését.", + "report_notification.attached_statuses": "{count} bejegyzés mellékelve", + "report_notification.categories.other": "Egyéb", + "report_notification.categories.spam": "Kéretlen üzenet", + "report_notification.categories.violation": "Szabálysértés", + "report_notification.open": "Bejelentés megnyitása", "search.placeholder": "Keresés", "search_popout.search_format": "Speciális keresés", "search_popout.tips.full_text": "Egyszerű szöveg, mely általad írt, kedvencnek jelölt vagy megtolt bejegyzéseket, rólad szóló megemlítéseket, felhasználói neveket, megjelenített neveket, hashtageket ad majd vissza.", @@ -461,6 +468,7 @@ "status.embed": "Beágyazás", "status.favourite": "Kedvenc", "status.filtered": "Megszűrt", + "status.hide": "Hide toot", "status.history.created": "{name} létrehozta: {date}", "status.history.edited": "{name} szerkesztette: {date}", "status.load_more": "Többet", @@ -484,6 +492,7 @@ "status.report": "@{name} bejelentése", "status.sensitive_warning": "Kényes tartalom", "status.share": "Megosztás", + "status.show_filter_reason": "Show anyway", "status.show_less": "Kevesebb megjelenítése", "status.show_less_all": "Kevesebbet mindenhol", "status.show_more": "Többet", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 7d80b18d8fb..866a6a2cf3b 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Նախապատուութիւններ", "navigation_bar.public_timeline": "Դաշնային հոսք", "navigation_bar.security": "Անվտանգութիւն", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name}-ը գրանցուած է", "notification.favourite": "{name} հաւանեց գրառումդ", "notification.follow": "{name} սկսեց հետեւել քեզ", @@ -326,6 +327,7 @@ "notification.update": "{name}-ը փոխել է գրառումը", "notifications.clear": "Մաքրել ծանուցումները", "notifications.clear_confirmation": "Վստա՞հ ես, որ ուզում ես մշտապէս մաքրել քո բոլոր ծանուցումները։", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "Նոր գրանցումներ՝", "notifications.column_settings.alert": "Աշխատատիրոյթի ծանուցումներ", "notifications.column_settings.favourite": "Հաւանածներից՝", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Փնտրել", "search_popout.search_format": "Փնտրելու առաջադէմ ձեւ", "search_popout.tips.full_text": "Պարզ տեքստը վերադարձնում է գրառումներդ, հաւանածներդ, տարածածներդ, որտեղ ես նշուած եղել, ինչպէս նաեւ նման օգտանուններ, անուններ եւ պիտակներ։", @@ -461,6 +468,7 @@ "status.embed": "Ներդնել", "status.favourite": "Հաւանել", "status.filtered": "Զտուած", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Բեռնել աւելին", @@ -484,6 +492,7 @@ "status.report": "Բողոքել @{name}֊ից", "status.sensitive_warning": "Կասկածելի բովանդակութիւն", "status.share": "Կիսուել", + "status.show_filter_reason": "Show anyway", "status.show_less": "Պակաս", "status.show_less_all": "Թաքցնել բոլոր նախազգուշացնումները", "status.show_more": "Աւելին", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 10f80ee6165..04fe5213b35 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Pengaturan", "navigation_bar.public_timeline": "Linimasa gabungan", "navigation_bar.security": "Keamanan", + "notification.admin.report": "{name} melaporkan {target}", "notification.admin.sign_up": "{name} mendaftar", "notification.favourite": "{name} menyukai status anda", "notification.follow": "{name} mengikuti anda", @@ -326,6 +327,7 @@ "notification.update": "{name} mengedit kiriman", "notifications.clear": "Hapus notifikasi", "notifications.clear_confirmation": "Apa anda yakin hendak menghapus semua notifikasi anda?", + "notifications.column_settings.admin.report": "Laporan baru:", "notifications.column_settings.admin.sign_up": "Pendaftaran baru:", "notifications.column_settings.alert": "Notifikasi desktop", "notifications.column_settings.favourite": "Favorit:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Terima kasih atas pelaporan Anda, kami akan memeriksa ini lebih lanjut.", "report.unfollow": "Berhenti mengikuti @{name}", "report.unfollow_explanation": "Anda mengikuti akun ini. Untuk tidak melihat postingan mereka di Beranda Anda, berhenti mengikuti mereka.", + "report_notification.attached_statuses": "{count, plural, other {{count} postingan}} terlampir", + "report_notification.categories.other": "Lainnya", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Pelanggaran peraturan", + "report_notification.open": "Buka laporan", "search.placeholder": "Pencarian", "search_popout.search_format": "Format pencarian mahir", "search_popout.tips.full_text": "Teks simpel menampilkan status yang Anda tulis, favoritkan, boost-kan, atau status yang menyebut Anda, serta nama pengguna, nama yang ditampilkan, dan tagar yang cocok.", @@ -461,6 +468,7 @@ "status.embed": "Tanam", "status.favourite": "Difavoritkan", "status.filtered": "Disaring", + "status.hide": "Hide toot", "status.history.created": "{name} membuat pada {date}", "status.history.edited": "{name} mengedit pada {date}", "status.load_more": "Tampilkan semua", @@ -484,6 +492,7 @@ "status.report": "Laporkan @{name}", "status.sensitive_warning": "Konten sensitif", "status.share": "Bagikan", + "status.show_filter_reason": "Show anyway", "status.show_less": "Tampilkan lebih sedikit", "status.show_less_all": "Tampilkan lebih sedikit", "status.show_more": "Tampilkan semua", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 3eea9dcca8d..bc596e7fdb4 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferi", "navigation_bar.public_timeline": "Federata tempolineo", "navigation_bar.security": "Sekureso", + "notification.admin.report": "{name} raportizis {target}", "notification.admin.sign_up": "{name} registresis", "notification.favourite": "{name} favorizis tua mesajo", "notification.follow": "{name} sequeskis tu", @@ -326,6 +327,7 @@ "notification.update": "{name} modifikis posto", "notifications.clear": "Efacar savigi", "notifications.clear_confirmation": "Ka tu esas certa, ke tu volas efacar omna tua savigi?", + "notifications.column_settings.admin.report": "Nova raporti:", "notifications.column_settings.admin.sign_up": "Nova registranti:", "notifications.column_settings.alert": "Desktopavizi", "notifications.column_settings.favourite": "Favorati:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Danko por raportizar, ni kontrolos co.", "report.unfollow": "Desequez @{name}", "report.unfollow_explanation": "Vu sequas ca konto. Por ne vidar olia posti en vua hemniuzeto pluse, desequez oli.", + "report_notification.attached_statuses": "{count, plural,one {{count} posti} other {{count} posti}} adjuntesas", + "report_notification.categories.other": "Altra", + "report_notification.categories.spam": "Spamo", + "report_notification.categories.violation": "Regulnesequo", + "report_notification.open": "Apertez raporto", "search.placeholder": "Serchez", "search_popout.search_format": "Avancata trovformato", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Eninsertez", "status.favourite": "Favorizar", "status.filtered": "Filtrita", + "status.hide": "Hide toot", "status.history.created": "{name} kreis ye {date}", "status.history.edited": "{name} modifikis ye {date}", "status.load_more": "Kargar pluse", @@ -484,6 +492,7 @@ "status.report": "Denuncar @{name}", "status.sensitive_warning": "Trubliva kontenajo", "status.share": "Partigez", + "status.show_filter_reason": "Show anyway", "status.show_less": "Montrar mine", "status.show_less_all": "Montrez min por omno", "status.show_more": "Montrar plue", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 2cdf3c2c06b..a03fa35ae68 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Kjörstillingar", "navigation_bar.public_timeline": "Sameiginleg tímalína", "navigation_bar.security": "Öryggi", + "notification.admin.report": "{name} kærði {target}", "notification.admin.sign_up": "{name} skráði sig", "notification.favourite": "{name} setti færslu þína í eftirlæti", "notification.follow": "{name} fylgist með þér", @@ -326,6 +327,7 @@ "notification.update": "{name} breytti færslu", "notifications.clear": "Hreinsa tilkynningar", "notifications.clear_confirmation": "Ertu viss um að þú viljir endanlega eyða öllum tilkynningunum þínum?", + "notifications.column_settings.admin.report": "Nýjar kærur:", "notifications.column_settings.admin.sign_up": "Nýjar skráningar:", "notifications.column_settings.alert": "Tilkynningar á skjáborði", "notifications.column_settings.favourite": "Eftirlæti:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Takk fyrir tilkynninguna, við munum skoða málið.", "report.unfollow": "Hætta að fylgjast með @{name}", "report.unfollow_explanation": "Þú ert að fylgjast með þessum aðgangi. Til að hætta að sjá viðkomandi færslur á streyminu þínu, skaltu hætta að fylgjast með viðkomandi.", + "report_notification.attached_statuses": "{count, plural, one {{count} færsla} other {{count} færslur}} viðhengdar", + "report_notification.categories.other": "Annað", + "report_notification.categories.spam": "Ruslpóstur", + "report_notification.categories.violation": "Brot á reglum", + "report_notification.open": "Opin kæra", "search.placeholder": "Leita", "search_popout.search_format": "Snið ítarlegrar leitar", "search_popout.tips.full_text": "Einfaldur texti skilar færslum sem þú hefur skrifað, sett í eftirlæti, endurbirt eða verið minnst á þig í, ásamt samsvarandi birtingarnöfnum, notendanöfnum og myllumerkjum.", @@ -461,6 +468,7 @@ "status.embed": "Ívefja", "status.favourite": "Eftirlæti", "status.filtered": "Síað", + "status.hide": "Hide toot", "status.history.created": "{name} útbjó {date}", "status.history.edited": "{name} breytti {date}", "status.load_more": "Hlaða inn meiru", @@ -484,6 +492,7 @@ "status.report": "Kæra @{name}", "status.sensitive_warning": "Viðkvæmt efni", "status.share": "Deila", + "status.show_filter_reason": "Show anyway", "status.show_less": "Sýna minna", "status.show_less_all": "Sýna minna fyrir allt", "status.show_more": "Sýna meira", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index d2831624227..85d71608de1 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Impostazioni", "navigation_bar.public_timeline": "Timeline federata", "navigation_bar.security": "Sicurezza", + "notification.admin.report": "{name} ha segnalato {target}", "notification.admin.sign_up": "{name} si è iscritto", "notification.favourite": "{name} ha apprezzato il tuo post", "notification.follow": "{name} ha iniziato a seguirti", @@ -326,6 +327,7 @@ "notification.update": "{name} ha modificato un post", "notifications.clear": "Cancella notifiche", "notifications.clear_confirmation": "Vuoi davvero cancellare tutte le notifiche?", + "notifications.column_settings.admin.report": "Nuove segnalazioni:", "notifications.column_settings.admin.sign_up": "Nuove iscrizioni:", "notifications.column_settings.alert": "Notifiche desktop", "notifications.column_settings.favourite": "Apprezzati:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Grazie per la segnalazione, controlleremo il problema.", "report.unfollow": "Non seguire più @{name}", "report.unfollow_explanation": "Stai seguendo questo account. Per non vedere più i suoi post nel tuo feed home, smetti di seguirlo.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} post}} allegati", + "report_notification.categories.other": "Altro", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Violazione delle regole", + "report_notification.open": "Apri segnalazione", "search.placeholder": "Cerca", "search_popout.search_format": "Formato di ricerca avanzato", "search_popout.tips.full_text": "Testo semplice per trovare gli status che hai scritto, segnato come apprezzati, condiviso o in cui sei stato citato, e inoltre i nomi utente, nomi visualizzati e hashtag che lo contengono.", @@ -461,6 +468,7 @@ "status.embed": "Incorpora", "status.favourite": "Apprezzato", "status.filtered": "Filtrato", + "status.hide": "Hide toot", "status.history.created": "{name} ha creato {date}", "status.history.edited": "{name} ha modificato {date}", "status.load_more": "Mostra di più", @@ -484,6 +492,7 @@ "status.report": "Segnala @{name}", "status.sensitive_warning": "Materiale sensibile", "status.share": "Condividi", + "status.show_filter_reason": "Show anyway", "status.show_less": "Mostra meno", "status.show_less_all": "Mostra meno per tutti", "status.show_more": "Mostra di più", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 95d35c0ef39..a9e0d722adb 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "ユーザー設定", "navigation_bar.public_timeline": "連合タイムライン", "navigation_bar.security": "セキュリティ", + "notification.admin.report": "{name}さんが{target}さんを通報しました", "notification.admin.sign_up": "{name}さんがサインアップしました", "notification.favourite": "{name}さんがあなたの投稿をお気に入りに登録しました", "notification.follow": "{name}さんにフォローされました", @@ -326,6 +327,7 @@ "notification.update": "{name}さんが投稿を編集しました", "notifications.clear": "通知を消去", "notifications.clear_confirmation": "本当に通知を消去しますか?", + "notifications.column_settings.admin.report": "新しい通報:", "notifications.column_settings.admin.sign_up": "新規登録:", "notifications.column_settings.alert": "デスクトップ通知", "notifications.column_settings.favourite": "お気に入り:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "ご報告ありがとうございます、追って確認します。", "report.unfollow": "@{name}さんのフォローを解除", "report.unfollow_explanation": "このアカウントをフォローしています。ホームフィードに彼らの投稿を表示しないようにするには、彼らのフォローを外してください。", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "その他", + "report_notification.categories.spam": "スパム", + "report_notification.categories.violation": "ルール違反", + "report_notification.open": "通報を開く", "search.placeholder": "検索", "search_popout.search_format": "高度な検索フォーマット", "search_popout.tips.full_text": "表示名やユーザー名、ハッシュタグのほか、あなたの投稿やお気に入り、ブーストした投稿、返信に一致する単純なテキスト。", @@ -461,6 +468,7 @@ "status.embed": "埋め込み", "status.favourite": "お気に入り", "status.filtered": "フィルターされました", + "status.hide": "Hide toot", "status.history.created": "{name}さんが{date}に作成", "status.history.edited": "{name}さんが{date}に編集", "status.load_more": "もっと見る", @@ -484,6 +492,7 @@ "status.report": "@{name}さんを通報", "status.sensitive_warning": "閲覧注意", "status.share": "共有", + "status.show_filter_reason": "Show anyway", "status.show_less": "隠す", "status.show_less_all": "全て隠す", "status.show_more": "もっと見る", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index d97673fc4c8..047cdab85ab 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "პრეფერენსიები", "navigation_bar.public_timeline": "ფედერალური თაიმლაინი", "navigation_bar.security": "უსაფრთხოება", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name}-მა თქვენი სტატუსი აქცია ფავორიტად", "notification.follow": "{name} გამოგყვათ", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "შეტყობინებების გასუფთავება", "notifications.clear_confirmation": "დარწმუნებული ხართ, გსურთ სამუდამოდ წაშალოთ ყველა თქვენი შეტყობინება?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "დესკტოპ შეტყობინებები", "notifications.column_settings.favourite": "ფავორიტები:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "ძებნა", "search_popout.search_format": "დეტალური ძებნის ფორმა", "search_popout.tips.full_text": "მარტივი ტექსტი აბრუნებს სტატუსებს რომლებიც შექმენით, აქციეთ ფავორიტად, დაბუსტეთ, ან რაშიც ასახელეთ, ასევე ემთხვევა მომხმარებლის სახელებს, დისპლეი სახელებს, და ჰეშტეგებს.", @@ -461,6 +468,7 @@ "status.embed": "ჩართვა", "status.favourite": "ფავორიტი", "status.filtered": "ფილტრირებული", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "მეტის ჩატვირთვა", @@ -484,6 +492,7 @@ "status.report": "დაარეპორტე @{name}", "status.sensitive_warning": "მგრძნობიარე კონტენტი", "status.share": "გაზიარება", + "status.show_filter_reason": "Show anyway", "status.show_less": "აჩვენე ნაკლები", "status.show_less_all": "აჩვენე ნაკლები ყველაზე", "status.show_more": "აჩვენე მეტი", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index b19bb8e4995..57e6bf0d15c 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Imenyafen", "navigation_bar.public_timeline": "Tasuddemt tazayezt tamatut", "navigation_bar.security": "Taɣellist", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} yesmenyef tasuffeɣt-ik·im", "notification.follow": "{name} yeṭṭafaṛ-ik", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Sfeḍ tilɣa", "notifications.clear_confirmation": "Tebɣiḍ s tidet ad tekkseḍ akk tilɣa-inek·em i lebda?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Tilɣa n tnarit", "notifications.column_settings.favourite": "Ismenyifen:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Nadi", "search_popout.search_format": "Anadi yenneflin", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Seddu", "status.favourite": "Rnu ɣer yismenyifen", "status.filtered": "Yettwasizdeg", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Sali ugar", @@ -484,6 +492,7 @@ "status.report": "Cetki ɣef @{name}", "status.sensitive_warning": "Agbur amḥulfu", "status.share": "Bḍu", + "status.show_filter_reason": "Show anyway", "status.show_less": "Ssken-d drus", "status.show_less_all": "Semẓi akk tisuffγin", "status.show_more": "Ssken-d ugar", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index 1364311ac3f..c5459baf32f 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Басымдықтар", "navigation_bar.public_timeline": "Жаһандық желі", "navigation_bar.security": "Қауіпсіздік", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} жазбаңызды таңдаулыға қосты", "notification.follow": "{name} сізге жазылды", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Ескертпелерді тазарт", "notifications.clear_confirmation": "Шынымен барлық ескертпелерді өшіресіз бе?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Үстел ескертпелері", "notifications.column_settings.favourite": "Таңдаулылар:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Іздеу", "search_popout.search_format": "Кеңейтілген іздеу форматы", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, bоosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Embеd", "status.favourite": "Таңдаулы", "status.filtered": "Фильтрленген", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Тағы әкел", @@ -484,6 +492,7 @@ "status.report": "Шағым @{name}", "status.sensitive_warning": "Нәзік контент", "status.share": "Бөлісу", + "status.show_filter_reason": "Show anyway", "status.show_less": "Аздап көрсет", "status.show_less_all": "Бәрін аздап көрсет", "status.show_more": "Толығырақ", diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json index 630431d391c..3e0649ba140 100644 --- a/app/javascript/mastodon/locales/kn.json +++ b/app/javascript/mastodon/locales/kn.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferences", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} favourited your status", "notification.follow": "{name} followed you", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favourites:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Search", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Embed", "status.favourite": "Favourite", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Load more", @@ -484,6 +492,7 @@ "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", "status.share": "Share", + "status.show_filter_reason": "Show anyway", "status.show_less": "Show less", "status.show_less_all": "Show less for all", "status.show_more": "Show more", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 34fabbacf60..6f709752a35 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "사용자 설정", "navigation_bar.public_timeline": "연합 타임라인", "navigation_bar.security": "보안", + "notification.admin.report": "{name} 님이 {target}를 신고했습니다", "notification.admin.sign_up": "{name} 님이 가입했습니다", "notification.favourite": "{name} 님이 당신의 게시물을 마음에 들어합니다", "notification.follow": "{name} 님이 나를 팔로우 했습니다", @@ -326,6 +327,7 @@ "notification.update": "{name} 님이 게시물을 수정했습니다", "notifications.clear": "알림 지우기", "notifications.clear_confirmation": "정말로 알림을 삭제하시겠습니까?", + "notifications.column_settings.admin.report": "새 신고:", "notifications.column_settings.admin.sign_up": "새로운 가입:", "notifications.column_settings.alert": "데스크탑 알림", "notifications.column_settings.favourite": "좋아요:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "신고해주셔서 감사합니다, 중재자분들이 확인할 예정입니다.", "report.unfollow": "@{name}을 팔로우 해제", "report.unfollow_explanation": "당신을 이 계정을 팔로우 하고 있습니다. 홈 피드에서 게시물을 보지 않으려면, 팔로우를 해제하세요.", + "report_notification.attached_statuses": "{count}개의 게시물 첨부됨", + "report_notification.categories.other": "기타", + "report_notification.categories.spam": "스팸", + "report_notification.categories.violation": "규칙 위반", + "report_notification.open": "신고 열기", "search.placeholder": "검색", "search_popout.search_format": "고급 검색 방법", "search_popout.tips.full_text": "단순한 텍스트 검색은 당신이 작성했거나, 관심글로 지정했거나, 부스트했거나, 멘션을 받은 게시글, 그리고 사용자명, 표시되는 이름, 해시태그를 반환합니다.", @@ -461,6 +468,7 @@ "status.embed": "공유하기", "status.favourite": "좋아요", "status.filtered": "필터로 걸러짐", + "status.hide": "Hide toot", "status.history.created": "{name} 님이 {date}에 생성함", "status.history.edited": "{name} 님이 {date}에 수정함", "status.load_more": "더 보기", @@ -484,6 +492,7 @@ "status.report": "신고", "status.sensitive_warning": "민감한 미디어", "status.share": "공유", + "status.show_filter_reason": "Show anyway", "status.show_less": "숨기기", "status.show_less_all": "모두 접기", "status.show_more": "더 보기", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index a38f18fa345..80a9fcf0ac8 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Sazkarî", "navigation_bar.public_timeline": "Demnameyê federalîkirî", "navigation_bar.security": "Ewlehî", + "notification.admin.report": "{name} hate ragihandin {target}", "notification.admin.sign_up": "{name} tomar bû", "notification.favourite": "{name} şandiya te hez kir", "notification.follow": "{name} te şopand", @@ -326,6 +327,7 @@ "notification.update": "{name} şandiyek serrast kir", "notifications.clear": "Agahdariyan pak bike", "notifications.clear_confirmation": "Bi rastî tu dixwazî bi awayekî dawî hemû agahdariyên xwe pak bikî?", + "notifications.column_settings.admin.report": "Ragihandinên nû:", "notifications.column_settings.admin.sign_up": "Tomarkirinên nû:", "notifications.column_settings.alert": "Agahdariyên sermaseyê", "notifications.column_settings.favourite": "Bijarte:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Spas ji bo ragihandina te, em ê binirxînin.", "report.unfollow": "@{name} neşopîne", "report.unfollow_explanation": "Tê vê ajimêrê dişopînî. Ji bo ku êdî şandiyên wan di rojeva xwe de nebînî, wan neşopîne.", + "report_notification.attached_statuses": "{count, plural,one {{count} şandî} other {{count} şandî }} pêvekirî", + "report_notification.categories.other": "Ên din", + "report_notification.categories.spam": "Nexwestî (Spam)", + "report_notification.categories.violation": "Binpêkirina rêzîkê", + "report_notification.open": "Ragihandinê veke", "search.placeholder": "Bigere", "search_popout.search_format": "Dirûva lêgerîna pêşketî", "search_popout.tips.full_text": "Nivîsên hêsan, şandiyên ku te nivîsandiye, bijare kiriye, bilind kiriye an jî yên behsa te kirine û her wiha navê bikarhêneran, navên xûya dike û hashtagan vedigerîne.", @@ -461,6 +468,7 @@ "status.embed": "Hedimandî", "status.favourite": "Bijarte", "status.filtered": "Parzûnkirî", + "status.hide": "Hide toot", "status.history.created": "{name} {date} afirand", "status.history.edited": "{name} {date} serrast kir", "status.load_more": "Bêtir bar bike", @@ -484,6 +492,7 @@ "status.report": "{name} gilî bike", "status.sensitive_warning": "Naveroka hestiyarî", "status.share": "Parve bike", + "status.show_filter_reason": "Show anyway", "status.show_less": "Kêmtir nîşan bide", "status.show_less_all": "Ji bo hemîyan kêmtir nîşan bide", "status.show_more": "Hêj zehftir nîşan bide", diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json index 6a8c9933afd..8ffa521b5c8 100644 --- a/app/javascript/mastodon/locales/kw.json +++ b/app/javascript/mastodon/locales/kw.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Erviransow", "navigation_bar.public_timeline": "Amserlin geffrysys", "navigation_bar.security": "Diogeledh", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} a wrug merkya agas post vel drudh", "notification.follow": "{name} a wrug agas holya", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Dilea gwarnyansow", "notifications.clear_confirmation": "Owgh hwi sur a vynnes dilea agas gwarnyansow oll yn fast?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Gwarnyansow pennskrin", "notifications.column_settings.favourite": "Re drudh:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Hwilas", "search_popout.search_format": "Furvas hwilas avonsys", "search_popout.tips.full_text": "Tekst sempel a wra daskor postow a wrussowgh aga skrifa, merkya vel drudh, po bos menegys ynna, keffrys ha henwyn devnydhyoryon ha displetyans, ha bòlnosow a dhesedh.", @@ -461,6 +468,7 @@ "status.embed": "Staga", "status.favourite": "Merkya vel drudh", "status.filtered": "Sidhlys", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Karga moy", @@ -484,6 +492,7 @@ "status.report": "Reportya @{name}", "status.sensitive_warning": "Dalgh tender", "status.share": "Kevrenna", + "status.show_filter_reason": "Show anyway", "status.show_less": "Diskwedhes le", "status.show_less_all": "Diskwedhes le rag puptra", "status.show_more": "Diskwedhes moy", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index afff3a79ca0..1a69e7e1d2c 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferences", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} favourited your status", "notification.follow": "{name} followed you", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favourites:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Search", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Embed", "status.favourite": "Favourite", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Load more", @@ -484,6 +492,7 @@ "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", "status.share": "Share", + "status.show_filter_reason": "Show anyway", "status.show_less": "Show less", "status.show_less_all": "Show less for all", "status.show_more": "Show more", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index b889948cf5c..6c848de794d 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Iestatījumi", "navigation_bar.public_timeline": "Apvienotā ziņu lenta", "navigation_bar.security": "Drošība", + "notification.admin.report": "{name} ziņoja par {target}", "notification.admin.sign_up": "{name} ir pierakstījies", "notification.favourite": "{name} izcēla tavu ziņu", "notification.follow": "{name} uzsāka tev sekot", @@ -326,6 +327,7 @@ "notification.update": "{name} ir rediģējis rakstu", "notifications.clear": "Notīrīt paziņojumus", "notifications.clear_confirmation": "Vai tiešām vēlies neatgriezeniski notīrīt visus savus paziņojumus?", + "notifications.column_settings.admin.report": "Jauni ziņojumi:", "notifications.column_settings.admin.sign_up": "Jaunas pierakstīšanās:", "notifications.column_settings.alert": "Darbvirsmas paziņojumi", "notifications.column_settings.favourite": "Izlases:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Paldies, ka ziņoji, mēs to izskatīsim.", "report.unfollow": "Pārtraukt sekošanu @{name}", "report.unfollow_explanation": "Tu seko šim kontam. Lai vairs neredzētu viņu ziņas savā ziņu plūsmā, pārtrauc viņiem sekot.", + "report_notification.attached_statuses": "Pievienoti {count, plural,one {{count} sūtījums} other {{count} sūtījumi}}", + "report_notification.categories.other": "Cita", + "report_notification.categories.spam": "Spams", + "report_notification.categories.violation": "Noteikumu pārkāpums", + "report_notification.open": "Atvērt ziņojumu", "search.placeholder": "Meklēšana", "search_popout.search_format": "Paplašināts meklēšanas formāts", "search_popout.tips.full_text": "Vienkāršs teksts atgriež ziņas, kuras esi rakstījis, iecienījis, paaugstinājis vai pieminējis, kā arī atbilstošie lietotājvārdi, parādāmie vārdi un tēmturi.", @@ -461,6 +468,7 @@ "status.embed": "Iestrādāt", "status.favourite": "Iecienītā", "status.filtered": "Filtrēts", + "status.hide": "Hide toot", "status.history.created": "{name} izveidots {date}", "status.history.edited": "{name} rediģēts {date}", "status.load_more": "Ielādēt vairāk", @@ -484,6 +492,7 @@ "status.report": "Ziņot par @{name}", "status.sensitive_warning": "Sensitīvs saturs", "status.share": "Kopīgot", + "status.show_filter_reason": "Show anyway", "status.show_less": "Rādīt mazāk", "status.show_less_all": "Rādīt mazāk visiem", "status.show_more": "Rādīt vairāk", diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json index 1b868de075f..36126fc25af 100644 --- a/app/javascript/mastodon/locales/mk.json +++ b/app/javascript/mastodon/locales/mk.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferences", "navigation_bar.public_timeline": "Федеративен времеплов", "navigation_bar.security": "Безбедност", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} favourited your status", "notification.follow": "{name} followed you", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favourites:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Барај", "search_popout.search_format": "Напреден формат за барање", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Embed", "status.favourite": "Favourite", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Load more", @@ -484,6 +492,7 @@ "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", "status.share": "Share", + "status.show_filter_reason": "Show anyway", "status.show_less": "Show less", "status.show_less_all": "Show less for all", "status.show_more": "Show more", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 674f74dd6db..4307259c010 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "ക്രമീകരണങ്ങൾ", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "സുരക്ഷ", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} favourited your status", "notification.follow": "{name} നിങ്ങളെ പിന്തുടർന്നു", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "അറിയിപ്പ് മായ്ക്കുക", "notifications.clear_confirmation": "നിങ്ങളുടെ എല്ലാ അറിയിപ്പുകളും ശാശ്വതമായി മായ്‌ക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ", "notifications.column_settings.favourite": "പ്രിയപ്പെട്ടവ:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "തിരയുക", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "ഉൾച്ചേർക്കുക", "status.favourite": "പ്രിയപ്പെട്ടത്", "status.filtered": "ഫിൽട്ടർ ചെയ്‌തു", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "കൂടുതൽ ലോഡു ചെയ്യുക", @@ -484,6 +492,7 @@ "status.report": "@{name}--നെ റിപ്പോർട്ട് ചെയ്യുക", "status.sensitive_warning": "Sensitive content", "status.share": "പങ്കിടുക", + "status.show_filter_reason": "Show anyway", "status.show_less": "കുറച്ച് കാണിക്കുക", "status.show_less_all": "Show less for all", "status.show_more": "കൂടുതകൽ കാണിക്കുക", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index d9dafa222a2..d78e0384ed1 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferences", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} favourited your status", "notification.follow": "{name} followed you", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favourites:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Search", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Embed", "status.favourite": "Favourite", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Load more", @@ -484,6 +492,7 @@ "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", "status.share": "Share", + "status.show_filter_reason": "Show anyway", "status.show_less": "Show less", "status.show_less_all": "Show less for all", "status.show_more": "Show more", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index c3ca2596516..c1f20ec4f9b 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Keutamaan", "navigation_bar.public_timeline": "Garis masa bersekutu", "navigation_bar.security": "Keselamatan", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} menggemari hantaran anda", "notification.follow": "{name} mengikuti anda", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Buang pemberitahuan", "notifications.clear_confirmation": "Adakah anda pasti anda ingin membuang semua pemberitahuan anda secara kekal?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Pemberitahuan atas meja", "notifications.column_settings.favourite": "Kegemaran:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Cari", "search_popout.search_format": "Format gelintar lanjutan", "search_popout.tips.full_text": "Teks ringkas mengembalikan hantaran yang anda telah tulis, menggemari, menggalak, atau telah disebutkan, dan juga nama pengguna, nama paparan, dan tanda pagar yang dipadankan.", @@ -461,6 +468,7 @@ "status.embed": "Benaman", "status.favourite": "Kegemaran", "status.filtered": "Ditapis", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Muatkan lagi", @@ -484,6 +492,7 @@ "status.report": "Laporkan @{name}", "status.sensitive_warning": "Kandungan sensitif", "status.share": "Kongsi", + "status.show_filter_reason": "Show anyway", "status.show_less": "Tunjukkan kurang", "status.show_less_all": "Tunjukkan kurang untuk semua", "status.show_more": "Tunjukkan lebih", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 76a631b5599..40053f4cdd8 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -23,7 +23,7 @@ "account.follows.empty": "Deze gebruiker volgt nog niemand.", "account.follows_you": "Volgt jou", "account.hide_reblogs": "Boosts van @{name} verbergen", - "account.joined": "Geregistreerd in {date}", + "account.joined": "Geregistreerd op {date}", "account.link_verified_on": "Eigendom van deze link is gecontroleerd op {date}", "account.locked_info": "De privacystatus van dit account is op besloten gezet. De eigenaar bepaalt handmatig wie diegene kan volgen.", "account.media": "Media", @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Instellingen", "navigation_bar.public_timeline": "Globale tijdlijn", "navigation_bar.security": "Beveiliging", + "notification.admin.report": "{name} heeft {target} geapporteerd", "notification.admin.sign_up": "{name} heeft zich aangemeld", "notification.favourite": "{name} voegde jouw bericht als favoriet toe", "notification.follow": "{name} volgt jou nu", @@ -326,6 +327,7 @@ "notification.update": "{name} heeft een bericht bewerkt", "notifications.clear": "Meldingen verwijderen", "notifications.clear_confirmation": "Weet je het zeker dat je al jouw meldingen wilt verwijderen?", + "notifications.column_settings.admin.report": "Nieuwe rapportages:", "notifications.column_settings.admin.sign_up": "Nieuwe aanmeldingen:", "notifications.column_settings.alert": "Desktopmeldingen", "notifications.column_settings.favourite": "Favorieten:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Dank je voor het rapporteren. Wij gaan er naar kijken.", "report.unfollow": "@{name} ontvolgen", "report.unfollow_explanation": "Je volgt dit account. Om diens berichten niet meer op jouw starttijdlijn te zien, kun je diegene ontvolgen.", + "report_notification.attached_statuses": "{count, plural, one {{count} bericht} other {{count} berichten}} toegevoegd", + "report_notification.categories.other": "Overig", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Overtreden regel(s)", + "report_notification.open": "Rapportage openen", "search.placeholder": "Zoeken", "search_popout.search_format": "Geavanceerd zoeken", "search_popout.tips.full_text": "Gebruik gewone tekst om te zoeken in jouw berichten, gebooste berichten, favorieten en in berichten waarin je bent vermeldt, en tevens naar gebruikersnamen, weergavenamen en hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Insluiten", "status.favourite": "Favoriet", "status.filtered": "Gefilterd", + "status.hide": "Hide toot", "status.history.created": "{name} plaatste dit {date}", "status.history.edited": "{name} bewerkte dit {date}", "status.load_more": "Meer laden", @@ -484,6 +492,7 @@ "status.report": "@{name} rapporteren", "status.sensitive_warning": "Gevoelige inhoud", "status.share": "Delen", + "status.show_filter_reason": "Show anyway", "status.show_less": "Minder tonen", "status.show_less_all": "Alles minder tonen", "status.show_more": "Meer tonen", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index cd802bed032..87d3579e962 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Innstillingar", "navigation_bar.public_timeline": "Føderert tidsline", "navigation_bar.security": "Tryggleik", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} merkte statusen din som favoritt", "notification.follow": "{name} fylgde deg", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Tøm varsel", "notifications.clear_confirmation": "Er du sikker på at du vil fjerna alle varsla dine for alltid?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Skrivebordsvarsel", "notifications.column_settings.favourite": "Favorittar:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Søk", "search_popout.search_format": "Avansert søkeformat", "search_popout.tips.full_text": "Enkel tekst returnerer statusar du har skrive, likt, framheva eller vorte nemnd i, i tillegg til samsvarande brukarnamn, visningsnamn og emneknaggar.", @@ -461,6 +468,7 @@ "status.embed": "Bygg inn", "status.favourite": "Favoritt", "status.filtered": "Filtrert", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Last inn meir", @@ -484,6 +492,7 @@ "status.report": "Rapporter @{name}", "status.sensitive_warning": "Sensitivt innhald", "status.share": "Del", + "status.show_filter_reason": "Show anyway", "status.show_less": "Vis mindre", "status.show_less_all": "Vis mindre for alle", "status.show_more": "Vis meir", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index c188a868b76..b4da321eb4d 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Innstillinger", "navigation_bar.public_timeline": "Felles tidslinje", "navigation_bar.security": "Sikkerhet", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} likte din status", "notification.follow": "{name} fulgte deg", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Fjern varsler", "notifications.clear_confirmation": "Er du sikker på at du vil fjerne alle dine varsler permanent?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Skrivebordsvarslinger", "notifications.column_settings.favourite": "Likt:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Søk", "search_popout.search_format": "Avansert søkeformat", "search_popout.tips.full_text": "Enkel tekst gir resultater for statuser du har skrevet, likt, fremhevet, eller har blitt nevnt i, i tillegg til samsvarende brukernavn, visningsnavn og emneknagger.", @@ -461,6 +468,7 @@ "status.embed": "Bygge inn", "status.favourite": "Lik", "status.filtered": "Filtrert", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Last mer", @@ -484,6 +492,7 @@ "status.report": "Rapporter @{name}", "status.sensitive_warning": "Følsomt innhold", "status.share": "Del", + "status.show_filter_reason": "Show anyway", "status.show_less": "Vis mindre", "status.show_less_all": "Vis mindre for alle", "status.show_more": "Vis mer", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 3a57a5c3fdf..982a3fa1631 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferéncias", "navigation_bar.public_timeline": "Flux public global", "navigation_bar.security": "Seguretat", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} se marquèt", "notification.favourite": "{name} a ajustat a sos favorits", "notification.follow": "{name} vos sèc", @@ -326,6 +327,7 @@ "notification.update": "{name} modiquè sa publicacion", "notifications.clear": "Escafar", "notifications.clear_confirmation": "Volètz vertadièrament escafar totas vòstras las notificacions ?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Notificacions localas", "notifications.column_settings.favourite": "Favorits :", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Quitar de sègre {name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Recercar", "search_popout.search_format": "Format recèrca avançada", "search_popout.tips.full_text": "Un tèxte simple que tòrna los estatuts qu’avètz escriches, mes en favorits, partejats, o ont sètz mencionat, e tanben los noms d’utilizaires, escais-noms e etiquetas que correspondonas.", @@ -461,6 +468,7 @@ "status.embed": "Embarcar", "status.favourite": "Apondre als favorits", "status.filtered": "Filtrat", + "status.hide": "Hide toot", "status.history.created": "{name} o creèt lo {date}", "status.history.edited": "{name} o modifiquèt lo {date}", "status.load_more": "Cargar mai", @@ -484,6 +492,7 @@ "status.report": "Senhalar @{name}", "status.sensitive_warning": "Contengut sensible", "status.share": "Partejar", + "status.show_filter_reason": "Show anyway", "status.show_less": "Tornar plegar", "status.show_less_all": "Los tornar plegar totes", "status.show_more": "Desplegar", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index 658a3318ee6..13cb39de85e 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferences", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} favourited your status", "notification.follow": "{name} followed you", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favourites:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Search", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Embed", "status.favourite": "Favourite", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Load more", @@ -484,6 +492,7 @@ "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", "status.share": "Share", + "status.show_filter_reason": "Show anyway", "status.show_less": "Show less", "status.show_less_all": "Show less for all", "status.show_more": "Show more", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index afaa9358f12..9a72dba8f7c 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferencje", "navigation_bar.public_timeline": "Globalna oś czasu", "navigation_bar.security": "Bezpieczeństwo", + "notification.admin.report": "{name} zgłosił {target}", "notification.admin.sign_up": "Użytkownik {name} zarejestrował się", "notification.favourite": "{name} dodał(a) Twój wpis do ulubionych", "notification.follow": "{name} zaczął(-ęła) Cię śledzić", @@ -326,6 +327,7 @@ "notification.update": "{name} edytował post", "notifications.clear": "Wyczyść powiadomienia", "notifications.clear_confirmation": "Czy na pewno chcesz bezpowrotnie usunąć wszystkie powiadomienia?", + "notifications.column_settings.admin.report": "Nowe raporty:", "notifications.column_settings.admin.sign_up": "Nowe rejestracje:", "notifications.column_settings.alert": "Powiadomienia na pulpicie", "notifications.column_settings.favourite": "Dodanie do ulubionych:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Dziękujemy za zgłoszenie. Przyjrzymy się tej sprawie.", "report.unfollow": "Przestań śledzić @{name}", "report.unfollow_explanation": "Śledzisz to konto. Jeśli nie chcesz już widzieć postów z tego konta w swojej głównej osi czasu, przestań je śledzić.", + "report_notification.attached_statuses": "{count, plural, one {{count} wpis} few {{count} wpisy} many {{counter} wpisów} other {{counter} wpisów}}", + "report_notification.categories.other": "Inne", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Naruszenie zasad", + "report_notification.open": "Otwórz raport", "search.placeholder": "Szukaj", "search_popout.search_format": "Zaawansowane wyszukiwanie", "search_popout.tips.full_text": "Pozwala na wyszukiwanie wpisów które napisałeś(-aś), dodałeś(-aś) do ulubionych lub podbiłeś(-aś), w których o Tobie wspomniano, oraz pasujące nazwy użytkowników, pełne nazwy i hashtagi.", @@ -461,6 +468,7 @@ "status.embed": "Osadź", "status.favourite": "Dodaj do ulubionych", "status.filtered": "Filtrowany(-a)", + "status.hide": "Hide toot", "status.history.created": "{name} utworzył(a) {date}", "status.history.edited": "{name} edytował(a) {date}", "status.load_more": "Załaduj więcej", @@ -484,6 +492,7 @@ "status.report": "Zgłoś @{name}", "status.sensitive_warning": "Wrażliwa zawartość", "status.share": "Udostępnij", + "status.show_filter_reason": "Show anyway", "status.show_less": "Zwiń", "status.show_less_all": "Zwiń wszystkie", "status.show_more": "Rozwiń", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index bdf973e040a..bb98007860c 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferências", "navigation_bar.public_timeline": "Linha global", "navigation_bar.security": "Segurança", + "notification.admin.report": "{name} denunciou {target}", "notification.admin.sign_up": "{name} se inscreveu", "notification.favourite": "{name} favoritou teu toot", "notification.follow": "{name} te seguiu", @@ -326,6 +327,7 @@ "notification.update": "{name} editou uma publicação", "notifications.clear": "Limpar notificações", "notifications.clear_confirmation": "Você tem certeza de que deseja limpar todas as suas notificações?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "Novas inscrições:", "notifications.column_settings.alert": "Notificações no computador", "notifications.column_settings.favourite": "Favoritos:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Obrigado por reportar. Vamos analisar.", "report.unfollow": "Deixar de seguir @{name}", "report.unfollow_explanation": "Você está seguindo esta conta. Para não mais ver os posts dele em sua página inicial, deixe de segui-lo.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Outro", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Violação de regra", + "report_notification.open": "Abrir relatório", "search.placeholder": "Pesquisar", "search_popout.search_format": "Formato de pesquisa avançada", "search_popout.tips.full_text": "Texto simples retorna toots que você escreveu, favoritou, deu boost, ou em que foi mencionado, assim como nomes de usuário e de exibição, e hashtags correspondentes.", @@ -461,6 +468,7 @@ "status.embed": "Incorporar", "status.favourite": "Favoritar", "status.filtered": "Filtrado", + "status.hide": "Hide toot", "status.history.created": "{name} criou {date}", "status.history.edited": "{name} editou {date}", "status.load_more": "Ver mais", @@ -484,6 +492,7 @@ "status.report": "Denunciar @{name}", "status.sensitive_warning": "Mídia sensível", "status.share": "Compartilhar", + "status.show_filter_reason": "Show anyway", "status.show_less": "Mostrar menos", "status.show_less_all": "Mostrar menos em tudo", "status.show_more": "Mostrar mais", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 90285a70fe5..3d48e84ad21 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferências", "navigation_bar.public_timeline": "Cronologia federada", "navigation_bar.security": "Segurança", + "notification.admin.report": "{name} denunciou {target}", "notification.admin.sign_up": "{name} inscreveu-se", "notification.favourite": "{name} adicionou a tua publicação aos favoritos", "notification.follow": "{name} começou a seguir-te", @@ -326,6 +327,7 @@ "notification.update": "{name} editou uma publicação", "notifications.clear": "Limpar notificações", "notifications.clear_confirmation": "Queres mesmo limpar todas as notificações?", + "notifications.column_settings.admin.report": "Novas denúncias:", "notifications.column_settings.admin.sign_up": "Novas inscrições:", "notifications.column_settings.alert": "Notificações no ambiente de trabalho", "notifications.column_settings.favourite": "Favoritos:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Obrigado por reportar, vamos analisar.", "report.unfollow": "Deixar de seguir @{name}", "report.unfollow_explanation": "Está a seguir esta conta. Para não ver mais as publicações desta conta na sua página inicial, deixe de segui-la.", + "report_notification.attached_statuses": "{count, plural,one {{count} publicação} other {{count} publicações}} em anexo", + "report_notification.categories.other": "Outro", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Violação de regra", + "report_notification.open": "Abrir denúncia", "search.placeholder": "Pesquisar", "search_popout.search_format": "Formato avançado de pesquisa", "search_popout.tips.full_text": "Texto simples devolve publicações que escreveu, marcou como favorita, partilhou ou em que foi mencionado, tal como nomes de utilizador, alcunhas e hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Incorporar", "status.favourite": "Adicionar aos favoritos", "status.filtered": "Filtrada", + "status.hide": "Hide toot", "status.history.created": "{name} criado em {date}", "status.history.edited": "{name} editado em {date}", "status.load_more": "Carregar mais", @@ -484,6 +492,7 @@ "status.report": "Denunciar @{name}", "status.sensitive_warning": "Conteúdo sensível", "status.share": "Partilhar", + "status.show_filter_reason": "Show anyway", "status.show_less": "Mostrar menos", "status.show_less_all": "Mostrar menos para todas", "status.show_more": "Mostrar mais", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index 34328e65ba8..0c2ce0b2d62 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferințe", "navigation_bar.public_timeline": "Cronologie globală", "navigation_bar.security": "Securitate", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} a adăugat postarea ta la favorite", "notification.follow": "{name} s-a abonat la tine", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Șterge notificările", "notifications.clear_confirmation": "Ești sigur că vrei să ștergi permanent toate notificările?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Notificări pe desktop", "notifications.column_settings.favourite": "Favorite:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Caută", "search_popout.search_format": "Formate pentru căutare avansată", "search_popout.tips.full_text": "Textele simple returnează postări pe care le-ai scris, favorizat, impulsionat, sau în care sunt menționate, deasemenea și utilizatorii sau hashtag-urile care se potrivesc.", @@ -461,6 +468,7 @@ "status.embed": "Înglobează", "status.favourite": "Favorite", "status.filtered": "Sortate", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Încarcă mai multe", @@ -484,6 +492,7 @@ "status.report": "Raportează pe @{name}", "status.sensitive_warning": "Conținut sensibil", "status.share": "Distribuie", + "status.show_filter_reason": "Show anyway", "status.show_less": "Arată mai puțin", "status.show_less_all": "Arată mai puțin pentru toți", "status.show_more": "Arată mai mult", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index d6927e0e486..62b68e5bf5f 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Настройки", "navigation_bar.public_timeline": "Глобальная лента", "navigation_bar.security": "Безопасность", + "notification.admin.report": "{name} сообщил о {target}", "notification.admin.sign_up": "{name} зарегистрирован", "notification.favourite": "{name} добавил(а) ваш пост в избранное", "notification.follow": "{name} подписался (-лась) на вас", @@ -326,6 +327,7 @@ "notification.update": "{name} изменил(а) пост", "notifications.clear": "Очистить уведомления", "notifications.clear_confirmation": "Вы уверены, что хотите очистить все уведомления?", + "notifications.column_settings.admin.report": "Новые жалобы:", "notifications.column_settings.admin.sign_up": "Новые регистрации:", "notifications.column_settings.alert": "Уведомления на рабочем столе", "notifications.column_settings.favourite": "Ваш пост добавили в «избранное»:", @@ -405,7 +407,7 @@ "report.category.title_status": "этим постом", "report.close": "Готово", "report.comment.title": "Есть ли что-нибудь ещё, что нам стоит знать?", - "report.forward": "Переслать на {target}", + "report.forward": "Переслать в {target}", "report.forward_hint": "Эта учётная запись расположена на другом узле. Отправить туда анонимную копию вашей жалобы?", "report.mute": "Игнорировать", "report.mute_explanation": "Вы не будете видеть их посты. Они по-прежнему могут подписываться на вас и видеть ваши посты, но не будут знать, что они в списке игнорируемых.", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Спасибо за обращение, мы его рассмотрим.", "report.unfollow": "Отписаться от @{name}", "report.unfollow_explanation": "Вы подписаны на этого пользователя. Чтобы не видеть его/её посты в своей домашней ленте, отпишитесь от него/неё.", + "report_notification.attached_statuses": "{count, plural, one {{count} сообщение} few {{count} сообщения} many {{count} сообщений} other {{count} сообщений}} вложено", + "report_notification.categories.other": "Прочее", + "report_notification.categories.spam": "Спам", + "report_notification.categories.violation": "Нарушение правил", + "report_notification.open": "Подать жалобу", "search.placeholder": "Поиск", "search_popout.search_format": "Продвинутый формат поиска", "search_popout.tips.full_text": "Поиск по простому тексту отобразит посты, которые вы написали, добавили в избранное, продвинули или в которых были упомянуты, а также подходящие имена пользователей и хэштеги.", @@ -461,6 +468,7 @@ "status.embed": "Встроить на свой сайт", "status.favourite": "В избранное", "status.filtered": "Отфильтровано", + "status.hide": "Hide toot", "status.history.created": "{name} создал {date}", "status.history.edited": "{name} отредактировал {date}", "status.load_more": "Загрузить остальное", @@ -484,6 +492,7 @@ "status.report": "Пожаловаться", "status.sensitive_warning": "Содержимое «деликатного характера»", "status.share": "Поделиться", + "status.show_filter_reason": "Show anyway", "status.show_less": "Свернуть", "status.show_less_all": "Свернуть все спойлеры в ветке", "status.show_more": "Развернуть", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index f0861f9bc8d..0bcca64ea87 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferences", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} favourited your status", "notification.follow": "{name} followed you", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favourites:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Search", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Embed", "status.favourite": "Favourite", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Load more", @@ -484,6 +492,7 @@ "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", "status.share": "Share", + "status.show_filter_reason": "Show anyway", "status.show_less": "Show less", "status.show_less_all": "Show less for all", "status.show_more": "Show more", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 202caa5ca4d..957b114c01e 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferèntzias", "navigation_bar.public_timeline": "Lìnia de tempus federada", "navigation_bar.security": "Seguresa", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} at marcadu sa publicatzione tua comente a preferida", "notification.follow": "{name} ti sighit", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Lìmpia notìficas", "notifications.clear_confirmation": "Seguru chi boles isboidare in manera permanente totu is notìficas tuas?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Notìficas de iscrivania", "notifications.column_settings.favourite": "Preferidos:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Chirca", "search_popout.search_format": "Formadu de chirca avantzada", "search_popout.tips.full_text": "Testu sèmplitze pro agatare publicatziones chi as iscritu, marcadu comente a preferidas, cumpartzidu o chi t'ant mentovadu, e fintzas nòmines, nòmines de utente e etichetas.", @@ -461,6 +468,7 @@ "status.embed": "Afissa", "status.favourite": "Preferidos", "status.filtered": "Filtradu", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Càrriga·nde àteros", @@ -484,6 +492,7 @@ "status.report": "Sinnala @{name}", "status.sensitive_warning": "Cuntenutu sensìbile", "status.share": "Cumpartzi", + "status.show_filter_reason": "Show anyway", "status.show_less": "Ammustra·nde prus pagu", "status.show_less_all": "Ammustra·nde prus pagu pro totus", "status.show_more": "Ammustra·nde prus", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 4d9e0d3b5de..8c7d47d534a 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -7,155 +7,155 @@ "account.block_domain": "{domain} වසම අවහිර කරන්න", "account.blocked": "අවහිර කර ඇත", "account.browse_more_on_origin_server": "මුල් පැතිකඩෙහි තවත් පිරික්සන්න", - "account.cancel_follow_request": "Cancel follow request", + "account.cancel_follow_request": "ඉල්ලීම අනුගමනය කිරීම අවලංගු කරන්න", "account.direct": "@{name} සෘජු පණිවිඩය", "account.disable_notifications": "@{name} පළ කරන විට මට දැනුම් දීම නවත්වන්න", "account.domain_blocked": "වසම අවහිර කර ඇත", "account.edit_profile": "පැතිකඩ සංස්කරණය", "account.enable_notifications": "@{name} පළ කරන විට මට දැනුම් දෙන්න", "account.endorse": "පැතිකඩෙහි විශේෂාංගය", - "account.follow": "Follow", - "account.followers": "Followers", - "account.followers.empty": "No one follows this user yet.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", - "account.following": "Following", - "account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}", - "account.follows.empty": "This user doesn't follow anyone yet.", - "account.follows_you": "Follows you", - "account.hide_reblogs": "Hide boosts from @{name}", + "account.follow": "අනුගමනය කරන්න", + "account.followers": "අනුගාමිකයින්", + "account.followers.empty": "කිසිවෙකු තවමත් මෙම පරිශීලකයා අනුගමනය නොකරයි.", + "account.followers_counter": "{count, plural, one {{counter} අනුගාමිකයෙක්} other {{counter} අනුගාමිකයින්}}", + "account.following": "අනුගමනය", + "account.following_counter": "{count, plural, one {{counter} අනුගමනය කරන්න} other {{counter} අනුගමනය කරන්න}}", + "account.follows.empty": "මෙම පරිශීලකයා තවමත් කිසිවෙකු අනුගමනය නොකරයි.", + "account.follows_you": "ඔබව අනුගමනය කරයි", + "account.hide_reblogs": "@{name}සිට බූස්ට් සඟවන්න", "account.joined": "{date} එක් වී ඇත", - "account.link_verified_on": "මෙම සබැඳියේ හිමිකාරිත්වය {date} දින පරීක්ෂා කරන ලදි", - "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.link_verified_on": "මෙම සබැඳියේ හිමිකාරිත්වය {date} දින පරීක්ෂා කරන ලදී", + "account.locked_info": "මෙම ගිණුමේ රහස්‍යතා තත්ත්වය අගුලු දමා ඇත. හිමිකරු ඔවුන් අනුගමනය කළ හැක්කේ කාටදැයි හස්තීයව සමාලෝචනය කරයි.", "account.media": "මාධ්‍යය", "account.mention": "@{name} සැඳහුම", - "account.moved_to": "{name} has moved to:", + "account.moved_to": "{name} වෙත මාරු වී ඇත:", "account.mute": "@{name} නිහඬ කරන්න", - "account.mute_notifications": "Mute notifications from @{name}", - "account.muted": "Muted", - "account.posts": "Toots", - "account.posts_with_replies": "Toots and replies", + "account.mute_notifications": "@{name}වෙතින් දැනුම්දීම් නිහඬ කරන්න", + "account.muted": "නිහඬ කළා", + "account.posts": "ටූට්ස්", + "account.posts_with_replies": "ටූට්ස් සහ පිළිතුරු", "account.report": "@{name} වාර්තා කරන්න", - "account.requested": "Awaiting approval", + "account.requested": "අනුමැතිය බලාපොරොත්තුවෙන්", "account.share": "@{name} ගේ පැතිකඩ බෙදාගන්න", - "account.show_reblogs": "Show boosts from @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.show_reblogs": "@{name}සිට බූස්ට් පෙන්වන්න", + "account.statuses_counter": "{count, plural, one {{counter} ටූට්} other {{counter} ටූට්ස්}}", "account.unblock": "@{name} අනවහිර කරන්න", "account.unblock_domain": "{domain} වසම අනවහිර කරන්න", - "account.unblock_short": "Unblock", + "account.unblock_short": "අවහිර කිරීම ඉවත් කරන්න", "account.unendorse": "පැතිකඩෙහි විශේෂාංග නොකරන්න", - "account.unfollow": "Unfollow", - "account.unmute": "Unmute @{name}", - "account.unmute_notifications": "Unmute notifications from @{name}", - "account.unmute_short": "Unmute", + "account.unfollow": "අනුගමනය නොකරන්න", + "account.unmute": "@{name}නිහඬ නොකරන්න", + "account.unmute_notifications": "@{name}වෙතින් දැනුම්දීම් නිහඬ නොකරන්න", + "account.unmute_short": "නිහඬ නොකරන්න", "account_note.placeholder": "සටහන එකතු කිරීමට ක්ලික් කරන්න", - "admin.dashboard.daily_retention": "User retention rate by day after sign-up", - "admin.dashboard.monthly_retention": "User retention rate by month after sign-up", - "admin.dashboard.retention.average": "Average", - "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.daily_retention": "ලියාපදිංචි වීමෙන් පසු දිනකට පරිශීලක රඳවා ගැනීමේ අනුපාතය", + "admin.dashboard.monthly_retention": "ලියාපදිංචි වීමෙන් පසු මාසය අනුව පරිශීලක රඳවා ගැනීමේ අනුපාතය", + "admin.dashboard.retention.average": "සාමාන්යය", + "admin.dashboard.retention.cohort": "ලියාපදිංචි වීමේ මාසය", "admin.dashboard.retention.cohort_size": "නව පරිශීලකයින්", "alert.rate_limited.message": "කරුණාකර {retry_time, time, medium} ට පසු නැවත උත්සාහ කරන්න.", - "alert.rate_limited.title": "Rate limited", - "alert.unexpected.message": "An unexpected error occurred.", + "alert.rate_limited.title": "මිල සීමා සහිතයි", + "alert.unexpected.message": "අනපේක්ෂිත දෝෂයක් ඇතිවුනා.", "alert.unexpected.title": "අපොයි!", "announcement.announcement": "නිවේදනය", - "attachments_list.unprocessed": "(unprocessed)", - "autosuggest_hashtag.per_week": "{count} per week", - "boost_modal.combo": "You can press {combo} to skip this next time", - "bundle_column_error.body": "Something went wrong while loading this component.", + "attachments_list.unprocessed": "(සැකසුම් නොකළ)", + "autosuggest_hashtag.per_week": "සතියකට {count}", + "boost_modal.combo": "ඊළඟ වතාවේ මෙය මඟ හැරීමට ඔබට {combo} එබිය හැක", + "bundle_column_error.body": "මෙම සංරචකය පූරණය කිරීමේදී යම් දෙයක් වැරදී ඇත.", "bundle_column_error.retry": "නැවත උත්සාහ කරන්න", "bundle_column_error.title": "ජාලයේ දෝෂයකි", "bundle_modal_error.close": "වසන්න", - "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.message": "මෙම සංරචකය පූරණය කිරීමේදී යම් දෙයක් වැරදී ඇත.", "bundle_modal_error.retry": "නැවත උත්සාහ කරන්න", "column.blocks": "අවහිර කළ පරිශීලකයින්", "column.bookmarks": "පොත් යොමු", - "column.community": "Local timeline", - "column.direct": "Direct messages", - "column.directory": "පැතිකඩයන් පිරික්සන්න", + "column.community": "දේශීය කාලරේඛාව", + "column.direct": "සෘජු පණිවිඩ", + "column.directory": "පැතිකඩ පිරික්සන්න", "column.domain_blocks": "අවහිර කළ වසම්", "column.favourites": "ප්‍රියතමයන්", - "column.follow_requests": "Follow requests", + "column.follow_requests": "ඉල්ලීම් අනුගමනය කරන්න", "column.home": "මුල් පිටුව", - "column.lists": "ලැයිස්තු", - "column.mutes": "නිහඬ කළ පරිශීලකයන්", + "column.lists": "ලැයිස්තුව", + "column.mutes": "සමඟ කළ පරිශීලකයන්", "column.notifications": "දැනුම්දීම්", - "column.pins": "Pinned toot", - "column.public": "Federated timeline", + "column.pins": "පින් කළ දත", + "column.public": "ෆෙඩරේටඩ් කාලරේඛාව", "column_back_button.label": "ආපසු", "column_header.hide_settings": "සැකසුම් සඟවන්න", "column_header.moveLeft_settings": "තීරුව වමට ගෙනයන්න", "column_header.moveRight_settings": "තීරුව දකුණට ගෙනයන්න", - "column_header.pin": "Pin", + "column_header.pin": "පින් කරන්න", "column_header.show_settings": "සැකසුම් පෙන්වන්න", - "column_header.unpin": "Unpin", + "column_header.unpin": "ඇමුණුම ඉවත් කරන්න", "column_subheading.settings": "සැකසුම්", "community.column_settings.local_only": "ස්ථානීයව පමණයි", "community.column_settings.media_only": "මාධ්‍ය පමණයි", "community.column_settings.remote_only": "දුරස්ථව පමණයි", - "compose.language.change": "Change language", - "compose.language.search": "Search languages...", + "compose.language.change": "භාෂාව වෙනස් කරන්න", + "compose.language.search": "භාෂා සොයන්න...", "compose_form.direct_message_warning_learn_more": "තව දැනගන්න", - "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", - "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", - "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", + "compose_form.encryption_warning": "Mastodon හි පළ කිරීම් අන්තයේ සිට අවසානය දක්වා සංකේතනය කර නොමැත. Mastodon හරහා කිසිදු සංවේදී තොරතුරක් බෙදා නොගන්න.", + "compose_form.hashtag_warning": "මෙම මෙවලම ලැයිස්තුගත කර නොමැති බැවින් කිසිදු හැෂ් ටැගය යටතේ ලැයිස්තුගත නොකෙරේ. හැෂ් ටැග් මගින් සෙවිය හැක්කේ පොදු මෙවලම් පමණි.", + "compose_form.lock_disclaimer": "ඔබගේ ගිණුම {locked}නොවේ. ඔබගේ අනුගාමිකයින්ට පමණක් පළ කිරීම් බැලීමට ඕනෑම කෙනෙකුට ඔබව අනුගමනය කළ හැක.", "compose_form.lock_disclaimer.lock": "අගුළු දමා ඇත", "compose_form.placeholder": "ඔබගේ සිතුවිලි මොනවාද?", "compose_form.poll.add_option": "තේරීමක් එකතු කරන්න", "compose_form.poll.duration": "මත විමසීමේ කාලය", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "මෙම තේරීම ඉවත් කරන්න", - "compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයකට ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", + "compose_form.poll.option_placeholder": "තේරීම {number}", + "compose_form.poll.remove_option": "මෙම ඉවත් කරන්න", + "compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයක් ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", "compose_form.poll.switch_to_single": "තනි තේරීමකට ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", - "compose_form.publish": "Publish", + "compose_form.publish": "ප්‍රකාශ කරන්න", "compose_form.publish_loud": "{publish}!", - "compose_form.save_changes": "Save changes", - "compose_form.sensitive.hide": "{count, plural, one {මාධ්‍ය සංවේදී ලෙස සලකුණු කරන්න} other {මාධ්‍ය සංවේදී ලෙස සලකුණු කරන්න}}", + "compose_form.save_changes": "වෙනස්කම් සුරකින්න", + "compose_form.sensitive.hide": "{count, plural, one {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න} other {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න}}", "compose_form.sensitive.marked": "{count, plural, one {මාධ්‍ය සංවේදී ලෙස සලකුණු කර ඇත} other {මාධ්‍ය සංවේදී ලෙස සලකුණු කර ඇත}}", "compose_form.sensitive.unmarked": "{count, plural, one {මාධ්‍ය සංවේදී ලෙස සලකුණු කර නැත} other {මාධ්‍ය සංවේදී ලෙස සලකුණු කර නැත}}", - "compose_form.spoiler.marked": "Text is hidden behind warning", - "compose_form.spoiler.unmarked": "පාඨය සඟවා නැත", + "compose_form.spoiler.marked": "අනතුරු ඇඟවීම පිටුපස පෙළ සඟවා ඇත", + "compose_form.spoiler.unmarked": "ප්‍රයෝජනය සඟවා නැත", "compose_form.spoiler_placeholder": "ඔබගේ අවවාදය මෙහි ලියන්න", "confirmation_modal.cancel": "අවලංගු", "confirmations.block.block_and_report": "අවහිර කර වාර්තා කරන්න", "confirmations.block.confirm": "අවහිර", - "confirmations.block.message": "ඔබට {name} අවහිර කිරීමට අවශ්‍ය බව විශ්වාසද?", - "confirmations.delete.confirm": "Delete", - "confirmations.delete.message": "Are you sure you want to delete this status?", - "confirmations.delete_list.confirm": "Delete", - "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.block.message": "ඔබට {name} අවහිර කිරීමට අවශ්‍ය බව ද?", + "confirmations.delete.confirm": "මකන්න", + "confirmations.delete.message": "ඔබට මෙම තත්ත්වය මැකීමට අවශ්‍ය බව විශ්වාසද?", + "confirmations.delete_list.confirm": "මකන්න", + "confirmations.delete_list.message": "ඔබට මෙම ලැයිස්තුව ස්ථිරවම මැකීමට අවශ්‍ය බව විශ්වාසද?", "confirmations.discard_edit_media.confirm": "ඉවත ලන්න", - "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", + "confirmations.discard_edit_media.message": "ඔබට මාධ්‍ය විස්තරයට හෝ පෙරදසුනට නොසුරකින ලද වෙනස්කම් තිබේ, කෙසේ වෙතත් ඒවා ඉවත දමන්නද?", "confirmations.domain_block.confirm": "සම්පූර්ණ වසම අවහිර කරන්න", - "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.domain_block.message": "ඔබට සම්පූර්ණ {domain}අවහිර කිරීමට අවශ්‍ය බව ඔබට සැබවින්ම විශ්වාසද? බොහෝ අවස්ථාවලදී ඉලක්කගත බ්ලොක් හෝ නිශ්ශබ්ද කිරීම් කිහිපයක් ප්රමාණවත් වන අතර වඩාත් යෝග්ය වේ. ඔබ කිසිදු පොදු කාලරාමුවක හෝ ඔබගේ දැනුම්දීම් වල එම වසමේ අන්තර්ගතය නොදකිනු ඇත. එම වසමෙන් ඔබගේ අනුගාමිකයින් ඉවත් කරනු ලැබේ.", "confirmations.logout.confirm": "නික්මෙන්න", "confirmations.logout.message": "ඔබට නික්මෙන්න අවශ්‍ය බව විශ්වාසද?", "confirmations.mute.confirm": "නිශ්ශබ්ද", - "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", + "confirmations.mute.explanation": "මෙය ඔවුන්ගෙන් පළ කිරීම් සහ ඒවා සඳහන් කරන පළ කිරීම් සඟවයි, නමුත් එය ඔවුන්ට ඔබේ පළ කිරීම් බැලීමට සහ ඔබව අනුගමනය කිරීමට තවමත් ඉඩ ලබා දේ.", "confirmations.mute.message": "ඔබට {name} නිශ්ශබ්ද කිරීමට අවශ්‍ය බව විශ්වාසද?", - "confirmations.redraft.confirm": "Delete & redraft", - "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.redraft.confirm": "මකන්න සහ නැවත කෙටුම්පත් කරන්න", + "confirmations.redraft.message": "ඔබට මෙම තත්ත්වය මකා එය නැවත කෙටුම්පත් කිරීමට අවශ්‍ය බව විශ්වාසද? ප්‍රියතමයන් සහ බූස්ට් අහිමි වනු ඇත, මුල් පළ කිරීම සඳහා පිළිතුරු අනාථ වනු ඇත.", "confirmations.reply.confirm": "පිළිතුර", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", - "confirmations.unfollow.confirm": "Unfollow", - "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", - "conversation.delete": "Delete conversation", + "confirmations.reply.message": "දැන් පිළිතුරු දීම ඔබ දැනට රචනා කරන පණිවිඩය උඩින් ලියයි. ඔබට ඉදිරියට යාමට අවශ්‍ය බව විශ්වාසද?", + "confirmations.unfollow.confirm": "අනුගමනය නොකරන්න", + "confirmations.unfollow.message": "ඔබට {name}අනුගමනය නොකිරීමට අවශ්‍ය බව විශ්වාසද?", + "conversation.delete": "සංවාදය මකන්න", "conversation.mark_as_read": "කියවූ ලෙස සලකුණු කරන්න", "conversation.open": "සංවාදය බලන්න", "conversation.with": "{names} සමඟ", - "directory.federated": "From known fediverse", - "directory.local": "{domain} වෙතින් පමණි", - "directory.new_arrivals": "New arrivals", - "directory.recently_active": "Recently active", - "embed.instructions": "Embed this status on your website by copying the code below.", - "embed.preview": "Here is what it will look like:", + "directory.federated": "දන්නා fediverse වලින්", + "directory.local": "{domain} පමණි", + "directory.new_arrivals": "නව පැමිණීම්", + "directory.recently_active": "මෑතකදී ක්රියාකාරී", + "embed.instructions": "පහත කේතය පිටපත් කිරීමෙන් මෙම තත්ත්වය ඔබේ වෙබ් අඩවියට ඇතුළත් කරන්න.", + "embed.preview": "එය පෙනෙන්නේ කෙසේද යන්න මෙන්න:", "emoji_button.activity": "ක්‍රියාකාරකම", - "emoji_button.clear": "Clear", + "emoji_button.clear": "පැහැදිලිව", "emoji_button.custom": "අභිරුචි", - "emoji_button.flags": "Flags", + "emoji_button.flags": "කොඩි", "emoji_button.food": "ආහාර සහ පාන", - "emoji_button.label": "Insert emoji", - "emoji_button.nature": "සොබාදහම", - "emoji_button.not_found": "No matching emojis found", + "emoji_button.label": "ඉමොජි ඇතුළු කරන්න", + "emoji_button.nature": "ස්වභාවික", + "emoji_button.not_found": "ගැළපෙන ඉමෝජි හමු නොවීය", "emoji_button.objects": "වස්තූන්", "emoji_button.people": "මිනිසුන්", "emoji_button.recent": "නිතර භාවිතා වූ", @@ -164,386 +164,395 @@ "emoji_button.symbols": "සංකේත", "emoji_button.travel": "චාරිකා සහ ස්ථාන", "empty_column.account_suspended": "ගිණුම අත්හිටුවා ඇත", - "empty_column.account_timeline": "No toots here!", - "empty_column.account_unavailable": "Profile unavailable", + "empty_column.account_timeline": "මෙහි දත් නැත!", + "empty_column.account_unavailable": "පැතිකඩ නොමැත", "empty_column.blocks": "ඔබ තවමත් කිසිදු පරිශීලකයෙකු අවහිර කර නැත.", - "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", - "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", - "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.bookmarked_statuses": "ඔබට තවමත් පිටු සලකුණු කළ මෙවලම් කිසිවක් නොමැත. ඔබ එකක් පිටු සලකුණු කළ විට, එය මෙහි පෙන්වනු ඇත.", + "empty_column.community": "දේශීය කාලරේඛාව හිස් ය. පන්දුව පෙරළීමට ප්‍රසිද්ධියේ යමක් ලියන්න!", + "empty_column.direct": "ඔබට තවමත් සෘජු පණිවිඩ කිසිවක් නොමැත. ඔබ එකක් යවන විට හෝ ලැබුණු විට, එය මෙහි පෙන්වනු ඇත.", "empty_column.domain_blocks": "අවහිර කළ වසම් නොමැත.", - "empty_column.explore_statuses": "Nothing is trending right now. Check back later!", - "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", - "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", - "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", - "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", - "empty_column.hashtag": "There is nothing in this hashtag yet.", - "empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}", - "empty_column.home.suggestions": "See some suggestions", - "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", - "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", - "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.", - "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", - "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", - "error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.", - "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", - "error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", - "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", - "errors.unexpected_crash.report_issue": "Report issue", - "explore.search_results": "Search results", - "explore.suggested_follows": "For you", - "explore.title": "Explore", - "explore.trending_links": "News", - "explore.trending_statuses": "Posts", - "explore.trending_tags": "Hashtags", - "follow_recommendations.done": "Done", - "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", - "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", - "follow_request.authorize": "Authorize", - "follow_request.reject": "ප්‍රතික්ෂේප", - "follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.", + "empty_column.explore_statuses": "දැන් කිසිවක් නැඹුරු නොවේ. පසුව නැවත පරීක්ෂා කරන්න!", + "empty_column.favourited_statuses": "ඔබට තවමත් ප්‍රියතම දත් කිසිවක් නැත. ඔබ කැමති එකක් වූ විට, එය මෙහි පෙන්වනු ඇත.", + "empty_column.favourites": "කිසිවෙකු තවමත් මෙම මෙවලමට ප්‍රිය කර නැත. යමෙකු එසේ කළ විට, ඔවුන් මෙහි පෙන්වනු ඇත.", + "empty_column.follow_recommendations": "ඔබ වෙනුවෙන් යෝජනා ජනනය කළ නොහැකි බව පෙනේ. ඔබ දන්නා හඳුනන පුද්ගලයින් සෙවීමට හෝ ප්‍රවණතා හැෂ් ටැග් ගවේෂණය කිරීමට ඔබට සෙවීම භාවිත කිරීමට උත්සාහ කළ හැක.", + "empty_column.follow_requests": "ඔබට තවමත් අනුගමනය කිරීමේ ඉල්ලීම් කිසිවක් නොමැත. ඔබට එකක් ලැබුණු විට, එය මෙහි පෙන්වනු ඇත.", + "empty_column.hashtag": "මෙම හැෂ් ටැග් එකේ තවම කිසිවක් නොමැත.", + "empty_column.home": "ඔබගේ නිවසේ කාලරේඛාව හිස්ය! එය පිරවීම සඳහා තවත් පුද්ගලයින් අනුගමනය කරන්න. {suggestions}", + "empty_column.home.suggestions": "යෝජනා කිහිපයක් බලන්න", + "empty_column.list": "මෙම ලැයිස්තුවේ තවමත් කිසිවක් නොමැත. මෙම ලැයිස්තුවේ සාමාජිකයන් නව තත්ව පළ කරන විට, ඔවුන් මෙහි දිස් වනු ඇත.", + "empty_column.lists": "ඔබට තවමත් ලැයිස්තු කිසිවක් නැත. ඔබ එකක් සාදන විට, එය මෙහි පෙන්වනු ඇත.", + "empty_column.mutes": "ඔබ තවමත් කිසිදු පරිශීලකයෙකු නිහඬ කර නැත.", + "empty_column.notifications": "ඔබට තවම දැනුම්දීම් කිසිවක් නැත. වෙනත් පුද්ගලයින් ඔබ සමඟ අන්තර් ක්‍රියා කරන විට, ඔබ එය මෙහි දකිනු ඇත.", + "empty_column.public": "මෙහි කිසිවක් නැත! යමක් ප්‍රසිද්ධියේ ලියන්න, නැතහොත් එය පිරවීම සඳහා වෙනත් සේවාදායකයන්ගෙන් පරිශීලකයන් හස්තීයව අනුගමනය කරන්න", + "error.unexpected_crash.explanation": "අපගේ කේතයේ දෝෂයක් හෝ බ්‍රවුසර ගැළපුම් ගැටලුවක් හේතුවෙන්, මෙම පිටුව නිවැරදිව ප්‍රදර්ශනය කළ නොහැක.", + "error.unexpected_crash.explanation_addons": "මෙම පිටුව නිවැරදිව ප්‍රදර්ශනය කළ නොහැක. මෙම දෝෂය බ්‍රවුසර ඇඩෝනයක් හෝ ස්වයංක්‍රීය පරිවර්තන මෙවලම් නිසා ඇති විය හැක.", + "error.unexpected_crash.next_steps": "පිටුව නැවුම් කිරීමට උත්සාහ කරන්න. එය උදව් නොකළහොත්, ඔබට තවමත් වෙනත් බ්‍රවුසරයක් හෝ ස්වදේශීය යෙදුමක් හරහා Mastodon භාවිත කිරීමට හැකි වේ.", + "error.unexpected_crash.next_steps_addons": "ඒවා අක්‍රිය කර පිටුව නැවුම් කිරීමට උත්සාහ කරන්න. එය උදව් නොකළහොත්, ඔබට තවමත් වෙනත් බ්‍රවුසරයක් හෝ ස්වදේශීය යෙදුමක් හරහා Mastodon භාවිත කිරීමට හැකි වේ.", + "errors.unexpected_crash.copy_stacktrace": "ස්ටැක්ට්රේස් පසුරු පුවරුවට පිටපත් කරන්න", + "errors.unexpected_crash.report_issue": "ගැටලුව වාර්තා කරන්න", + "explore.search_results": "සෙවුම් ප්‍රතිඵල", + "explore.suggested_follows": "ඔයා වෙනුවෙන්", + "explore.title": "ගවේෂණය කරන්න", + "explore.trending_links": "පුවත්", + "explore.trending_statuses": "තනතුරු", + "explore.trending_tags": "හැෂ් ටැග්", + "follow_recommendations.done": "කළා", + "follow_recommendations.heading": "ඔබ පළ කිරීම් බැලීමට කැමති පුද්ගලයින් අනුගමනය කරන්න! මෙන්න යෝජනා කිහිපයක්.", + "follow_recommendations.lead": "ඔබ අනුගමන කරන පුද්ගලයින්ගේ පළ කිරීම් ඔබගේ නිවසේ සංග්‍රහයේ කාලානුක්‍රමික අනුපිළිවෙලට පෙන්වනු ඇත. වැරදි කිරීමට බිය නොවන්න, ඔබට ඕනෑම වේලාවක පහසුවෙන් මිනිසුන් අනුගමනය කළ නොහැක!", + "follow_request.authorize": "අවසරලත්", + "follow_request.reject": "ප්රතික්ෂේප", + "follow_requests.unlocked_explanation": "ඔබගේ ගිණුම අගුලු දමා නොතිබුණද, {domain} කාර්ය මණ්ඩලය සිතුවේ ඔබට මෙම ගිණුම් වලින් ලැබෙන ඉල්ලීම් හස්තීයව සමාලෝචනය කිරීමට අවශ්‍ය විය හැකි බවයි.", "generic.saved": "සුරැකිණි", "getting_started.developers": "සංවර්ධකයින්", "getting_started.directory": "පැතිකඩ නාමාවලිය", "getting_started.documentation": "ප්‍රලේඛනය", - "getting_started.heading": "Getting started", + "getting_started.heading": "ඇරඹේ", "getting_started.invite": "මිනිසුන්ට ආරාධනා කරන්න", - "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.open_source_notice": "Mastodon යනු විවෘත කේත මෘදුකාංගයකි. ඔබට GitHub හි {github}ට දායක වීමට හෝ ගැටළු වාර්තා කිරීමට හැකිය.", "getting_started.security": "ගිණුමේ සැකසුම්", "getting_started.terms": "සේවාවේ කොන්දේසි", "hashtag.column_header.tag_mode.all": "සහ {additional}", "hashtag.column_header.tag_mode.any": "හෝ {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_header.tag_mode.none": "{additional}නොමැතිව", "hashtag.column_settings.select.no_options_message": "යෝජනා කිසිවක් හමු නොවිණි", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", - "hashtag.column_settings.tag_mode.all": "මේ සියල්ලම", - "hashtag.column_settings.tag_mode.any": "මෙයින් ඕනෑම එකක්", - "hashtag.column_settings.tag_mode.none": "None of these", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.column_settings.select.placeholder": "හැෂ් ටැග්…ඇතුලත් කරන්න", + "hashtag.column_settings.tag_mode.all": "මේ වගේ", + "hashtag.column_settings.tag_mode.any": "ඇතුළත් එකක්", + "hashtag.column_settings.tag_mode.none": "මේ කිසිවක් නැත", + "hashtag.column_settings.tag_toggle": "මෙම තීරුවේ අමතර ටැග් ඇතුළත් කරන්න", "home.column_settings.basic": "මූලික", - "home.column_settings.show_reblogs": "Show boosts", - "home.column_settings.show_replies": "ප්‍රතිචාර පෙන්වන්න", + "home.column_settings.show_reblogs": "බූස්ට් පෙන්වන්න", + "home.column_settings.show_replies": "ප්රතිචාර පෙන්වන්න", "home.hide_announcements": "නිවේදන සඟවන්න", "home.show_announcements": "නිවේදන පෙන්වන්න", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "keyboard_shortcuts.back": "to navigate back", - "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", - "keyboard_shortcuts.column": "to focus a status in one of the columns", - "keyboard_shortcuts.compose": "to focus the compose textarea", + "intervals.full.days": "{number, plural, one {# දින} other {# දින}}", + "intervals.full.hours": "{number, plural, one {# පැය} other {# පැය}}", + "intervals.full.minutes": "{number, plural, one {විනාඩි #} other {# මිනිත්තු}}", + "keyboard_shortcuts.back": "ආපසු සැරිසැරීමට", + "keyboard_shortcuts.blocked": "අවහිර කළ පරිශීලක ලැයිස්තුව විවෘත කිරීමට", + "keyboard_shortcuts.boost": "වැඩි කිරීමට", + "keyboard_shortcuts.column": "එක් තීරුවක තත්ත්වය නාභිගත කිරීමට", + "keyboard_shortcuts.compose": "රචනා පාඨ ප්‍රදේශය නාභිගත කිරීමට", "keyboard_shortcuts.description": "සවිස්තරය", - "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "to move down in the list", - "keyboard_shortcuts.enter": "to open status", - "keyboard_shortcuts.favourite": "to favourite", - "keyboard_shortcuts.favourites": "to open favourites list", - "keyboard_shortcuts.federated": "to open federated timeline", - "keyboard_shortcuts.heading": "Keyboard Shortcuts", - "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.direct": "සෘජු පණිවිඩ තීරුව විවෘත කිරීමට", + "keyboard_shortcuts.down": "ලැයිස්තුවේ පහළට ගමන් කිරීමට", + "keyboard_shortcuts.enter": "තත්ත්වය විවෘත කිරීමට", + "keyboard_shortcuts.favourite": "කැමති කිරීමට", + "keyboard_shortcuts.favourites": "ප්රියතම ලැයිස්තුව විවෘත කිරීමට", + "keyboard_shortcuts.federated": "ෆෙඩරේටඩ් කාලරාමුව විවෘත කිරීමට", + "keyboard_shortcuts.heading": "යතුරුපුවරු කෙටිමං", + "keyboard_shortcuts.home": "නිවසේ කාලරේඛාව විවෘත කිරීමට", "keyboard_shortcuts.hotkey": "උණුසුම් යතුර", - "keyboard_shortcuts.legend": "to display this legend", - "keyboard_shortcuts.local": "to open local timeline", - "keyboard_shortcuts.mention": "to mention author", - "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.open_media": "to open media", - "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "to reply", - "keyboard_shortcuts.requests": "to open follow requests list", - "keyboard_shortcuts.search": "to focus search", - "keyboard_shortcuts.spoilers": "to show/hide CW field", - "keyboard_shortcuts.start": "to open \"get started\" column", - "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "to start a brand new toot", - "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", - "keyboard_shortcuts.up": "to move up in the list", + "keyboard_shortcuts.legend": "මෙම පුරාවෘත්තය ප්රදර්ශනය කිරීමට", + "keyboard_shortcuts.local": "දේශීය කාලරේඛාව විවෘත කිරීමට", + "keyboard_shortcuts.mention": "කතුවරයා සඳහන් කිරීමට", + "keyboard_shortcuts.muted": "නිශ්ශබ්ද පරිශීලක ලැයිස්තුව විවෘත කිරීමට", + "keyboard_shortcuts.my_profile": "ඔබගේ පැතිකඩ විවෘත කිරීමට", + "keyboard_shortcuts.notifications": "දැනුම්දීම් තීරුව විවෘත කිරීමට", + "keyboard_shortcuts.open_media": "මාධ්‍ය විවෘත කිරීමට", + "keyboard_shortcuts.pinned": "පින් කළ මෙවලම් ලැයිස්තුව විවෘත කිරීමට", + "keyboard_shortcuts.profile": "කර්තෘගේ පැතිකඩ විවෘත කිරීමට", + "keyboard_shortcuts.reply": "පිළිතුරු දීමට", + "keyboard_shortcuts.requests": "පහත ඉල්ලීම් ලැයිස්තුව විවෘත කිරීමට", + "keyboard_shortcuts.search": "සෙවුම් අවධානය යොමු කිරීමට", + "keyboard_shortcuts.spoilers": "CW ක්ෂේත්‍රය පෙන්වීමට/සැඟවීමට", + "keyboard_shortcuts.start": "\"ආරම්භ කරන්න\" තීරුව විවෘත කිරීමට", + "keyboard_shortcuts.toggle_hidden": "CW පිටුපස පෙළ පෙන්වීමට/සැඟවීමට", + "keyboard_shortcuts.toggle_sensitivity": "මාධ්‍ය පෙන්වීමට/සැඟවීමට", + "keyboard_shortcuts.toot": "අලුත්ම ටූට් එකක් පටන් ගන්න", + "keyboard_shortcuts.unfocus": "අවධානය යොමු නොකිරීමට textarea/search රචනා කරන්න", + "keyboard_shortcuts.up": "ලැයිස්තුවේ ඉහළට යාමට", "lightbox.close": "වසන්න", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", + "lightbox.compress": "රූප බැලීමේ කොටුව සම්පීඩනය කරන්න", + "lightbox.expand": "රූප දර්ශන පෙට්ටිය දිග හරින්න", "lightbox.next": "ඊළඟ", "lightbox.previous": "පෙර", - "limited_account_hint.action": "Show profile anyway", - "limited_account_hint.title": "This profile has been hidden by the moderators of your server.", + "limited_account_hint.action": "කෙසේ හෝ පැතිකඩ පෙන්වන්න", + "limited_account_hint.title": "මෙම පැතිකඩ ඔබගේ සේවාදායකයේ පරිපාලකයින් විසින් සඟවා ඇත.", "lists.account.add": "ලැයිස්තුවට එකතු කරන්න", - "lists.account.remove": "Remove from list", - "lists.delete": "Delete list", + "lists.account.remove": "ලැයිස්තුවෙන් ඉවත්", + "lists.delete": "ලැයිස්තුව මකන්න", "lists.edit": "ලැයිස්තුව සංස්කරණය කරන්න", - "lists.edit.submit": "Change title", + "lists.edit.submit": "මාතෘකාව වෙනස් කරන්න", "lists.new.create": "ලැයිස්තුව එකතු කරන්න", - "lists.new.title_placeholder": "New list title", - "lists.replies_policy.followed": "Any followed user", - "lists.replies_policy.list": "Members of the list", + "lists.new.title_placeholder": "නව ලැයිස්තු මාතෘකාව", + "lists.replies_policy.followed": "අනුගමනය කරන ඕනෑම පරිශීලකයෙක්", + "lists.replies_policy.list": "ලැයිස්තුවේ සාමාජිකයන්", "lists.replies_policy.none": "කිසිවෙක් නැත", - "lists.replies_policy.title": "Show replies to:", - "lists.search": "Search among people you follow", - "lists.subheading": "Your lists", - "load_pending": "{count, plural, one {# new item} other {# new items}}", + "lists.replies_policy.title": "පිළිතුරු පෙන්වන්න:", + "lists.search": "ඔබ අනුගමනය කරන පුද්ගලයින් අතර සොයන්න", + "lists.subheading": "ඔබේ ලැයිස්තු", + "load_pending": "{count, plural, one {# නව අයිතමයක්} other {නව අයිතම #ක්}}", "loading_indicator.label": "පූරණය වෙමින්...", - "media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}", - "missing_indicator.label": "Not found", - "missing_indicator.sublabel": "This resource could not be found", - "mute_modal.duration": "Duration", - "mute_modal.hide_notifications": "Hide notifications from this user?", - "mute_modal.indefinite": "Indefinite", + "media_gallery.toggle_visible": "{number, plural, one {රූපය සඟවන්න} other {පින්තූර සඟවන්න}}", + "missing_indicator.label": "හමු වුණේ නැහැ", + "missing_indicator.sublabel": "මෙම සම්පත සොයාගත නොහැකි විය", + "mute_modal.duration": "කාල සීමාව", + "mute_modal.hide_notifications": "මෙම පරිශීලකයාගෙන් දැනුම්දීම් සඟවන්නද?", + "mute_modal.indefinite": "අවිනිශ්චිත", "navigation_bar.apps": "ජංගම යෙදුම්", "navigation_bar.blocks": "අවහිර කළ පරිශීලකයින්", - "navigation_bar.bookmarks": "පොත් යොමු", - "navigation_bar.community_timeline": "Local timeline", - "navigation_bar.compose": "Compose new toot", - "navigation_bar.direct": "Direct messages", - "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.bookmarks": "පොත් යොමු කරන්න", + "navigation_bar.community_timeline": "දේශීය කාලරේඛාව", + "navigation_bar.compose": "නව ටූට් සාදන්න", + "navigation_bar.direct": "සෘජු පණිවිඩ", + "navigation_bar.discover": "සොයා ගන්න", + "navigation_bar.domain_blocks": "සැඟවුණු වසම්", "navigation_bar.edit_profile": "පැතිකඩ සංස්කරණය", - "navigation_bar.explore": "Explore", + "navigation_bar.explore": "ගවේෂණය කරන්න", "navigation_bar.favourites": "ප්‍රියතමයන්", - "navigation_bar.filters": "නිහඬ කළ වචන", - "navigation_bar.follow_requests": "Follow requests", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.filters": "සමඟ කළ වචන", + "navigation_bar.follow_requests": "ඉල්ලීම් අනුගමනය කරන්න", + "navigation_bar.follows_and_followers": "අනුගාමිකයින් සහ අනුගාමිකයින්", "navigation_bar.info": "මෙම සේවාදායකය පිළිබඳව", "navigation_bar.keyboard_shortcuts": "උණුසුම් යතුරු", - "navigation_bar.lists": "Lists", + "navigation_bar.lists": "ලැයිස්තු", "navigation_bar.logout": "නික්මෙන්න", - "navigation_bar.mutes": "Muted users", + "navigation_bar.mutes": "නිශ්ශබ්ද පරිශීලකයන්", "navigation_bar.personal": "පුද්ගලික", - "navigation_bar.pins": "Pinned toots", - "navigation_bar.preferences": "Preferences", - "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.pins": "ඇලවූ දත්", + "navigation_bar.preferences": "මනාප", + "navigation_bar.public_timeline": "ෆෙඩරේටඩ් කාලරේඛාව", "navigation_bar.security": "ආරක්ෂාව", - "notification.admin.sign_up": "{name} signed up", - "notification.favourite": "{name} favourited your status", - "notification.follow": "{name} followed you", - "notification.follow_request": "{name} has requested to follow you", - "notification.mention": "{name} mentioned you", - "notification.own_poll": "Your poll has ended", - "notification.poll": "A poll you have voted in has ended", - "notification.reblog": "{name} boosted your status", - "notification.status": "{name} just posted", - "notification.update": "{name} edited a post", + "notification.admin.report": "{name} වාර්තා {target}", + "notification.admin.sign_up": "{name} අත්සන් කර ඇත", + "notification.favourite": "{name} ඔබගේ තත්වයට කැමති විය", + "notification.follow": "{name} ඔබව අනුගමනය කළා", + "notification.follow_request": "{name} ඔබව අනුගමනය කිරීමට ඉල්ලා ඇත", + "notification.mention": "{name} ඔබව සඳහන් කර ඇත", + "notification.own_poll": "ඔබේ මත විමසුම අවසන් වී ඇත", + "notification.poll": "ඔබ ඡන්දය දුන් මත විමසුමක් අවසන් වී ඇත", + "notification.reblog": "{name} ඔබේ තත්ත්වය ඉහළ නැංවීය", + "notification.status": "{name} දැන් පළ කළා", + "notification.update": "{name} පළ කිරීමක් සංස්කරණය කළා", "notifications.clear": "දැනුම්දීම් හිස්කරන්න", - "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", - "notifications.column_settings.admin.sign_up": "New sign-ups:", - "notifications.column_settings.alert": "Desktop notifications", + "notifications.clear_confirmation": "ඔබට ඔබගේ සියලු දැනුම්දීම් ස්ථිරවම හිස් කිරීමට අවශ්‍ය බව විශ්වාසද?", + "notifications.column_settings.admin.report": "නව වාර්තා:", + "notifications.column_settings.admin.sign_up": "නව ලියාපදිංචි කිරීම්:", + "notifications.column_settings.alert": "ඩෙස්ක්ටොප් දැනුම්දීම්", "notifications.column_settings.favourite": "ප්‍රියතමයන්:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show_bar": "Show filter bar", - "notifications.column_settings.follow": "New followers:", - "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.filter_bar.advanced": "සියලුම කාණ්ඩ පෙන්වන්න", + "notifications.column_settings.filter_bar.category": "ඉක්මන් පෙරහන් තීරුව", + "notifications.column_settings.filter_bar.show_bar": "පෙරහන් තීරුව පෙන්වන්න", + "notifications.column_settings.follow": "නව අනුගාමිකයින්:", + "notifications.column_settings.follow_request": "නව පහත ඉල්ලීම්:", "notifications.column_settings.mention": "සැඳහුම්:", - "notifications.column_settings.poll": "Poll results:", - "notifications.column_settings.push": "Push notifications", - "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.poll": "ඡන්ද ප්‍රතිඵල:", + "notifications.column_settings.push": "තල්ලු දැනුම්දීම්", + "notifications.column_settings.reblog": "තල්ලු කිරීම්:", "notifications.column_settings.show": "තීරුවෙහි පෙන්වන්න", - "notifications.column_settings.sound": "ශබ්දය ධාවනය", - "notifications.column_settings.status": "New toots:", - "notifications.column_settings.unread_notifications.category": "Unread notifications", - "notifications.column_settings.unread_notifications.highlight": "Highlight unread notifications", - "notifications.column_settings.update": "Edits:", + "notifications.column_settings.sound": "ශබ්දය සිදු කරන ලදී", + "notifications.column_settings.status": "නව දත්:", + "notifications.column_settings.unread_notifications.category": "නොකියවූ දැනුම්දීම්", + "notifications.column_settings.unread_notifications.highlight": "නොකියවූ දැනුම්දීම් ඉස්මතු කරන්න", + "notifications.column_settings.update": "සංස්කරණ:", "notifications.filter.all": "සියල්ල", - "notifications.filter.boosts": "Boosts", + "notifications.filter.boosts": "බූස්ට් කරයි", "notifications.filter.favourites": "ප්‍රියතමයන්", - "notifications.filter.follows": "Follows", + "notifications.filter.follows": "පහත සඳහන්", "notifications.filter.mentions": "සැඳහුම්", - "notifications.filter.polls": "Poll results", - "notifications.filter.statuses": "Updates from people you follow", - "notifications.grant_permission": "Grant permission.", + "notifications.filter.polls": "ඡන්ද ප්‍රතිඵල", + "notifications.filter.statuses": "ඔබ අනුගමනය කරන පුද්ගලයින්ගෙන් යාවත්කාලීන", + "notifications.grant_permission": "අවසර දෙන්න.", "notifications.group": "දැනුම්දීම් {count}", - "notifications.mark_as_read": "සෑම දැනුම්දීමක්ම කියවූ ලෙස සලකුණු කරන්න", - "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", - "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", - "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", - "notifications_permission_banner.enable": "Enable desktop notifications", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", - "notifications_permission_banner.title": "Never miss a thing", - "picture_in_picture.restore": "Put it back", + "notifications.mark_as_read": "දැනුම්දීමක්ම කියවූ ලෙස සලකුණු කරන්න", + "notifications.permission_denied": "කලින් ප්‍රතික්ෂේප කළ බ්‍රවුසර අවසර ඉල්ලීම හේතුවෙන් ඩෙස්ක්ටොප් දැනුම්දීම් නොමැත", + "notifications.permission_denied_alert": "බ්‍රවුසර අවසරය පෙර ප්‍රතික්ෂේප කර ඇති බැවින්, ඩෙස්ක්ටොප් දැනුම්දීම් සබල කළ නොහැක", + "notifications.permission_required": "අවශ්‍ය අවසරය ලබා දී නොමැති නිසා ඩෙස්ක්ටොප් දැනුම්දීම් නොමැත.", + "notifications_permission_banner.enable": "ඩෙස්ක්ටොප් දැනුම්දීම් සබල කරන්න", + "notifications_permission_banner.how_to_control": "Mastodon විවෘතව නොමැති විට දැනුම්දීම් ලබා ගැනීමට, ඩෙස්ක්ටොප් දැනුම්දීම් සබල කරන්න. ඔබට ඒවා සක්‍රිය කළ පසු ඉහත {icon} බොත්තම හරහා ඩෙස්ක්ටොප් දැනුම්දීම් ජනනය කරන්නේ කුමන ආකාරයේ අන්තර්ක්‍රියාද යන්න නිවැරදිව පාලනය කළ හැක.", + "notifications_permission_banner.title": "කිසිම දෙයක් අතපසු කරන්න එපා", + "picture_in_picture.restore": "ආපහු දාන්න", "poll.closed": "වසා ඇත", "poll.refresh": "නැවුම් කරන්න", - "poll.total_people": "{count, plural, one {# person} other {# people}}", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.total_people": "{count, plural, one {# පුද්ගලයා} other {# මහජන}}", + "poll.total_votes": "{count, plural, one {# ඡන්දය} other {ඡන්ද #}}", "poll.vote": "මනාපය", - "poll.voted": "You voted for this answer", - "poll.votes": "{votes, plural, one {# vote} other {# votes}}", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", - "privacy.change": "Adjust status privacy", - "privacy.direct.long": "Visible for mentioned users only", - "privacy.direct.short": "Direct", - "privacy.private.long": "Visible for followers only", - "privacy.private.short": "Followers-only", - "privacy.public.long": "Visible for all", - "privacy.public.short": "ප්‍රසිද්ධ", - "privacy.unlisted.long": "Visible for all, but opted-out of discovery features", - "privacy.unlisted.short": "Unlisted", + "poll.voted": "ඔබ මෙම පිළිතුරට ඡන්දය දුන්නා", + "poll.votes": "{votes, plural, one {# ඡන්දය} other {ඡන්ද #}}", + "poll_button.add_poll": "මත විමසුමක් එක් කරන්න", + "poll_button.remove_poll": "ඡන්ද විමසීම ඉවත් කරන්න", + "privacy.change": "තත්ත්‍වයේ පෞද්ගලිකත්වය සීරුමාරු කරන්න", + "privacy.direct.long": "සඳහන් කළ පරිශීලකයින් සඳහා පමණක් දෘශ්‍යමාන වේ", + "privacy.direct.short": "සඳහන් කළ පුද්ගලයන් පමණි", + "privacy.private.long": "අනුගාමිකයින් සඳහා පමණක් දෘශ්‍යමාන වේ", + "privacy.private.short": "අනුගාමිකයින් පමණි", + "privacy.public.long": "සැමට දෘශ්‍යමානයි", + "privacy.public.short": "ප්රසිද්ධ", + "privacy.unlisted.long": "සැමට දෘශ්‍යමාන, නමුත් සොයාගැනීමේ විශේෂාංග වලින් ඉවත් විය", + "privacy.unlisted.short": "ලැයිස්තුගත නොකළ", "refresh": "නැවුම් කරන්න", "regeneration_indicator.label": "පූරණය වෙමින්…", - "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "regeneration_indicator.sublabel": "ඔබේ නිවසේ පෝෂණය සූදානම් වෙමින් පවතී!", "relative_time.days": "{number}d", - "relative_time.full.days": "{number, plural, one {# day} other {# days}} ago", - "relative_time.full.hours": "{number, plural, one {# hour} other {# hours}} ago", - "relative_time.full.just_now": "just now", - "relative_time.full.minutes": "{number, plural, one {# minute} other {# minutes}} ago", - "relative_time.full.seconds": "{number, plural, one {# second} other {# seconds}} ago", - "relative_time.hours": "{number}h", + "relative_time.full.days": "{number, plural, one {# දින} other {# දින}} පෙර", + "relative_time.full.hours": "{number, plural, one {# පැය} other {# පැය}} පෙර", + "relative_time.full.just_now": "මේ දැන්", + "relative_time.full.minutes": "{number, plural, one {විනාඩි #} other {# මිනිත්තු}} පෙර", + "relative_time.full.seconds": "{number, plural, one {# දෙවැනි} other {# තත්පර}} පෙර", + "relative_time.hours": "පැය {number}", "relative_time.just_now": "දැන්", - "relative_time.minutes": "{number}m", - "relative_time.seconds": "{number}s", + "relative_time.minutes": "මීටර් {number}", + "relative_time.seconds": "{number}තත්", "relative_time.today": "අද", "reply_indicator.cancel": "අවලංගු කරන්න", - "report.block": "Block", - "report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.", - "report.categories.other": "Other", - "report.categories.spam": "Spam", - "report.categories.violation": "Content violates one or more server rules", - "report.category.subtitle": "Choose the best match", - "report.category.title": "Tell us what's going on with this {type}", - "report.category.title_account": "profile", - "report.category.title_status": "post", - "report.close": "Done", - "report.comment.title": "Is there anything else you think we should know?", - "report.forward": "Forward to {target}", - "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", - "report.mute": "Mute", - "report.mute_explanation": "You will not see their posts. They can still follow you and see your posts and will not know that they are muted.", - "report.next": "Next", + "report.block": "අවහිර කරන්න", + "report.block_explanation": "ඔබට ඔවුන්ගේ පෝස්ට් නොපෙනේ. ඔවුන්ට ඔබේ පළ කිරීම් බැලීමට හෝ ඔබව අනුගමනය කිරීමට නොහැකි වනු ඇත. ඔවුන් අවහිර කර ඇති බව ඔවුන්ට පැවසිය හැකිය.", + "report.categories.other": "වෙනත්", + "report.categories.spam": "ආයාචිත තැපැල්", + "report.categories.violation": "අන්තර්ගතය සේවාදායක නීති එකක් හෝ කිහිපයක් උල්ලංඝනය කරයි", + "report.category.subtitle": "හොඳම ගැලපීම තෝරන්න", + "report.category.title": "මෙම {type}සමඟ සිදුවන්නේ කුමක්දැයි අපට කියන්න", + "report.category.title_account": "පැතිකඩ", + "report.category.title_status": "තැපැල්", + "report.close": "කළා", + "report.comment.title": "අප දැනගත යුතු යැයි ඔබ සිතන තවත් යමක් තිබේද?", + "report.forward": "{target}වෙත යොමු කරන්න", + "report.forward_hint": "ගිණුම වෙනත් සේවාදායකයකින්. වාර්තාවේ නිර්නාමික පිටපතක් එතනටත් එවන්න?", + "report.mute": "නිහඬ කරන්න", + "report.mute_explanation": "ඔබට ඔවුන්ගේ පෝස්ට් නොපෙනේ. ඔවුන්ට තවමත් ඔබව අනුගමනය කිරීමට සහ ඔබේ පළ කිරීම් දැකීමට හැකි අතර ඒවා නිශ්ශබ්ද කර ඇති බව නොදැනේ.", + "report.next": "ඊළඟ", "report.placeholder": "අමතර අදහස්", - "report.reasons.dislike": "I don't like it", - "report.reasons.dislike_description": "It is not something you want to see", - "report.reasons.other": "It's something else", - "report.reasons.other_description": "The issue does not fit into other categories", - "report.reasons.spam": "It's spam", - "report.reasons.spam_description": "Malicious links, fake engagement, or repetitive replies", - "report.reasons.violation": "It violates server rules", - "report.reasons.violation_description": "You are aware that it breaks specific rules", - "report.rules.subtitle": "Select all that apply", - "report.rules.title": "Which rules are being violated?", - "report.statuses.subtitle": "Select all that apply", - "report.statuses.title": "Are there any posts that back up this report?", + "report.reasons.dislike": "මම ඒකට කැමති නැහැ", + "report.reasons.dislike_description": "ඒක බලන්න ඕන දෙයක් නෙවෙයි", + "report.reasons.other": "ඒක වෙන දෙයක්", + "report.reasons.other_description": "ගැටළුව වෙනත් වර්ග වලට නොගැලපේ", + "report.reasons.spam": "එය අයාචිත තැපැල් ය", + "report.reasons.spam_description": "අනිෂ්ට සබැඳි, ව්‍යාජ නියැලීම, හෝ පුනරාවර්තන පිළිතුරු", + "report.reasons.violation": "එය සේවාදායක නීති උල්ලංඝනය කරයි", + "report.reasons.violation_description": "එය නිශ්චිත නීති කඩ කරන බව ඔබ දන්නවා", + "report.rules.subtitle": "අදාළ සියල්ල තෝරන්න", + "report.rules.title": "කුමන නීති උල්ලංඝනය කරන්නේද?", + "report.statuses.subtitle": "අදාළ සියල්ල තෝරන්න", + "report.statuses.title": "මෙම වාර්තාව උපස්ථ කරන පෝස්ට් තිබේද?", "report.submit": "යොමන්න", - "report.target": "Report {target}", - "report.thanks.take_action": "Here are your options for controlling what you see on Mastodon:", - "report.thanks.take_action_actionable": "While we review this, you can take action against @{name}:", - "report.thanks.title": "Don't want to see this?", - "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", - "report.unfollow": "Unfollow @{name}", - "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report.target": "වාර්තාව {target}", + "report.thanks.take_action": "Mastodon හි ඔබ දකින දේ පාලනය කිරීම සඳහා ඔබේ විකල්ප මෙන්න:", + "report.thanks.take_action_actionable": "අපි මෙය සමාලෝචනය කරන අතරතුර, ඔබට @{name}ට එරෙහිව පියවර ගත හැක:", + "report.thanks.title": "මේක බලන්න ඕන නැද්ද?", + "report.thanks.title_actionable": "වාර්තා කිරීමට ස්තූතියි, අපි මේ ගැන සොයා බලමු.", + "report.unfollow": "@{name}අනුගමනය නොකරන්න", + "report.unfollow_explanation": "ඔබ මෙම ගිණුම අනුගමනය කරයි. ඔබේ නිවසේ සංග්‍රහයේ ඔවුන්ගේ පළ කිරීම් තවදුරටත් නොදැකීමට, ඒවා අනුගමනය නොකරන්න.", + "report_notification.attached_statuses": "{count, plural, one {{count} තැපැල්} other {{count} තනතුරු}} අමුණා ඇත", + "report_notification.categories.other": "වෙනත්", + "report_notification.categories.spam": "ආයාචිත තැපැල්", + "report_notification.categories.violation": "රීති උල්ලංඝනය කිරීම", + "report_notification.open": "විවෘත වාර්තාව", "search.placeholder": "සොයන්න", - "search_popout.search_format": "Advanced search format", - "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", - "search_popout.tips.hashtag": "hashtag", - "search_popout.tips.status": "status", - "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.search_format": "උසස් සෙවුම් ආකෘතිය", + "search_popout.tips.full_text": "සරල පෙළ ඔබ ලියා ඇති, ප්‍රිය කළ, වැඩි කළ හෝ සඳහන් කර ඇති තත්ත්වයන් මෙන්ම ගැළපෙන පරිශීලක නාම, සංදර්ශක නම් සහ හැෂ් ටැග් ලබා දෙයි.", + "search_popout.tips.hashtag": "හෑෂ් ටැගය", + "search_popout.tips.status": "තත්ත්වය", + "search_popout.tips.text": "සරල පෙළ ගැළපෙන සංදර්ශක නම්, පරිශීලක නාම සහ හැෂ් ටැග් ලබා දෙයි", "search_popout.tips.user": "පරිශීලක", "search_results.accounts": "මිනිසුන්", - "search_results.all": "All", - "search_results.hashtags": "Hashtags", - "search_results.nothing_found": "Could not find anything for these search terms", - "search_results.statuses": "Toots", - "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", - "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", + "search_results.all": "සියලුම", + "search_results.hashtags": "හැෂ් ටැග්", + "search_results.nothing_found": "මෙම සෙවුම් පද සඳහා කිසිවක් සොයාගත නොහැකි විය", + "search_results.statuses": "ටූට්ස්", + "search_results.statuses_fts_disabled": "මෙම Mastodon සේවාදායකයේ ඒවායේ අන්තර්ගතය අනුව මෙවලම් සෙවීම සබල නොවේ.", + "search_results.total": "{count, number} {count, plural, one {ප්රතිඵලය} other {ප්රතිපල}}", + "status.admin_account": "@{name}සඳහා මධ්‍යස්ථ අතුරුමුහුණත විවෘත කරන්න", + "status.admin_status": "මධ්‍යස්ථ අතුරුමුහුණතෙහි මෙම තත්ත්වය විවෘත කරන්න", "status.block": "@{name} අවහිර කරන්න", "status.bookmark": "පොත් යොමුව", "status.cancel_reblog_private": "Unboost", - "status.cannot_reblog": "This post cannot be boosted", - "status.copy": "Copy link to status", - "status.delete": "Delete", - "status.detailed_status": "Detailed conversation view", + "status.cannot_reblog": "මෙම තනතුර වැඩි කළ නොහැක", + "status.copy": "තත්වයට සබැඳිය පිටපත් කරන්න", + "status.delete": "මකන්න", + "status.detailed_status": "සවිස්තරාත්මක සංවාද දසුන", "status.direct": "@{name} සෘජු පණිවිඩය", - "status.edit": "Edit", - "status.edited": "Edited {date}", - "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", + "status.edit": "සංස්කරණය කරන්න", + "status.edited": "සංස්කරණය {date}", + "status.edited_x_times": "සංස්කරණය කළා {count, plural, one {{count} කාලය} other {{count} වාර}}", "status.embed": "එබ්බවූ", "status.favourite": "ප්‍රියතම", "status.filtered": "පෙරන ලද", - "status.history.created": "{name} created {date}", - "status.history.edited": "{name} edited {date}", + "status.hide": "Hide toot", + "status.history.created": "{name} නිර්මාණය {date}", + "status.history.edited": "{name} සංස්කරණය {date}", "status.load_more": "තව පූරණය කරන්න", - "status.media_hidden": "මාධ්‍ය සඟවා ඇත", + "status.media_hidden": "මාධ්‍ය සංගුවා ඇත", "status.mention": "@{name} සැඳහුම", "status.more": "තව", - "status.mute": "@{name} නිහඬ කරන්න", - "status.mute_conversation": "සංවාදය නිහඬ කරන්න", - "status.open": "Expand this status", - "status.pin": "Pin on profile", - "status.pinned": "Pinned toot", + "status.mute": "@{name} කරන්න", + "status.mute_conversation": "සංවාදයෙන් කරන්න", + "status.open": "මෙම තත්ත්වය පුළුල් කරන්න", + "status.pin": "පැතිකඩ මත අමුණන්න", + "status.pinned": "පින් කළ දත", "status.read_more": "තව කියවන්න", - "status.reblog": "Boost", - "status.reblog_private": "Boost with original visibility", - "status.reblogged_by": "{name} boosted", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", - "status.redraft": "Delete & re-draft", + "status.reblog": "බූස්ට් කරන්න", + "status.reblog_private": "මුල් දෘශ්‍යතාව සමඟ වැඩි කරන්න", + "status.reblogged_by": "{name} වැඩි කරන ලදී", + "status.reblogs.empty": "තාම කවුරුත් මේ toot එක boost කරලා නැහැ. යමෙකු එසේ කළ විට, ඔවුන් මෙහි පෙන්වනු ඇත.", + "status.redraft": "මකන්න සහ නැවත කෙටුම්පත", "status.remove_bookmark": "පොත්යොමුව ඉවත් කරන්න", "status.reply": "පිළිතුරු", - "status.replyAll": "Reply to thread", + "status.replyAll": "ත්‍රෙඩ් එකට පිළිතුරු දෙන්න", "status.report": "@{name} වාර්තා කරන්න", "status.sensitive_warning": "සංවේදී අන්තර්ගතයකි", "status.share": "බෙදාගන්න", + "status.show_filter_reason": "Show anyway", "status.show_less": "අඩුවෙන් පෙන්වන්න", - "status.show_less_all": "Show less for all", + "status.show_less_all": "සියල්ලටම අඩුවෙන් පෙන්වන්න", "status.show_more": "තව පෙන්වන්න", - "status.show_more_all": "Show more for all", - "status.show_thread": "Show thread", - "status.uncached_media_warning": "Not available", - "status.unmute_conversation": "Unmute conversation", - "status.unpin": "Unpin from profile", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", - "tabs_bar.federated_timeline": "Federated", + "status.show_more_all": "සියල්ල සඳහා තවත් පෙන්වන්න", + "status.show_thread": "නූල් පෙන්වන්න", + "status.uncached_media_warning": "ලද නොහැක", + "status.unmute_conversation": "සංවාදය නිහඬ නොකරන්න", + "status.unpin": "පැතිකඩෙන් ඉවත් කරන්න", + "suggestions.dismiss": "යෝජනාව ඉවත ලන්න", + "suggestions.header": "ඔබ…ගැන උනන්දු විය හැකිය", + "tabs_bar.federated_timeline": "ෆෙඩරල්", "tabs_bar.home": "මුල් පිටුව", "tabs_bar.local_timeline": "ස්ථානීය", "tabs_bar.notifications": "දැනුම්දීම්", "tabs_bar.search": "සොයන්න", - "time_remaining.days": "{number, plural, one {# day} other {# days}} left", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", - "time_remaining.moments": "Moments remaining", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", - "timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.", - "timeline_hint.resources.followers": "Followers", - "timeline_hint.resources.follows": "Follows", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", - "trends.trending_now": "Trending now", - "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", - "units.short.billion": "{count}B", - "units.short.million": "{count}M", - "units.short.thousand": "{count}K", + "time_remaining.days": "{number, plural, one {# දින} other {# දින}} අත්හැරියා", + "time_remaining.hours": "{number, plural, one {# පැය} other {# පැය}} අත්හැරියා", + "time_remaining.minutes": "{number, plural, one {විනාඩි #} other {# මිනිත්තු}} අත්හැරියා", + "time_remaining.moments": "ඉතිරිව ඇති මොහොත", + "time_remaining.seconds": "{number, plural, one {# දෙවැනි} other {# තත්පර}} අත්හැරියා", + "timeline_hint.remote_resource_not_displayed": "වෙනත් සේවාදායකයන්ගෙන් {resource} දර්ශනය නොවේ.", + "timeline_hint.resources.followers": "අනුගාමිකයින්", + "timeline_hint.resources.follows": "පහත සඳහන්", + "timeline_hint.resources.statuses": "පැරණි දත්", + "trends.counter_by_accounts": "{count, plural, one {{counter} පුද්ගලයා} other {{counter} මහජන}} කතා කරනවා", + "trends.trending_now": "දැන් ප්‍රවණතාවය", + "ui.beforeunload": "ඔබ Mastodon හැර ගියහොත් ඔබේ කෙටුම්පත නැති වනු ඇත.", + "units.short.billion": "{count}බී", + "units.short.million": "{count}එම්", + "units.short.thousand": "{count}කි", "upload_area.title": "උඩුගත කිරීමට ඇද දමන්න", - "upload_button.label": "Add images, a video or an audio file", - "upload_error.limit": "ගොනුව උඩුගත කළ හැකි සීමාව ඉක්මවා ඇත.", - "upload_error.poll": "File upload not allowed with polls.", - "upload_form.audio_description": "Describe for people with hearing loss", - "upload_form.description": "Describe for the visually impaired", - "upload_form.description_missing": "No description added", + "upload_button.label": "පින්තූර, වීඩියෝවක් හෝ ශ්‍රව්‍ය ගොනුවක් එක් කරන්න", + "upload_error.limit": "ගොනුව උඩුගත කළ හැකි සීමාවන් ඇත.", + "upload_error.poll": "ඡන්ද විමසීම් සමඟ ගොනු උඩුගත කිරීමට අවසර නැත.", + "upload_form.audio_description": "ශ්‍රවණාබාධ ඇති පුද්ගලයන් සඳහා විස්තර කරන්න", + "upload_form.description": "දෘශ්‍යාබාධිතයන් සඳහා විස්තර කරන්න", + "upload_form.description_missing": "විස්තරයක් එක් කර නැත", "upload_form.edit": "සංස්කරණය", - "upload_form.thumbnail": "Change thumbnail", - "upload_form.undo": "Delete", - "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_form.thumbnail": "සිඟිති රුව වෙනස් කරන්න", + "upload_form.undo": "මකන්න", + "upload_form.video_description": "ශ්‍රවණාබාධ හෝ දෘශ්‍යාබාධිත පුද්ගලයන් සඳහා විස්තර කරන්න", "upload_modal.analyzing_picture": "පින්තූරය විශ්ලේෂණය කරමින්…", "upload_modal.apply": "යොදන්න", - "upload_modal.applying": "Applying…", - "upload_modal.choose_image": "පින්තුරයක් තෝරන්න", - "upload_modal.description_placeholder": "කඩිසර දුඹුරු හිවලෙක් කම්මැලි බල්ලා මතින් පනී", - "upload_modal.detect_text": "පින්තූරයෙන් පාඨ හඳුනාගන්න", + "upload_modal.applying": "…යෙදීම", + "upload_modal.choose_image": "පින්තුරයක් තෝරාගන්න", + "upload_modal.description_placeholder": "කඩිසර හා හිවලෙක් කම්මැලි බල්ලා මතින් පනී", + "upload_modal.detect_text": "පින්තූරයෙන් හඳුනාගන්න", "upload_modal.edit_media": "මාධ්‍ය සංස්කරණය", - "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", - "upload_modal.preparing_ocr": "Preparing OCR…", + "upload_modal.hint": "සියලුම සිඟිති රූ මත සැම විටම දර්ශනය වන නාභි ලක්ෂ්‍යය තේරීමට පෙරදසුනෙහි රවුම ක්ලික් කරන්න හෝ අදින්න.", + "upload_modal.preparing_ocr": "OCR…සූදානම් කරමින්", "upload_modal.preview_label": "පෙරදසුන ({ratio})", "upload_progress.label": "උඩුගත වෙමින්...", - "video.close": "දෘශ්‍යකය වසන්න", + "video.close": "දෘශ්‍යයක් වසන්න", "video.download": "ගොනුව බාගන්න", "video.exit_fullscreen": "පූර්ණ තිරයෙන් පිටවන්න", - "video.expand": "Expand video", + "video.expand": "වීඩියෝව දිග හරින්න", "video.fullscreen": "පූර්ණ තිරය", - "video.hide": "දෘශ්‍යකය සඟවන්න", - "video.mute": "Mute sound", + "video.hide": "දෘශ්‍ය‍ය සඟවන්න", + "video.mute": "ශබ්දය නිශ්ශබ්ද කරන්න", "video.pause": "විරාමය", "video.play": "ධාවනය", - "video.unmute": "Unmute sound" + "video.unmute": "ශබ්දය නිශ්ශබ්ද කරන්න" } diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 861722c2fca..46873d31c97 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -268,7 +268,7 @@ "lightbox.next": "Ďalšie", "lightbox.previous": "Predchádzajúci", "limited_account_hint.action": "Ukáž profil aj tak", - "limited_account_hint.title": "This profile has been hidden by the moderators of your server.", + "limited_account_hint.title": "Tento profil bol ukrytý správcami tvojho servera.", "lists.account.add": "Pridaj do zoznamu", "lists.account.remove": "Odober zo zoznamu", "lists.delete": "Vymaž list", @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Nastavenia", "navigation_bar.public_timeline": "Federovaná časová os", "navigation_bar.security": "Zabezbečenie", + "notification.admin.report": "{name} nahlásil/a {target}", "notification.admin.sign_up": "{name} sa zaregistroval/a", "notification.favourite": "{name} si obľúbil/a tvoj príspevok", "notification.follow": "{name} ťa začal/a následovať", @@ -326,6 +327,7 @@ "notification.update": "{name} upravil/a príspevok", "notifications.clear": "Vyčisti oboznámenia", "notifications.clear_confirmation": "Naozaj chceš nenávratne prečistiť všetky tvoje oboznámenia?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "Nové registrácie:", "notifications.column_settings.alert": "Oboznámenia na ploche", "notifications.column_settings.favourite": "Obľúbené:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Nesleduj @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Hľadaj", "search_popout.search_format": "Pokročilé vyhľadávanie", "search_popout.tips.full_text": "Vráti jednoduchý textový výpis príspevkov ktoré si napísal/a, ktoré si obľúbil/a, povýšil/a, alebo aj tých, v ktorých si bol/a spomenutý/á, a potom všetky zadaniu odpovedajúce prezývky, mená a haštagy.", @@ -461,6 +468,7 @@ "status.embed": "Vložiť", "status.favourite": "Páči sa mi", "status.filtered": "Filtrované", + "status.hide": "Hide toot", "status.history.created": "{name} vytvoril/a {date}", "status.history.edited": "{name} upravil/a {date}", "status.load_more": "Ukáž viac", @@ -484,6 +492,7 @@ "status.report": "Nahlás @{name}", "status.sensitive_warning": "Chúlostivý obsah", "status.share": "Zdieľaj", + "status.show_filter_reason": "Show anyway", "status.show_less": "Zobraz menej", "status.show_less_all": "Všetkým ukáž menej", "status.show_more": "Ukáž viac", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index b094abfff88..894824413d5 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Nastavitve", "navigation_bar.public_timeline": "Združena časovnica", "navigation_bar.security": "Varnost", + "notification.admin.report": "{name} je prijavil/a {target}", "notification.admin.sign_up": "{name} se je vpisal/a", "notification.favourite": "{name} je vzljubil/a vaš status", "notification.follow": "{name} vam sledi", @@ -326,6 +327,7 @@ "notification.update": "{name} je uredil(a) objavo", "notifications.clear": "Počisti obvestila", "notifications.clear_confirmation": "Ali ste prepričani, da želite trajno izbrisati vsa vaša obvestila?", + "notifications.column_settings.admin.report": "Nove prijave:", "notifications.column_settings.admin.sign_up": "Novi vpisi:", "notifications.column_settings.alert": "Namizna obvestila", "notifications.column_settings.favourite": "Priljubljeni:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Hvala za poročilo, bomo preverili.", "report.unfollow": "Ne sledi več @{name}", "report.unfollow_explanation": "Temu računu sledite. Da ne boste več videli njegovih objav v svojem domačem viru, mu prenehajte slediti.", + "report_notification.attached_statuses": "{count, plural, one {{count} objava pripeta} two {{count} objavi pripeti} few {{count} objave pripete} other {{count} objav pripetih}}", + "report_notification.categories.other": "Drugo", + "report_notification.categories.spam": "Neželeno", + "report_notification.categories.violation": "Kršitev pravila", + "report_notification.open": "Odpri prijavo", "search.placeholder": "Iskanje", "search_popout.search_format": "Napredna oblika iskanja", "search_popout.tips.full_text": "Enostavno besedilo vrne objave, ki ste jih napisali, vzljubili, izpostavili ali ste bili v njih omenjeni, kot tudi ujemajoča se uporabniška imena, prikazna imena in ključnike.", @@ -461,6 +468,7 @@ "status.embed": "Vgradi", "status.favourite": "Priljubljen", "status.filtered": "Filtrirano", + "status.hide": "Hide toot", "status.history.created": "{name}: ustvarjeno {date}", "status.history.edited": "{name}: urejeno {date}", "status.load_more": "Naloži več", @@ -484,6 +492,7 @@ "status.report": "Prijavi @{name}", "status.sensitive_warning": "Občutljiva vsebina", "status.share": "Deli", + "status.show_filter_reason": "Show anyway", "status.show_less": "Prikaži manj", "status.show_less_all": "Prikaži manj za vse", "status.show_more": "Prikaži več", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index ba354e98b1e..6bc84ae0c49 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Parapëlqime", "navigation_bar.public_timeline": "Rrjedhë kohore të federuarish", "navigation_bar.security": "Siguri", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} u regjistrua", "notification.favourite": "{name} pëlqeu mesazhin tuaj", "notification.follow": "{name} zuri t’ju ndjekë", @@ -326,6 +327,7 @@ "notification.update": "{name} përpunoi një postim", "notifications.clear": "Spastroji njoftimet", "notifications.clear_confirmation": "Jeni i sigurt se doni të spastrohen përgjithmonë krejt njoftimet tuaja?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "Regjistrime të reja:", "notifications.column_settings.alert": "Njoftime desktopi", "notifications.column_settings.favourite": "Të parapëlqyer:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Faleminderit për raportimin, do ta shohim.", "report.unfollow": "Mos e ndiq më @{name}", "report.unfollow_explanation": "Po e ndiqni këtë llogari. Për të mos parë më postimet e tyre te prurja juaj e kreut, ndalni ndjekjen e tyre.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Kërkoni", "search_popout.search_format": "Format kërkimi të mëtejshëm", "search_popout.tips.full_text": "Kërkimi për tekst të thjeshtë përgjigjet me mesazhe që keni shkruar, parapëlqyer, përforcuar, ose ku jeni përmendur, si dhe emra përdoruesish, emra ekrani dhe hashtag-ë që kanë përputhje me termin e kërkimit.", @@ -461,6 +468,7 @@ "status.embed": "Trupëzim", "status.favourite": "I parapëlqyer", "status.filtered": "I filtruar", + "status.hide": "Hide toot", "status.history.created": "{name} u krijua më {date}", "status.history.edited": "{name} u përpunua më {date}", "status.load_more": "Ngarko më tepër", @@ -484,6 +492,7 @@ "status.report": "Raportojeni @{name}", "status.sensitive_warning": "Lëndë rezervat", "status.share": "Ndajeni me të tjerë", + "status.show_filter_reason": "Show anyway", "status.show_less": "Shfaq më pak", "status.show_less_all": "Shfaq më pak për të tërë", "status.show_more": "Shfaq më tepër", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 498cbf96382..4dedb58bbc8 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Podešavanja", "navigation_bar.public_timeline": "Federisana lajna", "navigation_bar.security": "Security", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} je stavio Vaš status kao omiljeni", "notification.follow": "{name} Vas je zapratio", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Očisti obaveštenja", "notifications.clear_confirmation": "Da li ste sigurno da trajno želite da očistite Vaša obaveštenja?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Obaveštenja na radnoj površini", "notifications.column_settings.favourite": "Omiljeni:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Pretraga", "search_popout.search_format": "Napredni format pretrage", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Ugradi na sajt", "status.favourite": "Omiljeno", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Učitaj još", @@ -484,6 +492,7 @@ "status.report": "Prijavi korisnika @{name}", "status.sensitive_warning": "Osetljiv sadržaj", "status.share": "Podeli", + "status.show_filter_reason": "Show anyway", "status.show_less": "Prikaži manje", "status.show_less_all": "Show less for all", "status.show_more": "Prikaži više", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 1e6ec208654..42ae479daa5 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Подешавања", "navigation_bar.public_timeline": "Здружена временска линија", "navigation_bar.security": "Безбедност", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} је ставио/ла Ваш статус као омиљени", "notification.follow": "{name} Вас је запратио/ла", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Очисти обавештења", "notifications.clear_confirmation": "Да ли сте сигурно да трајно желите да очистите Ваша обавештења?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Обавештења на радној површини", "notifications.column_settings.favourite": "Омиљени:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Претрага", "search_popout.search_format": "Напредни формат претраге", "search_popout.tips.full_text": "Једноставан текст враћа статусе које сте написали, фаворизовали, подржали или били поменути, као и подударање корисничких имена, приказаних имена, и тараба.", @@ -461,6 +468,7 @@ "status.embed": "Угради на сајт", "status.favourite": "Омиљено", "status.filtered": "Филтрирано", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Учитај још", @@ -484,6 +492,7 @@ "status.report": "Пријави корисника @{name}", "status.sensitive_warning": "Осетљив садржај", "status.share": "Подели", + "status.show_filter_reason": "Show anyway", "status.show_less": "Прикажи мање", "status.show_less_all": "Прикажи мање за све", "status.show_more": "Прикажи више", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 46baa722ec7..d8d2c6720da 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Inställningar", "navigation_bar.public_timeline": "Federerad tidslinje", "navigation_bar.security": "Säkerhet", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} registrerade sig", "notification.favourite": "{name} favoriserade din status", "notification.follow": "{name} följer dig", @@ -326,6 +327,7 @@ "notification.update": "{name} redigerade ett inlägg", "notifications.clear": "Rensa aviseringar", "notifications.clear_confirmation": "Är du säker på att du vill rensa alla dina aviseringar permanent?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "Nya registreringar:", "notifications.column_settings.alert": "Skrivbordsaviseringar", "notifications.column_settings.favourite": "Favoriter:", @@ -431,6 +433,11 @@ "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": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Sök", "search_popout.search_format": "Avancerat sökformat", "search_popout.tips.full_text": "Enkel text returnerar statusar där du har skrivit, favoriserat, knuffat eller nämnts samt med matchande användarnamn, visningsnamn och hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Bädda in", "status.favourite": "Favorit", "status.filtered": "Filtrerat", + "status.hide": "Hide toot", "status.history.created": "{name} skapade {date}", "status.history.edited": "{name} redigerade {date}", "status.load_more": "Ladda fler", @@ -484,6 +492,7 @@ "status.report": "Rapportera @{name}", "status.sensitive_warning": "Känsligt innehåll", "status.share": "Dela", + "status.show_filter_reason": "Show anyway", "status.show_less": "Visa mindre", "status.show_less_all": "Visa mindre för alla", "status.show_more": "Visa mer", diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json index 658a3318ee6..13cb39de85e 100644 --- a/app/javascript/mastodon/locales/szl.json +++ b/app/javascript/mastodon/locales/szl.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferences", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} favourited your status", "notification.follow": "{name} followed you", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favourites:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Search", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Embed", "status.favourite": "Favourite", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Load more", @@ -484,6 +492,7 @@ "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", "status.share": "Share", + "status.show_filter_reason": "Show anyway", "status.show_less": "Show less", "status.show_less_all": "Show less for all", "status.show_more": "Show more", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 68b11b61b2d..6491ff7b703 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "விருப்பங்கள்", "navigation_bar.public_timeline": "கூட்டாட்சி காலக்கெடு", "navigation_bar.security": "பத்திரம்", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} ஆர்வம் கொண்டவர், உங்கள் நிலை", "notification.follow": "{name} உங்களைப் பின்தொடர்கிறார்", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "அறிவிப்புகளை அழிக்கவும்", "notifications.clear_confirmation": "உங்கள் எல்லா அறிவிப்புகளையும் நிரந்தரமாக அழிக்க விரும்புகிறீர்களா?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "டெஸ்க்டாப் அறிவிப்புகள்", "notifications.column_settings.favourite": "பிடித்தவை:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "தேடு", "search_popout.search_format": "மேம்பட்ட தேடல் வடிவம்", "search_popout.tips.full_text": "எளிமையான உரை நீங்கள் எழுதப்பட்ட, புகழ், அதிகரித்தது, அல்லது குறிப்பிட்டுள்ள, அதே போல் பயனர் பெயர்கள், காட்சி பெயர்கள், மற்றும் ஹேஸ்டேகைகளை கொண்டுள்ளது என்று நிலைகளை கொடுக்கிறது.", @@ -461,6 +468,7 @@ "status.embed": "கிடத்து", "status.favourite": "விருப்பத்துக்குகந்த", "status.filtered": "வடிகட்டு", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "அதிகமாய் ஏற்று", @@ -484,6 +492,7 @@ "status.report": "@{name} மீது புகாரளி", "status.sensitive_warning": "உணர்திறன் உள்ளடக்கம்", "status.share": "பங்கிடு", + "status.show_filter_reason": "Show anyway", "status.show_less": "குறைவாகக் காண்பி", "status.show_less_all": "அனைத்தையும் குறைவாக காட்டு", "status.show_more": "மேலும் காட்ட", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index 89683cb632e..268ce7ef72f 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferences", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} favourited your status", "notification.follow": "{name} followed you", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favourites:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Search", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Embed", "status.favourite": "Favourite", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Load more", @@ -484,6 +492,7 @@ "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", "status.share": "Share", + "status.show_filter_reason": "Show anyway", "status.show_less": "Show less", "status.show_less_all": "Show less for all", "status.show_more": "Show more", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index c84ecd00d54..f2312ee12c0 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "ప్రాధాన్యతలు", "navigation_bar.public_timeline": "సమాఖ్య కాలక్రమం", "navigation_bar.security": "భద్రత", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} మీ స్టేటస్ ను ఇష్టపడ్డారు", "notification.follow": "{name} మిమ్మల్ని అనుసరిస్తున్నారు", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "ప్రకటనలను తుడిచివేయు", "notifications.clear_confirmation": "మీరు మీ అన్ని నోటిఫికేషన్లను శాశ్వతంగా తొలగించాలనుకుంటున్నారా?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "డెస్క్టాప్ నోటిఫికేషన్లు", "notifications.column_settings.favourite": "ఇష్టపడినవి:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "శోధన", "search_popout.search_format": "అధునాతన శోధన ఆకృతి", "search_popout.tips.full_text": "సాధారణ వచనం మీరు వ్రాసిన, ఇష్టపడే, పెంచబడిన లేదా పేర్కొనబడిన, అలాగే యూజర్పేర్లు, ప్రదర్శన పేర్లు, మరియు హ్యాష్ట్యాగ్లను నమోదు చేసిన హోదాలను అందిస్తుంది.", @@ -461,6 +468,7 @@ "status.embed": "ఎంబెడ్", "status.favourite": "ఇష్టపడు", "status.filtered": "వడకట్టబడిన", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "మరిన్ని లోడ్ చేయి", @@ -484,6 +492,7 @@ "status.report": "@{name}పై ఫిర్యాదుచేయు", "status.sensitive_warning": "సున్నితమైన కంటెంట్", "status.share": "పంచుకోండి", + "status.show_filter_reason": "Show anyway", "status.show_less": "తక్కువ చూపించు", "status.show_less_all": "అన్నిటికీ తక్కువ చూపించు", "status.show_more": "ఇంకా చూపించు", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index b4e85be06e8..85444d9d81a 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "การกำหนดลักษณะ", "navigation_bar.public_timeline": "เส้นเวลาที่ติดต่อกับภายนอก", "navigation_bar.security": "ความปลอดภัย", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} ได้ลงทะเบียน", "notification.favourite": "{name} ได้ชื่นชอบโพสต์ของคุณ", "notification.follow": "{name} ได้ติดตามคุณ", @@ -326,6 +327,7 @@ "notification.update": "{name} ได้แก้ไขโพสต์", "notifications.clear": "ล้างการแจ้งเตือน", "notifications.clear_confirmation": "คุณแน่ใจหรือไม่ว่าต้องการล้างการแจ้งเตือนทั้งหมดของคุณอย่างถาวร?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "การลงทะเบียนใหม่:", "notifications.column_settings.alert": "การแจ้งเตือนบนเดสก์ท็อป", "notifications.column_settings.favourite": "รายการโปรด:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "ขอบคุณสำหรับการรายงาน เราจะตรวจสอบสิ่งนี้", "report.unfollow": "เลิกติดตาม @{name}", "report.unfollow_explanation": "คุณกำลังติดตามบัญชีนี้ เพื่อไม่ให้เห็นโพสต์ของเขาในฟีดหน้าแรกของคุณอีกต่อไป เลิกติดตามเขา", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "รายงานที่เปิด", "search.placeholder": "ค้นหา", "search_popout.search_format": "รูปแบบการค้นหาขั้นสูง", "search_popout.tips.full_text": "ข้อความแบบง่ายส่งคืนโพสต์ที่คุณได้เขียน ชื่นชอบ ดัน หรือได้รับการกล่าวถึง ตลอดจนชื่อผู้ใช้, ชื่อที่แสดง และแฮชแท็กที่ตรงกัน", @@ -461,6 +468,7 @@ "status.embed": "ฝัง", "status.favourite": "ชื่นชอบ", "status.filtered": "กรองอยู่", + "status.hide": "Hide toot", "status.history.created": "{name} ได้สร้างเมื่อ {date}", "status.history.edited": "{name} ได้แก้ไขเมื่อ {date}", "status.load_more": "โหลดเพิ่มเติม", @@ -484,6 +492,7 @@ "status.report": "รายงาน @{name}", "status.sensitive_warning": "เนื้อหาที่ละเอียดอ่อน", "status.share": "แบ่งปัน", + "status.show_filter_reason": "Show anyway", "status.show_less": "แสดงน้อยลง", "status.show_less_all": "แสดงน้อยลงทั้งหมด", "status.show_more": "แสดงเพิ่มเติม", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index c813ee1c262..f062d81ced4 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Tercihler", "navigation_bar.public_timeline": "Federe zaman tüneli", "navigation_bar.security": "Güvenlik", + "notification.admin.report": "{name}, {target} kişisini bildirdi", "notification.admin.sign_up": "{name} kaydoldu", "notification.favourite": "{name} gönderini favorilerine ekledi", "notification.follow": "{name} seni takip etti", @@ -326,6 +327,7 @@ "notification.update": "{name} bir gönderiyi düzenledi", "notifications.clear": "Bildirimleri temizle", "notifications.clear_confirmation": "Tüm bildirimlerinizi kalıcı olarak temizlemek ister misiniz?", + "notifications.column_settings.admin.report": "Yeni bildirimler:", "notifications.column_settings.admin.sign_up": "Yeni kayıtlar:", "notifications.column_settings.alert": "Masaüstü bildirimleri", "notifications.column_settings.favourite": "Favoriler:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Bildirdiğiniz için teşekkürler, konuyu araştıracağız.", "report.unfollow": "@{name} takip etmeyi bırak", "report.unfollow_explanation": "Bu hesabı takip ediyorsunuz. Ana akışınızda gönderilerini görmek istemiyorsanız, onu takip etmeyi bırakın.", + "report_notification.attached_statuses": "{count, plural, one {{count} gönderi} other {{count} gönderi}} eklendi", + "report_notification.categories.other": "Diğer", + "report_notification.categories.spam": "İstenmeyen", + "report_notification.categories.violation": "Kural ihlali", + "report_notification.open": "Bildirim aç", "search.placeholder": "Ara", "search_popout.search_format": "Gelişmiş arama biçimi", "search_popout.tips.full_text": "Basit metin yazdığınız, beğendiğiniz, teşvik ettiğiniz veya söz edilen gönderilerin yanı sıra kullanıcı adlarını, görünen adları ve hashtag'leri eşleştiren gönderileri de döndürür.", @@ -461,6 +468,7 @@ "status.embed": "Gömülü", "status.favourite": "Favorilerine ekle", "status.filtered": "Filtrelenmiş", + "status.hide": "Hide toot", "status.history.created": "{name} oluşturdu {date}", "status.history.edited": "{name} düzenledi {date}", "status.load_more": "Daha fazlasını yükle", @@ -484,6 +492,7 @@ "status.report": "@{name} adlı kişiyi bildir", "status.sensitive_warning": "Hassas içerik", "status.share": "Paylaş", + "status.show_filter_reason": "Show anyway", "status.show_less": "Daha az göster", "status.show_less_all": "Hepsi için daha az göster", "status.show_more": "Daha fazlasını göster", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index 862325f1c19..6ace5e76305 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Caylaw", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Хәвефсезлек", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} favourited your status", "notification.follow": "{name} followed you", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favourites:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Эзләү", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Embed", "status.favourite": "Favourite", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Load more", @@ -484,6 +492,7 @@ "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", "status.share": "Уртаклашу", + "status.show_filter_reason": "Show anyway", "status.show_less": "Әзрәк күрсәтү", "status.show_less_all": "Show less for all", "status.show_more": "Күбрәк күрсәтү", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index 658a3318ee6..13cb39de85e 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferences", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} favourited your status", "notification.follow": "{name} followed you", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favourites:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Search", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Embed", "status.favourite": "Favourite", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Load more", @@ -484,6 +492,7 @@ "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", "status.share": "Share", + "status.show_filter_reason": "Show anyway", "status.show_less": "Show less", "status.show_less_all": "Show less for all", "status.show_more": "Show more", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 32d5dce848a..3eeda561fe9 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Налаштування", "navigation_bar.public_timeline": "Глобальна стрічка", "navigation_bar.security": "Безпека", + "notification.admin.report": "Скарга від {name} на {target}", "notification.admin.sign_up": "{name} приєдналися", "notification.favourite": "{name} вподобали ваш допис", "notification.follow": "{name} підписалися на вас", @@ -326,6 +327,7 @@ "notification.update": "{name} змінює допис", "notifications.clear": "Очистити сповіщення", "notifications.clear_confirmation": "Ви впевнені, що хочете назавжди видалити всі сповіщення?", + "notifications.column_settings.admin.report": "Нові скарги:", "notifications.column_settings.admin.sign_up": "Нові реєстрації:", "notifications.column_settings.alert": "Сповіщення на комп'ютері", "notifications.column_settings.favourite": "Вподобане:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Дякуємо за скаргу, ми розглянемо її.", "report.unfollow": "Відписатися від @{name}", "report.unfollow_explanation": "Ви підписані на цього користувача. Щоб більше не бачити їхні дописи у вашій стрічці, відпишіться від них.", + "report_notification.attached_statuses": "{count, plural, one {{count} допис} few {{count} дописи} other {{counter} дописів}} прикріплено", + "report_notification.categories.other": "Інше", + "report_notification.categories.spam": "Спам", + "report_notification.categories.violation": "Порушення правил", + "report_notification.open": "Відкрити скаргу", "search.placeholder": "Пошук", "search_popout.search_format": "Розширений формат пошуку", "search_popout.tips.full_text": "Пошук за текстом знаходить статуси, які ви написали, вподобали, передмухнули, або в яких вас згадували. Також він знаходить імена користувачів, реальні імена та хештеґи.", @@ -461,6 +468,7 @@ "status.embed": "Вбудувати", "status.favourite": "Подобається", "status.filtered": "Відфільтровано", + "status.hide": "Hide toot", "status.history.created": "{name} створює {date}", "status.history.edited": "{name} змінює {date}", "status.load_more": "Завантажити більше", @@ -484,6 +492,7 @@ "status.report": "Поскаржитися на @{name}", "status.sensitive_warning": "Делікатний зміст", "status.share": "Поділитися", + "status.show_filter_reason": "Show anyway", "status.show_less": "Згорнути", "status.show_less_all": "Показувати менше для всіх", "status.show_more": "Розгорнути", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index d4daaceb392..9485dbabf3b 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "ترجیحات", "navigation_bar.public_timeline": "وفاقی ٹائم لائن", "navigation_bar.security": "سیکورٹی", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} favourited your status", "notification.follow": "{name} آپ کی پیروی کی", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "اطلاعات ہٹائیں", "notifications.clear_confirmation": "کیا آپ واقعی اپنی تمام اطلاعات کو صاف کرنا چاہتے ہیں؟", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "ڈیسک ٹاپ اطلاعات", "notifications.column_settings.favourite": "پسندیدہ:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "Search", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Embed", "status.favourite": "Favourite", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Load more", @@ -484,6 +492,7 @@ "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", "status.share": "Share", + "status.show_filter_reason": "Show anyway", "status.show_less": "Show less", "status.show_less_all": "Show less for all", "status.show_more": "Show more", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index e4e7c233b82..553a41f2c64 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Cài đặt", "navigation_bar.public_timeline": "Thế giới", "navigation_bar.security": "Bảo mật", + "notification.admin.report": "{name} đã báo cáo {target}", "notification.admin.sign_up": "{name} đăng ký máy chủ của bạn", "notification.favourite": "{name} thích tút của bạn", "notification.follow": "{name} theo dõi bạn", @@ -326,6 +327,7 @@ "notification.update": "{name} đã viết lại một tút", "notifications.clear": "Xóa hết thông báo", "notifications.clear_confirmation": "Bạn thật sự muốn xóa vĩnh viễn tất cả thông báo của mình?", + "notifications.column_settings.admin.report": "Báo cáo mới:", "notifications.column_settings.admin.sign_up": "Lượt đăng ký mới:", "notifications.column_settings.alert": "Thông báo trên máy tính", "notifications.column_settings.favourite": "Lượt thích:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Cảm ơn đã báo cáo, chúng tôi sẽ xem xét kỹ.", "report.unfollow": "Ngưng theo dõi @{name}", "report.unfollow_explanation": "Bạn đang theo dõi người này. Để không thấy tút của họ trong bảng tin nữa, hãy ngưng theo dõi.", + "report_notification.attached_statuses": "{count, plural, other {{count} tút}} đính kèm", + "report_notification.categories.other": "Khác", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Vi phạm quy tắc", + "report_notification.open": "Mở báo cáo", "search.placeholder": "Tìm kiếm", "search_popout.search_format": "Gợi ý", "search_popout.tips.full_text": "Nội dung trả về bao gồm những tút mà bạn đã viết, thích, đăng lại hoặc những tút có nhắc đến bạn. Bạn cũng có thể tìm địa chỉ người dùng, tên hiển thị và hashtag.", @@ -461,6 +468,7 @@ "status.embed": "Nhúng", "status.favourite": "Thích", "status.filtered": "Bộ lọc", + "status.hide": "Hide toot", "status.history.created": "{name} tạo lúc {date}", "status.history.edited": "{name} sửa lúc {date}", "status.load_more": "Tải thêm", @@ -484,6 +492,7 @@ "status.report": "Báo cáo @{name}", "status.sensitive_warning": "Nhạy cảm", "status.share": "Chia sẻ", + "status.show_filter_reason": "Show anyway", "status.show_less": "Thu gọn", "status.show_less_all": "Thu gọn toàn bộ", "status.show_more": "Xem thêm", diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json index c6528fbe78c..7f1965401d5 100644 --- a/app/javascript/mastodon/locales/zgh.json +++ b/app/javascript/mastodon/locales/zgh.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "Preferences", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} favourited your status", "notification.follow": "ⵉⴹⴼⴼⴰⵔ ⴽ {name}", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "ⵙⴼⴹ ⵜⵉⵏⵖⵎⵉⵙⵉⵏ", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favourites:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "ⵔⵣⵓ", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", @@ -461,6 +468,7 @@ "status.embed": "Embed", "status.favourite": "Favourite", "status.filtered": "Filtered", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "ⵙⵙⵉⵍⵉ ⵓⴳⴳⴰⵔ", @@ -484,6 +492,7 @@ "status.report": "Report @{name}", "status.sensitive_warning": "Sensitive content", "status.share": "ⴱⴹⵓ", + "status.show_filter_reason": "Show anyway", "status.show_less": "ⵙⵎⴰⵍ ⴷⵔⵓⵙ", "status.show_less_all": "ⵙⵎⴰⵍ ⴷⵔⵓⵙ ⵉ ⵎⴰⵕⵕⴰ", "status.show_more": "ⵙⵎⴰⵍ ⵓⴳⴳⴰⵔ", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index a7bf96f9e99..e92227f7284 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "首选项", "navigation_bar.public_timeline": "跨站公共时间轴", "navigation_bar.security": "安全", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} 注册了", "notification.favourite": "{name} 喜欢了你的嘟文", "notification.follow": "{name} 开始关注你", @@ -326,6 +327,7 @@ "notification.update": "{name} 编辑了嘟文", "notifications.clear": "清空通知列表", "notifications.clear_confirmation": "你确定要永久清空通知列表吗?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "新注册:", "notifications.column_settings.alert": "桌面通知", "notifications.column_settings.favourite": "喜欢:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "感谢提交举报,我们将会进行处理。", "report.unfollow": "取消关注 @{name}", "report.unfollow_explanation": "你正在关注此账户。如果要想在你的主页上不再看到他们的帖子,取消对他们的关注即可。", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "其他", + "report_notification.categories.spam": "骚扰", + "report_notification.categories.violation": "违反规则", + "report_notification.open": "展开报告", "search.placeholder": "搜索", "search_popout.search_format": "高级搜索格式", "search_popout.tips.full_text": "输入关键词检索所有你发送、喜欢、转嘟过或提及到你的帖子,以及其他用户公开的用户名、昵称和话题标签。", @@ -461,6 +468,7 @@ "status.embed": "嵌入", "status.favourite": "喜欢", "status.filtered": "已过滤", + "status.hide": "Hide toot", "status.history.created": "{name} 创建于 {date}", "status.history.edited": "{name} 编辑于 {date}", "status.load_more": "加载更多", @@ -484,6 +492,7 @@ "status.report": "举报 @{name}", "status.sensitive_warning": "敏感内容", "status.share": "分享", + "status.show_filter_reason": "Show anyway", "status.show_less": "隐藏内容", "status.show_less_all": "隐藏全部内容", "status.show_more": "显示更多", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index d757b9daf08..867ced8d551 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -18,7 +18,7 @@ "account.followers": "關注者", "account.followers.empty": "尚未有人關注這位使用者。", "account.followers_counter": "有 {count, plural,one {{counter} 個} other {{counter} 個}}關注者", - "account.following": "Following", + "account.following": "正在關注", "account.following_counter": "正在關注 {count, plural,one {{counter}}other {{counter} 人}}", "account.follows.empty": "這位使用者尚未關注任何人。", "account.follows_you": "關注你", @@ -41,12 +41,12 @@ "account.statuses_counter": "{count, plural,one {{counter} 篇}other {{counter} 篇}}文章", "account.unblock": "解除對 @{name} 的封鎖", "account.unblock_domain": "解除對域名 {domain} 的封鎖", - "account.unblock_short": "Unblock", + "account.unblock_short": "解除封鎖", "account.unendorse": "不再於個人資料頁面推薦對方", "account.unfollow": "取消關注", "account.unmute": "取消 @{name} 的靜音", "account.unmute_notifications": "取消來自 @{name} 通知的靜音", - "account.unmute_short": "Unmute", + "account.unmute_short": "取消靜音", "account_note.placeholder": "按此添加備注", "admin.dashboard.daily_retention": "User retention rate by day after sign-up", "admin.dashboard.monthly_retention": "User retention rate by month after sign-up", @@ -314,6 +314,7 @@ "navigation_bar.preferences": "偏好設定", "navigation_bar.public_timeline": "跨站時間軸", "navigation_bar.security": "安全", + "notification.admin.report": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} 喜歡你的文章", "notification.follow": "{name} 開始關注你", @@ -326,6 +327,7 @@ "notification.update": "{name} edited a post", "notifications.clear": "清空通知紀錄", "notifications.clear_confirmation": "你確定要清空通知紀錄嗎?", + "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "顯示桌面通知", "notifications.column_settings.favourite": "你最愛的文章:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.categories.other": "Other", + "report_notification.categories.spam": "Spam", + "report_notification.categories.violation": "Rule violation", + "report_notification.open": "Open report", "search.placeholder": "搜尋", "search_popout.search_format": "高級搜索格式", "search_popout.tips.full_text": "輸入簡單的文字,搜索由你發放、收藏、轉推和提及你的文章,以及符合的使用者名稱,顯示名稱和標籤。", @@ -461,6 +468,7 @@ "status.embed": "嵌入", "status.favourite": "最愛", "status.filtered": "已過濾", + "status.hide": "Hide toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "載入更多", @@ -484,6 +492,7 @@ "status.report": "舉報 @{name}", "status.sensitive_warning": "敏感內容", "status.share": "分享", + "status.show_filter_reason": "Show anyway", "status.show_less": "收起", "status.show_less_all": "全部收起", "status.show_more": "展開", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 17d0b9998b5..b666ed02cc7 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -314,6 +314,7 @@ "navigation_bar.preferences": "偏好設定", "navigation_bar.public_timeline": "聯邦時間軸", "navigation_bar.security": "安全性", + "notification.admin.report": "{name} 檢舉了 {target}", "notification.admin.sign_up": "{name} 已經註冊", "notification.favourite": "{name} 把您的嘟文加入了最愛", "notification.follow": "{name} 跟隨了您", @@ -326,6 +327,7 @@ "notification.update": "{name} 編輯了嘟文", "notifications.clear": "清除通知", "notifications.clear_confirmation": "您確定要永久清除您的通知嗎?", + "notifications.column_settings.admin.report": "新檢舉報告:", "notifications.column_settings.admin.sign_up": "新註冊帳號:", "notifications.column_settings.alert": "桌面通知", "notifications.column_settings.favourite": "最愛:", @@ -431,6 +433,11 @@ "report.thanks.title_actionable": "感謝您的檢舉,我們將會著手處理。", "report.unfollow": "取消跟隨 @{name}", "report.unfollow_explanation": "您正在跟隨此帳號。如不欲於首頁時間軸再見到他們的嘟文,請取消跟隨。", + "report_notification.attached_statuses": "{count, plural, one {{count} 則} other {{count} 則}} 嘟文", + "report_notification.categories.other": "其他", + "report_notification.categories.spam": "垃圾訊息", + "report_notification.categories.violation": "違反規則", + "report_notification.open": "開啟檢舉報告", "search.placeholder": "搜尋", "search_popout.search_format": "進階搜尋格式", "search_popout.tips.full_text": "輸入簡單的文字,搜尋由您撰寫、最愛、轉嘟或提您的嘟文,以及與關鍵詞匹配的使用者名稱、帳號顯示名稱和主題標籤。", @@ -461,6 +468,7 @@ "status.embed": "內嵌", "status.favourite": "最愛", "status.filtered": "已過濾", + "status.hide": "Hide toot", "status.history.created": "{name} 於 {date} 建立", "status.history.edited": "{name} 於 {date} 修改", "status.load_more": "載入更多", @@ -484,6 +492,7 @@ "status.report": "檢舉 @{name}", "status.sensitive_warning": "敏感內容", "status.share": "分享", + "status.show_filter_reason": "Show anyway", "status.show_less": "減少顯示", "status.show_less_all": "減少顯示這類嘟文", "status.show_more": "顯示更多", diff --git a/config/locales/activerecord.es-AR.yml b/config/locales/activerecord.es-AR.yml index 8a9b75a8c7a..f5b8221d1a8 100644 --- a/config/locales/activerecord.es-AR.yml +++ b/config/locales/activerecord.es-AR.yml @@ -38,3 +38,12 @@ es-AR: email: blocked: usa un proveedor de correo electrónico no permitido unreachable: no parece existir + role_id: + elevated: no puede ser mayor que tu rol actual + user_role: + attributes: + permissions_as_keys: + dangerous: incluir permisos que no son seguros para el rol base + elevated: no se pueden incluir permisos que tu rol actual no posea + position: + elevated: no puede ser mayor que tu rol actual diff --git a/config/locales/activerecord.es-MX.yml b/config/locales/activerecord.es-MX.yml index c316a70a7a3..83632be4309 100644 --- a/config/locales/activerecord.es-MX.yml +++ b/config/locales/activerecord.es-MX.yml @@ -21,6 +21,14 @@ es-MX: username: invalid: solo puede contener letras, números y guiones bajos reserved: está reservado + admin/webhook: + attributes: + url: + invalid: no es una URL válida + doorkeeper/application: + attributes: + website: + invalid: no es una URL válida status: attributes: reblog: diff --git a/config/locales/activerecord.es.yml b/config/locales/activerecord.es.yml index 805e6b92043..8cdfcfcc01b 100644 --- a/config/locales/activerecord.es.yml +++ b/config/locales/activerecord.es.yml @@ -38,3 +38,12 @@ es: email: blocked: utiliza un proveedor de correo no autorizado unreachable: no parece existir + role_id: + elevated: no puede ser mayor que tu rol actual + user_role: + attributes: + permissions_as_keys: + dangerous: incluir permisos que no son seguros para el rol base + elevated: no se pueden incluir permisos que tu rol actual no posea + position: + elevated: no puede ser mayor que tu rol actual diff --git a/config/locales/activerecord.gl.yml b/config/locales/activerecord.gl.yml index 4b039f5afe0..6b225137ab7 100644 --- a/config/locales/activerecord.gl.yml +++ b/config/locales/activerecord.gl.yml @@ -38,3 +38,12 @@ gl: email: blocked: utiliza un provedor de email non autorizado unreachable: semella que non existe + role_id: + elevated: non pode superar o teu rol actual + user_role: + attributes: + permissions_as_keys: + dangerous: inclúe permisos que non son seguros para o rol básico + elevated: non pode incluir permisos que o teu rol actual non posúe + position: + elevated: non pode superar ao teu rol actual diff --git a/config/locales/activerecord.is.yml b/config/locales/activerecord.is.yml index 75c18c6a37e..25c30fe4c22 100644 --- a/config/locales/activerecord.is.yml +++ b/config/locales/activerecord.is.yml @@ -38,3 +38,12 @@ is: email: blocked: notar óleyfilega tölvupóstþjónustu unreachable: virðist ekki vera til + role_id: + elevated: getur ekki verið veigameiri en núverandi hlutverk þitt + user_role: + attributes: + permissions_as_keys: + dangerous: hefur heimildir sem ekki eru öruggar fyrir grunnhlutverk + elevated: getur ekki haft heimildir sem núverandi hlutverk þitt er ekki með + position: + elevated: getur ekki verið veigameiri en núverandi hlutverk þitt diff --git a/config/locales/activerecord.it.yml b/config/locales/activerecord.it.yml index 307bd801e8a..53acb7d0209 100644 --- a/config/locales/activerecord.it.yml +++ b/config/locales/activerecord.it.yml @@ -38,3 +38,12 @@ it: email: blocked: utilizza un provider di posta elettronica non autorizzato unreachable: non sembra esistere + role_id: + elevated: non può essere superiore al tuo ruolo attuale + user_role: + attributes: + permissions_as_keys: + dangerous: include i permessi non sicuri per il ruolo di base + elevated: non è possibile includere i permessi che il tuo ruolo attuale non possiede + position: + elevated: non può essere superiore al tuo ruolo attuale diff --git a/config/locales/activerecord.ko.yml b/config/locales/activerecord.ko.yml index 4db8d73af8d..7dcdad9f3f6 100644 --- a/config/locales/activerecord.ko.yml +++ b/config/locales/activerecord.ko.yml @@ -38,3 +38,12 @@ ko: email: blocked: 허용되지 않은 이메일 제공자입니다 unreachable: 존재하지 않는 것 같습니다 + role_id: + elevated: 당신의 현재 역할보다 높을 수 없습니다 + user_role: + attributes: + permissions_as_keys: + dangerous: 기본 역할로 사용하기에 안전하지 않은 권한을 포함하고 있습니다 + elevated: 당신의 현재 역할이 가지고 있지 않은 권한은 포함할 수 없습니다 + position: + elevated: 당신의 현재 역할보다 높을 수 없습니다 diff --git a/config/locales/activerecord.lv.yml b/config/locales/activerecord.lv.yml index 89a1fb09439..db551900570 100644 --- a/config/locales/activerecord.lv.yml +++ b/config/locales/activerecord.lv.yml @@ -3,7 +3,7 @@ lv: activerecord: attributes: poll: - expires_at: Deadline + expires_at: Gala termiņš options: Izvēles user: agreement: Pakalpojuma līgums @@ -38,3 +38,12 @@ lv: email: blocked: lieto neatļautu epasta pakalpojuma sniedzēju unreachable: šķiet, ka neeksistē + role_id: + elevated: nevar būt augstāka par tavu pašreizējo lomu + user_role: + attributes: + permissions_as_keys: + dangerous: ietver atļaujas, kas nav drošas pamata lomai + elevated: nevar ietvert atļaujas, kas nepieder tavai pašreizējai lomai + position: + elevated: nevar būt augstāka par tavu pašreizējo lomu diff --git a/config/locales/activerecord.pt-BR.yml b/config/locales/activerecord.pt-BR.yml index 8b4d3439ad2..ad034fdbcc6 100644 --- a/config/locales/activerecord.pt-BR.yml +++ b/config/locales/activerecord.pt-BR.yml @@ -21,6 +21,14 @@ pt-BR: username: invalid: apenas letras, números e underlines ( "_" ) reserved: já existe + admin/webhook: + attributes: + url: + invalid: não é uma URL válida + doorkeeper/application: + attributes: + website: + invalid: não é uma URL válida status: attributes: reblog: diff --git a/config/locales/activerecord.ru.yml b/config/locales/activerecord.ru.yml index 758fe7dd4d1..2324b6bf9fb 100644 --- a/config/locales/activerecord.ru.yml +++ b/config/locales/activerecord.ru.yml @@ -38,3 +38,9 @@ ru: email: blocked: использует запрещённого провайдера эл. почты unreachable: не существует + role_id: + elevated: не может быть выше вашей текущей роли + user_role: + attributes: + permissions_as_keys: + dangerous: включить разрешения, небезопасные для базовой роли diff --git a/config/locales/activerecord.sl.yml b/config/locales/activerecord.sl.yml index 7927cb4fc39..591c126d370 100644 --- a/config/locales/activerecord.sl.yml +++ b/config/locales/activerecord.sl.yml @@ -38,3 +38,12 @@ sl: email: blocked: uporablja nedovoljenega ponudnika e-poštnih storitev unreachable: kot kaže ne obstaja + role_id: + elevated: ne more biti višje od vaše trenutne vloge + user_role: + attributes: + permissions_as_keys: + dangerous: vključi pravice, ki niso varne za osnovno vlogo + elevated: ni mogoče vključiti pravic, ki jih vaša trenutna vloga ne vsebuje + position: + elevated: ne more biti višje od vaše trenutne vloge diff --git a/config/locales/activerecord.tr.yml b/config/locales/activerecord.tr.yml index ac40e061599..e9f8a9fff79 100644 --- a/config/locales/activerecord.tr.yml +++ b/config/locales/activerecord.tr.yml @@ -38,3 +38,12 @@ tr: email: blocked: izin verilmeyen bir e-posta sağlayıcı kullanıyor unreachable: mevcut gözükmüyor + role_id: + elevated: mevcut rolünüzden yüksek olamaz + user_role: + attributes: + permissions_as_keys: + dangerous: temel rol için güvenli olmayan izinleri içerir + elevated: mevcut rolünüzün sahip olmadığı izinleri içeremez + position: + elevated: mevcut rolünüzden yüksek olamaz diff --git a/config/locales/activerecord.vi.yml b/config/locales/activerecord.vi.yml index 6c7c4190359..aeffa3dafde 100644 --- a/config/locales/activerecord.vi.yml +++ b/config/locales/activerecord.vi.yml @@ -38,3 +38,12 @@ vi: email: blocked: sử dụng dịch vụ email bị cấm unreachable: không tồn tại + role_id: + elevated: không thể cao hơn vai trò hiện tại của bạn + user_role: + attributes: + permissions_as_keys: + dangerous: bao gồm các quyền không an toàn cho vai trò cơ bản + elevated: không thể bao gồm các quyền mà vai trò hiện tại của bạn không có + position: + elevated: không thể cao hơn vai trò hiện tại của bạn diff --git a/config/locales/activerecord.zh-TW.yml b/config/locales/activerecord.zh-TW.yml index bea950ed685..554f6047d3e 100644 --- a/config/locales/activerecord.zh-TW.yml +++ b/config/locales/activerecord.zh-TW.yml @@ -38,3 +38,12 @@ zh-TW: email: blocked: 使用不被允許的電子信箱供應商 unreachable: 似乎不存在 + role_id: + elevated: 不能高於您目前的角色 + user_role: + attributes: + permissions_as_keys: + dangerous: 包含對基本角色不安全的權限 + elevated: 不能包含您目前角色不具備的權限 + position: + elevated: 不能高於您目前的角色 diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 01f55f344e0..bac1e661dab 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -98,10 +98,8 @@ ar: posts_tab_heading: المنشورات posts_with_replies: المنشورات والردود roles: - admin: المدير bot: روبوت group: فريق - moderator: مُشرِف unavailable: الصفحة التعريفية غير متوفرة unfollow: إلغاء المتابعة admin: @@ -120,7 +118,6 @@ ar: avatar: الصورة الرمزية by_domain: النطاق change_email: - changed_msg: تم تعديل عنوان البريد الإلكتروني الخاص بالحساب بنجاح! current_email: عنوان البريد الإلكتروني الحالي label: تعديل عنوان البريد الإلكتروني new_email: عنوان البريد الإلكتروني الجديد @@ -199,12 +196,6 @@ ar: reset: إعادة التعيين reset_password: إعادة ضبط كلمة السر resubscribe: إعادة الاشتراك - role: الصلاحيات - roles: - admin: مدير - moderator: مشرف - staff: الفريق - user: مستخدِم search: البحث search_same_email_domain: مستخدمون آخرون لديهم نفس نطاق البريد الإلكتروني search_same_ip: مستخدِمون آخرون بنفس الـ IP @@ -665,9 +656,6 @@ ar: deletion: desc_html: السماح لأي مستخدم إغلاق حسابه title: السماح بحذف الحسابات - min_invite_role: - disabled: لا أحد - title: المستخدِمون المصرح لهم لإرسال الدعوات require_invite_text: desc_html: عندما تتطلب التسجيلات الموافقة اليدوية، جعل إدخال نص لسؤال "لماذا تريد أن تنضم؟" إلزاميا بدلاً من اختياري title: الطلب من المستخدمين الجدد إدخال سبب للتسجيل @@ -680,9 +668,6 @@ ar: show_known_fediverse_at_about_page: desc_html: عند التعطيل، يُقيّد الخط الزمني العام المرتبط من صفحة الهبوط لعرض المحتوى المحلي فقط title: إظهار الفديفرس الموحَّد في خيط المُعايَنة - show_staff_badge: - desc_html: عرض شارة الموظفين على صفحة المستخدم - title: إظهار شارة الموظفين site_description: desc_html: فقرة تمهيدية على الصفحة الأولى. صف ميزات خادوم ماستدون هذا و ما يميّزه عن الآخرين. يمكنك استخدام علامات HTML ، ولا سيما <a> و <em>. title: وصف مثيل الخادوم @@ -1026,7 +1011,6 @@ ar: title: تعديل عامل التصفية errors: invalid_context: لم تقم بتحديد أي مجال أو أنّ المجال غير صالح - invalid_irreversible: إلّا مجالات الإشعارات و الخيط الرئيسي معنية بالتصفية اللارجعية index: delete: إزالة empty: ليست لديك أية عوامل تصفية. diff --git a/config/locales/ast.yml b/config/locales/ast.yml index 1fb1cee900d..f4765360e61 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -70,11 +70,6 @@ ast: resend_confirmation: already_confirmed: Esti usuariu yá ta confirmáu send: Reunviar les instrucciones - role: Permisos - roles: - admin: Alministrador - moderator: Llendador - user: Usuariu statuses: Estaos title: Cuentes username: Nome d'usuariu @@ -134,10 +129,12 @@ ast: are_you_sure: "¿De xuru?" status: Estáu title: Informes + roles: + everyone: Permisos predeterminaos + permissions_count: + one: "%{count} permisu" + other: "%{count} permisos" settings: - registrations: - min_invite_role: - disabled: Naide site_description: title: Descripción del sirvidor site_title: Nome del sirvidor @@ -353,7 +350,7 @@ ast: followers: Siguidores most_recent: Lo más recién relationship: Rellación - remove_selected_follows: Dexar de siguir a los usuarios esbillaos + remove_selected_follows: Dexar de siguir a los usuarios seleicionaos status: Estáu remote_follow: acct: Introduz el nome_usuariu@dominiu dende'l que lo quies facer diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 04296b342aa..a7b8ffc2366 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -71,10 +71,8 @@ bg: posts_tab_heading: Публикации posts_with_replies: Публикации и отговори roles: - admin: Админ bot: Бот group: Група - moderator: Мод unavailable: Профилът не е наличен unfollow: Не следвай admin: @@ -90,7 +88,6 @@ bg: avatar: Аватар by_domain: Домейн change_email: - changed_msg: Имейлът на акаунта беше успешно променен! current_email: Текущ имейл label: Промяна на имейл new_email: Нов имейл diff --git a/config/locales/bn.yml b/config/locales/bn.yml index ae1ced4506e..bbeab865571 100644 --- a/config/locales/bn.yml +++ b/config/locales/bn.yml @@ -74,10 +74,8 @@ bn: posts_tab_heading: লেখাগুলো posts_with_replies: লেখা এবং মতামত roles: - admin: পরিচালক bot: রোবট group: গোষ্ঠী - moderator: পরিচালক unavailable: প্রোফাইল অনুপলব্ধ unfollow: অনুসরণ বাদ admin: @@ -95,7 +93,6 @@ bn: avatar: অবতার by_domain: ওয়েবসাইট/কার্যক্ষেত্র change_email: - changed_msg: নিবন্ধনের ইমেইল সঠিকভাবে পরিবর্তন হয়েছে! current_email: এখনকার ইমেইল label: ইমেইল পরিবর্তন new_email: নতুন ইমেইল @@ -160,12 +157,6 @@ bn: reset: পুনরায় সেট করুন reset_password: পাসওয়ার্ড পুনঃস্থাপন করুন resubscribe: পুনরায় সদস্যতা নিন - role: অনুমতিসমূহ - roles: - admin: পরিচালক - moderator: নিয়ামক - staff: কর্মী - user: ব্যবহারকারী search: অনুসন্ধান search_same_email_domain: একই ইমেল ডোমেন সহ অন্যান্য ব্যবহারকারীরা search_same_ip: একই IP সহ অন্যান্য ব্যবহারকারীরা diff --git a/config/locales/br.yml b/config/locales/br.yml index f7c06057941..61e85d163f1 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -48,7 +48,6 @@ br: posts_tab_heading: Toudoù posts_with_replies: Toudoù ha respontoù roles: - admin: Merour bot: Robot group: Strollad unavailable: Profil dihegerz @@ -83,10 +82,6 @@ br: remove_header: Dilemel an talbenn reset: Adderaouekaat reset_password: Adderaouekaat ar ger-tremen - roles: - admin: Merour - moderator: Habaskaer·ez - user: Implijer·ez search: Klask suspended: Astalet title: Kontoù diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 8c8fa1ffb82..680a0646f22 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -83,10 +83,8 @@ ca: posts_tab_heading: Publicacions posts_with_replies: Publicacions i respostes roles: - admin: Administrador bot: Bot group: Grup - moderator: Moderador unavailable: Perfil inaccessible unfollow: Deixa de seguir admin: @@ -111,6 +109,11 @@ ca: new_email: Adreça electrònica nova submit: Canvia l'adreça electrònica title: Canvia l'adreça electrònica de %{username} + change_role: + changed_msg: Els privilegis del compte s'han canviat correctament! + label: Canvia rol + no_role: Sense rol + title: Canvia el rol per a %{username} confirm: Confirma confirmed: Confirmat confirming: Confirmant @@ -154,6 +157,7 @@ ca: active: Actiu all: Tot pending: Pendent + silenced: Limitat suspended: Suspès title: Moderació moderation_notes: Notes de moderació @@ -161,6 +165,7 @@ ca: most_recent_ip: IP més recent no_account_selected: No s'han canviat els comptes perquè no s'han seleccionat no_limits_imposed: Sense límits imposats + no_role_assigned: Cap rol assignat not_subscribed: No subscrit pending: Revisió pendent perform_full_suspension: Suspèn @@ -187,12 +192,7 @@ ca: reset: Reinicialitza reset_password: Restableix la contrasenya resubscribe: Torna a subscriure - role: Permisos - roles: - admin: Administrador - moderator: Moderador - staff: Personal - user: Usuari + role: Rol search: Cerca search_same_email_domain: Altres usuaris amb el mateix domini de correu search_same_ip: Altres usuaris amb la mateixa IP @@ -649,6 +649,64 @@ ca: unresolved: No resolt updated_at: Actualitzat view_profile: Veure perfil + roles: + add_new: Afegir rol + categories: + administration: Administració + devops: Operadors de desenvolupament + invites: Invitacions + moderation: Moderació + special: Especial + delete: Esborra + description_html: Amb rols d'usuari, pots personalitzar quines funcions i àrees de Mastodon els teus usuaris poden accedir. + edit: Editar el rol %{name} + everyone: Permisos per defecte + everyone_full_description_html: Aquest és el rol base que afecta tots els usuaris, fins i tot els que no en tenen cap d'assignat. Tots els altres rols n'hereten els permisos. + permissions_count: + one: "%{count} permís" + other: "%{count} permisos" + privileges: + administrator: Administrador + administrator_description: Els usuaris amb aquest permís passaran per alt tots els permisos + delete_user_data: Esborra dades d'usuari + delete_user_data_description: Permet als usuaris suprimir les dades d'altres usuaris sense demora + invite_users: Convida usuaris + invite_users_description: Permet als usuaris convidar persones noves al servidor + manage_announcements: Gestiona els anuncis + manage_announcements_description: Permet als usuaris gestionar els anuncis al servidor + manage_appeals: Gestiona apel·lacions + manage_appeals_description: Permet als usuaris revisar les apel·lacions contra les accions de moderació + manage_blocks: Gestiona blocs + manage_blocks_description: Permet als usuaris bloquejar proveïdors de correu electrònic i adreces IP + manage_custom_emojis: Gestiona emojis personalitzats + manage_custom_emojis_description: Permet als usuaris gestionar emojis personalitzats al servidor + manage_federation: Gestiona federació + manage_federation_description: Permet als usuaris bloquejar o permetre la federació amb altres dominis i controlar la capacitat de lliurament + manage_invites: Gestiona invitacions + manage_invites_description: Permet als usuaris veure i desactivar els enllaços d'invitació + manage_reports: Gestiona informes + manage_reports_description: Permet als usuaris revisar informes i realitzar accions de moderació contra ells + manage_roles: Gestionar rols + manage_roles_description: Permet als usuaris gestionar i assignar rols per sota dels seus + manage_rules: Gestiona normes + manage_rules_description: Permet als usuaris canviar les normes del servidor + manage_settings: Gestiona configuració + manage_settings_description: Permet als usuaris canviar la configuració del lloc + manage_taxonomies: Gestionar taxonomies + manage_taxonomies_description: Permet als usuaris revisar el contingut actual i actualitzar la configuració de l'etiqueta + manage_user_access: Gestionar l'accés dels usuaris + manage_user_access_description: Permet als usuaris desactivar l'autenticació de dos factors d'altres usuaris, canviar la seva adreça de correu electrònic i restablir la seva contrasenya + manage_users: Gestionar usuaris + manage_users_description: Permet als usuaris veure els detalls d'altres usuaris i realitzar accions de moderació contra ells + manage_webhooks: Gestionar Webhooks + manage_webhooks_description: Permet als usuaris configurar webhooks per a esdeveniments administratius + view_audit_log: Veure el registre d'auditoria + view_audit_log_description: Permet als usuaris veure un historial d'accions administratives al servidor + view_dashboard: Veure panell + view_dashboard_description: Permet als usuaris accedir al tauler i a diverses mètriques + view_devops: Operadors de desenvolupament + view_devops_description: Permet als usuaris accedir als taulers de control de Sidekiq i pgHero + title: Rols rules: add_new: Afegir norma delete: Suprimeix @@ -701,9 +759,6 @@ ca: deletion: desc_html: Permet a qualsevol usuari d'esborrar el seu compte title: Obre la supressió del compte - min_invite_role: - disabled: Ningú - title: Permet les invitacions de require_invite_text: desc_html: Quan el registre requereix aprovació manual, fer que sigui obligatori enlloc d'opcions l escriure el text de la solicitud d'invitació "Perquè vols unirte?" title: Requerir als nous usuaris omplir el text de la solicitud d'invitació @@ -716,9 +771,6 @@ ca: show_known_fediverse_at_about_page: desc_html: Quan està desactivat, restringeix la línia de temps pública enllaçada des de la pàgina inicial a mostrar només contingut local title: Inclou el contingut federat a la pàgina no autenticada de la línia de temps pública - show_staff_badge: - desc_html: Mostra una insígnia de personal en la pàgina d'usuari - title: Mostra insígnia de personal site_description: desc_html: Paràgraf introductori a la pàgina principal i en etiquetes meta. Pots utilitzar etiquetes HTML, en particular <a> i <em>. title: Descripció del servidor @@ -1124,15 +1176,24 @@ ca: public: Línies de temps públiques thread: Converses edit: + add_keyword: Afegeix paraula clau + keywords: Paraules clau title: Editar filtre errors: + deprecated_api_multiple_keywords: Aquests paràmetres no poden ser canviats des d'aquesta aplicació perquè apliquen a més d'un filtre per paraula clau. Utilitza una aplicació més recent o la interfície web. invalid_context: Cap o el context proporcionat no és vàlid - invalid_irreversible: El filtratge irreversible només funciona amb el contextos inici o notificacions index: + contexts: Filtres en %{contexts} delete: Esborra empty: No hi tens cap filtre. + expires_in: Expira en %{distance} + expires_on: Expira el %{date} + keywords: + one: "%{count} paraula clau" + other: "%{count} paraules clau" title: Filtres new: + save: Desa el nou filtre title: Afegir un nou filtre footer: developers: Desenvolupadors @@ -1251,6 +1312,8 @@ ca: copy_account_note_text: 'Aquest usuari s’ha mogut des de %{acct}, aquí estaven les teves notes prèvies sobre ell:' notification_mailer: admin: + report: + subject: "%{name} ha presentat un informe" sign_up: subject: "%{name} s'ha registrat" digest: diff --git a/config/locales/ckb.yml b/config/locales/ckb.yml index 35e826c9c4f..3e9f414dfdd 100644 --- a/config/locales/ckb.yml +++ b/config/locales/ckb.yml @@ -81,10 +81,8 @@ ckb: posts_tab_heading: تووتەکان posts_with_replies: تووتەکان و وڵامەکان roles: - admin: بەڕێوەبەر bot: بۆت group: گرووپ - moderator: مۆد unavailable: پرۆفایل بەردەست نیە unfollow: بەدوادانەچو admin: @@ -103,7 +101,6 @@ ckb: avatar: وێنۆچکە by_domain: دۆمەین change_email: - changed_msg: ئیمەیڵی ئەژمێر بە سەرکەوتوویی گۆڕا! current_email: ئیمەیلی ئێستا label: گۆڕینی ئیمێڵ new_email: ئیمەیڵی نوێ @@ -182,12 +179,6 @@ ckb: reset: ڕێکخستنەوە reset_password: گەڕانەوەی تێپەڕوشە resubscribe: دووبارە ئابونەبوون - role: مۆڵەتەکان - roles: - admin: بەڕێوەبەر - moderator: بەڕێوەبەر - staff: ستاف - user: بەکارهێنەر search: گەڕان search_same_email_domain: بەکارهێنەرانی دیکە بە ئیمەیلی یەکسان search_same_ip: بەکارهێنەرانی تر بەهەمان ئای پی @@ -621,9 +612,6 @@ ckb: deletion: desc_html: ڕێ بدە بە هەر کەسێک هەژمارەکەی بسڕیتەوە title: سڕینەوەی هەژمارە بکەوە - min_invite_role: - disabled: هیچکەس - title: ڕێپێدانی بانگهێشتەکان لەلایەن require_invite_text: desc_html: کاتێک تۆمارکردنەکان پێویستیان بە ڕەزامەندی دەستی هەیە، "بۆچی دەتەوێت بەشداری بکەیت؟" نووسینی دەق ئیجبارییە نەک ئیختیاری registrations_mode: @@ -635,9 +623,6 @@ ckb: show_known_fediverse_at_about_page: desc_html: کاتێک ناچالاک کرا، هێڵی کاتی گشتی کە بەستراوەتەوە بە لاپەڕەی ئێستا سنووردار دەبن، تەنها ناوەڕۆکی ناوخۆیی پیشاندەدرێن title: نیشاندانی ڕاژەکانی دیکە لە پێشنەمایەشی ئەم ڕاژە - show_staff_badge: - desc_html: پیشاندانی هێمایەک هاوکار لە سەر پەڕەی بەکارهێنەر - title: نیشاندانی هێمای هاوکار site_description: desc_html: کورتە باسیک دەربارەی API، دەربارەی ئەوە چ شتێک دەربارەی ئەم ڕاژەی ماستۆدۆن تایبەتە یان هەر شتێکی گرینگی دیکە. دەتوانن HTML بنووسن، بەتایبەت <a> وە <em>. title: دەربارەی ئەم ڕاژە @@ -884,7 +869,6 @@ ckb: title: دەستکاری فلتەر errors: invalid_context: هیچ دەقێکی نادروست نییە یان بێ بڕوایە - invalid_irreversible: فلتەرکردنی بێ گەڕانەوە تەنها کار دەکات لەگەڵ چوارچێوەی ماڵ یان ئاگانامەکان index: delete: سڕینەوە empty: هیچ پالێوەرێکت نیە. diff --git a/config/locales/co.yml b/config/locales/co.yml index 183439447fc..a71c187fca9 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -79,10 +79,8 @@ co: posts_tab_heading: Statuti posts_with_replies: Statuti è risposte roles: - admin: Amministratore bot: Bot group: Gruppu - moderator: Muderatore unavailable: Prufile micca dispunibule unfollow: Ùn siguità più admin: @@ -101,7 +99,6 @@ co: avatar: Ritrattu di prufile by_domain: Duminiu change_email: - changed_msg: Email di u contu cambiatu! current_email: E-mail attuale label: Mudificà l’e-mail new_email: Novu e-mail @@ -178,12 +175,6 @@ co: reset: Riinizializà reset_password: Riinizializà a chjave d’accessu resubscribe: Riabbunassi - role: Auturizazione - roles: - admin: Amministratore - moderator: Muderatore - staff: Squadra - user: Utilizatore search: Cercà search_same_email_domain: Altri utilizatori cù listessu duminiu d'e-mail search_same_ip: Altri utilizatori cù listessa IP @@ -579,9 +570,6 @@ co: deletion: desc_html: Auturizà tuttu u mondu à sguassà u so propiu contu title: Auturizà à sguassà i conti - min_invite_role: - disabled: Nimu - title: Auturizà l’invitazione da require_invite_text: desc_html: Quandu l'arregistramenti necessitanu un'apprubazione manuale, fà chì u testu "Perchè vulete ghjunghje?" sia ubligatoriu invece d'esse facultativu title: Richiede chì i novi utilizatori empiinu una dumanda d'invitazione @@ -594,9 +582,6 @@ co: show_known_fediverse_at_about_page: desc_html: Quandu ghjè selezziunatu, statuti di tuttu l’istanze cunnisciute saranu affissati indè a vista di e linee. Altrimente soli i statuti lucali saranu mustrati title: Vedde tuttu u fediverse cunnisciutu nant’a vista di e linee - show_staff_badge: - desc_html: Mustrerà un badge Squadra nant’à un prufile d’utilizatore - title: Mustrà un badge staff site_description: desc_html: Paragrafu di prisentazione nant’a pagina d’accolta. Parlate di cio chì rende stu servore speziale, o d'altre cose impurtante. Pudete fà usu di marchi HTML, in particulare <a> è <em>. title: Discrizzione di u servore @@ -862,7 +847,6 @@ co: title: Mudificà u filtru errors: invalid_context: Micca abbastanza cuntestu - invalid_irreversible: A filtrazione irreversibile marchja solu per l'accolta è e nutificazione index: delete: Toglie empty: Ùn avete manc'un filtru. diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 1868b9dd738..06a5387a751 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -91,10 +91,8 @@ cs: posts_tab_heading: Příspěvky posts_with_replies: Příspěvky a odpovědi roles: - admin: Administrátor bot: Robot group: Skupina - moderator: Moderátor unavailable: Profil není dostupný unfollow: Přestat sledovat admin: @@ -113,12 +111,16 @@ cs: avatar: Avatar by_domain: Doména change_email: - changed_msg: E-mail k tomuto účtu byl úspěšně změněn! current_email: Současný e-mail label: Změnit e-mail new_email: Nový e-mail submit: Změnit e-mail title: Změnit e-mail uživateli %{username} + change_role: + changed_msg: Role úspěšně změněna! + label: Změnit roli + no_role: Žádná role + title: Změnit roli pro %{username} confirm: Potvrdit confirmed: Potvrzeno confirming: Potvrzuji @@ -197,12 +199,7 @@ cs: reset: Obnovit reset_password: Obnovit heslo resubscribe: Znovu odebírat - role: Oprávnění - roles: - admin: Administrátor - moderator: Moderátor - staff: Personál - user: Uživatel + role: Role search: Hledat search_same_email_domain: Ostatní uživatelé se stejnou e-mailovou doménou search_same_ip: Další uživatelé se stejnou IP adresou @@ -677,6 +674,50 @@ cs: unresolved: Nevyřešeno updated_at: Aktualizováno view_profile: Zobrazit profil + roles: + add_new: Přidat roli + assigned_users: + few: "%{count} uživatelé" + many: "%{count} uživatelů" + one: "%{count} uživatel" + other: "%{count} uživatelů" + categories: + administration: Administrace + devops: Devops + invites: Pozvánky + moderation: Moderování + special: Speciální + delete: Smazat + edit: Upravit roli „%{name}“ + everyone: Výchozí oprávnění + permissions_count: + few: "%{count} oprávnění" + many: "%{count} oprávnění" + one: "%{count} oprávnění" + other: "%{count} oprávnění" + privileges: + administrator: Správce + delete_user_data: Mazat uživatelská data + delete_user_data_description: Umožňuje uživatelům bezodkladně mazat data jiných uživatelů + invite_users: Zvát uživatele + invite_users_description: Umožňuje uživatelům zvát na server nové lidi + manage_announcements: Spravovat oznámení + manage_appeals: Spravovat odvolání + manage_appeals_description: Umožňuje uživatelům posuzovat odvolání proti moderátorským zásahům + manage_blocks: Spravovat blokace + manage_custom_emojis: Spravovat vlastní emoji + manage_custom_emojis_description: Umožňuje uživatelům spravovat vlastní emoji na serveru + manage_invites: Spravovat pozvánky + manage_reports: Spravovat hlášení + manage_roles: Spravovat role + manage_rules: Spravovat pravidla + manage_settings: Spravovat nastavení + manage_user_access: Spravovat uživatelské přístupy + manage_users: Spravovat uživatele + manage_webhooks: Spravovat webhooky + view_audit_log: Zobrazovat protokol auditu + view_devops: Devops + title: Role rules: add_new: Přidat pravidlo delete: Smazat @@ -729,9 +770,6 @@ cs: deletion: desc_html: Povolit komukoliv smazat svůj účet title: Zpřístupnit smazání účtu - min_invite_role: - disabled: Nikdo - title: Povolit pozvánky od require_invite_text: desc_html: Když jsou registrace schvalovány ručně, udělat odpověď na otázku "Proč se chcete připojit?" povinnou title: Požadovat od nových uživatelů zdůvodnění založení @@ -744,9 +782,6 @@ cs: show_known_fediverse_at_about_page: desc_html: Je-li vypnuto, bude veřejná časová osa, na kterou odkazuje hlavní stránka serveru, omezena pouze na místní obsah title: Zahrnout federovaný obsah na neautentizované stránce veřejné časové osy - show_staff_badge: - desc_html: Zobrazit na stránce uživatele odznak personálu - title: Zobrazit odznak personálu site_description: desc_html: Úvodní odstavec v API. Popište, čím se tento server Mastodon odlišuje od ostatních, a cokoliv jiného, co je důležité. Můžete zde používat HTML značky, hlavně <a> a <em>. title: Popis serveru @@ -1116,7 +1151,7 @@ cs: invalid_domain: není platné doménové jméno errors: '400': Žádost, kterou jste odeslali, byla neplatná nebo poškozená. - '403': Nemáte povolení zobrazit tuto stránku. + '403': Nejste oprávněni tuto stránku zobrazit. '404': Stránka, kterou hledáte, tu není. '406': Tato stránka není v požadovaném formátu dostupná. '410': Stránka, kterou hledáte, tu již není. @@ -1163,7 +1198,6 @@ cs: title: Upravit filtr errors: invalid_context: Nebyl poskytnut žádný nebo jen neplatný kontext - invalid_irreversible: Nezvratné filtrování funguje pouze v souvislosti s domovskou osou či oznámeními index: delete: Smazat empty: Nemáte žádný filtr. @@ -1291,6 +1325,8 @@ cs: copy_account_note_text: 'Tento účet se přesunul z %{acct}, zde byly Vaše předchozí poznámky o něm:' notification_mailer: admin: + report: + subject: Uživatel %{name} podal hlášení sign_up: subject: Uživatel %{name} se zaregistroval digest: diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 91375332568..41c54ba7502 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -98,10 +98,8 @@ cy: posts_tab_heading: Postiadau posts_with_replies: Postiadau ac atebion roles: - admin: Gweinyddwr bot: Bot group: Grŵp - moderator: Safonwr unavailable: Proffil ddim ar gael unfollow: Dad-ddilyn admin: @@ -120,7 +118,6 @@ cy: avatar: Afatar by_domain: Parth change_email: - changed_msg: E-bost cyfrif wedi ei newid yn llwyddiannus! current_email: E-bost Cyfredol label: Newid E-bost new_email: E-bost Newydd @@ -197,11 +194,6 @@ cy: reset: Ailosod reset_password: Ailosod cyfrinair resubscribe: Aildanysgrifio - role: Caniatâd - roles: - admin: Gweinyddwr - moderator: Aroglygydd - user: Defnyddiwr search: Chwilio search_same_email_domain: Defnyddwyr eraill gyda'r un parth ebost search_same_ip: Defnyddwyr eraill gyda'r un IP @@ -488,9 +480,6 @@ cy: deletion: desc_html: Caniatau i unrhywun i ddileu eu cyfrif title: Agor dileu cyfrif - min_invite_role: - disabled: Neb - title: Caniatau gwahoddiadau gan registrations_mode: modes: approved: Mae angen cymeradwyaeth ar gyfer cofrestru @@ -500,9 +489,6 @@ cy: show_known_fediverse_at_about_page: desc_html: Wedi'i ddewis, bydd yn dangos rhagolwg o dŵtiau o'r holl ffedysawd. Fel arall bydd ond yn dangos tŵtiau lleol. title: Dangos ffedysawd hysbys ar ragolwg y ffrwd - show_staff_badge: - desc_html: Dangos bathodyn staff ar dudalen defnyddiwr - title: Dangos bathodyn staff site_description: desc_html: Paragraff agoriadol ar y dudalen flaen. Disgrifiwch yr hyn sy'n arbennig am y gweinydd Mastodon hwn ac unrhywbeth arall o bwys. Mae modd defnyddio tagiau HTML <a> a <em>. title: Disgrifiad achos @@ -734,7 +720,6 @@ cy: title: Golygu hidlydd errors: invalid_context: Dim cyd-destun neu cyd-destun annilys wedi ei ddarparu - invalid_irreversible: Mae hidlo anadferadwy ond yn gweithio yng nghyd-destun cartref neu hysbysiadau index: delete: Dileu empty: Nid oes gennych chi hidlyddion. diff --git a/config/locales/da.yml b/config/locales/da.yml index 337005369e2..c9a0954feed 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -83,10 +83,8 @@ da: posts_tab_heading: Indlæg posts_with_replies: Indlæg og svar roles: - admin: Admin bot: Bot group: Gruppe - moderator: Moderator unavailable: Profil utilgængelig unfollow: Følg ikke længere admin: @@ -105,12 +103,17 @@ da: avatar: Profilbillede by_domain: Domæne change_email: - changed_msg: Kontoens e-mail er skiftet! + changed_msg: E-mail skiftet! current_email: Nuværende e-mail label: Skift e-mail new_email: Ny e-mail submit: Skift e-mail title: Skift e-mail for %{username} + change_role: + changed_msg: Rolle ændret! + label: Ændr rolle + no_role: Ingen rolle + title: Ændr rolle for %{username} confirm: Bekræft confirmed: Bekræftet confirming: Bekræfter @@ -154,6 +157,7 @@ da: active: Aktiv all: Alle pending: Afventer + silenced: Begrænset suspended: Suspenderet title: Moderation moderation_notes: Moderationsnotater @@ -161,6 +165,7 @@ da: most_recent_ip: Seneste IP no_account_selected: Ingen kontiændringer, da ingen var valgt no_limits_imposed: Ingen begrænsninger pålagt + no_role_assigned: Ingen rolle tildelt not_subscribed: Abonnerer ikke pending: Afventende vurdering perform_full_suspension: Suspendér @@ -187,12 +192,7 @@ da: reset: Nulstil reset_password: Nulstil adgangskode resubscribe: Genabonnér - role: Tilladelser - roles: - admin: Administrator - moderator: Moderator - staff: Personale - user: Bruger + role: Rolle search: Søg search_same_email_domain: Øvrige brugere med samme e-maildomæne search_same_ip: Øvrige brugere med identisk IP @@ -649,6 +649,54 @@ da: unresolved: Uløst updated_at: Opdateret view_profile: Vis profil + roles: + add_new: Tilføj rolle + assigned_users: + one: "%{count} bruger" + other: "%{count} brugere" + categories: + administration: Håndtering + devops: Devops + invites: Invitationer + moderation: Moderering + special: Speciel + delete: Slet + description_html: Med brugerrollerkan man tilpasse sine brugeres adgang til Mastodon-funktioner og -områder. + edit: Redigér rolle for '%{name} + everyone: Standardtilladelser + everyone_full_description_html: Dette er basisrollen med indvirkning på alle brugere, selv dem uden rolletildeling. Alle øvrige rolletilladelser nedarves herfra. + permissions_count: + one: "%{count} tilladelse" + other: "%{count} tilladelser" + privileges: + administrator: Administrator + administrator_description: Brugere med denne rolle kan omgå alle tilladelser + delete_user_data: Slet brugerdata + invite_users: Invitere brugere + invite_users_description: Tillader brugere at invitere nye personer til serveren + manage_announcements: Håndtere bekendtgørelser + manage_announcements_description: Tillader brugere at håndtere bekendtgørelser på serveren + manage_appeals: Håndtere appeller + manage_appeals_description: Tillader brugere at vurdere appeller af modereringshandlinger + manage_blocks: Håndtere blokeringer + manage_blocks_description: Tillader brugere at blokere e-mailudbydere og IP-adresser + manage_custom_emojis: Håndtere tilpassede emojier + manage_custom_emojis_description: Tillader brugere at håndtere tilpassede emojier på serveren + manage_federation: Håndtere federation + manage_federation_description: Tillader brugere at blokere eller tillade federation med andre domæner og styre leverbarhed + manage_invites: Håndtere invitationer + manage_invites_description: Tillader brugere at gennemse og deaktivere invitationslinks + manage_reports: Håndtere rapporter + manage_reports_description: Tillader brugere at vurdere rapporter og, i overensstemmelse hermed, at udføre moderationshandlinger + manage_roles: Håndtere roller + manage_roles_description: Tillader brugere at håndtere og tildele roller under deres privilegiestatus + manage_rules: Håndtere regler + manage_rules_description: Tillad brugere at ændre serverregler + manage_settings: Håndtere indstillinger + manage_settings_description: Tillader brugere at ændre webstedsindstillinger + manage_taxonomies: Håndtere taksonomier + manage_taxonomies_description: Tillader brugere at gennemse tenderende indhold og opdatere hashtag-indstillinger + manage_user_access: Håndtere brugeradgang rules: add_new: Tilføj regel delete: Slet @@ -701,9 +749,6 @@ da: deletion: desc_html: Tillad enhver at slette sin konto title: Åbn kontosletning - min_invite_role: - disabled: Ingen - title: Tillad invitationer fra require_invite_text: desc_html: Når tilmelding kræver manuel godkendelse, så gør “Hvorfor ønsker du at deltage?” tekstinput obligatorisk i stedet for valgfrit title: Nye brugere afkræves tilmeldingsbegrundelse @@ -716,9 +761,6 @@ da: show_known_fediverse_at_about_page: desc_html: Når deaktiveret, begrænses den fra indgangssiden linkede offentlige tidslinje til kun at vise lokalt indhold title: Medtag federeret indhold på ikke-godkendt, offentlig tidslinjeside - show_staff_badge: - desc_html: Vis et personale-badge på en brugerside - title: Vis personale-badge site_description: desc_html: Introduktionsafsnit på API'en. Beskriv, hvad der gør denne Mastodonserver speciel samt alt andet vigtigt. HTML-tags kan bruges, især <a> og <em>. title: Serverbeskrivelse @@ -1124,15 +1166,24 @@ da: public: Offentlig tidslinje thread: Konversationer edit: + add_keyword: Tilføj nøgleord + keywords: Nøgleord title: Redigere filter errors: + deprecated_api_multiple_keywords: Disse parametre kan ikke ændres fra denne applikation, da de gælder for flere end ét filternøgleord. Brug en nyere applikation eller webgrænsefladen. invalid_context: Ingen eller ugyldig kontekst angivet - invalid_irreversible: Uigenkaldelig filtrering virker kun med hjemme- eller notifikationskontekster index: + contexts: Filtre i %{contexts} delete: Slet empty: Du har ingen filtre. + expires_in: Udløber om %{distance} + expires_on: Udløber om %{date} + keywords: + one: "%{count} nøgleord" + other: "%{count} nøgleord" title: Filtre new: + save: Gem nye filter title: Tilføj nyt filter footer: developers: Udviklere @@ -1251,6 +1302,8 @@ da: copy_account_note_text: 'Denne bruger er flyttet fra %{acct}, hvor dine tidligere noter om dem var:' notification_mailer: admin: + report: + subject: "%{name} indsendte en anmeldelse" sign_up: subject: "%{name} tilmeldte sig" digest: diff --git a/config/locales/de.yml b/config/locales/de.yml index d15011a5ea5..0c8321295fe 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -83,10 +83,8 @@ de: posts_tab_heading: Beiträge posts_with_replies: Beiträge mit Antworten roles: - admin: Administrator bot: Bot group: Gruppe - moderator: Moderator unavailable: Profil nicht verfügbar unfollow: Entfolgen admin: @@ -105,7 +103,6 @@ de: avatar: Profilbild by_domain: Domain change_email: - changed_msg: E-Mail-Adresse des Kontos erfolgreich geändert! current_email: Aktuelle E-Mail-Adresse label: E-Mail-Adresse ändern new_email: Neue E-Mail-Adresse @@ -187,12 +184,6 @@ de: reset: Zurücksetzen reset_password: Passwort zurücksetzen resubscribe: Wieder abonnieren - role: Berechtigungen - roles: - admin: Administrator - moderator: Moderator_in - staff: Mitarbeiter - user: Nutzer search: Suche search_same_email_domain: Andere Benutzer mit der gleichen E-Mail-Domain search_same_ip: Andere Benutzer mit derselben IP @@ -701,9 +692,6 @@ de: deletion: desc_html: Allen erlauben, ihr Konto eigenmächtig zu löschen title: Kontolöschung erlauben - min_invite_role: - disabled: Niemand - title: Einladungen erlauben von require_invite_text: desc_html: Wenn eine Registrierung manuell genehmigt werden muss, mache den "Warum möchtest du beitreten?" Text eher obligatorisch als optional title: Neue Benutzer müssen einen Einladungstext ausfüllen @@ -716,9 +704,6 @@ de: show_known_fediverse_at_about_page: desc_html: Wenn aktiviert, wird es alle Beiträge aus dem bereits bekannten Teil des Fediversums auf der Startseite anzeigen. Andernfalls werden lokale Beitrage des Servers angezeigt. title: Zeige eine öffentliche Zeitleiste auf der Einstiegsseite - show_staff_badge: - desc_html: Zeige Mitarbeiter-Badge auf Benutzerseite - title: Zeige Mitarbeiter-Badge site_description: desc_html: Einleitungsabschnitt auf der Frontseite. Beschreibe, was diesen Mastodon-Server ausmacht. Du kannst HTML-Tags benutzen, insbesondere <a> und <em>. title: Beschreibung des Servers @@ -1127,7 +1112,6 @@ de: title: Filter bearbeiten errors: invalid_context: Ungültiger oder fehlender Kontext übergeben - invalid_irreversible: Unwiderrufliche Filterung funktioniert nur mit Heim- oder Benachrichtigungskontext index: delete: Löschen empty: Du hast keine Filter. diff --git a/config/locales/devise.si.yml b/config/locales/devise.si.yml index b9aa1527cec..08b7286cbf5 100644 --- a/config/locales/devise.si.yml +++ b/config/locales/devise.si.yml @@ -1,42 +1,115 @@ --- si: devise: + confirmations: + confirmed: ඔබගේ විද්‍යුත් තැපැල් ලිපිනය සාර්ථකව තහවුරු කර ඇත. + send_instructions: මිනිත්තු කිහිපයකින් ඔබගේ විද්‍යුත් තැපැල් ලිපිනය තහවුරු කරන ආකාරය පිළිබඳ උපදෙස් සහිත විද්‍යුත් තැපෑලක් ඔබට ලැබෙනු ඇත. ඔබට මෙම විද්‍යුත් තැපෑල නොලැබුනේ නම් කරුණාකර ඔබගේ අයාචිත තැපැල් ෆෝල්ඩරය පරීක්ෂා කරන්න. + send_paranoid_instructions: ඔබගේ විද්‍යුත් තැපැල් ලිපිනය අපගේ දත්ත ගබඩාවේ තිබේ නම්, මිනිත්තු කිහිපයකින් ඔබගේ විද්‍යුත් තැපැල් ලිපිනය තහවුරු කරන ආකාරය පිළිබඳ උපදෙස් සහිත විද්‍යුත් තැපෑලක් ඔබට ලැබෙනු ඇත. ඔබට මෙම විද්‍යුත් තැපෑල නොලැබුනේ නම් කරුණාකර ඔබගේ අයාචිත තැපැල් ෆෝල්ඩරය පරීක්ෂා කරන්න. failure: already_authenticated: ඔබ දැනටමත් පිවිස ඇත. + inactive: ඔබගේ ගිණුම තවම සක්‍රිය කර නොමැත. + invalid: වලංගු නොවන %{authentication_keys} හෝ මුරපදය. + last_attempt: ඔබගේ ගිණුම අගුලු දැමීමට පෙර ඔබට තවත් එක් උත්සාහයක් ඇත. locked: ඔබගේ ගිණුම අගුළු දමා ඇත. + not_found_in_database: වලංගු නොවන %{authentication_keys} හෝ මුරපදය. + pending: ඔබගේ ගිණුම තවමත් සමාලෝචනය වෙමින් පවතී. + timeout: ඔබේ සැසිය කල් ඉකුත් විය. ඉදිරියට යාමට කරුණාකර නැවත පුරන්න. + unauthenticated: ඉදිරියට යාමට පෙර ඔබ පුරනය වීමට හෝ ලියාපදිංචි වීමට අවශ්‍ය වේ. + unconfirmed: දිගටම කරගෙන යාමට පෙර ඔබ ඔබේ ඊමේල් ලිපිනය තහවුරු කළ යුතුය. mailer: confirmation_instructions: + action: ඊමේල් ලිපිනය තහවුරු කරන්න + action_with_app: තහවුරු කර %{app}වෙත ආපසු යන්න + explanation: ඔබ මෙම ඊමේල් ලිපිනය සමඟ %{host} හි ගිණුමක් සාදා ඇත. ඔබ එය සක්‍රිය කිරීමට එක ක්ලික් කිරීමක් ඇත. මේ ඔබ නොවේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. + explanation_when_pending: ඔබ මෙම විද්‍යුත් තැපැල් ලිපිනය සමඟ %{host} වෙත ආරාධනාවක් සඳහා ඉල්ලුම් කළා. ඔබ ඔබගේ විද්‍යුත් තැපැල් ලිපිනය තහවුරු කළ පසු, අපි ඔබගේ අයදුම්පත සමාලෝචනය කරන්නෙමු. ඔබගේ විස්තර වෙනස් කිරීමට හෝ ඔබගේ ගිණුම මකා දැමීමට ඔබට පුරනය විය හැක, නමුත් ඔබගේ ගිණුම අනුමත වන තුරු ඔබට බොහෝ කාර්යයන් වෙත ප්‍රවේශ විය නොහැක. ඔබගේ අයදුම්පත ප්‍රතික්ෂේප කළහොත්, ඔබගේ දත්ත ඉවත් කරනු ඇත, එබැවින් ඔබෙන් වැඩිදුර ක්‍රියාමාර්ග අවශ්‍ය නොවනු ඇත. මේ ඔබ නොවේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. + extra_html: කරුණාකර සේවාදායකයේ නීති සහ අපගේ සේවා කොන්දේසිද පරීක්ෂා කරන්න. + subject: 'Mastodon: %{instance}සඳහා තහවුරු කිරීමේ උපදෙස්' title: වි. තැපැල් ලිපිනය තහවුරු කරන්න email_changed: + explanation: 'ඔබගේ ගිණුම සඳහා ඊමේල් ලිපිනය වෙනස් වෙමින් පවතී:' + extra: ඔබ ඔබගේ විද්‍යුත් තැපෑල වෙනස් නොකළේ නම්, යම් අයෙකු ඔබගේ ගිණුමට ප්‍රවේශය ලබා ගෙන ඇති බව පෙනෙන්නට තිබේ. ඔබගේ ගිණුමෙන් අගුලු දමා ඇත්නම් කරුණාකර ඔබගේ මුරපදය වහාම වෙනස් කරන්න හෝ සේවාදායක පරිපාලක අමතන්න. subject: 'මාස්ටඩන්: වි-තැපෑල වෙනස් විය' title: නව විද්‍යුත් තැපැල් ලිපිනය password_change: - title: මුරපදය වෙනස් කරන ලදි + explanation: ඔබගේ ගිණුම සඳහා මුරපදය වෙනස් කර ඇත. + extra: ඔබ ඔබගේ මුරපදය වෙනස් නොකළේ නම්, යමෙකු ඔබගේ ගිණුමට ප්‍රවේශය ලබා ගෙන ඇති බව පෙනෙන්නට තිබේ. ඔබගේ ගිණුමෙන් අගුලු දමා ඇත්නම් කරුණාකර ඔබගේ මුරපදය වහාම වෙනස් කරන්න හෝ සේවාදායක පරිපාලක අමතන්න. + subject: 'Mastodon: මුරපදය වෙනස් විය' + title: මුරපදය වෙනස් කරන ලදී reconfirmation_instructions: + explanation: ඔබගේ ඊමේල් වෙනස් කිරීමට නව ලිපිනය තහවුරු කරන්න. + extra: මෙම වෙනස ඔබ විසින් ආරම්භ කරන ලද්දක් නොවේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. ඔබ ඉහත සබැඳියට ප්‍රවේශ වන තෙක් Mastodon ගිණුම සඳහා ඊමේල් ලිපිනය වෙනස් නොවේ. + subject: 'Mastodon: %{instance}සඳහා විද්‍යුත් තැපෑල තහවුරු කරන්න' title: වි. තැපැල් ලිපිනය තහවුරු කරන්න reset_password_instructions: action: මුරපදය වෙනස් කරන්න + explanation: ඔබ ඔබගේ ගිණුම සඳහා නව මුරපදයක් ඉල්ලා ඇත. + extra: ඔබ මෙය ඉල්ලා නොසිටියේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. ඔබ ඉහත සබැඳියට ප්‍රවේශ වී අලුත් එකක් සාදන තෙක් ඔබේ මුරපදය වෙනස් නොවනු ඇත. + subject: 'Mastodon: මුරපද උපදෙස් යළි පිහිටුවන්න' title: මුරපදය නැවත සැකසීම two_factor_disabled: + explanation: ඔබගේ ගිණුම සඳහා ද්වි-සාධක සත්‍යාපනය අබල කර ඇත. විද්‍යුත් තැපැල් ලිපිනය සහ මුරපදය පමණක් භාවිතයෙන් දැන් පුරනය විය හැක. + subject: 'Mastodon: ද්වි සාධක සත්‍යාපනය අක්‍රීය කර ඇත' title: ද්විපියවර අබලයි two_factor_enabled: + explanation: ඔබගේ ගිණුම සඳහා ද්වි-සාධක සත්‍යාපනය සක්‍රීය කර ඇත. යුගල කළ TOTP යෙදුම මගින් ජනනය කරන ලද ටෝකනයක් පුරනය වීමට අවශ්‍ය වනු ඇත. + subject: 'Mastodon: ද්වි සාධක සත්‍යාපනය සක්‍රීය කර ඇත' title: ද්විපියවර සබලයි two_factor_recovery_codes_changed: - title: ද්විපියවර ප්‍රතිසාධන කේත වෙනස්විණි + explanation: පෙර ප්‍රතිසාධන කේත අවලංගු කර නව ඒවා උත්පාදනය කර ඇත. + subject: 'Mastodon: ද්වි-සාධක ප්‍රතිසාධන කේත නැවත උත්පාදනය කරන ලදී' + title: ද්විපියවර ප්‍රතිසාධන කේත වෙනස් වේ unlock_instructions: - subject: 'මාස්ටඩන්: අගුලුහැරීමේ උපදේශ' + subject: 'මාස්ටඩන්: අගුලුහැරීමේ උපදේශනය' webauthn_credential: added: + explanation: පහත ආරක්ෂක යතුර ඔබගේ ගිණුමට එක් කර ඇත subject: 'මාස්ටඩන්: නව ආරක්‍ෂණ යතුර' title: ආරක්‍ෂණ යතුරක් එකතු කර ඇත + deleted: + explanation: පහත ආරක්ෂක යතුර ඔබගේ ගිණුමෙන් මකා ඇත + subject: 'Mastodon: ආරක්ෂක යතුර මකා ඇත' + title: ඔබගේ ආරක්ෂක යතුරු වලින් එකක් මකා ඇත webauthn_disabled: + explanation: ඔබගේ ගිණුම සඳහා ආරක්ෂක යතුරු සමඟ සත්‍යාපනය අබල කර ඇත. යුගල කළ TOTP යෙදුම මගින් ජනනය කරන ලද ටෝකනය පමණක් භාවිතයෙන් දැන් පුරනය විය හැක. + subject: 'Mastodon: ආරක්ෂක යතුරු සමඟ සත්‍යාපනය අක්‍රිය කර ඇත' title: ආරක්‍ෂණ යතුරු අබල කර ඇත webauthn_enabled: + explanation: ඔබගේ ගිණුම සඳහා ආරක්ෂක යතුරු සත්‍යාපනය සක්‍රීය කර ඇත. ඔබගේ ආරක්ෂක යතුර දැන් පුරනය වීම සඳහා භාවිතා කළ හැක. + subject: 'Mastodon: ආරක්ෂක යතුරු සත්‍යාපනය සක්‍රීය කර ඇත' title: ආරක්‍ෂණ යතුරු සබල කර ඇත + omniauth_callbacks: + failure: '"%{reason}" නිසා %{kind} සිට ඔබව සත්‍යාපනය කළ නොහැක.' + success: "%{kind} ගිණුමෙන් සාර්ථකව සත්‍යාපනය කරන ලදී." + passwords: + no_token: මුරපද යළි පිහිටුවීමේ විද්‍යුත් තැපෑලකින් නොපැමිණ ඔබට මෙම පිටුවට ප්‍රවේශ විය නොහැක. ඔබ පැමිණෙන්නේ මුරපද යළි පිහිටුවීමේ විද්‍යුත් තැපෑලකින් නම්, කරුණාකර ඔබ සපයා ඇති සම්පූර්ණ URL භාවිතා කර ඇති බවට වග බලා ගන්න. + send_instructions: ඔබගේ විද්‍යුත් තැපැල් ලිපිනය අපගේ දත්ත ගබඩාවේ තිබේ නම්, මිනිත්තු කිහිපයකින් ඔබගේ විද්‍යුත් තැපැල් ලිපිනයට මුරපද ප්‍රතිසාධන සබැඳියක් ලැබෙනු ඇත. ඔබට මෙම විද්‍යුත් තැපෑල නොලැබුනේ නම් කරුණාකර ඔබගේ අයාචිත තැපැල් ෆෝල්ඩරය පරීක්ෂා කරන්න. + send_paranoid_instructions: ඔබගේ විද්‍යුත් තැපැල් ලිපිනය අපගේ දත්ත ගබඩාවේ තිබේ නම්, මිනිත්තු කිහිපයකින් ඔබගේ විද්‍යුත් තැපැල් ලිපිනයට මුරපද ප්‍රතිසාධන සබැඳියක් ලැබෙනු ඇත. ඔබට මෙම විද්‍යුත් තැපෑල නොලැබුනේ නම් කරුණාකර ඔබගේ අයාචිත තැපැල් ෆෝල්ඩරය පරීක්ෂා කරන්න. + updated: ඔබගේ මුරපදය සාර්ථකව වෙනස් කර ඇත. ඔබ දැන් පුරනය වී ඇත. + updated_not_active: ඔබගේ මුරපදය සාර්ථකව වෙනස් කර ඇත. registrations: - update_needs_confirmation: ඔබ ඔබගේ ගිණුම සාර්ථකව යාවත්කාලීන කළ නමුත් අපට ඔබගේ නව විද්‍යුත් තැපැල් ලිපිනය තහවුරු කළ යුතුය. කරුණාකර ඔබගේ විද්‍යුත් තැපෑල පරීක්ෂා කර තහවුරු කිරීමේ සබැඳිය අනුගමනය කර ඔබගේ නව විද්‍යුත් තැපැල් ලිපිනය තහවුරු කරන්න. ඔබට මෙම විද්‍යුත් තැපෑල නොලැබුනේ නම් කරුණාකර ඔබගේ අයාචිත තැපැල් බහාලුම පරීක්ෂා කරන්න. + destroyed: ආයුබෝවන්! ඔබගේ ගිණුම සාර්ථකව අවලංගු කර ඇත. ඉක්මනින්ම ඔබව නැවත හමුවීමට අපි බලාපොරොත්තු වෙමු. + signed_up: සාදරයෙන් පිළිගනිමු! ඔබ සාර්ථකව ලියාපදිංචි වී ඇත. + signed_up_but_inactive: ඔබ සාර්ථකව ලියාපදිංචි වී ඇත. කෙසේ වෙතත්, ඔබගේ ගිණුම තවමත් සක්‍රිය කර නොමැති නිසා අපට ඔබව පුරනය වීමට නොහැකි විය. + signed_up_but_locked: ඔබ සාර්ථකව ලියාපදිංචි වී ඇත. කෙසේ වෙතත්, ඔබගේ ගිණුම අගුලු දමා ඇති නිසා අපට ඔබව පුරනය කිරීමට නොහැකි විය. + signed_up_but_pending: තහවුරු කිරීමේ සබැඳියක් සහිත පණිවිඩයක් ඔබගේ විද්‍යුත් තැපැල් ලිපිනයට යවා ඇත. ඔබ සබැඳිය ක්ලික් කළ පසු, අපි ඔබගේ අයදුම්පත සමාලෝචනය කරන්නෙමු. එය අනුමත වුවහොත් ඔබට දැනුම් දෙනු ලැබේ. + signed_up_but_unconfirmed: තහවුරු කිරීමේ සබැඳියක් සහිත පණිවිඩයක් ඔබගේ විද්‍යුත් තැපැල් ලිපිනයට යවා ඇත. ඔබගේ ගිණුම සක්‍රිය කිරීමට කරුණාකර සබැඳිය අනුගමනය කරන්න. ඔබට මෙම විද්‍යුත් තැපෑල නොලැබුනේ නම් කරුණාකර ඔබගේ අයාචිත තැපැල් ෆෝල්ඩරය පරීක්ෂා කරන්න. + update_needs_confirmation: ඔබගේ ගිණුම සාර්ථකව යාවත්කාලීන කළ හැකි නමුත් අපට ඔබගේ නව විද්‍යුත් තැපැල් ලිපිනය තහවුරු කර ගත යුතුය. කරුණාකර ඔබගේ විද්‍යුත් තැපෑල පරීක්ෂා කර තහවුරු කිරීමේ සබැඳිය අනුගමනය කරන්න ඔබගේ නව විද්‍යුත් තැපැල් ලිපිනය තහවුරු කරන්න. ඔබට මෙම විද්‍යුත් තැපෑල නොලැබුනේ නම් කරුණාකර ඔබගේ අයාචිත තැපැල් බහාලුම පරීක්ෂා කරන්න. updated: ඔබගේ ගිණුම සාර්ථකව යාවත්කාලීන කර ඇත. sessions: already_signed_out: සාර්ථකව නික්මුනි. - signed_in: සාර්ථකව පිවිසුනි. + signed_in: සාර්ථකව පිවිසෙන්න. signed_out: සාර්ථකව නික්මුනි. + unlocks: + send_instructions: මිනිත්තු කිහිපයකින් ඔබගේ ගිණුම අගුළු හරින ආකාරය පිළිබඳ උපදෙස් සහිත විද්‍යුත් තැපෑලක් ඔබට ලැබෙනු ඇත. ඔබට මෙම විද්‍යුත් තැපෑල නොලැබුනේ නම් කරුණාකර ඔබගේ අයාචිත තැපැල් ෆෝල්ඩරය පරීක්ෂා කරන්න. + send_paranoid_instructions: ඔබගේ ගිණුම තිබේ නම්, මිනිත්තු කිහිපයකින් එය අගුළු හරින ආකාරය පිළිබඳ උපදෙස් සහිත විද්‍යුත් තැපෑලක් ඔබට ලැබෙනු ඇත. ඔබට මෙම විද්‍යුත් තැපෑල නොලැබුනේ නම් කරුණාකර ඔබගේ අයාචිත තැපැල් ෆෝල්ඩරය පරීක්ෂා කරන්න. + unlocked: ඔබගේ ගිණුම සාර්ථකව අගුලු හැර ඇත. ඉදිරියට යාමට කරුණාකර පුරනය වන්න. + errors: + messages: + already_confirmed: දැනටමත් තහවුරු කර ඇත, කරුණාකර පුරනය වීමට උත්සාහ කරන්න + confirmation_period_expired: "%{period}තුළ තහවුරු කළ යුතුය, කරුණාකර අලුත් එකක් ඉල්ලන්න" + expired: කල් ඉකුත් වී ඇත, කරුණාකර අලුත් එකක් ඉල්ලන්න + not_found: හමු වුණේ නැහැ + not_locked: අගුලු දමා නොතිබුණි + not_saved: + one: '1 දෝෂයක් මෙම %{resource} සුරැකීම තහනම් කර ඇත:' + other: 'දෝෂ %{count} කින් මෙම %{resource} සුරැකීම තහනම් කර ඇත:' diff --git a/config/locales/doorkeeper.eo.yml b/config/locales/doorkeeper.eo.yml index 1584fddf007..473757a37ad 100644 --- a/config/locales/doorkeeper.eo.yml +++ b/config/locales/doorkeeper.eo.yml @@ -110,6 +110,7 @@ eo: bookmarks: Legosignoj lists: Listoj mutes: Silentigitaj + reports: Raportoj search: Serĉi statuses: Afiŝoj layouts: diff --git a/config/locales/doorkeeper.si.yml b/config/locales/doorkeeper.si.yml index 6416fd08205..4bbfa4e90e6 100644 --- a/config/locales/doorkeeper.si.yml +++ b/config/locales/doorkeeper.si.yml @@ -4,10 +4,22 @@ si: attributes: doorkeeper/application: name: යෙදුමේ නම + redirect_uri: URI යළි-යොමු කරන්න + scopes: විෂය පථයන් website: යෙදුමේ වියමන අඩවිය + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: කොටසක් අඩංගු විය නොහැක. + invalid_uri: වලංගු URI එකක් විය යුතුය. + relative_uri: නිරපේක්ෂ URI විය යුතුය. + secured_uri: HTTPS/SSL URI එකක් විය යුතුය. doorkeeper: applications: buttons: + authorize: අවසරලත් cancel: අවලංගු destroy: විනාශ කරන්න edit: සංස්කරණය @@ -16,11 +28,20 @@ si: destroy: ඔබට විශ්වාසද? edit: title: යෙදුම සංස්කරණය + form: + error: අපොයි! විය හැකි දෝෂ සඳහා ඔබේ පෝරමය පරීක්ෂා කරන්න + help: + native_redirect_uri: දේශීය පරීක්ෂණ සඳහා %{native_redirect_uri} භාවිතා කරන්න + redirect_uri: URI එකකට එක පේළියක් භාවිතා කරන්න + scopes: අවකාශයන් සහිත විෂය පථයන් වෙන් කරන්න. පෙරනිමි විෂය පථ භාවිතා කිරීමට හිස්ව තබන්න. index: application: යෙදුම + callback_url: ආපසු ඇමතුම් URL + delete: මකන්න empty: ඔබට කිසිම යෙදුමක් නැත. name: නම new: නව යෙදුම + scopes: විෂය පථයන් show: පෙන්වන්න title: ඔබගේ යෙදුම් new: @@ -28,33 +49,137 @@ si: show: actions: ක්‍රියාමාර්ග application_id: අනුග්‍රාහක යතුර + callback_urls: ආපසු ඇමතුම් URL + scopes: විෂය පථයන් secret: අනුග්‍රාහකයේ රහස title: 'යෙදුම: %{name}' authorizations: buttons: authorize: සත්‍යාපනය + deny: ප්‍රතික්ෂේප කරන්න + error: + title: දෝෂයක් සිදුවී ඇත + new: + prompt_html: "%{client_name} ඔබගේ ගිණුමට ප්‍රවේශ වීමට අවසර ලබා ගැනීමට කැමති වේ. එය තෙවන පාර්ශවීය යෙදුමකි. ඔබ එය විශ්වාස නොකරන්නේ නම්, ඔබ එයට අවසර නොදිය යුතුය." + review_permissions: අවසර සමාලෝචනය කරන්න + title: බලය පැවරීමේ අවශ්ය + show: + title: මෙම අවසර කේතය පිටපත් කර එය යෙදුමට අලවන්න. authorized_applications: + buttons: + revoke: අවලංගු කරන්න confirmations: revoke: ඔබට විශ්වාසද? + index: + authorized_at: "%{date}මත අවසර දී ඇත" + description_html: මේවා API භාවිතයෙන් ඔබගේ ගිණුමට ප්‍රවේශ විය හැකි යෙදුම් වේ. ඔබ මෙහි හඳුනා නොගත් යෙදුම් තිබේ නම්, හෝ යෙදුමක් වැරදි ලෙස හැසිරෙන්නේ නම්, ඔබට එහි ප්‍රවේශය අවලංගු කළ හැක. + last_used_at: අවසන් වරට භාවිතා කළේ %{date} + never_used: කවදාවත් පාවිච්චි කළේ නැහැ + scopes: අවසර + superapp: අභ්යන්තර + title: ඔබගේ බලයලත් අයදුම්පත් + errors: + messages: + access_denied: සම්පත් හිමිකරු හෝ අවසර සේවාදායකය ඉල්ලීම ප්‍රතික්ෂේප කළේය. + credential_flow_not_configured: Doorkeeper.configure.resource_owner_from_credentials වින්‍යාස නොකිරීම හේතුවෙන් සම්පත් හිමිකරුගේ මුරපද අක්තපත්‍ර ප්‍රවාහය අසාර්ථක විය. + invalid_client: නොදන්නා සේවාලාභියා නිසා සේවාලාභී සත්‍යාපනය අසාර්ථක විය, සේවාලාභී සත්‍යාපනය ඇතුළත් කර නැත, හෝ සහය නොදක්වන සත්‍යාපන ක්‍රමයක්. + invalid_grant: සපයා ඇති අවසර දීමනාව වලංගු නැත, කල් ඉකුත් වී ඇත, අවලංගු කර ඇත, අවසර ඉල්ලීමේ භාවිතා කරන ලද යළි-යොමුවීම් URI සමඟ නොගැලපේ, නැතහොත් වෙනත් සේවාදායකයෙකුට නිකුත් කර ඇත. + invalid_redirect_uri: ඇතුළත් කර ඇති යළි-යොමුවීම් uri වලංගු නොවේ. + invalid_request: + missing_param: 'අවශ්‍ය පරාමිතිය අස්ථානගත වී ඇත: %{value}.' + request_not_authorized: ඉල්ලීම අනුමත කළ යුතුය. අවසර ඉල්ලීම සඳහා අවශ්‍ය පරාමිතිය අස්ථානගත වී හෝ වලංගු නොවේ. + unknown: ඉල්ලීමට අවශ්‍ය පරාමිතියක් අස්ථානගත වී ඇත, සහය නොදක්වන පරාමිති අගයක් ඇතුළත් වේ, නැතහොත් වෙනත් ආකාරයකින් විකෘති වී ඇත. + invalid_resource_owner: සපයන ලද සම්පත් හිමිකරු අක්තපත්‍ර වලංගු නැත, නැතහොත් සම්පත් හිමිකරු සොයාගත නොහැක + invalid_scope: ඉල්ලා සිටින විෂය පථය වලංගු නැත, නොදන්නා, හෝ විකෘති වී ඇත. + invalid_token: + expired: ප්‍රවේශ ටෝකනය කල් ඉකුත් විය + revoked: ප්‍රවේශ ටෝකනය අවලංගු කරන ලදී + unknown: ප්‍රවේශ ටෝකනය වලංගු නොවේ + resource_owner_authenticator_not_configured: Doorkeeper.configure.resource_owner_authenticator වින්‍යාසගත නොවීම හේතුවෙන් සම්පත් හිමිකරු සොයා ගැනීම අසාර්ථක විය. + server_error: අවසර සේවාදායකයට අනපේක්ෂිත කොන්දේසියක් ඇති වූ අතර එය ඉල්ලීම ඉටු කිරීම වළක්වයි. + temporarily_unavailable: තාවකාලික අධි බර පැටවීමක් හෝ සේවාදායකයේ නඩත්තුවක් හේතුවෙන් අවසර සේවාදායකයට ඉල්ලීම හැසිරවීමට දැනට නොහැක. + unauthorized_client: මෙම ක්‍රමය භාවිතයෙන් මෙම ඉල්ලීම ඉටු කිරීමට සේවාදායකයාට අවසර නැත. + unsupported_grant_type: අවසර ප්‍රදාන වර්ගයට බලය පැවරීමේ සේවාදායකය විසින් සහය නොදක්වයි. + unsupported_response_type: අවසර සේවාදායකය මෙම ප්‍රතිචාර වර්ගයට සහය නොදක්වයි. + flash: + applications: + create: + notice: යෙදුම නිර්මාණය කරන ලදී. + destroy: + notice: යෙදුම මකා ඇත. + update: + notice: යෙදුම යාවත්කාලීන කරන ලදී. + authorized_applications: + destroy: + notice: අයදුම්පත අවලංගු කරන ලදී. + grouped_scopes: + access: + read: කියවීමට පමණක් ප්‍රවේශය + read/write: කියවීමට සහ ලිවීමට ප්‍රවේශය + write: ලිවීමට පමණක් ප්‍රවේශය + title: + accounts: ගිණුම් + admin/accounts: ගිණුම් පරිපාලනය + admin/all: සියලුම පරිපාලන කාර්යයන් + admin/reports: වාර්තා පරිපාලනය + all: සියල්ල + blocks: කුට්ටි + bookmarks: පිටු සලකුණු + conversations: සංවාද + crypto: අන්තයේ සිට අගට සංකේතනය කිරීම + favourites: ප්රියතම + filters: පෙරහන් + follow: සබඳතා + follows: පහත සඳහන් + lists: ලැයිස්තු + media: මාධ්ය ඇමුණුම් + mutes: නිහඬ කරයි + notifications: දැනුම්දීම් + push: තල්ලු දැනුම්දීම් + reports: වාර්තා + search: සොයන්න + statuses: තනතුරු layouts: admin: nav: applications: යෙදුම් oauth2_provider: වි.සත්‍යා.2 (OAuth) සැපයුම්කරු application: - title: වි.සත්‍යා. (OAuth) අනුමැතිය අවශ්‍යයයි + title: වි.සත්යා. (OAuth) තොරතුරු අවශ්‍යයි scopes: admin:read: සේවාදායකයේ ඇති සියලුම දත්ත කියවන්න admin:read:accounts: සියලුම ගිණුම් වල සංවේදී තොරතුරු කියවන්න admin:read:reports: සියලුම වාර්තා සහ වාර්තා කළ ගිණුම් වල සංවේදී තොරතුරු කියවන්න + admin:write: සේවාදායකයේ සියලුම දත්ත වෙනස් කරන්න + admin:write:accounts: ගිණුම් මත මධ්‍යස්ථ ක්‍රියා සිදු කරන්න + admin:write:reports: වාර්තා මත මධ්‍යස්ථ ක්‍රියා සිදු කරන්න + crypto: end-to-end encryption භාවිතා කරන්න + follow: ගිණුම් සබඳතා වෙනස් කරන්න + push: ඔබගේ තල්ලු දැනුම්දීම් ලබා ගන්න read: ඔබගේ ගිණුමේ සියලුම දත්ත කියවන්න + read:accounts: ගිණුම් තොරතුරු බලන්න + read:blocks: ඔබගේ වාරණ බලන්න + read:bookmarks: ඔබගේ පිටු සලකුණු බලන්න + read:favourites: ඔබේ ප්රියතම බලන්න read:filters: ඔබගේ පෙරහන් බලන්න + read:follows: ඔබගේ පහත සඳහන් බලන්න read:lists: ඔබගේ ලැයිස්තු බලන්න + read:mutes: ඔබේ ගොළු බලන්න read:notifications: ඔබගේ දැනුම්දීම් බලන්න - read:search: ඔබ වෙනුවට සොයන්න + read:reports: ඔබගේ වාර්තා බලන්න + read:search: ඔබ වෙනුවෙන් සොයන්න + read:statuses: සියලුම පෝස්ට් බලන්න + write: ඔබගේ ගිණුමේ සියලුම දත්ත වෙනස් කරන්න + write:accounts: ඔබගේ පැතිකඩ වෙනස් කරන්න write:blocks: ගිණුම් සහ වසම් අවහිර කරන්න - write:filters: පෙරහන් සාදන්න + write:bookmarks: පිටු සලකුණු සටහන් + write:conversations: සංවාද නිහඬ කිරීම සහ මකා දැමීම + write:favourites: ප්රියතම තනතුරු + write:filters: පෙරහන් කරන්න + write:follows: මිනිසුන් අනුගමනය කරන්න + write:lists: ලැයිස්තු සාදන්න write:media: මාධ්‍ය ගොනු උඩුගත කරන්න - write:mutes: මිනිසුන් සහ සංවාද නිහඬකරන්න + write:mutes: මිනිසුන් සහ සංවාද කරන්න write:notifications: ඔබගේ දැනුම්දීම් හිස්කරන්න - write:reports: වෙනත් මිනිසුන් වාර්තා කරන්න + write:reports: වෙනත් පුද්ගලයින් වාර්තා කරන්න + write:statuses: පළ කිරීම් පළ කරන්න diff --git a/config/locales/el.yml b/config/locales/el.yml index 96ec15247a4..8bbb0282206 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -80,10 +80,8 @@ el: posts_tab_heading: Τουτ posts_with_replies: Τουτ και απαντήσεις roles: - admin: Διαχειριστής bot: Μποτ (αυτόματος λογαριασμός) group: Ομάδα - moderator: Μεσολαβητής unavailable: Το προφίλ δεν είναι διαθέσιμο unfollow: Διακοπή παρακολούθησης admin: @@ -102,12 +100,15 @@ el: avatar: Αβατάρ by_domain: Τομέας change_email: - changed_msg: Επιτυχής αλλαγή email λογαριασμού! current_email: Τρέχον email label: Αλλαγή email new_email: Νέο email submit: Αλλαγή email title: Αλλαγή email για %{username} + change_role: + label: Αλλαγή ρόλου + no_role: Κανένας ρόλος + title: Αλλαγή ρόλου για %{username} confirm: Επιβεβαίωση confirmed: Επιβεβαιώθηκε confirming: Προς επιβεβαίωση @@ -148,6 +149,7 @@ el: active: Ενεργός/ή all: Όλα pending: Εκκρεμούν + silenced: Περιορισμένοι suspended: Σε αναστολή title: Μεσολάβηση moderation_notes: Σημειώσεις μεσολάβησης @@ -155,6 +157,7 @@ el: most_recent_ip: Πιο πρόσφατη IP no_account_selected: Κανείς λογαριασμός δεν ενημερώθηκε αφού κανείς δεν ήταν επιλεγμένος no_limits_imposed: Χωρίς όρια + no_role_assigned: Δεν έχει ανατεθεί ρόλος not_subscribed: Άνευ συνδρομής pending: Εκκρεμεί έγκριση perform_full_suspension: Αναστολή @@ -177,12 +180,7 @@ el: reset: Επαναφορά reset_password: Επαναφορά συνθηματικού resubscribe: Επανεγγραφή - role: Δικαιώματα - roles: - admin: Διαχειριστής - moderator: Συντονιστής - staff: Προσωπικό - user: Χρήστης + role: Ρόλος search: Αναζήτηση search_same_email_domain: Άλλοι χρήστες με τον ίδιο τομέα e-mail search_same_ip: Υπόλοιποι χρήστες με την ίδια διεύθυνση IP @@ -492,6 +490,16 @@ el: unresolved: Άλυτη updated_at: Ενημερωμένη view_profile: Προβολή προφίλ + roles: + add_new: Προσθήκη ρόλου + assigned_users: + one: "%{count} χρήστης" + other: "%{count} χρήστες" + categories: + administration: Διαχείριση + devops: Devops + invites: Προσκλήσεις + delete: Διαγραφή rules: add_new: Προσθήκη κανόνα delete: Διαγραφή @@ -544,9 +552,6 @@ el: deletion: desc_html: Επέτρεψε σε οποιονδήποτε να διαγράψει το λογαριασμό του/της title: Άνοιξε τη διαγραφή λογαριασμού - min_invite_role: - disabled: Κανείς - title: Επέτρεψε προσκλήσεις από registrations_mode: modes: approved: Απαιτείται έγκριση για εγγραφή @@ -556,9 +561,6 @@ el: show_known_fediverse_at_about_page: desc_html: Όταν αντιστραφεί, θα δείχνει τα τουτ από όλο το γνωστό fediverse στην προεπισκόπηση. Διαφορετικά θα δείχνει μόνο τοπικά τουτ. title: Εμφάνιση του γνωστού fediverse στην προεπισκόπηση ροής - show_staff_badge: - desc_html: Δείξε ένα σήμα προσωπικού στη σελίδα ενός χρήστη - title: Δείξε διακριτικό προσωπικού site_description: desc_html: Εισαγωγική παράγραφος στην αρχική σελίδα. Περιέγραψε τι κάνει αυτό τον διακομιστή Mastodon διαφορετικό και ό,τι άλλο ενδιαφέρον. Μπορείς να χρησιμοποιήσεις HTML tags, συγκεκριμένα < a> και < em>. title: Περιγραφή κόμβου @@ -820,15 +822,20 @@ el: public: Δημόσιες ροές thread: Συζητήσεις edit: + add_keyword: Προσθήκη λέξης-κλειδιού + keywords: Λέξεις-κλειδιά title: Ενημέρωση φίλτρου errors: invalid_context: Έδωσες λάθος ή ανύπαρκτο πλαίσιο - invalid_irreversible: Τα μη αντιστρέψιμα φίλτρα δουλεύουν μόνο στα πλαίσια της αρχικής ροής και των ειδοποιήσεων index: + contexts: Φίλτρα σε %{contexts} delete: Διαγραφή empty: Δεν έχεις φίλτρα. + expires_in: Λήγει σε %{distance} + expires_on: Λήγει στις %{date} title: Φίλτρα new: + save: Αποθήκευση νέου φίλτρου title: Πρόσθεσε νέο φίλτρο footer: developers: Ανάπτυξη @@ -935,6 +942,8 @@ el: copy_account_note_text: 'Ο/Η χρήστης μετακόμισε από το %{acct}, ορίστε οι προηγούμενες σημειώσεις σου:' notification_mailer: admin: + report: + subject: "%{name} υπέβαλε μια αναφορά" sign_up: subject: "%{name} έχει εγγραφεί" digest: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 9e1eaaffa8a..e9ed57a3950 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -13,8 +13,8 @@ eo: browse_directory: Esplori profilujo kaj filtri per interesoj browse_local_posts: Vidi vivantan fluon de publikaj mesaĝoj al Mastodon browse_public_posts: Vidi vivantan fluon de publikaj mesaĝoj al Mastodon - contact: Kontakti - contact_missing: Ne elektita + contact: Kontakto + contact_missing: Ne ŝargita contact_unavailable: Ne disponebla continue_to_web: Daŭrigi al la retaplikaĵo discover_users: Malkovri uzantojn @@ -22,7 +22,7 @@ eo: federation_hint_html: Per konto ĉe %{instance}, vi povos sekvi homojn ĉe iu ajn Mastodon nodo kaj preter. get_apps: Provu telefonan aplikaĵon hosted_on: "%{domain} estas nodo de Mastodon" - instance_actor_flash: 'Ĉi tiu konto estas virtuala aganto uzata por reprezenti la servilon mem kaj neniun individuan uzanton. Ĝi estas uzata por celoj de la federaĵo kaj devas ne esti brokita se vi ne volas bloki la tutan servilon, tiuokaze vi devas uzi blokadon de domajno. + instance_actor_flash: 'Ĉi tiu konto estas virtuala agento uzata por reprezenti la servilon mem kaj neniu individua uzanto. Ĝi estas uzata por celoj de la federaĵo kaj devas ne esti brokita se vi ne volas bloki la tutan servilon, en kiu okazo vi devas uzi blokadon de domajno. ' learn_more: Lerni pli @@ -36,14 +36,14 @@ eo: one: mesaĝo other: mesaĝoj status_count_before: Kie skribiĝis - terms: Uzkondiĉoj + terms: Kondiĉoj de la servo unavailable_content: Moderigitaj serviloj unavailable_content_description: domain: Servilo reason: 'Kialo:' rejecting_media_title: Filtritaj aŭdovidaĵoj silenced_title: Silentigitaj serviloj - suspended_title: Haltigitaj serviloj + suspended_title: Suspenditaj serviloj user_count_after: one: uzanto other: uzantoj @@ -56,6 +56,7 @@ eo: one: Sekvanto other: Sekvantoj following: Sekvatoj + instance_actor_flash: Ĉi tiu konto estas virtuala agento uzata por reprezenti la servilon mem kaj neniu individua uzanto. Ĝi estas uzata por celoj de la federaĵo kaj devas ne esti suspendita. joined: Aliĝis je %{date} last_active: laste aktiva link_verified_on: Proprieto de ĉi tiu ligilo estis kontrolita je %{date} @@ -73,10 +74,8 @@ eo: posts_tab_heading: Mesaĝoj posts_with_replies: Mesaĝoj kaj respondoj roles: - admin: Administranto bot: Roboto group: Grupo - moderator: Kontrolanto unavailable: Profilo ne disponebla unfollow: Ne plu sekvi admin: @@ -94,7 +93,6 @@ eo: avatar: Profilbildo by_domain: Domajno change_email: - changed_msg: Konta retadreso sukcese ŝanĝita! current_email: Nuna retadreso label: Ŝanĝi retadreson new_email: Nova retadreso @@ -138,7 +136,7 @@ eo: active: Aktiva all: Ĉio pending: Pritraktata - suspended: Haltigita + suspended: Suspendita title: Moderigado moderation_notes: Notoj de moderigado most_recent_activity: Lasta ago @@ -163,12 +161,6 @@ eo: reset: Restarigi reset_password: Restarigi pasvorton resubscribe: Reaboni - role: Permesoj - roles: - admin: Administranto - moderator: Moderigisto - staff: Teamo - user: Uzanto search: Serĉi search_same_email_domain: Aliaj uzantoj kun la sama retpoŝta domajno search_same_ip: Aliaj uzantoj kun la sama IP @@ -179,14 +171,14 @@ eo: sensitized: markita tikla shared_inbox_url: URL de kunhavigita leterkesto show: - created_reports: Kreitaj raportoj + created_reports: Faritaj raportoj targeted_reports: Raporitaj de alia - silence: Kaŝi + silence: Mutigita silenced: Silentigita statuses: Mesaĝoj subscribe: Aboni suspend: Haltigu - suspended: Haltigita + suspended: Suspendita title: Kontoj unblock_email: Malbloki retpoŝtadresojn unblocked_email_msg: Sukcese malblokis la retpoŝtadreson de %{username} @@ -195,6 +187,7 @@ eo: undo_silenced: Malfari kaŝon undo_suspension: Malfari haltigon unsubscribe: Malaboni + unsuspended_msg: La konto de %{username} estas sukcese reaktivigita username: Uzantnomo view_domain: Vidi la resumon de la domajno warn: Averti @@ -206,7 +199,7 @@ eo: assigned_to_self_report: Atribui Raporton change_email_user: Ŝanĝi retadreson de uzanto confirm_user: Konfermi uzanto - create_account_warning: Krei Averton + create_account_warning: Krei averton create_announcement: Krei Anoncon create_custom_emoji: Krei Propran emoĝion create_domain_allow: Krei Domajnan Permeson @@ -226,6 +219,7 @@ eo: disable_custom_emoji: Malebligi Propran Emoĝion disable_user: Malebligi uzanton enable_custom_emoji: Ebligi Propran Emoĝion + enable_sign_in_token_auth_user: Aktivigi la aŭtentigon de peco per retpoŝto por la uzanto enable_user: Ebligi uzanton memorialize_account: Memorigu Konton promote_user: Promocii Uzanton @@ -276,6 +270,8 @@ eo: reject_user_html: "%{name} malakceptis registriĝon de %{target}" remove_avatar_user_html: "%{name} forigis profilbildon de %{target}" reopen_report_html: "%{name} remalfermis signalon %{target}" + suspend_account_html: "%{name} suspendis la konton de %{target}" + unsuspend_account_html: "%{name} reaktivigis la konton de %{target}" update_announcement_html: "%{name} ĝisdatigis anoncon %{target}" deleted_status: "(forigita mesaĝo)" empty: Neniu protokolo trovita. @@ -361,7 +357,7 @@ eo: severity: desc_html: "Kaŝi igos la mesaĝojn de la konto nevideblaj al tiuj, kiuj ne sekvas tiun. Haltigi forigos ĉiujn enhavojn, aŭdovidaĵojn kaj datumojn de la konto. Uzu Nenio se vi simple volas malakcepti aŭdovidaĵojn." noop: Nenio - silence: Kaŝi + silence: Mutigi suspend: Haltigi title: Nova domajna blokado obfuscate: Malklara domajna nomo @@ -410,6 +406,7 @@ eo: instance_statuses_measure: konservitaj afiŝoj delivery: all: Ĉiuj + unavailable: Nedisponebla delivery_available: Liverado disponeblas empty: Neniuj domajnoj trovitaj. moderation: @@ -475,6 +472,8 @@ eo: one: "%{count} noto" other: "%{count} notoj" action_taken_by: Ago farita de + actions: + other_description_html: Vidu pli da elektebloj por kontroli la agadon de la konto kaj personecigi la komunikadon kun la konto pri kiu raporto. add_to_report: Aldoni pli al raporto are_you_sure: Ĉu vi certas? assign_to_self: Asigni al mi @@ -547,7 +546,7 @@ eo: desc_html: Nomoj de domajnoj, kiujn ĉi tiu servilo renkontis en la federauniverso title: Publikigi liston de malkovritaj serviloj preview_sensitive_media: - desc_html: Antaŭvido de ligiloj en aliaj retejoj montros bildeton eĉ se la aŭdovidaĵo estas markita kiel tikla + desc_html: La antaŭmontroj de ligilo al la aliaj retejoj montros bildeton eĉ se la aŭdovidaĵo estas markita kiel tikla title: Montri tiklajn aŭdovidaĵojn en la antaŭvidoj de OpenGraph profile_directory: desc_html: Permesi al uzantoj esti troveblaj @@ -559,21 +558,15 @@ eo: deletion: desc_html: Permesi al iu ajn forigi propran konton title: Permesi forigi konton - min_invite_role: - disabled: Neniu - title: Permesi invitojn de registrations_mode: modes: approved: Bezonas aprobi por aliĝi none: Neniu povas aliĝi open: Iu povas aliĝi - title: Registrado modo + title: Reĝimo de registriĝo show_known_fediverse_at_about_page: desc_html: Kiam ŝaltita, ĝi montros mesaĝojn de la tuta konata fediverse antaŭvide. Aliokaze, ĝi montros nur lokajn mesaĝojn. - title: Montri konatan fediverse en tempolinia antaŭvido - show_staff_badge: - desc_html: Montri teaman insignon en paĝo de uzanto - title: Montri teaman insignon + title: Inkluzivi frataran enhavon en la neaŭtentigita publika antaŭmontro de templinio site_description: desc_html: Enkonduka alineo en la ĉefpaĝo. Priskribu la unikaĵojn de ĉi tiu nodo de Mastodon, kaj ĉiujn aliajn gravaĵojn. Vi povas uzi HTML-etikedojn, kiel <a> kaj <em>. title: Priskribo de la servilo @@ -585,14 +578,14 @@ eo: title: Mallonga priskribo de la servilo site_terms: desc_html: Vi povas skribi vian propran privatecan politikon, viajn uzkondiĉojn aŭ aliajn leĝaĵojn. Vi povas uzi HTML-etikedojn - title: Propraj uzkondiĉoj + title: Propraj kondiĉoj de la servo site_title: Nomo de la servilo thumbnail: desc_html: Uzata por antaŭvidoj per OpenGraph kaj per API. 1200x630px rekomendita title: Bildeto de la servilo timeline_preview: desc_html: Montri publikan templinion en komenca paĝo - title: Tempolinia antaŭvido + title: Permesi la neaŭtentigitan aliron al la publika templinio title: Retejaj agordoj trends: desc_html: Publike montri antaŭe kontrolitajn kradvortojn, kiuj nune furoras @@ -615,6 +608,7 @@ eo: actions: delete_statuses: "%{name} forigis afiŝojn de %{target}" disable: "%{name} malebligis la konton de %{target}" + suspend: "%{name} suspendis la konton de %{target}" appeal_approved: Apelaciita system_checks: database_schema_check: @@ -846,15 +840,23 @@ eo: public: Publika templinio thread: Konversacioj edit: + add_keyword: Aldoni ĉefvorton + keywords: Ĉefvortoj title: Ŝanĝi filtrilojn errors: invalid_context: Neniu aŭ nevalida kunteksto donita - invalid_irreversible: Nemalfarebla filtrado funkcias nur por hejma aŭ sciiga kuntekstoj index: + contexts: Filtri en %{contexts} delete: Forigi empty: Vi havas neniun filtrilon. + expires_in: Eksvalidiĝi en %{distance} + expires_on: Eksvalidiĝi je %{date} + keywords: + one: "%{count} ĉefvorto" + other: "%{count} ĉefvortoj" title: Filtriloj new: + save: Konservi novan filtrilon title: Aldoni novan filtrilon footer: developers: Programistoj @@ -1010,9 +1012,9 @@ eo: wrong_code: La enmetita kodo estis nevalida! Ĉu la servila tempo kaj la aparata tempo ĝustas? pagination: newer: Pli nova - next: Sekva + next: Antaŭen older: Malpli nova - prev: Antaŭa + prev: Malantaŭen truncate: "…" polls: errors: @@ -1060,13 +1062,15 @@ eo: remote_interaction: favourite: proceed: Konfirmi la stelumon - prompt: 'Vi volas stelumi ĉi tiun mesaĝon:' + prompt: 'Vi volas aldoni ĉi tiun mesaĝon al viaj preferaĵoj:' reblog: proceed: Konfirmi la diskonigon prompt: 'Vi volas diskonigi ĉi tiun mesaĝon:' reply: proceed: Konfirmi la respondon prompt: 'Vi volas respondi al ĉi tiu mesaĝo:' + rss: + content_warning: 'Averto pri enhavo:' scheduled_statuses: over_daily_limit: Vi transpasis la limigon al %{limit} samtage planitaj mesaĝoj over_total_limit: Vi transpasis la limigon al %{limit} planitaj mesaĝoj @@ -1125,7 +1129,7 @@ eo: export: Eksporti datumojn featured_tags: Elstarigitaj kradvortoj import: Importi - import_and_export: Alporto kaj elporto + import_and_export: Enporti kaj elporti migrate: Konta migrado notifications: Sciigoj preferences: Preferoj @@ -1146,7 +1150,7 @@ eo: one: "%{count} video" other: "%{count} videoj" boosted_from_html: Diskonigita de %{acct_link} - content_warning: 'Enhava averto: %{warning}' + content_warning: 'Averto de la enhavo: %{warning}' disallowed_hashtags: one: 'enhavas malpermesitan kradvorton: %{tags}' other: 'enhavis malpermesitan kradvorton: %{tags}' @@ -1181,10 +1185,11 @@ eo: statuses_cleanup: enabled: Aŭtomate forigi malnovajn postojn exceptions: Esceptoj - ignore_favs: Ignori ŝatatajn + ignore_favs: Ignori la preferaĵojn ignore_reblogs: Ignori akcelojn keep_direct: Konservi rektajn mesaĝojn keep_direct_hint: Ne forigos viajn rektajn mesagôjn + keep_self_fav_hint: Ne forviŝi viajn proprajn afiŝojn, se vi aldonis ilin al viaj preferaĵoj min_age: '1209600': 2 semajnoj '15778476': 6 monatoj @@ -1238,12 +1243,12 @@ eo: disable: Via konto %{acct} estas frostigita none: Averto por %{acct} silence: Via konto %{acct} estas limigita - suspend: Via konto %{acct} estas haltigita + suspend: Via konto %{acct} estas suspendita title: disable: Konto frostigita none: Averto silence: Konto limigita - suspend: Konto haltigita + suspend: Konto suspendita welcome: edit_profile_action: Agordi profilon edit_profile_step: Vi povas proprigi vian profilon per alŝuto de profilbildo, fonbildo, ŝanĝo de via afiŝita nomo kaj pli. Se vi ŝatus kontroli novajn sekvantojn antaŭ ol ili rajtas sekvi vin, vi povas ŝlosi vian konton. @@ -1255,9 +1260,9 @@ eo: review_preferences_action: Ŝanĝi preferojn review_preferences_step: Estu certa ke vi agordis viajn preferojn, kiel kiujn retmesaĝojn vi ŝatus ricevi, aŭ kiun dekomencan privatecan nivelon vi ŝatus ke viaj mesaĝoj havu. Se tio ne ĝenas vin, vi povas ebligi aŭtomatan ekigon de GIF-oj. subject: Bonvenon en Mastodon - tip_federated_timeline: La federata templinio estas rekta vido de la reto de Mastodon. Sed ĝi inkluzivas nur personojn kiujn via najbaroj abonas, do ĝi ne estas kompleta. + tip_federated_timeline: La fratara templinio estas rekta montro de la reto de Mastodon. Sed ĝi inkluzivas nur personojn kiujn viaj najbaroj abonas, do ĝi ne estas kompleta. tip_following: Vi dekomence sekvas la administrantojn de via servilo. Por trovi pli da interesaj homoj, rigardu la lokan kaj frataran templiniojn. - tip_local_timeline: La loka templinio estas antaŭvido de la homoj en %{instance}. Ĉi tiuj estas viaj apudaj najbaroj! + tip_local_timeline: La loka templinio estas rekta montro de personoj ĉe %{instance}. Ĉi tiuj estas viaj senperaj najbaroj! tip_mobile_webapp: Se via telefona retumilo proponas al vi aldoni Mastodon al via hejma ekrano, vi povas ricevi puŝsciigojn. Tio multmaniere funkcias kiel operaciuma aplikaĵo! tips: Konsiloj title: Bonvenon, %{name}! diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 79ae68bf45b..c4d9ee969b5 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -83,10 +83,8 @@ es-AR: posts_tab_heading: Mensajes posts_with_replies: Mensajes y respuestas roles: - admin: Administrador bot: Bot group: Grupo - moderator: Moderador unavailable: Perfil no disponible unfollow: Dejar de seguir admin: @@ -105,12 +103,17 @@ es-AR: avatar: Avatar by_domain: Dominio change_email: - changed_msg: "¡Correo electrónico de cuenta cambiado exitosamente!" + changed_msg: "¡Correo electrónico cambiado exitosamente!" current_email: Correo electrónico actual label: Cambiar correo electrónico new_email: Nuevo correo electrónico submit: Cambiar correo electrónico title: Cambiar correo electrónico para %{username} + change_role: + changed_msg: "¡Rol cambiado exitosamente!" + label: Cambiar rol + no_role: Sin rol + title: Cambiar rol para %{username} confirm: Confirmar confirmed: Confirmado confirming: Confirmación @@ -154,6 +157,7 @@ es-AR: active: Activas all: Todas pending: Pendientes + silenced: Limitada suspended: Suspendidas title: Moderación moderation_notes: Notas de moderación @@ -161,6 +165,7 @@ es-AR: most_recent_ip: Dirección IP más reciente no_account_selected: No se cambió ninguna cuenta ya que ninguna fue seleccionada no_limits_imposed: Sin límites impuestos + no_role_assigned: Sin rol asignado not_subscribed: No suscripto pending: Revisión pendiente perform_full_suspension: Suspender @@ -187,12 +192,7 @@ es-AR: reset: Restablecer reset_password: Cambiar contraseña resubscribe: Resuscribir - role: Permisos - roles: - admin: Administrador - moderator: Moderador - staff: Administración - user: Usuario + role: Rol search: Buscar search_same_email_domain: Otros usuarios con el mismo dominio de correo electrónico search_same_ip: Otros usuarios con la misma dirección IP @@ -649,6 +649,67 @@ es-AR: unresolved: No resueltas updated_at: Actualizadas view_profile: Ver perfil + roles: + add_new: Agregar rol + assigned_users: + one: "%{count} usuario" + other: "%{count} usuarios" + categories: + administration: Administración + devops: Operadores de desarrollo + invites: Invitaciones + moderation: Moderación + special: Especial + delete: Eliminar + description_html: Con roles de usuario, podés personalizar las funciones y áreas de Mastodon a las que pueden acceder tus usuarios. + edit: Editar rol de «%{name}» + everyone: Permisos predeterminados + everyone_full_description_html: Este es el rol base que afecta a todos los usuarios, incluso aquellos sin un rol asignado. Todos los otros roles heredan permisos de él. + permissions_count: + one: "%{count} permiso" + other: "%{count} permisos" + privileges: + administrator: Administrador + administrator_description: Los usuarios con este permiso saltarán todos los permisos + delete_user_data: Eliminar datos del usuario + delete_user_data_description: Permite a los usuarios eliminar los datos de otros usuarios sin demora + invite_users: Invitar usuarios + invite_users_description: Permite a los usuarios invitar a nuevas personas al servidor + manage_announcements: Administrar anuncios + manage_announcements_description: Permite a los usuarios administrar anuncios en el servidor + manage_appeals: Administrar apelaciones + manage_appeals_description: Permite a los usuarios revisar apelaciones contra acciones de moderación + manage_blocks: Administrar bloqueos + manage_blocks_description: Permite a los usuarios bloquear proveedores de correo electrónico y direcciones IP + manage_custom_emojis: Administrar emojis personalizados + manage_custom_emojis_description: Permite a los usuarios administrar emojis personalizados en el servidor + manage_federation: Administrar Federación + manage_federation_description: Permite a los usuarios bloquear o permitir la federación con otros dominios y controlar las entregas + manage_invites: Administrar invitaciones + manage_invites_description: Permite a los usuarios navegar y desactivar los enlaces de invitación + manage_reports: Administrar denuncias + manage_reports_description: Permite a los usuarios revisar denuncias y realizar acciones de moderación contra ellas + manage_roles: Administrar roles + manage_roles_description: Permite a los usuarios administrar y asignar roles por debajo de los suyos + manage_rules: Administrar reglas + manage_rules_description: Permite a los usuarios cambiar las reglas del servidor + manage_settings: Administrar configuración + manage_settings_description: Permite a los usuarios cambiar la configuración del sitio + manage_taxonomies: Administrar taxonomías + manage_taxonomies_description: Permite a los usuarios revisar el contenido de tendencia y actualizar la configuración de las etiquetas + manage_user_access: Administrar acceso de usuario + manage_user_access_description: Permite a los usuarios deshabilitar la autenticación de dos factores de otros usuarios, cambiar su dirección de correo electrónico y restablecer su contraseña + manage_users: Administrar usuarios + manage_users_description: Permite a los usuarios ver los detalles de otros usuarios y realizar acciones de moderación contra ellos + manage_webhooks: Administrar Webhooks + manage_webhooks_description: Permite a los usuarios configurar webhooks para eventos administrativos + view_audit_log: Ver auditoría + view_audit_log_description: Permite a los usuarios ver un historial de acciones administrativas en el servidor + view_dashboard: Ver panel + view_dashboard_description: Permite a los usuarios acceder al panel de control y varias métricas + view_devops: Operadores de desarrollo + view_devops_description: Permite a los usuarios acceder a los paneles de Sidekiq y pgHero + title: Roles rules: add_new: Agregar regla delete: Eliminar @@ -701,9 +762,6 @@ es-AR: deletion: desc_html: Permitir que cualquiera elimine su cuenta title: Abrir eliminación de cuenta - min_invite_role: - disabled: Nadie - title: Permitir invitaciones de require_invite_text: desc_html: Cuando los registros requieran aprobación manual, hacé que la solicitud de invitación "¿Por qué querés unirte?" sea obligatoria, en vez de opcional title: Requerir que los nuevos usuarios llenen un texto de solicitud de invitación @@ -716,9 +774,6 @@ es-AR: show_known_fediverse_at_about_page: desc_html: Cuando está deshabilitado, restringe la línea temporal pública enlazada desde la página de inicio para mostrar sólo contenido local title: Incluir contenido federado en la página de línea temporal pública no autenticada - show_staff_badge: - desc_html: Mostrar una insignia de administración en la página de un usuario - title: Mostrar insignia de administración site_description: desc_html: Párrafo introductorio en la API. Describe qué hace especial a este servidor de Mastodon y todo lo demás que sea importante. Podés usar etiquetas HTML, en particular <a> y <em>. title: Descripción del servidor @@ -1124,15 +1179,24 @@ es-AR: public: Líneas temporales públicas thread: Conversaciones edit: + add_keyword: Agregar palabra clave + keywords: Palabras clave title: Editar filtro errors: + deprecated_api_multiple_keywords: Estos parámetros no se pueden cambiar de esta aplicación porque se aplican a más de una palabra clave de filtro. Usá una aplicación más reciente o la interface web. invalid_context: Se suministró un contexto no válido o vacío - invalid_irreversible: El filtrado irreversible sólo funciona con los contextos de "Principal" o de "Notificaciones" index: + contexts: Filtros en %{contexts} delete: Eliminar empty: No tenés filtros. + expires_in: Caduca en %{distance} + expires_on: Caduca en %{date} + keywords: + one: "%{count} palabra clave" + other: "%{count} palabras clave" title: Filtros new: + save: Guardar nuevo filtro title: Agregar nuevo filtro footer: developers: Desarrolladores @@ -1251,6 +1315,8 @@ es-AR: copy_account_note_text: 'Este usuario se mudó desde %{acct}, acá están tus notas previas sobre él/ella:' notification_mailer: admin: + report: + subject: "%{name} envió una denuncia" sign_up: subject: Se registró %{name} digest: diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index f57fb960156..7ba46a89c30 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -83,10 +83,8 @@ es-MX: posts_tab_heading: Toots posts_with_replies: Toots con respuestas roles: - admin: Administrador bot: Bot group: Grupo - moderator: Moderador unavailable: Perfil no disponible unfollow: Dejar de seguir admin: @@ -105,7 +103,6 @@ es-MX: avatar: Foto de perfil by_domain: Dominio change_email: - changed_msg: "¡El correo electrónico se ha actualizado correctamente!" current_email: Correo electrónico actual label: Cambiar el correo electrónico new_email: Nuevo correo electrónico @@ -187,12 +184,6 @@ es-MX: reset: Reiniciar reset_password: Reiniciar contraseña resubscribe: Re-suscribir - role: Permisos - roles: - admin: Administrador - moderator: Moderador - staff: Personal - user: Usuario search: Buscar search_same_email_domain: Otros usuarios con el mismo dominio de correo search_same_ip: Otros usuarios con la misma IP @@ -701,9 +692,6 @@ es-MX: deletion: desc_html: Permite a cualquiera a eliminar su cuenta title: Eliminación de cuenta abierta - min_invite_role: - disabled: Nadie - title: Permitir invitaciones de require_invite_text: desc_html: Cuando los registros requieren aprobación manual, haga obligatorio en la invitaciones el campo "¿Por qué quieres unirte?" en lugar de opcional title: Requiere a los nuevos usuarios rellenar un texto de solicitud de invitación @@ -716,9 +704,6 @@ es-MX: show_known_fediverse_at_about_page: desc_html: Cuando esté activado, se mostrarán toots de todo el fediverso conocido en la vista previa. En otro caso, se mostrarán solamente toots locales. title: Mostrar fediverso conocido en la vista previa de la historia - show_staff_badge: - desc_html: Mostrar un parche de staff en la página de un usuario - title: Mostrar parche de staff site_description: desc_html: Párrafo introductorio en la portada y en meta tags. Puedes usar tags HTML, en particular <a> y <em>. title: Descripción de instancia @@ -852,6 +837,26 @@ es-MX: edit_preset: Editar aviso predeterminado empty: Aún no has definido ningún preajuste de advertencia. title: Editar configuración predeterminada de avisos + webhooks: + add_new: Añadir endpoint + delete: Eliminar + description_html: Un webhook permite a Mastodon enviar notificaciones en tiempo real sobre los eventos elegidos a tu propia aplicación, para que tu aplicación pueda lanzar reacciones automáticamente. + disable: Deshabilitar + disabled: Deshabilitado + edit: Editar endpoint + empty: Aún no tienes ningún endpoint de webhook configurado. + enable: Habilitar + enabled: Activo + enabled_events: + one: 1 evento habilitado + other: "%{count} eventos habilitados" + events: Eventos + new: Nuevo webhook + rotate_secret: Rotar secreto + secret: Firmando secreto + status: Estado + title: Webhooks + webhook: Webhook admin_mailer: new_appeal: actions: @@ -1104,15 +1109,24 @@ es-MX: public: Timeline público thread: Conversaciones edit: + add_keyword: Añadir palabra clave + keywords: Palabras clave title: Editar filtro errors: + deprecated_api_multiple_keywords: Estos parámetros no se pueden cambiar desde esta aplicación porque se aplican a más de una palabra clave de filtro. Utilice una aplicación más reciente o la interfaz web. invalid_context: Se suminstró un contexto inválido o vacío - invalid_irreversible: El filtrado irreversible solo funciona con los contextos propios o de notificaciones index: + contexts: Filtros en %{contexts} delete: Borrar empty: No tienes filtros. + expires_in: Caduca en %{distance} + expires_on: Expira el %{date} + keywords: + one: "%{count} palabra clave" + other: "%{count} palabras clave" title: Filtros new: + save: Guardar nuevo filtro title: Añadir un nuevo filtro footer: developers: Desarrolladores @@ -1231,6 +1245,8 @@ es-MX: copy_account_note_text: 'Este usuario se mudó desde %{acct}, aquí estaban tus notas anteriores sobre él:' notification_mailer: admin: + report: + subject: "%{name} envió un informe" sign_up: subject: "%{name} se registró" digest: diff --git a/config/locales/es.yml b/config/locales/es.yml index 96d985f530a..568ad46d914 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -83,10 +83,8 @@ es: posts_tab_heading: Publicaciones posts_with_replies: Publicaciones y respuestas roles: - admin: Administrador bot: Bot group: Grupo - moderator: Moderador unavailable: Perfil no disponible unfollow: Dejar de seguir admin: @@ -105,12 +103,17 @@ es: avatar: Avatar by_domain: Dominio change_email: - changed_msg: "¡El correo electrónico se ha actualizado correctamente!" + changed_msg: "¡Email cambiado con éxito!" current_email: Correo electrónico actual label: Cambiar el correo electrónico new_email: Nuevo correo electrónico submit: Cambiar el correo electrónico title: Cambiar el correo electrónico de %{username} + change_role: + changed_msg: "¡Rol cambiado con éxito!" + label: Cambiar rol + no_role: Sin rol + title: Cambiar rol para %{username} confirm: Confirmar confirmed: Confirmado confirming: Confirmando @@ -154,6 +157,7 @@ es: active: Activo all: Todos pending: Pendiente + silenced: Limitado suspended: Suspendidos title: Moderación moderation_notes: Notas de moderación @@ -161,6 +165,7 @@ es: most_recent_ip: IP más reciente no_account_selected: Ninguna cuenta se cambió como ninguna fue seleccionada no_limits_imposed: Sin límites impuestos + no_role_assigned: Ningún rol asignado not_subscribed: No se está suscrito pending: Revisión pendiente perform_full_suspension: Suspender @@ -187,12 +192,7 @@ es: reset: Reiniciar reset_password: Reiniciar contraseña resubscribe: Re-suscribir - role: Permisos - roles: - admin: Administrador - moderator: Moderador - staff: Personal - user: Usuario + role: Rol search: Buscar search_same_email_domain: Otros usuarios con el mismo dominio de correo search_same_ip: Otros usuarios con la misma IP @@ -649,6 +649,67 @@ es: unresolved: No resuelto updated_at: Actualizado view_profile: Ver perfil + roles: + add_new: Añadir rol + assigned_users: + one: "%{count} usuario" + other: "%{count} usuarios" + categories: + administration: Administración + devops: DevOps + invites: Invitaciones + moderation: Moderación + special: Especial + delete: Eliminar + description_html: Con roles de usuario, puede personalizar las funciones y áreas de Mastodon a las que pueden acceder sus usuarios. + edit: Editar rol '%{name}' + everyone: Permisos por defecto + everyone_full_description_html: Este es el rol base que afecta a todos los usuarios, incluso aquellos sin un rol asignado. Todos los otros roles heredan permisos de él. + permissions_count: + one: "%{count} permiso" + other: "%{count} permisos" + privileges: + administrator: Administrador + administrator_description: Los usuarios con este permiso saltarán todos los permisos + delete_user_data: Borrar Datos de Usuario + delete_user_data_description: Permite a los usuarios eliminar los datos de otros usuarios sin demora + invite_users: Invitar usuarios + invite_users_description: Permite a los usuarios invitar a nuevas personas al servidor + manage_announcements: Administrar Anuncios + manage_announcements_description: Permite a los usuarios gestionar anuncios en el servidor + manage_appeals: Administrar Apelaciones + manage_appeals_description: Permite a los usuarios revisar apelaciones contra acciones de moderación + manage_blocks: Administrar Bloqueos + manage_blocks_description: Permite a los usuarios bloquear los proveedores de e-mail y las direcciones IP + manage_custom_emojis: Administrar Emojis Personalizados + manage_custom_emojis_description: Permite a los usuarios gestionar emojis personalizados en el servidor + manage_federation: Administrar Federación + manage_federation_description: Permite a los usuarios bloquear o permitir la federación con otros dominios, y controlar la entregabilidad + manage_invites: Administrar Invitaciones + manage_invites_description: Permite a los usuarios navegar y desactivar los enlaces de invitación + manage_reports: Administrar Informes + manage_reports_description: Permite a los usuarios revisar informes y realizar acciones de moderación basadas en ellos + manage_roles: Administrar Roles + manage_roles_description: Permite a los usuarios administrar y asignar roles por debajo de los suyos + manage_rules: Gestionar Reglas + manage_rules_description: Permite a los usuarios cambiar las reglas del servidor + manage_settings: Administrar Ajustes + manage_settings_description: Permite a los usuarios cambiar la configuración del sitio + manage_taxonomies: Administrar Taxonomías + manage_taxonomies_description: Permite a los usuarios revisar el contenido en tendencia y actualizar la configuración de las etiquetas + manage_user_access: Administrar Acceso de Usuarios + manage_user_access_description: Permite a los usuarios desactivar la autenticación de dos factores de otros usuarios, cambiar su dirección de correo electrónico y restablecer su contraseña + manage_users: Administrar Usuarios + manage_users_description: Permite a los usuarios ver los detalles de otros usuarios y realizar acciones de moderación contra ellos + manage_webhooks: Administrar Webhooks + manage_webhooks_description: Permite a los usuarios configurar webhooks para eventos administrativos + view_audit_log: Ver Registro de Auditoría + view_audit_log_description: Permite a los usuarios ver un historial de acciones administrativas en el servidor + view_dashboard: Ver Panel de Control + view_dashboard_description: Permite a los usuarios acceder al panel de control y varias métricas + view_devops: DevOps + view_devops_description: Permite a los usuarios acceder a los paneles de control Sidekiq y pgHero + title: Roles rules: add_new: Añadir norma delete: Eliminar @@ -701,9 +762,6 @@ es: deletion: desc_html: Permite a cualquiera a eliminar su cuenta title: Eliminación de cuenta abierta - min_invite_role: - disabled: Nadie - title: Permitir invitaciones de require_invite_text: desc_html: Cuando los registros requieren aprobación manual, haga obligatorio en la invitaciones el campo "¿Por qué quieres unirte?" en lugar de opcional title: Requiere a los nuevos usuarios rellenar un texto de solicitud de invitación @@ -716,9 +774,6 @@ es: show_known_fediverse_at_about_page: desc_html: Cuando esté desactivado, se mostrarán solamente publicaciones locales en la línea temporal pública title: Incluye contenido federado en la página de línea de tiempo pública no autenticada - show_staff_badge: - desc_html: Mostrar un parche de staff en la página de un usuario - title: Mostrar parche de staff site_description: desc_html: Párrafo introductorio en la portada y en meta tags. Puedes usar tags HTML, en particular <a> y <em>. title: Descripción de instancia @@ -1124,15 +1179,24 @@ es: public: Líneas de tiempo públicas thread: Conversaciones edit: + add_keyword: Añadir palabra clave + keywords: Palabras clave title: Editar filtro errors: + deprecated_api_multiple_keywords: Estos parámetros no se pueden cambiar desde esta aplicación porque se aplican a más de una palabra clave de filtro. Utilice una aplicación más reciente o la interfaz web. invalid_context: Se suminstró un contexto inválido o vacío - invalid_irreversible: El filtrado irreversible solo funciona con los contextos propios o de notificaciones index: + contexts: Filtros en %{contexts} delete: Borrar empty: No tienes filtros. + expires_in: Caduca en %{distance} + expires_on: Expira el %{date} + keywords: + one: "%{count} palabra clave" + other: "%{count} palabras clave" title: Filtros new: + save: Guardar nuevo filtro title: Añadir nuevo filtro footer: developers: Desarrolladores @@ -1251,6 +1315,8 @@ es: copy_account_note_text: 'Este usuario se mudó desde %{acct}, aquí estaban tus notas anteriores sobre él:' notification_mailer: admin: + report: + subject: "%{name} envió un informe" sign_up: subject: "%{name} se registró" digest: diff --git a/config/locales/et.yml b/config/locales/et.yml index a551ab42459..6aab7a219e4 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -75,10 +75,8 @@ et: posts_tab_heading: Postitused posts_with_replies: Postitused ja vastused roles: - admin: Administraator bot: Robot group: Grupp - moderator: Moderaator unavailable: Profiil pole saadaval unfollow: Lõpeta jälgimine admin: @@ -96,7 +94,6 @@ et: avatar: Profiilipilt by_domain: Domeen change_email: - changed_msg: Konto e-postiaadress edukalt muudetud! current_email: Praegune e-postiaadress label: Muuda e-posti aadressi new_email: Uus е-posti aadress @@ -160,12 +157,6 @@ et: reset: Lähtesta reset_password: Lähtesta salasõna resubscribe: Telli taas - role: Õigused - roles: - admin: Administraator - moderator: Moderaator - staff: Personal - user: Kasutaja search: Otsi search_same_email_domain: Muud kasutajad sama e-posti domeeniga search_same_ip: Teised kasutajad, kellel on sama IP @@ -443,9 +434,6 @@ et: deletion: desc_html: Luba kasutajatel oma konto kustutada title: Ava kontode kustutamine - min_invite_role: - disabled: Mitte keegi - title: Luba kutseid registrations_mode: modes: approved: Kinnitus vajalik konto loomisel @@ -455,9 +443,6 @@ et: show_known_fediverse_at_about_page: desc_html: Kui lubatud, näitab kõiki teatud fediversumi tuututusi. Vastasel juhul näidatakse ainult kohalike tuututusi. title: Näita teatud fediversumit ajajoone eelvaates - show_staff_badge: - desc_html: Näita personalimärki kasutaja profiilil - title: Näita personalimärki site_description: desc_html: Sissejuhatuslik lõik API kohta. Kirjelda, mis teeb selle Mastodoni serveri eriliseks ja ka muud tähtsat. Te saate kasutada HTMLi silte, peamiselt <a> ja <em>. title: Serveri kirjeldus @@ -683,7 +668,6 @@ et: title: Muuda filtrit errors: invalid_context: Puudulik või vale kontekst - invalid_irreversible: Taastamatu filter töötab ainult kodu või teavituste kontekstis index: delete: Kustuta empty: Teil pole filtreid. diff --git a/config/locales/eu.yml b/config/locales/eu.yml index a71cd186d1e..3202b9b9c02 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -80,10 +80,8 @@ eu: posts_tab_heading: Bidalketa posts_with_replies: Bidalketak eta erantzunak roles: - admin: Administratzailea bot: Bot-a group: Taldea - moderator: Moderatzailea unavailable: Profila ez dago eskuragarri unfollow: Utzi jarraitzeari admin: @@ -102,7 +100,6 @@ eu: avatar: Abatarra by_domain: Domeinua change_email: - changed_msg: e-mail kontua ongi aldatu da! current_email: Uneko e-mail helbidea label: Aldatu e-mail helbidea new_email: E-mail berria @@ -184,12 +181,6 @@ eu: reset: Berrezarri reset_password: Berrezarri pasahitza resubscribe: Berriro harpidetu - role: Baimenak - roles: - admin: Administratzailea - moderator: Moderatzailea - staff: Langilea - user: Erabiltzailea search: Bilatu search_same_email_domain: E-mail domeinu bera duten beste erabiltzailean search_same_ip: IP bera duten beste erabiltzaileak @@ -674,9 +665,6 @@ eu: deletion: desc_html: Baimendu edonori bere kontua ezabatzea title: Ireki kontu ezabaketa - min_invite_role: - disabled: Inor ez - title: Baimendu hauen gobidapenak require_invite_text: desc_html: Izen emateak eskuz onartu behar direnean, "Zergatik elkartu nahi duzu?" testu sarrera derrigorrezko bezala ezarri, ez hautazko title: Eskatu erabiltzaile berriei bat egiteko arrazoia sartzeko @@ -689,9 +677,6 @@ eu: show_known_fediverse_at_about_page: desc_html: Txandakatzean, fedibertso ezagun osoko tootak bistaratuko ditu aurrebistan. Bestela, toot lokalak besterik ez ditu erakutsiko title: Erakutsi fedibertsu ezagun osoko denbora-lerroa aurrebistan - show_staff_badge: - desc_html: Erakutsi langile banda erabiltzailearen orrian - title: Erakutsi langile banda site_description: desc_html: Azaleko orrian agertuko den sarrera paragrafoa. Azaldu zerk egiten duen berezi Mastodon zerbitzari hau eta garrantzizko beste edozer. HTML etiketak erabili ditzakezu, zehazki <a> eta <em>. title: Zerbitzariaren deskripzioa @@ -1020,7 +1005,6 @@ eu: title: Editatu iragazkia errors: invalid_context: Testuinguru baliogabe edo hutsa eman da - invalid_irreversible: Behin betiko iragazketa hasiera edo jakinarazpenen testuinguruan besterik ez dabil index: delete: Ezabatu empty: Ez duzu iragazkirik. diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 93b766859a7..d6acaf5341c 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -82,10 +82,8 @@ fa: posts_tab_heading: فرسته‌ها posts_with_replies: فرسته‌ها و پاسخ‌ها roles: - admin: مدیر bot: ربات group: گروه - moderator: ناظر unavailable: نمایهٔ ناموجود unfollow: پایان پیگیری admin: @@ -104,7 +102,6 @@ fa: avatar: تصویر نمایه by_domain: دامین change_email: - changed_msg: نشانی رایانامهٔ این حساب با موفقیت تغییر کرد! current_email: رایانامهٔ کنونی label: تغییر رایانامه new_email: رایانامهٔ جدید @@ -183,12 +180,6 @@ fa: reset: بازنشانی reset_password: بازنشانی رمز resubscribe: اشتراک دوباره - role: اجازه‌ها - roles: - admin: مدیر - moderator: ناظر - staff: کارمند - user: کاربر search: جستجو search_same_email_domain: دیگر کاربران با دامنهٔ رایانامهٔ یکسان search_same_ip: دیگر کاربران با IP یکسان @@ -654,9 +645,6 @@ fa: deletion: desc_html: هر کسی بتواند حساب خود را پاک کند title: فعال‌سازی پاک‌کردن حساب - min_invite_role: - disabled: هیچ کس - title: اجازهٔ دعوت به require_invite_text: desc_html: زمانی که نام‌نویسی نیازمند تایید دستی است، متن «چرا می‌خواهید عضو شود؟» بخش درخواست دعوت را به جای اختیاری، اجباری کنید title: نیازمند پر کردن متن درخواست دعوت توسط کاربران جدید @@ -669,9 +657,6 @@ fa: show_known_fediverse_at_about_page: desc_html: اگر از کار انداخته شود، خط‌زمانی همگانی را محدود می‌کند؛ تا فقط محتوای محلّی را نمایش دهد. title: نمایش سرورهای دیگر در پیش‌نمایش این سرور - show_staff_badge: - desc_html: نمایش علامت همکار روی صفحهٔ کاربر - title: نمایش علامت همکار site_description: desc_html: معرفی کوتاهی دربارهٔ رابط برنامه‌نویسی کاربردی. دربارهٔ این که چه چیزی دربارهٔ این کارساز ماستودون ویژه است یا هر چیز مهم دیگری بنویسید. می‌توانید HTML بنویسید، به‌ویژه <a> و <em>. title: دربارهٔ این سرور @@ -983,7 +968,6 @@ fa: title: ویرایش پالایه errors: invalid_context: زمینه‌ای موجود نیست یا نامعتبر است - invalid_irreversible: پالایش برگشت‌ناپذیر تنها در زمینهٔ خانه یا آگاهی‌ها کار می‌کنند index: delete: پاک‌کردن empty: هیچ پالایه‌ای ندارید. diff --git a/config/locales/fi.yml b/config/locales/fi.yml index ff369f2fe78..bbc44d644f1 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -82,10 +82,8 @@ fi: posts_tab_heading: Julkaisut posts_with_replies: Julkaisut ja vastaukset roles: - admin: Ylläpitäjä bot: Botti group: Ryhmä - moderator: Moderaattori unavailable: Profiili ei saatavilla unfollow: Lopeta seuraaminen admin: @@ -104,7 +102,6 @@ fi: avatar: Profiilikuva by_domain: Verkkotunnus change_email: - changed_msg: Tilin sähköposti vaihdettu onnistuneesti! current_email: Nykyinen sähköposti label: Vaihda sähköposti new_email: Uusi sähköposti @@ -183,12 +180,6 @@ fi: reset: Palauta reset_password: Palauta salasana resubscribe: Tilaa uudelleen - role: Oikeudet - roles: - admin: Ylläpitäjä - moderator: Moderaattori - staff: Henkilöstö - user: Käyttäjä search: Hae search_same_email_domain: Muut käyttäjät, joilla on sama sähköpostiverkkotunnus search_same_ip: Muut käyttäjät samalla IP-osoitteella @@ -657,9 +648,6 @@ fi: deletion: desc_html: Salli jokaisen poistaa oma tilinsä title: Avoin tilin poisto - min_invite_role: - disabled: Ei kukaan - title: Salli kutsut käyttäjältä require_invite_text: desc_html: Kun rekisteröinnit edellyttävät manuaalista hyväksyntää, tee “Miksi haluat liittyä?” teksti pakolliseksi eikä valinnaiseksi title: Vaadi uusia käyttäjiä antamaan liittymisen syy @@ -672,9 +660,6 @@ fi: show_known_fediverse_at_about_page: desc_html: Kun tämä on valittu, esikatselussa näytetään tuuttaukset kaikkialta tunnetusta fediversumista. Muutoin näytetään vain paikalliset tuuttaukset. title: Näytä aikajanan esikatselussa koko tunnettu fediversumi - show_staff_badge: - desc_html: Näytä käyttäjäsivulla henkilöstömerkki - title: Näytä henkilöstömerkki site_description: desc_html: Esittelykappale etusivulla ja metatunnisteissa. HTML-tagit käytössä, tärkeimmät ovat <a> ja <em>. title: Instanssin kuvaus @@ -1048,7 +1033,6 @@ fi: title: Muokkaa suodatinta errors: invalid_context: Ei sisältöä tai se on virheellinen - invalid_irreversible: Sen sijaan suodatus toimii vain kodin tai ilmoitusten yhteydessä index: delete: Poista empty: Sinulla ei ole suodattimia. diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 5f74972f951..6246836ae89 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -83,10 +83,8 @@ fr: posts_tab_heading: Messages posts_with_replies: Messages et réponses roles: - admin: Admin bot: Robot group: Groupe - moderator: Modérateur·trice unavailable: Profil non disponible unfollow: Ne plus suivre admin: @@ -105,7 +103,6 @@ fr: avatar: Avatar by_domain: Domaine change_email: - changed_msg: Courriel du compte modifié avec succès ! current_email: Courriel actuel label: Modifier le courriel new_email: Nouveau courriel @@ -187,12 +184,6 @@ fr: reset: Réinitialiser reset_password: Réinitialiser le mot de passe resubscribe: Se réabonner - role: Permissions - roles: - admin: Administrateur - moderator: Modérateur - staff: Équipe - user: Utilisateur search: Rechercher search_same_email_domain: Autres utilisateurs·trices avec le même domaine de courriel search_same_ip: Autres utilisateur·rice·s avec la même IP @@ -701,9 +692,6 @@ fr: deletion: desc_html: Permettre à tou·te·s les utilisateur·rice·s de supprimer leur compte title: Autoriser les suppressions de compte - min_invite_role: - disabled: Personne - title: Autoriser les invitations par require_invite_text: desc_html: Lorsque les enregistrements nécessitent une approbation manuelle, rendre le texte de l’invitation "Pourquoi voulez-vous vous inscrire ?" obligatoire plutôt que facultatif title: Exiger que les nouveaux utilisateurs remplissent un texte de demande d’invitation @@ -716,9 +704,6 @@ fr: show_known_fediverse_at_about_page: desc_html: Lorsque désactivée, restreint le fil public accessible via la page d’accueil de l’instance pour ne montrer que le contenu local title: Inclure le contenu fédéré sur la page de fil public sans authentification - show_staff_badge: - desc_html: Montrer un badge de responsable sur une page utilisateur·rice - title: Montrer un badge de responsable site_description: desc_html: Paragraphe introductif sur l'API. Décrivez les particularités de ce serveur Mastodon et précisez toute autre chose qui vous semble importante. Vous pouvez utiliser des balises HTML, en particulier <a> et <em>. title: Description du serveur @@ -1123,15 +1108,24 @@ fr: public: Fils publics thread: Discussions edit: + add_keyword: Ajouter un mot-clé + keywords: Mots-clés title: Éditer le filtre errors: + deprecated_api_multiple_keywords: Ces paramètres ne peuvent pas être modifiés depuis cette application, car ils s'appliquent à plus d'un filtre de mot-clé. Utilisez une application plus récente ou l'interface web. invalid_context: Contexte invalide ou insuffisant - invalid_irreversible: Le filtrage irréversible ne fonctionne que pour l’accueil et les notifications index: + contexts: Filtres dans %{contexts} delete: Supprimer empty: Vous n'avez aucun filtre. + expires_in: Expire dans %{distance} + expires_on: Expire le %{date} + keywords: + one: "%{count} mot-clé" + other: "%{count} mots-clés" title: Filtres new: + save: Enregistrer le nouveau filtre title: Ajouter un nouveau filtre footer: developers: Développeurs @@ -1250,6 +1244,8 @@ fr: copy_account_note_text: 'Cet·te utilisateur·rice est parti·e de %{acct}, voici vos notes précédentes à son sujet :' notification_mailer: admin: + report: + subject: "%{name} a soumis un signalement" sign_up: subject: "%{name} s'est inscrit·e" digest: @@ -1544,6 +1540,87 @@ fr: tags: does_not_match_previous_name: ne correspond pas au nom précédent terms: + body_html: | +

    Politique de confidentialité

    +

    Quelles informations collectons-nous ?

    + +
      +
    • Informations de base sur votre compte : si vous vous inscrivez sur ce serveur, il vous sera demandé de rentrer un identifiant, une adresse électronique et un mot de passe. Vous pourrez également ajouter des informations additionnelles sur votre profil, telles qu’un nom public et une biographie, ainsi que téléverser une image de profil et une image d’en-tête. Vos identifiant, nom public, biographie, image de profil et image d’en-tête seront toujours affichés publiquement.
    • +
    • Posts, liste d’abonnements et autres informations publiques : la liste de vos abonnements ainsi que la liste de vos abonné·e·s sont publiques. Quand vous postez un message, la date et l’heure d’envoi ainsi que le nom de l’application utilisée pour sa transmission sont enregistré·e·s. Des médias, tels que des images ou des vidéos, peuvent être joints aux messages. Les posts publics et non listés sont affichés publiquement. Quand vous mettez en avant un post sur votre profil, ce post est également affiché publiquement. Vos messages sont délivrés à vos abonné·e·s, ce qui, dans certains cas, signifie qu’ils sont délivrés à des serveurs tiers et que ces derniers en stockent une copie. Quand vous supprimez un post, il est probable que l'action soit aussi délivrée à vos abonné·e·s. Partager un message ou le marquer comme favori est toujours une action publique.
    • +
    • Posts directs et abonné·e·s uniquement : tous les posts sont stockés et traités par le serveur. Les messages abonné·e·s uniquement ne sont transmis qu’à vos abonné·e·s et aux personnes mentionnées dans le corps du message, tandis que les messages directs ne sont transmis qu’aux personnes mentionnées. Dans certains cas, cela signifie qu’ils sont délivrés à des serveurs tiers et que ces derniers en stockent une copie. Nous faisons un effort de bonne foi pour en limiter l’accès uniquement aux personnes autorisées, mais ce n’est pas nécessairement le cas des autres serveurs. Il est donc très important que vous vérifiiez les serveurs auxquels appartiennent vos abonné·e·s. Il vous est possible d’activer une option dans les paramètres afin d’approuver et de rejeter manuellement les nouveaux·lles abonné·e·s. Gardez s’il vous plaît en mémoire que les opérateur·rice·s du serveur ainsi que celles et ceux de n’importe quel serveur récepteur peuvent voir ces messages, et qu’il est possible pour les destinataires de faire des captures d’écran, de copier et plus généralement de repartager ces messages. Ne partagez aucune information sensible à l’aide de Mastodon !
    • +
    • IP et autres métadonnées : quand vous vous connectez, nous enregistrons votre adresse IP ainsi que le nom de votre navigateur web. Toutes les sessions enregistrées peuvent être consultées dans les paramètres, afin que vous puissiez les surveiller et éventuellement les révoquer. La dernière adresse IP utilisée est conservée pour une durée de 12 mois. Nous sommes également susceptibles de conserver les journaux du serveur, ce qui inclut l’adresse IP de chaque requête reçue.
    • +
    + +
    + +

    Que faisons-nous des informations vous concernant ?

    + +

    Toutes les informations que nous collectons sur vous peuvent être utilisées des manières suivantes :

    + +
      +
    • pour vous fournir les fonctionnalités de base de Mastodon. Vous ne pouvez interagir avec le contenu des autres et poster votre propre contenu que lorsque vous êtes connecté·e. Par exemple, vous pouvez vous abonner à plusieurs autres comptes pour voir l’ensemble de leurs posts dans votre fil d’accueil personnalisé ;
    • +
    • pour aider à la modération de la communauté : par exemple, comparer votre adresse IP avec d’autres afin de déterminer si un bannissement a été contourné ou si une autre infraction aux règles a été commise ;
    • +
    • l’adresse électronique que vous nous avez fournie peut être utilisée pour vous envoyer des informations, des notifications lorsque d’autres personnes interagissent avec votre contenu ou vous envoient des messages, pour répondre à des demandes de votre part ainsi que pour toutes autres requêtes ou questions.
    • +
    + +
    + +

    Comment protégeons-nous vos informations ?

    + +

    Nous mettons en œuvre une variété de mesures de sécurité afin de garantir la sécurité de vos informations personnelles quand vous les saisissez, les soumettez et les consultez. Entre autres choses, votre session de navigation ainsi que le trafic entre votre application et l’API sont protégées par un certificat SSL ; tandis que votre mot de passe est haché à l'aide d'un puissant algorithme à sens unique. Vous pouvez également activer l’authentification à deux facteurs pour sécuriser encore plus l’accès à votre compte.

    + +
    + +

    Quelle est notre politique de conservation des données ?

    + +

    Nous ferons un effort de bonne foi pour :

    + +
      +
    • ne pas conserver plus de 90 jours les journaux systèmes contenant les adresses IP de toutes les requêtes reçues par ce serveur ;
    • +
    • ne pas conserver plus de 12 mois les adresses IP associées aux utilisateur·ice·s enregistré·e·s.
    • +
    + +

    Vous pouvez demander à télécharger une archive de votre contenu, incluant vos posts, vos médias joints, votre image de profil et votre image d’en-tête.

    + +

    Vous pouvez supprimer votre compte de manière définitive à tout moment.

    + +
    + +

    Utilisons-nous des témoins de connexion ?

    + +

    Oui. Les témoins de connexion sont de petits fichiers qu’un site ou un service transfère sur le disque dur de votre ordinateur via votre navigateur web (si vous l’y avez autorisé). Ces témoins permettent au site de reconnaître votre navigateur et, dans le cas où vous possédez un compte, de vous associer avec ce dernier.

    + +

    Nous utilisons les témoins de connexion afin de comprendre et de sauvegarder vos préférences pour vos prochaines visites.

    + +
    + +

    Divulguons-nous des informations à des tiers ?

    + +

    Nous ne vendons, n’échangeons ou ne transférons d’une quelconque manière que ce soit des informations permettant de vous identifier personnellement. Cela n’inclut pas les tiers de confiance qui nous aident à faire fonctionner ce site, à conduire nos activités commerciales ou à vous servir, du moment qu’ils acceptent de garder ces informations confidentielles. Nous sommes également susceptibles de partager vos informations quand nous pensons que cela est nécessaire pour nous conformer à la loi, pour faire respecter les règles de notre site, ainsi que pour défendre nos droits, notre propriété, notre sécurité, ou ceux d’autres personnes.

    + +

    Votre contenu public peut être téléchargé par d’autres serveurs du réseau. Dans le cas où vos abonné·e·s et vos destinataires résident sur des serveurs différents du vôtre, vos posts publics et abonné·e·s uniquement sont délivrés vers les serveurs de vos abonné·e·s tandis que vos messages directs sont délivrés aux serveurs de vos destinataires.

    + +

    Quand vous autorisez une application à utiliser votre compte, en fonction de l’étendue des permissions que vous approuvez, il est possible qu’elle puisse accéder aux informations publiques de votre profil, à votre liste d’abonnements, votre liste d’abonné·e·s, vos listes, tous vos posts et vos favoris. Les applications ne peuvent en aucun cas accéder à votre adresse électronique et à votre mot de passe.

    + +
    + +

    Utilisation de ce site par les enfants

    + +

    Si ce serveur est situé dans l’UE ou l’EEE : notre site, nos produits et nos services sont tous destinés à des personnes âgées de 16 ans ou plus. Si vous avez moins de 16 ans, en application du RGPD (Réglement Général sur la Protection des Données), merci de ne pas utiliser ce site.

    + +

    Si ce serveur est situé aux États-Unis d’Amérique : notre site, nos produits et nos services sont tous destinés à des personnes âgées de 13 ans ou plus. Si vous avez moins de 13 ans, en application du COPPA (Children's Online Privacy Protection Act), merci de ne pas utiliser ce site.

    + +

    Les exigences légales peuvent être différentes si ce serveur dépend d'une autre juridiction.

    + +
    + +

    Modifications de notre politique de confidentialité

    + +

    Dans le cas où nous déciderions de changer notre politique de confidentialité, nous posterons les modifications sur cette page.

    + +

    Ce document est publié sous licence CC-BY-SA. Il a été mis à jour pour la dernière fois le 26 mai 2022.

    + +

    Initialement adapté de la politique de confidentialité de Discourse.

    title: Conditions d’utilisation et politique de confidentialité de %{instance} themes: contrast: Mastodon (Contraste élevé) diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 8a280c00122..19a67a8ec3a 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -11,7 +11,6 @@ ga: roles: bot: Róbat group: Grúpa - moderator: Modhnóir unfollow: Ná lean admin: accounts: @@ -27,11 +26,6 @@ ga: all: Uile public: Poiblí reject: Diúltaigh - roles: - admin: Riarthóir - moderator: Modhnóir - staff: Foireann - user: Úsáideoir search: Cuardaigh statuses: Postálacha title: Cuntais diff --git a/config/locales/gd.yml b/config/locales/gd.yml index 387ba6c2a38..bdbd26199f8 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -90,10 +90,8 @@ gd: posts_tab_heading: Postaichean posts_with_replies: Postaichean ’s freagairtean roles: - admin: Rianaire bot: Bot group: Buidheann - moderator: Maor unavailable: Chan eil a’ phròifil ri làimh unfollow: Na lean tuilleadh admin: @@ -112,7 +110,6 @@ gd: avatar: Avatar by_domain: Àrainn change_email: - changed_msg: Chaidh post-d a’ chunntais atharrachadh! current_email: Am post-d làithreach label: Atharraich am post-d new_email: Post-d ùr @@ -196,12 +193,6 @@ gd: reset: Ath-shuidhich reset_password: Ath-shuidhich am facal-faire resubscribe: Fo-sgrìobh a-rithist - role: Ceadan - roles: - admin: Rianaire - moderator: Maor - staff: Ball dhen sgioba - user: Cleachdaiche search: Lorg search_same_email_domain: Cleachdaichean eile aig a bheil an aon àrainn puist-d search_same_ip: Cleachdaichean eile aig a bheil an t-aon IP @@ -728,9 +719,6 @@ gd: deletion: desc_html: Leig le neach sa bith an cunntas a sguabadh às title: Fosgail sguabadh às chunntasan - min_invite_role: - disabled: Na ceadaich idir - title: Ceadaich cuiridhean le require_invite_text: desc_html: Nuair a bhios aontachadh a làimh riatanach dhan chlàradh, dèan an raon teacsa “Carson a bu mhiann leat ballrachd fhaighinn?” riatanach seach roghainneil title: Iarr air cleachdaichean ùra gun innis iad carson a tha iad ag iarraidh ballrachd @@ -743,9 +731,6 @@ gd: show_known_fediverse_at_about_page: desc_html: Nuair a bhios seo à comas, cha sheall an loidhne-ama phoblach a thèid a cheangal rithe on duilleag-landaidh ach susbaint ionadail title: Gabh a-staigh susbaint cho-naisgte air duilleag na loidhne-ama poblaich gun ùghdarrachadh - show_staff_badge: - desc_html: Seall bràist sgioba air duilleag cleachdaiche - title: Seall bràist sgioba site_description: desc_html: Earrann tuairisgeil air an API. Mìnich dè tha sònraichte mun fhrithealaiche Mastodon seo agus rud sa bith eile a tha cudromach. ’S urrainn dhut tagaichean HTML a chleachdadh agus <a> ’s <em> gu sònraichte. title: Tuairisgeul an fhrithealaiche @@ -1140,7 +1125,6 @@ gd: title: Deasaich a’ chriathrag errors: invalid_context: Cha deach co-theacs a sholar no tha e mì-dhligheach - invalid_irreversible: Chan obraich criathradh buan ach ann an co-theacsa na dachaigh no na brathan index: delete: Sguab às empty: Chan eil criathrag agad. diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 10454b5fde3..4d459a74a4d 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -83,10 +83,8 @@ gl: posts_tab_heading: Publicacións posts_with_replies: Publicacións e respostas roles: - admin: Administradora bot: Bot group: Grupo - moderator: Moderadora unavailable: Perfil non dispoñíbel unfollow: Deixar de seguir admin: @@ -105,12 +103,17 @@ gl: avatar: Imaxe de perfil by_domain: Dominio change_email: - changed_msg: Email da conta mudado de xeito correcto! + changed_msg: Email mudado de xeito correcto! current_email: Email actual label: Mudar email new_email: Novo email submit: Mudar email title: Mudar email de %{username} + change_role: + changed_msg: Rol mudado correctamente! + label: Cambiar rol + no_role: Sen rol + title: Cambiar o rol de %{username} confirm: Confirmar confirmed: Confirmado confirming: Estase a confirmar @@ -154,6 +157,7 @@ gl: active: Activa all: Todo pending: Pendente + silenced: Limitada suspended: Suspendidos title: Moderación moderation_notes: Notas de moderación @@ -161,6 +165,7 @@ gl: most_recent_ip: IP máis recente no_account_selected: Ningunha conta mudou porque ningunha foi seleccionada no_limits_imposed: Sen límites impostos + no_role_assigned: Sen rol asignado not_subscribed: Non subscrita pending: Revisión pendente perform_full_suspension: Suspender @@ -187,12 +192,7 @@ gl: reset: Restabelecer reset_password: Restabelecer contrasinal resubscribe: Resubscribir - role: Permisos - roles: - admin: Administrador - moderator: Moderador - staff: Persoal (staff) - user: Usuaria + role: Rol search: Procurar search_same_email_domain: Outras usuarias co mesmo dominio de email search_same_ip: Outras usuarias co mesmo IP @@ -649,6 +649,67 @@ gl: unresolved: Non resolto updated_at: Actualizado view_profile: Ver perfil + roles: + add_new: Engadir rol + assigned_users: + one: "%{count} usuaria" + other: "%{count} usuarias" + categories: + administration: Administración + devops: DevOps + invites: Convites + moderation: Moderación + special: Especial + delete: Eliminar + description_html: Cos roles das usuarias podes personalizar as funcións e áreas de Mastodon ás que as usuarias poden acceder. + edit: Editar rol '%{name}' + everyone: Permisos por defecto + everyone_full_description_html: Este é o rol básico que afecta a tódalas usuarias, incluso aquelas sen un rol asignado. Tódolos outros roles herdar os seus permisos. + permissions_count: + one: "%{count} permiso" + other: "%{count} permisos" + privileges: + administrator: Administradora + administrator_description: As usuarias con este permiso poderán superar calquera restrición + delete_user_data: Eliminar datos de usuarias + delete_user_data_description: Permite eliminar datos doutras usuarias sen demoras + invite_users: Convidar usuarias + invite_users_description: Permite que outras usuarias conviden a xente ao servidor + manage_announcements: Xestionar anuncios + manage_announcements_description: Permite que xestionen os anuncios publicados no servidor + manage_appeals: Xestionar recursos + manage_appeals_description: Permite revisar as apelacións contra as accións de moderación + manage_blocks: Xestionar bloqueos + manage_blocks_description: Permite bloquear provedores de email e enderezos IP + manage_custom_emojis: Xestionar Emojis personalizados + manage_custom_emojis_description: Permite xestionar os emojis personalizados do servidor + manage_federation: Xestionar a federación + manage_federation_description: Permite bloquear ou permitir a federación con outros dominios, e controlar as entregas + manage_invites: Xestionar Convites + manage_invites_description: Permite ver e desactivar ligazóns de convite + manage_reports: Xestionar Denuncias + manage_reports_description: Permite revisar as denuncias e realizar accións de moderación sobre elas + manage_roles: Xestionar Roles + manage_roles_description: Permite xestionar e asignar roles a niveis inferiores + manage_rules: Xestionar Regras + manage_rules_description: Permite cambiar as regras do servidor + manage_settings: Xestionar Axustes + manage_settings_description: Permite cambiar os axustes do sitio web + manage_taxonomies: Xestionar Taxonomías + manage_taxonomies_description: Permite revisar o contido en voga e actualizar os axustes dos cancelos + manage_user_access: Xestionar Acceso das usuarias + manage_user_access_description: Permite desactivar o segundo factor de autenticación doutras usuarias, cambiar o enderezo de email e restablecer o contrasinal + manage_users: Xestionar Usuarias + manage_users_description: Permite ver os detalles doutras usuarias e realizar accións de moderación en sobre elas + manage_webhooks: Xestionar Webhooks + manage_webhooks_description: Permite establecer webhooks para eventos administrativos + view_audit_log: Ver Rexistro de auditoría + view_audit_log_description: Permite ver o historial de accións administrativas no servidor + view_dashboard: Ver Taboleiro + view_dashboard_description: Permite acceder ao taboleiro e varias métricas do servidor + view_devops: Devops + view_devops_description: Permite acceder aos taboleiros Sidekiq e phHero + title: Roles rules: add_new: Engadir regra delete: Eliminar @@ -701,9 +762,6 @@ gl: deletion: desc_html: Permitirlle a calquera que elimine a súa conta title: Abrir o borrado da conta - min_invite_role: - disabled: Ninguén - title: Permitir convites por require_invite_text: desc_html: Cando os rexistros requiren aprobación manual, facer que o texto "Por que te queres rexistrar?" do convite sexa obrigatorio en lugar de optativo title: Require que as novas usuarias completen solicitude de texto do convite @@ -716,9 +774,6 @@ gl: show_known_fediverse_at_about_page: desc_html: Si activado, mostraralle os toots de todo o fediverso coñecido nunha vista previa. Si non só mostrará os toots locais. title: Incluír contido federado na páxina da cronoloxía pública sen autenticación - show_staff_badge: - desc_html: Mostrar unha insignia de membresía nunha páxina de usuaria - title: Mostrar insigna de membresía site_description: desc_html: Parágrafo de presentación na páxina principal. Describe o que fai especial a este servidor Mastodon e calquera outra ouca importante. Pode utilizar cancelos HTML, en particular <a> e <em>. title: Descrición do servidor @@ -1124,15 +1179,24 @@ gl: public: Cronoloxías públicas thread: Conversas edit: + add_keyword: Engadir palabra chave + keywords: Palabras chave title: Editar filtro errors: + deprecated_api_multiple_keywords: Estes parámetros non se poden cambiar desde esta aplicación porque son de aplicación a máis dun filtro de palabras chave. Usa unha aplicación máis recente ou a interface web. invalid_context: Non se proporcionou un contexto válido - invalid_irreversible: O filtrado non reversible só funciona con contexto de avisos ou Inicio index: + contexts: Filtros para %{contexts} delete: Eliminar empty: Non tes filtros. + expires_in: Caduca en %{distance} + expires_on: Caduca o %{date} + keywords: + one: "%{count} palabra chave" + other: "%{count} palabras chave" title: Filtros new: + save: Gardar o novo filtro title: Engadir novo filtro footer: developers: Desenvolvedoras @@ -1251,6 +1315,8 @@ gl: copy_account_note_text: 'Esta usuaria chegou desde %{acct}, aquí están as túas notas previas acerca dela:' notification_mailer: admin: + report: + subject: "%{name} enviou unha denuncia" sign_up: subject: "%{name} rexistrouse" digest: @@ -1279,7 +1345,7 @@ gl: title: Nova petición de seguimento mention: action: Responder - body: 'Foi mencionada por %{name} en:' + body: "%{name} mencionoute en:" subject: Foches mencionada por %{name} title: Nova mención poll: diff --git a/config/locales/he.yml b/config/locales/he.yml index 04003412559..4daa4f3b6d3 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -90,10 +90,8 @@ he: posts_tab_heading: חצרוצים posts_with_replies: חצרוצים ותגובות roles: - admin: מנהל bot: בוט group: קבוצה - moderator: מנחה unavailable: פרופיל לא זמין unfollow: הפסקת מעקב admin: @@ -112,7 +110,6 @@ he: avatar: יַצְגָן by_domain: שם מתחם change_email: - changed_msg: כתובת הדוא"ל המשוייכת לחשבון שונתה בהצלחה ! current_email: כתובת דוא"ל נוכחית label: שינוי כתובת דוא"ל משוייכת לחשבון new_email: כתובת דוא"ל חדשה @@ -196,12 +193,6 @@ he: reset: איפוס reset_password: אתחול סיסמא resubscribe: להרשם מחדש - role: הרשאות - roles: - admin: מנהל מערכת - moderator: מנחה דיונים - staff: צוות - user: משתמש(ת) search: חיפוש search_same_email_domain: משתמשים אחרים מאותו דומיין דוא"ל search_same_ip: משתמשים אחרים מאותה כתובת IP @@ -727,9 +718,6 @@ he: deletion: desc_html: הרשאה לכולם למחוק את חשבונם title: פתיחת מחיקת חשבון - min_invite_role: - disabled: אף אחד - title: אפשר הזמנות לפי require_invite_text: desc_html: כאשר הרשמות דורשות אישור ידני, הפיכת טקסט ה"מדוע את/ה רוצה להצטרף" להכרחי במקום אופציונלי title: אלץ משתמשים חדשים למלא סיבת הצטרפות @@ -742,9 +730,6 @@ he: show_known_fediverse_at_about_page: desc_html: כאשר לא מופעל, מגביל את הפיד הפומבי המקושר מדף הנחיתה להצגת תוכן מקומי בלבד title: הכללת תוכן פדרטיבי בדף הפיד הפומבי הבלתי מאומת - show_staff_badge: - desc_html: הצג תג צוות בדף המשתמש - title: הצג תג צוות site_description: desc_html: מוצג כפסקה על הדף הראשי ומשמש כתגית מטא. ניתן להשתמש בתגיות HTML, ובמיוחד ב־ < a> ו־ < em> . title: תיאור האתר @@ -1145,7 +1130,6 @@ he: title: ערוך מסנן errors: invalid_context: לא סופק הקשר או הקשר לא תקין - invalid_irreversible: סינון בלתי הפיך עובד רק בהקשר פיד הבית או התראות index: delete: למחוק empty: אין לך מסננים. diff --git a/config/locales/hr.yml b/config/locales/hr.yml index fd90a5ac469..3a2af1662d8 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -44,7 +44,6 @@ hr: are_you_sure: Jeste li sigurni? by_domain: Domena change_email: - changed_msg: E-pošta računa uspješno je promijenjena! current_email: Trenutna e-pošta label: Promijeni e-poštu new_email: Nova e-pošta diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 5ee01ea2cfa..2c286e87d55 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -85,10 +85,8 @@ hu: posts_tab_heading: Bejegyzés posts_with_replies: Bejegyzés válaszokkal roles: - admin: Adminisztrátor bot: Bot group: Csoport - moderator: Moderátor unavailable: Nincs ilyen profil unfollow: Követés vége admin: @@ -107,12 +105,17 @@ hu: avatar: Profilkép by_domain: Domain change_email: - changed_msg: A fiókhoz tartozó e-mailt megváltoztattuk! + changed_msg: Az emailt sikeresen megváltoztattuk! current_email: Jelenlegi e-mail label: E-mail megváltoztatása new_email: Új e-mail submit: E-mail megváltoztatása title: "%{username} felhasználó e-mail változás" + change_role: + changed_msg: A szerepet sikeresen megváltoztattuk! + label: Szerep megváltoztatása + no_role: Nincs szerep + title: "%{username} szerepének megváltoztatása" confirm: Megerősítés confirmed: Megerősítve confirming: Megerősítés alatt @@ -156,6 +159,7 @@ hu: active: Aktív all: Összes pending: Függőben + silenced: Korlátozott suspended: Felfüggesztve title: Moderáció moderation_notes: Moderációs bejegyzés @@ -163,6 +167,7 @@ hu: most_recent_ip: Legutóbbi IP-cím no_account_selected: Nem változott meg egy fiók sem, mert semmi sem volt kiválasztva no_limits_imposed: Nincs korlátozás + no_role_assigned: Nincs szerep hozzárendelve not_subscribed: Nincs feliratkozás pending: Engedélyezés alatt perform_full_suspension: Felfüggesztés @@ -189,12 +194,7 @@ hu: reset: Visszaállítás reset_password: Jelszó visszaállítása resubscribe: Feliratkozás ismét - role: Engedélyek - roles: - admin: Adminisztrátor - moderator: Moderátor - staff: Stáb - user: Felhasználó + role: Szerep search: Keresés search_same_email_domain: Felhasználók ugyanezzel az email domainnel search_same_ip: Más felhasználók ugyanezzel az IP-vel @@ -651,6 +651,21 @@ hu: unresolved: Megoldatlan updated_at: Frissítve view_profile: Profil megtekintése + roles: + add_new: Szerep hozzáadása + assigned_users: + one: "%{count} felhasználó" + other: "%{count} felhasználó" + categories: + administration: Adminisztráció + devops: Devops + invites: Meghívások + moderation: Moderáció + special: Speciális + delete: Törlés + description_html: A felhasználói szerepekkel testreszabhatod, hogy a felhasználóid milyen Mastodon funkciókat és területeket érjenek el. + edit: "'%{name}' szerep szerkesztése" + everyone: Alapértelmezett engedélyek rules: add_new: Szabály hozzáadása delete: Törlés @@ -703,9 +718,6 @@ hu: deletion: desc_html: Engedélyezed a felhasználóknak, hogy töröljék fiókjukat title: Fiók törlésének engedélyezése - min_invite_role: - disabled: Senki - title: Meghívások engedélyezése require_invite_text: desc_html: Ha a regisztrációhoz kézi jóváhagyásra van szükség, akkor a „Miért akarsz csatlakozni?” válasz kitöltése legyen kötelező, és ne opcionális title: Az új felhasználóktól legyen megkövetelve a meghívási kérés szövegének kitöltése @@ -718,9 +730,6 @@ hu: show_known_fediverse_at_about_page: desc_html: Ha le van tiltva, a nyilvános, főoldalról elérhető idővonalon csak helyi tartalmak jelennek meg title: Mutassuk az általunk ismert föderációt az idővonal előnézetben - show_staff_badge: - desc_html: Stáb-jelvény megjelenítése a felhasználó oldalán - title: Stáb-jelvény megjelenítése site_description: desc_html: Rövid bemutatkozás a főoldalon és a meta fejlécekben. Írd le, mi teszi ezt a szervert különlegessé! Használhatod a <a> és <em> HTML tageket. title: Kiszolgáló leírása @@ -1126,15 +1135,24 @@ hu: public: Nyilvános idővonalak thread: Beszélgetések edit: + add_keyword: Kulcsszó hozzáadása + keywords: Kulcsszavak title: Szűrő szerkesztése errors: + deprecated_api_multiple_keywords: Ezek a paraméterek nem módosíthatóak az alkalmazásból, mert több mint egy szűrőkulcsszóra is hatással vannak. Használd az alkalmazás vagy a webes felület újabb verzióját. invalid_context: A megadott kontextus hamis vagy hiányzik - invalid_irreversible: Visszafordíthatatlan szűrést csak saját idővonalon vagy értesítéseken lehet végezni index: + contexts: 'Szűrés helye: %{contexts}' delete: Törlés empty: Nincs szűrés. + expires_in: 'Ennyi idő múlva jár le: %{distance}' + expires_on: 'Lejárat ideje: %{date}' + keywords: + one: "%{count} kulcsszó" + other: "%{count} kulcsszó" title: Szűrők new: + save: Új szűrő mentése title: Új szűrő hozzáadása footer: developers: Fejlesztőknek @@ -1253,6 +1271,8 @@ hu: copy_account_note_text: 'Ez a fiók elköltözött innen %{acct}, itt vannak a bejegyzéseitek róla:' notification_mailer: admin: + report: + subject: "%{name} bejelentést küldött" sign_up: subject: "%{name} feliratkozott" digest: diff --git a/config/locales/hy.yml b/config/locales/hy.yml index 831ca662165..e04f2088c64 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -77,10 +77,8 @@ hy: posts_tab_heading: Գրառումներ posts_with_replies: Գրառումներ եւ պատասխաններ roles: - admin: Ադմինիստրատոր bot: Բոտ group: Խումբ - moderator: Մոդերատոր unavailable: Պրոֆիլը հասանելի չի unfollow: Չհետևել admin: @@ -99,7 +97,6 @@ hy: avatar: Աւատար by_domain: Դոմէն change_email: - changed_msg: Հաշուի էլ․ հասցէն բարեյաջող փոփոխուեց current_email: Ներկայիս էլ․ հասցէ label: Փոխել էլ. հասցէն new_email: Նոր էլ․ փոստ @@ -174,12 +171,6 @@ hy: reset: Վերականգնել reset_password: Վերականգնել գաղտանաբառը resubscribe: Կրկին բաժանորդագրուել - role: Թոյլտուութիւններ - roles: - admin: Ադմինիստրատոր - moderator: Մոդերատոր - staff: Անձնակազմ - user: Oգտատէր search: Որոնել search_same_email_domain: Այլ օգտատէրեր նոյն էլ․ փոստի դոմէյնով search_same_ip: Այլ օգտատէրեր նոյն IP֊ով @@ -466,18 +457,12 @@ hy: deletion: desc_html: Բոլորին թոյլատրել ջնջել իրենց հաշիւը title: Բացել հաշուի ջնջումը - min_invite_role: - disabled: Ոչ ոք - title: Թոյլատրել հրաւէրներ registrations_mode: modes: approved: Գրանցման համար անհրաժեշտ է հաստատում none: Ոչ ոք չի կարող գրանցուել open: Բոլորը կարող են գրանցուել title: Գրանցումային ռեժիմ - show_staff_badge: - desc_html: Ցուցադրել անձնակազմի անդամի նշանը օգտատիրոջ էջում - title: Ցուցադրել անձնակազմի անդամի նշանը site_description: title: Կայքի նկարագրութիւն site_short_description: diff --git a/config/locales/id.yml b/config/locales/id.yml index 368b21add11..2bf3e7d1392 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -77,10 +77,8 @@ id: posts_tab_heading: Toot posts_with_replies: Toot dan balasan roles: - admin: Admin bot: Bot group: Grup - moderator: Moderator unavailable: Profil tidak tersedia unfollow: Berhenti mengikuti admin: @@ -99,7 +97,6 @@ id: avatar: Avatar by_domain: Domian change_email: - changed_msg: Email akun ini berhasil diubah! current_email: Email saat ini label: Ganti email new_email: Email baru @@ -180,12 +177,6 @@ id: reset: Atur ulang reset_password: Reset kata sandi resubscribe: Langganan ulang - role: Hak akses - roles: - admin: Administrator - moderator: Moderator - staff: Staf - user: Pengguna search: Cari search_same_email_domain: Pengguna lain dengan domain email yang sama search_same_ip: Pengguna lain dengan IP yang sama @@ -685,9 +676,6 @@ id: deletion: desc_html: Izinkan siapapun untuk menghapus akun miliknya title: Buka penghapusan akun - min_invite_role: - disabled: Tidak ada satu pun - title: Izinkan undangan oleh require_invite_text: desc_html: Saat pendaftaran harus disetujui manual, buat input teks "Mengapa Anda ingin bergabung?" sebagai hal wajib bukan opsional title: Pengguna baru harus memasukkan alasan bergabung @@ -700,9 +688,6 @@ id: show_known_fediverse_at_about_page: desc_html: Ketika dimatikan, batasi linimasa publik yang ditautkan dari halaman landas untuk menampilkan konten lokal saja title: Masukkan konten gabungan di halaman linimasa publik tanpa autentifikasi - show_staff_badge: - desc_html: Tampilkan lencana staf pada halaman pengguna - title: Tampilkan lencana staf site_description: desc_html: Ditampilkan sebagai sebuah paragraf di halaman depan dan digunakan sebagai tag meta.
    Anda bisa menggunakan tag HTML, khususnya <a> dan <em>. title: Deskripsi situs @@ -1103,7 +1088,6 @@ id: title: Ubah saringan errors: invalid_context: Konteks tidak ada atau invalid - invalid_irreversible: Penyaringan yang tidak dapat dipulihkan hanya bekerja di beranda atau konteks notifikasi index: delete: Hapus empty: Anda tidak memiliki filter. diff --git a/config/locales/io.yml b/config/locales/io.yml index 7cf253089e1..e7a8b1daf1b 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -83,10 +83,8 @@ io: posts_tab_heading: Posti posts_with_replies: Posti e respondi roles: - admin: Administrero bot: Boto group: Grupo - moderator: Jerero unavailable: Profilo esas nedisponebla unfollow: Dessequar admin: @@ -105,7 +103,6 @@ io: avatar: Profilimajo by_domain: Domeno change_email: - changed_msg: Kontoretposto sucesoze chanjesis! current_email: Nuna retposto label: Chanjez retposto new_email: Nova retposto @@ -187,12 +184,6 @@ io: reset: Richanjez reset_password: Richanjez pasvorto resubscribe: Riabonez - role: Permisi - roles: - admin: Administrero - moderator: Jerero - staff: Laborero - user: Uzanto search: Trovez search_same_email_domain: Altra uzanti kun sama retpostodomeno search_same_ip: Altra uzanti kun sama IP @@ -701,9 +692,6 @@ io: deletion: desc_html: Permisez irgu efacar sua konto title: Apertez kontoefaco - min_invite_role: - disabled: Nulu - title: Permisez inviti da require_invite_text: desc_html: Se registri bezonas manuala aprobo, kauzigar "Por quo vu volas juntar?" textoenpoz divenar obligata title: Bezonez nova uzanti insertar motivo por juntar @@ -716,9 +704,6 @@ io: show_known_fediverse_at_about_page: desc_html: Se desaktivigesis, co permisas publika tempolineo quo ligesas de atingopagino montrar nur lokala kontenajo title: Inkluzez federatita kontenajo che neyurizita publika tempolineopagino - show_staff_badge: - desc_html: Montrez laborerinsigno che uzantopagino - title: Montrez laborerinsigno site_description: desc_html: Displayed as a paragraph on the frontpage and used as a meta tag.
    You can use HTML tags, in particular <a> and <em>. title: Site description @@ -1124,13 +1109,19 @@ io: public: Publika tempolinei thread: Konversi edit: + add_keyword: Insertez klefvorto + keywords: Klefvorti title: Modifikez filtrilo errors: invalid_context: Nula o nevalida kuntexto donesis - invalid_irreversible: Neinversigebla filtro nur funcionas kun hemo- e aviz- kuntexto index: delete: Efacez empty: Vu ne havas filtrili. + expires_in: Expiras ye %{distance} + expires_on: Expiras ye %{date} + keywords: + one: "%{count} klefvorto" + other: "%{count} klefvorti" title: Filtrili new: title: Insertez nova filtrilo @@ -1251,6 +1242,8 @@ io: copy_account_note_text: 'Ca uzanti transferesis de %{acct}, co esas vua antea noti pri ol:' notification_mailer: admin: + report: + subject: "%{name} sendis raporto" sign_up: subject: "%{name} registris" digest: diff --git a/config/locales/is.yml b/config/locales/is.yml index 5978ac41c36..912a3f5bc6e 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -83,10 +83,8 @@ is: posts_tab_heading: Færslur posts_with_replies: Færslur og svör roles: - admin: Stjóri bot: Róbót group: Hópur - moderator: Umsjón unavailable: Notandasnið ekki tiltækt unfollow: Hætta að fylgja admin: @@ -105,12 +103,17 @@ is: avatar: Auðkennismynd by_domain: Lén change_email: - changed_msg: Tölvupóstfangi notandaaðgangsins hefur verið breytt! + changed_msg: Tókst að breyta tölvupóstfangi! current_email: Núverandi tölvupóstfang label: Breyta tölvupóstfangi new_email: Nýr tölvupóstur submit: Breyta tölvupóstfangi title: Breyta tölvupóstfangi fyrir %{username} + change_role: + changed_msg: Tókst að breyta hlutverki! + label: Breyta hlutverki + no_role: Ekkert hlutverk + title: Breyta hlutverki fyrir %{username} confirm: Staðfesta confirmed: Staðfest confirming: Staðfesti @@ -154,6 +157,7 @@ is: active: Virkur all: Allt pending: Í bið + silenced: Takmarkað suspended: Í bið title: Umsjón moderation_notes: Minnispunktar umsjónarmanna @@ -161,6 +165,7 @@ is: most_recent_ip: Nýjasta IP-vistfang no_account_selected: Engum aðgöngum var breytt þar sem engir voru valdir no_limits_imposed: Engra takmarka krafist + no_role_assigned: Engu hlutverki úthlutað not_subscribed: Ekki í áskrift pending: Bíður eftir yfirlestri perform_full_suspension: Setja í bið @@ -187,12 +192,7 @@ is: reset: Endurstilla reset_password: Endurstilla lykilorð resubscribe: Gerast áskrifandi aftur - role: Heimildir - roles: - admin: Stjórnandi - moderator: Umsjónarmaður - staff: Starfsmaður - user: Notandi + role: Hlutverk search: Leita search_same_email_domain: Aðra notendur með sama tölvupóstlén search_same_ip: Aðrir notendur með sama IP-vistfang @@ -649,6 +649,44 @@ is: unresolved: Óleyst updated_at: Uppfært view_profile: Skoða notandasnið + roles: + add_new: Bæta við hlutverki + assigned_users: + one: "%{count} notandi" + other: "%{count} notendur" + categories: + administration: Stjórnun + devops: Kerfisstjórar + invites: Boðsgestir + moderation: Umsjón + special: Sérstakt + delete: Eyða + description_html: Með hlutverkum notenda geturðu sérsniðið að hvaða aðgerðum og hvaða svæðum í Mastodon notendurnir þínir hafa aðgang. + edit: Breyta hlutverki fyrir '%{name}' + everyone: Sjálfgefnar heimildir + permissions_count: + one: "%{count} heimild" + other: "%{count} heimildir" + privileges: + administrator: Stjórnandi + administrator_description: Notendur með þessa heimild fara framhjá öllum öðrum heimildum + delete_user_data: Eyða gögnum notanda + delete_user_data_description: Leyfir notendum að eyða gögnum annarra notenda án tafar + invite_users: Bjóða notendum + invite_users_description: Leyfir notendum að bjóða nýju fólki inn á netþjóninn + manage_announcements: Sýsla með tilkynningar + manage_announcements_description: Leyfir notendum að sýsla með tilkynningar á netþjóninum + manage_appeals: Sýsla með áfrýanir + manage_appeals_description: Leyfir notendum að yfirfara áfrýjanir vegna aðgerða umsjónarfólks + manage_blocks: Sýsla með útilokanir + manage_blocks_description: Leyfir notendum að loka á tölvupóstþjónustur og IP-vistföng + manage_settings: Sýsla með stillingar + manage_settings_description: Leyfir notendum að breyta stillingum vefsvæðisins + view_dashboard: Skoða stjórnborð + view_dashboard_description: Leyfir notendum að skoða stjórnborðið og sjá ýmsar mælingar + view_devops: Kerfisstjórar + view_devops_description: Leyfir notendum að skoða Sidekiq og pgHero stjórnborð + title: Hlutverk rules: add_new: Skrá reglu delete: Eyða @@ -701,9 +739,6 @@ is: deletion: desc_html: Leyfa öllum að eyða aðgangnum sínum title: Opna eyðingu á notandaaðgangi - min_invite_role: - disabled: Enginn - title: Leyfa boð frá require_invite_text: desc_html: Þegar nýskráningar krefjast handvirks samþykkis, skal gera "Hvers vegna viltu taka þátt?" boðstexta að skyldu fremur en valkvæðan title: Krefja nýja notendur um að fylla út boðstexta @@ -716,9 +751,6 @@ is: show_known_fediverse_at_about_page: desc_html: Þegar þetta er óvirkt, takmarkast opinbera tímalínan sem tengt er í af upphafssíðunni við að birta einungis staðvært efni (af sama vefþjóni) title: Hafa með efni úr skýjasambandi á síðu fyrir óauðkennda opinbera tímalínu - show_staff_badge: - desc_html: Sýna starfsmannamerki á síðu notandans - title: Sýna starfsmannamerki site_description: desc_html: Kynningarmálsgrein í API. Lýstu því hvað það er sem geri þennan Mastodon-þjón sérstakan, auk annarra mikilvægra upplýsinga. Þú getur notað HTML-einindi, sér í lagi <a> og <em>. title: Lýsing á vefþjóni @@ -1124,15 +1156,24 @@ is: public: Opinberar tímalínur thread: Samtöl edit: + add_keyword: Bæta við stikkorði + keywords: Stikkorð title: Breyta síu errors: + deprecated_api_multiple_keywords: Þessum viðföngum er ekki hægt að breyta úr þessu forriti, þar sem þau eiga við fleiri en eitt stikkorð síu. Notaðu nýrra forrit eða farðu í vefviðmótið. invalid_context: Ekkert eða ógilt samhengi var gefið - invalid_irreversible: Óendurkræf síun virkar bara í sambandi við heimasvæði eða tilkynningar index: + contexts: Síur í %{contexts} delete: Eyða empty: Þú ert ekki með neinar síur. + expires_in: Rennur út %{distance} + expires_on: Rennur út þann %{date} + keywords: + one: "%{count} stikkorð" + other: "%{count} stikkorð" title: Síur new: + save: Vista nýja síu title: Bæta við nýrri síu footer: developers: Forritarar @@ -1251,6 +1292,8 @@ is: copy_account_note_text: 'Þessi notandi fluttist frá %{acct}, hér eru fyrri minnispunktar þínir um hann:' notification_mailer: admin: + report: + subject: "%{name} sendi inn kæru" sign_up: subject: "%{name} nýskráði sig" digest: diff --git a/config/locales/it.yml b/config/locales/it.yml index f97779d26c2..f269cc542ac 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -83,10 +83,8 @@ it: posts_tab_heading: Toot posts_with_replies: Toot e risposte roles: - admin: Amministratore bot: Bot group: Gruppo - moderator: Moderatore unavailable: Profilo non disponibile unfollow: Non seguire più admin: @@ -105,12 +103,17 @@ it: avatar: Immagine di profilo by_domain: Dominio change_email: - changed_msg: Account email cambiato con successo! + changed_msg: Email modificata! current_email: Email attuale label: Cambia email new_email: Nuova email submit: Cambia email title: Cambia email per %{username} + change_role: + changed_msg: Ruolo modificato correttamente! + label: Cambia ruolo + no_role: Nessun ruolo + title: Cambia ruolo per %{username} confirm: Conferma confirmed: Confermato confirming: Confermando @@ -154,6 +157,7 @@ it: active: Attivo all: Tutto pending: In attesa + silenced: Limitato suspended: Sospesi title: Moderazione moderation_notes: Note di moderazione @@ -161,6 +165,7 @@ it: most_recent_ip: IP più recente no_account_selected: Nessun account è stato modificato visto che non ne è stato selezionato nessuno no_limits_imposed: Nessun limite imposto + no_role_assigned: Nessun ruolo assegnato not_subscribed: Non sottoscritto pending: Revisioni in attesa perform_full_suspension: Sospendi @@ -187,12 +192,7 @@ it: reset: Reimposta reset_password: Reimposta password resubscribe: Riscriversi - role: Permessi - roles: - admin: Amministratore - moderator: Moderatore - staff: Personale - user: Utente + role: Ruolo search: Cerca search_same_email_domain: Altri utenti con lo stesso dominio e-mail search_same_ip: Altri utenti con lo stesso IP @@ -649,6 +649,67 @@ it: unresolved: Non risolto updated_at: Aggiornato view_profile: Visualizza profilo + roles: + add_new: Aggiungi ruolo + assigned_users: + one: "%{count} utente" + other: "%{count} utenti" + categories: + administration: Amministrazione + devops: Devops + invites: Inviti + moderation: Moderazione + special: Speciale + delete: Cancella + description_html: Con i ruoli utente, puoi personalizzare a quali funzioni e aree di Mastodon i tuoi utenti possono accedere. + edit: Modifica il ruolo '%{name}' + everyone: Permessi predefiniti + everyone_full_description_html: Questo è il ruolo base che influenza tutti gli utenti, anche quelli senza un ruolo assegnato. Tutti gli altri ruoli ereditano i permessi da esso. + permissions_count: + one: "%{count} permesso" + other: "%{count} permessi" + privileges: + administrator: Amministratore + administrator_description: Gli utenti con questo permesso saranno esentati da ogni permesso + delete_user_data: Cancella dati utente + delete_user_data_description: Consente agli utenti di eliminare subito i dati degli altri utenti + invite_users: Invita Utenti + invite_users_description: Consente agli utenti di invitare nuove persone su questo server + manage_announcements: Gestisci Annunci + manage_announcements_description: Consente agli utenti di gestire gli annunci sul server + manage_appeals: Gestisci appelli + manage_appeals_description: Consente agli utenti di esaminare i ricorsi contro le azioni di moderazione + manage_blocks: Gestisci Blocchi + manage_blocks_description: Consente agli utenti di bloccare provider e-mail e indirizzi IP + manage_custom_emojis: Gestisci emoji personalizzate + manage_custom_emojis_description: Consente agli utenti di gestire emoji personalizzate sul server + manage_federation: Gestisci Federazione + manage_federation_description: Consente agli utenti di bloccare o consentire la federazione con altri domini e controllare la consegnabilità + manage_invites: Gestisci Inviti + manage_invites_description: Consente agli utenti di esaminare e disattivare i link di invito + manage_reports: Gestisci report + manage_reports_description: Consente agli utenti di esaminare i report ed eseguire azioni di moderazione su di essi + manage_roles: Gestisci Ruoli + manage_roles_description: Consente agli utenti di gestire e assegnare i ruoli inferiori al loro + manage_rules: Gestisci Regole + manage_rules_description: Consente agli utenti di modificare le regole del server + manage_settings: Gestisci impostazioni + manage_settings_description: Consente agli utenti di modificare le impostazioni del sito + manage_taxonomies: Gestisci Tassonomie + manage_taxonomies_description: Consente agli utenti di esaminare i contenuti di tendenza e aggiornare le impostazioni degli hashtag + manage_user_access: Gestisci accesso utenti + manage_user_access_description: Consente agli utenti di disabilitare l'autenticazione a due fattori degli altri utenti, modificare il loro indirizzo e-mail e reimpostare la password + manage_users: Gestisci utenti + manage_users_description: Consente agli utenti di visualizzare le informazioni sugli altri utenti ed eseguire azioni di moderazione contro di loro + manage_webhooks: Gestisci Webhook + manage_webhooks_description: Consente agli utenti di impostare webhook per eventi amministrativi + view_audit_log: Visualizza Registro Attività + view_audit_log_description: Consente agli utenti di vedere una cronologia delle azioni amministrative sul server + view_dashboard: Mostra dashboard + view_dashboard_description: Consente agli utenti di accedere alla dashboard e alle varie metriche + view_devops: Devops + view_devops_description: Consente agli utenti di accedere alle dashboard Sidekiq e pgHero + title: Ruoli rules: add_new: Aggiungi regola delete: Cancella @@ -701,9 +762,6 @@ it: deletion: desc_html: Consenti a chiunque di cancellare il proprio account title: Apri la cancellazione dell'account - min_invite_role: - disabled: Nessuno - title: Permetti inviti da require_invite_text: desc_html: Quando le iscrizioni richiedono l'approvazione manuale, rendere la richiesta “Perché si desidera iscriversi?” obbligatoria invece che opzionale title: Richiedi ai nuovi utenti di rispondere alla richiesta di motivazione per l'iscrizione @@ -716,9 +774,6 @@ it: show_known_fediverse_at_about_page: desc_html: Quando attivato, mostra nell'anteprima i toot da tutte le istanze conosciute. Altrimenti mostra solo i toot locali. title: Mostra la fediverse conosciuta nell'anteprima della timeline - show_staff_badge: - desc_html: Mostra un distintivo dello staff sulla pagina dell'utente - title: Mostra badge staff site_description: desc_html: Paragrafo introduttivo nella pagina iniziale. Descrive ciò che rende speciale questo server Mastodon e qualunque altra cosa sia importante dire. Potete usare marcatori HTML, in particolare <a> e <em>. title: Descrizione del server @@ -1126,15 +1181,24 @@ it: public: Timeline pubbliche thread: Conversazioni edit: + add_keyword: Aggiungi parola chiave + keywords: Parole chiave title: Modifica filtro errors: + deprecated_api_multiple_keywords: Questi parametri non possono essere modificati da questa applicazione perché si applicano a più di una parola chiave che fa da filtro. Utilizzare un'applicazione più recente o l'interfaccia web. invalid_context: Contesto mancante o non valido - invalid_irreversible: Il filtraggio irreversibile funziona solo nei contesti di home o notifiche index: + contexts: Filtri in %{contexts} delete: Cancella empty: Non hai alcun filtro. + expires_in: Scade tra %{distance} + expires_on: Scade il %{date} + keywords: + one: "%{count} parola chiave" + other: "%{count} parole chiave" title: Filtri new: + save: Salva nuovo filtro title: Aggiungi filtro footer: developers: Sviluppatori @@ -1253,6 +1317,8 @@ it: copy_account_note_text: 'Questo utente si è spostato da %{acct}, ecco le tue note precedenti su di loro:' notification_mailer: admin: + report: + subject: "%{name} ha inviato una segnalazione" sign_up: subject: "%{name} si è iscritto" digest: diff --git a/config/locales/ja.yml b/config/locales/ja.yml index b7139523b5a..cb7a1526c65 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -77,10 +77,8 @@ ja: posts_tab_heading: 投稿 posts_with_replies: 投稿と返信 roles: - admin: Admin bot: Bot group: Group - moderator: Mod unavailable: プロフィールは利用できません unfollow: フォロー解除 admin: @@ -99,7 +97,6 @@ ja: avatar: アイコン by_domain: ドメイン change_email: - changed_msg: メールアドレスの変更に成功しました! current_email: 現在のメールアドレス label: メールアドレスを変更 new_email: 新しいメールアドレス @@ -180,12 +177,6 @@ ja: reset: リセット reset_password: パスワード再設定 resubscribe: 再講読 - role: 役割 - roles: - admin: 管理者 - moderator: モデレーター - staff: スタッフ - user: ユーザー search: 検索 search_same_email_domain: 同じドメインのメールアドレスを使用しているユーザー search_same_ip: 同じIPのユーザーを検索 @@ -681,9 +672,6 @@ ja: deletion: desc_html: 誰でも自分のアカウントを削除できるようにします title: アカウント削除を受け付ける - min_invite_role: - disabled: 誰にも許可しない - title: 招待の作成を許可 require_invite_text: desc_html: アカウント登録が承認制の場合、「意気込みをお聞かせください」のテキストを必須入力にする title: 新規ユーザー登録時の理由を必須入力にする @@ -696,9 +684,6 @@ ja: show_known_fediverse_at_about_page: desc_html: チェックを外すと、ランディングページからリンクされた公開タイムラインにローカルの公開投稿のみ表示します。 title: 公開タイムラインに連合先のコンテンツも表示する - show_staff_badge: - desc_html: ユーザーページにスタッフのバッジを表示します - title: スタッフバッジを表示する site_description: desc_html: フロントページへの表示に使用される紹介文です。このMastodonサーバーを特徴付けることやその他重要なことを記述してください。HTMLタグ、特に<a><em>が使えます。 title: サーバーの説明 @@ -1085,13 +1070,16 @@ ja: public: 公開タイムライン thread: 会話 edit: + add_keyword: キーワードを追加 + keywords: キーワード title: フィルターを編集 errors: invalid_context: 対象がないか無効です - invalid_irreversible: この機能はホームタイムラインまたは通知と一緒に指定する場合のみ機能します index: delete: 削除 empty: フィルターはありません。 + keywords: + other: "%{count}件のキーワード" title: フィルター new: title: 新規フィルターを追加 diff --git a/config/locales/ka.yml b/config/locales/ka.yml index bd02b0f8de4..9948ae49394 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -34,9 +34,7 @@ ka: following: იმ ადამიანს, ვინც მოგწონთ, უკვე უნდა მიჰყვებოდეთ posts_with_replies: ტუტები და პასუხები roles: - admin: ადმინისტრატორი bot: ბოტი - moderator: მოდერატორი unfollow: ნუღარ მიჰყვები admin: account_moderation_notes: @@ -48,7 +46,6 @@ ka: avatar: ავატარი by_domain: დომენი change_email: - changed_msg: ანგარიშის ელ-ფოსტა წარმატებით შეიცვალა! current_email: მიმდინარე ელ-ფოსტა label: ელ-ფოსტის შეცვლა new_email: ახალი ელ-ფოსტა @@ -102,12 +99,6 @@ ka: reset: გადატვირთვა reset_password: პაროლის გადატვირთვა resubscribe: ხელახალი გამოწერა - role: უფლებები - roles: - admin: ადმინისტრატორი - moderator: მოდერატორი - staff: სტაფი - user: მომხმარებელი search: ძებნა shared_inbox_url: გაზიარებული ინბოქსის ურლ show: @@ -254,15 +245,9 @@ ka: deletion: desc_html: უფლება მიეცით ყველას, გააუქმონ თავიანთი ანგარიში title: ღია ანგარიშის გაუქმება - min_invite_role: - disabled: არავინ - title: ნება დაერთოს მოწვეევებს show_known_fediverse_at_about_page: desc_html: ჩართვისას, ეს გამოაჩენს ტუტებს ყველა ცნობილი ფედივერსისგან პრევიუზე. სხვა შემთხვევაში, გამოაჩენს მხოლოდ ლოკალურ ტუტებს. title: გამოჩნდეს ცნობილი ვედივერსი თაიმლაინ პრევიუში - show_staff_badge: - desc_html: გამოჩნდეს სტაფის ნიშანი მომხმარებლის გვერდზე - title: სტაფის ნიშნის გამოჩენა site_description: desc_html: საშესავლო პარაგრაფი წინა გვერდზე. აღწერეთ თუ რა ხდის ამ მასტოდონის სერვერს განსაკუთრებულს და სხვა მნიშვნელოვანი. შეგიძლიათ გამოიყენოთ ჰტმლ ტეგები, კერძოდ <a> და <em>. title: ინსტანციის აღწერილობა @@ -395,7 +380,6 @@ ka: title: ფილტრის ცვლილება errors: invalid_context: მოწოდებულია არასწორი ან ცარიელი კონტექსტი - invalid_irreversible: დაუბრუნებელი ფილტრაცია მუშაობს მხოლოდ სახლის ან ნოტიფიკაციის კონტექსტში index: delete: გაუქმება title: ფილტრები diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 0db4e1c9dcb..4fac9a7964b 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -63,10 +63,8 @@ kab: posts_tab_heading: Tijewwiqin posts_with_replies: Tijewwaqin akked tririyin roles: - admin: Anedbal bot: Aṛubut group: Agraw - moderator: Atrar unavailable: Ur nufi ara amaɣnu-a unfollow: Ur ṭṭafaṛ ara admin: @@ -81,7 +79,6 @@ kab: avatar: Tugna n umaɣnu by_domain: Taɣult change_email: - changed_msg: Imayl n umiḍan yettwabeddel mebla ugur! current_email: Imayl n tura label: Beddel imayl new_email: Imayl amaynut @@ -152,12 +149,6 @@ kab: reset: Wennez reset_password: Beddel awal uffir resubscribe: Ales ajerred - role: Tisirag - roles: - admin: Anedbal - moderator: Aseɣyad - staff: Tarbaɛt - user: Amseqdac search: Nadi search_same_email_domain: Iseqdacen-nniḍen s yiwet n taɣult n yimayl search_same_ip: Imseqdacen-nniḍen s tansa IP am tinn-ik @@ -446,9 +437,6 @@ kab: users: Γef yimseqdacen idiganen i yeqqnen profile_directory: title: Rmed akaram n imaγnuten - registrations: - min_invite_role: - disabled: Ula yiwen·t registrations_mode: modes: none: Yiwen·t ur yzmir ad izeddi diff --git a/config/locales/kk.yml b/config/locales/kk.yml index 406f7e3c87b..b12f791636a 100644 --- a/config/locales/kk.yml +++ b/config/locales/kk.yml @@ -72,10 +72,8 @@ kk: posts_tab_heading: Жазба posts_with_replies: Жазбалар және жауаптар roles: - admin: Админ bot: Бот group: Топ - moderator: Мод unavailable: Профиль қолжетімді емес unfollow: Оқымау admin: @@ -92,7 +90,6 @@ kk: avatar: Аватар by_domain: Домен change_email: - changed_msg: Аккаунт email-і сәтті өзгертілді! current_email: Қазіргі email label: email өзгерту new_email: Жаңа email @@ -157,12 +154,6 @@ kk: reset: Қалпына келтіру reset_password: Құпиясөзді қалпына келтіру resubscribe: Resubscribе - role: Рұқсаттар - roles: - admin: Админ - moderator: Модератор - staff: Қызметкерлер - user: Қолданушы search: Іздеу search_same_ip: Осы ІРмен кірген басқа қолданушылар shared_inbox_url: Бөлісілген инбокс URL @@ -385,9 +376,6 @@ kk: deletion: desc_html: Allow anyone to delete their аккаунт title: Open аккаунт deletion - min_invite_role: - disabled: Ешкім - title: Allow шақырулар by registrations_mode: modes: approved: Тіркелу үшін мақұлдау қажет @@ -397,9 +385,6 @@ kk: show_known_fediverse_at_about_page: desc_html: When toggled, it will show toots from all the known fediverse on preview. Otherwise it will only show жергілікті toots. title: Show known fediverse on timeline превью - show_staff_badge: - desc_html: Show a staff badge on a user бет - title: Көрсет staff badge site_description: desc_html: Introductory paragraph on the басты бет. Describe what makes this Mastodon server special and anything else important. You can use HTML tags, in particular <a> and <em>. title: Сервер туралы @@ -618,7 +603,6 @@ kk: title: Фильтр өңдеу errors: invalid_context: Жоқ немесе жарамсыз контекст берілген - invalid_irreversible: Қайтарылмайтын сүзгі тек ішкі немесе ескертпелер контекстімен жұмыс істейді index: delete: Өшіру empty: Сізде ешқандай фильтр жоқ. diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 2397b63e587..ce377f4d665 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -79,10 +79,8 @@ ko: posts_tab_heading: 게시물 posts_with_replies: 게시물과 답장 roles: - admin: 관리자 bot: 봇 group: 그룹 - moderator: 중재자 unavailable: 프로필 사용 불가 unfollow: 팔로우 해제 admin: @@ -101,12 +99,17 @@ ko: avatar: 아바타 by_domain: 도메인 change_email: - changed_msg: 이메일이 성공적으로 바뀌었습니다! + changed_msg: 이메일이 성공적으로 변경되었습니다! current_email: 현재 이메일 주소 label: 이메일 주소 변경 new_email: 새 이메일 주소 submit: 이메일 주소 변경 title: "%{username}의 이메일 주소 변경" + change_role: + changed_msg: 역할이 성공적으로 변경되었습니다! + label: 역할 변경 + no_role: 역할 없음 + title: "%{username}의 역할 변경" confirm: 확인 confirmed: 확인됨 confirming: 확인 중 @@ -150,6 +153,7 @@ ko: active: 활동 all: 전체 pending: 대기중 + silenced: 제한됨 suspended: 정지 중 title: 중재 moderation_notes: 중재 기록 @@ -157,6 +161,7 @@ ko: most_recent_ip: 최근 IP no_account_selected: 아무 계정도 선택 되지 않아 아무 것도 변경 되지 않았습니다 no_limits_imposed: 제한 없음 + no_role_assigned: 할당된 역할 없음 not_subscribed: 구독하지 않음 pending: 심사 대기 perform_full_suspension: 정지시키기 @@ -182,12 +187,7 @@ ko: reset: 초기화 reset_password: 암호 초기화 resubscribe: 다시 구독 - role: 권한 - roles: - admin: 관리자 - moderator: 중재자 - staff: 스태프 - user: 사용자 + role: 역할 search: 검색 search_same_email_domain: 같은 이메일 도메인을 가진 다른 사용자들 search_same_ip: 같은 IP의 다른 사용자들 @@ -637,6 +637,60 @@ ko: unresolved: 미해결 updated_at: 업데이트 시각 view_profile: 프로필 보기 + roles: + add_new: 역할 추가 + assigned_users: + other: "%{count} 명의 사용자" + categories: + administration: 관리 + devops: 데브옵스 + invites: 초대 + moderation: 중재 + special: 특수 + delete: 삭제 + edit: "%{name} 역할 수정" + everyone: 기본 권한 + permissions_count: + other: "%{count} 개의 권한" + privileges: + administrator: 관리자 + delete_user_data: 사용자 데이터 삭제 + invite_users: 사용자 초대 + manage_announcements: 공지 관리 + manage_announcements_description: 사용자가 서버의 공지사항을 관리할 수 있도록 허용 + manage_appeals: 이의제기 관리 + manage_appeals_description: 사용자가 중재에 대한 이의제기를 리뷰할 수 있도록 허용 + manage_blocks: 차단 관리 + manage_blocks_description: 사용자가 이메일 제공자와 IP 주소를 차단할 수 있도록 허용 + manage_custom_emojis: 커스텀 에모지 관리 + manage_custom_emojis_description: 사용자가 서버의 커스텀 에모지를 관리할 수 있도록 허용 + manage_federation: 연합 관리 + manage_federation_description: 사용자가 다른 도메인과의 연합을 차단하거나 허용할 수 있도록 하고, 전달 가능 여부를 조정할 수 있도록 허용 + manage_invites: 초대 관리 + manage_invites_description: 사용자가 초대 링크를 보고 비활성화 할 수 있도록 허용 + manage_reports: 신고 관리 + manage_reports_description: 사용자가 신고를 리뷰하고 해당 사용자에 대한 중재활동을 수행할 수 있도록 허용 + manage_roles: 역할 관리 + manage_roles_description: 사용자가 그들 이하의 권한에 대해 관리하고 할당할 수 있도록 허용 + manage_rules: 규칙 관리 + manage_rules_description: 사용자가 서버 규칙을 수정할 수 있도록 허용합니다 + manage_settings: 설정 관리 + manage_settings_description: 사용자가 서버 설정을 수정할 수 있도록 허용합니다 + manage_taxonomies: 분류 관리 + manage_taxonomies_description: 사용자가 트렌드를 리뷰하고 해시태그 설정을 수정할 수 있도록 허용합니다 + manage_user_access: 사용자 접근 관리 + manage_user_access_description: 사용자가 다른 사용자의 2차 인증을 비활성화 하거나, 이메일 주소를 바꾸거나, 암호를 초기화 할 수 있도록 허용 + manage_users: 사용자 관리 + manage_users_description: 사용자가 다른 사용자의 상세정보를 보고 해당 사용자에 대한 중재활동을 할 수 있도록 허용 + manage_webhooks: 웹훅 관리 + manage_webhooks_description: 사용자가 관리용 웹훅을 설정할 수 있도록 허용 + view_audit_log: 감사 기록 보기 + view_audit_log_description: 사용자가 서버의 감사 기록을 볼 수 있도록 허용 + view_dashboard: 대시보드 보기 + view_dashboard_description: 사용자가 여러 통계정보를 볼 수 있는 대시보드에 접근할 수 있도록 허용 + view_devops: 데브옵스 + view_devops_description: Sidekiq과 pgHero 대시보드에 접근할 수 있도록 허용 + title: 역할 rules: add_new: 규칙 추가 delete: 삭제 @@ -689,9 +743,6 @@ ko: deletion: desc_html: 사용자가 자신의 계정을 삭제할 수 있도록 허용합니다 title: 계정 삭제를 허가함 - min_invite_role: - disabled: 아무도 못 하게 - title: 초대링크를 만들 수 있는 권한 require_invite_text: desc_html: 가입이 수동 승인을 필요로 할 때, "왜 가입하려고 하나요?" 항목을 선택사항으로 두는 것보다는 필수로 두는 것이 낫습니다 title: 새 사용자가 초대 요청 글을 작성해야 하도록 @@ -704,9 +755,6 @@ ko: show_known_fediverse_at_about_page: desc_html: 활성화 되면 프리뷰 페이지에서 페디버스의 모든 게시물을 표시합니다. 비활성화시 로컬에 있는 게시물만 표시 됩니다. title: 타임라인 프리뷰에 알려진 페디버스 표시하기 - show_staff_badge: - desc_html: 사용자 페이지에 스태프 배지를 표시합니다 - title: 스태프 배지 표시 site_description: desc_html: API의 소개문에 사용 됩니다.이 마스토돈 서버의 특별한 점 등을 설명하세요. HTML 태그, 주로 <a>, <em> 같은 것을 사용 가능합니다. title: 서버 설명 @@ -1108,15 +1156,23 @@ ko: public: 퍼블릭 타임라인 thread: 대화 edit: + add_keyword: 키워드 추가 + keywords: 키워드 title: 필터 편집 errors: + deprecated_api_multiple_keywords: 이 파라미터들은 하나를 초과하는 필터 키워드에 적용되기 때문에 이 응용프로그램에서 수정될 수 없습니다. 더 최신의 응용프로그램이나 웹 인터페이스를 사용하세요. invalid_context: 컨텍스트가 없거나 올바르지 않습니다 - invalid_irreversible: 되돌릴 수 없는 필터링은 홈 타임라인과 알림에서만 동작합니다 index: + contexts: "%{contexts}에 대한 필터" delete: 삭제 empty: 필터가 없습니다. + expires_in: "%{distance} 안에 만료됨" + expires_on: "%{date}에 만료됨" + keywords: + other: "%{count}개의 키워드" title: 필터 new: + save: 새 필터 저장 title: 필터 추가 footer: developers: 개발자 @@ -1233,6 +1289,8 @@ ko: copy_account_note_text: '이 사용자는 %{acct}로부터 이동하였습니다. 당신의 이전 노트는 이렇습니다:' notification_mailer: admin: + report: + subject: "%{name} 님이 신고를 제출했습니다" sign_up: subject: "%{name} 님이 가입했습니다" digest: diff --git a/config/locales/ku.yml b/config/locales/ku.yml index a157dbb4e4b..47b8b037b1e 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -83,10 +83,8 @@ ku: posts_tab_heading: Şandî posts_with_replies: Şandî û bersiv roles: - admin: Rêvebir bot: Bot group: Kom - moderator: Moderator unavailable: Profîl nay bikaranîn unfollow: Neşopîne admin: @@ -105,12 +103,17 @@ ku: avatar: Wêne by_domain: Navper change_email: - changed_msg: E-nameya ajimêr bi awayekî serkeftî hate guhertin! + changed_msg: E-name bi awayekî serkeftî hate guhertin! current_email: E-nameya heyî label: E-nameyê biguherîne new_email: E-nameya nû submit: E-nameyê biguherîne title: E-nameyê biguherîne bo %{username} + change_role: + changed_msg: Rol bi awayekî serkeftî hate guhertin! + label: Rolê biguherîne + no_role: Rol tune + title: Rolê biguherîne ji bo %{username} confirm: Bipejirîne confirmed: Hate pejirandin confirming: Tê pejirandin @@ -154,6 +157,7 @@ ku: active: Çalak all: Hemû pending: Tê nirxandin + silenced: Sînorkirî suspended: Sekinandî title: Çavdêrî moderation_notes: Nîşeyên Rêvebirinê @@ -161,6 +165,7 @@ ku: most_recent_ip: IP' a dawî no_account_selected: Tu ajimêr nehat hilbijartin ji ber vê tu ajimêr nehat guhertin no_limits_imposed: Sînor nay danîn + no_role_assigned: Ti rol nehatin diyarkirin not_subscribed: Beşdar nebû pending: Li benda nirxandinê ye perform_full_suspension: Sekinî @@ -187,12 +192,7 @@ ku: reset: Ji nû ve saz bike reset_password: Borînpeyvê ji nû ve saz bike resubscribe: Dîsa beşdar bibe - role: Maf - roles: - admin: Rêvebir - moderator: Çavdêr - staff: Xebatkar - user: Bikarhêner + role: Rol search: Bigere search_same_email_domain: Bikarhênerên din ên bi heman navpera e-nameyê search_same_ip: Bikarhênerên din ên xwedî heman IP @@ -651,6 +651,20 @@ ku: unresolved: Neçareserkirî updated_at: Rojanekirî view_profile: Profîlê nîşan bide + roles: + add_new: Rolê tevlî bike + assigned_users: + one: "%{count} bikarhêner" + other: "%{count} bikarhêner" + categories: + administration: Rêvebirî + devops: Devops + invites: Vexwendin + moderation: Çavdêrî + special: Taybet + delete: Jê bibe + privileges: + manage_settings: Sazkariyan bi rê ve bibe rules: add_new: Rêbazekê tevlî bike delete: Jê bibe @@ -703,9 +717,6 @@ ku: deletion: desc_html: Maf bide ku herkes bikaribe ajimêrê te jê bibe title: Jê birina ajimêrê vekek - min_invite_role: - disabled: Ne yek - title: Maf bide vexwendinên ji alîyê require_invite_text: desc_html: Gava ku tomarkirin pêdiviya pejirandina destan dike, Têketina nivîsê "Tu çima dixwazî beşdar bibî?" Bibe sereke ji devla vebijêrkî be title: Ji bo bikarhênerên nû divê ku sedemek tevlêbûnê binivîsinin @@ -718,9 +729,6 @@ ku: show_known_fediverse_at_about_page: desc_html: Dema ku neçalak be, demnameya gerdûnî ya ku ji rûpela zeviyê ve hatî girêdan tenê bi nîşandana naveroka herêmî tên sînorkirin title: Li ser rûpela demnameya ne naskirî naveroka giştî nîşan bide - show_staff_badge: - desc_html: Di rûpela bikarhêner da rozeta xebatkaran nîşan bike - title: Rozeta xebatkara nîşan bike site_description: desc_html: Paragrafa destpêkê li ser API. Dide nasîn ka çi ev rajekarê Mastodon taybet dike û tiştên din ên girîn. Tu dikarî hashtagên HTML-ê, bi kar bîne di <a> û <em> de. title: Danasîna rajekar @@ -1129,7 +1137,6 @@ ku: title: Parzûnê serrast bike errors: invalid_context: Naverok tune ye yan jî nederbasdar tê peydakirin - invalid_irreversible: Tenê qadên agahdarkirinê û serrûpel bi parzûna bêveger re dixebitin index: delete: Jê bibe empty: Parzûnên te tune ne. @@ -1253,6 +1260,8 @@ ku: copy_account_note_text: 'Ev bikarhêner ji %{acct} livî ye, li vir nîşeyên te yên berê ku te di derbarê wî/ê de nivîsandiye:' notification_mailer: admin: + report: + subject: "%{name} ragihandinek şand" sign_up: subject: "%{name} tomar bû" digest: diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 5846f7d5d4a..96119216d1e 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -35,9 +35,7 @@ lt: posts_tab_heading: Tootai posts_with_replies: Tootai ir atsakymai roles: - admin: Administratorius bot: Bot'as - moderator: Moderatorius unfollow: Nesekti admin: account_actions: @@ -52,7 +50,6 @@ lt: avatar: Profilio nuotrauka by_domain: Domenas change_email: - changed_msg: Paskyros el paštas sėkmingai pakeistas! current_email: Dabartinis el paštas label: Pakeisti el pašto adresą new_email: Naujas el pašto adresas @@ -112,12 +109,6 @@ lt: reset: Iš naujo reset_password: Atkurti slaptažodį resubscribe: Per prenumeruoti - role: Leidimai - roles: - admin: Administratorius - moderator: Moderatorius - staff: Personalas - user: Vartotojas search: Ieškoti shared_inbox_url: Bendroji gautųjų URL show: @@ -297,15 +288,9 @@ lt: deletion: desc_html: Leisti visiems ištrinti savo paskyrą title: Atidaryti paskyros trynimą - min_invite_role: - disabled: Nei vienas - title: Leisti pakvietimus show_known_fediverse_at_about_page: desc_html: Kai įjungta, rodys įrašus iš visos žinomos fedi-visatos. Kitokiu atvėju, rodys tik lokalius įrašus. title: Rodyti žinoma fedi-visatos laiko juosta peržiūroje - show_staff_badge: - desc_html: Rodyti personalo ženklelį vartotojo puslapyje - title: Rodyti personalo ženklelį site_description: desc_html: Introdukcinis paragrafas pagrindiniame puslapyje. Apibūdink, kas padaro šį Mastodon serverį išskirtiniu ir visa kita, kas svarbu. Nebijok naudoti HTML žymes, pavyzdžiui < a > bei <em>. title: Serverio apibūdinimas @@ -449,7 +434,6 @@ lt: title: Keisti filtrą errors: invalid_context: Jokio arba netinkamas pateiktas kontekstas - invalid_irreversible: Negrąžinamas filtras veikia tik namų ir priminimų kontekste index: delete: Ištrinti title: Filtrai diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 2ceec30b222..cc7306c09d1 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -62,7 +62,7 @@ lv: choices_html: "%{name} izvēles:" endorsements_hint: Jūs varat apstiprināt cilvēkus, kuriem sekojat no tīmekļa saskarnes, un viņi tiks parādīti šeit. featured_tags_hint: Šeit vari norādīt īpašus tēmturus, kuri tiks parādīti šeit. - follow: Seko + follow: Sekot followers: one: Sekotājs other: Sekotāji @@ -87,10 +87,8 @@ lv: posts_tab_heading: Ziņas posts_with_replies: Ziņas un atbildes roles: - admin: Admins bot: Bots group: Grupa - moderator: Moder unavailable: Profils nav pieejams unfollow: Pārstāt sekot admin: @@ -109,12 +107,17 @@ lv: avatar: Avatars by_domain: Domēns change_email: - changed_msg: Konta e-pasts veiksmīgi nomainīts! + changed_msg: E-pasts veiksmīgi nomainīts! current_email: Pašreizējais e-pasts label: Mainīt e-pastu new_email: Jaunā e-pasta adrese submit: Mainīt e-pastu title: Mainīt e-pastu %{username} + change_role: + changed_msg: Loma veiksmīgi nomainīta! + label: Mainīt lomu + no_role: Nav lomas + title: Mainīt lomu %{username} confirm: Apstiprināt confirmed: Apstiprināts confirming: Apstiprina @@ -150,7 +153,7 @@ lv: remote: Attālinātie title: Atrašanās vieta login_status: Pieteikšanās statuss - media_attachments: Mediju pielikumi + media_attachments: Multivides pielikumi memorialize: Pārvērst atmiņās memorialized: Piemiņa saglabāta memorialized_msg: "%{username} veiksmīgi pārvērsts par piemiņas kontu" @@ -158,6 +161,7 @@ lv: active: Aktīvie all: Visi pending: Gaida + silenced: Ierobežotie suspended: Apturētie title: Moderācija moderation_notes: Moderācijas piezīmes @@ -165,6 +169,7 @@ lv: most_recent_ip: Pati pēdējā IP no_account_selected: Neviens konts netika mainīts, jo neviens netika atlasīts no_limits_imposed: Nav noteikti ierobežojumi + no_role_assigned: Loma nav piešķirta not_subscribed: Nav abonēts pending: Gaida pārskatīšanu perform_full_suspension: Apturēt @@ -192,12 +197,7 @@ lv: reset: Atiestatīt reset_password: Atiestatīt paroli resubscribe: Pieteikties vēlreiz - role: Privilēģijas - roles: - admin: Administrators - moderator: Moderators - staff: Personāls - user: Lietotājs + role: Loma search: Meklēt search_same_email_domain: Citi lietotāji ar tādu pašu e-pasta domēnu search_same_ip: Citi lietotāji ar tādu pašu IP @@ -663,6 +663,69 @@ lv: unresolved: Neatrisinātie updated_at: Atjaunināts view_profile: Skatīt profilu + roles: + add_new: Pievienot lomu + assigned_users: + one: "%{count} lietotājs" + other: "%{count} lietotāji" + zero: "%{count} lietotāju" + categories: + administration: Administrēšana + devops: Izstrādātāji + invites: Uzaicinājumi + moderation: Moderācija + special: Īpašās + delete: Dzēst + description_html: Izmantojot lietotāju lomas, vari pielāgot, kurām Mastodon funkcijām un apgabaliem var piekļūt tavi lietotāji. + edit: Rediģēt lomu '%{name}' + everyone: Noklusētās atļaujas + everyone_full_description_html: Šī ir pamata loma, kas ietekmē visus lietotājus, pat tos, kuriem nav piešķirta loma. Visas pārējās lomas manto atļaujas no šīs. + permissions_count: + one: "%{count} atļauja" + other: "%{count} atļaujas" + zero: "%{count} atļauju" + privileges: + administrator: Administrators + administrator_description: Lietotāji ar šo atļauju apies visas atļaujas + delete_user_data: Dzēst Lietotāja Datus + delete_user_data_description: Ļauj lietotājiem bez kavēšanās dzēst citu lietotāju datus + invite_users: Uzaicināt Lietotājus + invite_users_description: Ļauj lietotājiem uzaicināt jaunus cilvēkus uz šo serveri + manage_announcements: Pārvaldīt Paziņojumus + manage_announcements_description: Ļauj lietotājiem pārvaldīt paziņojumus serverī + manage_appeals: Pārvaldīt Pārsūdzības + manage_appeals_description: Ļauj lietotājiem izskatīt apelācijas pret regulēšanas darbībām + manage_blocks: Pārvaldīt Bloķus + manage_blocks_description: Ļauj lietotājiem bloķēt e-pasta pakalpojumu sniedzējus un IP adreses + manage_custom_emojis: Pārvaldīt Pielāgotās Emocijzīmes + manage_custom_emojis_description: Ļauj lietotājiem pārvaldīt pielāgotās emocijzīmes serverī + manage_federation: Pārvaldīt Federāciju + manage_federation_description: Ļauj lietotājiem bloķēt vai atļaut federāciju ar citiem domēniem un kontrolēt piegādi + manage_invites: Pārvaldīt Uzaicinājumus + manage_invites_description: Ļauj lietotājiem pārlūkot un deaktivizēt uzaicinājuma saites + manage_reports: Pārvaldīt Pārskatus + manage_reports_description: Ļauj lietotājiem pārskatīt pārskatus un veikt pret tiem regulēšanas darbības + manage_roles: Pārvaldīt Lomas + manage_roles_description: Ļauj lietotājiem pārvaldīt un piešķirt lomas, kas ir zemākas par viņu lomu + manage_rules: Pārvaldīt Noteikumus + manage_rules_description: Ļauj lietotājiem mainīt servera noteikumus + manage_settings: Pārvaldīt Iestatījumus + manage_settings_description: Ļauj lietotājiem mainīt vietnes uzstādījumus + manage_taxonomies: Pārvaldīt Taksonomijas + manage_taxonomies_description: Ļauj lietotājiem pārskatīt aktuālo saturu un atjaunināt atsauces iestatījumus + manage_user_access: Pārvaldīt Lietotāju Piekļuves + manage_user_access_description: Ļauj lietotājiem atspējot citu lietotāju divu faktoru autentifikāciju, mainīt savu e-pasta adresi un atiestatīt paroli + manage_users: Pārvaldīt Lietotājus + manage_users_description: Ļauj lietotājiem skatīt citu lietotāju informāciju un veikt pret viņiem regulēšanas darbības + manage_webhooks: Pārvaldīt Tīmekļa Aizķeres + manage_webhooks_description: Ļauj lietotājiem iestatīt tīmekļa aizķeres administratīviem pasākumiem + view_audit_log: Skatīt Audita Žurnālu + view_audit_log_description: Ļauj lietotājiem redzēt serverī veikto administratīvo darbību vēsturi + view_dashboard: Skatīt Informācijas Paneli + view_dashboard_description: Ļauj lietotājiem piekļūt informācijas panelim un dažādiem rādītājiem + view_devops: Izstrādātāji + view_devops_description: Ļauj lietotājiem piekļūt Sidekiq un pgHero informācijas paneļiem + title: Lomas rules: add_new: Pievienot noteikumu delete: Dzēst @@ -715,9 +778,6 @@ lv: deletion: desc_html: Atļaut ikvienam dzēst savu kontu title: Atvērt konta dzēšanu - min_invite_role: - disabled: Nevienam - title: Atļaut uzaicinājumus require_invite_text: desc_html: 'Ja reģistrācijai nepieciešama manuāla apstiprināšana, izdari, lai teksta: “Kāpēc vēlaties pievienoties?” ievade ir obligāta, nevis neobligāts' title: Pieprasīt jauniem lietotājiem ievadīt pievienošanās iemeslu @@ -730,9 +790,6 @@ lv: show_known_fediverse_at_about_page: desc_html: Ja šī funkcija ir atspējota, tā ierobežo publisko ziņu lentu, kas ir saistīta ar galveno lapu, lai parādītu tikai vietējo saturu title: Iekļaut federēto saturu neautentificētā publiskā ziņu lentas lapā - show_staff_badge: - desc_html: Parāda personāla emblēmu lietotāja lapā - title: Parādīt personāla emblēmu site_description: desc_html: Ievadpunkts par API. Apraksti, kas padara šo Mastodon serveri īpašu, un jebko citu svarīgu. Vari izmantot HTML tagus, jo īpaši <a> un <em>. title: Servera apraksts @@ -1142,15 +1199,25 @@ lv: public: Publiskās ziņu lentas thread: Sarunas edit: + add_keyword: Pievienot atslēgvārdu + keywords: Atslēgvārdi title: Rediģēt filtru errors: + deprecated_api_multiple_keywords: Šos parametrus šajā lietojumprogrammā nevar mainīt, jo tie attiecas uz vairāk nekā vienu filtra atslēgvārdu. Izmanto jaunāku lietojumprogrammu vai tīmekļa saskarni. invalid_context: Nav, vai piegādāts nederīgs konteksts - invalid_irreversible: Neatgriezeniskā filtrēšana darbojas tikai sākuma vai paziņojumu kontekstā index: + contexts: Filtri %{contexts} delete: Dzēst empty: Tev nav filtru. + expires_in: Beidzas %{distance} + expires_on: Beidzas %{date} + keywords: + one: "%{count} atsēgvārds" + other: "%{count} atslēgvārdi" + zero: "%{count} atslēgvārdu" title: Filtri new: + save: Saglabāt jauno filtru title: Pievienot jaunu filtru footer: developers: Izstrādātāji @@ -1271,6 +1338,8 @@ lv: copy_account_note_text: 'Šis lietotājs pārcēlās no %{acct}, šeit bija tavas iepriekšējās piezīmes par viņu:' notification_mailer: admin: + report: + subject: "%{name} iesniedza ziņojumu" sign_up: subject: "%{name} ir pierakstījies" digest: diff --git a/config/locales/ml.yml b/config/locales/ml.yml index f035633ca9b..76a3ec07cef 100644 --- a/config/locales/ml.yml +++ b/config/locales/ml.yml @@ -35,7 +35,6 @@ ml: posts_tab_heading: ടൂട്ടുകൾ posts_with_replies: ടൂട്ടുകളും മറുപടികളും roles: - admin: അഡ്‌മിന്‍ bot: ബോട്ട് group: ഗ്രൂപ്പ് unavailable: പ്രൊഫൈൽ ലഭ്യമല്ല @@ -47,7 +46,6 @@ ml: avatar: അവതാർ by_domain: മേഖല change_email: - changed_msg: അംഗത്തിന്റെ ഇലക്ട്രോണിക് കത്തിന്റെ മേൽവിലാസം വിജയകരമായി മാറ്റിയിരിക്കുന്നു! current_email: ഇപ്പോഴത്തെ ഇലക്ട്രോണിക് കത്തിന്റെ മേൽവിലാസം label: മാറിയ ഇലക്ട്രോണിക് കത്തിന്റെ മേൽവിലാസം new_email: പുതിയ ഇലക്ട്രോണിക് കത്ത് @@ -83,9 +81,6 @@ ml: success: സ്ഥിരീകരണ ഇമെയിൽ വിജയകരമായി അയച്ചു! reset: പുനഃക്രമീകരിക്കുക reset_password: പാസ്‌വേഡ് പുനഃക്രമീകരിക്കുക - role: അനുമതികൾ - roles: - user: ഉപയോക്താവ് search: തിരയുക title: അക്കൗണ്ടുകൾ unconfirmed_email: സ്ഥിരീകരിക്കാത്ത ഇമെയിൽ diff --git a/config/locales/ms.yml b/config/locales/ms.yml index d400d3256a0..36aa351d9d4 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -75,10 +75,8 @@ ms: posts_tab_heading: Hantaran posts_with_replies: Hantaran dan balasan roles: - admin: Pentadbir bot: Bot group: Kumpulan - moderator: Penyederhana unavailable: Profil tidak tersedia unfollow: Nyahikut admin: @@ -97,7 +95,6 @@ ms: avatar: Avatar by_domain: Domain change_email: - changed_msg: E-mel akaun telah berjaya ditukar! current_email: E-mel semasa label: Ubah e-mel new_email: E-mel baharu @@ -172,12 +169,6 @@ ms: reset: Tetapkan semula reset_password: Tetapkan semula kata laluan resubscribe: Langgan semula - role: Kebenaran - roles: - admin: Pentadbir - moderator: Penyederhana - staff: Kakitangan - user: Pengguna search: Cari search_same_email_domain: Pengguna lain dengan domain e-mel yang sama search_same_ip: Pengguna lain dengan alamat IP yang sama @@ -529,9 +520,6 @@ ms: deletion: desc_html: Benarkan sesiapapun memadamkan akaun mereka title: Buka pemadaman akaun - min_invite_role: - disabled: Tiada sesiapa - title: Benarkan jemputan dari require_invite_text: desc_html: Apabila pendaftaran memerlukan kelulusan manual, tandakan input teks "Kenapa anda mahu menyertai?" sebagai wajib, bukan pilihan title: Memerlukan alasan bagi pengguna baru untuk menyertai diff --git a/config/locales/nl.yml b/config/locales/nl.yml index b5040153e12..08ccb823c4d 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -81,10 +81,8 @@ nl: posts_tab_heading: Berichten posts_with_replies: Berichten en reacties roles: - admin: Beheerder bot: Bot group: Groep - moderator: Moderator unavailable: Profiel niet beschikbaar unfollow: Ontvolgen admin: @@ -103,7 +101,6 @@ nl: avatar: Avatar by_domain: Domein change_email: - changed_msg: E-mailadres van account succesvol veranderd! current_email: Huidig e-mailadres label: E-mailadres wijzigen new_email: Nieuw e-mailadres @@ -135,7 +132,7 @@ nl: invite_request_text: Redenen om te registreren invited_by: Uitgenodigd door ip: IP - joined: Geregistreerd in + joined: Geregistreerd location: all: Alles local: Lokaal @@ -160,7 +157,7 @@ nl: not_subscribed: Niet geabonneerd pending: Moet nog beoordeeld worden perform_full_suspension: Opschorten - previous_strikes: Vorige overtredingen + previous_strikes: Eerdere overtredingen previous_strikes_description_html: one: Dit account heeft één overtreding. other: Dit account heeft %{count} overtredingen. @@ -183,12 +180,6 @@ nl: reset: Opnieuw reset_password: Wachtwoord opnieuw instellen resubscribe: Opnieuw abonneren - role: Bevoegdheden - roles: - admin: Beheerder - moderator: Moderator - staff: Medewerkers - user: Gebruiker search: Zoeken search_same_email_domain: Andere gebruikers met hetzelfde e-maildomein search_same_ip: Andere gebruikers met hetzelfde IP-adres @@ -202,6 +193,7 @@ nl: silenced: Beperkt statuses: Berichten subscribe: Abonneren + suspend: Opschorten suspended: Opgeschort suspension_irreversible: De gegevens van dit account zijn onomkeerbaar verwijderd. Je kunt het opschorten van dit account ongedaan maken zodat het weer valt te gebruiken, maar de verwijderde gegevens worden hiermee niet hersteld. suspension_reversible_hint_html: Dit account is opgeschort en de gegevens worden volledig verwijderd op %{date}. Tot die tijd kan dit account worden hersteld zonder nadelige gevolgen. Wanneer je alle gegevens van dit account onmiddellijk wilt verwijderen, kun je dit hieronder doen. @@ -220,6 +212,7 @@ nl: whitelisted: Goedgekeurd voor federatie action_logs: action_types: + approve_appeal: Bezwaar goedkeuren assigned_to_self_report: Rapportage toewijzen change_email_user: E-mailadres van gebruiker wijzigen confirm_user: Gebruiker bevestigen @@ -247,6 +240,7 @@ nl: enable_user: Gebruiker inschakelen memorialize_account: Het account in een In memoriam veranderen promote_user: Gebruiker promoveren + reject_appeal: Bezwaar verwerpen remove_avatar_user: Avatar verwijderen reopen_report: Rapportage heropenen reset_password_user: Wachtwoord opnieuw instellen @@ -263,6 +257,7 @@ nl: update_domain_block: Domeinblokkade bijwerken update_status: Bericht bijwerken actions: + approve_appeal_html: "%{name} heeft het bezwaar tegen de moderatie-actie van %{target} goedgekeurd" assigned_to_self_report_html: "%{name} heeft rapportage %{target} aan zichzelf toegewezen" change_email_user_html: "%{name} veranderde het e-mailadres van gebruiker %{target}" confirm_user_html: E-mailadres van gebruiker %{target} is door %{name} bevestigd @@ -290,6 +285,7 @@ nl: enable_user_html: Inloggen voor %{target} is door %{name} ingeschakeld memorialize_account_html: Het account %{target} is door %{name} in een In memoriam veranderd promote_user_html: Gebruiker %{target} is door %{name} gepromoveerd + reject_appeal_html: "%{name} heeft het bezwaar tegen de moderatie-actie van %{target} verworpen" remove_avatar_user_html: "%{name} verwijderde de avatar van %{target}" reopen_report_html: "%{name} heeft rapportage %{target} heropend" reset_password_user_html: Wachtwoord van gebruiker %{target} is door %{name} opnieuw ingesteld @@ -360,9 +356,26 @@ nl: updated_msg: Bijwerken van emoji is geslaagd! upload: Uploaden dashboard: + active_users: actieve gebruikers + interactions: interacties + media_storage: Opgeslagen mediabestanden + new_users: nieuwe gebruikers + opened_reports: aangemaakte rapportages + pending_appeals_html: + one: "%{count} bezwaar te beoordelen" + other: "%{count} bezwaren te beoordelen" + resolved_reports: opgeloste rapportages software: Software + sources: Locatie van registratie space: Ruimtegebruik title: Dashboard + top_languages: Meest actieve talen + top_servers: Meest actieve servers + website: Website + disputes: + appeals: + empty: Geen bezwaren gevonden. + title: Bezwaren domain_allows: add_new: Federatie met domein goedkeuren created_msg: Federatie met domein is succesvol goedgekeurd @@ -400,6 +413,9 @@ nl: add_new: Nieuwe toevoegen created_msg: Blokkeren e-maildomein geslaagd delete: Verwijderen + dns: + types: + mx: MX-record domain: Domein new: create: Blokkeren @@ -414,13 +430,37 @@ nl: title: Aanbevolen accounts unsuppress: Account weer aanbevelen instances: + availability: + title: Beschikbaarheid + warning: De laatste poging om met deze server te verbinden was onsuccesvol back_to_all: Alles back_to_limited: Beperkt back_to_warning: Waarschuwing by_domain: Domein + content_policies: + comment: Interne reden + description_html: Je kunt het beleid bepalen dat op de accounts van dit domein en alle subdomeinen van toepassing is. + policies: + reject_media: Mediabestanden weigeren + reject_reports: Rapportages weigeren + silence: Beperkt + suspend: Opgeschort + policy: Zwaarte + reason: Publieke reden + title: Beleid + dashboard: + instance_accounts_dimension: Meest door ons gevolgde accounts + instance_accounts_measure: opgeslagen accounts + instance_followers_measure: daar ons daar gevolgd + instance_follows_measure: door hun hier gevolgd + instance_languages_dimension: Meest actieve talen + instance_media_attachments_measure: opgeslagen mediabestanden + instance_reports_measure: rapportages over hun + instance_statuses_measure: opgeslagen berichten delivery: all: Alles clear: Bezorgfouten weghalen + failing: Problemen restart: Bezorging herstarten stop: Bezorging beëindigen unavailable: Niet beschikbaar @@ -434,6 +474,7 @@ nl: title: Moderatie private_comment: Privé-opmerking public_comment: Openbare opmerking + purge: Volledig verwijderen title: Federatie total_blocked_by_us: Door ons geblokkeerd total_followed_by_them: Door hun gevolgd @@ -489,14 +530,17 @@ nl: notes: one: "%{count} opmerking" other: "%{count} opmerkingen" + action_log: Auditlog action_taken_by: Actie uitgevoerd door are_you_sure: Weet je het zeker? assign_to_self: Aan mij toewijzen assigned: Toegewezen moderator by_target_domain: Domein van gerapporteerde account + category: Category comment: none: Geen created_at: Gerapporteerd op + delete_and_resolve: Bericht verwijderen forwarded: Doorgestuurd forwarded_to: Doorgestuurd naar %{domain} mark_as_resolved: Markeer als opgelost @@ -507,17 +551,20 @@ nl: create_and_unresolve: Heropenen met opmerking delete: Verwijderen placeholder: Beschrijf welke acties zijn ondernomen of andere gerelateerde opmerkingen… + title: Opmerkingen reopen: Rapportage heropenen report: 'Rapportage #%{id}' reported_account: Gerapporteerde account reported_by: Gerapporteerd door resolved: Opgelost resolved_msg: Rapportage succesvol opgelost! - status: Bericht + status: Rapportages + target_origin: Herkomst van de gerapporteerde accounts title: Rapportages unassign: Niet langer toewijzen unresolved: Onopgelost updated_at: Bijgewerkt + view_profile: Profiel bekijken rules: add_new: Regel toevoegen delete: Verwijderen @@ -570,9 +617,6 @@ nl: deletion: desc_html: Toestaan dat iedereen diens eigen account kan verwijderen title: Verwijderen account toestaan - min_invite_role: - disabled: Niemand - title: Uitnodigingen toestaan door require_invite_text: desc_html: Maak het invullen van "Waarom wil je je hier registreren?" verplicht in plaats van optioneel, wanneer registraties handmatig moeten worden goedgekeurd title: Nieuwe gebruikers moeten een reden invullen waarom ze zich willen registreren @@ -585,9 +629,6 @@ nl: show_known_fediverse_at_about_page: desc_html: Wanneer ingeschakeld wordt de globale tijdlijn op de voorpagina getoond en wanneer uitgeschakeld de lokale tijdlijn title: De globale tijdlijn op de openbare tijdlijnpagina tonen - show_staff_badge: - desc_html: Medewerkersbadge op profielpagina tonen - title: Medewerkersbadge tonen site_description: desc_html: Introductie-alinea voor de API. Beschrijf wat er speciaal is aan deze server en andere zaken die van belang zijn. Je kan HTML gebruiken, zoals <a> en <em>. title: Omschrijving Mastodonserver (API) @@ -619,12 +660,17 @@ nl: destroyed_msg: Verwijderen website-upload geslaagd! statuses: back_to_account: Terug naar accountpagina + batch: + report: Rapportage deleted: Verwijderd media: title: Media no_status_selected: Er werden geen berichten gewijzigd, omdat er geen enkele werd geselecteerd title: Berichten van account with_media: Met media + strikes: + appeal_approved: Bezwaar ingediend + appeal_pending: Bezwaar in behandeling system_checks: database_schema_check: message_html: Niet alle databasemigraties zijn voltooid. Je moet deze uitvoeren om er voor te zorgen dat de applicatie blijft werken zoals het hoort @@ -637,6 +683,20 @@ nl: review: Status beoordelen updated_msg: Instellingen hashtag succesvol bijgewerkt title: Beheer + trends: + allow: Toestaan + disallow: Weigeren + links: + allow: Link toestaan + allow_provider: Uitgever toestaan + title: Trending links + only_allowed: Alleen toegestaan + pending_review: In afwachting van beoordeling + preview_card_providers: + title: Uitgevers + rejected: Geweigerd + statuses: + allow: Bericht toestaan warning_presets: add_new: Nieuwe toevoegen delete: Verwijderen @@ -644,6 +704,18 @@ nl: empty: Je hebt nog geen presets voor waarschuwingen toegevoegd. title: Presets voor waarschuwingen beheren admin_mailer: + new_appeal: + actions: + delete_statuses: het verwijderen van diens berichten + disable: het bevriezen van diens account + mark_statuses_as_sensitive: het markeren van diens berichten als gevoelig + none: een waarschuwing + sensitive: het gevoelig forceren van diens account + silence: het beperken van diens account + suspend: het opschorten van diens account + body: "%{target} maakt bezwaar tegen een moderatie-actie door %{action_taken_by} op %{date}, betreffende %{type}. De gebruiker schrijft:" + next_steps: Je kunt het bezwaar goedkeuren om daarmee de moderatie-actie ongedaan te maken, of je kunt het verwerpen. + subject: "%{username} maakt bezwaar tegen een moderatie-actie op %{instance}" new_pending_account: body: Zie hieronder de details van het nieuwe account. Je kunt de aanvraag goedkeuren of afkeuren. subject: Er dient een nieuw account op %{instance} te worden beoordeeld (%{username}) @@ -789,14 +861,18 @@ nl: explore_mastodon: "%{title} verkennen" disputes: strikes: - appeal: Beroep - appeal_approved: Het aangetekende beroep is goedgekeurd en deze overtreding is niet langer geldig - appeal_rejected: Het aangetekende beroep is afgewezen - appeal_submitted_at: Beroep aangetekend - appealed_msg: Jouw aangetekende beroep is ingediend. Wanneer deze wordt goedgekeurd, krijg je hiervan bericht. + appeal: Bezwaar + appeal_approved: Het ingediende bezwaar is goedgekeurd en de eerder vastgestelde overtreding is niet langer geldig + appeal_rejected: Het ingediende bezwaar is verworpen + appeal_submitted_at: Bezwaar ingediend + appealed_msg: Jouw bezwaar is ingediend. Wanneer deze wordt goedgekeurd, krijg je hiervan bericht. appeals: - submit: Beroep aantekenen - approve_appeal: Beroep goedkeuren + submit: Bezwaar indienen + approve_appeal: Bezwaar goedkeuren + reject_appeal: Bezwaar verworpen + your_appeal_approved: Jouw bezwaar is goedgekeurd + your_appeal_pending: Je hebt een bezwaar ingediend + your_appeal_rejected: Jouw bezwaar is verworpen domain_validator: invalid_domain: is een ongeldige domeinnaam errors: @@ -845,15 +921,24 @@ nl: public: Openbare tijdlijnen thread: Gesprekken edit: + add_keyword: Trefwoord toevoegen + keywords: Trefwoorden title: Filter bewerken errors: + deprecated_api_multiple_keywords: Deze instellingen kunnen niet via deze applicatie worden veranderd, omdat er meer dan één trefwoord wordt gebruikt. Gebruik een meer recente applicatie of de webomgeving. invalid_context: Geen of ongeldige context verstrekt - invalid_irreversible: Onomkeerbaar filteren werkt alleen met de starttijdlijn en meldingen index: + contexts: Filters in %{contexts} delete: Verwijderen empty: Je hebt geen filters aangemaakt. + expires_in: Vervalt na %{distance} + expires_on: Vervalt op %{date} + keywords: + one: "%{count} trefwoord" + other: "%{count} trefwoorden" title: Filters new: + save: Nieuwe filter opslaan title: Nieuw filter toevoegen footer: developers: Ontwikkelaars @@ -960,6 +1045,9 @@ nl: carry_mutes_over_text: Deze gebruiker is verhuisd vanaf %{acct}. Je hebt dat account genegeerd. copy_account_note_text: 'Deze gebruiker is verhuisd vanaf %{acct}. Je hebt de volgende opmerkingen over dat account gemaakt:' notification_mailer: + admin: + report: + subject: "%{name} heeft een rapportage ingediend" digest: action: Alle meldingen bekijken body: Hier is een korte samenvatting van de berichten die je sinds jouw laatste bezoek op %{since} hebt gemist @@ -1188,10 +1276,23 @@ nl: public_long: Aan iedereen tonen, ook op openbare tijdlijnen unlisted: Minder openbaar unlisted_long: Aan iedereen tonen, maar niet op openbare tijdlijnen + statuses_cleanup: + min_age: + '1209600': 2 weken + '15778476': 6 maanden + '2629746': 1 maand + '31556952': 1 jaar + '5259492': 2 maanden + '604800': 1 week + '63113904': 2 jaar + '7889238': 3 maanden stream_entries: pinned: Vastgemaakt bericht reblogged: boostte sensitive_content: Gevoelige inhoud + strikes: + errors: + too_late: De periode dat je bezwaar kon maken is verstreken tags: does_not_match_previous_name: komt niet overeen met de vorige naam terms: @@ -1301,11 +1402,22 @@ nl: recovery_instructions_html: Wanneer je ooit de toegang verliest tot jouw telefoon, kan je met behulp van een van de herstelcodes hieronder opnieuw toegang krijgen tot jouw account. Zorg ervoor dat je de herstelcodes op een veilige plek bewaard. Je kunt ze bijvoorbeeld printen en ze samen met andere belangrijke documenten bewaren. webauthn: Beveiligingssleutels user_mailer: + appeal_approved: + action: Ga naar je account + explanation: Het bezwaar tegen een door een moderator vastgestelde overtreding van jou op %{strike_date}, ingediend op %{appeal_date}, is goedgekeurd. De eerder vastgestelde overtreding is hierbij niet langer geldig. + subject: Jouw bezwaar van %{date} is goedgekeurd + title: Bezwaar goedgekeurd + appeal_rejected: + explanation: Het bezwaar tegen een door een moderator vastgestelde overtreding van jou op %{strike_date}, ingediend op %{appeal_date}, is verworpen. De vastgestelde overtreding blijft daarom ongewijzigd. + subject: Jouw bezwaar van %{date} is verworpen + title: Bezwaar verworpen backup_ready: explanation: Je hebt een volledige back-up van jouw Mastodon-account opgevraagd. Het staat nu klaar om te worden gedownload! subject: Jouw archief staat klaar om te worden gedownload title: Archief ophalen warning: + appeal: Bezwaar indienen + appeal_description: Wanneer je denkt dat dit een fout is, kun je een bezwaar indienen bij de medewerkers van %{instance}. explanation: mark_statuses_as_sensitive: Sommige van jouw berichten zijn als gevoelig gemarkeerd door de moderatoren van %{instance}. Dit betekent dat mensen op de media in de berichten moeten klikken/tikken om deze weer te geven. Je kunt media in de toekomst ook zelf als gevoelig markeren. sensitive: Vanaf nu worden al jouw geüploade media als gevoelig gemarkeerd en verborgen achter een waarschuwing. diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 5218270da46..14f9b95adfa 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -74,10 +74,8 @@ nn: posts_tab_heading: Tut posts_with_replies: Tut og svar roles: - admin: Administrator bot: Robot group: Gruppe - moderator: Moderator unavailable: Profil ikkje tilgjengeleg unfollow: Slutt å fylgja admin: @@ -96,7 +94,6 @@ nn: avatar: Bilete by_domain: Domene change_email: - changed_msg: Konto-e-posten er endra! current_email: Noverande e-post label: Byt e-post new_email: Ny e-post @@ -173,12 +170,6 @@ nn: reset: Attstill reset_password: Attstill passord resubscribe: Ting på nytt - role: Løyve - roles: - admin: Administrator - moderator: Ordstyrer - staff: Personell - user: Brukar search: Søk search_same_email_domain: Andre brukarar med same e-postdomene search_same_ip: Andre brukarar med same IP @@ -529,9 +520,6 @@ nn: deletion: desc_html: Tillat alle å sletta kontoen sin title: Åpne kontosletting - min_invite_role: - disabled: Ingen - title: Tillat innbydingar frå require_invite_text: desc_html: Når registreringer krever manuell godkjenning, må du føye «Hvorfor vil du bli med?» tekstinput obligatoriske i stedet for valgfritt title: Krev nye brukere for å oppgi en grunn for å delta @@ -543,9 +531,6 @@ nn: title: Registreringsmodus show_known_fediverse_at_about_page: desc_html: Begrenser den offentlige tidslinjen som er knyttet til landingssiden når den er deaktivert, og viser bare lokalt innhold - show_staff_badge: - desc_html: Vis personalmerke på ei brukarside - title: Vis personalmerke site_description: desc_html: Vises som et avsnitt på forsiden og brukes som en meta-tagg. Du kan bruke HTML-tagger, spesielt <a> og <em>. title: Tenarskilding diff --git a/config/locales/no.yml b/config/locales/no.yml index 30b7a56fb7d..13f13d8bd45 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -77,10 +77,8 @@ posts_tab_heading: Tuter posts_with_replies: Tuter med svar roles: - admin: Administrator bot: Bot group: Gruppe - moderator: Moderere unavailable: Profilen er utilgjengelig unfollow: Slutt å følge admin: @@ -99,7 +97,6 @@ avatar: Profilbilde by_domain: Domene change_email: - changed_msg: Konto-E-postadressen ble vellykket endret! current_email: Nåværende E-post label: Endre e-post new_email: Ny E-post @@ -176,12 +173,6 @@ reset: Tilbakestill reset_password: Nullstill passord resubscribe: Abonner på nytt - role: Rettigheter - roles: - admin: Administrator - moderator: Ordstyrer - staff: Personale - user: Bruker search: Søk search_same_email_domain: Andre brukere med samme E-postdomene search_same_ip: Andre brukere med den samme IP-en @@ -529,9 +520,6 @@ deletion: desc_html: Tillat alle å slette sin konto title: Åpne kontosletting - min_invite_role: - disabled: Ingen - title: Tillat invitasjoner fra require_invite_text: desc_html: Når registreringer krever manuell godkjenning, må du føye «Hvorfor vil du bli med?» tekstinput obligatoriske i stedet for valgfritt title: Krev nye brukere for å oppgi en grunn for å delta @@ -543,9 +531,6 @@ title: Registreringsmodus show_known_fediverse_at_about_page: desc_html: Begrenser den offentlige tidslinjen som er knyttet til landingssiden når den er deaktivert, og viser bare lokalt innhold - show_staff_badge: - desc_html: Vis personalemerke på brukersiden - title: Vis personalemerke site_description: desc_html: Vises som et avsnitt på forsiden og brukes som en meta-tagg. Du kan bruke HTML-tagger, spesielt <a> og <em>. title: Nettstedsbeskrivelse diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 57cecbdc403..46394056714 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -71,10 +71,8 @@ oc: posts_tab_heading: Tuts posts_with_replies: Tuts e responsas roles: - admin: Admin bot: Robòt group: Grop - moderator: Moderador unavailable: Perfil indisponible unfollow: Quitar de sègre admin: @@ -92,7 +90,6 @@ oc: avatar: Avatar by_domain: Domeni change_email: - changed_msg: Adreça corrèctament cambiada ! current_email: Adreça actuala label: Cambiar d’adreça new_email: Novèla adreça @@ -160,12 +157,6 @@ oc: reset: Reïnicializar reset_password: Reïnicializar lo senhal resubscribe: Se tornar abonar - role: Autorizacions - roles: - admin: Administrator - moderator: Moderador - staff: Personnal - user: Uitlizaire search: Cercar search_same_ip: Autres utilizaires amb la meteissa IP security_measures: @@ -475,9 +466,6 @@ oc: deletion: desc_html: Autorizar lo monde a suprimir lor compte title: Possibilitat de suprimir lo compte - min_invite_role: - disabled: Degun - title: Autorizat amb invitacions registrations_mode: modes: approved: Validacion necessària per s’inscriure @@ -487,9 +475,6 @@ oc: show_known_fediverse_at_about_page: desc_html: Un còp activat mostrarà los tuts de totes los fediverse dins l’apercebut. Autrament mostrarà pas que los tuts locals. title: Mostrar los fediverse coneguts dins l’apercebut del flux - show_staff_badge: - desc_html: Mostrar lo badge Personal sus la pagina de perfil - title: Mostrar lo badge personal site_description: desc_html: Paragraf d’introduccion sus la pagina d’acuèlh. Explicatz çò que fa diferent aqueste servidor Mastodon e tot çò qu’es important de dire. Podètz utilizare de balises HTML, en particular <a> e<em>. title: Descripcion del servidor @@ -711,7 +696,6 @@ oc: title: Modificar lo filtre errors: invalid_context: Cap de contèxte o contèxte invalid fornit - invalid_irreversible: Lo filtratge irreversible fonciona pas qu’amb lo flux d’actualitat o en contèxte de notificacion index: delete: Suprimir empty: Avètz pas cap de filtre. diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 7557ab83f14..0044771fb34 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -40,6 +40,7 @@ pl: one: wpisu other: wpisów status_count_before: Są autorami + tagline: Zdecentralizowana sieć społecznościowa terms: Zasady użytkowania unavailable_content: Niedostępne treści unavailable_content_description: @@ -90,10 +91,8 @@ pl: posts_tab_heading: Wpisy posts_with_replies: Wpisy z odpowiedziami roles: - admin: Administrator bot: Bot group: Grupa - moderator: Moderator unavailable: Profil niedostępny unfollow: Przestań śledzić admin: @@ -112,12 +111,17 @@ pl: avatar: Awatar by_domain: Domena change_email: - changed_msg: Pomyślnie zmieniono adres e-mail konta! + changed_msg: Pomyślnie zmieniono adres e-mail! current_email: Obecny adres e-mail label: Zmień adres e-mail new_email: Nowy adres e-mail submit: Zmień adres e-mail title: Zmień adres e-mail dla %{username} + change_role: + changed_msg: Pomyślnie zmieniono rolę! + label: Zmień rolę + no_role: Brak roli + title: Zmień rolę dla %{username} confirm: Potwierdź confirmed: Potwierdzono confirming: Potwierdzanie @@ -161,6 +165,7 @@ pl: active: Aktywne all: Wszystkie pending: Oczekujące + silenced: Ograniczone suspended: Zawieszone title: Moderacja moderation_notes: Notatki moderacyjne @@ -168,6 +173,7 @@ pl: most_recent_ip: Ostatnie IP no_account_selected: Żadne konto nie zostało zmienione, bo żadne nie zostało wybrane no_limits_imposed: Nie nałożono ograniczeń + no_role_assigned: Nie przypisano żadnej roli not_subscribed: Nie zasubskrybowano pending: Oczekuje na przegląd perform_full_suspension: Zawieś @@ -196,12 +202,7 @@ pl: reset: Resetuj reset_password: Resetuj hasło resubscribe: Ponów subskrypcję - role: Uprawnienia - roles: - admin: Administrator - moderator: Moderator - staff: Ekipa - user: Użytkownik + role: Rola search: Szukaj search_same_email_domain: Inni użytkownicy z e-mail w tej domenie search_same_ip: Inni użytkownicy z tym samym IP @@ -499,6 +500,11 @@ pl: unsuppress: Przywróć polecenie śledzenia konta instances: availability: + description_html: + few: Jeśli dostarczenie do domeny nie powiedzie się %{count} dni bez powodzenia, nie zostaną podjęte dalsze próby dostawy, chyba że otrzymano dostawę od domeny. + many: Jeśli dostarczenie do domeny nie powiedzie się %{count} dni bez powodzenia, nie zostaną podjęte dalsze próby dostawy, chyba że otrzymano dostawę od domeny. + one: Jeśli dostarczenie do domeny nie powiedzie się %{count} dzień bez powodzenia, nie zostaną podjęte dalsze próby dostawy, chyba że otrzymano dostawę od domeny. + other: Jeśli dostarczenie do domeny nie powiedzie się %{count} dni bez powodzenia, nie zostaną podjęte dalsze próby dostawy, chyba że otrzymano dostawę od domeny. failure_threshold_reached: Próg niepowodzenia osiągnięty dnia %{date}. failures_recorded: few: Nieudane próby w %{count} różnych dniach. @@ -671,6 +677,54 @@ pl: unresolved: Nierozwiązane updated_at: Zaktualizowano view_profile: Wyświetl profil + roles: + add_new: Dodaj rolę + assigned_users: + few: "%{count} użytkowników" + many: "%{count} użytkowników" + one: "%{count} użytkownik" + other: "%{count} użytkowników" + categories: + administration: Administracja + devops: DevOps + invites: Zaproszenia + moderation: Moderacja + special: Specjalne + delete: Usuń + description_html: Za pomocą ról użytkownikówmożesz dostosowywać funkcje i obszary Mastodon, do których użytkownicy mogą uzyskać dostęp. + edit: Edytuj rolę '%{name}' + everyone: Domyślnie uprawnienia + everyone_full_description_html: To jest rola podstawowa wpływająca na wszystkich użytkowników, nawet tych, którzy nie mają przypisanej roli. Wszystkie inne role dziedziczą z niej uprawnienia. + privileges: + administrator: Administrator + administrator_description: Użytkownicy z tym uprawnieniem omijają każde uprawnienie + delete_user_data: Usuń dane użytkownika + delete_user_data_description: Pozwala użytkownikom na bezzwłoczne usuwanie danych innych użytkowników + invite_users: Zaproś użytkowników + invite_users_description: Pozwala użytkownikom zapraszać nowych ludzi na serwer + manage_announcements: Zarządzaj ogłoszeniami + manage_announcements_description: Pozwala użytkownikom zarządzać ogłoszeniami na serwerze + manage_appeals: Zarządzaj odwołaniami + manage_appeals_description: Pozwala użytkownikom przeglądać odwołania od działań moderacyjnych + manage_blocks: Zarządzaj blokami + manage_blocks_description: Pozwala użytkownikom na blokowanie dostawców poczty elektronicznej i adresów IP + manage_custom_emojis: Zarządzaj niestandardowymi emoji + manage_custom_emojis_description: Pozwala użytkownikom zarządzać niestandardowymi emoji na serwerze + manage_federation: Zarządzaj federacją + manage_federation_description: Pozwala użytkownikom na blokowanie lub zezwalanie federacji z innymi domenami i kontrolowanie doręczania + manage_invites: Zarządzaj zaproszeniami + manage_invites_description: Pozwala użytkownikom przeglądać i dezaktywować linki z zaproszeniami + manage_reports: Zarządzaj raportami + manage_reports_description: Pozwala użytkownikom przeglądać raporty i wykonywać przeciwko nim działania moderacyjne + manage_roles: Zarządzaj rolami + manage_roles_description: Pozwala użytkownikom zarządzać rolami i przypisywać role poniżej ich własnych + manage_rules: Zarządzaj regułami + manage_rules_description: Pozwala użytkownikom na zmianę reguł serwera + manage_settings: Zarządzaj ustawieniami + manage_settings_description: Pozwala użytkownikom na zmianę ustawień witryny + manage_taxonomies: Zarządzaj taksonomiami + manage_taxonomies_description: Pozwala użytkownikom przeglądać najpopularniejsze treści i aktualizować ustawienia hasztagów + manage_user_access: Zarządzaj dostępem użytkownika rules: add_new: Dodaj zasadę delete: Usuń @@ -723,9 +777,6 @@ pl: deletion: desc_html: Pozwól każdemu na usunięcie konta title: Możliwość usunięcia - min_invite_role: - disabled: Nikt - title: Kto może zapraszać użytkowników require_invite_text: desc_html: Kiedy rejestracje wymagają ręcznego zatwierdzenia, ustaw pole "Dlaczego chcesz dołączyć?" jako obowiązkowe, a nie opcjonalne title: Wymagaj od nowych użytkowników wypełnienia tekstu prośby o zaproszenie @@ -738,9 +789,6 @@ pl: show_known_fediverse_at_about_page: desc_html: Jeśli włączone, podgląd instancji będzie wyświetlał wpisy z całego Fediwersum. W innym przypadku, będą wyświetlane tylko lokalne wpisy. title: Pokazuj wszystkie znane wpisy na podglądzie instancji - show_staff_badge: - desc_html: Pokazuj odznakę uprawnień na stronie profilu użytkownika - title: Pokazuj odznakę administracji site_description: desc_html: Akapit wprowadzający, widoczny na stronie głównej. Opisz, co czyni tę instancję wyjątkową. Możesz korzystać ze znaczników HTML, w szczególności <a> i <em>. title: Opis serwera @@ -820,6 +868,11 @@ pl: description_html: Są to linki, które są obecnie często udostępniane przez konta, z których Twój serwer widzi posty. Może to pomóc Twoim użytkownikom dowiedzieć się, co dzieje się na świecie. Żadne linki nie są wyświetlane publicznie dopóki nie zaakceptujesz wydawcy. Możesz również zezwolić lub odrzucić indywidualne linki. disallow: Nie zezwalaj na link disallow_provider: Nie zezwalaj na wydawcę + shared_by_over_week: + few: Udostępnione przez %{count} osoby w ciągu ostatniego tygodnia + many: Udostępnione przez %{count} osób w ciągu ostatniego tygodnia + one: Udostępnione przez jedną osobę w ciągu ostatniego tygodnia + other: Udostępnione przez %{count} osoby w ciągu ostatniego tygodnia title: Popularne linki usage_comparison: Udostępnione %{today} razy dzisiaj, w porównaniu z %{yesterday} wczoraj only_allowed: Tylko dozwolone @@ -837,6 +890,11 @@ pl: disallow: Nie zezwalaj na post disallow_account: Nie zezwalaj na autora not_discoverable: Autor nie włączył opcji, by być wyświetlany w katalogu + shared_by: + few: Udostępnione i dodane do ulubionych %{friendly_count} razy + many: Udostępnione i dodane do ulubionych %{friendly_count} razy + one: Udostępnione lub dodane do ulubionych jednorazowo + other: Udostępnione i dodane do ulubionych %{friendly_count} razy title: Popularne teraz tags: current_score: Bieżący wynik %{score} @@ -1144,15 +1202,26 @@ pl: public: Publiczne osie czasu thread: Konwersacje edit: + add_keyword: Dodaj słowo kluczowe + keywords: Słowa kluczowe title: Edytuj filtr errors: + deprecated_api_multiple_keywords: Te parametry nie mogą zostać zmienione z tej aplikacji, ponieważ dotyczą więcej niż jednego słowa kluczowego. Użyj nowszej wersji aplikacji lub interfejsu internetowego. invalid_context: Nie podano lub podano nieprawidłową treść - invalid_irreversible: Nieodwracalne filtrowanie działa tylko na stronie głównej i w powiadomieniach index: + contexts: Filtry w %{contexts} delete: Usuń empty: Nie masz żadnych filtrów. + expires_in: Wygasa za %{distance} + expires_on: Wygasa %{date} + keywords: + few: "%{count} słowa kluczowe" + many: "%{count} słów kluczowych" + one: "%{count} słowo kluczowe" + other: "%{count} słów kluczowych" title: Filtry new: + save: Zapisz jako nowy filtr title: Dodaj nowy filtr footer: developers: Dla programistów @@ -1275,6 +1344,8 @@ pl: copy_account_note_text: 'Ten użytkownik przeniósł się z konta %{acct}, oto Twoje poprzednie notatki o nim:' notification_mailer: admin: + report: + subject: "%{name} wysłał raport" sign_up: subject: "%{name} zarejestrował(-a) się" digest: diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 7661df9a0d5..4a7800b605d 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -38,6 +38,7 @@ pt-BR: one: toot other: toots status_count_before: Autores de + tagline: Rede social descentralizada terms: Termos de serviço unavailable_content: Conteúdo indisponível unavailable_content_description: @@ -82,10 +83,8 @@ pt-BR: posts_tab_heading: Toots posts_with_replies: Toots e respostas roles: - admin: Admin bot: Robô group: Grupo - moderator: Moderador unavailable: Perfil indisponível unfollow: Deixar de seguir admin: @@ -104,7 +103,6 @@ pt-BR: avatar: Imagem de perfil by_domain: Domínio change_email: - changed_msg: E-mail da conta alterado com sucesso! current_email: E-mail atual label: Alterar e-mail new_email: Novo e-mail @@ -186,12 +184,6 @@ pt-BR: reset: Redefinir reset_password: Redefinir senha resubscribe: Reinscrever-se - role: Permissões - roles: - admin: Administrador - moderator: Moderador - staff: Equipe - user: Usuário search: Pesquisar search_same_email_domain: Outros usuários com o mesmo domínio de e-mail search_same_ip: Outros usuários com o mesmo IP @@ -695,9 +687,6 @@ pt-BR: deletion: desc_html: Permitir que qualquer um exclua a própria conta title: Exclusão aberta de contas - min_invite_role: - disabled: Ninguém - title: Permitir convites de require_invite_text: desc_html: Quando o cadastro de novas contas exigir aprovação manual, tornar obrigatório, ao invés de opcional, o texto de solicitação de convite em "Por que você deseja criar uma conta aqui?" title: Exigir que novos usuários preencham um texto de solicitação de convite @@ -710,9 +699,6 @@ pt-BR: show_known_fediverse_at_about_page: desc_html: Quando ativado, mostra toots globais na prévia da linha, se não, mostra somente toots locais title: Mostrar toots globais na prévia da linha - show_staff_badge: - desc_html: Mostrar uma insígnia de Equipe na página de usuário - title: Mostrar insígnia de equipe site_description: desc_html: Parágrafo introdutório na página inicial. Descreva o que faz esse servidor especial, e qualquer outra coisa de importante. Você pode usar tags HTML, em especial <a> e <em>. title: Descrição da instância @@ -746,6 +732,7 @@ pt-BR: back_to_account: Voltar para página da conta back_to_report: Voltar às denúncias batch: + remove_from_report: Remover do relatório report: Denunciar deleted: Excluídos media: @@ -753,9 +740,16 @@ pt-BR: no_status_selected: Nenhum status foi modificado porque nenhum estava selecionado title: Toots da conta with_media: Com mídia + strikes: + appeal_approved: Apelado + appeal_pending: Recurso pendente system_checks: database_schema_check: message_html: Existem migrações de banco de dados pendentes. Por favor, execute-as para garantir que o aplicativo se comporte como esperado + elasticsearch_running_check: + message_html: Não foi possível conectar ao Elasticsearch. Por favor, verifique se está em execução, ou desabilite a pesquisa de texto completo + elasticsearch_version_check: + message_html: 'Versão de Elasticsearch incompatível: %{value}' rules_check: action: Gerenciar regras do servidor message_html: Você não definiu nenhuma regra de servidor. @@ -808,6 +802,14 @@ pt-BR: edit_preset: Editar o aviso pré-definido empty: Você ainda não definiu nenhuma predefinição de alerta. title: Gerenciar os avisos pré-definidos + webhooks: + delete: Excluir + disable: Desabilitar + disabled: Desativado + enable: Habilitar + enabled: Ativo + events: Eventos + status: Status admin_mailer: new_appeal: actions: @@ -979,10 +981,12 @@ pt-BR: appealed_msg: Seu recurso foi enviado. Se ele for aprovado, você será notificado. appeals: submit: Enviar recurso + approve_appeal: Aprovar recurso associated_report: Relatório associado created_at: Datado description_html: Estas são ações tomadas contra sua conta e avisos que foram enviados a você pela equipe de %{instance}. recipient: Endereçado para + reject_appeal: Rejeitar recurso status: 'Postagem #%{id}' status_removed: Postagem já removida do sistema title: "%{action} de %{date}" @@ -1045,15 +1049,17 @@ pt-BR: public: Linhas públicas thread: Conversas edit: + add_keyword: Adicionar palavra-chave + keywords: Palavras-chave title: Editar filtro errors: invalid_context: Contexto inválido ou nenhum contexto informado - invalid_irreversible: O filtro irreversível só funciona com os contextos página inicial e notificações index: delete: Remover empty: Sem filtros. title: Filtros new: + save: Salvar novo filtro title: Adicionar filtro footer: developers: Desenvolvedores @@ -1172,6 +1178,8 @@ pt-BR: copy_account_note_text: 'Este usuário saiu de %{acct}, aqui estão suas notas anteriores sobre ele:' notification_mailer: admin: + report: + subject: "%{name} enviou uma denúncia" sign_up: subject: "%{name} se inscreveu" digest: @@ -1297,6 +1305,8 @@ pt-BR: reports: errors: invalid_rules: não faz referência a regras válidas + rss: + content_warning: 'Aviso de conteúdo:' scheduled_statuses: over_daily_limit: Você excedeu o limite de %{limit} toots agendados para esse dia over_total_limit: Você excedeu o limite de %{limit} toots agendados diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 9607762bbd5..4008bb2a2bb 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -83,10 +83,8 @@ pt-PT: posts_tab_heading: Publicações posts_with_replies: Posts e Respostas roles: - admin: Administrador(a) bot: Robô group: Grupo - moderator: Moderador unavailable: Perfil indisponível unfollow: Deixar de seguir admin: @@ -105,7 +103,6 @@ pt-PT: avatar: Imagem de Perfil by_domain: Domínio change_email: - changed_msg: E-mail da conta alterado com sucesso! current_email: E-mail atual label: Alterar e-mail new_email: Novo e-mail @@ -187,12 +184,6 @@ pt-PT: reset: Restaurar reset_password: Reset palavra-passe resubscribe: Reinscrever - role: Permissões - roles: - admin: Administrador(a) - moderator: Moderador - staff: Equipa - user: Utilizador search: Pesquisar search_same_email_domain: Outros utilizadores com o mesmo domínio de e-mail search_same_ip: Outros utilizadores com o mesmo IP @@ -701,9 +692,6 @@ pt-PT: deletion: desc_html: Permitir a qualquer utilizador eliminar a sua conta title: Permitir eliminar contas - min_invite_role: - disabled: Ninguém - title: Permitir convites de require_invite_text: desc_html: Quando os registos exigirem aprovação manual, faça o texto "Porque se quer juntar a nós?" da solicitação de convite obrigatório, em vez de opcional title: Exigir que novos utilizadores preencham um texto de solicitação de convite @@ -716,9 +704,6 @@ pt-PT: show_known_fediverse_at_about_page: desc_html: Quando comutado, irá mostrar a previsualização de publicações de todo o fediverse conhecido. De outro modo só mostrará publicações locais. title: Mostrar o fediverse conhecido na previsualização da cronologia - show_staff_badge: - desc_html: Mostrar um crachá da equipa na página de utilizador - title: Mostrar crachá da equipa site_description: desc_html: Mostrar como parágrafo na página inicial e usado como meta tag.Podes usar tags HTML, em particular <a> e <em>. title: Descrição do site @@ -1124,15 +1109,24 @@ pt-PT: public: Cronologias públicas thread: Conversações edit: + add_keyword: Adicionar palavra-chave + keywords: Palavras-chave title: Editar filtros errors: + deprecated_api_multiple_keywords: Estes parâmetros não podem ser alterados a partir deste aplicativo porque se aplicam a mais de um filtro de palavra-chave. Use um aplicativo mais recente ou a interface web. invalid_context: Inválido ou nenhum contexto fornecido - invalid_irreversible: Filtragem irreversível só funciona no contexto das notificações ou do início index: + contexts: Filtros em %{contexts} delete: Eliminar empty: Não tem filtros. + expires_in: Expira em %{distance} + expires_on: Expira em %{date} + keywords: + one: "%{count} palavra-chave" + other: "%{count} palavras-chaves" title: Filtros new: + save: Salvar novo filtro title: Adicionar novo filtro footer: developers: Responsáveis pelo desenvolvimento @@ -1251,6 +1245,8 @@ pt-PT: copy_account_note_text: 'Este utilizador migrou de %{acct}, aqui estão as suas notas anteriores sobre ele:' notification_mailer: admin: + report: + subject: "%{name} submeteu uma denúncia" sign_up: subject: "%{name} inscreveu-se" digest: diff --git a/config/locales/ro.yml b/config/locales/ro.yml index 3203e9178b6..8ed812e5b85 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -83,10 +83,8 @@ ro: posts_tab_heading: Postări posts_with_replies: Postări și răspunsuri roles: - admin: Admin bot: Robot group: Grup - moderator: Moderator unavailable: Profil indisponibil unfollow: Nu mai urmării admin: @@ -105,7 +103,6 @@ ro: avatar: Poză de profil by_domain: Domeniu change_email: - changed_msg: E-mail de cont schimbat cu succes! current_email: E-mailul curent label: Schimbă adresa de email new_email: E-mail nou @@ -183,12 +180,6 @@ ro: reset: Resetează reset_password: Resetează parola resubscribe: Resubscrie-te - role: Permisiuni - roles: - admin: Administrator - moderator: Moderator - staff: Personal - user: Utilizator search: Caută search_same_email_domain: Alţi utilizatori cu acelaşi domeniu de e-mail search_same_ip: Alţi utilizatori cu acelaşi IP @@ -417,7 +408,6 @@ ro: title: Editează filtru errors: invalid_context: Lipsa conținut sau acesta este invalid - invalid_irreversible: Filtrarea ireversibilă funcționează dor cu context din fluxul Acasă și notificări index: delete: Șterge title: Filtre diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 47f944129d9..515636d3505 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -91,10 +91,8 @@ ru: posts_tab_heading: Посты posts_with_replies: Посты с ответами roles: - admin: Администратор bot: Бот group: Группа - moderator: Модератор unavailable: Профиль недоступен unfollow: Отписаться admin: @@ -113,12 +111,17 @@ ru: avatar: Аватар by_domain: Домен change_email: - changed_msg: E-mail учётной записи успешно изменён! + changed_msg: Адрес эл. почты успешно изменен! current_email: Текущий e-mail label: Сменить e-mail new_email: Новый e-mail submit: Сменить e-mail title: Сменить e-mail для %{username} + change_role: + changed_msg: Роль успешно изменена! + label: Изменить роль + no_role: Нет роли + title: Изменить роль %{username} confirm: Подтвердить confirmed: Подтверждено confirming: Подтверждение @@ -162,6 +165,7 @@ ru: active: Действующие all: Все pending: В ожидании + silenced: Ограниченные suspended: Заблокированные title: Модерация moderation_notes: Заметки модератора @@ -169,6 +173,7 @@ ru: most_recent_ip: Последний IP no_account_selected: Ничего не изменилось, так как ни одна учётная запись не была выделена no_limits_imposed: Без ограничений + no_role_assigned: Роль не присвоена not_subscribed: Не подписаны pending: Ожидает рассмотрения perform_full_suspension: Блокировка @@ -197,12 +202,7 @@ ru: reset: Сбросить reset_password: Сбросить пароль resubscribe: Переподписаться - role: Разрешения - roles: - admin: Администратор - moderator: Модератор - staff: Персонал - user: Пользователь + role: Роль search: Поиск search_same_email_domain: Другие пользователи с тем же доменом электронной почты search_same_ip: Другие пользователи с таким же IP @@ -408,6 +408,11 @@ ru: many: "%{count} ожидающих отчетов" one: "%{count} ожидающий отчет" other: "%{count} ожидающих отчетов" + pending_tags_html: + few: "%{count} ожидающих хэштега" + many: "%{count} ожидающих хэштегов" + one: "%{count} ожидающий хэштег" + other: "%{count} ожидающих хэштегов" pending_users_html: few: "%{count} ожидающих пользователя" many: "%{count} ожидающих пользователей" @@ -494,6 +499,11 @@ ru: unsuppress: Восстановить рекомендацию instances: availability: + failures_recorded: + few: Попытки неудачны уже %{count} дня. + many: Попытки неудачны уже %{count} дней. + one: Попытки неудачны %{count} день. + other: Попытки неудачны уже %{count} дней. no_failures_recorded: Сбоев в записи нет. title: Доступность warning: Последняя попытка подключения к этому серверу не удалась @@ -650,6 +660,38 @@ ru: unresolved: Нерешённые updated_at: Обновлена view_profile: Открыть профиль + roles: + add_new: Добавить роль + assigned_users: + few: "%{count} пользователя" + many: "%{count} пользователей" + one: "%{count} пользователь" + other: "%{count} пользователей" + categories: + administration: Администрация + devops: DevOps + invites: Приглашения + moderation: Модерация + special: Особые + delete: Удалить + description_html: С помощью ролей пользователей вы можете настроить, к каким функциям и областям Mastodon у ваших пользователей будет доступ. + edit: Изменить роль '%{name}' ' + everyone: Разрешения по умолчанию + everyone_full_description_html: Это базовая роль, касающаяся всех пользователей, даже тех, кто не имеет назначенной роли. Все другие роли наследуют разрешения от нее. + permissions_count: + few: "%{count} разрешения" + many: "%{count} разрешений" + one: "%{count} разрешение" + other: "%{count} разрешений" + privileges: + administrator: Администратор + delete_user_data: Удалить пользовательские данные + delete_user_data_description: Позволяет пользователям удалять данные других пользователей без задержки + invite_users: Пригласить пользователей + invite_users_description: Позволяет пользователям приглашать новых людей на сервер + manage_announcements: Управление объявлениями + manage_announcements_description: Позволяет пользователям управлять объявлениями на сервере + title: Роли rules: add_new: Добавить правило delete: Удалить @@ -702,9 +744,6 @@ ru: deletion: desc_html: Позволяет всем удалять собственные учётные записи title: Разрешить удаление учётных записей - min_invite_role: - disabled: Никого - title: Разрешать приглашения от require_invite_text: desc_html: Когда регистрация требует ручного подтверждения, сделать ответ на вопрос "Почему вы хотите присоединиться?" обязательным, а не опциональным title: Обязать новых пользователей заполнять текст запроса на приглашение @@ -717,9 +756,6 @@ ru: show_known_fediverse_at_about_page: desc_html: Если включено, показывает посты со всех известных узлов в предпросмотре ленты. В противном случае отображаются только локальные посты. title: Показывать контент со всей федерации в публичной ленте неавторизованным пользователям - show_staff_badge: - desc_html: Показывать метку персонала на странице пользователя - title: Показывать метку персонала site_description: desc_html: Отображается в качестве параграфа на титульной странице и используется в качестве мета-тега.
    Можно использовать HTML-теги, в особенности <a> и <em>. title: Описание сайта @@ -816,6 +852,11 @@ ru: allow_account: Разрешить автора disallow: Запретить пост disallow_account: Запретить автора + shared_by: + few: Поделились или добавили в избранное %{friendly_count} раза + many: Поделились или добавили в избранное %{friendly_count} раз + one: Поделились или добавили в избранное один раз + other: Поделились или добавили в избранное %{friendly_count} раз title: Популярные посты tags: current_score: Текущий счет %{score} @@ -893,6 +934,7 @@ ru: new_trending_tags: no_approved_tags: На данный момент популярные подтвержденные хэштеги отсутствуют. title: Популярные хэштеги + subject: Новые тренды для проверки на %{instance} aliases: add_new: Создать псевдоним created_msg: Новый псевдоним установлен. Теперь мы можете начать миграцию со старой учётной записи. @@ -1109,15 +1151,26 @@ ru: public: Публичные ленты thread: Диалоги edit: + add_keyword: Добавить ключевое слово + keywords: Ключевые слова title: Изменить фильтр errors: + deprecated_api_multiple_keywords: Эти параметры нельзя изменить из этого приложения, так как применяются к более чем одному ключевому слову фильтра. Используйте более последнее приложение или веб-интерфейс. invalid_context: Некорректный контекст или ничего - invalid_irreversible: Необратимая фильтрация работает только с лентой уведомлений и домашней лентой index: + contexts: Фильтры по %{contexts} delete: Удалить empty: У вас пока нет фильтров. + expires_in: Истекает через %{distance} + expires_on: Истекает %{date} + keywords: + few: "%{count} ключевых слова" + many: "%{count} ключевых слов" + one: "%{count} ключевое слово" + other: "%{count} ключевых слов" title: Фильтры new: + save: Сохранить новый фильтр title: Добавить фильтр footer: developers: Разработчикам @@ -1240,6 +1293,8 @@ ru: copy_account_note_text: 'Этот пользователь переехал с %{acct}, вот ваша предыдущая заметка о нём:' notification_mailer: admin: + report: + subject: "%{name} отправил жалобу" sign_up: subject: "%{name} зарегистрирован" digest: diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 4906541437a..e6ee2bca9e9 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -79,10 +79,8 @@ sc: posts_tab_heading: Tuts posts_with_replies: Tuts e rispostas roles: - admin: Admin bot: Bot group: Grupu - moderator: Moderatzione unavailable: Su profilu no est a disponimentu unfollow: Non sigas prus admin: @@ -101,7 +99,6 @@ sc: avatar: Immàgine de profilu by_domain: Domìniu change_email: - changed_msg: As cambiadu s'indiritzu eletrònicu. current_email: Indiritzu eletrònicu atuale label: Muda s'indiritzu eletrònicu new_email: Indiritzu eletrònicu nou @@ -176,12 +173,6 @@ sc: reset: Reseta reset_password: Reseta sa crae resubscribe: Torra a sutascrìere - role: Permissos - roles: - admin: Amministratzione - moderator: Moderatzione - staff: Personale - user: Utente search: Chirca search_same_email_domain: Àteras persones cun su pròpiu domìniu de posta search_same_ip: Àteras persones cun sa pròpiu IP @@ -548,9 +539,6 @@ sc: deletion: desc_html: Permite a chie si siat de cantzellare su contu suo title: Aberi s'eliminatzione de su contu - min_invite_role: - disabled: Nemos - title: Permite invitos de require_invite_text: desc_html: Cando is registratziones rechedent s'aprovatzione manuale, faghe chi a incarcare su butone "Pro ite ti boles iscrìere?" siat obligatòriu e no a praghere title: Rechede a is persones noas chi iscriant una resone prima de aderire @@ -563,9 +551,6 @@ sc: show_known_fediverse_at_about_page: desc_html: Cando ativu, ammustrat in sa previsualizatzione is tuts de totu is istàntzias connòschidas. Si nono, ammustrat isceti is cuntenutos locales title: Include su cuntenutu federadu in sa pàgina no autenticada de sa lìnia de tempus pùblica - show_staff_badge: - desc_html: Ammustra un'insigna de personale in sa pàgina de utente - title: Ammustra insigna de personale site_description: desc_html: Paràgrafu de introdutzione a s'API. Descrie pro ite custu serbidore de Mastodon siat ispetziale e cale si siat àtera cosa de importu. Podes impreare etichetas HTML, mescamente <a> e <em>. title: Descritzione de su serbidore @@ -816,7 +801,6 @@ sc: title: Modìfica filtru errors: invalid_context: Cuntestu mancante o non vàlidu - invalid_irreversible: Su filtràgiu non reversìbile funtzionat isceti in is cuntestos printzipale o de notìficas index: delete: Cantzella empty: Non tenes perunu filtru. diff --git a/config/locales/si.yml b/config/locales/si.yml index de029aa5015..811cd7a4728 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -1,66 +1,140 @@ --- si: about: + about_hashtag_html: මේවා #%{hashtag}ටැග් කර ඇති පොදු පළ කිරීම් වේ. ඔබට fediverse හි ඕනෑම තැනක ගිණුමක් තිබේ නම් ඔබට ඔවුන් සමඟ අන්තර් ක්‍රියා කළ හැක. + about_mastodon_html: 'අනාගත සමාජ ජාලය: දැන්වීම් නැත, ආයතනික නිරීක්ෂණ නැත, සදාචාරාත්මක සැලසුම් සහ විමධ්‍යගත කිරීම! Mastodon සමඟ ඔබේ දත්ත අයිති කරගන්න!' about_this: පිලිබඳව active_count_after: සක්‍රීයයි active_footnote: මාසික ක්‍රියාකාරී පරිශීලකයින් (මාක්‍රිප) + administered_by: 'පරිපාලනය කරන්නේ:' api: යෙ.ක්‍ර. මු. (API) apps: ජංගම යෙදුම් + apps_platforms: iOS, Android සහ වෙනත් වේදිකා වලින් Mastodon භාවිතා කරන්න + browse_directory: පැතිකඩ නාමාවලියක් පිරික්සන්න සහ රුචිකත්වයන් අනුව පෙරහන් කරන්න + browse_local_posts: මෙම සේවාදායකයෙන් පොදු පළ කිරීම් වල සජීවී ප්‍රවාහයක් බ්‍රවුස් කරන්න + browse_public_posts: Mastodon හි පොදු පළ කිරීම් වල සජීවී ප්‍රවාහයක් බ්‍රවුස් කරන්න contact: සබඳතාව - contact_missing: සකසා නැත + contact_missing: සකස් කර නැත contact_unavailable: අ/නොවේ + continue_to_web: වෙබ් යෙදුම වෙත ඉදිරියට යන්න + discover_users: පරිශීලකයන් සොයා ගන්න documentation: ප්‍රලේඛනය + federation_hint_html: "%{instance} හි ගිණුමක් සමඟින් ඔබට ඕනෑම Mastodon සේවාදායකයක සහ ඉන් ඔබ්බෙහි පුද්ගලයින් අනුගමනය කිරීමට හැකි වනු ඇත." get_apps: ජංගම යෙදුමක් උත්සාහ කරන්න + hosted_on: Mastodon %{domain}හි සත්කාරකත්වය දරයි + instance_actor_flash: | + මෙම ගිණුම සේවාදායකයම නියෝජනය කිරීමට භාවිතා කරන අතථ්‍ය නළුවෙකු වන අතර කිසිදු තනි පරිශීලකයෙකු නොවේ. + එය ෆෙඩරේෂන් අරමුණු සඳහා භාවිතා කරන අතර ඔබට සම්පූර්ණ අවස්ථාව අවහිර කිරීමට අවශ්‍ය නම් මිස අවහිර නොකළ යුතුය, මෙම අවස්ථාවේදී ඔබ ඩොමේන් බ්ලොක් එකක් භාවිතා කළ යුතුය. learn_more: තව දැනගන්න + logged_in_as_html: ඔබ දැනට %{username}ලෙස පුරනය වී ඇත. + logout_before_registering: ඔබ දැනටමත් පුරනය වී ඇත. privacy_policy: රහස්‍යතා ප්‍රතිපත්තිය rules: සේවාදායකයේ නීති + rules_html: 'ඔබට Mastodon හි මෙම සේවාදායකයේ ගිණුමක් ඇති කර ගැනීමට අවශ්‍ය නම් ඔබ අනුගමනය කළ යුතු නීති වල සාරාංශයක් පහත දැක්වේ:' + see_whats_happening: මොකද වෙන්නේ කියලා බලන්න + server_stats: 'සේවාදායක සංඛ්යාලේඛන:' source_code: මූල කේතය status_count_after: - one: තත්වය - other: තත්වයන් + one: තත්ත්වය + other: තත්ත්වයන් + status_count_before: කවුද පළ කළේ + tagline: විමධ්‍යගත සමාජ ජාලය terms: සේවාවේ කොන්දේසි + unavailable_content: මධ්‍යස්ථ සේවාදායකයන් unavailable_content_description: domain: සේවාදායකය reason: හේතුව + rejecting_media: 'මෙම සේවාදායකයන්ගෙන් මාධ්‍ය ගොනු සැකසීම හෝ ගබඩා කිරීම සිදු නොවනු ඇති අතර, මුල් ගොනුව වෙත අතින් ක්ලික් කිරීම අවශ්‍ය වන, සිඟිති රූ නොපෙන්වනු ඇත:' + rejecting_media_title: පෙරූ මාධ්‍ය + silenced: 'මෙම සේවාදායකයන්ගෙන් පළ කිරීම් පොදු කාලරේඛා සහ සංවාදවල සඟවනු ඇති අතර, ඔබ ඒවා අනුගමනය කරන්නේ නම් මිස, ඔවුන්ගේ පරිශීලක අන්තර්ක්‍රියාවලින් කිසිදු දැනුම්දීමක් ජනනය නොවේ:' silenced_title: සීමාසහිත සේවාදායක + suspended: 'මෙම සේවාදායකයන්ගෙන් කිසිදු දත්තයක් සැකසීම, ගබඩා කිරීම හෝ හුවමාරු කිරීම සිදු නොවනු ඇත, මෙම සේවාදායකයන්ගෙන් පරිශීලකයින් සමඟ කිසියම් අන්තර්ක්‍රියා හෝ සන්නිවේදනයක් කළ නොහැක:' suspended_title: අත්හිටවූ සේවාදායකයන් + unavailable_content_html: Mastodon සාමාන්‍යයෙන් ඔබට ෆෙඩිවර්ස් හි වෙනත් ඕනෑම සේවාදායකයකින් අන්තර්ගතය බැලීමට සහ පරිශීලකයින් සමඟ අන්තර් ක්‍රියා කිරීමට ඉඩ සලසයි. මෙම විශේෂිත සේවාදායකයේ සිදු කර ඇති ව්‍යතිරේක මේවාය. user_count_after: one: පරිශීලක other: පරිශීලකයින් + user_count_before: ගෙදරට what_is_mastodon: මාස්ටඩන් යනු කුමක්ද? accounts: + choices_html: "%{name}හි තේරීම්:" + endorsements_hint: ඔබට වෙබ් අතුරු මුහුණතෙන් ඔබ අනුගමනය කරන පුද්ගලයින් අනුමත කළ හැකි අතර, ඔවුන් මෙහි පෙන්වනු ඇත. + featured_tags_hint: ඔබට මෙහි සංදර්ශන කෙරෙන විශේෂිත හැෂ් ටැග් විශේෂාංගගත කළ හැක. + follow: අනුගමනය කරන්න + followers: + one: අනුගාමිකයා + other: අනුගාමිකයින් + following: අනුගමනය + instance_actor_flash: මෙම ගිණුම සේවාදායකයම නියෝජනය කිරීමට භාවිතා කරන අතථ්‍ය නළුවෙකු වන අතර කිසිදු තනි පරිශීලකයෙකු නොවේ. එය ෆෙඩරේෂන් අරමුණු සඳහා භාවිතා කරන අතර අත්හිටුවිය යුතු නොවේ. joined: "%{date} එක් වී ඇත" + last_active: අවසාන ක්රියාකාරී + link_verified_on: මෙම සබැඳියේ හිමිකාරිත්වය %{date}හි පරීක්ෂා කරන ලදී media: මාධ්‍යය + moved_html: "%{name} %{new_profile_link}මාරු වී ඇත:" + network_hidden: මෙම තොරතුරු ලබා ගත නොහැක nothing_here: මෙහි කිසිත් නැත! + people_followed_by: "%{name} අනුගමනය කරන පුද්ගලයින්" + people_who_follow: "%{name}අනුගමනය කරන පුද්ගලයින්" + pin_errors: + following: ඔබට අනුමත කිරීමට අවශ්‍ය පුද්ගලයා ඔබ දැනටමත් අනුගමනය කරමින් සිටිය යුතුය + posts: + one: තැපැල් + other: තනතුරු + posts_tab_heading: තනතුරු + posts_with_replies: පළ කිරීම් සහ පිළිතුරු roles: - admin: පරිපාලක bot: ස්වයං ක්‍රමලේඛය group: සමූහය + unavailable: පැතිකඩ නොමැත + unfollow: අනුගමනය නොකරන්න admin: + account_actions: + action: ක්‍රියාව සිදු කරන්න + title: "%{acct}මත මධ්‍යස්ථ ක්‍රියාව සිදු කරන්න" account_moderation_notes: create: සටහන හැරයන්න + created_msg: මධ්‍යස්ථ සටහන සාර්ථකව සාදන ලදී! + destroyed_msg: මධ්‍යස්ථ සටහන සාර්ථකව විනාශ විය! accounts: add_email_domain_block: වි-තැපැල් වසම අවහිර කරන්න approve: අනුමත කරන්න + approved_msg: "%{username}හි ලියාපදිංචි වීමේ යෙදුම සාර්ථකව අනුමත කරන ලදී" are_you_sure: ඔබට විශ්වාසද? + avatar: අවතාරය by_domain: වසම change_email: - changed_msg: ගිණුමේ වි-තැපෑල සාර්ථකව වෙනස් කෙරිණි! current_email: වත්මන් වි-තැපෑල label: වි-තැපෑල වෙනස් කරන්න new_email: නව විද්‍යුත් තැපෑල submit: වි-තැපෑල වෙනස් කරන්න title: "%{username} සඳහා වි-තැපෑල වෙනස් කරන්න" confirm: සනාථ කරන්න - confirmed: සනාථ කර ඇත + confirmed: තහවුරු කර ඇත confirming: සනාථ කරමින් + custom: අභිරුචි + delete: දත්ත මකන්න + deleted: මකා දමන ලදී + demote: පහත් කරන්න + destroyed_msg: "%{username}හි දත්ත ඉක්මනින් මකා දැමීමට පෝලිම් කර ඇත" + disable: කැටි කරන්න + disable_sign_in_token_auth: ඊමේල් ටෝකන් සත්‍යාපනය අක්‍රීය කරන්න + disable_two_factor_authentication: 2FA අබල කරන්න + disabled: ශීත කළ + display_name: ප්රදර්ශන නාමය domain: වසම edit: සංස්කරණය email: විද්‍යුත් තැපෑල email_status: වි-තැපෑලෙහි තත්වය + enable: කැටි කිරීම ඉවත් කරන්න + enable_sign_in_token_auth: විද්‍යුත් තැපෑල ටෝකන් සත්‍යාපනය සබල කරන්න enabled: සබල කර ඇත + enabled_msg: "%{username}ගේ ගිණුම සාර්ථකව අත්හිටුවා ඇත" + followers: අනුගාමිකයින් + follows: පහත සඳහන් header: ශීර්ෂය - invite_request_text: එක්වීම සඳහා හේතුව + inbox_url: එන ලිපි URL + invite_request_text: එක්වීම සඳහා + invited_by: විසින් ආරාධනා කරන ලදී ip: අ.ජා. කෙ. (IP) joined: එක් වී ඇත location: @@ -70,110 +144,410 @@ si: title: ස්ථානය login_status: පිවිසීමේ තත්වය media_attachments: මාධ්‍ය ඇමුණුම් + memorialize: මතක සටහන් බවට පත් කරන්න + memorialized: අනුස්මරණය කරන ලදී + memorialized_msg: සාර්ථක ලෙස %{username} අනුස්මරණ ගිණුමක් බවට පත් කරන ලදී moderation: active: සක්‍රීයයි all: සියල්ල + pending: පොරොත්තුවෙන් suspended: අත්හිටුවන ලදි - most_recent_ip: වඩා මෑත අ.ජා.කෙ.(IP) + title: මධ්යස්ථභාවය + moderation_notes: මධ්‍යස්ථ සටහන් + most_recent_activity: වඩාත්ම මෑත ක්රියාකාරිත්වය + most_recent_ip: ඊට වඩා අ.ජා.කේ.(IP) + no_account_selected: කිසිවක් තෝරා නොගත් බැවින් ගිණුම් කිසිවක් වෙනස් කර නැත + no_limits_imposed: සීමාවන් පනවා නැත + not_subscribed: දායක වී නැත + pending: පොරොත්තු සමාලෝචනය perform_full_suspension: අත්හිටුවන්න + previous_strikes: පෙර වැඩ වර්ජන + previous_strikes_description_html: + one: මෙම ගිණුමට එක වර්ජනයක් ඇත. + other: මෙම ගිණුමේ වර්ජන %{count} ඇත. + promote: ප්රවර්ධනය කරන්න protocol: කෙටුම්පත - public: ප්‍රසිද්ධ + public: ප්රසිද්ධ + push_subscription_expires: පුෂ් දායකත්වය කල් ඉකුත් වේ redownload: පැතිකඩ නැවුම්කරන්න + redownloaded_msg: මූලාරම්භයේ සිට %{username}හි පැතිකඩ සාර්ථකව නැවුම් කරන ලදී reject: ප්‍රතික්ෂේප + rejected_msg: "%{username}හි ලියාපදිංචි වීමේ අයදුම්පත සාර්ථකව ප්‍රතික්ෂේප විය" + remove_avatar: අවතාරය ඉවත් කරන්න remove_header: ශීර්ෂය ඉවත්කරන්න + removed_avatar_msg: "%{username}ගේ අවතාර රූපය සාර්ථකව ඉවත් කරන ලදී" + removed_header_msg: "%{username}හි ශීර්ෂ රූපය සාර්ථකව ඉවත් කරන ලදී" + resend_confirmation: + already_confirmed: මෙම පරිශීලකයා දැනටමත් තහවුරු කර ඇත + send: තහවුරුකිරීමේ විද්යුත් තැපැල් පණිවිඩය නැවත එවන්න + success: තහවුරු කිරීමේ විද්‍යුත් තැපෑල සාර්ථකව යවා ඇත! reset: නැවත සකසන්න reset_password: මුරපදය නැවතසකසන්න - role: අවසරයන් - roles: - admin: පරිපාලක - staff: කාර්ය මණ්ඩලය - user: පරිශීලක + resubscribe: නැවත දායක වන්න search: සොයන්න + search_same_email_domain: එකම විද්‍යුත් තැපැල් වසම සහිත වෙනත් පරිශීලකයන් + search_same_ip: එකම IP සහිත වෙනත් පරිශීලකයන් security_measures: only_password: මුරපදය පමණි + password_and_2fa: මුරපදය සහ 2FA sensitive: සංවේදී + sensitized: සංවේදී ලෙස සලකුණු කර ඇත + shared_inbox_url: බෙදාගත් එන ලිපි URL + show: + created_reports: වාර්තා හැදුවා + targeted_reports: වෙනත් අය විසින් වාර්තා කරන ලදී silence: සීමාව silenced: සීමාසහිත - statuses: තත්වයන් + statuses: තත්ත්වයන් + strikes: පෙර වැඩ වර්ජන + subscribe: දායක වන්න + suspend: අත්හිටුවන්න suspended: අත්හිටුවන ලදි + suspension_irreversible: මෙම ගිණුමේ දත්ත ආපසු හැරවිය නොහැකි ලෙස මකා ඇත. ඔබට එය භාවිතා කළ හැකි බවට පත් කිරීම සඳහා ගිණුම අත්හිටුවිය හැක නමුත් එය පෙර තිබූ දත්ත කිසිවක් ප්‍රතිසාධනය නොකරයි. + suspension_reversible_hint_html: ගිණුම අත්හිටුවා ඇති අතර, දත්ත සම්පූර්ණයෙන්ම %{date}දින ඉවත් කරනු ලැබේ. එතෙක් කිසිදු අයහපත් ප්‍රතිඵලයකින් තොරව ගිණුම යථා තත්ත්වයට පත් කළ හැක. ඔබට ගිණුමේ සියලුම දත්ත වහාම ඉවත් කිරීමට අවශ්‍ය නම්, ඔබට එය පහතින් කළ හැක. title: ගිණුම් + unblock_email: ඊමේල් ලිපිනය අවහිර කිරීම ඉවත් කරන්න + unblocked_email_msg: "%{username}ගේ විද්‍යුත් තැපැල් ලිපිනය අවහිර කිරීම සාර්ථකව ඉවත් කරන ලදී" + unconfirmed_email: තහවුරු නොකළ ඊමේල් + undo_sensitized: බල සංවේදී අහෝසි කරන්න + undo_silenced: සීමාව අහෝසි කරන්න + undo_suspension: අත්හිටුවීම අහෝසි කරන්න + unsilenced_msg: "%{username}ගිණුමේ සීමාව සාර්ථකව ඉවත් කරන ලදී" + unsubscribe: දායක නොවන්න + unsuspended_msg: "%{username}ගිණුම සාර්ථකව අත්හිටුවන ලදී" username: පරිශීලක නාමය + view_domain: වසම සඳහා සාරාංශය බලන්න warn: අවවාද web: වියමන + whitelisted: ෆෙඩරේෂන් සඳහා අවසර ඇත action_logs: action_types: - change_email_user: පරිශීලකට වි-තැපෑල වෙනස් කරන්න + approve_appeal: අභියාචනය අනුමත කරන්න + approve_user: පරිශීලක අනුමත කරන්න + assigned_to_self_report: වාර්තාව පැවරීම + change_email_user: පරිශීලකයින්ට වි-තැපෑල වෙනස් කරන්න + confirm_user: පරිශීලක තහවුරු කරන්න create_account_warning: අවවාදයක් සාදන්න create_announcement: නිවේදනය සාදන්න + create_custom_emoji: අභිරුචි ඉමොජි සාදන්න create_domain_allow: වසම් ඉඩදීමක් සාදන්න create_domain_block: වසම් අවහිරයක් සාදන්න + create_email_domain_block: ඊමේල් ඩොමේන් බ්ලොක් එකක් සාදන්න create_ip_block: අ.ජා. කෙ. (IP) නීතියක් සාදන්න - disable_user: පරිශීලක අබල කරන්න + create_unavailable_domain: ලබා ගත නොහැකි වසම සාදන්න + demote_user: පරිශීලකයා පහත් කරන්න + destroy_announcement: නිවේදනය මකන්න + destroy_custom_emoji: අභිරුචි ඉමොජි මකන්න + destroy_domain_allow: වසම මකන්න ඉඩ දෙන්න + destroy_domain_block: වසම් වාරණය මකන්න + destroy_email_domain_block: ඊමේල් ඩොමේන් බ්ලොක් එක මකන්න + destroy_instance: වසම පිරිසිදු කරන්න + destroy_ip_block: IP රීතිය මකන්න + destroy_status: පළ කිරීම මකන්න + destroy_unavailable_domain: ලබා ගත නොහැකි වසම මකන්න + disable_2fa_user: 2FA අබල කරන්න + disable_custom_emoji: අභිරුචි ඉමොජි අබල කරන්න + disable_sign_in_token_auth_user: පරිශීලකයා සඳහා ඊමේල් ටෝකන් සත්‍යාපනය අක්‍රීය කරන්න + disable_user: පරිශීලනය කරන්න + enable_custom_emoji: අභිරුචි ඉමොජි සබල කරන්න + enable_sign_in_token_auth_user: පරිශීලකයා සඳහා විද්‍යුත් තැපෑල ටෝකන් සත්‍යාපනය සක්‍රීය කරන්න enable_user: පරිශීලක සබල කරන්න + memorialize_account: ගිණුම අනුස්මරණ කරන්න + promote_user: පරිශීලක ප්රවර්ධනය කරන්න + reject_appeal: අභියාචනය ප්‍රතික්ෂේප කරන්න + reject_user: පරිශීලක ප්‍රතික්ෂේප කරන්න + remove_avatar_user: Avatar ඉවත් කරන්න reopen_report: වාර්තාව නැවත විවෘත කරන්න reset_password_user: මුරපදය නැවතසකසන්න - suspend_account: ගිණුම අත්හිටුවන්න + resolve_report: වාර්තාව විසඳන්න + sensitive_account: බල සංවේදී ගිණුම + silence_account: ගිණුම සීමා කරන්න + suspend_account: සැලකිය යුතු + unassigned_report: වාර්තාව පැවරීම ඉවත් කරන්න + unblock_email_account: ඊමේල් ලිපිනය අවහිර කිරීම ඉවත් කරන්න + unsensitive_account: බල සංවේදී ගිණුම අහෝසි කරන්න + unsilence_account: සීමාව ගිණුම අහෝසි කරන්න + unsuspend_account: ගිණුම අත්හිටුවීම update_announcement: නිවේදනය යාවත්කාල කරන්න - filter_by_action: ක්‍රියාමාර්ගය අනුව පෙරන්න + update_custom_emoji: අභිරුචි ඉමොජි යාවත්කාලීන කරන්න + update_domain_block: ඩොමේන් බ්ලොක් යාවත්කාලීන කරන්න + update_status: පළ කිරීම යාවත්කාලීන කරන්න + actions: + approve_appeal_html: "%{name} අනුමත මධ්‍යස්ථ තීරණ අභියාචනය %{target}සිට" + approve_user_html: "%{name} අනුමත ලියාපදිංචිය %{target}සිට" + assigned_to_self_report_html: "%{name} වාර්තාව %{target} තමන්ටම පවරා ඇත" + change_email_user_html: "%{name} පරිශීලක %{target}ගේ ඊමේල් ලිපිනය වෙනස් කළේය" + confirm_user_html: "%{name} පරිශීලකයාගේ තහවුරු කරන ලද විද්‍යුත් තැපැල් ලිපිනය %{target}" + create_account_warning_html: "%{name} %{target}අනතුරු ඇඟවීමක් යවා ඇත" + create_announcement_html: "%{name} නව නිවේදනයක් තනන %{target}" + create_custom_emoji_html: "%{name} නව ඉමොජි %{target}උඩුගත කරන ලදී" + create_domain_allow_html: "%{name} වසම %{target}සමඟ ෆෙඩරේෂණයට අවසර දී ඇත" + create_domain_block_html: "%{name} අවහිර කළ වසම %{target}" + create_email_domain_block_html: "%{name} අවහිර කරන ලද විද්‍යුත් තැපැල් වසම %{target}" + create_ip_block_html: "%{name} IP %{target}සඳහා රීතිය සාදන ලදී" + create_unavailable_domain_html: "%{name} වසම %{target}වෙත බෙදා හැරීම නැවැත්වීය" + demote_user_html: "%{name} පහත හෙලන ලද පරිශීලක %{target}" + destroy_announcement_html: "%{name} මකා දැමූ නිවේදනය %{target}" + destroy_custom_emoji_html: "%{name} විනාශ වූ ඉමොජි %{target}" + destroy_domain_allow_html: වසම %{target}සමඟ %{name} අවසර නොදුන් සම්මේලනය + destroy_domain_block_html: "%{name} අවහිර නොකළ වසම %{target}" + destroy_email_domain_block_html: "%{name} අවහිර නොකළ විද්‍යුත් තැපැල් වසම %{target}" + destroy_instance_html: "%{name} පිරිසිදු කරන ලද වසම %{target}" + destroy_ip_block_html: IP %{target}සඳහා %{name} මකා දැමූ රීතිය + destroy_status_html: "%{name} පෝස්ට් %{target}විසින් ඉවත් කරන ලදී" + destroy_unavailable_domain_html: "%{name} වසම %{target}වෙත බෙදා හැරීම නැවත ආරම්භ විය" + disable_2fa_user_html: "%{name} පරිශීලක %{target}සඳහා සාධක දෙකක අවශ්‍යතාවය අක්‍රීය කර ඇත" + disable_custom_emoji_html: "%{name} ආබාධිත ඉමොජි %{target}" + disable_sign_in_token_auth_user_html: "%{name} අක්‍රීය කරන ලද විද්‍යුත් තැපෑල ටෝකන් සත්‍යාපනය සඳහා %{target}" + disable_user_html: "%{name} පරිශීලක %{target}සඳහා අබල කළ පිවිසුම" + enable_custom_emoji_html: "%{name} සක්‍රීය ඉමොජි %{target}" + enable_sign_in_token_auth_user_html: "%{name} %{target}විද්‍යුත් තැපෑල ටෝකන් සත්‍යාපනය සක්‍රීය කර ඇත" + enable_user_html: පරිශීලක %{target}සඳහා %{name} සක්‍රීය පුරනය වීම + memorialize_account_html: "%{name} %{target}ගේ ගිණුම සිහිවටන පිටුවක් බවට පත් කළේය" + promote_user_html: "%{name} උසස් පරිශීලක %{target}" + reject_appeal_html: "%{name} %{target}සිට මධ්‍යස්ථ තීරණ අභියාචනය ප්‍රතික්ෂේප කරන ලදී" + reject_user_html: "%{name} %{target}සිට ලියාපදිංචි වීම ප්‍රතික්ෂේප විය" + remove_avatar_user_html: "%{name} %{target}ගේ අවතාරය ඉවත් කරන ලදී" + reopen_report_html: "%{name} නැවත විවෘත කළ වාර්තාව %{target}" + reset_password_user_html: "%{name} පරිශීලක %{target}හි මුරපදය යළි පිහිටුවන්න" + resolve_report_html: "%{name} විසඳන ලද වාර්තාව %{target}" + sensitive_account_html: "%{name} %{target}හි මාධ්‍ය සංවේදී ලෙස සලකුණු කර ඇත" + silence_account_html: "%{name} සීමිත %{target}ගිණුමක්" + suspend_account_html: "%{name} %{target}ගේ ගිණුම අත්හිටුවා ඇත" + unassigned_report_html: "%{name} පවරා නොදුන් වාර්තාව %{target}" + unblock_email_account_html: "%{name} %{target}ගේ ඊමේල් ලිපිනය අවහිර කිරීම ඉවත් කරන ලදී" + unsensitive_account_html: "%{name} සලකුණු නොකළ %{target}ගේ මාධ්‍ය සංවේදී ලෙස" + unsilence_account_html: "%{target}ගිණුමේ %{name} undid සීමාව" + unsuspend_account_html: "%{name} අත්හිටුවන ලද %{target}ගිණුම" + update_announcement_html: "%{name} යාවත්කාලීන නිවේදනය %{target}" + update_custom_emoji_html: "%{name} යාවත්කාලීන කළ ඉමොජි %{target}" + update_domain_block_html: "%{target}සඳහා %{name} යාවත්කාලීන කරන ලද වසම් වාරණ" + update_status_html: "%{name} %{target}යාවත්කාලීන කරන ලද පළ කිරීම" + deleted_status: "(මකා දැමූ පළ කිරීම)" + empty: ලඝු-සටහන් හමු නොවිණි. + filter_by_action: ක්‍රියාව අනුව පෙරන්න filter_by_user: පරිශීලක අනුව පෙරන්න + title: විගණන සටහන announcements: + destroyed_msg: නිවේදනය සාර්ථකව මකා ඇත! edit: title: නිවේදනය සංස්කරණය + empty: නිවේදන කිසිවක් හමු නොවීය. live: සජීවී new: create: නිවේදනය සාදන්න title: නව නිවේදනය + publish: ප්‍රකාශ කරන්න published_msg: නිවේදනය සාර්ථකව ප්‍රකාශයට පත් කරන ලදි! + scheduled_for: "%{time}සඳහා සැලසුම් කර ඇත" + scheduled_msg: නිවේදනය නිකුත් කිරීමට නියමිතයි! title: නිවේදන + unpublish: ප්‍රකාශනය ඉවත් කරන්න + unpublished_msg: නිවේදනය සාර්ථකව ප්‍රකාශයට පත් නොකළේය! + updated_msg: නිවේදනය සාර්ථකව යාවත්කාලීන කරන ලදී! custom_emojis: + assign_category: කාණ්ඩය පැවරීම by_domain: වසම + copied_msg: ඉමොජි වල දේශීය පිටපත සාර්ථකව සාදන ලදී copy: පිටපත් + copy_failed_msg: එම ඉමොජියේ දේශීය පිටපතක් සෑදීමට නොහැකි විය create_new_category: නව ප්‍රවර්ගයක් සාදන්න + created_msg: ඉමොජි සාර්ථකව නිර්මාණය කළා! + delete: මකන්න + destroyed_msg: Emojo සාර්ථකව විනාශ විය! disable: අබල කරන්න disabled: අබල කර ඇත + disabled_msg: එම ඉමොජිය සාර්ථකව අබල කරන ලදී + emoji: ඉමොජි enable: සබල කරන්න enabled: සබල කර ඇත + enabled_msg: එම ඉමොජි සාර්ථකව සබල කරන ලදී + image_hint: PNG හෝ GIF %{size}දක්වා list: ලැයිස්තුව + listed: ලැයිස්තුගත කර ඇත + new: + title: නව අභිරුචි ඉමොජි එක් කරන්න + not_permitted: මෙම ක්‍රියාව සිදු කිරීමට ඔබට අවසර නැත + overwrite: උඩින් ලියන්න shortcode: කෙටිකේතය + shortcode_hint: අවම වශයෙන් අක්ෂර 2 ක්, අක්ෂරාංක අක්ෂර සහ යටි ඉරි පමණි + title: අභිරුචි ඉමෝජි + uncategorized: වර්ගීකරණය නොකළ + unlist: ලැයිස්තුගත නොකරන්න + unlisted: ලැයිස්තුගත නොකළ + update_failed_msg: එම ඉමොජි යාවත්කාලීන කළ නොහැකි විය + updated_msg: ඉමොජි සාර්ථකව යාවත්කාලීන කරන ලදී! upload: උඩුගත කරන්න dashboard: + active_users: ක්රියාකාරී පරිශීලකයන් + interactions: අන්තර්ක්රියා + media_storage: මාධ්ය ගබඩාව + new_users: නව පරිශීලකයන් + opened_reports: වාර්තා විවෘත විය + pending_appeals_html: + one: "%{count} අභියාචනයක් බලාපොරොත්තු වේ" + other: "%{count} අභියාචනා පොරොත්තු" + pending_reports_html: + one: "%{count} පොරොත්තු වාර්තාව" + other: "%{count} පොරොත්තු වාර්තා" + pending_tags_html: + one: "%{count} පොරොත්තු හැෂ් ටැගය" + other: "%{count} පොරොත්තු හැෂ් ටැග්" + pending_users_html: + one: "%{count} අපේක්ෂිත පරිශීලකයා" + other: "%{count} අපේක්ෂිත පරිශීලකයින්" + resolved_reports: වාර්තා විසඳා ඇත software: මෘදුකාංගය + sources: ලියාපදිංචි මූලාශ්‍ර + space: අවකාශය භාවිතය title: උපකරණ පුවරුව + top_languages: ඉහළම ක්රියාකාරී භාෂා + top_servers: ඉහළම ක්රියාකාරී සේවාදායකයන් + website: වෙබ් අඩවිය + disputes: + appeals: + empty: අභියාචනා හමු නොවීය. + title: අභියාචනා + domain_allows: + add_new: වසම සමඟ සම්මේලනයට ඉඩ දෙන්න + created_msg: ෆෙඩරේෂන් සඳහා වසම සාර්ථකව අවසර දී ඇත + destroyed_msg: ෆෙඩරේෂන් වෙතින් වසම අනුමත කර නැත + undo: වසම සමඟ සම්මේලනයට ඉඩ නොදෙන්න domain_blocks: + add_new: නව වසම් වාරණ එක් කරන්න + created_msg: වසම් අවහිර කිරීම දැන් සකසමින් පවතී + destroyed_msg: වසම් අවහිර කිරීම ඉවත් කර ඇත domain: වසම + edit: වසම් වාරණය සංස්කරණය කරන්න + existing_domain_block: ඔබ දැනටමත් %{name}මත දැඩි සීමාවන් පනවා ඇත. + existing_domain_block_html: ඔබ දැනටමත් %{name}මත දැඩි සීමාවන් පනවා ඇත, ඔබට එය අවහිර කිරීම ඉවත් කිරීමට අවශ්‍යයි. new: + create: බ්ලොක් එකක් සාදන්න + hint: ඩොමේන් බ්ලොක් එක දත්ත සමුදාය තුල ගිණුම් ඇතුලත් කිරීම් නිර්මාණය වීම වලක්වන්නේ නැත, නමුත් එම ගිණුම් වලට ප්‍රතික්‍රියාශීලීව සහ ස්වයංක්‍රීයව විශේෂිත මධ්‍යස්ථ ක්‍රම යොදනු ඇත. severity: + desc_html: "Silence ගිණුමේ පළ කිරීම් ඒවා අනුගමනය නොකරන ඕනෑම කෙනෙකුට නොපෙනී යයි. අත්හිටුවීම ගිණුමේ අන්තර්ගතය, මාධ්‍ය සහ පැතිකඩ දත්ත සියල්ල ඉවත් කරයි. ඔබට මාධ්‍ය ගොනු ප්‍රතික්ෂේප කිරීමට අවශ්‍ය නම් None භාවිතා කරන්න." noop: කිසිවක් නැත + silence: නිශ්ශබ්දතාව suspend: අත්හිටුවන්න + title: නව වසම් වාරණ + obfuscate: අපැහැදිලි වසම් නාමය + obfuscate_hint: වසම් සීමාවන් ලැයිස්තුව ප්‍රචාරණය කිරීම සබල කර ඇත්නම් ලැයිස්තුවේ වසම් නාමය අර්ධ වශයෙන් අපැහැදිලි කරන්න private_comment: පුද්ගලික අදහස + private_comment_hint: පරිපාලකයින් විසින් අභ්‍යන්තර භාවිතය සඳහා මෙම වසම් සීමාව ගැන අදහස් දක්වන්න. public_comment: ප්‍රසිද්ධ අදහස + public_comment_hint: වසම් සීමාවන් ලැයිස්තුව ප්‍රචාරණය කිරීම සබල කර ඇත්නම්, සාමාන්‍ය ජනතාව සඳහා මෙම වසම් සීමාව ගැන අදහස් දක්වන්න. + reject_media: මාධ්‍ය ගොනු ප්‍රතික්ෂේප කරන්න + reject_media_hint: දේශීයව ගබඩා කර ඇති මාධ්‍ය ගොනු ඉවත් කරන අතර අනාගතයේදී ඒවා බාගත කිරීම ප්‍රතික්ෂේප කරයි. අත්හිටුවීම් සඳහා අදාළ නොවේ reject_reports: වාර්තා ප්‍රතික්ෂේප කරන්න + reject_reports_hint: මෙම වසමෙන් එන සියලුම වාර්තා නොසලකා හරින්න. අත්හිටුවීම් සඳහා අදාළ නොවේ + undo: වසම් අවහිර කිරීම අහෝසි කරන්න + view: වසම් වාරණය බලන්න email_domain_blocks: + add_new: අලුතින් එකතු කරන්න + attempts_over_week: + one: පසුගිය සතිය පුරා %{count} උත්සාහයක් + other: පසුගිය සතියේ ලියාපදිංචි වීමේ උත්සාහයන් %{count} ක් + created_msg: විද්‍යුත් තැපැල් වසම සාර්ථකව අවහිර කරන ලදී + delete: මකන්න + dns: + types: + mx: MX වාර්තාව domain: වසම new: create: වසම එකතු කරන්න + resolve: වසම විසඳන්න + title: නව විද්‍යුත් තැපැල් වසම අවහිර කරන්න + no_email_domain_block_selected: කිසිවක් තෝරා නොගත් බැවින් විද්‍යුත් තැපැල් වසම් වාරණ කිසිවක් වෙනස් කර නැත + resolved_dns_records_hint_html: ඩොමේන් නාමය පහත දැක්වෙන MX වසම් වලට විසඳයි, ඒවා අවසානයේ ඊමේල් පිළිගැනීම සඳහා වගකිව යුතුය. MX වසමක් අවහිර කිරීම දෘශ්‍ය වසම් නාමය වෙනස් වුවද, එකම MX වසම භාවිතා කරන ඕනෑම විද්‍යුත් තැපැල් ලිපිනයකින් ලියාපදිංචි වීම අවහිර කරයි. ප්‍රධාන විද්‍යුත් තැපැල් සපයන්නන් අවහිර නොකිරීමට ප්‍රවේශම් වන්න. + resolved_through_html: "%{domain}හරහා විසඳා ඇත" title: අවහිර කළ වි-තැපැල් වසම් follow_recommendations: + description_html: "නව පරිශීලකයින්ට රසවත් අන්තර්ගතයන් ඉක්මනින් සොයා ගැනීමට උපකාර වන නිර්දේශ අනුගමනය කරන්න. පෞද්ගලීකරණය කළ පසු විපරම් නිර්දේශ සැකසීමට තරම් පරිශීලකයෙකු අන් අය සමඟ අන්තර් ක්‍රියා කර නොමැති විට, ඒ වෙනුවට මෙම ගිණුම් නිර්දේශ කෙරේ. දී ඇති භාෂාවක් සඳහා ඉහළම මෑත කාලීන නියැලීම් සහ ඉහළම දේශීය අනුගාමික සංඛ්‍යාව සහිත ගිණුම් මිශ්‍රණයකින් ඒවා දෛනික පදනමින් නැවත ගණනය කෙරේ." language: භාෂාව සඳහා - status: තත්වය + status: තත්ත්වය + suppress: අනුගමනය නිර්දේශය යටපත් කරන්න + suppressed: යටපත් කළා + title: නිර්දේශ අනුගමනය කරන්න + unsuppress: නිර්දේශ පිළිපැදීම ප්‍රතිසාධනය කරන්න instances: + availability: + description_html: + one: වසම වෙත බෙදා හැරීම සාර්ථක නොවී දින %{count} අසාර්ථක වුවහොත්, වසම
    න් බෙදා හැරීමක් ලැබෙන්නේ නම් මිස වැඩිදුර බෙදා හැරීමේ උත්සාහයන් සිදු නොකෙරේ. + other: වසම වෙත බෙදා හැරීම සාර්ථක නොවී %{count} වෙනස් දින අසාර්ථක වුවහොත්, වසම සිට බෙදා හැරීමක් නොලැබුනේ නම්, තවදුරටත් බෙදා හැරීමේ උත්සාහයන් සිදු නොකෙරේ. + failure_threshold_reached: අසාර්ථක වීමේ සීමාව %{date}ට ළඟා විය. + failures_recorded: + one: දින %{count} කින් අසාර්ථක උත්සාහයක්. + other: විවිධ දින %{count} ක අසාර්ථක උත්සාහයන්. + no_failures_recorded: වාර්තාගත අසාර්ථක වීම් නොමැත. + title: පවතින බව + warning: මෙම සේවාදායකයට සම්බන්ධ වීමට ගත් අවසන් උත්සාහය අසාර්ථක විය back_to_all: සියල්ල + back_to_limited: සීමා සහිතයි back_to_warning: අවවාදයයි by_domain: වසම + confirm_purge: ඔබට මෙම වසමෙන් දත්ත ස්ථිරවම මැකීමට අවශ්‍ය බව විශ්වාසද? + content_policies: + comment: අභ්යන්තර සටහන + description_html: ඔබට මෙම වසම සහ එහි ඕනෑම උප වසමකින් සියලුම ගිණුම් වලට අදාළ වන අන්තර්ගත ප්‍රතිපත්ති නිර්වචනය කළ හැක. + policies: + reject_media: මාධ්‍ය ප්‍රතික්ෂේප කරන්න + reject_reports: වාර්තා ප්‍රතික්ෂේප කරන්න + silence: සීමාව + suspend: අත්හිටුවන්න + policy: ප්රතිපත්ති + reason: පොදු හේතුව + title: අන්තර්ගත ප්රතිපත්ති + dashboard: + instance_accounts_dimension: වැඩිපුරම අනුගමනය කරන ගිණුම් + instance_accounts_measure: ගබඩා කර ඇති ගිණුම් + instance_followers_measure: එතන අපේ අනුගාමිකයෝ + instance_follows_measure: ඔවුන්ගේ අනුගාමිකයන් මෙහි + instance_languages_dimension: ඉහළම භාෂා + instance_media_attachments_measure: ගබඩා කළ මාධ්‍ය ඇමුණුම් + instance_reports_measure: ඔවුන් ගැන වාර්තා + instance_statuses_measure: ගබඩා කළ තනතුරු delivery: all: සියල්ල + clear: බෙදා හැරීමේ දෝෂ ඉවත් කරන්න + failing: අසාර්ථක වෙනවා + restart: බෙදා හැරීම නැවත ආරම්භ කරන්න + stop: බෙදා හැරීම නවත්වන්න + unavailable: ලබා ගත නොහැක + delivery_available: බෙදා හැරීම ලබා ගත හැකිය + delivery_error_days: බෙදා හැරීමේ දෝෂ සහිත දින + delivery_error_hint: දින %{count} ක් සඳහා බෙදා හැරීම කළ නොහැකි නම්, එය ස්වයංක්‍රීයව බෙදා හැරිය නොහැකි ලෙස ලකුණු කරනු ලැබේ. + destroyed_msg: "%{domain} සිට දත්ත දැන් ආසන්න මකාදැමීම සඳහා පෝලිම් කර ඇත." + empty: වසම් කිසිවක් හමු නොවීය. + known_accounts: + one: "%{count} දන්නා ගිණුම්" + other: දන්නා ගිණුම් %{count} ක් moderation: all: සියල්ල + limited: සීමා සහිතයි + title: මධ්යස්ථභාවය private_comment: පුද්ගලික අදහස public_comment: ප්‍රසිද්ධ අදහස + purge: පිරිසිදු කරන්න + purge_description_html: මෙම වසම යහපත සඳහා නොබැඳි බව ඔබ විශ්වාස කරන්නේ නම්, ඔබට ඔබගේ ගබඩාවෙන් මෙම වසමෙන් සියලුම ගිණුම් වාර්තා සහ ආශ්‍රිත දත්ත මකා දැමිය හැක. මෙයට යම් කාලයක් ගත විය හැක. + title: සම්මේලනය + total_blocked_by_us: අප විසින් අවහිර කරන ලදී + total_followed_by_them: ඔවුන් විසින් අනුගමනය කරන ලදී + total_followed_by_us: අප විසින් අනුගමනය කරන ලදී + total_reported: ඔවුන් ගැන වාර්තා + total_storage: මාධ්ය ඇමුණුම් + totals_time_period_hint_html: පහත දැක්වෙන එකතුවෙහි සියලු කාලය සඳහා දත්ත ඇතුළත් වේ. invites: + deactivate_all: සියල්ල අක්‍රිය කරන්න filter: all: සියල්ල + available: පවතින expired: කල් ඉකුත් වී ඇත title: පෙරහන title: ඇරයුම් ip_blocks: add_new: නීතිය සාදන්න + created_msg: නව IP රීතිය සාර්ථකව එක් කරන ලදී + delete: මකන්න expires_in: '1209600': සති 2 '15778476': මාස 6 @@ -183,116 +557,608 @@ si: '94670856': අවුරුදු 3 new: title: නව අ.ජා. කෙ.(IP) නීතියක් සාදන්න + no_ip_block_selected: IP රීති කිසිවක් තෝරා නොගත් බැවින් වෙනස් කර නැත title: අ.ජා. කෙ. (IP) නීති + relationships: + title: "%{acct}හි සබඳතා" relays: + add_new: නව රිලේ එක් කරන්න + delete: මකන්න + description_html: "ෆෙඩරේෂන් රිලේ යනු එයට දායක වී ප්‍රකාශයට පත් කරන සේවාදායකයන් අතර විශාල ප්‍රසිද්ධ පළ කිරීම් හුවමාරු කරන අතරමැදි සේවාදායකයකි. එය කුඩා සහ මධ්‍යම සේවාදායකයන්ට fediverseවෙතින් අන්තර්ගතය සොයා ගැනීමට උදවු කළ හැකි අතර, එසේ නොමැති නම් දේශීය පරිශීලකයින්ට දුරස්ථ සේවාදායකයන් මත වෙනත් පුද්ගලයින් හස්තීයව අනුගමනය කිරීම අවශ්‍ය වේ." disable: අබල කරන්න disabled: අබල කර ඇත enable: සබල කරන්න + enable_hint: සක්‍රිය කළ පසු, ඔබේ සේවාදායකය මෙම රිලේ වෙතින් සියලුම පොදු පළ කිරීම් සඳහා දායක වන අතර, මෙම සේවාදායකයේ පොදු පළ කිරීම් එයට යැවීම ආරම්භ කරනු ඇත. enabled: සබල කර ඇත + inbox_url: රිලේ URL + pending: රිලේ අනුමැතිය සඳහා රැඳී සිටිමින් + save_and_enable: සුරකින්න සහ සක්රිය කරන්න + setup: රිලේ සම්බන්ධතාවයක් සකසන්න + signatures_not_enabled: ආරක්ෂිත මාදිලිය හෝ සීමිත ෆෙඩරේෂන් මාදිලිය සබල කර ඇති අතර රිලේ නිවැරදිව ක්‍රියා නොකරනු ඇත status: තත්වය + title: රිලේස් + report_notes: + created_msg: වාර්තා සටහන සාර්ථකව සාදන ලදී! + destroyed_msg: වාර්තා සටහන සාර්ථකව මකා ඇත! + today_at: අද %{time}ට reports: + account: + notes: + one: "%{count} සටහන" + other: "%{count} සටහන්" + action_log: විගණන සටහන + action_taken_by: විසින් ගන්නා ලද පියවර + actions: + delete_description_html: වාර්තා කරන ලද පළ කිරීම් මකා දැමෙනු ඇති අතර එම ගිණුමේම අනාගත උල්ලංඝනයන් තීව්‍ර කිරීමට ඔබට උදවු කිරීමට වර්ජනයක් වාර්තා කරනු ඇත. + mark_as_sensitive_description_html: වාර්තා කරන ලද පළ කිරීම් වල මාධ්‍ය සංවේදී ලෙස සලකුණු කරනු ලබන අතර එම ගිණුම මගින් අනාගත උල්ලංඝනයන් උත්සන්න කිරීමට ඔබට උපකාර කිරීමට වර්ජනයක් වාර්තා කරනු ඇත. + other_description_html: ගිණුමේ හැසිරීම පාලනය කිරීම සහ වාර්තා කළ ගිණුමට සන්නිවේදනය අභිරුචිකරණය කිරීම සඳහා තවත් විකල්ප බලන්න. + resolve_description_html: වාර්තා කරන ලද ගිණුමට එරෙහිව කිසිදු ක්‍රියාමාර්ගයක් නොගනු ඇත, වැඩ වර්ජනයක් වාර්තා නොකෙරේ, වාර්තාව වසා දමනු ඇත. + silence_description_html: පැතිකඩ දෘශ්‍යමාන වනු ඇත්තේ දැනටමත් එය අනුගමනය කරන හෝ අතින් බලන අයට පමණක් වන අතර, එහි ළඟාවීම දැඩි ලෙස සීමා කරයි. සෑම විටම ආපසු හැරවිය හැක. + suspend_description_html: එය අවසානයේ මකා දමන තුරු පැතිකඩ සහ එහි සියලුම අන්තර්ගතයන් ප්‍රවේශ විය නොහැකි වනු ඇත. ගිණුම සමඟ අන්තර් ක්රියා කිරීම කළ නොහැකි වනු ඇත. දින 30 ක් ඇතුළත ආපසු හැරවිය හැකිය. + actions_description_html: මෙම වාර්තාව විසඳීමට ගත යුතු ක්‍රියාමාර්ගය තීරණය කරන්න. ඔබ වාර්තා කරන ලද ගිණුමට එරෙහිව දණ්ඩනීය ක්‍රියාමාර්ගයක් ගන්නේ නම්, Spam කාණ්ඩය තෝරාගත් විට හැර, ඔවුන්ට විද්‍යුත් තැපෑලෙන් දැනුම්දීමක් යවනු ලැබේ. + add_to_report: වාර්තා කිරීමට තවත් එක් කරන්න are_you_sure: ඔබට විශ්වාසද? + assign_to_self: මට පවරන්න + assigned: පවරා ඇති උපපරිපාලක by_target_domain: වාර්තා කළ ගිණුමෙහි වසම + category: වර්ගය + category_description_html: මෙම ගිණුම සහ/හෝ අන්තර්ගතය වාර්තා කළ හේතුව වාර්තා කළ ගිණුම සමඟ සන්නිවේදනයේ සඳහන් කරනු ඇත comment: none: කිසිවක් නැත + comment_description_html: 'වැඩි විස්තර සැපයීම සඳහා, %{name} ලිවීය:' + created_at: වාර්තා කර ඇත + delete_and_resolve: පළ කිරීම් මකන්න + forwarded: යොමු කළා + forwarded_to: "%{domain}වෙත යොමු කරන ලදී" + mark_as_resolved: විසඳා ඇති ලෙස ලකුණු කරන්න + mark_as_sensitive: සංවේදී ලෙස ලකුණු කරන්න + mark_as_unresolved: නොවිසඳුනු ලෙස ලකුණු කරන්න + no_one_assigned: කිසි කෙනෙක නැහැ notes: create: සටහන එකතු කරන්න + create_and_resolve: සටහන සමඟ විසඳන්න + create_and_unresolve: සටහනක් සමඟ නැවත විවෘත කරන්න + delete: මකන්න + placeholder: ගෙන ඇති ක්‍රියාමාර්ග, හෝ වෙනත් අදාළ යාවත්කාලීන විස්තර කරන්න... + title: සටහන් + notes_description_html: අනෙකුත් උපපරිපාලකයින්ට සහ ඔබේ අනාගතයට සටහන් බලන්න සහ තබන්න + quick_actions_description_html: 'වාර්තා කළ අන්තර්ගතය බැලීමට ඉක්මන් ක්‍රියාමාර්ගයක් ගන්න හෝ පහළට අනුචලනය කරන්න:' + remote_user_placeholder: "%{instance}සිට දුරස්ථ පරිශීලකයා" reopen: වාර්තාව නැවත විවෘත කරන්න report: "@%{id} වාර්තා කරන්න" reported_account: වාර්තා කළ ගිණුම + reported_by: විසින් වාර්තා + resolved: විසඳා ඇත + resolved_msg: වාර්තාව සාර්ථකව විසඳා ඇත! + skip_to_actions: ක්‍රියාවන් වෙත යන්න status: තත්වය + statuses: වාර්තා කළ අන්තර්ගතය + statuses_description_html: වාර්තා කරන ලද ගිණුම සමඟ සන්නිවේදනය කිරීමේදී වැරදි අන්තර්ගතයන් උපුටා දක්වනු ඇත + target_origin: වාර්තා කළ ගිණුමේ ආරම්භය title: වාර්තා + unassign: පැවරීම ඉවත් කරන්න + unresolved: නොවිසඳී ඇත + updated_at: යාවත්කාලීන කරන ලදී + view_profile: පැතිකඩ බලන්න rules: add_new: නීතිය එකතු කරන්න + delete: මකන්න + description_html: බොහෝ දෙනා සේවා කොන්දේසි කියවා එකඟ වූ බව ප්‍රකාශ කරන අතර, සාමාන්‍යයෙන් මිනිසුන් ගැටලුවක් පැනනඟින තුරු කියවා නොගනිති. පැතලි බුලට් පොයින්ට් ලිස්ට් එකකින් ඒවා ලබා දීමෙන් බැලූ බැල්මට ඔබේ සේවාදායකයේ නීති බැලීම පහසු කරන්න. තනි නීති කෙටි හා සරලව තබා ගැනීමට උත්සාහ කරන්න, නමුත් ඒවා විවිධ අයිතම වලට බෙදීමට උත්සාහ නොකරන්න. edit: නීතිය සංස්කරණය කරන්න + empty: තවමත් සේවාදායක රීති නිර්වචනය කර නොමැත. title: සේවාදායකයේ නීති settings: + activity_api_enabled: + desc_html: සතිපතා බාල්දිවල දේශීයව ප්‍රකාශිත පළ කිරීම්, ක්‍රියාකාරී පරිශීලකයින් සහ නව ලියාපදිංචි කිරීම් ගණන + title: API හි පරිශීලක ක්‍රියාකාරකම් පිළිබඳ සමස්ත සංඛ්‍යාලේඛන ප්‍රකාශයට පත් කරන්න + bootstrap_timeline_accounts: + desc_html: බහු පරිශීලක නාම කොමාවෙන් වෙන් කරන්න. මෙම ගිණුම් පහත සඳහන් නිර්දේශවල පෙන්වීමට සහතික වනු ඇත + title: නව පරිශීලකයින්ට මෙම ගිණුම් නිර්දේශ කරන්න contact_information: email: ව්‍යාපාරික වි-තැපෑල + username: පරිශීලක නාමය අමතන්න + custom_css: + desc_html: සෑම පිටුවකම පටවා ඇති CSS සමඟ පෙනුම වෙනස් කරන්න + title: අභිරුචි CSS + default_noindex: + desc_html: මෙම සැකසුම තමන් විසින්ම වෙනස් කර නොමැති සියලුම පරිශීලකයින්ට බලපායි + title: පෙරනිමියෙන් සෙවුම් යන්ත්‍ර සුචිගත කිරීමෙන් පරිශීලකයින් ඉවත් කරන්න + domain_blocks: + all: හැමෝටම + disabled: කාටවත් නෑ + title: වසම් වාරණ පෙන්වන්න + users: පුරනය වී ඇති දේශීය පරිශීලකයින් වෙත + domain_blocks_rationale: + title: තාර්කිකත්වය පෙන්වන්න + hero: + desc_html: මුල් පිටුවේ ප්‍රදර්ශනය කෙරේ. අවම වශයෙන් 600x100px නිර්දේශිතයි. සකසා නොමැති විට, සේවාදායක සිඟිති රුව වෙත ආපසු වැටේ + title: වීර රූපය + mascot: + desc_html: පිටු කිහිපයක ප්‍රදර්ශනය කෙරේ. අවම වශයෙන් 293×205px නිර්දේශිතයි. සකසා නොමැති විට, පෙරනිමි මැස්කොට් වෙත ආපසු වැටේ + title: මැස්කොට් රූපය + peers_api_enabled: + desc_html: මෙම සේවාදායකය fediverse තුළ හමු වූ වසම් නම් + title: API හි සොයාගත් සේවාදායක ලැයිස්තුවක් ප්‍රකාශයට පත් කරන්න + preview_sensitive_media: + desc_html: මාධ්‍ය සංවේදී ලෙස සලකුණු කළත් වෙනත් වෙබ් අඩවිවල සබැඳි පෙරදසුන් සිඟිති රූපයක් පෙන්වයි + title: OpenGraph පෙරදසුන් තුළ සංවේදී මාධ්‍ය පෙන්වන්න + profile_directory: + desc_html: පරිශීලකයින්ට සොයාගත හැකි වීමට ඉඩ දෙන්න + title: පැතිකඩ නාමාවලිය සබල කරන්න + registrations: + closed_message: + desc_html: ලියාපදිංචිය වසා ඇති විට මුල් පිටුවේ ප්‍රදර්ශනය කෙරේ. ඔබට HTML ටැග් භාවිතා කළ හැකිය + title: සංවෘත ලියාපදිංචි පණිවිඩය + deletion: + desc_html: ඕනෑම කෙනෙකුට තම ගිණුම මකා දැමීමට ඉඩ දෙන්න + title: ගිණුම් මකාදැමීම විවෘත කරන්න + require_invite_text: + desc_html: ලියාපදිංචිය සඳහා අතින් අනුමැතිය අවශ්‍ය වූ විට, "ඔබට සම්බන්ධ වීමට අවශ්‍ය වන්නේ ඇයි?" විකල්ප වෙනුවට පෙළ ආදානය අනිවාර්ය වේ + title: සම්බන්ධ වීමට හේතුවක් ඇතුළත් කිරීමට නව පරිශීලකයින්ට අවශ්‍ය වේ + registrations_mode: + modes: + approved: ලියාපදිංචි වීමට අනුමැතිය අවශ්‍යයි + none: කිසිවෙකුට ලියාපදිංචි විය නොහැක + open: ඕනෑම කෙනෙකුට ලියාපදිංචි විය හැක + title: ලියාපදිංචි කිරීමේ මාදිලිය + show_known_fediverse_at_about_page: + desc_html: අබල කළ විට, ගොඩබෑමේ පිටුවෙන් සම්බන්ධ කර ඇති පොදු කාලරාමුව දේශීය අන්තර්ගතය පමණක් පෙන්වීමට සීමා කරයි + title: සත්‍යාපනය නොකළ පොදු කාලරේඛා පිටුවේ ෆෙඩරේටඩ් අන්තර්ගතය ඇතුළත් කරන්න site_description: + desc_html: API හි හඳුන්වාදීමේ ඡේදය. මෙම Mastodon සේවාදායකය විශේෂ වන්නේ කුමක්ද සහ වෙනත් වැදගත් දෙයක් විස්තර කරන්න. ඔබට HTML ටැග් භාවිතා කළ හැකිය, විශේෂයෙන් <a> සහ <em>. title: සේවාදායකයේ සවිස්තරය + site_description_extended: + desc_html: ඔබේ චර්යාධර්ම සංග්‍රහය, රීති, මාර්ගෝපදේශ සහ ඔබේ සේවාදායකය වෙන් කරන වෙනත් දේවල් සඳහා හොඳ තැනක්. ඔබට HTML ටැග් භාවිතා කළ හැකිය + title: අභිරුචි දීර්ඝ තොරතුරු site_short_description: + desc_html: පැති තීරුවේ සහ මෙටා ටැග්වල පෙන්වයි. Mastodon යනු කුමක්ද සහ මෙම සේවාදායකය විශේෂ වන්නේ කුමක්ද යන්න තනි ඡේදයකින් විස්තර කරන්න. title: සේවාදායකයේ කෙටි සවිස්තරය + site_terms: + desc_html: ඔබට ඔබේම රහස්‍යතා ප්‍රතිපත්තියක්, සේවා කොන්දේසි හෝ වෙනත් නීත්‍යානුකූල භාවයක් ලිවිය හැක. ඔබට HTML ටැග් භාවිතා කළ හැකිය + title: අභිරුචි සේවා කොන්දේසි site_title: සේවාදායකයේ නම + thumbnail: + desc_html: OpenGraph සහ API හරහා පෙරදසුන් සඳහා භාවිතා වේ. 1200x630px නිර්දේශිතයි + title: සේවාදායක සිඟිති රුව + timeline_preview: + desc_html: ගොඩබෑමේ පිටුවේ පොදු කාලරාමුව වෙත සබැඳිය සංදර්ශනය කරන්න සහ සත්‍යාපනයකින් තොරව පොදු කාලරේඛාවට API ප්‍රවේශයට ඉඩ දෙන්න + title: පොදු කාලරේඛාවට අනවසර පිවිසීමට ඉඩ දෙන්න title: අඩවියේ සැකසුම් + trendable_by_default: + desc_html: කලින් අවසර නොදුන් හැෂ් ටැග් වලට බලපායි + title: පෙර සමාලෝචනයකින් තොරව හැෂ් ටැග් වලට නැඹුරු වීමට ඉඩ දෙන්න + trends: + desc_html: දැනට ප්‍රවණතා ඇති කලින් සමාලෝචනය කළ අන්තර්ගතය ප්‍රසිද්ධියේ සංදර්ශන කරන්න + title: ප්රවණතා + site_uploads: + delete: උඩුගත කළ ගොනුව මකන්න + destroyed_msg: අඩවිය උඩුගත කිරීම සාර්ථකව මකා ඇත! statuses: back_to_account: ගිණුම් පිටුවට ආපසු යන්න + back_to_report: වාර්තා පිටුවට ආපසු යන්න + batch: + remove_from_report: වාර්තාවෙන් ඉවත් කරන්න + report: වාර්තාව + deleted: මකා දමන ලදී media: title: මාධ්‍යය - with_media: මාධ්‍ය සමඟ + no_status_selected: කිසිවක් තෝරා නොගත් බැවින් තනතුරු කිසිවක් වෙනස් කර නැත + title: ගිණුම් තනතුරු + with_media: මාධ්‍ය දායකත්වය + strikes: + actions: + delete_statuses: "%{target}ගේ පළ කිරීම් %{name} මකා දමන ලදී" + disable: "%{name} %{target}ගේ ගිණුම නිශ්චල කළේය" + mark_statuses_as_sensitive: "%{name} %{target}ගේ පළ කිරීම් සංවේදී ලෙස ලකුණු කර ඇත" + none: "%{name} %{target}අනතුරු ඇඟවීමක් යවා ඇත" + sensitive: "%{name} %{target}ගේ ගිණුම සංවේදී ලෙස ලකුණු කර ඇත" + silence: "%{name} සීමිත %{target}ගිණුමක්" + suspend: "%{name} %{target}ගේ ගිණුම අත්හිටුවා ඇත" + appeal_approved: අභියාචනා කළා + appeal_pending: අභියාචනය පොරොත්තුවෙන් + system_checks: + database_schema_check: + message_html: පොරොත්තු දත්ත සමුදා සංක්‍රමණයන් ඇත. යෙදුම අපේක්ෂිත පරිදි ක්‍රියා කරන බව සහතික කිරීමට කරුණාකර ඒවා ධාවනය කරන්න + elasticsearch_running_check: + message_html: Elasticsearch වෙත සම්බන්ධ වීමට නොහැකි විය. කරුණාකර එය ක්‍රියාත්මක වන බව පරීක්ෂා කරන්න, නැතහොත් සම්පූර්ණ පෙළ සෙවීම අක්‍රීය කරන්න + elasticsearch_version_check: + message_html: 'නොගැලපෙන ඉලාස්ටික් සෙවුම් අනුවාදය: %{value}' + version_comparison: Elasticsearch %{running_version} ක්‍රියාත්මක වන අතර %{required_version} අවශ්‍ය වේ + rules_check: + action: සේවාදායක නීති කළමනාකරණය කරන්න + message_html: ඔබ සේවාදායක රීති කිසිවක් නිර්වචනය කර නැත. + sidekiq_process_check: + message_html: "%{value} පෝලිම්(ය) සඳහා Sidekiq ක්‍රියාවලියක් ක්‍රියාත්මක නොවේ. කරුණාකර ඔබේ Sidekiq වින්‍යාසය සමාලෝචනය කරන්න" + tags: + review: තත්ත්වය සමාලෝචනය කරන්න + updated_msg: Hashtag සැකසුම් සාර්ථකව යාවත්කාලීන කරන ලදී title: පරිපාලනය + trends: + allow: ඉඩ දෙන්න + approved: අනුමත කළා + disallow: අවසර නොදෙන්න + links: + allow: සබැඳියට ඉඩ දෙන්න + allow_provider: ප්‍රකාශකයාට ඉඩ දෙන්න + description_html: මේවා ඔබගේ සේවාදායකය විසින් පළ කිරීම් දකින ගිණුම් මගින් දැනට බොහෝ සෙයින් බෙදා ගන්නා සබැඳි වේ. එය ඔබගේ පරිශීලකයින්ට ලෝකයේ සිදුවෙමින් පවතින දේ සොයා ගැනීමට උදවු කළ හැක. ඔබ ප්‍රකාශකයා අනුමත කරන තුරු සබැඳි කිසිවක් ප්‍රසිද්ධියේ ප්‍රදර්ශනය නොවේ. ඔබට තනි සබැඳිවලට ඉඩ දීමට හෝ ප්‍රතික්ෂේප කිරීමටද හැකිය. + disallow: සබැඳියට ඉඩ නොදෙන්න + disallow_provider: ප්‍රකාශකයාට ඉඩ නොදෙන්න + shared_by_over_week: + one: පසුගිය සතිය පුරා එක් පුද්ගලයෙකු විසින් බෙදා ගන්නා ලදී + other: පසුගිය සතිය පුරා පුද්ගලයින් %{count} දෙනෙකු විසින් බෙදා ගන්නා ලදී + title: නැඟී එන සබැඳි + usage_comparison: ඊයේ %{yesterday} හා සසඳන විට අද %{today} වරක් බෙදා ගන්නා ලදී + only_allowed: අවසර දී ඇත + pending_review: පොරොත්තු සමාලෝචනය + preview_card_providers: + allowed: මෙම ප්‍රකාශකයාගේ සබැඳි නැඹුරු විය හැක + description_html: මේවා බොහෝ විට ඔබගේ සේවාදායකයේ සබැඳි බෙදා ගන්නා වසම් වේ. සබැඳියේ වසම අනුමත කරන්නේ නම් මිස සබැඳි ප්‍රසිද්ධියේ නැඹුරු නොවේ. ඔබගේ අනුමැතිය (හෝ ප්‍රතික්ෂේප කිරීම) උපවසම් දක්වා විහිදේ. + rejected: මෙම ප්‍රකාශකයාගේ සබැඳි නැඹුරු නොවනු ඇත + title: ප්‍රකාශකයන් + rejected: ප්‍රතික්ෂේප කළා + statuses: + allow: පළ කිරීමට ඉඩ දෙන්න + allow_account: කතුවරයාට ඉඩ දෙන්න + description_html: මේ වන විට ඔබේ සේවාදායකය දන්නා පෝස්ට් මේ වන විට බොහෝ බෙදාහරින සහ මේ මොහොතේ වැඩි කැමැත්තක් දක්වයි. එය ඔබගේ නව සහ නැවත පැමිණෙන පරිශීලකයින්ට අනුගමනය කිරීමට තවත් පුද්ගලයින් සොයා ගැනීමට උදවු කළ හැක. ඔබ කර්තෘ අනුමත කරන තෙක් පළ කිරීම් කිසිවක් ප්‍රසිද්ධියේ නොපෙන්වන අතර, කර්තෘ තම ගිණුම අන් අයට යෝජනා කිරීමට ඉඩ දෙයි. ඔබට තනි පළ කිරීම්වලට ඉඩ දීමට හෝ ප්‍රතික්ෂේප කිරීමටද හැකිය. + disallow: පළ කිරීමට ඉඩ නොදෙන්න + disallow_account: කතුවරයාට ඉඩ නොදෙන්න + not_discoverable: කර්තෘ සොයා ගත හැකි බව තෝරාගෙන නැත + shared_by: + one: එක් වරක් බෙදාගත් හෝ ප්‍රිය කරන ලදී + other: "%{friendly_count} වරක් බෙදාගෙන ප්‍රිය කරන ලදී" + title: ප්‍රවණතා පළ කිරීම් + tags: + current_score: වත්මන් ලකුණු %{score} + dashboard: + tag_accounts_measure: අද්විතීය භාවිතයන් + tag_languages_dimension: ඉහළම භාෂා + tag_servers_dimension: ඉහළම සේවාදායකයන් + tag_servers_measure: විවිධ සේවාදායකයන් + tag_uses_measure: සම්පූර්ණ භාවිතය + description_html: මේවා දැනට ඔබගේ සේවාදායකය දකින බොහෝ පළ කිරීම් වල දිස්වන හැෂ් ටැග් වේ. මේ මොහොතේ මිනිසුන් වැඩිපුරම කතා කරන්නේ කුමක් දැයි සොයා ගැනීමට එය ඔබගේ පරිශීලකයින්ට උදවු කළ හැක. ඔබ ඒවා අනුමත කරන තුරු හෑෂ් ටැග් ප්‍රසිද්ධියේ නොපෙන්වයි. + listable: යෝජනා කළ හැක + not_listable: යෝජනා නොකරනු ඇත + not_trendable: ප්‍රවණතා යටතේ දිස් නොවනු ඇත + not_usable: භාවිතා කළ නොහැක + peaked_on_and_decaying: "%{date}හි උච්චතම, දැන් දිරාපත් වෙමින් පවතී" + title: ප්‍රවණතා හැෂ් ටැග් + trendable: ප්රවණතා යටතේ පෙනී සිටිය හැක + trending_rank: 'නැඹුරු #%{rank}' + usable: භාවිතා කළ හැක + usage_comparison: ඊයේ %{yesterday} හා සසඳන විට අද %{today} වරක් භාවිතා වේ + used_by_over_week: + one: පසුගිය සතිය පුරා එක් පුද්ගලයෙකු විසින් භාවිතා කරන ලදී + other: පසුගිය සතිය පුරා පුද්ගලයින් %{count} දෙනෙකු විසින් භාවිතා කරන ලදී + title: ප්රවණතා + trending: ප්රවණතා + warning_presets: + add_new: අලුතින් එකතු කරන්න + delete: මකන්න + edit_preset: අනතුරු ඇඟවීමේ පෙර සැකසුම සංස්කරණය කරන්න + empty: ඔබ තවම කිසිදු අනතුරු ඇඟවීමේ පෙරසිටුවක් නිර්වචනය කර නැත. + title: අනතුරු ඇඟවීමේ පෙරසිටුවීම් කළමනාකරණය කරන්න + webhooks: + add_new: අන්ත ලක්ෂ්‍යය එක් කරන්න + delete: මකන්න + description_html: A webhook Mastodon හට තෝරාගත් සිදුවීම් පිළිබඳ තත්‍ය කාලීන දැනුම්දීම් ක් ඔබේම යෙදුමට තල්ලු කිරීමට හැකියාව ලබා දෙයි, එම නිසා ඔබේ යෙදුමට ස්වයංක්‍රීයව ප්‍රතික්‍රියා අවුලුවාලීමට හැකිය. + disable: අක්රිය කරන්න + disabled: ආබාධිතයි + edit: අන්ත ලක්ෂ්‍යය සංස්කරණය කරන්න + empty: ඔබට තවම වින්‍යාස කර ඇති කිසිදු webhook අන්ත ලක්ෂ්‍යයක් නොමැත. + enable: සබල කරන්න + enabled: ක්රියාකාරී + enabled_events: + one: 1 සබල කළ සිදුවීමක් + other: "%{count} සබල කළ සිදුවීම්" + events: සිදුවීම් + new: නව webhook + rotate_secret: රහස කරකවන්න + secret: අත්සන් කිරීමේ රහස + status: තත්ත්වය + webhook: වෙබ්හුක් + admin_mailer: + new_appeal: + actions: + delete_statuses: ඔවුන්ගේ පළ කිරීම් මකා දැමීමට + disable: ඔවුන්ගේ ගිණුම කැටි කිරීමට + mark_statuses_as_sensitive: ඔවුන්ගේ තනතුරු සංවේදී ලෙස සලකුණු කිරීමට + none: අනතුරු ඇඟවීමක් + sensitive: ඔවුන්ගේ ගිණුම සංවේදී ලෙස සලකුණු කිරීමට + silence: ඔවුන්ගේ ගිණුම සීමා කිරීමට + suspend: ඔවුන්ගේ ගිණුම අත්හිටුවීමට + body: "%{target} යනු %{type}ක් වූ %{date}සිට %{action_taken_by} කින් මධ්‍යස්ථ තීරණයක් අභියාචනා කරයි. ඔවුන් මෙසේ ලිවීය." + next_steps: ඔබට මධ්‍යස්ථ තීරණය අවලංගු කිරීමට අභියාචනය අනුමත කළ හැකිය, නැතහොත් එය නොසලකා හරින්න. + subject: "%{username} යනු %{instance}හි මධ්‍යස්ථ තීරණයකට අභියාචනා කරයි" + new_pending_account: + body: නව ගිණුමේ විස්තර පහතින්. ඔබට මෙම යෙදුම අනුමත කිරීමට හෝ ප්‍රතික්ෂේප කිරීමට හැකිය. + subject: නව ගිණුම සමාලෝචනය සඳහා %{instance} (%{username}) + new_report: + body: "%{reporter} %{target}වාර්තා කර ඇත" + body_remote: "%{domain} සිට යමෙක් %{target}වාර්තා කර ඇත" + subject: "%{instance} සඳහා නව වාර්තාව (#%{id})" + new_trends: + body: 'පහත අයිතම ප්‍රසිද්ධියේ ප්‍රදර්ශනය කිරීමට පෙර සමාලෝචනයක් අවශ්‍ය වේ:' + new_trending_links: + no_approved_links: දැනට අනුමත නැඹුරු සබැඳි නොමැත. + requirements: 'මෙම ඕනෑම අපේක්ෂකයෙකුට #%{rank} අනුමත ප්‍රවණතා සබැඳිය ඉක්මවා යා හැකි අතර, එය දැනට ලකුණු %{lowest_link_score}ක් සමඟින් "%{lowest_link_title}" වේ.' + title: නැඟී එන සබැඳි + new_trending_statuses: + no_approved_statuses: දැනට අනුමත ප්‍රවණතා පළ කිරීම් නොමැත. + requirements: 'මෙම ඕනෑම අපේක්ෂකයෙකුට #%{rank} අනුමත ප්‍රවණතා පළ කිරීම අභිබවා යා හැකි අතර, එය දැනට ලකුණු %{lowest_status_score}ක් සමඟින් %{lowest_status_url} වේ.' + title: ප්‍රවණතා පළ කිරීම් + new_trending_tags: + no_approved_tags: දැනට අනුමත ප්‍රවණතා හැෂ් ටැග් නොමැත. + requirements: 'මෙම ඕනෑම අපේක්ෂකයෙකුට #%{rank} අනුමත ප්‍රවණතා හැෂ් ටැගය අභිබවා යා හැකිය, එය දැනට ලකුණු %{lowest_tag_score}ක් සමඟ #%{lowest_tag_name} වේ.' + title: ප්‍රවණතා හැෂ් ටැග් + subject: "%{instance}හි සමාලෝචනය සඳහා නව ප්‍රවණතා" + aliases: + add_new: අන්වර්ථ නාමයක් සාදන්න + created_msg: නව අන්වර්ථ නාමයක් සාර්ථකව නිර්මාණය කරන ලදී. ඔබට දැන් පැරණි ගිණුමෙන් මාරුවීම ආරම්භ කළ හැක. + deleted_msg: අන්වර්ථය සාර්ථකව ඉවත් කරන ලදී. එම ගිණුමෙන් මෙම ගිණුමට මාරුවීම තවදුරටත් කළ නොහැකි වනු ඇත. + empty: ඔබට අන්වර්ථ නාම නොමැත. + hint_html: ඔබට වෙනත් ගිණුමකින් මෙය වෙත මාරු වීමට අවශ්‍ය නම්, මෙහිදී ඔබට අන්වර්ථ නාමයක් සෑදිය හැක, එය පැරණි ගිණුමෙන් අනුගාමිකයින් මෙම ගිණුමට ගෙන යාමට පෙර අවශ්‍ය වේ. මෙම ක්‍රියාවම හානිකර නොවන සහ ආපසු හැරවිය හැකිවේ. ගිණුම් සංක්‍රමණය පැරණි ගිණුමෙන් ආරම්භ වේ. + remove: අන්වර්ථය විසන්ධි කරන්න appearance: advanced_web_interface: උසස් වියමන අතුරුමුහුණත + advanced_web_interface_hint: 'ඔබට ඔබේ සම්පූර්ණ තිරයේ පළල භාවිතා කිරීමට අවශ්‍ය නම්, උසස් වෙබ් අතුරු මුහුණත ඔබට අවශ්‍ය පරිදි එකම වේලාවක බොහෝ තොරතුරු බැලීමට විවිධ තීරු වින්‍යාස කිරීමට ඉඩ දෙයි: නිවස, දැනුම්දීම්, ෆෙඩරේටඩ් කාලරාමුව, ඕනෑම ලැයිස්තු සහ හැෂ් ටැග්.' + animations_and_accessibility: සජීවිකරණ සහ ප්‍රවේශ්‍යතාව + confirmation_dialogs: තහවුරු කිරීමේ සංවාද + discovery: සොයාගැනීම localization: + body: Mastodon ස්වේච්ඡා සේවකයන් විසින් පරිවර්තනය කර ඇත. guide_link: https://crowdin.com/project/mastodon - sensitive_content: සංවේදී අන්තර්ගතයකි + guide_link_text: සෑම කෙනෙකුටම දායක විය හැකිය. + sensitive_content: සංවේදී අන්තර්ගතය + toot_layout: පෝස්ට් පිරිසැලසුම application_mailer: + notification_preferences: ඊමේල් මනාප වෙනස් කරන්න salutation: "%{name}," + settings: 'ඊමේල් මනාප වෙනස් කරන්න: %{link}' + view: 'දැක්ම:' + view_profile: පැතිකඩ බලන්න + view_status: පළ කිරීම බලන්න + applications: + created: යෙදුම සාර්ථකව නිර්මාණය කරන ලදී + destroyed: යෙදුම සාර්ථකව මකා ඇත + regenerate_token: ප්‍රවේශ ටෝකනය නැවත උත්පාදනය කරන්න + token_regenerated: ප්‍රවේශ ටෝකනය සාර්ථකව ප්‍රතිජනනය කරන ලදී + warning: මෙම දත්ත සමඟ ඉතා ප්රවේශම් වන්න. එය කිසි විටෙක කිසිවෙකු සමඟ බෙදා නොගන්න! + your_token: ඔබේ ප්‍රවේශ ටෝකනය auth: + apply_for_account: ආරාධනාවක් ඉල්ලන්න change_password: මුර පදය + checkbox_agreement_html: මම සේවාදායක රීති සහ සේවා නියමට එකඟ වෙමි + checkbox_agreement_without_rules_html: මම සේවා කොන්දේසි එකඟ වෙමි + delete_account: ගිණුම මකන්න + delete_account_html: ඔබට ඔබගේ ගිණුම මකා දැමීමට අවශ්‍ය නම්, ඔබට මෙතැනින් ඉදිරියට යා හැක. තහවුරු කිරීම සඳහා ඔබෙන් අසනු ඇත. + description: + prefix_invited_by_user: "@%{name} ඔබට Mastodon හි මෙම සේවාදායකයට සම්බන්ධ වීමට ආරාධනා කරයි!" + prefix_sign_up: අදම Mastodon හි ලියාපදිංචි වන්න! + suffix: ගිණුමක් සමඟ, ඔබට ඕනෑම Mastodon සේවාදායකයකින් සහ තවත් බොහෝ දේ භාවිතා කරන්නන් සමඟ පුද්ගලයින් අනුගමනය කිරීමට, යාවත්කාලීන කිරීම් පළ කිරීමට සහ පණිවිඩ හුවමාරු කර ගැනීමට හැකි වනු ඇත! + didnt_get_confirmation: තහවුරු කිරීමේ උපදෙස් ලැබුණේ නැද්ද? + dont_have_your_security_key: ඔබගේ ආරක්ෂක යතුර නොමැතිද? + forgot_password: මුරපදය අමතක වුනාද? + invalid_reset_password_token: මුරපද යළි පිහිටුවීමේ ටෝකනය අවලංගු හෝ කල් ඉකුත් වී ඇත. කරුණාකර අලුත් එකක් ඉල්ලන්න. + link_to_otp: ඔබගේ දුරකථනයෙන් ද්වි සාධක කේතයක් හෝ ප්‍රතිසාධන කේතයක් ඇතුළු කරන්න + link_to_webauth: ඔබගේ ආරක්ෂක යතුරු උපාංගය භාවිතා කරන්න + log_in_with: සමඟ ලොග් වන්න login: පිවිසෙන්න logout: නික්මෙන්න - or_log_in_with: හෝ සමඟ පිවිසෙන්න + migrate_account: වෙනත් ගිණුමකට යන්න + migrate_account_html: ඔබට මෙම ගිණුම වෙනත් එකකට හරවා යැවීමට අවශ්‍ය නම්, ඔබට එය මෙහි වින්‍යාසගත කළ හැක. + or_log_in_with: හෝ සමඟින් පිවිසෙන්න + register: ලියාපදිංචි වන්න + registration_closed: "%{instance} නව සාමාජිකයින් පිළිගන්නේ නැත" + resend_confirmation: තහවුරු කිරීමේ උපදෙස් නැවත යවන්න + reset_password: මුරපදය නැවත සකසන්න security: ආරක්ෂාව + set_new_password: නව මුරපදය සකසන්න + setup: + email_below_hint_html: පහත විද්‍යුත් තැපැල් ලිපිනය වැරදි නම්, ඔබට එය මෙතැනින් වෙනස් කර නව තහවුරු කිරීමේ විද්‍යුත් තැපෑලක් ලබා ගත හැක. + email_settings_hint_html: තහවුරු කිරීමේ විද්‍යුත් තැපෑල %{email}වෙත යවන ලදී. එම විද්‍යුත් තැපැල් ලිපිනය නිවැරදි නොවේ නම්, ඔබට එය ගිණුම් සැකසුම් තුළ වෙනස් කළ හැක. + title: සැලසුම status: account_status: ගිණුමේ තත්වය + confirming: විද්‍යුත් තැපෑල තහවුරු කිරීම සම්පූර්ණ කිරීම සඳහා රැඳී සිටිමින්. + functional: ඔබගේ ගිණුම සම්පුර්ණයෙන්ම ක්‍රියාත්මකයි. + pending: ඔබගේ අයදුම්පත අපගේ කාර්ය මණ්ඩලය විසින් සමාලෝචනය කිරීමට බලාපොරොත්තු වේ. මෙය යම් කාලයක් ගත විය හැක. ඔබගේ අයදුම්පත අනුමත වුවහොත් ඔබට විද්‍යුත් තැපෑලක් ලැබෙනු ඇත. + redirecting_to: එය දැනට %{acct}වෙත හරවා යවන බැවින් ඔබගේ ගිණුම අක්‍රියයි. + view_strikes: ඔබගේ ගිණුමට එරෙහිව පසුගිය වර්ජන බලන්න + too_fast: පෝරමය ඉතා වේගයෙන් ඉදිරිපත් කර ඇත, නැවත උත්සාහ කරන්න. + trouble_logging_in: පුරනය වීමේ ගැටලුවක්ද? + use_security_key: ආරක්ෂක යතුර භාවිතා කරන්න authorize_follow: + already_following: ඔබ දැනටමත් මෙම ගිණුම අනුගමනය කරයි + already_requested: ඔබ දැනටමත් එම ගිණුමට අනුගමනය ඉල්ලීමක් යවා ඇත + error: අවාසනාවකට, දුරස්ථ ගිණුම සෙවීමේදී දෝෂයක් ඇති විය + follow: අනුගමනය කරන්න + follow_request: 'ඔබ පහත ඉල්ලීමක් යවා ඇත:' + following: 'සාර්ථකත්වය! ඔබ දැන් පහත දැක්වේ:' post_follow: close: හෝ ඔබට මෙම කවුළුව වසාදැමිය හැකිය. return: පරිශීලකගේ පැතිකඩ පෙන්වන්න web: වියමන ට යන්න + title: "%{acct}අනුගමනය කරන්න" challenge: confirm: ඉදිරියට - invalid_password: අවලංගු නොවන මුරපදයකි + hint_html: "ඉඟිය: අපි ඉදිරි පැය සඳහා නැවත ඔබගේ මුරපදය ඔබෙන් නොඉල්ලමු." + invalid_password: නොවන මුරපදයකි + prompt: ඉදිරියට යාමට මුරපදය තහවුරු කරන්න + crypto: + errors: + invalid_key: වලංගු Ed25519 හෝ Curve25519 යතුරක් නොවේ + invalid_signature: වලංගු Ed25519 අත්සනක් නොවේ date: formats: default: "%b %d, %Y" with_month_name: "%B %d, %Y" datetime: distance_in_words: + about_x_hours: පැය %{count} + about_x_months: මාස %{count} + half_a_minute: මේ දැන් + less_than_x_minutes: මීටර් %{count} less_than_x_seconds: මේ දැන් + x_minutes: මීටර් %{count} + x_months: මාස %{count} + x_seconds: "%{count}තත්" + deletes: + challenge_not_passed: ඔබ ඇතුළත් කළ තොරතුරු නිවැරදි නැත + confirm_password: ඔබගේ අනන්‍යතාවය තහවුරු කිරීමට ඔබගේ වත්මන් මුරපදය ඇතුලත් කරන්න + confirm_username: ක්රියා පටිපාටිය තහවුරු කිරීමට ඔබගේ පරිශීලක නාමය ඇතුලත් කරන්න + proceed: ගිණුම මකන්න + success_msg: ඔබගේ ගිණුම සාර්ථකව මකා ඇත + warning: + before: 'ඉදිරියට යාමට පෙර, කරුණාකර මෙම සටහන් හොඳින් කියවන්න:' + caches: වෙනත් සේවාදායකයන් විසින් හැඹිලිගත කර ඇති අන්තර්ගතය දිගටම පැවතිය හැක + data_removal: ඔබගේ පළ කිරීම් සහ අනෙකුත් දත්ත ස්ථිරවම ඉවත් කරනු ලැබේ + email_change_html: ඔබට ඔබගේ ගිණුම මකා කළ හැක + email_contact_html: එය තවමත් නොපැමිණියේ නම්, ඔබට උදව් සඳහා %{email} විද්‍යුත් තැපෑලෙන් යැවිය හැක + email_reconfirmation_html: ඔබට තහවුරු කිරීමේ විද්‍යුත් තැපෑල නොලැබුනේ නම්, ඔබට එය නැවත ඉල්ලා සිටිය හැක + irreversible: ඔබට ඔබගේ ගිණුම ප්‍රතිසාධනය කිරීමට හෝ නැවත සක්‍රිය කිරීමට නොහැකි වනු ඇත + more_details_html: වැඩි විස්තර සඳහා, පෞද්ගලිකත්ව ප්‍රතිපත්තියබලන්න. + username_available: ඔබගේ පරිශීලක නාමය නැවත ලබා ගත හැකි වනු ඇත + username_unavailable: ඔබගේ පරිශීලක නාමය නොතිබෙනු ඇත + directories: + directory: පැතිකඩ නාමාවලිය + explanation: ඔවුන්ගේ රුචිකත්වයන් මත පදනම්ව පරිශීලකයින් සොයා ගන්න + explore_mastodon: "%{title}ගවේෂණය කරන්න" + disputes: + strikes: + action_taken: පියවර ගත්තා + appeal: අභියාචනය + appeal_approved: මෙම වර්ජනය සාර්ථකව අභියාචනා කර ඇති අතර එය තවදුරටත් වලංගු නොවේ + appeal_rejected: අභියාචනය ප්‍රතික්ෂේප කර ඇත + appeal_submitted_at: අභියාචනය ඉදිරිපත් කරන ලදී + appealed_msg: ඔබගේ අභියාචනය ඉදිරිපත් කර ඇත. එය අනුමත වුවහොත්, ඔබට දැනුම් දෙනු ලැබේ. + appeals: + submit: අභියාචනය ඉදිරිපත් කරන්න + approve_appeal: අභියාචනය අනුමත කරන්න + associated_report: ආශ්රිත වාර්තාව + created_at: දිනැති + description_html: මේවා ඔබගේ ගිණුමට එරෙහිව ගන්නා ලද ක්‍රියා සහ %{instance}හි කාර්ය මණ්ඩලය විසින් ඔබට එවා ඇති අනතුරු ඇඟවීම් වේ. + recipient: වෙත යොමු කරන ලදී + reject_appeal: අභියාචනය ප්‍රතික්ෂේප කරන්න + status: 'පළ කිරීම #%{id}' + status_removed: පළ කිරීම දැනටමත් පද්ධතියෙන් ඉවත් කර ඇත + title: "%{action} සිට %{date}" + title_actions: + delete_statuses: පසු ඉවත් කිරීම + disable: ගිණුම කැටි කිරීම + mark_statuses_as_sensitive: තනතුරු සංවේදී ලෙස සලකුණු කිරීම + none: අවවාදයයි + sensitive: ගිණුම සංවේදී ලෙස සලකුණු කිරීම + silence: ගිණුම සීමා කිරීම + suspend: ගිණුම අත්හිටුවීම + your_appeal_approved: ඔබගේ අභියාචනය අනුමත කර ඇත + your_appeal_pending: ඔබ අභියාචනයක් ඉදිරිපත් කර ඇත + your_appeal_rejected: ඔබගේ අභියාචනය ප්‍රතික්ෂේප කර ඇත + domain_validator: + invalid_domain: වලංගු ඩොමේන් නාමයක් නොවේ errors: - '400': The request you submitted was invalid or malformed. - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '406': This page is not available in the requested format. - '410': The page you were looking for doesn't exist here anymore. - '422': - '429': Too many requests - '500': - '503': The page could not be served due to a temporary server failure. + '400': ඔබ ඉදිරිපත් කළ ඉල්ලීම අවලංගු හෝ විකෘති විය. + '403': ඔබට මෙම පිටුව බැලීමට අවසර නැත. + '404': ඔබ සොයන පිටුව මෙහි නොමැත. + '406': මෙම පිටුව ඉල්ලන ලද ආකෘතියෙන් නොමැත. + '410': ඔබ සොයන පිටුව තවදුරටත් මෙහි නොමැත. + '422': + content: ආරක්ෂක සත්‍යාපනය අසාර්ථක විය. ඔබ කුකීස් අවහිර කරනවාද? + title: ආරක්ෂක සත්‍යාපනය අසාර්ථක විය + '429': ඉල්ලීම් වැඩියි + '500': + content: අපට කණගාටුයි, නමුත් අපගේ පැත්තෙන් යමක් වැරදී ඇත. + title: මෙම පිටුව නිවැරදි නොවේ + '503': තාවකාලික සේවාදායකයේ අසාර්ථක වීමක් හේතුවෙන් පිටුව සේවය කිරීමට නොහැකි විය. + noscript_html: Mastodon වෙබ් යෙදුම භාවිතා කිරීමට, කරුණාකර JavaScript සක්‍රීය කරන්න. විකල්පයක් ලෙස, ඔබේ වේදිකාව සඳහා එකක් උත්සාහ කරන්න. + existing_username_validator: + not_found: එම පරිශීලක නාමය සහිත දේශීය පරිශීලකයෙකු සොයා ගැනීමට නොහැකි විය + not_found_multiple: "%{usernames}සොයා ගැනීමට නොහැකි විය" exports: archive_takeout: date: දිනය - download: ඔබගේ සංරක්ෂිතය බාගන්න + download: ඔබගේ සුරක්ෂිතභාවය බාගන්න + hint_html: ඔබට ඔබගේ පළ කිරීම් සහ උඩුගත කළ මාධ්‍යහි සංරක්ෂිතයක් ඉල්ලා සිටිය හැක. නිර්යාත කළ දත්ත ActivityPub ආකෘතියෙන්, ඕනෑම අනුකූල මෘදුකාංගයකට කියවිය හැකිය. ඔබට දින 7කට වරක් ලේඛනාගාරයක් ඉල්ලා සිටිය හැක. + in_progress: ඔබගේ සංරක්ෂිතය සම්පාදනය කරමින්... + request: ඔබගේ සංරක්ෂිතය ඉල්ලන්න size: ප්‍රමාණය - bookmarks: පොත් යොමු - lists: ලැයිස්තු + blocks: ඔබ අවහිර කරන්න + bookmarks: පොත් යොමු කරන්න + domain_blocks: වසම් අවහිර කිරීම් + lists: ලැයිස්තුව + mutes: ඔබ නිහඬ කරන්න storage: මාධ්‍ය ගබඩාව + featured_tags: + add_new: අලුතින් එකතු කරන්න + errors: + limit: ඔබ දැනටමත් උපරිම හෑෂ් ටැග් ප්‍රමාණය විශේෂාංග කර ඇත + hint_html: "විශේෂාංගගත හැෂ් ටැග් මොනවාද? ඒවා ඔබේ පොදු පැතිකඩෙහි ප්‍රමුඛව ප්‍රදර්ශනය වන අතර එම හැෂ් ටැග් යටතේ ඔබේ පොදු පළ කිරීම් බ්‍රවුස් කිරීමට මිනිසුන්ට ඉඩ සලසයි. නිර්මාණාත්මක කෘති හෝ දිගු කාලීන ව්යාපෘති පිළිබඳ වාර්තාවක් තබා ගැනීම සඳහා ඔවුන් විශිෂ්ට මෙවලමක් වේ." filters: contexts: account: පැතිකඩයන් + home: නිවස සහ ලැයිස්තු notifications: දැනුම්දීම් + public: පොදු කාලරේඛා thread: සංවාද edit: + add_keyword: මූල පදය එක් කරන්න + keywords: මූල පද title: පෙරහන සංස්කරණය + errors: + deprecated_api_multiple_keywords: මෙම පරාමිති පෙරහන් මූල පද එකකට වඩා අදාළ වන බැවින් මෙම යෙදුමෙන් වෙනස් කළ නොහැක. වඩාත් මෑත යෙදුමක් හෝ වෙබ් අතුරු මුහුණතක් භාවිතා කරන්න. + invalid_context: කිසිවක් හෝ වලංගු නොවන සන්දර්භයක් සපයා නැත index: + contexts: "%{contexts}හි පෙරහන්" + delete: මකන්න + empty: ඔබට පෙරහන් නොමැත. + expires_in: "%{distance}කින් කල් ඉකුත් වේ" + expires_on: "%{date}දින කල් ඉකුත් වේ" + keywords: + one: "%{count} මූල පදය" + other: "%{count} මූල පද" title: පෙරහන් new: + save: නව පෙරහන සුරකින්න title: නව පෙරහනක් එකතු කරන්න footer: developers: සංවර්ධකයින් more: තව… resources: සම්පත් + trending_now: දැන් ප්‍රවණතාවය generic: all: සියල්ල + changes_saved_msg: වෙනස්කම් සාර්ථකව සුරකින ලදී! copy: පිටපත් + delete: මකන්න + none: කිසිවක් නැත + order_by: විසින් ඇණවුම් කරන්න save_changes: වෙනස්කම් සුරකින්න + today: අද + validation_errors: + one: යමක් තවමත් හරි නැත! කරුණාකර පහත දෝෂය සමාලෝචනය කරන්න + other: යමක් තවමත් හරි නැත! කරුණාකර පහත දෝෂ %{count} ක් සමාලෝචනය කරන්න + html_validator: + invalid_markup: 'වලංගු නොවන HTML සලකුණු අඩංගු වේ: %{error}' imports: + errors: + over_rows_processing_limit: පේළි %{count} කට වඩා අඩංගු වේ + modes: + merge: ඒකාබද්ධ කරන්න + merge_long: පවතින වාර්තා තබා නව ඒවා එකතු කරන්න + overwrite: උඩින් ලියන්න + overwrite_long: වත්මන් වාර්තා නව ඒවා සමඟ ප්‍රතිස්ථාපනය කරන්න + preface: ඔබ අනුගමන කරන හෝ අවහිර කරන පුද්ගලයින්ගේ ලැයිස්තුවක් වැනි වෙනත් සේවාදායකයකින් ඔබ නිර්යාත කර ඇති දත්ත ඔබට ආයාත කළ හැක. + success: ඔබගේ දත්ත සාර්ථකව උඩුගත කර ඇති අතර නියමිත වේලාවට සැකසෙනු ඇත types: - bookmarks: පොත් යොමු + blocking: අවහිර කිරීමේ ලැයිස්තුව + bookmarks: පොත් යොමු කරන්න + domain_blocking: වසම් අවහිර කිරීමේ ලැයිස්තුව + following: පහත ලැයිස්තුව + muting: නිහඬ කිරීමේ ලැයිස්තුව upload: උඩුගත කරන්න + in_memoriam_html: මතකය තුළ. invites: + delete: අක්රිය කරන්න + expired: කල් ඉකුත් වී ඇත expires_in: '1800': විනාඩි 30 '21600': හෝරා 6 @@ -300,29 +1166,214 @@ si: '43200': හෝරා 12 '604800': සති 1 '86400': දවස් 1 + expires_in_prompt: කවදාවත් නැහැ + generate: ආරාධනා සබැඳිය උත්පාදනය කරන්න + invited_by: 'ඔබට ආරාධනා කළේ:' + max_uses: + one: 1 භාවිතය + other: "%{count} භාවිතා කරයි" + max_uses_prompt: සීමාවක් නැත + prompt: මෙම සේවාදායකයට ප්‍රවේශය ලබා දීමට අන් අය සමඟ සබැඳි ජනනය කර බෙදා ගන්න + table: + expires_at: කල් ඉකුත් වේ + uses: භාවිතා කරයි title: මිනිසුන්ට ආරාධනා කරන්න + lists: + errors: + limit: ඔබ උපරිම ලැයිස්තු ප්‍රමාණයට ළඟා වී ඇත login_activities: authentication_methods: + otp: ද්වි-සාධක සත්‍යාපන යෙදුම password: මුර පදය + sign_in_token: ඊමේල් ආරක්ෂක කේතය + webauthn: ආරක්ෂක යතුරු + description_html: ඔබ හඳුනා නොගත් ක්‍රියාකාරකම් ඔබ දුටුවහොත්, ඔබේ මුරපදය වෙනස් කිරීම සහ ද්වි-සාධක සත්‍යාපනය සක්‍රීය කිරීම සලකා බලන්න. + empty: සත්‍යාපන ඉතිහාසයක් නොමැත + failed_sign_in_html: "%{ip} (%{browser}) සිට %{method} සමඟ අසාර්ථක පුරනය වීමේ උත්සාහය" + successful_sign_in_html: "%{ip} (%{browser}) සිට %{method} සමඟ සාර්ථක පුරනය වීම" + title: සත්‍යාපන ඉතිහාසය + media_attachments: + validations: + images_and_video: දැනටමත් පින්තූර අඩංගු පළ කිරීමකට වීඩියෝවක් ඇමිණිය නොහැක + not_ready: සැකසීම අවසන් නොකළ ගොනු ඇමිණිය නොහැක. මොහොතකින් නැවත උත්සාහ කරන්න! + too_many: ගොනු 4කට වඩා ඇමිණිය නොහැක + migrations: + acct: වෙත ගෙන යන ලදී + cancel: යළි-යොමුවීම් අවලංගු කරන්න + cancel_explanation: යළි-යොමුවීම් අවලංගු කිරීම ඔබගේ ජංගම ගිණුම නැවත සක්‍රිය කරනු ඇත, නමුත් එම ගිණුමට ගෙන ගිය අනුගාමිකයින් ආපසු ගෙන එන්නේ නැත. + cancelled_msg: යළි-යොමුවීම සාර්ථකව අවලංගු කරන ලදී. + errors: + already_moved: ඔබ දැනටමත් මාරු කර ඇති ගිණුමයි + missing_also_known_as: මෙම ගිණුමේ අන්වර්ථ නාමයක් නොවේ + move_to_self: ජංගම ගිණුම විය නොහැක + not_found: සොයා ගැනීමට නොහැකි විය + on_cooldown: ඔබ සිසිලනය මත සිටී + followers_count: චලනය වන අවස්ථාවේ අනුගාමිකයන් + incoming_migrations: වෙනත් ගිණුමකින් මාරු වීම + incoming_migrations_html: වෙනත් ගිණුමකින් මෙම ගිණුමට මාරු වීමට, පළමුව ඔබ අන්වර්ථගිණුමක් සෑදිය යුතුය. + moved_msg: ඔබගේ ගිණුම දැන් %{acct} වෙත හරවා යවනු ලබන අතර ඔබගේ අනුගාමිකයින් එහා මෙහා ගෙන යමින් පවතී. + not_redirecting: ඔබගේ ගිණුම දැනට වෙනත් කිසිදු ගිණුමකට හරවා යවන්නේ නැත. + on_cooldown: ඔබ මෑතකදී ඔබගේ ගිණුම සංක්‍රමණය කර ඇත. මෙම කාර්යය දින %{count} කින් නැවත ලබා ගත හැකි වනු ඇත. + past_migrations: අතීත සංක්‍රමණ + proceed_with_move: අනුගාමිකයන් මාරු කරන්න + redirected_msg: ඔබගේ ගිණුම දැන් %{acct}වෙත හරවා යවනු ලැබේ. + redirecting_to: ඔබගේ ගිණුම %{acct}වෙත හරවා යවනු ලැබේ. + set_redirect: යළි-යොමුවීම් සකසන්න + warning: + backreference_required: නව ගිණුම ප්‍රථමයෙන් මෙය ආපසු යොමු කිරීමට වින්‍යාස කළ යුතුය + before: 'ඉදිරියට යාමට පෙර, කරුණාකර මෙම සටහන් හොඳින් කියවන්න:' + cooldown: මාරු වීමෙන් පසු ඔබට නැවත ගමන් කිරීමට නොහැකි වනු ඇති පොරොත්තු කාල සීමාවක් ඇත + disabled_account: ඔබගේ ජංගම ගිණුම පසුව සම්පූර්ණයෙන්ම භාවිතා කළ නොහැක. කෙසේ වෙතත්, ඔබට දත්ත අපනයනයට මෙන්ම නැවත සක්‍රිය කිරීමට ප්‍රවේශය ඇත. + followers: මෙම ක්‍රියාව සියළුම අනුගාමිකයින් ජංගම ගිණුමේ සිට නව ගිණුමට ගෙන යනු ඇත + only_redirect_html: විකල්පයක් ලෙස, ඔබට ඔබගේ පැතිකඩහි යළි-යොමුවීමක් පමණක් තැබිය හැකිය. + other_data: වෙනත් දත්ත කිසිවක් ස්වයංක්‍රීයව ගෙන නොයනු ඇත + redirect: ඔබගේ ජංගම ගිණුමේ පැතිකඩ යළි-යොමු කිරීමේ දැන්වීමක් සමඟ යාවත්කාලීන කෙරෙන අතර සෙවුම් වලින් බැහැර කරනු ලැබේ + moderation: + title: මධ්යස්ථභාවය + move_handler: + carry_blocks_over_text: මෙම පරිශීලකයා ඔබ අවහිර කර තිබූ %{acct}සිට මාරු විය. + carry_mutes_over_text: මෙම පරිශීලකයා ඔබ නිශ්ශබ්ද කර තිබූ %{acct}වෙතින් මාරු විය. + copy_account_note_text: 'මෙම පරිශීලකයා %{acct}සිට මාරු විය, මෙන්න ඔවුන් ගැන ඔබේ පෙර සටහන්:' notification_mailer: + admin: + report: + subject: "%{name} වාර්තාවක් ඉදිරිපත් කළේය" + sign_up: + subject: "%{name} අත්සන් කර ඇත" + digest: + action: සියලුම දැනුම්දීම් බලන්න + body: "%{since}වෙනිදා ඔබගේ අවසන් සංචාරයේ සිට ඔබට මග හැරුණු පණිවිඩවල කෙටි සාරාංශයක් මෙන්න" + mention: "%{name} ඔබව සඳහන් කළේ:" + new_followers_summary: + one: එසේම, ඔබ බැහැරව සිටියදී එක් නව අනුගාමිකයෙකු ලබා ගෙන ඇත! Yay! + other: එසේම, ඔබ බැහැරව සිටියදී නව අනුගාමිකයින් %{count} ක් ලබාගෙන ඇත! අරුම පුදුම! + subject: + one: "ඔබගේ අවසන් සංචාරයේ සිට 1 නව දැනුම්දීමක් 🐘" + other: "ඔබගේ අවසන් සංචාරයේ සිට නව දැනුම්දීම් %{count} ක් 🐘" + title: ඔබ නොමැති විට... + favourite: + body: 'ඔබේ පළ කිරීම %{name}විසින් ප්‍රිය කරන ලදී:' + subject: "%{name} ඔබගේ පළ කිරීම ප්‍රිය කරන ලදී" + title: නව ප්රියතම + follow: + body: "%{name} දැන් ඔබව අනුගමනය කරයි!" + subject: "%{name} දැන් ඔබව අනුගමනය කරයි" + title: නව අනුගාමිකයෙක් + follow_request: + action: අනුගමනය කරන ඉල්ලීම් කළමනාකරණය කරන්න + body: "%{name} ඔබව අනුගමනය කිරීමට ඉල්ලා ඇත" + subject: 'පොරොත්තු අනුගාමිකයා: %{name}' + title: නව අනුගමනය ඉල්ලීම mention: action: පිළිතුර + body: 'ඔබව මෙහි %{name} කින් සඳහන් කර ඇත:' + subject: ඔබව %{name}මගින් සඳහන් කර ඇත title: නව සඳැහුම + poll: + subject: "%{name} න් මත විමසුමක් අවසන් විය" + reblog: + body: 'ඔබේ පළ කිරීම %{name}කින් වැඩි කරන ලදී:' + subject: "%{name} ඔබේ පළ කිරීම ඉහළ නැංවීය" + title: නව තල්ලුවක් + status: + subject: "%{name} දැන් පළ කළා" + update: + subject: "%{name} පළ කිරීමක් සංස්කරණය කළා" notifications: + email_events: ඊමේල් දැනුම්දීම් සඳහා සිදුවීම් + email_events_hint: 'ඔබට දැනුම්දීම් ලැබීමට අවශ්‍ය සිදුවීම් තෝරන්න:' other_settings: වෙනත් දැනුම්දීම් සැකසුම් number: human: decimal_units: format: "%n%u" + units: + billion: බී + million: එම් + quadrillion: ප්‍රශ්නය + thousand: කේ + trillion: ටී otp_authentication: + code_hint: තහවුරු කිරීමට ඔබගේ සත්‍යාපන යෙදුම මගින් ජනනය කරන ලද කේතය ඇතුළු කරන්න + description_html: ඔබ සත්‍යාපන යෙදුමක් භාවිතයෙන් ද්වි-සාධක සත්‍යාපනය සක්‍රීය කරන්නේ නම්, ලොගින් වීමේදී ඔබට ඔබගේ දුරකථනය සන්තකයේ තබා ගැනීමට අවශ්‍ය වනු ඇත, එය ඔබට ඇතුළු වීමට ටෝකන ජනනය කරයි. enable: සබල කරන්න + instructions_html: "මෙම QR කේතය ඔබගේ දුරකථනයේ Google Authenticator හෝ එවැනිම TOTP යෙදුමකට පරිලෝකනය කරන්න. මෙතැන් සිට, එම යෙදුම ඔබට ලොග් වීමේදී ඇතුළත් කළ යුතු ටෝකන ජනනය කරයි." + manual_instructions: 'ඔබට QR කේතය පරිලෝකනය කළ නොහැකි නම් සහ එය අතින් ඇතුල් කිරීමට අවශ්‍ය නම්, මෙන්න සරල පෙළ රහස:' + setup: සැලසුම + wrong_code: ඇතුළත් කළ කේතය අවලංගුයි! සේවාදායක වේලාව සහ උපාංග වේලාව නිවැරදිද? pagination: - next: ඊළඟ + newer: අලුත් + next: සඳහා + older: වැඩිහිටි + prev: පෙර truncate: "…" + polls: + errors: + already_voted: ඔබ දැනටමත් මෙම මත විමසුමට ඡන්දය දී ඇත + duplicate_options: අනුපිටපත් අයිතම අඩංගු වේ + duration_too_long: අනාගතයට බොහෝ දුරයි + duration_too_short: ඉතා ඉක්මනින් වේ + expired: මත විමසුම දැනටමත් අවසන් වී ඇත + invalid_choice: තෝරාගත් ඡන්ද විකල්පය නොපවතී + over_character_limit: එක් එක් අක්ෂර %{max} ට වඩා දිගු විය නොහැක + too_few_options: එක් අයිතමයකට වඩා තිබිය යුතුය + too_many_options: අයිතම %{max} කට වඩා අඩංගු විය නොහැක + preferences: + other: වෙනත් + posting_defaults: පෙරනිමි පළ කිරීම + public_timelines: පොදු කාලරේඛා + reactions: + errors: + limit_reached: විවිධ ප්‍රතික්‍රියා වල සීමාව ළඟා විය + unrecognized_emoji: පිළිගත් ඉමොජියක් නොවේ relationships: activity: ගිණුමේ ක්‍රියාකාරකම් - status: ගිණුමේ තත්වය + dormant: නිදිමතයි + follow_selected_followers: තෝරාගත් අනුගාමිකයින් අනුගමනය කරන්න + followers: අනුගාමිකයින් + following: අනුගමනය + invited: ආරාධනා කළා + last_active: අවසන් වරට ක්‍රියාකාරී + most_recent: මෑතකාලීන + moved: මාරු කළා + mutual: අන්යෝන්ය + primary: ප්රාථමික + relationship: සම්බන්ධතාවය + remove_selected_domains: තෝරාගත් වසම් වලින් සියලුම අනුගාමිකයින් ඉවත් කරන්න + remove_selected_followers: තෝරාගත් අනුගාමිකයින් ඉවත් කරන්න + remove_selected_follows: තෝරාගත් පරිශීලකයින් අනුගමනය නොකරන්න + status: ගිණුමේ තත්ත්වය + remote_follow: + acct: ඔබට ක්‍රියා කිරීමට අවශ්‍ය ඔබගේ username@domain ඇතුලත් කරන්න + missing_resource: ඔබගේ ගිණුම සඳහා අවශ්‍ය යළි-යොමුවීම් URL එක සොයා ගැනීමට නොහැකි විය + no_account_html: ගිණුමක් නැද්ද? ඔබට මෙහි ලියාපදිංචි විය හැක + proceed: අනුගමනය කිරීමට ඉදිරියට යන්න + prompt: 'ඔබ අනුගමනය කිරීමට යන්නේ:' + reason_html: "මෙම පියවර අවශ්ය වන්නේ ඇයි? %{instance} ඔබ ලියාපදිංචි වී ඇති සේවාදායකය නොවිය හැක, එබැවින් අපට පළමුව ඔබව ඔබගේ නිවසේ සේවාදායකය වෙත හරවා යැවිය යුතුය." + remote_interaction: + favourite: + proceed: ප්රියතම වෙත ඉදිරියට යන්න + prompt: 'ඔබට මෙම පෝස්ටය ප්‍රියතම කිරීමට අවශ්‍යයි:' + reblog: + proceed: වැඩි කිරීමට ඉදිරියට යන්න + prompt: 'ඔබට මෙම පළ කිරීම වැඩි කිරීමට අවශ්‍යයි:' + reply: + proceed: පිළිතුරු දීමට ඉදිරියට යන්න + prompt: 'ඔබට මෙම පළ කිරීමට පිළිතුරු දීමට අවශ්‍යයි:' + reports: + errors: + invalid_rules: වලංගු නීති සඳහන් නොකරයි + rss: + content_warning: 'අන්තර්ගත අනතුරු ඇඟවීම:' + descriptions: + account: "@%{acct}සිට පොදු පළ කිරීම්" + tag: "#%{hashtag}ටැග් කර ඇති පොදු පළ කිරීම්" + scheduled_statuses: + over_daily_limit: ඔබ අද දිනට නියමිත පළ කිරීම් %{limit} සීමාව ඉක්මවා ඇත + over_total_limit: ඔබ නියමිත පළ කිරීම් %{limit} සීමාව ඉක්මවා ඇත + too_soon: නියමිත දිනය අනාගතයේ විය යුතුය sessions: + activity: අවසාන ක්‍රියාකාරකම browser: අතිරික්සුව browsers: alipay: අලිපේ @@ -334,41 +1385,264 @@ si: generic: නොදන්නා අතිරික්සුවකි ie: ඉන්ටර්නෙට් එක්ස්ප්ලෝරර් micro_messenger: මයික්‍රොමැසෙන්ජර් + nokia: Nokia S40 Ovi බ්‍රව්සරය opera: ඔපෙරා otter: ඔටර් qq: කියුකියු අතිරික්සුව safari: සෆාරි uc_browser: යූසී අතිරික්සුව weibo: වෙයිබො + current_session: වත්මන් සැසිය + description: "%{browser} මත %{platform}" + explanation: මේවා දැනට ඔබගේ Mastodon ගිණුමට ලොග් වී ඇති වෙබ් බ්‍රව්සර් වේ. ip: අ.ජා. කෙ. (IP) platforms: adobe_air: ඇඩෝබි එයාර් android: ඇන්ඩ්‍රොයිඩ් blackberry: බ්ලැක්බෙරි - chrome_os: ක්‍රෝම් ඕඑස් + chrome_os: ක්‍රෝම්ස් firefox_os: ෆයර්ෆොක්ස් ඕඑස් ios: අයිඕඑස් linux: ලිනක්ස් mac: මැක්ඕඑස් + other: නොදන්නා වේදිකාව windows: වින්ඩෝස් windows_mobile: වින්ඩෝස් මොබයිල් windows_phone: වින්ඩෝස් පෝන් + revoke: අවලංගු කරන්න + revoke_success: සැසිය සාර්ථකව අවලංගු කරන ලදී + title: සැසිවාර + view_authentication_history: ඔබගේ ගිණුමේ සත්‍යාපන ඉතිහාසය බලන්න settings: account: ගිණුම account_settings: ගිණුමේ සැකසුම් + aliases: ගිණුම් අන්වර්ථ නාමයන් + appearance: පෙනුම + authorized_apps: අවසර ලත් යෙදුම් + back: Mastodon වෙත නැවත යන්න + delete: ගිණුම මකා දැමීම + development: සංවර්ධනය edit_profile: පැතිකඩ සංස්කරණය export: දත්ත නිර්යාත - import: ආයාත කරන්න + featured_tags: විශේෂාංගගත හැෂ් ටැග් + import: ආයත කරන්න import_and_export: ආයාත සහ නිර්යාත + migrate: ගිණුම් සංක්‍රමණය notifications: දැනුම්දීම් + preferences: මනාප profile: පැතිකඩ + relationships: අනුගාමිකයින් සහ අනුගාමිකයින් + statuses_cleanup: ස්වයංක්‍රීය පළ කිරීම් මකාදැමීම + strikes: මධ්‍යස්ථ වැඩ වර්ජන + two_factor_authentication: ද්වි සාධක Aut + webauthn_authentication: ආරක්ෂක යතුරු statuses: + attached: + audio: + one: "%{count} ශ්රව්ය" + other: "%{count} ශ්රව්ය" + description: 'අමුණා ඇත: %{attached}' + image: + one: "%{count} රූපය" + other: පින්තූර %{count} + video: + one: "%{count} වීඩියෝ" + other: වීඩියෝ %{count} + boosted_from_html: "%{acct_link}සිට වැඩි කරන ලදී" + content_warning: 'අන්තර්ගත අනතුරු ඇඟවීම: %{warning}' + default_language: අතුරු මුහුණත් භාෂාවට සමානයි + disallowed_hashtags: + one: 'අනුමත නොකළ හැෂ් ටැගයක් අඩංගු විය: %{tags}' + other: 'අනුමත නොකළ හැෂ් ටැග් අඩංගු විය: %{tags}' + edited_at_html: සංස්කරණය %{date} + errors: + in_reply_not_found: ඔබ පිළිතුරු දීමට උත්සාහ කරන පළ කිරීම පවතින බවක් නොපෙනේ. + open_in_web: වෙබයේ විවෘත කරන්න + over_character_limit: අක්ෂර සීමාව %{max} ඉක්මවා ඇත + pin_errors: + direct: සඳහන් කළ පරිශීලකයින්ට පමණක් පෙනෙන පළ කිරීම් ඇමිණිය නොහැක + limit: ඔබ දැනටමත් උපරිම පළ කිරීම් සංඛ්‍යාව අමුණා ඇත + ownership: වෙනත් කෙනෙකුගේ පළ කිරීමක් ඇමිණිය නොහැක + reblog: බූස්ට් එකක් ඇලවිය නොහැක + poll: + total_people: + one: "%{count} පුද්ගලයෙක්" + other: පුද්ගලයන් %{count} + total_votes: + one: "%{count} ඡන්ද" + other: ඡන්ද %{count} යි + vote: ඡන්දය දෙන්න show_more: තව පෙන්වන්න + show_newer: අලුත්ම පෙන්වන්න + show_older: පැරණි පෙන්වන්න + show_thread: නූල් පෙන්වන්න + sign_in_to_participate: සංවාදයට සහභාගී වීමට පුරන්න title: '%{name}: "%{quote}"' visibilities: - public: ප්‍රසිද්ධ + direct: සෘජු + private: අනුගාමිකයින්-පමණි + private_long: අනුගාමිකයින්ට පමණක් පෙන්වන්න + public: ප්රසිද්ධ + public_long: හැමෝටම පේනවා + unlisted: ලැයිස්තුගත නොකළ + unlisted_long: සෑම කෙනෙකුටම දැකිය හැක, නමුත් පොදු කාලරාමුවෙහි ලැයිස්තුගත කර නොමැත + statuses_cleanup: + enabled: පැරණි පළ කිරීම් ස්වයංක්‍රීයව මකන්න + enabled_hint: ඔබේ පළ කිරීම් පහත ව්‍යතිරේකවලින් එකකට ගැලපෙන්නේ නම් මිස, ඒවා නිශ්චිත වයස් සීමාවකට ළඟා වූ පසු ස්වයංක්‍රීයව මකයි + exceptions: ව්යතිරේක + explanation: පළ කිරීම් මකා දැමීම මිල අධික මෙහෙයුමක් වන බැවින්, සේවාදායකය වෙනත් ආකාරයකින් කාර්යබහුල නොවන විට කාලයත් සමඟ මෙය සෙමින් සිදු කෙරේ. මෙම හේතුව නිසා, ඔබේ පළ කිරීම් වයස් සීමාවට ළඟා වූ පසු ටික වේලාවකට පසුව මකා දැමිය හැක. + ignore_favs: ප්‍රියතමයන් නොසලකා හරින්න + ignore_reblogs: වැඩි කිරීම් නොසලකා හරින්න + interaction_exceptions: අන්තර්ක්‍රියා මත පදනම් වූ ව්‍යතිරේක + interaction_exceptions_explanation: පළ කිරීම් වරක් ඒවා ඉක්මවා ගිය පසු ප්‍රියතම හෝ බූස්ට් සීමාවට පහළින් ගියහොත් ඒවා මැකීමට සහතිකයක් නොමැති බව සලකන්න. + keep_direct: සෘජු පණිවිඩ තබා ගන්න + keep_direct_hint: ඔබගේ සෘජු පණිවිඩ කිසිවක් මකන්නේ නැත + keep_media: මාධ්‍ය ඇමුණුම් සමඟ පළ කිරීම් තබා ගන්න + keep_media_hint: මාධ්‍ය ඇමුණුම් ඇති ඔබේ පළ කිරීම් කිසිවක් මකන්නේ නැත + keep_pinned: පින් කළ පළ කිරීම් තබා ගන්න + keep_pinned_hint: ඔබගේ පින් කළ පළ කිරීම් කිසිවක් මකන්නේ නැත + keep_polls: ඡන්ද තබා ගන්න + keep_polls_hint: ඔබගේ ඡන්ද විමසීම් කිසිවක් මකන්නේ නැත + keep_self_bookmark: ඔබ පිටු සලකුණු කළ පළ කිරීම් තබා ගන්න + keep_self_bookmark_hint: ඔබ ඔබේම පළ කිරීම් පිටු සලකුණු කර ඇත්නම් ඒවා මකා නොදමන්න + keep_self_fav: ඔබ කැමති පළ කිරීම් තබා ගන්න + keep_self_fav_hint: ඔබ ඒවාට කැමති නම් ඔබේම පළ කිරීම් මකා නොදමන්න + min_age: + '1209600': සති 2 යි + '15778476': මාස 6 යි + '2629746': මාස 1 යි + '31556952': වසර 1 යි + '5259492': මාස 2 ක් + '604800': 1 සතිය + '63113904': අවුරුදු 2 ක් + '7889238': මාස 3 යි + min_age_label: වයස් සීමාව + min_favs: අඩුම තරමින් පෝස්ට් ප්‍රිය කරන ලෙස තබා ගන්න + min_favs_hint: අවම වශයෙන් මෙම ප්‍රියතම ප්‍රමාණය ලබා ඇති ඔබේ පළ කිරීම් කිසිවක් මකන්නේ නැත. ඔවුන්ගේ ප්‍රියතමයන් ගණන නොතකා පළ කිරීම් මැකීමට හිස්ව තබන්න + min_reblogs: අඩුම තරමේ පෝස්ට් බූස්ට් කරගෙන තියාගන්න + min_reblogs_hint: අඩුම තරමින් මෙම වාර ගණන වැඩි කර ඇති ඔබගේ පළ කිරීම් කිසිවක් මකා නොදමන්න. බූස්ට් ගණන නොතකා පළ කිරීම් මැකීමට හිස්ව තබන්න stream_entries: - sensitive_content: සංවේදී අන්තර්ගතයකි + pinned: පින් කළ පළ කිරීම + reblogged: ඉහල නැංවීය + sensitive_content: සංවේදී අන්තර්ගතය + strikes: + errors: + too_late: මෙම වර්ජනයට අභියාචනයක් ඉදිරිපත් කිරීමට ප්‍රමාද වැඩියි + tags: + does_not_match_previous_name: පෙර නමට නොගැලපේ + terms: + title: "%{instance} සේවා නියම සහ රහස්‍යතා ප්‍රතිපත්තිය" + themes: + contrast: Mastodon (ඉහළ වෙනස) + default: මැස්ටෝඩන් (අඳුරු) + mastodon-light: මැස්ටෝඩන් (ආලෝකය) two_factor_authentication: + add: එකතු කරන්න + disable: 2FA අබල කරන්න + disabled_success: ද්වි-සාධක සත්‍යාපනය සාර්ථකව අබල කර ඇත edit: සංස්කරණය + enabled: ද්වි-සාධක සත්‍යාපනය සක්‍රීය කර ඇත + enabled_success: ද්වි-සාධක සත්‍යාපනය සාර්ථකව සබල කර ඇත + generate_recovery_codes: ප්‍රතිසාධන කේත ජනනය කරන්න + lost_recovery_codes: ඔබගේ දුරකථනය නැති වුවහොත් ඔබගේ ගිණුමට ප්‍රවේශය නැවත ලබා ගැනීමට ප්‍රතිසාධන කේත ඔබට ඉඩ සලසයි. ඔබට ඔබේ ප්‍රතිසාධන කේත නැති වී ඇත්නම්, ඔබට ඒවා මෙහි නැවත උත්පාදනය කළ හැක. ඔබගේ පැරණි ප්‍රතිසාධන කේත අවලංගු වනු ඇත. + methods: ද්වි සාධක ක්රම + otp: Authenticator යෙදුම + recovery_codes: උපස්ථ ප්‍රතිසාධන කේත + recovery_codes_regenerated: ප්‍රතිසාධන කේත සාර්ථකව ප්‍රතිජනනය කරන ලදී + recovery_instructions_html: ඔබට කවදා හෝ ඔබගේ දුරකථනයට ප්‍රවේශය අහිමි වුවහොත්, ඔබගේ ගිණුමට ප්‍රවේශය නැවත ලබා ගැනීමට පහත ප්‍රතිසාධන කේත වලින් එකක් භාවිතා කළ හැක. ප්‍රතිසාධන කේත ආරක්ෂිතව තබා ගන්න. උදාහරණයක් ලෙස, ඔබට ඒවා මුද්‍රණය කර වෙනත් වැදගත් ලේඛන සමඟ ගබඩා කළ හැකිය. webauthn: ආරක්‍ෂණ යතුරු + user_mailer: + appeal_approved: + action: ඔබගේ ගිණුමට යන්න + explanation: ඔබ %{appeal_date} දින ඉදිරිපත් කළ %{strike_date} හි ඔබේ ගිණුමට එරෙහි වර්ජනයේ අභියාචනය අනුමත කර ඇත. ඔබගේ ගිණුම නැවත වරක් හොඳ තත්වයක පවතී. + subject: "%{date} සිට ඔබගේ අභියාචනය අනුමත කර ඇත" + title: අභියාචනය අනුමත කර ඇත + appeal_rejected: + explanation: "%{strike_date} දින ඔබේ ගිණුමට එරෙහිව ඔබ %{appeal_date} දින ඉදිරිපත් කළ වර්ජනයේ අභියාචනය ප්‍රතික්ෂේප කර ඇත." + subject: "%{date} සිට ඔබගේ අභියාචනය ප්‍රතික්ෂේප කර ඇත" + title: අභියාචනය ප්‍රතික්ෂේප විය + backup_ready: + explanation: ඔබ ඔබේ Mastodon ගිණුමේ සම්පූර්ණ උපස්ථයක් ඉල්ලා ඇත. එය දැන් බාගත කිරීම සඳහා සූදානම්! + subject: ඔබගේ සංරක්ෂිතය බාගැනීමට සූදානම්ය + title: සංරක්ෂිත රැගෙන යාම + suspicious_sign_in: + change_password: ඔබගේ මුරපදය වෙනස් කරන්න + details: 'පුරනය වීමේ විස්තර මෙන්න:' + explanation: අපි නව IP ලිපිනයකින් ඔබගේ ගිණුමට පුරනය වීමක් අනාවරණය කරගෙන ඇත. + further_actions_html: මෙය ඔබ නොවේ නම්, අපි ඔබට වහාම %{action} ලෙස නිර්දේශ කර ඔබගේ ගිණුම සුරක්ෂිතව තබා ගැනීමට සාධක දෙකක සත්‍යාපනය සබල කරන්න. + subject: ඔබගේ ගිණුම නව IP ලිපිනයකින් ප්‍රවේශ වී ඇත + title: නව පුරනය වීමක් + warning: + appeal: අභියාචනයක් ඉදිරිපත් කරන්න + appeal_description: මෙය දෝෂයක් බව ඔබ විශ්වාස කරන්නේ නම්, ඔබට %{instance}හි කාර්ය මණ්ඩලයට අභියාචනයක් ඉදිරිපත් කළ හැක. + categories: + spam: ආයාචිත තැපැල් + violation: අන්තර්ගතය පහත ප්‍රජා මාර්ගෝපදේශ උල්ලංඝනය කරයි + explanation: + delete_statuses: ඔබගේ සමහර පළ කිරීම් ප්‍රජා මාර්ගෝපදේශ එකක් හෝ කිහිපයක් උල්ලංඝනය කරන බව සොයා ගෙන ඇති අතර පසුව %{instance}හි උපපරිපාලකයින් විසින් ඉවත් කර ඇත. + disable: ඔබට තවදුරටත් ඔබගේ ගිණුම භාවිතා කළ නොහැක, නමුත් ඔබගේ පැතිකඩ සහ අනෙකුත් දත්ත නොවෙනස්ව පවතී. ඔබට ඔබගේ දත්තවල උපස්ථයක් ඉල්ලා සිටීමට, ගිණුම් සැකසීම් වෙනස් කිරීමට හෝ ඔබගේ ගිණුම මකා දැමීමට හැකිය. + mark_statuses_as_sensitive: ඔබගේ සමහර පළ කිරීම් %{instance}හි පරිපාලකයින් විසින් සංවේදී ලෙස සලකුණු කර ඇත. මෙයින් අදහස් කරන්නේ පෙරදසුනක් දර්ශනය වීමට පෙර පුද්ගලයින්ට පළ කිරීම් වල මාධ්‍ය තට්ටු කිරීමට අවශ්‍ය වනු ඇති බවයි. අනාගතයේදී පළ කිරීමේදී ඔබට මාධ්‍ය සංවේදී ලෙස සලකුණු කළ හැක. + sensitive: මෙතැන් සිට, ඔබගේ උඩුගත කරන ලද සියලුම මාධ්‍ය ගොනු සංවේදී ලෙස සලකුණු කර ක්ලික්-හරහා අනතුරු ඇඟවීමක් පිටුපස සඟවනු ඇත. + silence: ඔබට තවමත් ඔබගේ ගිණුම භාවිතා කළ හැකි නමුත් දැනටමත් ඔබව අනුගමනය කරන පුද්ගලයින් පමණක් මෙම සේවාදායකයේ ඔබගේ පළ කිරීම් දකිනු ඇති අතර, විවිධ සොයාගැනීම් විශේෂාංග වලින් ඔබව බැහැර කරනු ලැබිය හැක. කෙසේ වෙතත්, අනෙක් අය තවමත් ඔබව අතින් අනුගමනය කළ හැක. + suspend: ඔබට තවදුරටත් ඔබගේ ගිණුම භාවිතා කළ නොහැකි අතර, ඔබගේ පැතිකඩ සහ අනෙකුත් දත්ත තවදුරටත් ප්‍රවේශ විය නොහැක. දින 30කින් පමණ දත්ත සම්පූර්ණයෙන් ඉවත් කරන තෙක් ඔබට තවමත් ඔබේ දත්තවල උපස්ථයක් ඉල්ලා සිටීමට පුරනය විය හැක, නමුත් ඔබව අත්හිටුවීම මගහැර යාම වැළැක්වීමට අපි මූලික දත්ත කිහිපයක් රඳවා ගන්නෙමු. + reason: 'හේතුව:' + statuses: 'උපුටා දක්වන ලද පළ කිරීම්:' + subject: + delete_statuses: "%{acct} හි ඔබගේ පළ කිරීම් ඉවත් කර ඇත" + disable: ඔබගේ ගිණුම %{acct} කර ඇත + mark_statuses_as_sensitive: "%{acct} හි ඔබගේ පළ කිරීම් සංවේදී ලෙස සලකුණු කර ඇත" + none: "%{acct}සඳහා අනතුරු ඇඟවීම" + sensitive: "%{acct} හි ඔබගේ පළ කිරීම් මෙතැන් සිට සංවේදී ලෙස සලකුණු කෙරේ" + silence: ඔබගේ ගිණුම %{acct} සීමා කර ඇත + suspend: ඔබගේ ගිණුම %{acct} අත්හිටුවා ඇත + title: + delete_statuses: පළ කිරීම් ඉවත් කරන ලදී + disable: ගිණුම නිශ්චල කර ඇත + mark_statuses_as_sensitive: පළ කිරීම් සංවේදී ලෙස ලකුණු කර ඇත + none: අවවාදයයි + sensitive: ගිණුම සංවේදී ලෙස ලකුණු කර ඇත + silence: ගිණුම සීමා සහිතයි + suspend: ගිණුම අත්හිටුවා ඇත + welcome: + edit_profile_action: සැකසුම් පැතිකඩ + edit_profile_step: ඔබට අවතාරයක්, ශීර්ෂයක් උඩුගත කිරීමෙන්, ඔබේ සංදර්ශක නම වෙනස් කිරීමෙන් සහ තවත් දේ මඟින් ඔබේ පැතිකඩ අභිරුචිකරණය කළ හැකිය. නව අනුගාමිකයින්ට ඔබව අනුගමනය කිරීමට ඉඩ දීමට පෙර ඔවුන් සමාලෝචනය කිරීමට ඔබ කැමති නම්, ඔබට ඔබගේ ගිණුම අගුළු දැමිය හැක. + explanation: ඔබ ආරම්භ කිරීමට උපදෙස් කිහිපයක් මෙන්න + final_action: පළ කිරීම ආරම්භ කරන්න + final_step: 'පළ කිරීම ආරම්භ කරන්න! අනුගාමිකයින් නොමැතිව වුවද, ඔබගේ පොදු පළ කිරීම් වෙනත් අය විසින් දැකිය හැකිය, උදාහරණයක් ලෙස දේශීය කාලරේඛාවේ සහ හැෂ් ටැග් වල. ඔබට #introductions හැෂ් ටැගය මත ඔබව හඳුන්වා දීමට අවශ්‍ය විය හැක.' + full_handle: ඔබේ සම්පූර්ණ හසුරුව + full_handle_hint: මෙය ඔබ ඔබේ මිතුරන්ට පවසනු ඇත, එවිට ඔවුන්ට වෙනත් සේවාදායකයකින් ඔබට පණිවිඩ යැවීමට හෝ අනුගමනය කිරීමට හැකිය. + review_preferences_action: මනාප වෙනස් කරන්න + review_preferences_step: ඔබට ලැබීමට කැමති ඊමේල්, හෝ ඔබේ පළ කිරීම් පෙරනිමි කිරීමට ඔබ කැමති පුද්ගලිකත්ව මට්ටම වැනි ඔබේ මනාප සැකසීමට වග බලා ගන්න. ඔබට චලන අසනීපයක් නොමැති නම්, ඔබට GIF ස්වයංක්‍රීය ධාවනය සබල කිරීමට තෝරා ගත හැකිය. + subject: Mastodon වෙත සාදරයෙන් පිළිගනිමු + tip_federated_timeline: ෆෙඩරේටඩ් කාලරාමුව යනු මැස්ටෝඩන් ජාලයේ ගිනි හෝස් දසුනකි. නමුත් එයට ඇතුළත් වන්නේ ඔබේ අසල්වැසියන් දායක වී ඇති පුද්ගලයින් පමණි, එබැවින් එය සම්පූර්ණ නොවේ. + tip_following: ඔබ පෙරනිමියෙන් ඔබගේ සේවාදායකයේ පරිපාලක(න්) අනුගමනය කරයි. වඩාත් සිත්ගන්නා පුද්ගලයින් සොයා ගැනීමට, දේශීය සහ ෆෙඩරල් කාලරේඛා පරීක්ෂා කරන්න. + tip_local_timeline: ප්‍රාදේශීය කාලරේඛාව යනු %{instance}හි පුද්ගලයින්ගේ ගිනි හෝස් දසුනකි. මේ ඔබේ ආසන්න අසල්වැසියන්! + tip_mobile_webapp: ඔබගේ ජංගම බ්‍රවුසරය ඔබගේ මුල් තිරයට Mastodon එක් කිරීමට ඉදිරිපත් කරන්නේ නම්, ඔබට තල්ලු දැනුම්දීම් ලැබිය හැක. එය බොහෝ ආකාරවලින් ස්වදේශීය යෙදුමක් ලෙස ක්‍රියා කරයි! + tips: ඉඟි + title: නැවට සාදරයෙන් පිළිගනිමු, %{name}! + users: + follow_limit_reached: ඔබට පුද්ගලයින් %{limit} කට වඩා අනුගමනය කළ නොහැක + invalid_otp_token: වලංගු නොවන ද්වි-සාධක කේතය + otp_lost_help_html: ඔබට දෙකටම ප්‍රවේශය අහිමි වුවහොත්, ඔබට %{email}සමඟ සම්බන්ධ විය හැක + seamless_external_login: ඔබ බාහිර සේවාවක් හරහා ලොග් වී ඇත, එබැවින් මුරපදය සහ ඊමේල් සැකසුම් නොමැත. + signed_in_as: 'මෙසේ පුරනය වී ඇත:' + verification: + explanation_html: 'ඔබගේ පැතිකඩ පාරදත්තහි ඇති සබැඳි වල හිමිකරු ලෙස ඔබට සත්‍යාපනය කළ හැක. ඒ සඳහා, සම්බන්ධිත වෙබ් අඩවියේ ඔබේ Mastodon පැතිකඩ වෙත ආපසු සබැඳියක් තිබිය යුතුය. සබැඳිය ආපසු යුතුය. සබැඳියේ පෙළ අන්තර්ගතය වැදගත් නොවේ. මෙන්න උදාහරණයක්:' + verification: සත්යාපනය + webauthn_credentials: + add: නව ආරක්ෂක යතුර එක් කරන්න + create: + error: ඔබගේ ආරක්ෂක යතුර එක් කිරීමේ ගැටලුවක් ඇති විය. කරුණාකර නැවත උත්සාහ කරන්න. + success: ඔබගේ ආරක්ෂක යතුර සාර්ථකව එක් කරන ලදී. + delete: මකන්න + delete_confirmation: ඔබට මෙම ආරක්ෂක යතුර මැකීමට අවශ්‍ය බව විශ්වාසද? + description_html: ඔබ ආරක්‍ෂක යතුරු සත්‍යාපනයසක්‍රීය කරන්නේ නම්, පුරනය වීමේදී ඔබගේ ආරක්‍ෂක යතුරු වලින් එකක් භාවිතා කිරීම අවශ්‍ය වේ. + destroy: + error: ඔබගේ ආරක්ෂක යතුර මැකීමේ ගැටලුවක් ඇති විය. කරුණාකර නැවත උත්සාහ කරන්න. + success: ඔබගේ ආරක්ෂක යතුර සාර්ථකව මකා ඇත. + invalid_credential: වලංගු නොවන ආරක්ෂක යතුර + nickname_hint: ඔබගේ නව ආරක්ෂක යතුරේ අන්වර්ථ නාමය ඇතුළත් කරන්න + not_enabled: ඔබ තවමත් WebAuthn සබල කර නැත + not_supported: මෙම බ්‍රවුසරය ආරක්ෂක යතුරු සඳහා සහය නොදක්වයි + otp_required: ආරක්ෂක යතුරු භාවිතා කිරීමට කරුණාකර පළමුව ද්වි-සාධක සත්‍යාපනය සක්‍රීය කරන්න. + registered_on: "%{date}හි ලියාපදිංචි වී ඇත" diff --git a/config/locales/simple_form.ast.yml b/config/locales/simple_form.ast.yml index c9891398510..b41e6404b3a 100644 --- a/config/locales/simple_form.ast.yml +++ b/config/locales/simple_form.ast.yml @@ -96,6 +96,10 @@ ast: reblog: Daquién compartió dalgún estáu de to tag: name: Etiqueta + user_role: + name: Nome + permissions_as_keys: Permisos + position: Prioridá 'no': Non recommended: Aconséyase required: diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index ccbb902823d..81fd117f79a 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -68,6 +68,11 @@ ca: with_dns_records: Es procurarà resoldre els registres DNS del domini determinat i els resultats també es llistaran a la llista negra featured_tag: name: 'És possible que vulguis utilitzar una d''aquestes:' + filters: + action: Tria quina acció cal executar quan una publicació coincideixi amb el filtre + actions: + hide: Ocultar completament el contingut filtrat, comportant-se com si no existís + warn: Oculta el contingut filtrat rera un avís mencionant el títol del filtre form_challenge: current_password: Estàs entrant en una àrea segura imports: @@ -181,6 +186,7 @@ ca: setting_use_pending_items: Mode lent severity: Severitat sign_in_token_attempt: Codi de seguretat + title: Títol type: Importa el tipus username: Nom d'usuari username_or_email: Nom d'usuari o adreça electrònica @@ -189,6 +195,10 @@ ca: with_dns_records: Incloure registres MX i IP del domini featured_tag: name: Etiqueta + filters: + actions: + hide: Oculta completament + warn: Oculta amb un avís interactions: must_be_follower: Bloqueja les notificacions de persones que no em segueixen must_be_following: Bloqueja les notificacions de persones no seguides diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml index 789b328b598..110a13c7621 100644 --- a/config/locales/simple_form.cs.yml +++ b/config/locales/simple_form.cs.yml @@ -91,6 +91,9 @@ cs: name: Můžete měnit pouze velikost písmen, například kvůli lepší čitelnosti user: chosen_languages: Po zaškrtnutí budou ve veřejných časových osách zobrazeny pouze příspěvky ve zvolených jazycích + user_role: + highlighted: Toto roli učiní veřejně viditelnou + permissions_as_keys: Uživatelé s touto rolí budou moci... webhook: events: Zvolte odesílané události url: Kam budou události odesílány @@ -222,6 +225,12 @@ cs: name: Hashtag trendable: Povolit zobrazení tohoto hashtagu mezi populárními usable: Povolit používat tento hashtag v příspěvcích + user: + role: Role + user_role: + name: Název + permissions_as_keys: Oprávnění + position: Priorita webhook: events: Zapnuté události url: URL koncového bodu diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index 84450c768d1..cb80f7eaafb 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -68,6 +68,11 @@ da: with_dns_records: Et forsøg på at opløse det givne domænes DNS-poster foretages, og resultaterne blokeres ligeledes featured_tag: name: 'Et af flg. ønskes måske anvendt:' + filters: + action: Vælg handlingen til eksekvering, når et indlæg matcher filteret + actions: + hide: Skjul filtreret indhold helt (adfærd som om, det ikke fandtes) + warn: Skjul filtreret indhold bag en advarsel, der nævner filterets titel form_challenge: current_password: Du bevæger dig ind på et sikkert område imports: @@ -181,6 +186,7 @@ da: setting_use_pending_items: Langsom tilstand severity: Alvorlighed sign_in_token_attempt: Sikkerhedskode + title: Titel type: Importtype username: Brugernavn username_or_email: Brugernavn eller e-mail @@ -189,6 +195,10 @@ da: with_dns_records: Inkludér domænets MX-poster og IP'er featured_tag: name: Hashtag + filters: + actions: + hide: Skjul helt + warn: Skjul bag en advarsel interactions: must_be_follower: Blokér notifikationer fra ikke-følgere must_be_following: Blokér notifikationer fra folk, som ikke følges diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml index 89ddae0cbe9..63a68c1c025 100644 --- a/config/locales/simple_form.el.yml +++ b/config/locales/simple_form.el.yml @@ -172,6 +172,7 @@ el: setting_use_pending_items: Αργή λειτουργία severity: Αυστηρότητα sign_in_token_attempt: Κωδικός ασφαλείας + title: Τίτλος type: Τύπος εισαγωγής username: Όνομα χρηστη username_or_email: Όνομα ή διεύθυνση email χρήστη @@ -180,6 +181,10 @@ el: with_dns_records: Συμπερίληψη εγγραφών MX και διευθύνσεων IP του τομέα featured_tag: name: Ετικέτα + filters: + actions: + hide: Πλήρης απόκρυψη + warn: Απόκρυψη με προειδοποίηση interactions: must_be_follower: Μπλόκαρε τις ειδοποιήσεις από όσους δεν σε ακολουθούν must_be_following: Μπλόκαρε τις ειδοποιήσεις από όσους δεν ακολουθείς diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index 47ec6559dbe..2175ab5712d 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -10,7 +10,7 @@ eo: text: Vi povas uzi skribmanierojn de mesaĝoj, kiel URL-ojn, kradvortojn kaj menciojn title: Laŭvola. Ne videbla por la ricevanto admin_account_action: - include_statuses: La uzanto vidos, kiujn afiŝojn estas kaŭzintaj la moderigan agon aŭ averton + include_statuses: La uzanto vidos, kiujn afiŝojn kaŭzis la agon de moderigo aŭ de averto send_email_notification: La uzanto ricevos klarigon pri tio, kio okazis al ties konto text_html: Malnepra. Vi povas uzi skribmanierojn de mesaĝoj. Vi povas aldoni avertajn antaŭagordojn por ŝpari tempon type_html: Elektu kion fari kun %{acct} @@ -45,7 +45,7 @@ eo: password: Uzu almenaŭ 8 signojn phrase: Estos provita senzorge pri la uskleco de teksto aŭ averto pri enhavo de mesaĝo scopes: Kiujn API-ojn la aplikaĵo permesiĝos atingi. Se vi elektas supran amplekson, vi ne bezonas elekti la individuajn. - setting_aggregate_reblogs: Ne montri novajn diskonigojn de mesaĝoj laste diskonigitaj (nur efikas al novaj diskonigoj) + setting_aggregate_reblogs: Ne montri novajn plusendojn de mesaĝoj lastatempe plusenditaj (nur efikas al nove ricevitaj plusendoj) setting_default_sensitive: Tiklaj aŭdovidaĵoj estas defaŭlte kaŝita kaj povas esti malkiŝita per klako setting_display_media_default: Kaŝi aŭdovidaĵojn markitajn kiel tiklaj setting_display_media_hide_all: Ĉiam kaŝi ĉiujn aŭdovidaĵojn @@ -61,6 +61,9 @@ eo: domain: Ĉi tiu domajno povos akiri datumon de ĉi tiu servilo kaj envenanta datumo estos prilaborita kaj konservita featured_tag: name: 'Vi povus uzi iun el la jenaj:' + filters: + actions: + warn: Kaŝi la enhavon filtritan malantaŭ averto mencianta la nomon de la filtro form_challenge: current_password: Vi eniras sekuran areon imports: @@ -138,9 +141,10 @@ eo: note: Sinprezento otp_attempt: Kodo de dufaktora aŭtentigo password: Pasvorto - phrase: Vorto aŭ frazo + phrase: Ĉefvorto aŭ frazo setting_advanced_layout: Ebligi altnivelan retpaĝan interfacon setting_aggregate_reblogs: Grupigi diskonigojn en templinioj + setting_always_send_emails: Ĉiam sendi la sciigojn per retpoŝto setting_auto_play_gif: Aŭtomate ekigi GIF-ojn setting_boost_modal: Montri konfirman fenestron antaŭ ol diskonigi mesaĝon setting_crop_images: Stuci bildojn en negrandigitaj mesaĝoj al 16x9 @@ -159,19 +163,24 @@ eo: setting_reduce_motion: Redukti la movecojn de la animacioj setting_show_application: Publikigi la aplikaĵon uzatan por sendi mesaĝojn setting_system_font_ui: Uzi la dekomencan tiparon de la sistemo - setting_theme: Reteja etoso + setting_theme: Etoso de la retejo setting_trends: Montri hodiaŭajn furoraĵojn setting_unfollow_modal: Montri konfirman fenestron antaŭ ol ĉesi sekvi iun setting_use_blurhash: Montri buntajn transirojn por kaŝitaj aŭdovidaĵoj setting_use_pending_items: Malrapida modo severity: Graveco sign_in_token_attempt: Sekureca kodo + title: Titolo type: Importa tipo username: Uzantnomo username_or_email: Uzantnomo aŭ Retadreso whole_word: Tuta vorto featured_tag: name: Kradvorto + filters: + actions: + hide: Kaŝi komplete + warn: Kaŝi malantaŭ averto interactions: must_be_follower: Bloki sciigojn de nesekvantoj must_be_following: Bloki sciigojn de homoj, kiujn vi ne sekvas diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml index 8f30266e362..656599d9402 100644 --- a/config/locales/simple_form.es-AR.yml +++ b/config/locales/simple_form.es-AR.yml @@ -68,6 +68,11 @@ es-AR: with_dns_records: Se hará un intento de resolver los registros DNS del dominio dado y los resultados serán también bloqueados featured_tag: name: 'Puede que quieras usar una de estas:' + filters: + action: Elegir qué acción realizar cuando un mensaje coincide con el filtro + actions: + hide: Ocultar completamente el contenido filtrado, comportándose como si no existiera + warn: Ocultar el contenido filtrado detrás de una advertencia mencionando el título del filtro form_challenge: current_password: Estás ingresando en un área segura imports: @@ -91,6 +96,13 @@ es-AR: name: Sólo podés cambiar la capitalización de las letras, por ejemplo, para que sea más legible user: chosen_languages: Cuando estén marcados, sólo se mostrarán los mensajes en los idiomas seleccionados en las líneas temporales públicas + role: El rol controla qué permisos tiene el usuario + user_role: + color: Color que se utilizará para el rol a lo largo de la interface de usuario, como RGB en formato hexadecimal + highlighted: Esto hace que el rol sea públicamente visible + name: Nombre público del rol, si el rol se establece para que se muestre como una insignia + permissions_as_keys: Los usuarios con este rol tendrán acceso a… + position: Un rol más alto decide la resolución de conflictos en ciertas situaciones webhook: events: Seleccionar eventos para enviar url: Adónde serán enviados los eventos @@ -181,6 +193,7 @@ es-AR: setting_use_pending_items: Modo lento severity: Severidad sign_in_token_attempt: Código de seguridad + title: Título type: Tipo de importación username: Nombre de usuario username_or_email: Nombre de usuario o correo electrónico @@ -189,6 +202,10 @@ es-AR: with_dns_records: Incluir los registros MX y las direcciones IP del dominio featured_tag: name: Etiqueta + filters: + actions: + hide: Ocultar completamente + warn: Ocultar con una advertencia interactions: must_be_follower: Bloquear notificaciones de cuentas que no te siguen must_be_following: Bloquear notificaciones de cuentas que no seguís @@ -222,6 +239,14 @@ es-AR: name: Etiqueta trendable: Permitir que esta etiqueta aparezca bajo tendencias usable: Permitir a los mensajes usar esta etiqueta + user: + role: Rol + user_role: + color: Color de Insignia + highlighted: Mostrar rol como insignia en perfiles de usuario + name: Nombre + permissions_as_keys: Permisos + position: Prioridad webhook: events: Eventos habilitados url: Dirección web del punto final diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index 66efd68abc4..b4c00359373 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -68,6 +68,11 @@ es-MX: with_dns_records: Se hará un intento de resolver los registros DNS del dominio dado y los resultados serán también puestos en lista negra featured_tag: name: 'Puede que quieras usar uno de estos:' + filters: + action: Elegir qué acción realizar cuando una publicación coincide con el filtro + actions: + hide: Ocultar completamente el contenido filtrado, comportándose como si no existiera + warn: Ocultar el contenido filtrado detrás de una advertencia mencionando el título del filtro form_challenge: current_password: Estás entrando en un área segura imports: @@ -91,6 +96,9 @@ es-MX: name: Sólo se puede cambiar el cajón de las letras, por ejemplo, para que sea más legible user: chosen_languages: Cuando se marca, solo se mostrarán los toots en los idiomas seleccionados en los timelines públicos + webhook: + events: Seleccionar eventos para enviar + url: Donde los eventos serán enviados labels: account: fields: @@ -178,6 +186,7 @@ es-MX: setting_use_pending_items: Modo lento severity: Severidad sign_in_token_attempt: Código de seguridad + title: Título type: Importar tipo username: Nombre de usuario username_or_email: Usuario o Email @@ -186,6 +195,10 @@ es-MX: with_dns_records: Incluye los registros MX y las IP del dominio featured_tag: name: Etiqueta + filters: + actions: + hide: Ocultar completamente + warn: Ocultar con una advertencia interactions: must_be_follower: Bloquear notificaciones de personas que no te siguen must_be_following: Bloquear notificaciones de personas que no sigues @@ -219,6 +232,9 @@ es-MX: name: Etiqueta trendable: Permitir que esta etiqueta aparezca bajo tendencias usable: Permitir a los toots usar esta etiqueta + webhook: + events: Eventos habilitados + url: URL de Endpoint 'no': 'No' recommended: Recomendado required: diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml index 53863ba311b..b407e0581db 100644 --- a/config/locales/simple_form.es.yml +++ b/config/locales/simple_form.es.yml @@ -68,6 +68,11 @@ es: with_dns_records: Se hará un intento de resolver los registros DNS del dominio dado y los resultados serán también puestos en lista negra featured_tag: name: 'Puede que quieras usar uno de estos:' + filters: + action: Elegir qué acción realizar cuando una publicación coincide con el filtro + actions: + hide: Ocultar completamente el contenido filtrado, comportándose como si no existiera + warn: Ocultar el contenido filtrado detrás de una advertencia mencionando el título del filtro form_challenge: current_password: Estás entrando en un área segura imports: @@ -91,6 +96,13 @@ es: name: Sólo se puede cambiar el cajón de las letras, por ejemplo, para que sea más legible user: chosen_languages: Cuando se marca, solo se mostrarán las publicaciones en los idiomas seleccionados en las líneas de tiempo públicas + role: El rol controla qué permisos tiene el usuario + user_role: + color: Color que se utilizará para el rol a lo largo de la interfaz de usuario, como RGB en formato hexadecimal + highlighted: Esto hace que el rol sea públicamente visible + name: Nombre público del rol, si el rol se establece para que se muestre como una insignia + permissions_as_keys: Los usuarios con este rol tendrán acceso a... + position: Un rol más alto decide la resolución de conflictos en ciertas situaciones webhook: events: Seleccionar eventos para enviar url: Donde los eventos serán enviados @@ -181,6 +193,7 @@ es: setting_use_pending_items: Modo lento severity: Severidad sign_in_token_attempt: Código de seguridad + title: Título type: Importar tipo username: Nombre de usuario username_or_email: Usuario o Email @@ -189,6 +202,10 @@ es: with_dns_records: Incluye los registros MX y las IP del dominio featured_tag: name: Etiqueta + filters: + actions: + hide: Ocultar completamente + warn: Ocultar con una advertencia interactions: must_be_follower: Bloquear notificaciones de personas que no te siguen must_be_following: Bloquear notificaciones de personas que no sigues @@ -222,6 +239,14 @@ es: name: Etiqueta trendable: Permitir que esta etiqueta aparezca bajo tendencias usable: Permitir a las publicaciones usar esta etiqueta + user: + role: Rol + user_role: + color: Color de insignia + highlighted: Mostrar rol como insignia en perfiles de usuario + name: Nombre + permissions_as_keys: Permisos + position: Prioridad webhook: events: Eventos habilitados url: URL de Endpoint diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index c4fd49040df..e9545cf085b 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -68,6 +68,11 @@ fr: with_dns_records: Une tentative de résolution des enregistrements DNS du domaine donné sera effectuée et les résultats seront également mis sur liste noire featured_tag: name: 'Vous pourriez vouloir utiliser l’un d’entre eux :' + filters: + action: Choisir l'action à effectuer quand un message correspond au filtre + actions: + hide: Cacher complètement le contenu filtré, faire comme s'il n'existait pas + warn: Cacher le contenu filtré derrière un avertissement mentionnant le nom du filtre form_challenge: current_password: Vous entrez une zone sécurisée imports: @@ -181,6 +186,7 @@ fr: setting_use_pending_items: Mode lent severity: Sévérité sign_in_token_attempt: Code de sécurité + title: Nom type: Type d’import username: Identifiant username_or_email: Nom d’utilisateur·rice ou courriel @@ -189,6 +195,10 @@ fr: with_dns_records: Inclure les enregistrements MX et IP du domaine featured_tag: name: Hashtag + filters: + actions: + hide: Cacher complètement + warn: Cacher derrière un avertissement interactions: must_be_follower: Bloquer les notifications des personnes qui ne vous suivent pas must_be_following: Bloquer les notifications des personnes que vous ne suivez pas diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index e7fc36c6477..fdd58ebbc92 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -49,7 +49,7 @@ gl: phrase: Concordará independentemente das maiúsculas ou avisos de contido na publicación scopes: A que APIs terá acceso a aplicación. Se escolles un ámbito de alto nivel, non precisas seleccionar elementos individuais. setting_aggregate_reblogs: Non mostrar novas promocións de publicacións que foron promovidas recentemente (só afecta a promocións recén recibidas) - setting_always_send_emails: Como norma xeral non che enviamos emails se usas activamente Mastodon + setting_always_send_emails: Como norma xeral non che enviamos correos electrónicos se usas activamente Mastodon setting_default_sensitive: Medios sensibles marcados como ocultos por defecto e móstranse cun click setting_display_media_default: Ocultar medios marcados como sensibles setting_display_media_hide_all: Ocultar sempre os medios @@ -68,6 +68,11 @@ gl: with_dns_records: Vaise facer un intento de resolver os rexistros DNS proporcionados e os resultados tamén irán a lista de bloqueo featured_tag: name: 'Poderías usar algún destos:' + filters: + action: Elixe a acción a realizar cando algunha publicación coincida co filtro + actions: + hide: Agochar todo o contido filtrado, facer coma se non existise + warn: Agochar o contido filtrado tras un aviso que conteña o nome do filtro form_challenge: current_password: Estás entrando nun área segura imports: @@ -91,9 +96,16 @@ gl: name: Só podes cambiar maiús/minúsculas, por exemplo, mellorar a lexibilidade user: chosen_languages: Se ten marca, só as publicacións nos idiomas seleccionados serán mostrados en cronoloxías públicas + role: O control dos roles adxudicados ás usuarias + user_role: + color: Cor que se usará para o rol a través da IU, como RGB en formato hex + highlighted: Esto fai o rol públicamente visible + name: Nome público do rol, se o rol se mostra como unha insignia + permissions_as_keys: As usuarias con este rol terá acceso a... + position: O rol de maior rango decide en situación de resolución de conflitos webhook: - events: Elexir eventos a enviar - url: Cando serán enviados os eventos + events: Elixir eventos a enviar + url: A onde se enviarán os eventos labels: account: fields: @@ -108,7 +120,7 @@ gl: title: Título admin_account_action: include_statuses: Incluír no correo as publicacións denunciadas - send_email_notification: Notificar a usuaria por correo-e + send_email_notification: Notificar á usuaria por email text: Aviso personalizado type: Acción types: @@ -155,7 +167,7 @@ gl: phrase: Palabra chave ou frase setting_advanced_layout: Activar interface web avanzada setting_aggregate_reblogs: Agrupar promocións nas cronoloxías - setting_always_send_emails: Enviar sempre notificacións por email + setting_always_send_emails: Enviar sempre notificacións por correo electrónico setting_auto_play_gif: Reprodución automática de GIFs animados setting_boost_modal: Pedir confirmación antes de promocionar setting_crop_images: Recortar imaxes a 16x9 en publicacións non despregadas @@ -181,14 +193,19 @@ gl: setting_use_pending_items: Modo lento severity: Severidade sign_in_token_attempt: Código de seguridade + title: Título type: Tipo de importación username: Nome de usuaria - username_or_email: Nome de usuaria ou Correo-e + username_or_email: Identificador ou Email whole_word: Palabra completa email_domain_block: with_dns_records: Incluír rexistros MX e IPs do dominio featured_tag: name: Cancelo + filters: + actions: + hide: Agochar completamente + warn: Agochar tras un aviso interactions: must_be_follower: Bloquear as notificacións de non-seguidoras must_be_following: Bloquea as notificacións de persoas que non segues @@ -222,6 +239,14 @@ gl: name: Cancelo trendable: Permitir que este cancelo apareza en tendencias usable: Permitir que as publicacións utilicen este cancelo + user: + role: Rol + user_role: + color: Cor da insignia + highlighted: Mostrar rol como insignia en perfís de usuarias + name: Nome + permissions_as_keys: Permisos + position: Prioridade webhook: events: Eventos activados url: URL do extremo diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index 3aba3399542..6152a87f1e3 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -68,6 +68,11 @@ hu: with_dns_records: Megpróbáljuk a megadott domain DNS rekordjait lekérni, és az eredményeket hozzáadjuk a tiltólistához featured_tag: name: 'Ezeket esetleg használhatod:' + filters: + action: A végrehajtandó műveletet, ha a bejegyzés megfelel a szűrőnek + actions: + hide: A szűrt tartalom teljes elrejtése, mintha nem is létezne + warn: A szűrt tartalom a szűrő címét említő figyelmeztetés mögé rejtése form_challenge: current_password: Beléptél egy biztonsági térben imports: @@ -181,6 +186,7 @@ hu: setting_use_pending_items: Lassú mód severity: Súlyosság sign_in_token_attempt: Biztonsági kód + title: Cím type: Importálás típusa username: Felhasználónév username_or_email: Felhasználónév vagy e-mail cím @@ -189,6 +195,10 @@ hu: with_dns_records: Domain MX rekordjainak és IP-címeinek hozzávétele featured_tag: name: Hashtag + filters: + actions: + hide: Teljes elrejtés + warn: Elrejtés figyelmeztetéssel interactions: must_be_follower: Nem követőidtől érkező értesítések tiltása must_be_following: Nem követettjeidtől érkező értesítések tiltása diff --git a/config/locales/simple_form.id.yml b/config/locales/simple_form.id.yml index dfc4902aba5..41114ef0dc0 100644 --- a/config/locales/simple_form.id.yml +++ b/config/locales/simple_form.id.yml @@ -178,6 +178,7 @@ id: setting_use_pending_items: Mode pelan severity: Keparahan sign_in_token_attempt: Kode keamanan + title: Judul type: Tipe impor username: Nama pengguna username_or_email: Nama pengguna atau Email @@ -186,6 +187,10 @@ id: with_dns_records: Termasuk data MX dan IP domain featured_tag: name: Tagar + filters: + actions: + hide: Sembunyikan seluruhnya + warn: Sembunyikan dengan peringatan interactions: must_be_follower: Blokir notifikasi dari non-pengikut must_be_following: Blokir notifikasi dari orang yang tidak anda ikuti @@ -219,6 +224,8 @@ id: name: Tagar trendable: Izinkan tagar ini muncul di bawah tren usable: Izinkan toot memakai tagar ini + webhook: + events: Acara yang diaktifkan 'no': Tidak recommended: Direkomendasikan required: diff --git a/config/locales/simple_form.io.yml b/config/locales/simple_form.io.yml index 5f72276b7c2..c6831eac2c9 100644 --- a/config/locales/simple_form.io.yml +++ b/config/locales/simple_form.io.yml @@ -181,6 +181,7 @@ io: setting_use_pending_items: Modo lenta severity: Severeso sign_in_token_attempt: Sekureskodexo + title: Titulo type: Tipo di importaco username: Uzernomo username_or_email: Uzantonomo o retposto @@ -189,6 +190,10 @@ io: with_dns_records: Inkluzez registraji MX e IPi di domeno featured_tag: name: Hashtago + filters: + actions: + hide: Tote celez + warn: Celez kun averto interactions: must_be_follower: Celar la savigi da homi, qui ne sequas tu must_be_following: Celar la savigi da homi, quin tu ne sequas diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml index 638458dae8b..d14673287c1 100644 --- a/config/locales/simple_form.is.yml +++ b/config/locales/simple_form.is.yml @@ -68,6 +68,11 @@ is: with_dns_records: Tilraun verður gerð til að leysa DNS-færslur uppgefins léns og munu niðurstöðurnar einnig verða útilokaðar featured_tag: name: 'Þú gætir viljað nota eitt af þessum:' + filters: + action: Veldu hvaða aðgerð á að framkvæma þegar færsla samsvarar síunni + actions: + hide: Fela síað efni algerlega, rétt eins og það sé ekki til staðar + warn: Fela síað efni á bakvið aðvörun sem tekur fram titil síunnar form_challenge: current_password: Þú ert að fara inn á öryggissvæði imports: @@ -181,6 +186,7 @@ is: setting_use_pending_items: Rólegur hamur severity: Mikilvægi sign_in_token_attempt: Öryggiskóði + title: Titill type: Tegund innflutnings username: Notandanafn username_or_email: Notandanafn eða tölvupóstfang @@ -189,6 +195,10 @@ is: with_dns_records: Hafa með MX-færslur og IP-vistföng lénsins featured_tag: name: Myllumerki + filters: + actions: + hide: Fela alveg + warn: Fela með aðvörun interactions: must_be_follower: Loka á tilkynningar frá þeim sem ekki eru fylgjendur must_be_following: Loka á tilkynningar frá þeim sem þú fylgist ekki með @@ -222,6 +232,12 @@ is: name: Myllumerki trendable: Leyfa þessu myllumerki að birtast undir tilhneigingum usable: Leyfa færslum að nota þetta myllumerki + user: + role: Hlutverk + user_role: + name: Nafn + permissions_as_keys: Heimildir + position: Forgangur webhook: events: Virkjaðir atburðir url: Slóð á endapunkt diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index 4d86f24dfe6..668474ff9a4 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -68,6 +68,11 @@ it: with_dns_records: Sarà effettuato un tentativo di risolvere i record DNS del dominio in questione e i risultati saranno inseriti anche nella blacklist featured_tag: name: 'Eccone alcuni che potresti usare:' + filters: + action: Scegli quale azione eseguire quando un post corrisponde al filtro + actions: + hide: Nascondi completamente il contenuto filtrato, come se non esistesse + warn: Nascondi il contenuto filtrato e mostra invece un avviso, citando il titolo del filtro form_challenge: current_password: Stai entrando in un'area sicura imports: @@ -91,6 +96,13 @@ it: name: Puoi cambiare solo il minuscolo/maiuscolo delle lettere, ad esempio, per renderlo più leggibile user: chosen_languages: Quando una o più lingue sono contrassegnate, nelle timeline pubbliche vengono mostrati solo i toot nelle lingue selezionate + role: Il ruolo controlla quali permessi ha l'utente + user_role: + color: Colore da usare per il ruolo in tutta l'UI, come RGB in formato esadecimale + highlighted: Rende il ruolo visibile + name: Nome pubblico del ruolo, se il ruolo è impostato per essere visualizzato come distintivo + permissions_as_keys: Gli utenti con questo ruolo avranno accesso a... + position: Il ruolo più elevato decide la risoluzione dei conflitti in determinate situazioni webhook: events: Seleziona eventi da inviare url: Dove gli eventi saranno inviati @@ -181,6 +193,7 @@ it: setting_use_pending_items: Modalità lenta severity: Severità sign_in_token_attempt: Codice di sicurezza + title: Titolo type: Tipo importazione username: Nome utente username_or_email: Nome utente o email @@ -189,6 +202,10 @@ it: with_dns_records: Includi record MX e indirizzi IP del dominio featured_tag: name: Etichetta + filters: + actions: + hide: Nascondi completamente + warn: Nascondi con avviso interactions: must_be_follower: Blocca notifiche da chi non ti segue must_be_following: Blocca notifiche dalle persone che non segui @@ -222,6 +239,14 @@ it: name: Hashtag trendable: Permetti a questo hashtag di apparire nelle tendenze usable: Permetti ai post di usare questo hashtag + user: + role: Ruolo + user_role: + color: Colore distintivo + highlighted: Mostra il ruolo come distintivo sui profili utente + name: Nome + permissions_as_keys: Permessi + position: Priorità webhook: events: Eventi abilitati url: URL endpoint diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index d79b7951300..19f164e0037 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -68,6 +68,11 @@ ko: with_dns_records: 입력한 도메인의 DNS를 조회를 시도하여 나온 값도 차단됩니다 featured_tag: name: '이것들을 사용하면 좋을 것 같습니다:' + filters: + action: 게시물이 필터에 걸러질 때 어떤 동작을 수행할 지 고르세요 + actions: + hide: 필터에 걸러진 글을 처음부터 없었던 것처럼 완전히 가리기 + warn: 필터에 걸러진 글을 필터 제목과 함께 경고 뒤에 가리기 form_challenge: current_password: 당신은 보안 구역에 진입하고 있습니다 imports: @@ -91,6 +96,12 @@ ko: name: 읽기 쉽게하기 위한 글자의 대소문자만 변경할 수 있습니다. user: chosen_languages: 체크하면, 선택 된 언어로 작성된 게시물들만 공개 타임라인에 보여집니다 + role: 역할은 사용자가 어떤 권한을 가지게 될 지 결정합니다 + user_role: + color: 색상은 사용자 인터페이스에서 역할을 나타내기 위해 사용되며, RGB 16진수 형식입니다 + highlighted: 이 역할이 공개적으로 보이도록 설정합니다 + name: 역할이 배지로 표시될 경우, 그 역할에 대한 공개적인 이름입니다 + permissions_as_keys: 이 역할을 가진 사용자는 다음에 접근할 수 있게 됩니다... webhook: events: 전송할 이벤트를 선택하세요 url: 이벤트가 어디로 전송될 지 @@ -181,6 +192,7 @@ ko: setting_use_pending_items: 느린 모드 severity: 심각도 sign_in_token_attempt: 보안 코드 + title: 제목 type: 불러오기 종류 username: 사용자명 username_or_email: 사용자명 또는 이메일 @@ -189,6 +201,10 @@ ko: with_dns_records: 도메인의 IP와 MX 레코드 값을 포함 featured_tag: name: 해시태그 + filters: + actions: + hide: 완전히 숨기기 + warn: 경고와 함께 숨기기 interactions: must_be_follower: 나를 팔로우 하지 않는 사람에게서 온 알림을 차단 must_be_following: 내가 팔로우 하지 않는 사람에게서 온 알림을 차단 @@ -222,6 +238,14 @@ ko: name: 해시태그 trendable: 이 해시태그가 유행에 보여지도록 허용 usable: 이 해시태그를 게시물에 사용 가능하도록 허용 + user: + role: 역할 + user_role: + color: 배지 색상 + highlighted: 역할 배지를 사용자 프로필에 표시 + name: 이름 + permissions_as_keys: 권한 + position: 우선순위 webhook: events: 활성화된 이벤트 url: 엔드포인트 URL diff --git a/config/locales/simple_form.ku.yml b/config/locales/simple_form.ku.yml index 9cfe371b555..139d46a2dfd 100644 --- a/config/locales/simple_form.ku.yml +++ b/config/locales/simple_form.ku.yml @@ -224,6 +224,12 @@ ku: name: Hashtag trendable: Bihêle ku ev hashtag werê xuyakirin di bin rojevê de usable: Bihêle ku şandî ev hashtag bi kar bînin + user: + role: Rol + user_role: + name: Nav + permissions_as_keys: Maf + position: Pêşikî webhook: events: Bûyerên çalakkirî url: Girêdana xala dawîbûnê diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index 97fa2bff4d7..325c421cc95 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -68,6 +68,11 @@ lv: with_dns_records: Tiks mēģināts atrisināt dotā domēna DNS ierakstus, un rezultāti arī tiks bloķēti featured_tag: name: 'Iespējams, vēlēsies izmantot kādu no šīm:' + filters: + action: Izvēlies, kuru darbību veikt, ja ziņa atbilst filtram + actions: + hide: Paslēp filtrēto saturu pilnībā, izturoties tā, it kā tas neeksistētu + warn: Paslēp filtrēto saturu aiz brīdinājuma, kurā minēts filtra nosaukums form_challenge: current_password: Tu ieej drošā zonā imports: @@ -91,6 +96,13 @@ lv: name: Tu vari mainīt tikai burtu lielumu, piemēram, lai tie būtu vieglāk lasāmi user: chosen_languages: Ja ieķeksēts, publiskos laika grafikos tiks parādītas tikai ziņas noteiktajās valodās + role: Loma kontrolē, kādas atļaujas ir lietotājam + user_role: + color: Krāsa, kas jāizmanto lomai visā lietotāja interfeisā, kā RGB hex formātā + highlighted: Tas padara lomu publiski redzamu + name: Lomas publiskais nosaukums, ja loma ir iestatīta rādīšanai kā emblēma + permissions_as_keys: Lietotājiem ar šo lomu būs piekļuve... + position: Augstāka loma nosaka konfliktu risināšanu noteiktās situācijās webhook: events: Atlasi nosūtāmos notikums url: Kur notikumi tiks nosūtīti @@ -181,6 +193,7 @@ lv: setting_use_pending_items: Lēnais režīms severity: Smagums sign_in_token_attempt: Drošības kods + title: Virsraksts type: Importa veids username: Lietotājvārds username_or_email: Lietotājvārds vai e-pasts @@ -189,6 +202,10 @@ lv: with_dns_records: Ietvert domēna MX ierakstus un IP adreses featured_tag: name: Tēmturis + filters: + actions: + hide: Paslēpt pilnībā + warn: Paslēpt ar brīdinājumu interactions: must_be_follower: Bloķēt paziņojumus no ne-sekotājiem must_be_following: Bloķēt paziņojumus no cilvēkiem, kuriem tu neseko @@ -222,6 +239,14 @@ lv: name: Tēmturis trendable: Atļaut šim tēmturim parādīties zem tendencēm usable: Atļaut lietot ziņās šo tēmturi + user: + role: Loma + user_role: + color: Emblēmas krāsa + highlighted: Atainot lomu kā emblēmu lietotāju profilos + name: Nosaukums + permissions_as_keys: Atļaujas + position: Prioritāte webhook: events: Iespējotie notikumi url: Galapunkta URL diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index 09dd2bd1bb1..cb0025f21b0 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -27,6 +27,8 @@ nl: scheduled_at: Laat leeg om de mededeling meteen te publiceren starts_at: Optioneel. In het geval dat jouw mededeling aan een bepaald tijdvak is gebonden text: Je kunt specifieke tekst voor berichten gebruiken. Let op de ruimte die de mededeling op het scherm van de gebruiker inneemt + appeal: + text: Je kunt maar eenmalig bezwaar indienen tegen een vastgestelde overtreding defaults: autofollow: Mensen die zich via de uitnodiging hebben geregistreerd, volgen jou automatisch avatar: PNG, GIF of JPG. Maximaal %{size}. Wordt teruggeschaald naar %{dimensions}px @@ -63,6 +65,11 @@ nl: with_dns_records: Er wordt een poging gewaagd om de desbetreffende DNS-records op te zoeken, waarna de resultaten ook worden geblokkeerd featured_tag: name: 'Je wilt misschien een van deze gebruiken:' + filters: + action: Kies welke acties uitgevoerd moeten wanneer een bericht overeenkomt met het filter + actions: + hide: Verberg de gefilterde inhoud volledig, alsof het niet bestaat + warn: Verberg de gefilterde inhoud achter een waarschuwing, met de titel van het filter als waarschuwingstekst form_challenge: current_password: Je betreedt een veilige omgeving imports: @@ -116,6 +123,8 @@ nl: scheduled_at: Mededeling inplannen starts_at: Begint text: Mededeling + appeal: + text: Leg uit waarom deze beslissing volgens jou teruggedraaid moet worden defaults: autofollow: Uitnodigen om jouw account te volgen avatar: Avatar @@ -170,6 +179,7 @@ nl: setting_use_pending_items: Langzame modus severity: Zwaarte sign_in_token_attempt: Beveiligingscode + title: Titel type: Importtype username: Gebruikersnaam username_or_email: Gebruikersnaam of e-mailadres @@ -178,6 +188,10 @@ nl: with_dns_records: MX-records en IP-adressen van het domein toevoegen featured_tag: name: Hashtag + filters: + actions: + hide: Volledig verbergen + warn: Met een waarschuwing verbergen interactions: must_be_follower: Meldingen van mensen die jou niet volgen blokkeren must_be_following: Meldingen van mensen die jij niet volgt blokkeren @@ -194,6 +208,7 @@ nl: sign_up_requires_approval: Registraties beperken severity: Regel notification_emails: + appeal: Iemand heeft bezwaar ingediend tegen een beslissing van een moderator digest: Periodiek e-mails met een samenvatting versturen favourite: Wanneer iemand jouw bericht aan diens favorieten heeft toegevoegd follow: Wanneer iemand jou is gaan volgen diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index b0373fbc629..8a9b6a905ce 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -68,6 +68,11 @@ pl: with_dns_records: Zostanie wykonana próba rozwiązania rekordów DNS podanej domeny, a wyniki również zostaną dodane na czarną listę featured_tag: name: 'Sugerujemy użycie jednego z następujących:' + filters: + action: Wybierz akcję do wykonania, gdy post pasuje do filtra + actions: + hide: Całkowicie ukryj przefiltrowaną zawartość, jakby nie istniała + warn: Ukryj filtrowaną zawartość za ostrzeżeniem wskazującym tytuł filtra form_challenge: current_password: Wchodzisz w strefę bezpieczną imports: @@ -181,6 +186,7 @@ pl: setting_use_pending_items: Tryb spowolniony severity: Priorytet sign_in_token_attempt: Kod zabezpieczający + title: Tytuł type: Importowane dane username: Nazwa użytkownika username_or_email: Nazwa użytkownika lub adres e-mail @@ -189,6 +195,10 @@ pl: with_dns_records: Uwzględnij rekordy MX i adresy IP domeny featured_tag: name: Hasztag + filters: + actions: + hide: Ukryj całkowicie + warn: Ukryj z ostrzeżeniem interactions: must_be_follower: Nie wyświetlaj powiadomień od osób, które Cię nie śledzą must_be_following: Nie wyświetlaj powiadomień od osób, których nie śledzisz diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml index b96952e9654..9bbc6b4d759 100644 --- a/config/locales/simple_form.pt-BR.yml +++ b/config/locales/simple_form.pt-BR.yml @@ -27,6 +27,8 @@ pt-BR: scheduled_at: Deixe em branco para publicar o comunicado agora starts_at: Opcional. Caso o comunicado esteja vinculado a um período específico text: Você pode usar a sintaxe do toot. Considere o espaço que o comunicado ocupará na tela do usuário + appeal: + text: Você só pode recorrer uma vez defaults: autofollow: Pessoas que criarem conta através de seu convite te seguirão automaticamente avatar: PNG, GIF or JPG. Arquivos de até %{size}. Serão redimensionados para %{dimensions}px @@ -35,6 +37,7 @@ pt-BR: current_password: Para fins de segurança, por favor, digite a senha da conta atual current_username: Para confirmar, por favor, digite o nome de usuário da conta atual digest: Enviado apenas após um longo período de inatividade com um resumo das menções recebidas durante ausência + discoverable: Permita que a sua conta seja descoberta por estranhos através de recomendações, tendências e outros recursos email: Você receberá um e-mail de confirmação fields: Você pode ter até 4 itens mostrados em forma de tabela no seu perfil header: PNG, GIF or JPG. Arquivos de até %{size}. Serão redimensionados para %{dimensions}px @@ -46,6 +49,7 @@ pt-BR: phrase: Corresponderá independente de maiúsculas ou minúsculas, no texto ou no Aviso de Conteúdo de um toot scopes: Quais APIs o aplicativo vai ter permissão de acessar. Se você selecionar uma autorização de alto nível, você não precisa selecionar individualmente os outros. setting_aggregate_reblogs: Não mostra novos boosts para toots que receberam boost recentemente (afeta somente os boosts mais recentes) + setting_always_send_emails: Normalmente, as notificações por e-mail não serão enviadas enquanto você estiver usando ativamente o Mastodon setting_default_sensitive: Mídia sensível está oculta por padrão e pode ser revelada com um clique setting_display_media_default: Sempre ocultar mídia sensível setting_display_media_hide_all: Sempre ocultar todas as mídias @@ -64,6 +68,11 @@ pt-BR: with_dns_records: Será feita uma tentativa de resolver os registros DNS do domínio em questão e os resultados também serão colocados na lista negra featured_tag: name: 'Você pode querer usar um destes:' + filters: + action: Escolher qual ação executar quando um post corresponder ao filtro + actions: + hide: Esconder completamente o conteúdo filtrado, comportando-se como se ele não existisse + warn: Ocultar o conteúdo filtrado por trás de um aviso mencionando o título do filtro form_challenge: current_password: Você está entrando em uma área segura imports: @@ -87,6 +96,9 @@ pt-BR: name: Você pode mudar a capitalização das letras, por exemplo, para torná-la mais legível user: chosen_languages: Apenas toots dos idiomas selecionados serão mostrados nas linhas públicas + webhook: + events: Selecione eventos para enviar + url: Aonde os eventos serão enviados labels: account: fields: @@ -148,6 +160,7 @@ pt-BR: phrase: Palavra-chave ou frase setting_advanced_layout: Ativar interface web avançada setting_aggregate_reblogs: Agrupar boosts nas linhas + setting_always_send_emails: Sempre enviar notificações por e-mail setting_auto_play_gif: Reproduzir GIFs automaticamente setting_boost_modal: Solicitar confirmação antes de dar boost setting_crop_images: Cortar imagens no formato 16x9 em toots não expandidos @@ -173,6 +186,7 @@ pt-BR: setting_use_pending_items: Modo lento severity: Gravidade sign_in_token_attempt: Código de segurança + title: Título type: Tipo de importação username: Nome de usuário username_or_email: Nome de usuário ou e-mail @@ -181,6 +195,10 @@ pt-BR: with_dns_records: Incluir registros MX e IPs do domínio featured_tag: name: Hashtag + filters: + actions: + hide: Ocultar completamente + warn: Ocultar com um aviso interactions: must_be_follower: Bloquear notificações de não-seguidores must_be_following: Bloquear notificações de não-seguidos @@ -197,6 +215,7 @@ pt-BR: sign_up_requires_approval: Limitar novas contas severity: Regra notification_emails: + appeal: Alguém recorre de uma decisão moderadora digest: Enviar e-mails de resumo favourite: Enviar e-mail quando alguém favoritar teus toots follow: Enviar e-mail quando alguém te seguir @@ -213,6 +232,9 @@ pt-BR: name: Hashtag trendable: Permitir que esta hashtag fique em alta usable: Permitir que toots usem esta hashtag + webhook: + events: Eventos habilitados + url: URL do Endpoint 'no': Não recommended: Recomendado required: diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml index 16972ca6ab2..2ce3e154238 100644 --- a/config/locales/simple_form.pt-PT.yml +++ b/config/locales/simple_form.pt-PT.yml @@ -68,6 +68,11 @@ pt-PT: with_dns_records: Será feita uma tentativa de resolver os registos DNS do domínio em questão e os resultados também serão colocados na lista negra featured_tag: name: 'Poderás querer usar um destes:' + filters: + action: Escolha qual a ação a executar quando uma publicação corresponde ao filtro + actions: + hide: Ocultar completamente o conteúdo filtrado, comportando-se como se não existisse + warn: Ocultar o conteúdo filtrado por trás de um aviso mencionando o título do filtro form_challenge: current_password: Está a entrar numa área restrita imports: @@ -181,6 +186,7 @@ pt-PT: setting_use_pending_items: Modo lento severity: Gravidade sign_in_token_attempt: Código de segurança + title: Título type: Tipo de importação username: Nome de utilizador username_or_email: Nome de utilizador ou e-mail @@ -189,6 +195,10 @@ pt-PT: with_dns_records: Incluir registos MX e IPs do domínio featured_tag: name: Hashtag + filters: + actions: + hide: Ocultar por completo + warn: Ocultar com um aviso interactions: must_be_follower: Bloquear notificações de não-seguidores must_be_following: Bloquear notificações de pessoas que não segues diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index 571411c096e..f86bca0167e 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -68,6 +68,11 @@ ru: with_dns_records: Будет сделана попытка разрешить DNS-записи данного домена и результаты также будут внесены в чёрный список featured_tag: name: 'Возможно, вы захотите добавить что-то из этого:' + filters: + action: Выберите действие, которое нужно выполнить, когда сообщение соответствует фильтру + actions: + hide: Полностью скрыть отфильтрованный контент так, как будто его не существует + warn: Скрыть отфильтрованный контент за предупреждением с указанием названия фильтра form_challenge: current_password: Вы переходите к настройкам безопасности imports: @@ -91,6 +96,10 @@ ru: name: Вы можете изменить только регистр букв чтобы, например, сделать тег более читаемым user: chosen_languages: Если выбрано, то в публичных лентах будут показаны только посты на выбранных языках. + role: Роль определяет, какие разрешения есть у пользователя + user_role: + color: Цвет, который будет использоваться для роли в интерфейсе (UI), как RGB в формате HEX + permissions_as_keys: Пользователи с этой ролью будут иметь доступ... webhook: events: Выберите события для отправки url: Куда события будут отправляться @@ -181,6 +190,7 @@ ru: setting_use_pending_items: Медленный режим severity: Накладываемые ограничения sign_in_token_attempt: Код безопасности + title: Название type: Тип импорта username: Имя пользователя username_or_email: Имя пользователя или e-mail @@ -189,6 +199,10 @@ ru: with_dns_records: Включить MX-записи и IP-адреса домена featured_tag: name: Добавить хэштег + filters: + actions: + hide: Скрыть полностью + warn: Скрыть с предупреждением interactions: must_be_follower: Присылать уведомления только от подписчиков must_be_following: Присылать уведомления только от людей на которых вы подписаны @@ -222,6 +236,12 @@ ru: name: Хэштег trendable: Разрешить показ хэштега в трендах usable: Разрешить использовать этот хэштег в постах + user: + role: Роль + user_role: + name: Название + permissions_as_keys: Разрешения + position: Приоритет webhook: events: Включенные события url: Endpoint URL diff --git a/config/locales/simple_form.si.yml b/config/locales/simple_form.si.yml index 9f2e0ee3123..aa51438a9e7 100644 --- a/config/locales/simple_form.si.yml +++ b/config/locales/simple_form.si.yml @@ -1,38 +1,246 @@ --- si: simple_form: - labels: + hints: + account_alias: + acct: ඔබට ගෙන යාමට අවශ්‍ය ගිණුමේ username@domain සඳහන් කරන්න + account_migration: + acct: ඔබට යාමට අවශ්‍ය ගිණුමේ username@domain සඳහන් කරන්න + account_warning_preset: + text: ඔබට URL, හෑෂ් ටැග් සහ සඳහන් කිරීම් වැනි පෝස්ට් සින්ටැක්ස් භාවිතා කළ හැක + title: විකල්ප. ලබන්නාට නොපෙනේ admin_account_action: - type: ක්‍රියාමාර්ගය + include_statuses: මධ්‍යස්ථ ක්‍රියාව හෝ අනතුරු ඇඟවීමට හේතු වී ඇත්තේ කුමන පළ කිරීම්දැයි පරිශීලකයා දකිනු ඇත + send_email_notification: පරිශීලකයාට ඔවුන්ගේ ගිණුම සමඟ සිදු වූ දේ පිළිබඳ පැහැදිලි කිරීමක් ලැබෙනු ඇත + text_html: විකල්ප. ඔබට post syntax භාවිතා කළ හැක. කාලය ඉතිරි කර ගැනීම සඳහා ඔබට අනතුරු ඇඟවීමේ කළ හැක + type_html: "%{acct}සමඟ කළ යුතු දේ තෝරන්න" types: - sensitive: සංවේදීතාව - suspend: අත්හිටුවන්න + disable: පරිශීලකයාගේ ගිණුම භාවිතා කිරීමෙන් වළක්වන්න, නමුත් ඔවුන්ගේ අන්තර්ගතය මකා දැමීම හෝ සඟවන්න එපා. + none: වෙනත් ක්‍රියාවක් අවුලුවාලීමකින් තොරව, පරිශීලකයාට අනතුරු ඇඟවීමක් යැවීමට මෙය භාවිතා කරන්න. + sensitive: මෙම පරිශීලකයාගේ සියලුම මාධ්‍ය ඇමුණුම් සංවේදී ලෙස සලකුණු කිරීමට බල කරන්න. + silence: පරිශීලකයාට පොදු දෘශ්‍යතාව සමඟ පළ කිරීමට හැකි වීම වළක්වන්න, ඔවුන් අනුගමනය නොකරන පුද්ගලයින්ගෙන් ඔවුන්ගේ පළ කිරීම් සහ දැනුම්දීම් සඟවන්න. + suspend: මෙම ගිණුමෙන් හෝ මෙම ගිණුමට යම් අන්තර්ක්‍රියා වළක්වා එහි අන්තර්ගතය මකා දමන්න. දින 30 ක් ඇතුළත ආපසු හැරවිය හැකිය. + warning_preset_id: විකල්ප. ඔබට තවමත් පෙරසිටුවීමේ අවසානයට අභිරුචි පෙළ එක් කළ හැක + announcement: + all_day: පරීක්ෂා කළ විට, කාල පරාසයේ දින පමණක් දර්ශනය වනු ඇත + ends_at: විකල්ප. මෙම අවස්ථාවේදී නිවේදනය ස්වයංක්‍රීයව ප්‍රකාශනය කිරීමෙන් ඉවත් වනු ඇත + scheduled_at: නිවේදනය වහාම ප්‍රකාශයට පත් කිරීමට හිස්ව තබන්න + starts_at: විකල්ප. ඔබගේ නිවේදනය නිශ්චිත කාල පරාසයකට බැඳී ඇත්නම් + text: ඔබට post syntax භාවිතා කළ හැක. කරුණාකර පරිශීලකයාගේ තිරය මත නිවේදනය ලබා ගන්නා ඉඩ ගැන සැලකිලිමත් වන්න + appeal: + text: ඔබට වර්ජනයකට අභියාචනා කළ හැක්කේ එක් වරක් පමණි defaults: + autofollow: ආරාධනාව හරහා ලියාපදිංචි වන පුද්ගලයින් ස්වයංක්‍රීයව ඔබව අනුගමනය කරනු ඇත + avatar: PNG, GIF හෝ JPG. වැඩිම %{size}. %{dimensions}px දක්වා අඩු කරනු ඇත + bot: ගිණුම ප්‍රධාන වශයෙන් ස්වයංක්‍රීය ක්‍රියා සිදු කරන බවත් නිරීක්ෂණය නොකළ හැකි බවත් අන් අයට සංඥා කරන්න + context: පෙරහන යෙදිය යුතු සන්දර්භ එකක් හෝ කිහිපයක් + current_password: ආරක්ෂක අරමුණු සඳහා කරුණාකර ජංගම ගිණුමේ මුරපදය ඇතුළත් කරන්න + current_username: තහවුරු කිරීමට, කරුණාකර වත්මන් ගිණුමේ පරිශීලක නාමය ඇතුළත් කරන්න + digest: දිගු කාලයක් අක්‍රියව සිටීමෙන් පසුව පමණක් යවන ලද අතර ඔබ නොමැති විට ඔබට කිසියම් පුද්ගලික පණිවිඩයක් ලැබී ඇත්නම් පමණි + discoverable: නිර්දේශ, ප්‍රවණතා සහ වෙනත් විශේෂාංග හරහා ඔබේ ගිණුම ආගන්තුකයන්ට සොයා ගැනීමට ඉඩ දෙන්න + email: ඔබට තහවුරු කිරීමේ විද්‍යුත් තැපෑලක් එවනු ලැබේ + fields: ඔබට ඔබගේ පැතිකඩෙහි වගුවක් ලෙස අයිතම 4ක් දක්වා පෙන්විය හැක + header: PNG, GIF හෝ JPG. වැඩිම %{size}. %{dimensions}px දක්වා අඩු කරනු ඇත + inbox_url: ඔබට භාවිතා කිරීමට අවශ්‍ය රිලේ හි මුල් පිටුවෙන් URL එක පිටපත් කරන්න + irreversible: පෙරහන පසුව ඉවත් කළද, පෙරූ පළ කිරීම් ආපසු හැරවිය නොහැකි ලෙස අතුරුදහන් වනු ඇත + locale: පරිශීලක අතුරුමුහුණතේ භාෂාව, ඊමේල් සහ තල්ලු දැනුම්දීම් + locked: අනුගමන ඉල්ලීම් අනුමත කිරීමෙන් ඔබව අනුගමනය කළ හැක්කේ කාටදැයි හස්තීයව පාලනය කරන්න + password: අවම වශයෙන් අක්ෂර 8 ක් භාවිතා කරන්න + phrase: පළ කිරීමක පෙළ හෝ අන්තර්ගත අනතුරු ඇඟවීම නොසලකා ගැලපේ + scopes: යෙදුමට ප්‍රවේශ වීමට ඉඩ දෙන්නේ කුමන API වලටද. ඔබ ඉහළ මට්ටමේ විෂය පථයක් තෝරා ගන්නේ නම්, ඔබට තනි ඒවා තෝරා ගැනීමට අවශ්‍ය නොවේ. + setting_aggregate_reblogs: මෑතකදී බූස්ට් කරන ලද පළ කිරීම් සඳහා නව බූස්ට් පෙන්වන්න එපා (අලුතින් ලැබුණු බූස්ට් වලට පමණක් බලපායි) + setting_always_send_emails: සාමාන්‍යයෙන් ඔබ Mastodon සක්‍රියව භාවිතා කරන විට විද්‍යුත් තැපැල් දැනුම්දීම් නොයවනු ඇත + setting_default_sensitive: සංවේදී මාධ්‍ය පෙරනිමියෙන් සඟවා ඇති අතර ක්ලික් කිරීමකින් හෙළිදරව් කළ හැක + setting_display_media_default: සංවේදී ලෙස සලකුණු කළ මාධ්‍ය සඟවන්න + setting_display_media_hide_all: සෑම විටම මාධ්‍ය සඟවන්න + setting_display_media_show_all: සෑම විටම මාධ්‍ය පෙන්වන්න + setting_hide_network: ඔබ අනුගමනය කරන්නේ කවුරුන්ද සහ ඔබව අනුගමනය කරන්නේ කවුරුන්ද යන්න ඔබගේ පැතිකඩෙහි සඟවනු ඇත + setting_noindex: ඔබගේ පොදු පැතිකඩ සහ පළ කිරීම් පිටු වලට බලපායි + setting_show_application: ඔබ පළ කිරීමට භාවිතා කරන යෙදුම ඔබගේ පළ කිරීම් වල සවිස්තරාත්මක දර්ශනයේ පෙන්වනු ඇත + setting_use_blurhash: අනුක්‍රමණ සැඟවුණු දෘශ්‍යවල වර්ණ මත පදනම් වන නමුත් ඕනෑම විස්තරයක් අපැහැදිලි කරයි + setting_use_pending_items: සංග්‍රහය ස්වයංක්‍රීයව අනුචලනය කරනවා වෙනුවට ක්ලික් කිරීමක් පිටුපස කාලරේඛා යාවත්කාලීන සඟවන්න + username: ඔබගේ පරිශීලක නාමය %{domain}හි අද්විතීය වනු ඇත + whole_word: මූල පදය හෝ වාක්‍ය ඛණ්ඩය අක්ෂරාංක පමණක් වන විට, එය යෙදෙන්නේ එය සම්පූර්ණ වචනයට ගැලපේ නම් පමණි + domain_allow: + domain: මෙම වසමට මෙම සේවාදායකයෙන් දත්ත ලබා ගැනීමට හැකි වන අතර එයින් ලැබෙන දත්ත සකස් කර ගබඩා කරනු ලැබේ + email_domain_block: + domain: මෙය විද්‍යුත් තැපැල් ලිපිනයේ හෝ එය භාවිතා කරන MX වාර්තාවේ පෙන්වන ඩොමේන් නාමය විය හැක. ලියාපදිංචි වූ පසු ඒවා පරීක්ෂා කරනු ලැබේ. + with_dns_records: ලබා දී ඇති වසමේ DNS වාර්තා විසඳීමට උත්සාහ කරන අතර ප්‍රතිඵල ද අවහිර කරනු ලැබේ + featured_tag: + name: 'ඔබට මේවායින් එකක් භාවිතා කිරීමට අවශ්‍ය විය හැකිය:' + filters: + action: පළ කිරීමක් පෙරහනට ගැළපෙන විට සිදු කළ යුතු ක්‍රියාව තෝරන්න + actions: + hide: පෙරහන් කළ අන්තර්ගතය සම්පූර්ණයෙන්ම සඟවන්න, එය නොපවතින ලෙස හැසිරෙන්න + warn: පෙරහන මාතෘකාව සඳහන් කරන අනතුරු ඇඟවීමක් පිටුපස පෙරූ අන්තර්ගතය සඟවන්න + form_challenge: + current_password: ඔබ ආරක්ෂිත ප්‍රදේශයකට ඇතුල් වේ + imports: + data: CSV ගොනුව වෙනත් Mastodon සේවාදායකයකින් අපනයනය කරන ලදී + invite_request: + text: මෙය ඔබගේ අයදුම්පත සමාලෝචනය කිරීමට අපට උපකාරී වනු ඇත + ip_block: + comment: විකල්ප. ඔබ මෙම රීතිය එක් කළේ මන්දැයි මතක තබා ගන්න. + expires_in: IP ලිපින යනු සීමිත සම්පතකි, ඒවා සමහර විට බෙදාගෙන ඇති අතර බොහෝ විට අත් වෙනස් වේ. මෙම හේතුව නිසා අවිනිශ්චිත IP වාරණ නිර්දේශ නොකරයි. + ip: IPv4 හෝ IPv6 ලිපිනයක් ඇතුළත් කරන්න. ඔබට CIDR සින්ටැක්ස් භාවිතයෙන් සම්පූර්ණ පරාසයන් අවහිර කළ හැක. ඔබව අගුලු නොදැමීමට ප්‍රවේශම් වන්න! + severities: + no_access: සියලු සම්පත් වෙත ප්‍රවේශය අවහිර කරන්න + sign_up_requires_approval: නව ලියාපදිංචි කිරීම් සඳහා ඔබේ අනුමැතිය අවශ්‍ය වනු ඇත + severity: මෙම IP වෙතින් ඉල්ලීම් සමඟ කුමක් සිදුවේද යන්න තෝරන්න + rule: + text: මෙම සේවාදායකයේ භාවිතා කරන්නන් සඳහා රීතියක් හෝ අවශ්‍යතාවයක් විස්තර කරන්න. එය කෙටි හා සරල කිරීමට උත්සාහ කරන්න + sessions: + otp: 'ඔබගේ දුරකථන යෙදුම මගින් උත්පාදනය කරන ලද ද්වි-සාධක කේතය ඇතුළු කරන්න හෝ ඔබගේ ප්‍රතිසාධන කේත වලින් එකක් භාවිතා කරන්න:' + webauthn: එය USB යතුරක් නම්, එය ඇතුළු කිරීමට වග බලා ගන්න, අවශ්ය නම්, එය තට්ටු කරන්න. + tag: + name: ඔබට අකුරු වල ආවරණය පමණක් වෙනස් කළ හැකිය, උදාහරණයක් ලෙස, එය වඩාත් කියවිය හැකි කිරීමට + user: + chosen_languages: පරීක්ෂා කළ විට, තෝරාගත් භාෂාවලින් පළ කිරීම් පමණක් පොදු කාලරේඛා තුළ සංදර්ශන කෙරේ + webhook: + events: යැවීමට සිදුවීම් තෝරන්න + url: සිදුවීම් යවනු ලබන ස්ථානය + labels: + account: + fields: + name: ලේබලය + value: අන්තර්ගතය + account_alias: + acct: පැරණි ගිණුමේ හැසිරවීම + account_migration: + acct: නව ගිණුමේ හැසිරවීම + account_warning_preset: + text: පෙර සැකසූ පෙළ + title: ශීර්ෂය + admin_account_action: + include_statuses: විද්‍යුත් තැපෑලෙහි වාර්තා කරන ලද පළ කිරීම් ඇතුළත් කරන්න + send_email_notification: විද්‍යුත් තැපෑලෙන් පරිශීලකයාට දැනුම් දෙන්න + text: අභිරුචි අනතුරු ඇඟවීම + type: ක්‍රියාව + types: + disable: කැටි කරන්න + none: අනතුරු ඇඟවීමක් යවන්න + sensitive: පවතී + silence: සීමාව + suspend: අවශ්ය + warning_preset_id: අනතුරු ඇඟවීමේ පෙරසිටුවක් භාවිතා කරන්න + announcement: + all_day: දවස පුරා සිදුවීම + ends_at: සිදුවීමේ අවසානය + scheduled_at: උපලේඛන ප්රකාශනය + starts_at: සිදුවීමේ ආරම්භය + text: නිවේදනය + appeal: + text: මෙම තීරණය ආපසු හැරවිය යුත්තේ මන්දැයි පැහැදිලි කරන්න + defaults: + autofollow: ඔබගේ ගිණුම අනුගමනය කිරීමට ආරාධනා කරන්න + avatar: අවතාරය bot: මෙය ස්වයං ක්‍රමලේඛගත ගිණුමකි + chosen_languages: භාෂා පෙරහන් කරන්න confirm_new_password: නව මුර පදය තහවුරු කරන්න - confirm_password: මුරපදය තහවුරු කරන්න + confirm_password: මුරපදය තහවුරු කර ඇත + context: සන්දර්භ පෙරහන් කරන්න + current_password: වත්මන් මුර පදය data: දත්ත + discoverable: අන් අයට ගිණුමක් යෝජනා කරන්න + display_name: ප්රදර්ශන නාමය email: වි-තැපැල් ලිපිනය + expires_in: පසු කල් ඉකුත් වේ + fields: පැතිකඩ පාරදත්ත + header: ශීර්ෂකය + honeypot: "%{label} (පුරවන්න එපා)" + inbox_url: රිලේ එන ලිපි URL + irreversible: සැඟවීම වෙනුවට අතහරින්න + locale: අතුරු මුහුණත භාෂාව + locked: ඉල්ලීම් අනුගමනය කිරීම අවශ්‍ය වේ + max_uses: උපරිම භාවිත ගණන new_password: නව මුරපදය + note: ජෛව + otp_attempt: ද්වි සාධක කේතය password: මුර පදය + phrase: මූල පදය හෝ වාක්‍ය ඛණ්ඩය + setting_advanced_layout: උසස් වෙබ් අතුරු මුහුණත සබල කරන්න + setting_aggregate_reblogs: කණ්ඩායම් කාලරේඛාව වැඩි කරයි + setting_always_send_emails: සෑම විටම විද්‍යුත් තැපැල් දැනුම්දීම් යවන්න + setting_auto_play_gif: සජීවිකරණ GIF ස්වයංක්‍රීයව ධාවනය කරන්න + setting_boost_modal: වැඩි කිරීමට පෙර තහවුරු කිරීමේ සංවාදය පෙන්වන්න + setting_crop_images: ප්‍රසාරණය නොකළ පළ කිරීම් වල පින්තූර 16x9 දක්වා කප්පාදු කරන්න + setting_default_language: පළ කිරීමේ භාෂාව + setting_default_privacy: පුද්ගලිකත්වය පළ කිරීම + setting_default_sensitive: සෑම විටම මාධ්‍ය සංවේදී ලෙස සලකුණු කරන්න + setting_delete_modal: පළ කිරීමක් මැකීමට පෙර තහවුරු කිරීමේ සංවාදය පෙන්වන්න + setting_disable_swiping: ස්වයිප් චලන අක්‍රීය කරන්න + setting_display_media: මාධ්ය සංදර්ශකය + setting_display_media_default: පෙරනිමිය setting_display_media_hide_all: සියල්ල සඟවන්න setting_display_media_show_all: සියල්ල පෙන්වන්න + setting_expand_spoilers: අන්තර්ගත අනතුරු ඇඟවීම් සමඟ සලකුණු කර ඇති පළ කිරීම් සැමවිටම පුළුල් කරන්න setting_hide_network: ඔබගේ ජාලය සඟවන්න - setting_theme: අඩවියේ තේමාව - sign_in_token_attempt: ආරක්‍ෂණ කේතය + setting_noindex: සෙවුම් යන්ත්‍ර සුචිගත කිරීමෙන් ඉවත් වීම + setting_reduce_motion: සජීවිකරණවල චලනය අඩු කරන්න + setting_show_application: පළ කිරීම් යැවීමට භාවිතා කරන යෙදුම හෙළි කරන්න + setting_system_font_ui: පද්ධතියේ පෙරනිමි අකුරු භාවිතා කරන්න + setting_theme: අඩවියේ මාතෘකාව + setting_trends: අද ප්‍රවණතා පෙන්වන්න + setting_unfollow_modal: යමෙකු අනුගමනය නොකිරීමට පෙර තහවුරු කිරීමේ සංවාදය පෙන්වන්න + setting_use_blurhash: සැඟවුණු මාධ්‍ය සඳහා වර්ණවත් අනුක්‍රමික පෙන්වන්න + setting_use_pending_items: මන්දගාමී මාදිලිය + severity: බරපතලකම + sign_in_token_attempt: ආරක්ෂණ කේතය + title: ශීර්ෂය + type: ආයාත වර්ගය username: පරිශීලක නාමය username_or_email: පරිශීලක නාමය හෝ වි-තැපෑල whole_word: සමස්ත වචනය + email_domain_block: + with_dns_records: වසමෙහි MX වාර්තා සහ IP ඇතුළත් කරන්න + featured_tag: + name: හෑෂ් ටැගය + filters: + actions: + hide: සම්පූර්ණයෙන්ම සඟවන්න + warn: අනතුරු ඇඟවීමක් සමඟ සඟවන්න + interactions: + must_be_follower: අනුගාමිකයින් නොවන අයගේ දැනුම්දීම් අවහිර කරන්න + must_be_following: ඔබ අනුගමනය නොකරන පුද්ගලයින්ගේ දැනුම්දීම් අවහිර කරන්න + must_be_following_dm: ඔබ අනුගමනය නොකරන පුද්ගලයින්ගෙන් සෘජු පණිවිඩ අවහිර කරන්න invite: comment: අදහස + invite_request: + text: ඔබට එක් වීමට අවශ්‍ය ඇයි? ip_block: comment: අදහස ip: අ.ජා. කෙ. (IP) severities: - no_access: ප්‍රවේශය අවහිර කරන්න + no_access: ප්රවේශය අවහිර කරන්න + sign_up_requires_approval: ලියාපදිංචි වීම සීමා කරන්න severity: නීතිය + notification_emails: + appeal: යමෙක් උපපරිපාලක තීරණයකට අභියාචනා කරයි + digest: digest ඊමේල් යවන්න + favourite: කවුරුහරි ඔබේ පළ කිරීම ප්‍රිය කළා + follow: කවුරුහරි ඔබව අනුගමනය කළා + follow_request: කවුරුහරි ඔබව අනුගමනය කරන ලෙස ඉල්ලා සිටියේය + mention: කවුරුහරි ඔබව සඳහන් කළා + pending_account: නව ගිණුම සමාලෝචනය අවශ්‍යයි + reblog: කවුරුහරි ඔබේ පළ කිරීම වැඩි කළා + report: නව වාර්තාවක් ඉදිරිපත් කෙරේ + trending_tag: නව ප්‍රවණතාවයට සමාලෝචනයක් අවශ්‍ය වේ + rule: + text: නීතිය + tag: + listable: මෙම හැෂ් ටැගය සෙවීම් සහ යෝජනා වල දිස් වීමට ඉඩ දෙන්න + name: හෑෂ් ටැගය + trendable: මෙම හැෂ් ටැගය ප්‍රවණතා යටතේ දිස් වීමට ඉඩ දෙන්න + usable: මෙම හැෂ් ටැගය භාවිතා කිරීමට පළ කිරීම් වලට ඉඩ දෙන්න + webhook: + events: සබල කළ සිදුවීම් + url: අන්ත ලක්ෂ්‍ය URL + 'no': නැත recommended: නිර්දේශිත required: mark: "*" - text: අවශ්‍යයි + text: අවශ්යයි + title: + sessions: + webauthn: පුරනය වීමට ඔබගේ ආරක්ෂක යතුරු වලින් එකක් භාවිතා කරන්න 'yes': ඔව් diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml index 04df4eb4964..698a3152eb7 100644 --- a/config/locales/simple_form.sl.yml +++ b/config/locales/simple_form.sl.yml @@ -68,6 +68,11 @@ sl: with_dns_records: Poskus razrešitve zapisov DNS danih domen bo izveden in rezultati bodo prav tako blokirani featured_tag: name: 'Morda boste želeli uporabiti eno od teh:' + filters: + action: Izberite, kako naj se program vede, ko se objava sklada s filtrom + actions: + hide: Povsem skrij filtrirano vsebino, kot da ne bi obstajala + warn: Skrij filtrirano vsebino za opozorilom, ki pomenja naslov filtra form_challenge: current_password: Vstopate v varovano območje imports: @@ -91,6 +96,13 @@ sl: name: Spremenite lahko le npr. velikost črk (velike/male), da je bolj berljivo user: chosen_languages: Ko je označeno, bodo v javnih časovnicah prikazane samo objave v izbranih jezikih + role: Vloga nadzira, katere pravice ima uporabnik + user_role: + color: Barva, uporabljena za vlogo po celem up. vmesniku, podana v šestnajstiškem zapisu RGB + highlighted: S tem je vloga javno vidna + name: Javno ime vloge, če naj bo vloga prikazana kot priponka + permissions_as_keys: Uporabniki s to vlogo bodo imeli dostop do ... + position: Višja vloga odloča o razrešitvi sporov v določenih situacijah webhook: events: Izberite dogodke za pošiljanje url: Kam bodo poslani dogodki @@ -181,6 +193,7 @@ sl: setting_use_pending_items: Počasen način severity: Strogost sign_in_token_attempt: Varnostna koda + title: Naslov type: Vrsta uvoza username: Uporabniško ime username_or_email: Uporabniško ime ali E-pošta @@ -189,6 +202,10 @@ sl: with_dns_records: Vključi zapise MX in IP-številke domene featured_tag: name: Ključnik + filters: + actions: + hide: Povsem skrij + warn: Skrij z opozorilom interactions: must_be_follower: Blokiraj obvestila nesledilcev must_be_following: Blokiraj obvestila oseb, ki jim ne sledite @@ -222,6 +239,14 @@ sl: name: Ključnik trendable: Dovoli, da se ta ključnik pojavi med trendi usable: Dovoli, da objave uporabljajo ta ključnik + user: + role: Vloga + user_role: + color: Barva značke + highlighted: Prikaži vlogo kot značko na uporabniškem profilu + name: Ime + permissions_as_keys: Pravice + position: Prioriteta webhook: events: Omogočeni dogodki url: URL končne točke diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index 99421306594..93d0c20f0dc 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -68,6 +68,11 @@ tr: with_dns_records: Belirli bir alanın DNS kayıtlarını çözmeyi deneyecek ve sonuçlar kara listeye eklenecek featured_tag: name: 'Bunlardan birini kullanmak isteyebilirsiniz:' + filters: + action: Bir gönderi filtreyle eşleştiğinde hangi eylemin yapılacağını seçin + actions: + hide: Filtrelenmiş içeriği tamamen gizle, sanki varolmamış gibi + warn: Filtrelenmiş içeriği, filtrenin başlığından söz eden bir uyarının arkasında gizle form_challenge: current_password: Güvenli bir bölgeye giriyorsunuz imports: @@ -91,6 +96,13 @@ tr: name: Harflerin, örneğin daha okunabilir yapmak için, sadece büyük/küçük harf durumlarını değiştirebilirsiniz user: chosen_languages: İşaretlendiğinde, yalnızca seçilen dillerdeki tootlar genel zaman çizelgelerinde görüntülenir + role: Rol, kullanıcıların sahip olduğu izinleri denetler + user_role: + color: Arayüz boyunca rol için kullanılacak olan renk, hex biçiminde RGB + highlighted: Bu rolü herkese açık hale getirir + name: Rolün, eğer rozet olarak görüntülenmesi ayarlandıysa kullanılacak herkese açık ismi + permissions_as_keys: Bu role sahip kullanıcıların şunlara erişimi var... + position: Belirli durumlarda uyuşmazlığın çözümünde daha yüksek rol belirleyicidir webhook: events: Gönderilecek etkinlikleri seçin url: Olayların gönderileceği yer @@ -181,6 +193,7 @@ tr: setting_use_pending_items: Yavaş mod severity: Önem derecesi sign_in_token_attempt: Güvenlik kodu + title: Başlık type: İçeri aktarma türü username: Kullanıcı adı username_or_email: Kullanıcı adı ya da e-posta @@ -189,6 +202,10 @@ tr: with_dns_records: Alan adının MX kayıtlarını ve IP'lerini ekleyin featured_tag: name: Etiket + filters: + actions: + hide: Tamamen gizle + warn: Uyarıyla gizle interactions: must_be_follower: Takipçim olmayan kişilerden gelen bildirimleri engelle must_be_following: Takip etmediğim kişilerden gelen bildirimleri engelle @@ -222,6 +239,14 @@ tr: name: Etiket trendable: Bu etiketin gündem altında görünmesine izin ver usable: Tootların bu etiketi kullanmasına izin ver + user: + role: Rol + user_role: + color: Rozet rengi + highlighted: Rolü kullanıcıların profilinde rozet olarak görüntüle + name: Ad + permissions_as_keys: İzinler + position: Öncelik webhook: events: Etkin olaylar url: Uç nokta URL’si diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml index 9b8ecb5734e..8763e0226c7 100644 --- a/config/locales/simple_form.uk.yml +++ b/config/locales/simple_form.uk.yml @@ -68,6 +68,11 @@ uk: with_dns_records: Спроба визначення DNS-записів заданого домену буде здійснена, а результати також будуть занесені до чорного списку featured_tag: name: 'Можливо, ви захочете використовувати один з цих:' + filters: + action: Виберіть дію для виконання коли допис збігається з фільтром + actions: + hide: Повністю сховати фільтрований вміст, ніби його не існує + warn: Сховати відфільтрований вміст за попередженням, у якому вказано заголовок фільтра form_challenge: current_password: Ви входите до безпечної зони imports: @@ -181,6 +186,7 @@ uk: setting_use_pending_items: Повільний режим severity: Серйозність sign_in_token_attempt: Код безпеки + title: Заголовок type: Тип імпорту username: Ім'я користувача username_or_email: Ім'я користувача або електронна пошта @@ -189,6 +195,10 @@ uk: with_dns_records: Включити MX записи та IP-адреси домену featured_tag: name: Хештеґ + filters: + actions: + hide: Сховати повністю + warn: Сховати за попередженням interactions: must_be_follower: Блокувати сповіщення від непідписаних людей must_be_following: Блокувати сповіщення від людей, на яких ви не підписані diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index 729be663484..915bb4d24be 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -68,6 +68,11 @@ vi: with_dns_records: Nếu DNS có vấn đề, nó sẽ bị đưa vào danh sách cấm featured_tag: name: 'Những hashtag gợi ý cho bạn:' + filters: + action: Chọn hành động sẽ thực hiện khi một tút khớp với bộ lọc + actions: + hide: Ẩn hoàn toàn nội dung đã lọc, hoạt động như thể nó không tồn tại + warn: Ẩn nội dung đã lọc đằng sau một cảnh báo đề cập đến tiêu đề của bộ lọc form_challenge: current_password: Biểu mẫu này an toàn imports: @@ -91,6 +96,13 @@ vi: name: Bạn có thể thay đổi cách viết hoa các chữ cái để giúp nó dễ đọc hơn user: chosen_languages: Chỉ hiển thị những tút viết bằng các ngôn ngữ được chọn sau + role: Vai trò kiểm soát những quyền mà người dùng có + user_role: + color: Màu được sử dụng cho vai trò trong toàn bộ giao diện người dùng, dưới dạng RGB ở định dạng hex + highlighted: Vai trò sẽ hiển thị công khai + name: Tên công khai của vai trò, nếu vai trò được đặt để hiển thị dưới dạng huy hiệu + permissions_as_keys: Người dùng có vai trò này sẽ có quyền truy cập vào... + position: Vai trò cao hơn quyết định việc giải quyết xung đột trong một số tình huống nhất định webhook: events: Chọn sự kiện để gửi url: Nơi những sự kiện được gửi đến @@ -181,6 +193,7 @@ vi: setting_use_pending_items: Không tự động cập nhật bảng tin severity: Mức độ nghiêm trọng sign_in_token_attempt: Mã an toàn + title: Tựa đề type: Kiểu nhập username: Tên người dùng username_or_email: Tên người dùng hoặc email @@ -189,6 +202,10 @@ vi: with_dns_records: Bao gồm bản ghi MX và địa chỉ IP của máy chủ featured_tag: name: Hashtag + filters: + actions: + hide: Ẩn toàn bộ + warn: Ẩn kèm theo cảnh báo interactions: must_be_follower: Chặn thông báo từ những người không theo dõi bạn must_be_following: Chặn thông báo từ những người bạn không theo dõi @@ -222,6 +239,14 @@ vi: name: Hashtag trendable: Cho phép xuất hiện trong xu hướng usable: Cho phép dùng trong tút + user: + role: Vai trò + user_role: + color: Màu huy hiệu + highlighted: Hiển thị huy hiệu vai trò trên hồ sơ người dùng + name: Tên + permissions_as_keys: Quyền + position: Mức độ ưu tiên webhook: events: Những sự kiện đã bật url: URL endpoint diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml index 4cc6af416c0..0526df527f0 100644 --- a/config/locales/simple_form.zh-TW.yml +++ b/config/locales/simple_form.zh-TW.yml @@ -68,6 +68,11 @@ zh-TW: with_dns_records: Mastodon 會嘗試解析所給域名的 DNS 記錄,解析結果一致者將一併封鎖 featured_tag: name: 您可能想使用其中一個: + filters: + action: 請選擇當嘟文符合該過濾器時將被執行之動作 + actions: + hide: 完全隱藏過濾內容,當作它似乎不曾存在過 + warn: 隱藏過濾內容於過濾器標題之警告後 form_challenge: current_password: 您正要進入安全區域 imports: @@ -91,6 +96,13 @@ zh-TW: name: 您只能變更大小寫,例如,以使其更易讀。 user: chosen_languages: 當核取時,只有選取語言的嘟文會在公開時間軸中顯示 + role: 角色控制使用者有哪些權限 + user_role: + color: 在整個使用者介面中用於角色的顏色,十六進位格式的 RGB + highlighted: 這會讓角色公開可見 + name: 角色的公開名稱,如果角色設定為顯示為徽章 + permissions_as_keys: 有此角色的使用者將有權存取…… + position: 更高的角色決定在某些情況下解決衝突 webhook: events: 請選擇要傳送的事件 url: 事件會被傳送至何處 @@ -181,6 +193,7 @@ zh-TW: setting_use_pending_items: 限速模式 severity: 優先級 sign_in_token_attempt: 安全代碼 + title: 標題 type: 匯入類型 username: 使用者名稱 username_or_email: 使用者名稱或電子信箱地址 @@ -189,6 +202,10 @@ zh-TW: with_dns_records: 包括網域的 MX 記錄和 IP 位址 featured_tag: name: "「#」標籤" + filters: + actions: + hide: 完全隱藏 + warn: 隱藏於警告之後 interactions: must_be_follower: 封鎖非跟隨者的通知 must_be_following: 封鎖您未跟隨之使用者的通知 @@ -222,6 +239,14 @@ zh-TW: name: 主題標籤 trendable: 允許此主題標籤在趨勢下顯示 usable: 允許嘟文使用此主題標籤 + user: + role: 角色 + user_role: + color: 識別顏色 + highlighted: 在使用者個人資料上將角色顯示為徽章 + name: 名稱 + permissions_as_keys: 權限 + position: 優先權 webhook: events: 已啟用的事件 url: 端點 URL diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 1f64c78c723..5fefb4e09e5 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -87,9 +87,7 @@ sk: posts_tab_heading: Príspevky posts_with_replies: Príspevky s odpoveďami roles: - admin: Správca group: Skupina - moderator: Moderátor unavailable: Profil nieje dostupný unfollow: Prestaň sledovať admin: @@ -107,7 +105,6 @@ sk: avatar: Maskot by_domain: Doména change_email: - changed_msg: Email pre tento účet bol úspešne zmenený! current_email: Súčasný email label: Zmeň email new_email: Nový email @@ -174,12 +171,6 @@ sk: reset: Resetuj reset_password: Obnov heslo resubscribe: Znovu odoberaj - role: Oprávnenia - roles: - admin: Správca - moderator: Moderátor - staff: Člen - user: Užívateľ search: Hľadaj search_same_email_domain: Iní užívatelia s tou istou emailovou doménou search_same_ip: Ostatní užívatelia s rovnakou IP adresou @@ -374,8 +365,11 @@ sk: back_to_warning: Upozornenie by_domain: Doména content_policies: + comment: Interná poznámka policies: + reject_media: Zamietni médiá suspend: Vylúč + reason: Verejné odôvodnenie delivery: all: Všetko unavailable: Nedostupné @@ -473,6 +467,9 @@ sk: unassign: Odober unresolved: Nevyriešené updated_at: Aktualizované + rules: + empty: Žiadne pravidlá servera ešte neboli určené. + title: Serverové pravidlá settings: activity_api_enabled: desc_html: Sčítanie miestne uverejnených príspevkov, aktívnych užívateľov, a nových registrácii, v týždenných intervaloch @@ -518,9 +515,6 @@ sk: deletion: desc_html: Dovoľ každému, aby si mohli vymazať svok účet title: Sprístupni možnosť vymazať si účet - min_invite_role: - disabled: Nikto - title: Povoľ pozvánky od registrations_mode: modes: approved: Pre registráciu je nutné povolenie @@ -530,9 +524,6 @@ sk: show_known_fediverse_at_about_page: desc_html: Ak je zapnuté, bude v ukážke osi možné nahliadnúť príspevky z celého známeho fediversa. Inak budú ukázané iba príspevky z miestnej osi. title: Ukáž celé známe fediverse na náhľade osi - show_staff_badge: - desc_html: Ukáž moderátorsky odznak na užívateľovom profile - title: Ukáž značku moderátora site_description: desc_html: Oboznamujúci paragraf na hlavnej stránke a pri meta tagoch. Opíš, čo robí tento Mastodon server špecifickým, a ďalej hocičo iné, čo považuješ za dôležité. Môžeš použiť HTML kód, hlavne <a> a <em>. title: Popis servera @@ -774,7 +765,6 @@ sk: title: Uprav triedenie errors: invalid_context: Nebola poskytnutá žiadna, alebo ide o neplatnú súvislosť - invalid_irreversible: Nezvratné filtrovanie funguje iba so súvislostiami domovskej osi a oboznámení index: delete: Vymaž empty: Nemáš žiadné filtrovanie. diff --git a/config/locales/sl.yml b/config/locales/sl.yml index ff3492d6056..5eaf0afee3b 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -91,10 +91,8 @@ sl: posts_tab_heading: Objave posts_with_replies: Objave in odgovori roles: - admin: Skrbnik bot: Robot group: Skupina - moderator: Mod unavailable: Profil ni na voljo unfollow: Prenehaj slediti admin: @@ -113,12 +111,17 @@ sl: avatar: Podoba by_domain: Domena change_email: - changed_msg: E-pošta računa je uspešno spremenjena! + changed_msg: E-pošni naslov uspešno spremenjen! current_email: Trenutna e-pošta label: Spremeni e-pošto new_email: Nova e-pošta submit: Spremeni e-pošto title: Spremeni e-pošto za %{username} + change_role: + changed_msg: Vloga uspešno spremenjena! + label: Spremeni vlogo + no_role: Ni vloge + title: Spremeni vlogo za %{username} confirm: Potrdi confirmed: Potrjeno confirming: Potrjujem @@ -162,6 +165,7 @@ sl: active: Dejaven all: Vse pending: Na čakanju + silenced: Omejeno suspended: Suspendiran title: Moderiranje moderation_notes: Opombe moderiranja @@ -169,6 +173,7 @@ sl: most_recent_ip: Zadnji IP no_account_selected: Noben račun ni bil spremenjen, ker ni bil izbran noben no_limits_imposed: Brez omejitev + no_role_assigned: Dodeljena ni nobena vloga not_subscribed: Ni naročen pending: Čakanje na pregled perform_full_suspension: Suspendiraj @@ -197,12 +202,7 @@ sl: reset: Ponastavi reset_password: Ponastavi geslo resubscribe: Ponovno se naroči - role: Dovoljenja - roles: - admin: Skrbnik - moderator: Moderator - staff: Osebje - user: Uporabnik + role: Vloga search: Iskanje search_same_email_domain: Drugi uporabniki z isto domeno e-pošte search_same_ip: Drugi uporabniki z istim IP @@ -677,6 +677,61 @@ sl: unresolved: Nerešeni updated_at: Posodobljeni view_profile: Pokaži profil + roles: + add_new: Dodaj vlogo + assigned_users: + few: "%{count} uporabniki" + one: "%{count} uporabnik" + other: "%{count} uporabnikov" + two: "%{count} uporabnika" + categories: + administration: Upravljanje + invites: Povabila + moderation: Moderiranje + special: Posebno + delete: Izbriši + description_html: Z uporabniškimi vlogami lahko prilagodite, do katerih funkcij in področij Mastodona lahko dostopajo vaši uporabniki. + edit: Uredi vlogo %{name} + everyone: Privzete pravice + everyone_full_description_html: To je osnovna vloga, ki vpliva na vse uporabnike, celo na tiste brez dodeljene vloge. Vse druge vloge dedujejo njene pravice. + permissions_count: + few: "%{count} pravice" + one: "%{count} pravica" + other: "%{count} pravic" + two: "%{count} pravici" + privileges: + administrator: Skrbnik + administrator_description: Uporabniki s temi pravicami bodo zaobšli vse pravice + delete_user_data: Izbriši uporabniške podatke + delete_user_data_description: Omogoča uporabnikom, da izbrišejo podatke drugih uporabnikov brez časvnega zamika + invite_users: Povabi uporabnike + invite_users_description: Omogoča uporabnikom, da povabi nove osebe na strežnik + manage_announcements: Upravljaj obvestila + manage_announcements_description: Omogoča uporabnikom, da upravljajo obvestila na strežniku + manage_appeals: Upravljaj pritožbe + manage_appeals_description: Omogoča uporabnikom, da pregledajo pritožbe glede dejanj moderiranja + manage_blocks: Upravljaj blokirano + manage_blocks_description: Omogoča uporabnikom, da blokirajo ponudnike e-pošte in naslove IP + manage_invites: Upravljaj vabila + manage_invites_description: Omogoča uporabnikom, da brskajo in deaktivirajo povezave povabil + manage_reports: Upravljaj poročila + manage_reports_description: Omogoča uporabnikom, da pregledajo poročila in glede le-teh opravijo dejanja moderiranja + manage_roles: Upravljaj vloge + manage_rules: Upravljaj pravila + manage_rules_description: Omogoča uporabnikom, da spremenijo pravila strežnika + manage_settings: Upravljaj nastavitve + manage_settings_description: Omogoča uporabnikom, da spremenijo nastavitve spletišča + manage_taxonomies: Upravljaj taksonomije + manage_user_access: Upravljaj dostop uporabnikov + manage_users: Upravljaj uporabnike + manage_users_description: Omogoča uporabnikom, da vidijo podrobnosti drugih uporabnikov in nad njimi izvedejo dejanja moderiranja + manage_webhooks: Upravljaj spletne zanke + manage_webhooks_description: Omogoča uporabnikom, da vzpostavijo nove spletne zanke za skrbniške dogodke + view_audit_log_description: Omogoča, da uporabnik vidi zgodovino skrbniških opravil na strežniku + view_dashboard: Pokaži nadzorno ploščo + view_dashboard_description: Omogoča uporabnikom, da dostopajo do nadzorne plošče in različnih meritev + view_devops_description: Omogoča uporabnikom, da dostopajo do nadzornih plošč Sidekiq in phHero + title: Vloge rules: add_new: Dodaj pravilo delete: Izbriši @@ -729,9 +784,6 @@ sl: deletion: desc_html: Dovoli vsakomur, da izbriše svoj račun title: Odpri brisanje računa - min_invite_role: - disabled: Nihče - title: Dovoli vabila od require_invite_text: desc_html: Če registracije zahtevajo ročno potrditev, nastavite vnos besedila pod »Zakaj se želite pridružiti?« za obveznega title: Zahteva, da novi uprorabniki navedejo razlog, zakaj se želijo registrirati @@ -744,9 +796,6 @@ sl: show_known_fediverse_at_about_page: desc_html: Ko preklopite, bo prikazal objave vseh znanih fediverzumov v predogledu. V nasprotnem primeru bodo prikazane samo krajevne objave. title: Pokaži znane fediverse-e v predogledu časovnice - show_staff_badge: - desc_html: Prikaži značko osebja na uporabniški strani - title: Prikaži značko osebja site_description: desc_html: Uvodni odstavek na API-ju. Opišite, zakaj je ta Mastodon strežnik poseben in karkoli pomembnega. Lahko uporabite HTML oznake, zlasti <a> in <em>. title: Opis strežnika @@ -896,6 +945,11 @@ sl: empty: Zaenkrat še nimate prilagojenih končnih točk spletnih zank. enable: Omogoči enabled: Dejaven + enabled_events: + few: "%{count} omogočeni dogodki" + one: "%{count} omogočen dogodek" + other: "%{count} omogočenih dogodkov" + two: "%{count} omogočena dogodka" events: Dogodki new: Nova spletna zanka rotate_secret: Zasukaj skrivnost @@ -1155,15 +1209,26 @@ sl: public: Javne časovnice thread: Pogovori edit: + add_keyword: Dodaj ključno besedo + keywords: Ključne besede title: Uredite filter errors: + deprecated_api_multiple_keywords: Teh parametrov ni mogoče spremeniti iz tega programa, ker veljajo za več kot eno ključno besedo filtra. Uporabite novejšo izdaj programa ali spletni vmesnik. invalid_context: Ne vsebuje nobenega ali vsebuje neveljaven kontekst - invalid_irreversible: Nepovratno filtriranje deluje le v kontekstu doma ali obvestil index: + contexts: Filtri v %{contexts} delete: Izbriši empty: Nimate filtrov. + expires_in: Poteče čez %{distance} + expires_on: Poteče %{date} + keywords: + few: "%{count} ključne besede" + one: "%{count} ključna beseda" + other: "%{count} ključnih besed" + two: "%{count} ključni besedi" title: Filtri new: + save: Shrani nov filter title: Dodaj nov filter footer: developers: Razvijalci @@ -1286,6 +1351,8 @@ sl: copy_account_note_text: 'Ta uporabnik se je preselil iz %{acct}, tukaj so vaše poprejšnje opombe o njem:' notification_mailer: admin: + report: + subject: "%{name} je oddal/a prijavo" sign_up: subject: "%{name} se je vpisal/a" digest: diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 0e4d9871eea..748072c29b1 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -83,10 +83,8 @@ sq: posts_tab_heading: Mesazhe posts_with_replies: Mesazhe dhe përgjigje roles: - admin: Përgjegjës bot: Robot group: Grup - moderator: Moderator unavailable: Profil jashtë funksionimi unfollow: Resht së ndjekuri admin: @@ -105,7 +103,6 @@ sq: avatar: Avatar by_domain: Përkatësi change_email: - changed_msg: Email-i i llogarisë u ndryshua me sukses! current_email: Email-i i tanishëm label: Ndrysho email-in new_email: Email i ri @@ -187,12 +184,6 @@ sq: reset: Riktheje te parazgjedhjet reset_password: Ricaktoni fjalëkalimin resubscribe: Ripajtohuni - role: Leje - roles: - admin: Përgjegjës - moderator: Moderator - staff: Staf - user: Përdorues search: Kërkoni search_same_email_domain: Të tjerë përdorues me të njëjtën përkatësi email-i search_same_ip: Të tjerë përdorues me të njëjtën IP @@ -700,9 +691,6 @@ sq: deletion: desc_html: Lejo këdo të fshijë llogarinë e vet title: Hapni fshirje llogarie - min_invite_role: - disabled: Asnjë - title: Lejo ftesa nga require_invite_text: desc_html: Kur regjistrimet lypin miratim dorazi, tekstin e kërkesës për ftesë “Pse doni të merrni pjesë?” bëje të detyrueshëm, në vend se opsional title: Kërkoju përdoruesve të rinj të plotësojnë doemos një tekst kërkese për ftesë @@ -715,9 +703,6 @@ sq: show_known_fediverse_at_about_page: desc_html: Kur përdoret, do të shfaqë mesazhe prej krejt fediversit të njohur, si paraparje. Përndryshe do të shfaqë vetëm mesazhe vendore title: Përfshi lëndë të federuar në faqe rrjedhe publike kohore të pamirëfilltësuar - show_staff_badge: - desc_html: Shfaq një stemë stafi në faqen e një përdoruesi - title: Shfaq stemë stafi site_description: desc_html: Paragraf hyrës te faqja ballore. Përshkruani ç’e bën special këtë shërbyes Mastodon dhe çfarëdo gjëje tjetër të rëndësishme. Mund të përdorni etiketa HTML, veçanërisht <a> dhe <em>. title: Përshkrim shërbyesi @@ -1119,7 +1104,6 @@ sq: title: Përpunoni filtër errors: invalid_context: Ose s’u dha fare, ose u dha kontekst i pavlefshëm - invalid_irreversible: Filtrim i pakthyeshëm funksionon vetëm me kontekste home ose njoftimesh index: delete: Fshije empty: S’keni filtra. diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index cfea20c5557..a94893b9e5e 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -19,9 +19,6 @@ sr-Latn: people_followed_by: Ljudi koje %{name} prati people_who_follow: Ljudi koji prate %{name} posts_with_replies: Tutovi i odgovori - roles: - admin: Administrator - moderator: Moderator unfollow: Otprati admin: account_moderation_notes: @@ -76,10 +73,6 @@ sr-Latn: reset: Resetuj reset_password: Resetuj lozinku resubscribe: Ponovo se pretplati - role: Ovlašćenja - roles: - staff: Osoblje - user: Korisnik search: Pretraga shared_inbox_url: Adresa deljenog sandučeta show: @@ -180,12 +173,6 @@ sr-Latn: deletion: desc_html: Dozvoli svima da mogu da obrišu svoj nalog title: Otvori brisanje naloga - min_invite_role: - disabled: Niko - title: Samo preko pozivnice - show_staff_badge: - desc_html: Prikaži bedž osoblja na korisničkoj strani - title: Prikaži bedž osoblja site_description: desc_html: Uvodni pasus na naslovnoj strani i u meta HTML tagovima. Možete koristiti HTML tagove, konkretno <a> i <em>. title: Opis instance diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 445f8f32656..2042fc4409a 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -52,9 +52,7 @@ sr: posts_tab_heading: Трубе posts_with_replies: Трубе и одговори roles: - admin: Администратор bot: Бот - moderator: Модератор unavailable: Налог је недоступан unfollow: Отпрати admin: @@ -70,7 +68,6 @@ sr: avatar: Аватар by_domain: Домен change_email: - changed_msg: Е-пошта налога успешно промењена! current_email: Тренутна е-пошта label: Промените е-пошту new_email: Нова e-пошта @@ -130,12 +127,6 @@ sr: reset: Ресетуј reset_password: Ресетуј лозинку resubscribe: Поново се претплати - role: Овлашћења - roles: - admin: Администратор - moderator: Модератор - staff: Особље - user: Корисник search: Претрага shared_inbox_url: Адреса дељеног сандучета show: @@ -312,15 +303,9 @@ sr: deletion: desc_html: Дозволи свима да могу да обришу свој налог title: Отвори брисање налога - min_invite_role: - disabled: Нико - title: Само преко позивнице show_known_fediverse_at_about_page: desc_html: Када се упали, показаће трубе из свих знаних федиверса на преглед. У супротном ће само показати локалне трубе. title: Покажи познате здружене инстанце у прегледнику временске линије - show_staff_badge: - desc_html: Прикажи беџ особља на корисничкој страни - title: Прикажи беџ особља site_description: desc_html: Уводни пасус на насловној страни и у meta HTML таговима. Можете користити HTML тагове, конкретно <a> и <em>. title: Опис инстанце @@ -459,7 +444,6 @@ sr: title: Измени филтер errors: invalid_context: Ниједан или неважећи контекст испоручен - invalid_irreversible: Неповратно филтрирање функционише само са почетном или контекстом обавештења index: delete: Избриши title: Филтери diff --git a/config/locales/sv.yml b/config/locales/sv.yml index a84ae6cfec0..1e238b196df 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -80,10 +80,8 @@ sv: posts_tab_heading: Tutor posts_with_replies: Toots med svar roles: - admin: Administratör bot: Robot group: Grupp - moderator: Moderator unavailable: Profilen är inte tillgänglig unfollow: Sluta följa admin: @@ -101,7 +99,6 @@ sv: avatar: Profilbild by_domain: Domän change_email: - changed_msg: E-postadressen har ändrats! current_email: Nuvarande E-postadress label: Byt E-postadress new_email: Ny E-postadress @@ -177,12 +174,6 @@ sv: reset: Återställ reset_password: Återställ lösenord resubscribe: Starta en ny prenumeration - role: Behörigheter - roles: - admin: Administratör - moderator: Moderator - staff: Personal - user: Användare search: Sök search_same_email_domain: Andra användare med samma e-postdomän search_same_ip: Annan användare med samma IP-adress @@ -565,9 +556,6 @@ sv: deletion: desc_html: Tillåt vem som helst att radera sitt konto title: Öppen kontoradering - min_invite_role: - disabled: Ingen - title: Tillåt inbjudningar av require_invite_text: desc_html: När nyregistrering kräver manuellt godkännande, gör det obligatoriskt att fylla i text i fältet "Varför vill du gå med?" title: Kräv att nya användare fyller i en inbjudningsförfrågan @@ -580,9 +568,6 @@ sv: show_known_fediverse_at_about_page: desc_html: När den växlas, kommer toots från hela fediverse visas på förhandsvisning. Annars visas bara lokala toots. title: Visa det kända fediverse på tidslinjens förhandsgranskning - show_staff_badge: - desc_html: Visa en personalbricka på en användarsida - title: Visa personalbricka site_description: desc_html: Inledande stycke på framsidan och i metataggar. Du kan använda HTML-taggar, i synnerhet <a> och <em>. title: Instansbeskrivning diff --git a/config/locales/ta.yml b/config/locales/ta.yml index 3016250ccdd..d2b753cf3b8 100644 --- a/config/locales/ta.yml +++ b/config/locales/ta.yml @@ -62,10 +62,8 @@ ta: posts_tab_heading: பிளிறல்கள் posts_with_replies: பிளிறல்கள் மற்றும் மறுமொழிகள் roles: - admin: நிர்வாகி bot: பொறி group: குழு - moderator: மட்டுறுத்துநர் unavailable: சுயவிவரம் கிடைக்கவில்லை unfollow: பின்தொடராதே admin: @@ -83,7 +81,6 @@ ta: avatar: அவதாரம் by_domain: தளம் change_email: - changed_msg: உறிமை மின் அஞ்சல் வெற்றிகரமாக மாற்ற்ப்பட்டது! current_email: தற்கால மின் அஞ்சல் label: மின் அஞ்சலை மற்றுக new_email: புதிய மின் அஞ்சல் @@ -139,12 +136,6 @@ ta: already_confirmed: இப்பயனர் ஏற்கனவே உறுதி படுத்திவிட்டார் reset: மீட்டமைக்கவும் reset_password: கடவுச்சொல்லை மீளமைத்திடுக - role: அனுமதி - roles: - admin: நிர்வாகி - moderator: நடுவர் - staff: பணியாளர் - user: பயனர் search: தேடு search_same_email_domain: இம்மின்னஞ்சல் களத்தில் உள்ள மற்ற பயனர்கள் shared_inbox_url: குழு மின்னஞ்சல் முகவரி diff --git a/config/locales/te.yml b/config/locales/te.yml index 7f6aa0f0917..fe39bb75250 100644 --- a/config/locales/te.yml +++ b/config/locales/te.yml @@ -48,9 +48,7 @@ te: posts_tab_heading: టూట్లు posts_with_replies: టూట్లు మరియు ప్రత్యుత్తరాలు roles: - admin: నిర్వాహకులు bot: బోట్ - moderator: నియంత్రికుడు unfollow: అనుసరించవద్దు admin: account_actions: @@ -65,7 +63,6 @@ te: avatar: అవతారం by_domain: డొమైను change_email: - changed_msg: ఖాతా యొక్క ఈమెయిల్ విజయవంతంగా మార్చబడింది! current_email: ప్రస్తుత ఈమెయిల్ label: ఈమెయిల్ ను మార్చు new_email: కొత్త ఈమెయిల్ diff --git a/config/locales/th.yml b/config/locales/th.yml index 57fbc1fddb0..9963825438e 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -74,10 +74,8 @@ th: posts_tab_heading: โพสต์ posts_with_replies: โพสต์และการตอบกลับ roles: - admin: ผู้ดูแล bot: บอต group: กลุ่ม - moderator: ผู้ควบคุม unavailable: โปรไฟล์ไม่พร้อมใช้งาน unfollow: เลิกติดตาม admin: @@ -96,7 +94,6 @@ th: avatar: ภาพประจำตัว by_domain: โดเมน change_email: - changed_msg: เปลี่ยนอีเมลบัญชีสำเร็จ! current_email: อีเมลปัจจุบัน label: เปลี่ยนอีเมล new_email: อีเมลใหม่ @@ -177,12 +174,6 @@ th: reset: รีเซ็ต reset_password: ตั้งรหัสผ่านใหม่ resubscribe: บอกรับใหม่ - role: สิทธิอนุญาต - roles: - admin: ผู้ดูแล - moderator: ผู้ควบคุม - staff: พนักงาน - user: ผู้ใช้ search: ค้นหา search_same_email_domain: ผู้ใช้อื่น ๆ ที่มีโดเมนอีเมลเดียวกัน search_same_ip: ผู้ใช้อื่น ๆ ที่มี IP เดียวกัน @@ -647,9 +638,6 @@ th: deletion: desc_html: อนุญาตให้ใครก็ตามลบบัญชีของเขา title: เปิดการลบบัญชี - min_invite_role: - disabled: ไม่มีใคร - title: อนุญาตคำเชิญโดย require_invite_text: title: ต้องให้ผู้ใช้ใหม่ป้อนเหตุผลที่จะเข้าร่วม registrations_mode: @@ -661,9 +649,6 @@ th: show_known_fediverse_at_about_page: desc_html: เมื่อปิดใช้งาน จำกัดเส้นเวลาสาธารณะที่เชื่อมโยงจากหน้าเริ่มต้นให้แสดงเฉพาะเนื้อหาในเซิร์ฟเวอร์เท่านั้น title: รวมเนื้อหาที่ติดต่อกับภายนอกไว้ในหน้าเส้นเวลาสาธารณะที่ไม่ได้รับรองความถูกต้อง - show_staff_badge: - desc_html: แสดงป้ายพนักงานในหน้าผู้ใช้ - title: แสดงป้ายพนักงาน site_description: desc_html: ย่อหน้าเกริ่นนำใน API อธิบายถึงสิ่งที่ทำให้เซิร์ฟเวอร์ Mastodon นี้พิเศษและสิ่งอื่นใดที่สำคัญ คุณสามารถใช้แท็ก HTML โดยเฉพาะอย่างยิ่ง <a> และ <em> title: คำอธิบายเซิร์ฟเวอร์ diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 7bd5723c43c..bc2b730f846 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -83,10 +83,8 @@ tr: posts_tab_heading: Tootlar posts_with_replies: Tootlar ve yanıtlar roles: - admin: Yönetici bot: Bot group: Grup - moderator: Denetleyici unavailable: Profil kullanılamıyor unfollow: Takibi bırak admin: @@ -105,12 +103,17 @@ tr: avatar: Profil resmi by_domain: Alan adı change_email: - changed_msg: Hesap e-postası başarıyla değiştirildi! + changed_msg: E-posta başarıyla değiştirildi! current_email: Mevcut e-posta label: E-postayı değiştir new_email: Yeni e-posta submit: E-postayı değiştir title: "%{username} için e-postayı değiştir" + change_role: + changed_msg: Rol başarıyla değiştirildi! + label: Rolü değiştir + no_role: Rol yok + title: "%{username} için rolü değiştir" confirm: Onayla confirmed: Onaylandı confirming: Onaylanıyor @@ -154,6 +157,7 @@ tr: active: Etkin all: Hepsi pending: Bekliyor + silenced: Sınırlı suspended: Uzaklaştırılanlar title: Denetim moderation_notes: Denetleme notları @@ -161,6 +165,7 @@ tr: most_recent_ip: Son IP no_account_selected: Hiçbiri seçilmediğinden hiçbir hesap değiştirilmedi no_limits_imposed: Sınır koymaz + no_role_assigned: Rol atanmamış not_subscribed: Abone edilmedi pending: Bekleyen yorum perform_full_suspension: Askıya al @@ -187,12 +192,7 @@ tr: reset: Sıfırla reset_password: Parolayı sıfırla resubscribe: Yeniden abone ol - role: İzinler - roles: - admin: Yönetici - moderator: Denetleyici - staff: Personel - user: Kullanıcı + role: Rol search: Ara search_same_email_domain: Aynı e-posta alan adına sahip diğer kullanıcılar search_same_ip: Aynı IP adresine sahip diğer kullanıcılar @@ -649,6 +649,67 @@ tr: unresolved: Giderilmedi updated_at: Güncellendi view_profile: Profili görüntüle + roles: + add_new: Rol ekle + assigned_users: + one: "%{count} kullanıcı" + other: "%{count} kullanıcı" + categories: + administration: Yönetim + devops: Devops + invites: Davetler + moderation: Denetim + special: Özel + delete: Sil + description_html: "Kullanıcı rolleri ile, kullanıcılarınızın Mastodon'un hangi işlevlerine ve alanlarına erişebileceğini düzenleyebilirsiniz." + edit: "'%{name}' rolünü düzenle" + everyone: Varsayılan izinler + everyone_full_description_html: Bu, herhangi bir rol atanmamış olanlar da olmak üzere tüm kullanıcıları etkileyen temel roldür. Diğer tüm roller izinleri bu rolden alıyorlar. + permissions_count: + one: "%{count} izin" + other: "%{count} izin" + privileges: + administrator: Yönetici + administrator_description: Bu izne sahip kullanıcılar tüm diğer izinleri atlıyorlar + delete_user_data: Kullanıcı Verilerini Silme + delete_user_data_description: Kullanıcıların, diğer kullanıcıların verisini gecikme olmaksızın silmesine izin verir + invite_users: Kullanıcıları Davet Etme + invite_users_description: Kullanıcıların yeni kişileri sunucuya davet etmesine izin verir + manage_announcements: Duyuruları Yönetme + manage_announcements_description: Kullanıcıların sunucudaki duyuruları yönetmesine izin verir + manage_appeals: İtirazları Yönetme + manage_appeals_description: Kullanıcıların denetleme eylemlerine itirazları gözden geçirmesine izin verir + manage_blocks: Engelleri Yönetme + manage_blocks_description: Kullanıcıların e-posta sağlayıcıları ve IP adreslerini engellemesine izin verir + manage_custom_emojis: Özel İfadeleri Yönetme + manage_custom_emojis_description: Kullanıcıların sunucudaki özel ifadeleri yönetmesine izin verir + manage_federation: Birleştirme Yönetme + manage_federation_description: Kullanıcıların diğer alan adlarıyla birleştirmeye izin vermesi veya engellemesine ve teslim edilebilirliği denetlemesine izin verir + manage_invites: Davetleri Yönetme + manage_invites_description: Kullanıcıların davet bağlantılarını görüntüleme ve etkisizleştirmesine izin verir + manage_reports: Raporları Yönetme + manage_reports_description: Kullanıcıların bildirimleri incelemesine ve onlara yönelik denetim eylemleri gerçekleştirmesine izin verir + manage_roles: Rolleri Yönetme + manage_roles_description: Kullanıcıların kendi rollerinden düşük rolleri atamasına izin verir + manage_rules: Kuralları Yönetme + manage_rules_description: Kullanıcıların sunucu kurallarını değiştirmesine izin ver + manage_settings: Ayarları Yönetme + manage_settings_description: Kullanıcıların site ayarlarını değiştirmesine izin verir + manage_taxonomies: Kategorileri Yönetme + manage_taxonomies_description: Kullanıcıların öne çıkan içeriği incelemesine ve etiket ayarlarını güncellemesine izin verir + manage_user_access: Kullanıcı Erişimini Yönetme + manage_user_access_description: Kullanıcıların, diğer kullanıcıların işi aşamalı yetkilendirme, e-posta adreslerini değiştirme ve parolalarını sıfırlama eylemlerini etkisizleştirmesine izin verir + manage_users: Kullanıcıları Yönetme + manage_users_description: Kullanıcıların, diğer kullanıcıların ayrıntılarını görüntülemesine ve onlara karşı denetim eylemleri gerçekleştirmesine izin verir + manage_webhooks: Webhookları Yönetme + manage_webhooks_description: Kullanıcıların yönetsel olaylar için webhook kurmasına izin verir + view_audit_log: Denetim Kaydını Görüntüleme + view_audit_log_description: Kullanıcıların sunucudaki yönetsel eylemlerin bir tarihçesini görüntülemesine izin verir + view_dashboard: Ana Paneli Görüntüleme + view_dashboard_description: Kullanıcıların ana panele ve çeşitli ölçütlere erişmesine izin verir + view_devops: Devops + view_devops_description: Kullanıcıların Sidekiq ve pgHero panellerine erişmesine izin verir + title: Roller rules: add_new: Kural ekle delete: Sil @@ -701,9 +762,6 @@ tr: deletion: desc_html: Herkese hesabını silme izni ver title: Hesap silmeyi aç - min_invite_role: - disabled: Hiç kimse - title: tarafından yapılan davetlere izin ver require_invite_text: desc_html: Kayıtlar elle doğrulama gerektiriyorsa, "Neden katılmak istiyorsunuz?" metin girdisini isteğe bağlı yerine zorunlu yapın title: Yeni kullanıcıların katılmak için bir gerekçe sunmasını gerektir @@ -716,9 +774,6 @@ tr: show_known_fediverse_at_about_page: desc_html: Değiştirildiğinde, bilinen bütün fediverse'lerden gönderileri ön izlemede gösterir. Diğer türlü sadece yerel gönderileri gösterecektir. title: Zaman çizelgesi ön izlemesinde bilinen fediverse'i göster - show_staff_badge: - desc_html: Kullanıcının sayfasında bir personel rozeti göster - title: Personel rozeti göster site_description: desc_html: Ana sayfada paragraf olarak görüntülenecek bilgidir.
    Özellikle <a> ve <em> olmak suretiyle HTML etiketlerini kullanabilirsiniz. title: Site açıklaması @@ -1124,15 +1179,24 @@ tr: public: Genel zaman çizelgesi thread: Sohbetler edit: + add_keyword: Anahtar sözcük ekle + keywords: Anahtar Sözcükler title: Filtreyi düzenle errors: + deprecated_api_multiple_keywords: Bu parametreler, birden fazla filtre anahtar sözcüğü için geçerli olduğundan dolayı bu uygulama içerisinden değiştirilemezler. Daha yeni bir uygulama veya web arayüzünü kullanın. invalid_context: Sıfır ya da geçersiz içerik sağlandı - invalid_irreversible: Geri dönüşümsüz filtreleme sadece anasayfa ya da bildirim bağlamında çalışır index: + contexts: "%{contexts} içindeki filtreler" delete: Sil empty: Hiç filtreniz yok. + expires_in: "%{distance} sürede sona eriyor" + expires_on: "%{date} tarihinde sona eriyor" + keywords: + one: "%{count} anahtar sözcük" + other: "%{count} anahtar sözcük" title: Filtreler new: + save: Yeni filtre kaydet title: Yeni filtre ekle footer: developers: Geliştiriciler @@ -1251,6 +1315,8 @@ tr: copy_account_note_text: 'Bu kullanıcı %{acct} adresinden taşındı, işte onlarla ilgili önceki notlarınız:' notification_mailer: admin: + report: + subject: "%{name} bir bildirim gönderdi" sign_up: subject: "%{name} kaydoldu" digest: diff --git a/config/locales/tt.yml b/config/locales/tt.yml index e23533828fc..a520e4d2b5d 100644 --- a/config/locales/tt.yml +++ b/config/locales/tt.yml @@ -14,7 +14,6 @@ tt: following: Язылгансыз media: Медиа roles: - admin: Админ bot: Бот group: Törkem unfollow: Язылынмау @@ -41,10 +40,6 @@ tt: all: Бөтенесе perform_full_suspension: Искә алмау reset: Ташлату - role: Рөхсәтләр - roles: - moderator: Модератор - user: Кулланучы search: Эзләү sensitive: Sizmäle username: Кулланучы исеме diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 2612237b885..e29c59cb6cc 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -89,10 +89,8 @@ uk: posts_tab_heading: Дмухи posts_with_replies: Дмухи та відповіді roles: - admin: Адміністратор bot: Бот group: Група - moderator: Мод unavailable: Профіль недоступний unfollow: Відписатися admin: @@ -111,7 +109,6 @@ uk: avatar: Аватар by_domain: Домен change_email: - changed_msg: Адресу електронної пошти облікового запису успішно змінено! current_email: Поточна адреса електронної пошти label: Змінити адресу електронної пошти new_email: Нова адреса електронної пошти @@ -195,12 +192,6 @@ uk: reset: Скинути reset_password: Скинути пароль resubscribe: Перепідписатися - role: Дозволи - roles: - admin: Адміністратор - moderator: Модератор - staff: Персонал - user: Користувач search: Пошук search_same_email_domain: Інші користувачі з тим самим поштовим доменом search_same_ip: Інші користувачі з тим самим IP @@ -716,9 +707,6 @@ uk: deletion: desc_html: Дозволити будь-кому видаляти свій обліковий запис title: Видалення відкритого облікового запису - min_invite_role: - disabled: Ніхто - title: Дозволити запрошення від require_invite_text: desc_html: Якщо реєстрація вимагає власноручного затвердження, зробіть текстове поле «Чому ви хочете приєднатися?» обов'язковим, а не додатковим title: Вимагати повідомлення причини приєднання від нових користувачів @@ -731,9 +719,6 @@ uk: show_known_fediverse_at_about_page: desc_html: Коли увімкнено, будуть показані пости з усього відомого федисвіту у передпоказі. Інакше будуть показані лише локальні дмухи. title: Показувати доступний федисвіт у передпоказі стрічки - show_staff_badge: - desc_html: Відмічати персонал на сторінці користувачів - title: Показувати персонал site_description: desc_html: Відображається у якості параграфа на титульній сторінці та використовується у якості мета-тега.
    Можна використовувати HTML-теги, особливо <a> і <em>. title: Опис сервера @@ -1134,15 +1119,26 @@ uk: public: Глобальні стрічки thread: Повідомлення edit: + add_keyword: Додати ключове слово + keywords: Ключові слова title: Редагувати фільтр errors: + deprecated_api_multiple_keywords: Ці параметри не можна змінити з цього застосунку, тому що вони застосовуються до більш ніж одного ключового слова. Використовуйте новішу версію застосунку або вебінтерфейс. invalid_context: Контекст неправильний або не був наданий - invalid_irreversible: Незворотне фільтрування працює тільки в контексті свого фіду або сповіщень index: + contexts: Фільтри в %{contexts} delete: Видалити empty: У вас немає фільтрів. + expires_in: Закінчується %{distance} + expires_on: Закінчується %{date} + keywords: + few: "%{count} ключові слова" + many: "%{count} ключових слів" + one: "%{count} ключове слово" + other: "%{count} ключових слів" title: Фільтри new: + save: Зберегти новий фільтр title: Додати фільтр footer: developers: Розробникам @@ -1265,6 +1261,8 @@ uk: copy_account_note_text: 'Цей користувач був переміщений з %{acct}, ось ваші попередні нотатки:' notification_mailer: admin: + report: + subject: "%{name} подає скаргу" sign_up: subject: "%{name} приєднується" digest: diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 72d06ab5569..b471cc153a1 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -77,10 +77,8 @@ vi: posts_tab_heading: Tút posts_with_replies: Trả lời roles: - admin: Quản trị viên bot: Tài khoản Bot group: Nhóm - moderator: Kiểm duyệt viên unavailable: Tài khoản bị đình chỉ unfollow: Ngưng theo dõi admin: @@ -99,12 +97,17 @@ vi: avatar: Ảnh đại diện by_domain: Máy chủ change_email: - changed_msg: Email tài khoản đã thay đổi thành công! + changed_msg: Email đã thay đổi thành công! current_email: Email hiện tại label: Thay đổi email new_email: Email mới submit: Thay đổi email title: Thay đổi email cho %{username} + change_role: + changed_msg: Vai trò đã thay đổi thành công! + label: Đổi vai trò + no_role: Chưa có vai trò + title: Thay đổi vai trò %{username} confirm: Phê duyệt confirmed: Đã xác minh confirming: Chờ xác nhận @@ -116,7 +119,7 @@ vi: disable: Khóa disable_sign_in_token_auth: Vô hiệu hóa xác minh bằng email disable_two_factor_authentication: Vô hiệu hóa xác minh 2 bước - disabled: Đã vô hiệu hóa + disabled: Tạm khóa display_name: Tên hiển thị domain: Máy chủ edit: Chỉnh sửa @@ -148,6 +151,7 @@ vi: active: Hoạt động all: Toàn bộ pending: Chờ xử lý + silenced: Hạn chế suspended: Vô hiệu hóa title: Trạng thái moderation_notes: Nhật ký kiểm duyệt @@ -155,6 +159,7 @@ vi: most_recent_ip: IP gần nhất no_account_selected: Không có tài khoản nào thay đổi vì không có tài khoản nào được chọn no_limits_imposed: Bình thường + no_role_assigned: Chưa có vai trò not_subscribed: Chưa đăng ký pending: Chờ duyệt perform_full_suspension: Vô hiệu hóa @@ -181,11 +186,6 @@ vi: reset_password: Đặt lại mật khẩu resubscribe: Đăng ký lại role: Vai trò - roles: - admin: Quản trị viên - moderator: Kiểm duyệt viên - staff: Đội ngũ - user: Người dùng search: Tìm kiếm search_same_email_domain: Tra cứu email search_same_ip: Tra cứu IP @@ -198,7 +198,7 @@ vi: show: created_reports: Gửi báo cáo targeted_reports: Bị báo cáo - silence: Ẩn + silence: Hạn chế silenced: Hạn chế statuses: Tút strikes: Lịch sử kiểm duyệt @@ -633,6 +633,65 @@ vi: unresolved: Chờ xử lý updated_at: Cập nhật lúc view_profile: Xem trang hồ sơ + roles: + add_new: Thêm vai trò + assigned_users: + other: "%{count} người" + categories: + administration: Quản trị viên + devops: Nhà phát triển + invites: Lời mời + moderation: Kiểm duyệt + special: Đặc biệt + delete: Xóa + description_html: Thông qua vai trò người dùng, bạn có thể tùy chỉnh những tính năng và vị trí của Mastodon mà người dùng có thể truy cập. + edit: Sửa vai trò '%{name}' + everyone: Quyền hạn mặc định + everyone_full_description_html: Đây vai trò cơ bản ảnh hưởng tới mọi người dùng khác, kể cả những người không có vai trò được chỉ định. Tất cả các vai trò khác đều kế thừa quyền từ vai trò đó. + permissions_count: + other: "%{count} quyền hạn" + privileges: + administrator: Quản trị viên + administrator_description: Người dùng này có thể truy cập mọi quyền hạn + delete_user_data: Xóa dữ liệu người dùng + delete_user_data_description: Cho phép xóa dữ liệu của người dùng khác lập tức + invite_users: Mời người dùng + invite_users_description: Cho phép mời những người mới vào máy chủ + manage_announcements: Quản lý thông báo + manage_announcements_description: Cho phép quản lý thông báo trên máy chủ + manage_appeals: Quản lý kháng cáo + manage_appeals_description: Cho phép xem xét kháng cáo đối với các hành động kiểm duyệt + manage_blocks: Quản lý chặn + manage_blocks_description: Cho phép chặn các nhà cung cấp e-mail và địa chỉ IP + manage_custom_emojis: Quản lý emoji + manage_custom_emojis_description: Cho phép quản lý các emoji tùy chỉnh trên máy chủ + manage_federation: Quản lý liên hợp + manage_federation_description: Cho phép chặn hoặc liên hợp với các máy chủ khác và kiểm soát khả năng phân phối + manage_invites: Quản lý lời mời + manage_invites_description: Cho phép mở và đóng các lời mời đăng ký + manage_reports: Quản lý báo cáo + manage_reports_description: Cho phép xem xét các báo cáo và thực hiện hành động kiểm duyệt đối với chúng + manage_roles: Quản lý vai trò + manage_roles_description: Cho phép quản lý và chỉ định các vai trò nhỏ hơn họ + manage_rules: Quản lý quy tắc máy chủ + manage_rules_description: Cho phép thay đổi quy tắc máy chủ + manage_settings: Quản lý thiết lập + manage_settings_description: Cho phép thay đổi thiết lập máy chủ + manage_taxonomies: Quản lý phân loại + manage_taxonomies_description: Cho phép đánh giá nội dung xu hướng và cập nhật cài đặt hashtag + manage_user_access: Quản lý người dùng truy cập + manage_user_access_description: Cho phép vô hiệu hóa xác thực hai bước của người dùng khác, thay đổi địa chỉ email và đặt lại mật khẩu của họ + manage_users: Quản lý người dùng + manage_users_description: Cho phép xem thông tin chi tiết của người dùng khác và thực hiện các hành động kiểm duyệt đối với họ + manage_webhooks: Quản lý Webhook + manage_webhooks_description: Cho phép thiết lập webhook cho các sự kiện quản trị + view_audit_log: Xem nhật ký + view_audit_log_description: Cho phép xem lịch sử của các hành động quản trị trên máy chủ + view_dashboard: Xem quản trị + view_dashboard_description: Cho phép truy cập trang tổng quan và các chỉ số khác + view_devops: Nhà phát triển + view_devops_description: Cho phép truy cập trang tổng quan Sidekiq và pgHero + title: Danh sách vai trò rules: add_new: Thêm quy tắc delete: Xóa bỏ @@ -685,9 +744,6 @@ vi: deletion: desc_html: Cho phép mọi người xóa tài khoản của họ title: Xóa tài khoản - min_invite_role: - disabled: Không một ai - title: Cho phép lời mời bằng cách require_invite_text: desc_html: Khi chọn phê duyệt người dùng thủ công, hiện “Tại sao bạn muốn đăng ký?” thay cho tùy chọn nhập title: Người đăng ký mới phải nhập mã mời tham gia @@ -700,9 +756,6 @@ vi: show_known_fediverse_at_about_page: desc_html: Nếu tắt, bảng tin sẽ chỉ hiển thị nội dung do người dùng của máy chủ này tạo ra title: Bao gồm nội dung từ mạng liên hợp trên bảng tin không được cho phép - show_staff_badge: - desc_html: Hiện huy hiệu đội ngũ trên trang người dùng - title: Hiện huy hiệu đội ngũ site_description: desc_html: Nội dung giới thiệu về máy chủ. Mô tả những gì làm cho máy chủ Mastodon này đặc biệt và bất cứ điều gì quan trọng khác. Bạn có thể dùng các thẻ HTML, đặc biệt là <a><em>. title: Mô tả máy chủ @@ -1104,15 +1157,23 @@ vi: public: Tin công khai thread: Thảo luận edit: + add_keyword: Thêm từ khoá + keywords: Từ khóa title: Chỉnh sửa bộ lọc errors: + deprecated_api_multiple_keywords: Không thể thay đổi các tham số này từ ứng dụng này vì chúng áp dụng cho nhiều hơn một từ khóa bộ lọc. Sử dụng ứng dụng mới hơn hoặc giao diện web. invalid_context: Bối cảnh không hợp lệ hoặc không có - invalid_irreversible: Bộ lọc chỉ hoạt động với bảng tin hoặc nội dung thông báo index: + contexts: Bộ lọc %{contexts} delete: Xóa bỏ empty: Chưa có bộ lọc nào. + expires_in: Hết hạn trong %{distance} + expires_on: Hết hạn vào %{date} + keywords: + other: "%{count} từ khóa" title: Bộ lọc new: + save: Lưu thành bộ lọc mới title: Thêm bộ lọc mới footer: developers: Phát triển @@ -1229,6 +1290,8 @@ vi: copy_account_note_text: 'Tài khoản này chuyển từ %{acct}, đây là lịch sử kiểm duyệt của họ:' notification_mailer: admin: + report: + subject: "%{name} đã gửi báo cáo" sign_up: subject: "%{name} đã được đăng ký" digest: diff --git a/config/locales/zgh.yml b/config/locales/zgh.yml index 83b5866dfe1..36240355b0c 100644 --- a/config/locales/zgh.yml +++ b/config/locales/zgh.yml @@ -40,8 +40,6 @@ zgh: all: ⵎⴰⵕⵕⴰ public: ⴰⴳⴷⵓⴷⴰⵏ reject: ⴰⴳⵢ - roles: - user: ⵓⵏⵙⵙⵓⵎⵔⵙ title: ⵉⵎⵉⴹⴰⵏⵏ web: ⵡⵉⴱ action_logs: diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 475d03a2a3f..9ccabc99836 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -79,10 +79,8 @@ zh-CN: posts_tab_heading: 嘟文 posts_with_replies: 嘟文和回复 roles: - admin: 管理员 bot: 机器人 group: 群组 - moderator: 监察员 unavailable: 个人资料不可用 unfollow: 取消关注 admin: @@ -101,7 +99,6 @@ zh-CN: avatar: 头像 by_domain: 域名 change_email: - changed_msg: 已成功更改账号的电子邮箱! current_email: 当前的电子邮箱 label: 更改电子邮箱 new_email: 新的电子邮箱 @@ -182,12 +179,6 @@ zh-CN: reset: 重置 reset_password: 重置密码 resubscribe: 重新订阅 - role: 用户组 - roles: - admin: 管理员 - moderator: 监察员 - staff: 站务人员 - user: 普通用户 search: 搜索 search_same_email_domain: 其他具有相同电子邮箱域名的用户 search_same_ip: 具有相同IP的其他用户 @@ -687,9 +678,6 @@ zh-CN: deletion: desc_html: 允许所有人删除自己的帐户 title: 开放删除帐户权限 - min_invite_role: - disabled: 没有人 - title: 允许发送邀请的用户组 require_invite_text: desc_html: 当注册需要手动批准时,将“你为什么想要加入?”设为必填项 title: 要求新用户填写申请注册的原因 @@ -702,9 +690,6 @@ zh-CN: show_known_fediverse_at_about_page: desc_html: 如果开启,就会在时间轴预览显示其他站点嘟文,否则就只会只显示本站嘟文。 title: 在时间轴预览中显示其他站点嘟文 - show_staff_badge: - desc_html: 在个人资料页上显示管理人员标志 - title: 显示管理人员标志 site_description: desc_html: 首页上的介绍文字。 描述一下本 Mastodon 实例的特殊之处以及其他重要信息。可以使用 HTML 标签,包括 <a><em> 。 title: 本站简介 @@ -1091,10 +1076,11 @@ zh-CN: public: 公共时间轴 thread: 对话 edit: + add_keyword: 添加关键词 + keywords: 关键词 title: 编辑过滤器 errors: invalid_context: 过滤器场景没有或无效 - invalid_irreversible: 此功能只适用于主页时间轴或通知 index: delete: 删除 empty: 你没有过滤器。 diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index 5b6e0b83a26..e375bb4c8a5 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -75,10 +75,8 @@ zh-HK: posts_tab_heading: 文章 posts_with_replies: 包含回覆的文章 roles: - admin: 管理員 bot: 機械人 group: 群組 - moderator: 板主 unavailable: 無法取得個人檔案 unfollow: 取消關注 admin: @@ -97,7 +95,6 @@ zh-HK: avatar: 頭像 by_domain: 域名 change_email: - changed_msg: 帳號電郵更新成功! current_email: 現時電郵 label: 更改電郵 new_email: 新的電郵 @@ -174,12 +171,6 @@ zh-HK: reset: 重設 reset_password: 重設密碼 resubscribe: 重新訂閱 - role: 權限 - roles: - admin: 管理員 - moderator: 管理員 - staff: 工作人員 - user: 普通使用者 search: 搜尋 search_same_email_domain: 其他有相同電郵網域的使用者 search_same_ip: 其他有相同 IP 位址的使用者 @@ -568,9 +559,6 @@ zh-HK: deletion: desc_html: 允許所有人刪除自己的帳號 title: 容許刪除帳號 - min_invite_role: - disabled: 沒有人 - title: 允許發送邀請的身份 require_invite_text: desc_html: 如果已設定為手動審核注冊,請把「加入的原因」設定為必填項目。 title: 要求新用戶填寫注冊申請 @@ -583,9 +571,6 @@ zh-HK: show_known_fediverse_at_about_page: desc_html: 如果停用,將會只在本站的歡迎頁顯示本站的文章。 title: 在訪客預覽本站的時間軸上,顯示跨站文章 - show_staff_badge: - desc_html: 在個人資料頁上顯示工作人員標誌 - title: 顯示工作人員標誌 site_description: desc_html: 在首頁顯示,及在 meta 標籤使用作網站介紹。
    你可以在此使用 <a><em> 等 HTML 標籤。 title: 本站介紹 @@ -836,7 +821,6 @@ zh-HK: title: 編輯篩選器 errors: invalid_context: 沒有提供內文或內文無效 - invalid_irreversible: 不可逆的篩選器只適用放主頁或通知頁面 index: delete: 刪除 empty: 你沒有過濾器。 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 7d2bb80cbea..1490aeef131 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -1,7 +1,7 @@ --- zh-TW: about: - about_hashtag_html: 這些是包含「#%{hashtag}」標籤的公開文章。只要您有任何 Mastodon 站點、或者其他站點的使用者,便可以與他們互動。 + about_hashtag_html: 這些是包含「#%{hashtag}」標籤的公開文章。只要您有任何 Mastodon 站點、或者其他聯邦宇宙的使用者,便可以與他們互動。 about_mastodon_html: Mastodon (長毛象)是一個自由、開放原始碼的社群網站。它是一個分散式的服務,避免您的通訊被單一商業機構壟斷操控。請您選擇一家您信任的 Mastodon 站點,在上面建立帳號,然後您就可以和任一 Mastodon 站點上的使用者互通,享受無縫的社群網路交流。 about_this: 關於本站 active_count_after: 活躍 @@ -22,7 +22,9 @@ zh-TW: federation_hint_html: 您只需要擁有 %{instance} 的帳號,就可以追蹤任何一台 Mastodon 伺服器上的人等等。 get_apps: 嘗試行動應用程式 hosted_on: 在 %{domain} 運作的 Mastodon 站點 - instance_actor_flash: "這個帳戶是個用來代表伺服器自已的虛擬角色,而不是實際的使用者。它是用來聯盟用的,除非您想要封鎖整個站台,不然不該封鎖它。但要封鎖整個站台,您可以使用網域封鎖功能。 \n" + instance_actor_flash: '這個帳戶是個用來代表伺服器本身的虛擬角色,而非實際的使用者。它是用來聯盟用的,除非您想要封鎖整個站台,不然不該封鎖它。但要封鎖整個站台,您可以使用網域封鎖功能。 + + ' learn_more: 了解詳細 logged_in_as_html: 您目前登入使用的帳號是 %{username} logout_before_registering: 您已經登入了! @@ -60,7 +62,7 @@ zh-TW: followers: other: 跟隨者 following: 正在跟隨 - instance_actor_flash: 這個帳號是一個用來代表此伺服器的虛擬執行者,而非真實使用者。它用途為站點聯盟且不應被停權。 + instance_actor_flash: 這個帳號是一個用來代表此伺服器的虛擬執行者,而非真實使用者。它用途為聯邦宇宙且不應被停權。 joined: 加入於 %{date} last_active: 上次活躍時間 link_verified_on: 此連結的所有權已在 %{date} 檢查過 @@ -77,10 +79,8 @@ zh-TW: posts_tab_heading: 嘟文 posts_with_replies: 嘟文與回覆 roles: - admin: 管理員 bot: 機器人 group: 群組 - moderator: 版主 unavailable: 無法取得個人檔案 unfollow: 取消跟隨 admin: @@ -99,12 +99,17 @@ zh-TW: avatar: 頭像 by_domain: 站點 change_email: - changed_msg: 已成功變更帳號電子信箱地址! + changed_msg: 電子郵件已成功變更! current_email: 目前的電子信箱地址 label: 變更電子信箱地址 new_email: 新的電子信箱地址 submit: 變更電子信箱地址 title: 為 %{username} 變更電子信箱地址 + change_role: + changed_msg: 成功修改角色! + label: 變更角色 + no_role: 沒有角色 + title: 為 %{username} 變更角色 confirm: 確定 confirmed: 已確定 confirming: 確定 @@ -148,13 +153,15 @@ zh-TW: active: 活躍 all: 全部 pending: 等待中 + silenced: 受限的 suspended: 已停權 - title: 版務 + title: 站務 moderation_notes: 管理備忘 most_recent_activity: 最近活動 most_recent_ip: 最近 IP 位址 no_account_selected: 未選取任何帳號,因此未變更 no_limits_imposed: 未受限制 + no_role_assigned: 未指派角色 not_subscribed: 未訂閱 pending: 等待審核中 perform_full_suspension: 停權 @@ -180,12 +187,7 @@ zh-TW: reset: 重設 reset_password: 重設密碼 resubscribe: 重新訂閱 - role: 身份 - roles: - admin: 管理員 - moderator: 版主 - staff: 管理人員 - user: 普通使用者 + role: 角色 search: 搜尋 search_same_email_domain: 其他有同個電子郵件網域的使用者 search_same_ip: 其他有同個 IP 的使用者 @@ -283,7 +285,7 @@ zh-TW: create_account_warning_html: "%{name} 已對 %{target} 送出警告" create_announcement_html: "%{name} 新增了公告 %{target}" create_custom_emoji_html: "%{name} 上傳了新自訂表情符號 %{target}" - create_domain_allow_html: "%{name} 允許 %{target} 網域加入站點聯盟" + create_domain_allow_html: "%{name} 允許 %{target} 網域加入聯邦宇宙" create_domain_block_html: "%{name} 封鎖了網域 %{target}" create_email_domain_block_html: "%{name} 封鎖了電子信箱網域 %{target}" create_ip_block_html: "%{name} 已經設定了IP %{target} 的規則" @@ -291,7 +293,7 @@ zh-TW: demote_user_html: "%{name} 將使用者 %{target} 降級" destroy_announcement_html: "%{name} 刪除了公告 %{target}" destroy_custom_emoji_html: "%{name} 停用了自訂表情符號 %{target}" - destroy_domain_allow_html: "%{name} 不允許與網域 %{target} 加入站點聯盟" + destroy_domain_allow_html: "%{name} 不允許與網域 %{target} 加入聯邦宇宙" destroy_domain_block_html: "%{name} 取消了對網域 %{target} 的封鎖" destroy_email_domain_block_html: "%{name} 取消了對電子信箱網域 %{target} 的封鎖" destroy_instance_html: "%{name} 清除了網域 %{target}" @@ -407,10 +409,10 @@ zh-TW: empty: 找不到申訴。 title: 申訴 domain_allows: - add_new: 將網域加入白名單 - created_msg: 網域已成功加入白名單 - destroyed_msg: 網域已成功從白名單移除 - undo: 從白名單移除 + add_new: 將網域加入聯邦宇宙白名單 + created_msg: 網域已成功加入聯邦宇宙白名單 + destroyed_msg: 網域已成功從聯邦宇宙白名單移除 + undo: 從聯邦宇宙白名單移除 domain_blocks: add_new: 新增欲封鎖域名 created_msg: 正在進行站點封鎖 @@ -520,12 +522,12 @@ zh-TW: moderation: all: 全部 limited: 限制 - title: 版主 + title: 管管 private_comment: 私人留言 public_comment: 公開留言 purge: 清除 purge_description_html: 若您相信此網域將永久離線,您可以自儲存空間中刪除該網域所有帳號紀錄及相關資料。這可能花費一些時間。 - title: 聯邦 + title: 聯邦宇宙 total_blocked_by_us: 被我們封鎖 total_followed_by_them: 被他們跟隨 total_followed_by_us: 被我們跟隨 @@ -570,7 +572,7 @@ zh-TW: pending: 等待中繼站審核 save_and_enable: 儲存並啟用 setup: 設定中繼連結 - signatures_not_enabled: 若啟用安全模式或受限的站點聯盟模式,中繼將不會正常運作 + signatures_not_enabled: 若啟用安全模式或受限的聯邦宇宙模式,中繼將不會正常運作 status: 狀態 title: 中繼 report_notes: @@ -635,6 +637,65 @@ zh-TW: unresolved: 未解決 updated_at: 更新 view_profile: 檢視個人資料頁 + roles: + add_new: 新增角色 + assigned_users: + other: "%{count} 個使用者" + categories: + administration: 管理員 + devops: Devops + invites: 邀請 + moderation: 站務 + special: 特殊 + delete: 刪除 + description_html: 透過使用者角色,您可以自訂您的使用者可以存取 Mastodon 的哪些功能與區域。 + edit: 編輯「%{name}」角色 + everyone: 預設權限 + everyone_full_description_html: 這是會影響所有使用者基本角色,即使是那些沒有被分配角色的使用者也一樣。其他所有的角色都從它繼承權限。 + permissions_count: + other: "%{count} 個權限" + privileges: + administrator: 管理員 + administrator_description: 擁有此權限的使用者將會略過所有權限 + delete_user_data: 刪除使用者資料 + delete_user_data_description: 允許使用者立刻刪除其他使用者的資料 + invite_users: 邀請使用者 + invite_users_description: 允許使用者邀請新人加入伺服器 + manage_announcements: 管理公告 + manage_announcements_description: 允許使用者管理伺服器上的公告 + manage_appeals: 管理解封申訴系統 + manage_appeals_description: 允許使用者審閱針對站務動作的申訴 + manage_blocks: 管理封鎖 + manage_blocks_description: 允許使用者封鎖電子郵件提供者與 IP 位置 + manage_custom_emojis: 管理自訂表情符號 + manage_custom_emojis_description: 允許使用者管理伺服器上的自訂表情符號 + manage_federation: 管理聯邦宇宙 + manage_federation_description: 允許使用者封鎖或允許與其他網域的聯邦宇宙,並控制傳遞能力 + manage_invites: 管理邀請 + manage_invites_description: 允許使用者瀏覽與停用邀請連結 + manage_reports: 管理回報 + manage_reports_description: 允許使用者審閱回報並對回報執行站務動作 + manage_roles: 管理角色 + manage_roles_description: 允許使用者管理並指派低於他們的使用者 + manage_rules: 管理規則 + manage_rules_description: 允許使用者變更伺服器規則 + manage_settings: 管理設定 + manage_settings_description: 允許使用者變更站點設定 + manage_taxonomies: 管理分類方式 + manage_taxonomies_description: 允許使用者審閱熱門內容與更新主題標籤設定 + manage_user_access: 管理使用者存取權 + manage_user_access_description: 允許使用者停用其他人的兩步驟驗證、變更他們的電子郵件地址以及重設他們的密碼 + manage_users: 管理使用者 + manage_users_description: 允許使用者檢視其他使用者的詳細資訊並對回報執行站務動作 + manage_webhooks: 管理 Webhooks + manage_webhooks_description: 允許使用者為管理事件設定 webhooks + view_audit_log: 檢視審核日誌 + view_audit_log_description: 允許使用者檢視伺服器上的管理動作歷史 + view_dashboard: 檢視儀表板 + view_dashboard_description: 允許使用者存取儀表板與各種指標 + view_devops: Devops + view_devops_description: 允許使用者存取 Sidekiq 與 pgHero 儀表板 + title: 角色 rules: add_new: 新增規則 delete: 刪除 @@ -687,9 +748,6 @@ zh-TW: deletion: desc_html: 允許所有人刪除自己的帳號 title: 開放刪除帳號的權限 - min_invite_role: - disabled: 沒有人 - title: 允許發送邀請的身份 require_invite_text: desc_html: 如果已設定為手動審核註冊,請將「加入原因」設定為必填項目。 title: 要求新使用者填申請書以索取邀請 @@ -702,9 +760,6 @@ zh-TW: show_known_fediverse_at_about_page: desc_html: 如果開啟,就會在時間軸預覽顯示其他站點嘟文,否則就只會顯示本站點嘟文。 title: 在時間軸預覽顯示其他站點嘟文 - show_staff_badge: - desc_html: 在個人資料頁面上顯示管理人員標誌 - title: 顯示管理人員標誌 site_description: desc_html: 首頁上的介紹文字,描述此 Mastodon 伺服器的特別之處和其他重要資訊。可使用 HTML 標籤,包括 <a><em>。 title: 伺服器描述 @@ -1106,15 +1161,23 @@ zh-TW: public: 公開時間軸 thread: 會話 edit: + add_keyword: 新增關鍵字 + keywords: 關鍵字 title: 編輯篩選條件 errors: + deprecated_api_multiple_keywords: 這些參數無法從此應用程式中更改,因為它們適用於一或多個過濾器關鍵字。請使用較新的應用程式或是網頁介面。 invalid_context: 沒有提供內文或內文無效 - invalid_irreversible: 此功能僅適用於首頁或通知頁面 index: + contexts: "%{contexts} 中的過濾器" delete: 刪除 empty: 您沒有過濾器。 + expires_in: 於 %{distance} 過期 + expires_on: 於 %{date} 過期 + keywords: + other: "%{count} 個關鍵字" title: 過濾器 new: + save: 儲存新過濾器 title: 新增篩選器 footer: developers: 開發者 @@ -1224,13 +1287,15 @@ zh-TW: other_data: 其他資料並不會自動轉移 redirect: 您目前的帳號將會在個人資料頁面新增重新導向公告,並會被排除在搜尋結果之外 moderation: - title: 營運 + title: 站務 move_handler: carry_blocks_over_text: 此使用者轉移自被您封鎖的 %{acct}。 carry_mutes_over_text: 此使用者轉移自被您靜音的 %{acct}。 copy_account_note_text: 此使用者轉移自 %{acct},以下是您之前關於他們的備註: notification_mailer: admin: + report: + subject: "%{name} 送出了一則檢舉報告" sign_up: subject: "%{name} 已進行註冊" digest: From 25e076505ebe735cb3819ae8675b734d4f1c49aa Mon Sep 17 00:00:00 2001 From: Jeremy Kescher Date: Thu, 7 Jul 2022 01:14:28 +0000 Subject: [PATCH 094/646] ip_cleanup_scheduler: Make IP and session retention configurable (#18757) --- .env.production.sample | 8 ++++++++ app/workers/scheduler/ip_cleanup_scheduler.rb | 6 ++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/.env.production.sample b/.env.production.sample index 4fc58072f1d..5eecb8bdea4 100644 --- a/.env.production.sample +++ b/.env.production.sample @@ -67,3 +67,11 @@ S3_BUCKET=files.example.com AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= S3_ALIAS_HOST=files.example.com + +# IP and session retention +# ----------------------- +# Make sure to modify the scheduling of ip_cleanup_scheduler in config/sidekiq.yml +# to be less than daily if you lower IP_RETENTION_PERIOD below two days (172800). +# ----------------------- +IP_RETENTION_PERIOD=31556952 +SESSION_RETENTION_PERIOD=31556952 diff --git a/app/workers/scheduler/ip_cleanup_scheduler.rb b/app/workers/scheduler/ip_cleanup_scheduler.rb index 7afad2f581f..8f607db037b 100644 --- a/app/workers/scheduler/ip_cleanup_scheduler.rb +++ b/app/workers/scheduler/ip_cleanup_scheduler.rb @@ -3,7 +3,8 @@ class Scheduler::IpCleanupScheduler include Sidekiq::Worker - IP_RETENTION_PERIOD = 1.year.freeze + IP_RETENTION_PERIOD = ENV.fetch('IP_RETENTION_PERIOD', 1.year).to_i.seconds.freeze + SESSION_RETENTION_PERIOD = ENV.fetch('SESSION_RETENTION_PERIOD', 1.year).to_i.seconds.freeze sidekiq_options retry: 0 @@ -15,7 +16,8 @@ class Scheduler::IpCleanupScheduler private def clean_ip_columns! - SessionActivation.where('updated_at < ?', IP_RETENTION_PERIOD.ago).in_batches.destroy_all + SessionActivation.where('updated_at < ?', SESSION_RETENTION_PERIOD.ago).in_batches.destroy_all + SessionActivation.where('updated_at < ?', IP_RETENTION_PERIOD.ago).in_batches.update_all(ip: nil) User.where('current_sign_in_at < ?', IP_RETENTION_PERIOD.ago).in_batches.update_all(sign_up_ip: nil) LoginActivity.where('created_at < ?', IP_RETENTION_PERIOD.ago).in_batches.destroy_all Doorkeeper::AccessToken.where('last_used_at < ?', IP_RETENTION_PERIOD.ago).in_batches.update_all(last_used_ip: nil) From befbac3f1c54fd850256711327cbd4d24cd8390a Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 7 Jul 2022 18:18:23 +0200 Subject: [PATCH 095/646] Fix various in the user role management UI (#18777) * Reword priority description * Disable checkboxes for permissions you can't enable in role edition interface * Set max priority in HTML attribute * Explicitly link to role edition, do not link when you can't edit * Reword priority description based on review --- app/views/admin/roles/_form.html.haml | 4 ++-- app/views/admin/roles/_role.html.haml | 26 +++++++++++++++++++------- config/locales/simple_form.en.yml | 2 +- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/app/views/admin/roles/_form.html.haml b/app/views/admin/roles/_form.html.haml index 68607ce6821..99a211eeae8 100644 --- a/app/views/admin/roles/_form.html.haml +++ b/app/views/admin/roles/_form.html.haml @@ -9,7 +9,7 @@ = f.input :name, wrapper: :with_label .fields-group - = f.input :position, wrapper: :with_label + = f.input :position, wrapper: :with_label, input_html: { max: current_user.role.position - 1 } .fields-group = f.input :color, wrapper: :with_label, input_html: { placeholder: '#000000' } @@ -29,7 +29,7 @@ - (@role.everyone? ? UserRole::Flags::CATEGORIES.slice(:invites) : UserRole::Flags::CATEGORIES).each do |category, permissions| %h4= t(category, scope: 'admin.roles.categories') - = f.input :permissions_as_keys, collection: permissions, wrapper: :with_block_label, include_blank: false, label_method: lambda { |privilege| safe_join([t("admin.roles.privileges.#{privilege}"), content_tag(:span, t("admin.roles.privileges.#{privilege}_description"), class: 'hint')]) }, required: false, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', label: false, hint: false + = f.input :permissions_as_keys, collection: permissions, wrapper: :with_block_label, include_blank: false, label_method: lambda { |privilege| safe_join([t("admin.roles.privileges.#{privilege}"), content_tag(:span, t("admin.roles.privileges.#{privilege}_description"), class: 'hint')]) }, required: false, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', label: false, hint: false, disabled: permissions.filter { |privilege| UserRole::FLAGS[privilege] & current_user.role.computed_permissions == 0 } %hr.spacer/ diff --git a/app/views/admin/roles/_role.html.haml b/app/views/admin/roles/_role.html.haml index 1ca5ca39206..798d8d8b4fc 100644 --- a/app/views/admin/roles/_role.html.haml +++ b/app/views/admin/roles/_role.html.haml @@ -1,12 +1,22 @@ .announcements-list__item - = link_to edit_admin_role_path(role), class: 'announcements-list__item__title' do - %span.user-role{ class: "user-role-#{role.id}" } - = fa_icon 'users fw' + - if can?(:update, role) + = link_to edit_admin_role_path(role), class: 'announcements-list__item__title' do + %span.user-role{ class: "user-role-#{role.id}" } + = fa_icon 'users fw' - - if role.everyone? - = t('admin.roles.everyone') - - else - = role.name + - if role.everyone? + = t('admin.roles.everyone') + - else + = role.name + - else + %span.announcements-list__item__title + %span.user-role{ class: "user-role-#{role.id}" } + = fa_icon 'users fw' + + - if role.everyone? + = t('admin.roles.everyone') + - else + = role.name .announcements-list__item__action-bar .announcements-list__item__meta @@ -16,3 +26,5 @@ = link_to t('admin.roles.assigned_users', count: role.users.count), admin_accounts_path(role_ids: role.id) • %abbr{ title: role.permissions_as_keys.map { |privilege| I18n.t("admin.roles.privileges.#{privilege}") }.join(', ') }= t('admin.roles.permissions_count', count: role.permissions_as_keys.size) + %div + = table_link_to 'pencil', t('admin.accounts.edit'), edit_admin_role_path(role) if can?(:update, role) diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 932f34d82af..f7da3a23d2b 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -102,7 +102,7 @@ en: highlighted: This makes the role publicly visible name: Public name of the role, if role is set to be displayed as a badge permissions_as_keys: Users with this role will have access to... - position: Higher role decides conflict resolution in certain situations + position: Higher role decides conflict resolution in certain situations. Certain actions can only be performed on roles with alower priority webhook: events: Select events to send url: Where events will be sent to From 04cdfc0086dc2d7295d0a5cffb35481bba09e66e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Pokorn=C3=BD?= Date: Fri, 8 Jul 2022 22:39:17 +0200 Subject: [PATCH 096/646] Fix a typo in user role priority (#18786) "alower priority" -> "a lower priority" --- config/locales/simple_form.en.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index f7da3a23d2b..c17a62cbea3 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -102,7 +102,7 @@ en: highlighted: This makes the role publicly visible name: Public name of the role, if role is set to be displayed as a badge permissions_as_keys: Users with this role will have access to... - position: Higher role decides conflict resolution in certain situations. Certain actions can only be performed on roles with alower priority + position: Higher role decides conflict resolution in certain situations. Certain actions can only be performed on roles with a lower priority webhook: events: Select events to send url: Where events will be sent to From 12ed2d793b1b4823b0df047a47677bb0667bf43d Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 9 Jul 2022 22:07:17 +0200 Subject: [PATCH 097/646] Change custom emoji file size limit from 50 KB to 256 KB (#18788) --- app/models/custom_emoji.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb index b08893e7752..289e3b66f98 100644 --- a/app/models/custom_emoji.rb +++ b/app/models/custom_emoji.rb @@ -23,7 +23,7 @@ class CustomEmoji < ApplicationRecord include Attachmentable - LIMIT = 50.kilobytes + LIMIT = 256.kilobytes SHORTCODE_RE_FRAGMENT = '[a-zA-Z0-9_]{2,}' From e7aa2be828f6a632dadd5c41e2364cea91ddbb2c Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 13 Jul 2022 15:03:28 +0200 Subject: [PATCH 098/646] Change how hashtags are normalized (#18795) * Change how hashtags are normalized * Fix tests --- app/controllers/admin/tags_controller.rb | 4 ++- .../api/v1/featured_tags_controller.rb | 4 +-- .../settings/featured_tags_controller.rb | 1 - app/javascript/mastodon/actions/compose.js | 15 ++++++++- app/lib/ascii_folding.rb | 10 ++++++ app/lib/hashtag_normalizer.rb | 25 +++++++++++++++ app/models/account.rb | 2 +- app/models/custom_filter.rb | 6 ++-- app/models/custom_filter_keyword.rb | 4 +-- app/models/featured_tag.rb | 31 ++++++++++++------ app/models/tag.rb | 20 +++++++++--- .../activitypub/hashtag_serializer.rb | 4 +-- .../rest/featured_tag_serializer.rb | 4 +++ app/serializers/rest/tag_serializer.rb | 4 +++ app/views/accounts/show.html.haml | 2 +- app/views/accounts/show.rss.ruby | 2 +- app/views/admin/tags/show.html.haml | 4 +-- app/views/admin/trends/tags/_tag.html.haml | 2 +- .../admin_mailer/_new_trending_tags.text.erb | 4 +-- .../settings/featured_tags/index.html.haml | 2 +- app/views/tags/_og.html.haml | 4 +-- app/views/tags/show.html.haml | 6 ++-- app/views/tags/show.rss.ruby | 6 ++-- config/initializers/inflections.rb | 1 + ...20220710102457_add_display_name_to_tags.rb | 5 +++ db/schema.rb | 3 +- spec/lib/hashtag_normalizer_spec.rb | 29 +++++++++++++++++ spec/models/tag_spec.rb | 8 ++--- streaming/index.js | 32 +++++++++++++++++-- 29 files changed, 193 insertions(+), 51 deletions(-) create mode 100644 app/lib/ascii_folding.rb create mode 100644 app/lib/hashtag_normalizer.rb create mode 100644 db/migrate/20220710102457_add_display_name_to_tags.rb create mode 100644 spec/lib/hashtag_normalizer_spec.rb diff --git a/app/controllers/admin/tags_controller.rb b/app/controllers/admin/tags_controller.rb index 749e2f144d3..4f727c398a0 100644 --- a/app/controllers/admin/tags_controller.rb +++ b/app/controllers/admin/tags_controller.rb @@ -16,6 +16,8 @@ module Admin if @tag.update(tag_params.merge(reviewed_at: Time.now.utc)) redirect_to admin_tag_path(@tag.id), notice: I18n.t('admin.tags.updated_msg') else + @time_period = (6.days.ago.to_date...Time.now.utc.to_date) + render :show end end @@ -27,7 +29,7 @@ module Admin end def tag_params - params.require(:tag).permit(:name, :trendable, :usable, :listable) + params.require(:tag).permit(:name, :display_name, :trendable, :usable, :listable) end end end diff --git a/app/controllers/api/v1/featured_tags_controller.rb b/app/controllers/api/v1/featured_tags_controller.rb index e4e836c9711..c1ead4f5405 100644 --- a/app/controllers/api/v1/featured_tags_controller.rb +++ b/app/controllers/api/v1/featured_tags_controller.rb @@ -13,9 +13,7 @@ class Api::V1::FeaturedTagsController < Api::BaseController end def create - @featured_tag = current_account.featured_tags.new(featured_tag_params) - @featured_tag.reset_data - @featured_tag.save! + @featured_tag = current_account.featured_tags.create!(featured_tag_params) render json: @featured_tag, serializer: REST::FeaturedTagSerializer end diff --git a/app/controllers/settings/featured_tags_controller.rb b/app/controllers/settings/featured_tags_controller.rb index e805527d07c..aadff7c8351 100644 --- a/app/controllers/settings/featured_tags_controller.rb +++ b/app/controllers/settings/featured_tags_controller.rb @@ -11,7 +11,6 @@ class Settings::FeaturedTagsController < Settings::BaseController def create @featured_tag = current_account.featured_tags.new(featured_tag_params) - @featured_tag.reset_data if @featured_tag.save redirect_to settings_featured_tags_path diff --git a/app/javascript/mastodon/actions/compose.js b/app/javascript/mastodon/actions/compose.js index bd4c1d0024f..32d8c229e45 100644 --- a/app/javascript/mastodon/actions/compose.js +++ b/app/javascript/mastodon/actions/compose.js @@ -606,7 +606,20 @@ function insertIntoTagHistory(recognizedTags, text) { const state = getState(); const oldHistory = state.getIn(['compose', 'tagHistory']); const me = state.getIn(['meta', 'me']); - const names = recognizedTags.map(tag => text.match(new RegExp(`#${tag.name}`, 'i'))[0].slice(1)); + + // FIXME: Matching input hashtags with recognized hashtags has become more + // complicated because of new normalization rules, it's no longer just + // a case sensitivity issue + const names = recognizedTags.map(tag => { + const matches = text.match(new RegExp(`#${tag.name}`, 'i')); + + if (matches && matches.length > 0) { + return matches[0].slice(1); + } else { + return tag.name; + } + }); + const intersectedOldHistory = oldHistory.filter(name => names.findIndex(newName => newName.toLowerCase() === name.toLowerCase()) === -1); names.push(...intersectedOldHistory.toJS()); diff --git a/app/lib/ascii_folding.rb b/app/lib/ascii_folding.rb new file mode 100644 index 00000000000..1798d3d0e62 --- /dev/null +++ b/app/lib/ascii_folding.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class ASCIIFolding + NON_ASCII_CHARS = 'ÀÁÂÃÄÅàáâãäåĀāĂ㥹ÇçĆćĈĉĊċČčÐðĎďĐđÈÉÊËèéêëĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħÌÍÎÏìíîïĨĩĪīĬĭĮįİıĴĵĶķĸĹĺĻļĽľĿŀŁłÑñŃńŅņŇňʼnŊŋÒÓÔÕÖØòóôõöøŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŠšſŢţŤťŦŧÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųŴŵÝýÿŶŷŸŹźŻżŽž' + EQUIVALENT_ASCII_CHARS = 'AAAAAAaaaaaaAaAaAaCcCcCcCcCcDdDdDdEEEEeeeeEeEeEeEeEeGgGgGgGgHhHhIIIIiiiiIiIiIiIiIiJjKkkLlLlLlLlLlNnNnNnNnnNnOOOOOOooooooOoOoOoRrRrRrSsSsSsSssTtTtTtUUUUuuuuUuUuUuUuUuUuWwYyyYyYZzZzZz' + + def fold(str) + str.tr(NON_ASCII_CHARS, EQUIVALENT_ASCII_CHARS) + end +end diff --git a/app/lib/hashtag_normalizer.rb b/app/lib/hashtag_normalizer.rb new file mode 100644 index 00000000000..c1f99e16383 --- /dev/null +++ b/app/lib/hashtag_normalizer.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +class HashtagNormalizer + def normalize(str) + remove_invalid_characters(ascii_folding(lowercase(cjk_width(str)))) + end + + private + + def remove_invalid_characters(str) + str.gsub(/[^[:alnum:]#{Tag::HASHTAG_SEPARATORS}]/, '') + end + + def ascii_folding(str) + ASCIIFolding.new.fold(str) + end + + def lowercase(str) + str.mb_chars.downcase.to_s + end + + def cjk_width(str) + str.unicode_normalize(:nfkc) + end +end diff --git a/app/models/account.rb b/app/models/account.rb index 628692d22e3..fe77eaec457 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -62,7 +62,7 @@ class Account < ApplicationRecord ) USERNAME_RE = /[a-z0-9_]+([a-z0-9_\.-]+[a-z0-9_]+)?/i - MENTION_RE = /(?<=^|[^\/[:word:]])@((#{USERNAME_RE})(?:@[[:word:]\.\-]+[[:word:]]+)?)/i + MENTION_RE = /(?<=^|[^\/[:word:]])@((#{USERNAME_RE})(?:@[[:alnum:]\.\-]+[[:alnum:]]+)?)/i URL_PREFIX_RE = /\Ahttp(s?):\/\/[^\/]+/ include Attachmentable diff --git a/app/models/custom_filter.rb b/app/models/custom_filter.rb index e98ed7df9fb..985eab1254c 100644 --- a/app/models/custom_filter.rb +++ b/app/models/custom_filter.rb @@ -3,14 +3,14 @@ # # Table name: custom_filters # -# id :bigint not null, primary key -# account_id :bigint +# id :bigint(8) not null, primary key +# account_id :bigint(8) # expires_at :datetime # phrase :text default(""), not null # context :string default([]), not null, is an Array # created_at :datetime not null # updated_at :datetime not null -# action :integer default(0), not null +# action :integer default("warn"), not null # class CustomFilter < ApplicationRecord diff --git a/app/models/custom_filter_keyword.rb b/app/models/custom_filter_keyword.rb index bf5c5574693..e0d0289ae16 100644 --- a/app/models/custom_filter_keyword.rb +++ b/app/models/custom_filter_keyword.rb @@ -3,8 +3,8 @@ # # Table name: custom_filter_keywords # -# id :bigint not null, primary key -# custom_filter_id :bigint not null +# id :bigint(8) not null, primary key +# custom_filter_id :bigint(8) not null # keyword :text default(""), not null # whole_word :boolean default(TRUE), not null # created_at :datetime not null diff --git a/app/models/featured_tag.rb b/app/models/featured_tag.rb index 74d62e77781..c9c285bfa1b 100644 --- a/app/models/featured_tag.rb +++ b/app/models/featured_tag.rb @@ -13,17 +13,19 @@ # class FeaturedTag < ApplicationRecord - belongs_to :account, inverse_of: :featured_tags, required: true - belongs_to :tag, inverse_of: :featured_tags, required: true + belongs_to :account, inverse_of: :featured_tags + belongs_to :tag, inverse_of: :featured_tags, optional: true # Set after validation - delegate :name, to: :tag, allow_nil: true - - validates_associated :tag, on: :create - validates :name, presence: true, on: :create + validate :validate_tag_name, on: :create validate :validate_featured_tags_limit, on: :create - def name=(str) - self.tag = Tag.find_or_create_by_names(str.strip)&.first + before_create :set_tag + before_create :reset_data + + attr_writer :name + + def name + tag_id.present? ? tag.name : @name end def increment(timestamp) @@ -34,14 +36,23 @@ class FeaturedTag < ApplicationRecord update(statuses_count: [0, statuses_count - 1].max, last_status_at: account.statuses.where(visibility: %i(public unlisted)).tagged_with(tag).where.not(id: deleted_status_id).select(:created_at).first&.created_at) end + private + + def set_tag + self.tag = Tag.find_or_create_by_names(@name)&.first + end + def reset_data self.statuses_count = account.statuses.where(visibility: %i(public unlisted)).tagged_with(tag).count self.last_status_at = account.statuses.where(visibility: %i(public unlisted)).tagged_with(tag).select(:created_at).first&.created_at end - private - def validate_featured_tags_limit errors.add(:base, I18n.t('featured_tags.errors.limit')) if account.featured_tags.count >= 10 end + + def validate_tag_name + errors.add(:name, :blank) if @name.blank? + errors.add(:name, :invalid) unless @name.match?(/\A(#{Tag::HASHTAG_NAME_RE})\z/i) + end end diff --git a/app/models/tag.rb b/app/models/tag.rb index a6404261495..f078007f24f 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -15,6 +15,7 @@ # last_status_at :datetime # max_score :float # max_score_at :datetime +# display_name :string # class Tag < ApplicationRecord @@ -24,11 +25,12 @@ class Tag < ApplicationRecord has_many :featured_tags, dependent: :destroy, inverse_of: :tag HASHTAG_SEPARATORS = "_\u00B7\u200c" - HASHTAG_NAME_RE = "([[:word:]_][[:word:]#{HASHTAG_SEPARATORS}]*[[:alpha:]#{HASHTAG_SEPARATORS}][[:word:]#{HASHTAG_SEPARATORS}]*[[:word:]_])|([[:word:]_]*[[:alpha:]][[:word:]_]*)" + HASHTAG_NAME_RE = "([[:alnum:]_][[:alnum:]#{HASHTAG_SEPARATORS}]*[[:alpha:]#{HASHTAG_SEPARATORS}][[:alnum:]#{HASHTAG_SEPARATORS}]*[[:alnum:]_])|([[:alnum:]_]*[[:alpha:]][[:alnum:]_]*)" HASHTAG_RE = /(?:^|[^\/\)\w])#(#{HASHTAG_NAME_RE})/i validates :name, presence: true, format: { with: /\A(#{HASHTAG_NAME_RE})\z/i } validate :validate_name_change, if: -> { !new_record? && name_changed? } + validate :validate_display_name_change, if: -> { !new_record? && display_name_changed? } scope :reviewed, -> { where.not(reviewed_at: nil) } scope :unreviewed, -> { where(reviewed_at: nil) } @@ -46,6 +48,10 @@ class Tag < ApplicationRecord name end + def display_name + attributes['display_name'] || name + end + def usable boolean_with_default('usable', true) end @@ -90,8 +96,10 @@ class Tag < ApplicationRecord class << self def find_or_create_by_names(name_or_names) - Array(name_or_names).map(&method(:normalize)).uniq { |str| str.mb_chars.downcase.to_s }.map do |normalized_name| - tag = matching_name(normalized_name).first || create(name: normalized_name) + names = Array(name_or_names).map { |str| [normalize(str), str] }.uniq(&:first) + + names.map do |(normalized_name, display_name)| + tag = matching_name(normalized_name).first || create(name: normalized_name, display_name: display_name) yield tag if block_given? @@ -129,7 +137,7 @@ class Tag < ApplicationRecord end def normalize(str) - str.gsub(/\A#/, '') + HashtagNormalizer.new.normalize(str) end end @@ -138,4 +146,8 @@ class Tag < ApplicationRecord def validate_name_change errors.add(:name, I18n.t('tags.does_not_match_previous_name')) unless name_was.mb_chars.casecmp(name.mb_chars).zero? end + + def validate_display_name_change + errors.add(:display_name, I18n.t('tags.does_not_match_previous_name')) unless HashtagNormalizer.new.normalize(display_name).casecmp(name.mb_chars).zero? + end end diff --git a/app/serializers/activitypub/hashtag_serializer.rb b/app/serializers/activitypub/hashtag_serializer.rb index 1a56e4dfe4c..90929c57f9d 100644 --- a/app/serializers/activitypub/hashtag_serializer.rb +++ b/app/serializers/activitypub/hashtag_serializer.rb @@ -10,11 +10,11 @@ class ActivityPub::HashtagSerializer < ActivityPub::Serializer end def name - "##{object.name}" + "##{object.display_name}" end def href - if object.class.name == 'FeaturedTag' + if object.instance_of?(FeaturedTag) short_account_tag_url(object.account, object.tag) else tag_url(object) diff --git a/app/serializers/rest/featured_tag_serializer.rb b/app/serializers/rest/featured_tag_serializer.rb index 96adcc7d093..8abcd9b90fe 100644 --- a/app/serializers/rest/featured_tag_serializer.rb +++ b/app/serializers/rest/featured_tag_serializer.rb @@ -12,4 +12,8 @@ class REST::FeaturedTagSerializer < ActiveModel::Serializer def url short_account_tag_url(object.account, object.tag) end + + def name + object.display_name + end end diff --git a/app/serializers/rest/tag_serializer.rb b/app/serializers/rest/tag_serializer.rb index 74aa571a4c1..52bfaa4ce4e 100644 --- a/app/serializers/rest/tag_serializer.rb +++ b/app/serializers/rest/tag_serializer.rb @@ -8,4 +8,8 @@ class REST::TagSerializer < ActiveModel::Serializer def url tag_url(object) end + + def name + object.display_name + end end diff --git a/app/views/accounts/show.html.haml b/app/views/accounts/show.html.haml index 72e9c661110..7fa688bd355 100644 --- a/app/views/accounts/show.html.haml +++ b/app/views/accounts/show.html.haml @@ -75,7 +75,7 @@ = link_to short_account_tag_path(@account, featured_tag.tag) do %h4 = fa_icon 'hashtag' - = featured_tag.name + = featured_tag.display_name %small - if featured_tag.last_status_at.nil? = t('accounts.nothing_here') diff --git a/app/views/accounts/show.rss.ruby b/app/views/accounts/show.rss.ruby index fd45a8b2b09..34e29d483f7 100644 --- a/app/views/accounts/show.rss.ruby +++ b/app/views/accounts/show.rss.ruby @@ -28,7 +28,7 @@ RSS::Builder.build do |doc| end status.tags.each do |tag| - item.category(tag.name) + item.category(tag.display_name) end end end diff --git a/app/views/admin/tags/show.html.haml b/app/views/admin/tags/show.html.haml index fd9acce4a34..104190b5885 100644 --- a/app/views/admin/tags/show.html.haml +++ b/app/views/admin/tags/show.html.haml @@ -2,7 +2,7 @@ = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' - content_for :page_title do - = "##{@tag.name}" + = "##{@tag.display_name}" - if current_user.can?(:view_dashboard) - content_for :heading_actions do @@ -53,7 +53,7 @@ = render 'shared/error_messages', object: @tag .fields-group - = f.input :name, wrapper: :with_block_label + = f.input :display_name, wrapper: :with_block_label .fields-group = f.input :usable, as: :boolean, wrapper: :with_label diff --git a/app/views/admin/trends/tags/_tag.html.haml b/app/views/admin/trends/tags/_tag.html.haml index 7bb99b15800..a30666a08b1 100644 --- a/app/views/admin/trends/tags/_tag.html.haml +++ b/app/views/admin/trends/tags/_tag.html.haml @@ -6,7 +6,7 @@ .pending-account__header = link_to admin_tag_path(tag.id) do = fa_icon 'hashtag' - = tag.name + = tag.display_name %br/ diff --git a/app/views/admin_mailer/_new_trending_tags.text.erb b/app/views/admin_mailer/_new_trending_tags.text.erb index cde5af4e4e6..363df369d56 100644 --- a/app/views/admin_mailer/_new_trending_tags.text.erb +++ b/app/views/admin_mailer/_new_trending_tags.text.erb @@ -1,12 +1,12 @@ <%= raw t('admin_mailer.new_trends.new_trending_tags.title') %> <% @tags.each do |tag| %> -- #<%= tag.name %> +- #<%= tag.display_name %> <%= raw t('admin.trends.tags.usage_comparison', today: tag.history.get(Time.now.utc).accounts, yesterday: tag.history.get(Time.now.utc - 1.day).accounts) %> • <%= t('admin.trends.tags.current_score', score: Trends.tags.score(tag.id).round(2)) %> <% end %> <% if @lowest_trending_tag %> -<%= raw t('admin_mailer.new_trends.new_trending_tags.requirements', lowest_tag_name: @lowest_trending_tag.name, lowest_tag_score: Trends.tags.score(@lowest_trending_tag.id).round(2), rank: Trends.tags.options[:review_threshold]) %> +<%= raw t('admin_mailer.new_trends.new_trending_tags.requirements', lowest_tag_name: @lowest_trending_tag.display_name, lowest_tag_score: Trends.tags.score(@lowest_trending_tag.id).round(2), rank: Trends.tags.options[:review_threshold]) %> <% else %> <%= raw t('admin_mailer.new_trends.new_trending_tags.no_approved_tags') %> <% end %> diff --git a/app/views/settings/featured_tags/index.html.haml b/app/views/settings/featured_tags/index.html.haml index 65de7f8f30d..5d87e2862d9 100644 --- a/app/views/settings/featured_tags/index.html.haml +++ b/app/views/settings/featured_tags/index.html.haml @@ -9,7 +9,7 @@ = render 'shared/error_messages', object: @featured_tag .fields-group - = f.input :name, wrapper: :with_block_label, hint: safe_join([t('simple_form.hints.featured_tag.name'), safe_join(@recently_used_tags.map { |tag| link_to("##{tag.name}", settings_featured_tags_path(featured_tag: { name: tag.name }), method: :post) }, ', ')], ' ') + = f.input :name, wrapper: :with_block_label, hint: safe_join([t('simple_form.hints.featured_tag.name'), safe_join(@recently_used_tags.map { |tag| link_to("##{tag.display_name}", settings_featured_tags_path(featured_tag: { name: tag.name }), method: :post) }, ', ')], ' ') .actions = f.button :button, t('featured_tags.add_new'), type: :submit diff --git a/app/views/tags/_og.html.haml b/app/views/tags/_og.html.haml index a7c289bcb00..37f644cf2f9 100644 --- a/app/views/tags/_og.html.haml +++ b/app/views/tags/_og.html.haml @@ -1,6 +1,6 @@ = opengraph 'og:site_name', t('about.hosted_on', domain: site_hostname) = opengraph 'og:url', tag_url(@tag) = opengraph 'og:type', 'website' -= opengraph 'og:title', "##{@tag.name}" -= opengraph 'og:description', strip_tags(t('about.about_hashtag_html', hashtag: @tag.name)) += opengraph 'og:title', "##{@tag.display_name}" += opengraph 'og:description', strip_tags(t('about.about_hashtag_html', hashtag: @tag.display_name)) = opengraph 'twitter:card', 'summary' diff --git a/app/views/tags/show.html.haml b/app/views/tags/show.html.haml index 5cd513b320e..6dfb4f9b347 100644 --- a/app/views/tags/show.html.haml +++ b/app/views/tags/show.html.haml @@ -1,5 +1,5 @@ - content_for :page_title do - = "##{@tag.name}" + = "##{@tag.display_name}" - content_for :header_tags do %meta{ name: 'robots', content: 'noindex' }/ @@ -9,8 +9,8 @@ = render 'og' .page-header - %h1= "##{@tag.name}" - %p= t('about.about_hashtag_html', hashtag: @tag.name) + %h1= "##{@tag.display_name}" + %p= t('about.about_hashtag_html', hashtag: @tag.display_name) #mastodon-timeline{ data: { props: Oj.dump(default_props.merge(hashtag: @tag.name, local: @local)) }} .notranslate#modal-container diff --git a/app/views/tags/show.rss.ruby b/app/views/tags/show.rss.ruby index 9ce71be74cc..8e0c2327b55 100644 --- a/app/views/tags/show.rss.ruby +++ b/app/views/tags/show.rss.ruby @@ -1,6 +1,6 @@ RSS::Builder.build do |doc| - doc.title("##{@tag.name}") - doc.description(I18n.t('rss.descriptions.tag', hashtag: @tag.name)) + doc.title("##{@tag.display_name}") + doc.description(I18n.t('rss.descriptions.tag', hashtag: @tag.display_name)) doc.link(tag_url(@tag)) doc.last_build_date(@statuses.first.created_at) if @statuses.any? doc.generator("Mastodon v#{Mastodon::Version.to_s}") @@ -26,7 +26,7 @@ RSS::Builder.build do |doc| end status.tags.each do |tag| - item.category(tag.name) + item.category(tag.display_name) end end end diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb index 9bc9a54b2d5..3e5a5561761 100644 --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -24,6 +24,7 @@ ActiveSupport::Inflector.inflections(:en) do |inflect| inflect.acronym 'RSS' inflect.acronym 'REST' inflect.acronym 'URL' + inflect.acronym 'ASCII' inflect.singular 'data', 'data' end diff --git a/db/migrate/20220710102457_add_display_name_to_tags.rb b/db/migrate/20220710102457_add_display_name_to_tags.rb new file mode 100644 index 00000000000..aa78676459d --- /dev/null +++ b/db/migrate/20220710102457_add_display_name_to_tags.rb @@ -0,0 +1,5 @@ +class AddDisplayNameToTags < ActiveRecord::Migration[6.1] + def change + add_column :tags, :display_name, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 54966ef64ba..9b465b674f4 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2022_07_04_024901) do +ActiveRecord::Schema.define(version: 2022_07_10_102457) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -940,6 +940,7 @@ ActiveRecord::Schema.define(version: 2022_07_04_024901) do t.datetime "last_status_at" t.float "max_score" t.datetime "max_score_at" + t.string "display_name" t.index "lower((name)::text) text_pattern_ops", name: "index_tags_on_name_lower_btree", unique: true end diff --git a/spec/lib/hashtag_normalizer_spec.rb b/spec/lib/hashtag_normalizer_spec.rb new file mode 100644 index 00000000000..fbb9f37c070 --- /dev/null +++ b/spec/lib/hashtag_normalizer_spec.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe HashtagNormalizer do + subject { described_class.new } + + describe '#normalize' do + it 'converts full-width Latin characters into basic Latin characters' do + expect(subject.normalize('Synthwave')).to eq 'synthwave' + end + + it 'converts half-width Katakana into Kana characters' do + expect(subject.normalize('シーサイドライナー')).to eq 'シーサイドライナー' + end + + it 'converts modified Latin characters into basic Latin characters' do + expect(subject.normalize('BLÅHAJ')).to eq 'blahaj' + end + + it 'strips out invalid characters' do + expect(subject.normalize('#foo')).to eq 'foo' + end + + it 'keeps valid characters' do + expect(subject.normalize('a·b')).to eq 'a·b' + end + end +end diff --git a/spec/models/tag_spec.rb b/spec/models/tag_spec.rb index 3949dbce548..b16f99a7995 100644 --- a/spec/models/tag_spec.rb +++ b/spec/models/tag_spec.rb @@ -91,7 +91,7 @@ RSpec.describe Tag, type: :model do upcase_string = 'abcABCabcABCやゆよ' downcase_string = 'abcabcabcabcやゆよ'; - tag = Fabricate(:tag, name: downcase_string) + tag = Fabricate(:tag, name: HashtagNormalizer.new.normalize(downcase_string)) expect(Tag.find_normalized(upcase_string)).to eq tag end end @@ -101,12 +101,12 @@ RSpec.describe Tag, type: :model do upcase_string = 'abcABCabcABCやゆよ' downcase_string = 'abcabcabcabcやゆよ'; - tag = Fabricate(:tag, name: downcase_string) + tag = Fabricate(:tag, name: HashtagNormalizer.new.normalize(downcase_string)) expect(Tag.matches_name(upcase_string)).to eq [tag] end it 'uses the LIKE operator' do - expect(Tag.matches_name('100%abc').to_sql).to eq %q[SELECT "tags".* FROM "tags" WHERE LOWER("tags"."name") LIKE LOWER('100\\%abc%')] + expect(Tag.matches_name('100%abc').to_sql).to eq %q[SELECT "tags".* FROM "tags" WHERE LOWER("tags"."name") LIKE LOWER('100abc%')] end end @@ -115,7 +115,7 @@ RSpec.describe Tag, type: :model do upcase_string = 'abcABCabcABCやゆよ' downcase_string = 'abcabcabcabcやゆよ'; - tag = Fabricate(:tag, name: downcase_string) + tag = Fabricate(:tag, name: HashtagNormalizer.new.normalize(downcase_string)) expect(Tag.matching_name(upcase_string)).to eq [tag] end end diff --git a/streaming/index.js b/streaming/index.js index 792ec5a445e..a55181bad2d 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -892,6 +892,34 @@ const startWorker = async (workerId) => { return arr; }; + /** + * See app/lib/ascii_folder.rb for the canon definitions + * of these constants + */ + const NON_ASCII_CHARS = 'ÀÁÂÃÄÅàáâãäåĀāĂ㥹ÇçĆćĈĉĊċČčÐðĎďĐđÈÉÊËèéêëĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħÌÍÎÏìíîïĨĩĪīĬĭĮįİıĴĵĶķĸĹĺĻļĽľĿŀŁłÑñŃńŅņŇňʼnŊŋÒÓÔÕÖØòóôõöøŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŠšſŢţŤťŦŧÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųŴŵÝýÿŶŷŸŹźŻżŽž'; + const EQUIVALENT_ASCII_CHARS = 'AAAAAAaaaaaaAaAaAaCcCcCcCcCcDdDdDdEEEEeeeeEeEeEeEeEeGgGgGgGgHhHhIIIIiiiiIiIiIiIiIiJjKkkLlLlLlLlLlNnNnNnNnnNnOOOOOOooooooOoOoOoRrRrRrSsSsSsSssTtTtTtUUUUuuuuUuUuUuUuUuUuWwYyyYyYZzZzZz'; + + /** + * @param {string} str + * @return {string} + */ + const foldToASCII = str => { + const regex = new RegExp(NON_ASCII_CHARS.split('').join('|'), 'g'); + + return str.replace(regex, match => { + const index = NON_ASCII_CHARS.indexOf(match); + return EQUIVALENT_ASCII_CHARS[index]; + }); + }; + + /** + * @param {string} str + * @return {string} + */ + const normalizeHashtag = str => { + return foldToASCII(str.normalize('NFKC').toLowerCase()).replace(/[^\p{L}\p{N}_\u00b7\u200c]/gu, ''); + }; + /** * @param {any} req * @param {string} name @@ -968,7 +996,7 @@ const startWorker = async (workerId) => { reject('No tag for stream provided'); } else { resolve({ - channelIds: [`timeline:hashtag:${params.tag.toLowerCase()}`], + channelIds: [`timeline:hashtag:${normalizeHashtag(params.tag)}`], options: { needsFiltering: true }, }); } @@ -979,7 +1007,7 @@ const startWorker = async (workerId) => { reject('No tag for stream provided'); } else { resolve({ - channelIds: [`timeline:hashtag:${params.tag.toLowerCase()}:local`], + channelIds: [`timeline:hashtag:${normalizeHashtag(params.tag)}:local`], options: { needsFiltering: true }, }); } From 6ca0de9494fe47d2c322335c3a257896140a22fb Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 14 Jul 2022 01:23:10 +0200 Subject: [PATCH 099/646] Fix nil error when rendering featured hashtags on profile (#18808) Regression from #18795 --- app/models/featured_tag.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/models/featured_tag.rb b/app/models/featured_tag.rb index c9c285bfa1b..201ce75f5c1 100644 --- a/app/models/featured_tag.rb +++ b/app/models/featured_tag.rb @@ -22,6 +22,8 @@ class FeaturedTag < ApplicationRecord before_create :set_tag before_create :reset_data + delegate :display_name, to: :tag + attr_writer :name def name From bbb5f1917d6a09c8b7f12885a40550006a26d9a8 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 15 Jul 2022 03:20:58 +0200 Subject: [PATCH 100/646] New Crowdin updates (#18781) * New translations en.json (Malayalam) * New translations en.json (Corsican) * New translations en.json (Sardinian) * New translations en.json (Sanskrit) * New translations en.json (Kabyle) * New translations en.json (Taigi) * New translations en.json (Silesian) * New translations en.json (Breton) * New translations en.json (Tatar) * New translations en.json (Tamil) * New translations en.json (Kazakh) * New translations en.json (Spanish, Argentina) * New translations en.json (Spanish, Mexico) * New translations en.json (Bengali) * New translations en.json (Marathi) * New translations en.json (Croatian) * New translations en.json (Norwegian Nynorsk) * New translations en.json (Estonian) * New translations en.json (Chinese Traditional, Hong Kong) * New translations en.json (Latvian) * New translations en.json (Hindi) * New translations en.json (Malay) * New translations en.json (Telugu) * New translations en.json (English, United Kingdom) * New translations en.json (Welsh) * New translations en.json (Uyghur) * New translations en.json (Standard Moroccan Tamazight) * New translations en.yml (Slovenian) * New translations simple_form.en.yml (Icelandic) * New translations en.json (Danish) * New translations en.json (Polish) * New translations en.json (Slovenian) * New translations en.json (Chinese Traditional) * New translations en.json (Ido) * New translations en.json (Danish) * New translations en.yml (Danish) * New translations en.yml (Ido) * New translations simple_form.en.yml (Danish) * New translations activerecord.en.yml (Danish) * New translations en.yml (Ido) * New translations simple_form.en.yml (Ido) * New translations activerecord.en.yml (Ido) * New translations en.yml (Ido) * New translations en.json (Latvian) * New translations en.yml (Czech) * New translations en.json (Czech) * New translations en.json (Greek) * New translations en.json (Hungarian) * New translations en.yml (Hungarian) * New translations en.json (Korean) * New translations en.json (Spanish, Argentina) * New translations en.yml (Hungarian) * New translations en.json (Italian) * New translations en.json (Russian) * New translations simple_form.en.yml (Hungarian) * New translations activerecord.en.yml (Hungarian) * New translations en.json (Hungarian) * New translations en.json (Turkish) * New translations simple_form.en.yml (Catalan) * New translations en.yml (Catalan) * New translations simple_form.en.yml (Catalan) * New translations activerecord.en.yml (Catalan) * New translations en.yml (Ukrainian) * New translations en.json (Ukrainian) * New translations simple_form.en.yml (Galician) * New translations simple_form.en.yml (Slovenian) * New translations simple_form.en.yml (Georgian) * New translations simple_form.en.yml (Norwegian) * New translations simple_form.en.yml (Polish) * New translations simple_form.en.yml (Portuguese) * New translations simple_form.en.yml (Russian) * New translations simple_form.en.yml (Slovak) * New translations simple_form.en.yml (Albanian) * New translations simple_form.en.yml (Italian) * New translations simple_form.en.yml (Serbian (Cyrillic)) * New translations simple_form.en.yml (Swedish) * New translations simple_form.en.yml (Turkish) * New translations simple_form.en.yml (Ukrainian) * New translations simple_form.en.yml (Chinese Simplified) * New translations simple_form.en.yml (Chinese Traditional) * New translations simple_form.en.yml (Vietnamese) * New translations simple_form.en.yml (Portuguese, Brazilian) * New translations simple_form.en.yml (Indonesian) * New translations simple_form.en.yml (Japanese) * New translations simple_form.en.yml (Armenian) * New translations simple_form.en.yml (Korean) * New translations simple_form.en.yml (Arabic) * New translations simple_form.en.yml (Dutch) * New translations simple_form.en.yml (Thai) * New translations en.yml (Ukrainian) * New translations simple_form.en.yml (Esperanto) * New translations en.json (Ukrainian) * New translations simple_form.en.yml (Romanian) * New translations simple_form.en.yml (French) * New translations simple_form.en.yml (Spanish) * New translations simple_form.en.yml (Afrikaans) * New translations simple_form.en.yml (Bulgarian) * New translations simple_form.en.yml (Hungarian) * New translations simple_form.en.yml (Catalan) * New translations simple_form.en.yml (Czech) * New translations simple_form.en.yml (Danish) * New translations simple_form.en.yml (German) * New translations simple_form.en.yml (Greek) * New translations simple_form.en.yml (Frisian) * New translations simple_form.en.yml (Basque) * New translations simple_form.en.yml (Finnish) * New translations simple_form.en.yml (Hebrew) * New translations simple_form.en.yml (Persian) * New translations simple_form.en.yml (Tamil) * New translations simple_form.en.yml (Sorani (Kurdish)) * New translations simple_form.en.yml (Scottish Gaelic) * New translations simple_form.en.yml (Asturian) * New translations simple_form.en.yml (Occitan) * New translations simple_form.en.yml (Serbian (Latin)) * New translations simple_form.en.yml (Kurmanji (Kurdish)) * New translations simple_form.en.yml (Corsican) * New translations simple_form.en.yml (Sinhala) * New translations simple_form.en.yml (Sardinian) * New translations simple_form.en.yml (Kabyle) * New translations simple_form.en.yml (Ido) * New translations simple_form.en.yml (Standard Moroccan Tamazight) * New translations simple_form.en.yml (Breton) * New translations simple_form.en.yml (Spanish, Argentina) * New translations simple_form.en.yml (Latvian) * New translations simple_form.en.yml (Spanish, Mexico) * New translations simple_form.en.yml (Bengali) * New translations simple_form.en.yml (Croatian) * New translations simple_form.en.yml (Norwegian Nynorsk) * New translations simple_form.en.yml (Kazakh) * New translations simple_form.en.yml (Estonian) * New translations simple_form.en.yml (Malayalam) * New translations simple_form.en.yml (Welsh) * New translations simple_form.en.yml (Chinese Traditional, Hong Kong) * New translations simple_form.en.yml (Tatar) * New translations activerecord.en.yml (Ukrainian) * New translations simple_form.en.yml (Afrikaans) * New translations simple_form.en.yml (Latvian) * New translations en.yml (Icelandic) * New translations simple_form.en.yml (Icelandic) * New translations en.yml (Russian) * New translations simple_form.en.yml (Danish) * New translations simple_form.en.yml (Ido) * New translations en.json (Spanish) * New translations simple_form.en.yml (Polish) * New translations en.yml (Korean) * New translations simple_form.en.yml (Chinese Traditional) * New translations simple_form.en.yml (Chinese Traditional) * New translations en.json (Esperanto) * New translations en.json (Esperanto) * New translations simple_form.en.yml (Czech) * New translations simple_form.en.yml (Hungarian) * New translations en.yml (Esperanto) * New translations en.yml (Esperanto) * New translations en.json (Esperanto) * New translations en.yml (Galician) * New translations en.json (Galician) * New translations simple_form.en.yml (Galician) * New translations en.json (Spanish) * New translations en.json (Vietnamese) * New translations simple_form.en.yml (Spanish) * New translations simple_form.en.yml (Vietnamese) * New translations en.json (Kurmanji (Kurdish)) * New translations activerecord.en.yml (Kurmanji (Kurdish)) * New translations simple_form.en.yml (Galician) * New translations simple_form.en.yml (Polish) * New translations simple_form.en.yml (Ukrainian) * New translations simple_form.en.yml (Chinese Traditional) * New translations simple_form.en.yml (Vietnamese) * New translations simple_form.en.yml (Spanish) * New translations simple_form.en.yml (Afrikaans) * New translations simple_form.en.yml (Italian) * New translations simple_form.en.yml (Danish) * New translations simple_form.en.yml (Hungarian) * New translations simple_form.en.yml (Ido) * New translations simple_form.en.yml (Latvian) * New translations en.yml (Esperanto) * New translations simple_form.en.yml (Latvian) * New translations en.yml (Esperanto) * New translations en.json (Esperanto) * New translations en.yml (Korean) * New translations en.yml (Esperanto) * New translations simple_form.en.yml (Ido) * New translations simple_form.en.yml (Danish) * New translations simple_form.en.yml (Chinese Traditional) * New translations simple_form.en.yml (Slovenian) * New translations simple_form.en.yml (Spanish) * New translations simple_form.en.yml (Vietnamese) * New translations simple_form.en.yml (Ukrainian) * New translations en.yml (French) * New translations en.json (French) * New translations en.yml (French) * New translations en.yml (Kurmanji (Kurdish)) * New translations simple_form.en.yml (French) * New translations simple_form.en.yml (Kurmanji (Kurdish)) * New translations en.json (Sinhala) * New translations activerecord.en.yml (Sinhala) * New translations en.yml (Thai) * New translations en.json (Thai) * New translations simple_form.en.yml (Italian) * New translations en.yml (Thai) * New translations simple_form.en.yml (Thai) * New translations simple_form.en.yml (Hungarian) * New translations en.json (Japanese) * New translations simple_form.en.yml (Polish) * New translations en.yml (Thai) * New translations en.yml (Portuguese) * New translations en.json (Portuguese) * New translations en.yml (Portuguese) * New translations simple_form.en.yml (Portuguese) * New translations activerecord.en.yml (Portuguese) * New translations simple_form.en.yml (Russian) * New translations en.yml (Thai) * New translations simple_form.en.yml (Thai) * New translations en.yml (French) * New translations activerecord.en.yml (French) * New translations en.yml (French) * New translations en.json (French) * New translations en.yml (French) * New translations simple_form.en.yml (French) * New translations en.yml (French) * New translations simple_form.en.yml (French) * New translations activerecord.en.yml (French) * New translations en.json (Dutch) * New translations en.yml (Dutch) * New translations simple_form.en.yml (Dutch) * New translations en.json (Dutch) * New translations devise.en.yml (Dutch) * New translations en.json (Welsh) * New translations en.yml (Welsh) * New translations simple_form.en.yml (Welsh) * New translations doorkeeper.en.yml (Welsh) * New translations en.yml (Galician) * New translations simple_form.en.yml (Galician) * New translations en.json (Albanian) * New translations activerecord.en.yml (Albanian) * New translations en.yml (Albanian) * New translations simple_form.en.yml (Albanian) * New translations activerecord.en.yml (Albanian) * New translations doorkeeper.en.yml (Albanian) * New translations devise.en.yml (Albanian) * New translations en.yml (Portuguese) * New translations en.json (Vietnamese) * New translations en.yml (Esperanto) * New translations en.yml (Esperanto) * New translations simple_form.en.yml (Esperanto) * New translations en.yml (Esperanto) * New translations simple_form.en.yml (Esperanto) * Run `yarn manage:translations` * Run `bundle exec i18n-tasks normalize` Co-authored-by: Yamagishi Kazutoshi --- app/javascript/mastodon/locales/ca.json | 4 +- app/javascript/mastodon/locales/cs.json | 4 +- app/javascript/mastodon/locales/cy.json | 16 +-- app/javascript/mastodon/locales/da.json | 10 +- app/javascript/mastodon/locales/el.json | 4 +- app/javascript/mastodon/locales/eo.json | 40 +++--- app/javascript/mastodon/locales/es-AR.json | 4 +- app/javascript/mastodon/locales/es.json | 4 +- app/javascript/mastodon/locales/fr.json | 6 +- app/javascript/mastodon/locales/gl.json | 4 +- app/javascript/mastodon/locales/hu.json | 4 +- app/javascript/mastodon/locales/io.json | 4 +- app/javascript/mastodon/locales/is.json | 4 +- app/javascript/mastodon/locales/it.json | 4 +- app/javascript/mastodon/locales/ja.json | 6 +- app/javascript/mastodon/locales/ko.json | 4 +- app/javascript/mastodon/locales/ku.json | 4 +- app/javascript/mastodon/locales/lv.json | 4 +- app/javascript/mastodon/locales/nl.json | 6 +- app/javascript/mastodon/locales/pl.json | 4 +- app/javascript/mastodon/locales/pt-PT.json | 4 +- app/javascript/mastodon/locales/ru.json | 4 +- app/javascript/mastodon/locales/si.json | 2 +- app/javascript/mastodon/locales/sl.json | 4 +- app/javascript/mastodon/locales/sq.json | 18 +-- app/javascript/mastodon/locales/th.json | 16 +-- app/javascript/mastodon/locales/tr.json | 2 +- app/javascript/mastodon/locales/uk.json | 6 +- app/javascript/mastodon/locales/vi.json | 10 +- app/javascript/mastodon/locales/zh-TW.json | 4 +- config/locales/activerecord.ca.yml | 9 ++ config/locales/activerecord.da.yml | 9 ++ config/locales/activerecord.fr.yml | 9 ++ config/locales/activerecord.hu.yml | 9 ++ config/locales/activerecord.io.yml | 9 ++ config/locales/activerecord.ku.yml | 9 ++ config/locales/activerecord.pt-PT.yml | 9 ++ config/locales/activerecord.sq.yml | 9 ++ config/locales/activerecord.uk.yml | 9 ++ config/locales/ca.yml | 75 ++++++++++ config/locales/cs.yml | 1 + config/locales/cy.yml | 1 + config/locales/da.yml | 12 ++ config/locales/devise.nl.yml | 2 +- config/locales/doorkeeper.cy.yml | 7 + config/locales/eo.yml | 37 +++-- config/locales/fr.yml | 77 ++++++++++- config/locales/gl.yml | 8 +- config/locales/hu.yml | 46 +++++++ config/locales/io.yml | 73 ++++++++++ config/locales/is.yml | 3 + config/locales/ko.yml | 3 + config/locales/ku.yml | 16 +++ config/locales/nl.yml | 63 +++++++-- config/locales/pt-PT.yml | 151 +++++++++++++++++++++ config/locales/ru.yml | 1 + config/locales/simple_form.ca.yml | 15 ++ config/locales/simple_form.cs.yml | 2 + config/locales/simple_form.cy.yml | 11 ++ config/locales/simple_form.da.yml | 15 ++ config/locales/simple_form.eo.yml | 23 ++-- config/locales/simple_form.es-AR.yml | 2 +- config/locales/simple_form.es-MX.yml | 14 ++ config/locales/simple_form.es.yml | 2 +- config/locales/simple_form.fr.yml | 15 ++ config/locales/simple_form.gl.yml | 2 +- config/locales/simple_form.hu.yml | 15 ++ config/locales/simple_form.io.yml | 20 +++ config/locales/simple_form.is.yml | 7 + config/locales/simple_form.it.yml | 2 +- config/locales/simple_form.ku.yml | 2 + config/locales/simple_form.lv.yml | 2 +- config/locales/simple_form.nl.yml | 8 ++ config/locales/simple_form.pl.yml | 2 + config/locales/simple_form.pt-PT.yml | 15 ++ config/locales/simple_form.ru.yml | 1 + config/locales/simple_form.sl.yml | 2 +- config/locales/simple_form.sq.yml | 25 ++++ config/locales/simple_form.th.yml | 6 + config/locales/simple_form.tr.yml | 1 - config/locales/simple_form.uk.yml | 15 ++ config/locales/simple_form.vi.yml | 2 +- config/locales/simple_form.zh-TW.yml | 2 +- config/locales/sl.yml | 10 ++ config/locales/sq.yml | 81 +++++++++++ config/locales/th.yml | 35 +++++ config/locales/uk.yml | 76 ++++++++++- 87 files changed, 1139 insertions(+), 158 deletions(-) diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 0c942003582..2e3520fedc8 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -468,7 +468,7 @@ "status.embed": "Incrusta", "status.favourite": "Favorit", "status.filtered": "Filtrat", - "status.hide": "Hide toot", + "status.hide": "Amaga publicació", "status.history.created": "{name} ha creat {date}", "status.history.edited": "{name} ha editat {date}", "status.load_more": "Carregar-ne més", @@ -492,7 +492,7 @@ "status.report": "Denuncia @{name}", "status.sensitive_warning": "Contingut sensible", "status.share": "Comparteix", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Mostra igualment", "status.show_less": "Mostrar-ne menys", "status.show_less_all": "Mostrar-ne menys per a tot", "status.show_more": "Mostrar-ne més", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 9fee3948ad2..e7d6eb87bd4 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -468,7 +468,7 @@ "status.embed": "Vložit na web", "status.favourite": "Oblíbit", "status.filtered": "Filtrováno", - "status.hide": "Hide toot", + "status.hide": "Skrýt příspěvek", "status.history.created": "Uživatel {name} vytvořil {date}", "status.history.edited": "Uživatel {name} upravil {date}", "status.load_more": "Zobrazit více", @@ -492,7 +492,7 @@ "status.report": "Nahlásit @{name}", "status.sensitive_warning": "Citlivý obsah", "status.share": "Sdílet", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Přesto zobrazit", "status.show_less": "Zobrazit méně", "status.show_less_all": "Zobrazit méně pro všechny", "status.show_more": "Zobrazit více", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 9b2886b0112..3a18db09539 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -92,10 +92,10 @@ "community.column_settings.local_only": "Lleol yn unig", "community.column_settings.media_only": "Cyfryngau yn unig", "community.column_settings.remote_only": "Anghysbell yn unig", - "compose.language.change": "Change language", - "compose.language.search": "Search languages...", + "compose.language.change": "Newid iaith", + "compose.language.search": "Chwilio ieithoedd...", "compose_form.direct_message_warning_learn_more": "Dysgu mwy", - "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", + "compose_form.encryption_warning": "Dyw postiadau ar Mastodon ddim wedi'u hamgryptio o ben i ben. Peidiwch â rhannu unrhyw wybodaeth sensitif dros Mastodon.", "compose_form.hashtag_warning": "Ni fydd y post hwn wedi ei restru o dan unrhyw hashnod gan ei fod heb ei restru. Dim ond postiadau cyhoeddus gellid chwilio amdanynt drwy hashnod.", "compose_form.lock_disclaimer": "Nid yw eich cyfri wedi'i {locked}. Gall unrhyw un eich dilyn i weld eich postiadau dilynwyr-yn-unig.", "compose_form.lock_disclaimer.lock": "wedi ei gloi", @@ -106,7 +106,7 @@ "compose_form.poll.remove_option": "Tynnu'r dewisiad", "compose_form.poll.switch_to_multiple": "Newid pleidlais i adael mwy nag un dewis", "compose_form.poll.switch_to_single": "Newid pleidlais i gyfyngu i un dewis", - "compose_form.publish": "Publish", + "compose_form.publish": "Cyhoeddi", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Cadw newidiadau", "compose_form.sensitive.hide": "Marcio cyfryngau fel eu bod yn sensitif", @@ -149,7 +149,7 @@ "embed.instructions": "Gosodwch y post hwn ar eich gwefan drwy gopïo'r côd isod.", "embed.preview": "Dyma sut olwg fydd arno:", "emoji_button.activity": "Gweithgarwch", - "emoji_button.clear": "Clear", + "emoji_button.clear": "Clir", "emoji_button.custom": "Unigryw", "emoji_button.flags": "Baneri", "emoji_button.food": "Bwyd a Diod", @@ -327,7 +327,7 @@ "notification.update": "Golygodd {name} bost", "notifications.clear": "Clirio hysbysiadau", "notifications.clear_confirmation": "Ydych chi'n sicr eich bod am glirio'ch holl hysbysiadau am byth?", - "notifications.column_settings.admin.report": "New reports:", + "notifications.column_settings.admin.report": "Adroddiadau newydd:", "notifications.column_settings.admin.sign_up": "Cofrestriadau newydd:", "notifications.column_settings.alert": "Hysbysiadau bwrdd gwaith", "notifications.column_settings.favourite": "Ffefrynnau:", @@ -434,8 +434,8 @@ "report.unfollow": "Dad-ddilyn @{name}", "report.unfollow_explanation": "Rydych chi'n dilyn y cyfrif hwn. I beidio â gweld eu postiadau yn eich porthiant cartref mwyach, dad-ddilynwch nhw.", "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", - "report_notification.categories.other": "Other", - "report_notification.categories.spam": "Spam", + "report_notification.categories.other": "Arall", + "report_notification.categories.spam": "Sbam", "report_notification.categories.violation": "Rule violation", "report_notification.open": "Open report", "search.placeholder": "Chwilio", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 11371dfd05c..fab1f207506 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -92,8 +92,8 @@ "community.column_settings.local_only": "Kun lokalt", "community.column_settings.media_only": "Kun medier", "community.column_settings.remote_only": "Kun udefra", - "compose.language.change": "Change language", - "compose.language.search": "Search languages...", + "compose.language.change": "Skift sprog", + "compose.language.search": "Søg efter sprog...", "compose_form.direct_message_warning_learn_more": "Få mere at vide", "compose_form.encryption_warning": "Indlæg på Mastodon er ikke ende-til-ende krypteret. Del derfor ikke sensitiv information via Mastodon.", "compose_form.hashtag_warning": "Da indlægget ikke er offentligt, vises det ikke under noget hashtag, idet kun offentlige indlæg kan søges via hashtags.", @@ -149,7 +149,7 @@ "embed.instructions": "Indlejr dette indlæg på dit websted ved at kopiere nedenstående kode.", "embed.preview": "Sådan kommer det til at se ud:", "emoji_button.activity": "Aktivitet", - "emoji_button.clear": "Clear", + "emoji_button.clear": "Ryd", "emoji_button.custom": "Tilpasset", "emoji_button.flags": "Flag", "emoji_button.food": "Mad og drikke", @@ -468,7 +468,7 @@ "status.embed": "Indlejr", "status.favourite": "Favorit", "status.filtered": "Filtreret", - "status.hide": "Hide toot", + "status.hide": "Skjul indlæg", "status.history.created": "{name} oprettet {date}", "status.history.edited": "{name} redigeret {date}", "status.load_more": "Indlæs mere", @@ -492,7 +492,7 @@ "status.report": "Anmeld @{name}", "status.sensitive_warning": "Følsomt indhold", "status.share": "Del", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Vis alligevel", "status.show_less": "Vis mindre", "status.show_less_all": "Vis mindre for alle", "status.show_more": "Vis mere", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index c8f7999675d..3240b682a03 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -468,7 +468,7 @@ "status.embed": "Ενσωμάτωσε", "status.favourite": "Σημείωσε ως αγαπημένο", "status.filtered": "Φιλτραρισμένα", - "status.hide": "Hide toot", + "status.hide": "Απόκρυψη toot", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", "status.load_more": "Φόρτωσε περισσότερα", @@ -492,7 +492,7 @@ "status.report": "Κατάγγειλε @{name}", "status.sensitive_warning": "Ευαίσθητο περιεχόμενο", "status.share": "Μοιράσου", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Εμφάνιση παρ'όλα αυτά", "status.show_less": "Δείξε λιγότερα", "status.show_less_all": "Δείξε λιγότερα για όλα", "status.show_more": "Δείξε περισσότερα", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index d49c342f943..3e2475f203e 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -6,7 +6,7 @@ "account.block": "Bloki @{name}", "account.block_domain": "Bloki la domajnon {domain}", "account.blocked": "Blokita", - "account.browse_more_on_origin_server": "Vidi pli ĉe la originala profilo", + "account.browse_more_on_origin_server": "Foliumi pli ĉe la originala profilo", "account.cancel_follow_request": "Nuligi la demandon de sekvado", "account.direct": "Rekte mesaĝi @{name}", "account.disable_notifications": "Ne plu sciigi min kiam @{name} mesaĝas", @@ -95,7 +95,7 @@ "compose.language.change": "Ŝanĝi lingvon", "compose.language.search": "Serĉi lingvojn...", "compose_form.direct_message_warning_learn_more": "Lerni pli", - "compose_form.encryption_warning": "La mesaĵoj en Mastodono ne estas ĉifrita de tutvojo. Ne kundividu sentemajn informojn ĉe Mastodono.", + "compose_form.encryption_warning": "La mesaĵoj en Mastodon ne estas tutvoje ĉifritaj. Ne kundividu tiklajn informojn ĉe Mastodon.", "compose_form.hashtag_warning": "Ĉi tiu mesaĝo ne estos listigita per ajna kradvorto. Nur publikaj mesaĝoj estas serĉeblaj per kradvortoj.", "compose_form.lock_disclaimer": "Via konto ne estas {locked}. Iu ajn povas sekvi vin por vidi viajn mesaĝojn nur al la sekvantoj.", "compose_form.lock_disclaimer.lock": "ŝlosita", @@ -109,9 +109,9 @@ "compose_form.publish": "Publikigi", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Konservi la ŝanĝojn", - "compose_form.sensitive.hide": "Marki la aŭdovidaĵojn kiel tiklaj", - "compose_form.sensitive.marked": "Aŭdovidaĵo markita tikla", - "compose_form.sensitive.unmarked": "Aŭdovidaĵo ne markita tikla", + "compose_form.sensitive.hide": "{count, plural, one {Marki la aŭdovidaĵon kiel tikla} other {Marki la aŭdovidaĵojn kiel tikla}}", + "compose_form.sensitive.marked": "{count, plural, one {La aŭdovidaĵo estas markita kiel tikla} other {La aŭdovidaĵoj estas markitaj kiel tikla}}", + "compose_form.sensitive.unmarked": "{count, plural, one {La aŭdovidaĵo ne estas markita kiel tikla} other {La aŭdovidaĵoj ne estas markitaj kiel tikla}}", "compose_form.spoiler.marked": "Forigi la averton de enhavo", "compose_form.spoiler.unmarked": "Aldoni averton de enhavo", "compose_form.spoiler_placeholder": "Skribu vian averton ĉi tie", @@ -124,7 +124,7 @@ "confirmations.delete_list.confirm": "Forigi", "confirmations.delete_list.message": "Ĉu vi certas, ke vi volas porĉiame forigi ĉi tiun liston?", "confirmations.discard_edit_media.confirm": "Forlasi", - "confirmations.discard_edit_media.message": "Vi havas nekonservitan ŝanĝon de la priskribo aŭ de la antaŭvido de la aŭdovidaĵo, ĉu vi forigu ĝin?", + "confirmations.discard_edit_media.message": "Vi havas nekonservitajn ŝanĝojn de la priskribo aŭ de la antaŭmontro de la aŭdovidaĵo, ĉu vi forlasu ilin ĉiuokaze?", "confirmations.domain_block.confirm": "Bloki la tutan domajnon", "confirmations.domain_block.message": "Ĉu vi vere, vere certas, ke vi volas tute bloki {domain}? Plej ofte, trafa blokado kaj silentigado sufiĉas kaj preferindas. Vi ne vidos enhavon de tiu domajno en publika templinio aŭ en viaj sciigoj. Viaj sekvantoj de tiu domajno estos forigitaj.", "confirmations.logout.confirm": "Adiaŭi", @@ -133,7 +133,7 @@ "confirmations.mute.explanation": "Ĉi-tio kaŝos mesaĝojn el ili kaj mesaĝojn kiuj mencias ilin, sed ili ankoraŭ rajtos vidi viajn mesaĝojn kaj sekvi vin.", "confirmations.mute.message": "Ĉu vi certas, ke vi volas silentigi {name}?", "confirmations.redraft.confirm": "Forigi kaj reskribi", - "confirmations.redraft.message": "Ĉu vi certas, ke vi volas forigi kaj reskribi la mesaĝon? Plusendaĵoj kaj preferaĵoj de ĝi estos perditaj, kaj la respondoj al la originala mesaĝo estos orfaj.", + "confirmations.redraft.message": "Ĉu vi certas ke vi volas forigi tiun mesaĝon kaj reskribi ĝin? Ĉiuj diskonigoj kaj stelumoj estos perditaj, kaj respondoj al la originala mesaĝo estos senparentaj.", "confirmations.reply.confirm": "Respondi", "confirmations.reply.message": "Respondi nun anstataŭigos la mesaĝon, kiun vi nun skribas. Ĉu vi certas, ke vi volas daŭrigi?", "confirmations.unfollow.confirm": "Ne plu sekvi", @@ -172,8 +172,8 @@ "empty_column.direct": "Vi ankoraŭ ne havas rektan mesaĝon. Kiam vi sendos aŭ ricevos iun, ĝi aperos ĉi tie.", "empty_column.domain_blocks": "Ankoraŭ neniu domajno estas blokita.", "empty_column.explore_statuses": "Nenio tendencas nun. Rekontrolu poste!", - "empty_column.favourited_statuses": "Vi ankoraŭ ne havas mesaĝon en la preferaĵoj. Kiam vi aldonas ion, ĝi aperos ĉi tie.", - "empty_column.favourites": "Ankoraŭ neniu aldonis tiun mesaĝon al siaj preferaĵoj. Kiam iu faros ĉi tion, ili aperos ĉi tie.", + "empty_column.favourited_statuses": "Vi ankoraŭ ne havas mesaĝon en la preferaĵoj. Kiam vi aldonas iun, tiu aperos ĉi tie.", + "empty_column.favourites": "Ankoraŭ neniu aldonis tiun mesaĝon al siaj preferaĵoj. Kiam iu faros ĉi tion, tiu aperos ĉi tie.", "empty_column.follow_recommendations": "Ŝajnas, ke neniuj sugestoj povis esti generitaj por vi. Vi povas provi uzi serĉon por serĉi homojn, kiujn vi eble konas, aŭ esplori tendencajn kradvortojn.", "empty_column.follow_requests": "Vi ankoraŭ ne havas demandon de sekvado. Kiam vi ricevas unu, ĝi aperas tie ĉi.", "empty_column.hashtag": "Ankoraŭ estas nenio per ĉi tiu kradvorto.", @@ -249,7 +249,7 @@ "keyboard_shortcuts.muted": "malfermi la liston de silentigitaj uzantoj", "keyboard_shortcuts.my_profile": "malfermi vian profilon", "keyboard_shortcuts.notifications": "malfermi la kolumnon de sciigoj", - "keyboard_shortcuts.open_media": "malfermi aŭdovidaĵon", + "keyboard_shortcuts.open_media": "Malfermi la aŭdovidaĵon", "keyboard_shortcuts.pinned": "malfermi la liston de alpinglitaj mesaĝoj", "keyboard_shortcuts.profile": "malfermi la profilon de la aŭtoro", "keyboard_shortcuts.reply": "respondi", @@ -284,7 +284,7 @@ "lists.subheading": "Viaj listoj", "load_pending": "{count,plural, one {# nova elemento} other {# novaj elementoj}}", "loading_indicator.label": "Ŝargado…", - "media_gallery.toggle_visible": "Baskuligi videblecon", + "media_gallery.toggle_visible": "{number, plural, one {Kaŝi la bildon} other {Kaŝi la bildojn}}", "missing_indicator.label": "Ne trovita", "missing_indicator.sublabel": "Ĉi tiu elemento ne estis trovita", "mute_modal.duration": "Daŭro", @@ -374,19 +374,19 @@ "poll_button.remove_poll": "Forigi balotenketon", "privacy.change": "Agordi mesaĝan privatecon", "privacy.direct.long": "Videbla nur al menciitaj uzantoj", - "privacy.direct.short": "Direct", + "privacy.direct.short": "Nur menciitaj personoj", "privacy.private.long": "Videbla nur al viaj sekvantoj", "privacy.private.short": "Nur abonantoj", "privacy.public.long": "Videbla por ĉiuj", "privacy.public.short": "Publika", - "privacy.unlisted.long": "Visible for all, but opted-out of discovery features", + "privacy.unlisted.long": "Videbla por ĉiuj, sed ekskluzive de la funkcio de esploro", "privacy.unlisted.short": "Nelistigita", "refresh": "Refreŝigu", "regeneration_indicator.label": "Ŝargado…", "regeneration_indicator.sublabel": "Via abonfluo estas preparata!", "relative_time.days": "{number}t", - "relative_time.full.days": "{number, plural, one {# day} other {# days}} ago", - "relative_time.full.hours": "{number, plural, one {# hour} other {# hours}} ago", + "relative_time.full.days": "antaŭ {number, plural, one {# tago} other {# tagoj}}", + "relative_time.full.hours": "antaŭ {number, plural, one {# horo} other {# horoj}}", "relative_time.full.just_now": "ĵus nun", "relative_time.full.minutes": "{number, plural, one {# minute} other {# minutes}} ago", "relative_time.full.seconds": "{number, plural, one {# second} other {# seconds}} ago", @@ -434,8 +434,8 @@ "report.unfollow": "Malsekvi @{name}", "report.unfollow_explanation": "Vi sekvas ĉi tiun konton. Por ne plu vidi ĝiajn abonfluojn en via hejma templinio, ĉesu sekvi ĝin.", "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", - "report_notification.categories.other": "Other", - "report_notification.categories.spam": "Spam", + "report_notification.categories.other": "Alia", + "report_notification.categories.spam": "Trudmesaĝo", "report_notification.categories.violation": "Malobservo de la regulo", "report_notification.open": "Malfermi la raporton", "search.placeholder": "Serĉi", @@ -468,7 +468,7 @@ "status.embed": "Enkorpigi", "status.favourite": "Aldoni al viaj preferaĵoj", "status.filtered": "Filtrita", - "status.hide": "Hide toot", + "status.hide": "Kaŝi la mesaĝon", "status.history.created": "{name} kreis {date}", "status.history.edited": "{name} redaktis {date}", "status.load_more": "Ŝargi pli", @@ -492,7 +492,7 @@ "status.report": "Raporti @{name}", "status.sensitive_warning": "Tikla enhavo", "status.share": "Kundividi", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Ĉial montri", "status.show_less": "Montri malpli", "status.show_less_all": "Montri malpli ĉiun", "status.show_more": "Montri pli", @@ -540,7 +540,7 @@ "upload_modal.choose_image": "Elekti bildon", "upload_modal.description_placeholder": "Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj", "upload_modal.detect_text": "Detekti tekston de la bildo", - "upload_modal.edit_media": "Redakti aŭdovidaĵon", + "upload_modal.edit_media": "Redakti la aŭdovidaĵon", "upload_modal.hint": "Klaku aŭ trenu la cirklon en la antaŭvidilo por elekti la fokuspunkton kiu ĉiam videblos en ĉiuj etigitaj bildoj.", "upload_modal.preparing_ocr": "Preparante OSR…", "upload_modal.preview_label": "Antaŭvido ({ratio})", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 3a572524d57..2c967ccdfb6 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -468,7 +468,7 @@ "status.embed": "Insertar", "status.favourite": "Marcar como favorito", "status.filtered": "Filtrado", - "status.hide": "Hide toot", + "status.hide": "Ocultar mensaje", "status.history.created": "Creado por {name} el {date}", "status.history.edited": "Editado por {name} el {date}", "status.load_more": "Cargar más", @@ -492,7 +492,7 @@ "status.report": "Denunciar a @{name}", "status.sensitive_warning": "Contenido sensible", "status.share": "Compartir", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Mostrar de todos modos", "status.show_less": "Mostrar menos", "status.show_less_all": "Mostrar menos para todo", "status.show_more": "Mostrar más", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 652185a7b55..4e30f7b71ef 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -468,7 +468,7 @@ "status.embed": "Incrustado", "status.favourite": "Favorito", "status.filtered": "Filtrado", - "status.hide": "Hide toot", + "status.hide": "Ocultar publicación", "status.history.created": "{name} creó {date}", "status.history.edited": "{name} editó {date}", "status.load_more": "Cargar más", @@ -492,7 +492,7 @@ "status.report": "Reportar", "status.sensitive_warning": "Contenido sensible", "status.share": "Compartir", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Mostrar de todos modos", "status.show_less": "Mostrar menos", "status.show_less_all": "Mostrar menos para todo", "status.show_more": "Mostrar más", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index d1cebafd24e..e0a9cb42d02 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -468,7 +468,7 @@ "status.embed": "Intégrer", "status.favourite": "Ajouter aux favoris", "status.filtered": "Filtré", - "status.hide": "Hide toot", + "status.hide": "Cacher le pouet", "status.history.created": "créé par {name} {date}", "status.history.edited": "édité par {name} {date}", "status.load_more": "Charger plus", @@ -492,7 +492,7 @@ "status.report": "Signaler @{name}", "status.sensitive_warning": "Contenu sensible", "status.share": "Partager", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Afficher quand même", "status.show_less": "Replier", "status.show_less_all": "Tout replier", "status.show_more": "Déplier", @@ -533,7 +533,7 @@ "upload_form.edit": "Modifier", "upload_form.thumbnail": "Changer la vignette", "upload_form.undo": "Supprimer", - "upload_form.video_description": "Décrire pour les personnes ayant des problèmes d’audition ou de vision", + "upload_form.video_description": "Décrire pour les personnes ayant des problèmes de vue ou d'audition", "upload_modal.analyzing_picture": "Analyse de l’image en cours…", "upload_modal.apply": "Appliquer", "upload_modal.applying": "Application en cours…", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 2dc7070d2a1..c11db8a6555 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -468,7 +468,7 @@ "status.embed": "Incrustar", "status.favourite": "Favorito", "status.filtered": "Filtrado", - "status.hide": "Hide toot", + "status.hide": "Agochar publicación", "status.history.created": "{name} creouno o {date}", "status.history.edited": "{name} editouno o {date}", "status.load_more": "Cargar máis", @@ -492,7 +492,7 @@ "status.report": "Denunciar @{name}", "status.sensitive_warning": "Contido sensíbel", "status.share": "Compartir", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Mostrar igualmente", "status.show_less": "Amosar menos", "status.show_less_all": "Amosar menos para todos", "status.show_more": "Amosar máis", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 530feba2cd0..4b768de8f43 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -468,7 +468,7 @@ "status.embed": "Beágyazás", "status.favourite": "Kedvenc", "status.filtered": "Megszűrt", - "status.hide": "Hide toot", + "status.hide": "Bejegyzés elrejtése", "status.history.created": "{name} létrehozta: {date}", "status.history.edited": "{name} szerkesztette: {date}", "status.load_more": "Többet", @@ -492,7 +492,7 @@ "status.report": "@{name} bejelentése", "status.sensitive_warning": "Kényes tartalom", "status.share": "Megosztás", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Megjelenítés mindenképp", "status.show_less": "Kevesebb megjelenítése", "status.show_less_all": "Kevesebbet mindenhol", "status.show_more": "Többet", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index bc596e7fdb4..d06045cf8ab 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -468,7 +468,7 @@ "status.embed": "Eninsertez", "status.favourite": "Favorizar", "status.filtered": "Filtrita", - "status.hide": "Hide toot", + "status.hide": "Celez posto", "status.history.created": "{name} kreis ye {date}", "status.history.edited": "{name} modifikis ye {date}", "status.load_more": "Kargar pluse", @@ -492,7 +492,7 @@ "status.report": "Denuncar @{name}", "status.sensitive_warning": "Trubliva kontenajo", "status.share": "Partigez", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Jus montrez", "status.show_less": "Montrar mine", "status.show_less_all": "Montrez min por omno", "status.show_more": "Montrar plue", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index a03fa35ae68..a2714aa4f46 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -468,7 +468,7 @@ "status.embed": "Ívefja", "status.favourite": "Eftirlæti", "status.filtered": "Síað", - "status.hide": "Hide toot", + "status.hide": "Fela færslu", "status.history.created": "{name} útbjó {date}", "status.history.edited": "{name} breytti {date}", "status.load_more": "Hlaða inn meiru", @@ -492,7 +492,7 @@ "status.report": "Kæra @{name}", "status.sensitive_warning": "Viðkvæmt efni", "status.share": "Deila", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Birta samt", "status.show_less": "Sýna minna", "status.show_less_all": "Sýna minna fyrir allt", "status.show_more": "Sýna meira", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 85d71608de1..ab8b10e8ded 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -468,7 +468,7 @@ "status.embed": "Incorpora", "status.favourite": "Apprezzato", "status.filtered": "Filtrato", - "status.hide": "Hide toot", + "status.hide": "Nascondi toot", "status.history.created": "{name} ha creato {date}", "status.history.edited": "{name} ha modificato {date}", "status.load_more": "Mostra di più", @@ -492,7 +492,7 @@ "status.report": "Segnala @{name}", "status.sensitive_warning": "Materiale sensibile", "status.share": "Condividi", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Mostra comunque", "status.show_less": "Mostra meno", "status.show_less_all": "Mostra meno per tutti", "status.show_more": "Mostra di più", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index a9e0d722adb..430d81c126a 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -433,7 +433,7 @@ "report.thanks.title_actionable": "ご報告ありがとうございます、追って確認します。", "report.unfollow": "@{name}さんのフォローを解除", "report.unfollow_explanation": "このアカウントをフォローしています。ホームフィードに彼らの投稿を表示しないようにするには、彼らのフォローを外してください。", - "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.attached_statuses": "{count, plural, one {{count} 件の投稿} other {{count} 件の投稿}}が添付されました。", "report_notification.categories.other": "その他", "report_notification.categories.spam": "スパム", "report_notification.categories.violation": "ルール違反", @@ -468,7 +468,7 @@ "status.embed": "埋め込み", "status.favourite": "お気に入り", "status.filtered": "フィルターされました", - "status.hide": "Hide toot", + "status.hide": "トゥートを非表示", "status.history.created": "{name}さんが{date}に作成", "status.history.edited": "{name}さんが{date}に編集", "status.load_more": "もっと見る", @@ -492,7 +492,7 @@ "status.report": "@{name}さんを通報", "status.sensitive_warning": "閲覧注意", "status.share": "共有", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "表示する", "status.show_less": "隠す", "status.show_less_all": "全て隠す", "status.show_more": "もっと見る", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 6f709752a35..c07948a73a7 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -468,7 +468,7 @@ "status.embed": "공유하기", "status.favourite": "좋아요", "status.filtered": "필터로 걸러짐", - "status.hide": "Hide toot", + "status.hide": "툿 숨기기", "status.history.created": "{name} 님이 {date}에 생성함", "status.history.edited": "{name} 님이 {date}에 수정함", "status.load_more": "더 보기", @@ -492,7 +492,7 @@ "status.report": "신고", "status.sensitive_warning": "민감한 미디어", "status.share": "공유", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "그냥 표시하기", "status.show_less": "숨기기", "status.show_less_all": "모두 접기", "status.show_more": "더 보기", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index 80a9fcf0ac8..2bc1e9bea22 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -468,7 +468,7 @@ "status.embed": "Hedimandî", "status.favourite": "Bijarte", "status.filtered": "Parzûnkirî", - "status.hide": "Hide toot", + "status.hide": "Şandiyê veşêre", "status.history.created": "{name} {date} afirand", "status.history.edited": "{name} {date} serrast kir", "status.load_more": "Bêtir bar bike", @@ -492,7 +492,7 @@ "status.report": "{name} gilî bike", "status.sensitive_warning": "Naveroka hestiyarî", "status.share": "Parve bike", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Bi her awayî nîşan bide", "status.show_less": "Kêmtir nîşan bide", "status.show_less_all": "Ji bo hemîyan kêmtir nîşan bide", "status.show_more": "Hêj zehftir nîşan bide", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 6c848de794d..a91fa9aea9a 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -468,7 +468,7 @@ "status.embed": "Iestrādāt", "status.favourite": "Iecienītā", "status.filtered": "Filtrēts", - "status.hide": "Hide toot", + "status.hide": "Slēpt", "status.history.created": "{name} izveidots {date}", "status.history.edited": "{name} rediģēts {date}", "status.load_more": "Ielādēt vairāk", @@ -492,7 +492,7 @@ "status.report": "Ziņot par @{name}", "status.sensitive_warning": "Sensitīvs saturs", "status.share": "Kopīgot", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Tomēr rādīt", "status.show_less": "Rādīt mazāk", "status.show_less_all": "Rādīt mazāk visiem", "status.show_more": "Rādīt vairāk", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 40053f4cdd8..db67d2bcdc0 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -200,7 +200,7 @@ "follow_recommendations.heading": "Volg mensen waarvan je graag berichten wil zien! Hier zijn enkele aanbevelingen.", "follow_recommendations.lead": "Berichten van mensen die je volgt zullen in chronologische volgorde onder start verschijnen. Wees niet bang om hierin fouten te maken, want je kunt mensen op elk moment net zo eenvoudig ontvolgen!", "follow_request.authorize": "Goedkeuren", - "follow_request.reject": "Afkeuren", + "follow_request.reject": "Afwijzen", "follow_requests.unlocked_explanation": "Ook al is jouw account niet besloten, de medewerkers van {domain} denken dat jij misschien de volgende volgverzoeken handmatig wil controleren.", "generic.saved": "Opgeslagen", "getting_started.developers": "Ontwikkelaars", @@ -468,7 +468,7 @@ "status.embed": "Insluiten", "status.favourite": "Favoriet", "status.filtered": "Gefilterd", - "status.hide": "Hide toot", + "status.hide": "Bericht verbergen", "status.history.created": "{name} plaatste dit {date}", "status.history.edited": "{name} bewerkte dit {date}", "status.load_more": "Meer laden", @@ -492,7 +492,7 @@ "status.report": "@{name} rapporteren", "status.sensitive_warning": "Gevoelige inhoud", "status.share": "Delen", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Alsnog tonen", "status.show_less": "Minder tonen", "status.show_less_all": "Alles minder tonen", "status.show_more": "Meer tonen", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 9a72dba8f7c..3093ce15e8b 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -468,7 +468,7 @@ "status.embed": "Osadź", "status.favourite": "Dodaj do ulubionych", "status.filtered": "Filtrowany(-a)", - "status.hide": "Hide toot", + "status.hide": "Schowaj toota", "status.history.created": "{name} utworzył(a) {date}", "status.history.edited": "{name} edytował(a) {date}", "status.load_more": "Załaduj więcej", @@ -492,7 +492,7 @@ "status.report": "Zgłoś @{name}", "status.sensitive_warning": "Wrażliwa zawartość", "status.share": "Udostępnij", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Pokaż mimo wszystko", "status.show_less": "Zwiń", "status.show_less_all": "Zwiń wszystkie", "status.show_more": "Rozwiń", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 3d48e84ad21..c8810703e8d 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -468,7 +468,7 @@ "status.embed": "Incorporar", "status.favourite": "Adicionar aos favoritos", "status.filtered": "Filtrada", - "status.hide": "Hide toot", + "status.hide": "Esconder publicação", "status.history.created": "{name} criado em {date}", "status.history.edited": "{name} editado em {date}", "status.load_more": "Carregar mais", @@ -492,7 +492,7 @@ "status.report": "Denunciar @{name}", "status.sensitive_warning": "Conteúdo sensível", "status.share": "Partilhar", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Mostrar mesmo assim", "status.show_less": "Mostrar menos", "status.show_less_all": "Mostrar menos para todas", "status.show_more": "Mostrar mais", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 62b68e5bf5f..015fb0febfc 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -468,7 +468,7 @@ "status.embed": "Встроить на свой сайт", "status.favourite": "В избранное", "status.filtered": "Отфильтровано", - "status.hide": "Hide toot", + "status.hide": "Скрыть пост", "status.history.created": "{name} создал {date}", "status.history.edited": "{name} отредактировал {date}", "status.load_more": "Загрузить остальное", @@ -492,7 +492,7 @@ "status.report": "Пожаловаться", "status.sensitive_warning": "Содержимое «деликатного характера»", "status.share": "Поделиться", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Все равно показать", "status.show_less": "Свернуть", "status.show_less_all": "Свернуть все спойлеры в ветке", "status.show_more": "Развернуть", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 8c7d47d534a..7ef22827344 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -14,7 +14,7 @@ "account.edit_profile": "පැතිකඩ සංස්කරණය", "account.enable_notifications": "@{name} පළ කරන විට මට දැනුම් දෙන්න", "account.endorse": "පැතිකඩෙහි විශේෂාංගය", - "account.follow": "අනුගමනය කරන්න", + "account.follow": "අනුගමනය", "account.followers": "අනුගාමිකයින්", "account.followers.empty": "කිසිවෙකු තවමත් මෙම පරිශීලකයා අනුගමනය නොකරයි.", "account.followers_counter": "{count, plural, one {{counter} අනුගාමිකයෙක්} other {{counter} අනුගාමිකයින්}}", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 894824413d5..6e73685924e 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -468,7 +468,7 @@ "status.embed": "Vgradi", "status.favourite": "Priljubljen", "status.filtered": "Filtrirano", - "status.hide": "Hide toot", + "status.hide": "Skrij tut", "status.history.created": "{name}: ustvarjeno {date}", "status.history.edited": "{name}: urejeno {date}", "status.load_more": "Naloži več", @@ -492,7 +492,7 @@ "status.report": "Prijavi @{name}", "status.sensitive_warning": "Občutljiva vsebina", "status.share": "Deli", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Vseeno pokaži", "status.show_less": "Prikaži manj", "status.show_less_all": "Prikaži manj za vse", "status.show_more": "Prikaži več", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 6bc84ae0c49..4aa70477d59 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -314,7 +314,7 @@ "navigation_bar.preferences": "Parapëlqime", "navigation_bar.public_timeline": "Rrjedhë kohore të federuarish", "navigation_bar.security": "Siguri", - "notification.admin.report": "{name} reported {target}", + "notification.admin.report": "{name} raportoi {target}", "notification.admin.sign_up": "{name} u regjistrua", "notification.favourite": "{name} pëlqeu mesazhin tuaj", "notification.follow": "{name} zuri t’ju ndjekë", @@ -327,7 +327,7 @@ "notification.update": "{name} përpunoi një postim", "notifications.clear": "Spastroji njoftimet", "notifications.clear_confirmation": "Jeni i sigurt se doni të spastrohen përgjithmonë krejt njoftimet tuaja?", - "notifications.column_settings.admin.report": "New reports:", + "notifications.column_settings.admin.report": "Raportime të reja:", "notifications.column_settings.admin.sign_up": "Regjistrime të reja:", "notifications.column_settings.alert": "Njoftime desktopi", "notifications.column_settings.favourite": "Të parapëlqyer:", @@ -433,11 +433,11 @@ "report.thanks.title_actionable": "Faleminderit për raportimin, do ta shohim.", "report.unfollow": "Mos e ndiq më @{name}", "report.unfollow_explanation": "Po e ndiqni këtë llogari. Për të mos parë më postimet e tyre te prurja juaj e kreut, ndalni ndjekjen e tyre.", - "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", - "report_notification.categories.other": "Other", - "report_notification.categories.spam": "Spam", - "report_notification.categories.violation": "Rule violation", - "report_notification.open": "Open report", + "report_notification.attached_statuses": "{count, plural, one {{count} postim} other {{count} postime}} bashkëngjitur", + "report_notification.categories.other": "Tjetër", + "report_notification.categories.spam": "I padëshiruar", + "report_notification.categories.violation": "Cenim rregullash", + "report_notification.open": "Hape raportimin", "search.placeholder": "Kërkoni", "search_popout.search_format": "Format kërkimi të mëtejshëm", "search_popout.tips.full_text": "Kërkimi për tekst të thjeshtë përgjigjet me mesazhe që keni shkruar, parapëlqyer, përforcuar, ose ku jeni përmendur, si dhe emra përdoruesish, emra ekrani dhe hashtag-ë që kanë përputhje me termin e kërkimit.", @@ -468,7 +468,7 @@ "status.embed": "Trupëzim", "status.favourite": "I parapëlqyer", "status.filtered": "I filtruar", - "status.hide": "Hide toot", + "status.hide": "Fshihe mesazhin", "status.history.created": "{name} u krijua më {date}", "status.history.edited": "{name} u përpunua më {date}", "status.load_more": "Ngarko më tepër", @@ -492,7 +492,7 @@ "status.report": "Raportojeni @{name}", "status.sensitive_warning": "Lëndë rezervat", "status.share": "Ndajeni me të tjerë", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Shfaqe, sido qoftë", "status.show_less": "Shfaq më pak", "status.show_less_all": "Shfaq më pak për të tërë", "status.show_more": "Shfaq më tepër", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 85444d9d81a..74bbf0446b5 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -314,7 +314,7 @@ "navigation_bar.preferences": "การกำหนดลักษณะ", "navigation_bar.public_timeline": "เส้นเวลาที่ติดต่อกับภายนอก", "navigation_bar.security": "ความปลอดภัย", - "notification.admin.report": "{name} reported {target}", + "notification.admin.report": "{name} ได้รายงาน {target}", "notification.admin.sign_up": "{name} ได้ลงทะเบียน", "notification.favourite": "{name} ได้ชื่นชอบโพสต์ของคุณ", "notification.follow": "{name} ได้ติดตามคุณ", @@ -327,7 +327,7 @@ "notification.update": "{name} ได้แก้ไขโพสต์", "notifications.clear": "ล้างการแจ้งเตือน", "notifications.clear_confirmation": "คุณแน่ใจหรือไม่ว่าต้องการล้างการแจ้งเตือนทั้งหมดของคุณอย่างถาวร?", - "notifications.column_settings.admin.report": "New reports:", + "notifications.column_settings.admin.report": "รายงานใหม่:", "notifications.column_settings.admin.sign_up": "การลงทะเบียนใหม่:", "notifications.column_settings.alert": "การแจ้งเตือนบนเดสก์ท็อป", "notifications.column_settings.favourite": "รายการโปรด:", @@ -433,10 +433,10 @@ "report.thanks.title_actionable": "ขอบคุณสำหรับการรายงาน เราจะตรวจสอบสิ่งนี้", "report.unfollow": "เลิกติดตาม @{name}", "report.unfollow_explanation": "คุณกำลังติดตามบัญชีนี้ เพื่อไม่ให้เห็นโพสต์ของเขาในฟีดหน้าแรกของคุณอีกต่อไป เลิกติดตามเขา", - "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", - "report_notification.categories.other": "Other", - "report_notification.categories.spam": "Spam", - "report_notification.categories.violation": "Rule violation", + "report_notification.attached_statuses": "{count, plural, other {{count} โพสต์}}ที่แนบมา", + "report_notification.categories.other": "อื่น ๆ", + "report_notification.categories.spam": "สแปม", + "report_notification.categories.violation": "การละเมิดกฎ", "report_notification.open": "รายงานที่เปิด", "search.placeholder": "ค้นหา", "search_popout.search_format": "รูปแบบการค้นหาขั้นสูง", @@ -468,7 +468,7 @@ "status.embed": "ฝัง", "status.favourite": "ชื่นชอบ", "status.filtered": "กรองอยู่", - "status.hide": "Hide toot", + "status.hide": "ซ่อนโพสต์", "status.history.created": "{name} ได้สร้างเมื่อ {date}", "status.history.edited": "{name} ได้แก้ไขเมื่อ {date}", "status.load_more": "โหลดเพิ่มเติม", @@ -492,7 +492,7 @@ "status.report": "รายงาน @{name}", "status.sensitive_warning": "เนื้อหาที่ละเอียดอ่อน", "status.share": "แบ่งปัน", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "แสดงต่อไป", "status.show_less": "แสดงน้อยลง", "status.show_less_all": "แสดงน้อยลงทั้งหมด", "status.show_more": "แสดงเพิ่มเติม", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index f062d81ced4..070bdb95b36 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -492,7 +492,7 @@ "status.report": "@{name} adlı kişiyi bildir", "status.sensitive_warning": "Hassas içerik", "status.share": "Paylaş", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Yine de göster", "status.show_less": "Daha az göster", "status.show_less_all": "Hepsi için daha az göster", "status.show_more": "Daha fazlasını göster", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 3eeda561fe9..4b0bc5e70cc 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -427,7 +427,7 @@ "report.statuses.title": "Чи є дописи, які належать до цієї скарги?", "report.submit": "Відправити", "report.target": "Скаржимося на {target}", - "report.thanks.take_action": "Ось ваші варіанти управління тим, що ви бачите в Mastodon:", + "report.thanks.take_action": "Ось ваші варіанти керування тим, що ви бачите в Mastodon:", "report.thanks.take_action_actionable": "Поки ми переглядаємо це, ви можете вжити власних заходів проти @{name}:", "report.thanks.title": "Не хочете це бачити?", "report.thanks.title_actionable": "Дякуємо за скаргу, ми розглянемо її.", @@ -468,7 +468,7 @@ "status.embed": "Вбудувати", "status.favourite": "Подобається", "status.filtered": "Відфільтровано", - "status.hide": "Hide toot", + "status.hide": "Сховати дмух", "status.history.created": "{name} створює {date}", "status.history.edited": "{name} змінює {date}", "status.load_more": "Завантажити більше", @@ -492,7 +492,7 @@ "status.report": "Поскаржитися на @{name}", "status.sensitive_warning": "Делікатний зміст", "status.share": "Поділитися", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Усе одно показати", "status.show_less": "Згорнути", "status.show_less_all": "Показувати менше для всіх", "status.show_more": "Розгорнути", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 553a41f2c64..1019c342a82 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -92,7 +92,7 @@ "community.column_settings.local_only": "Chỉ máy chủ của bạn", "community.column_settings.media_only": "Chỉ xem media", "community.column_settings.remote_only": "Chỉ người dùng ở máy chủ khác", - "compose.language.change": "Đổi ngôn ngữ", + "compose.language.change": "Chọn ngôn ngữ tút", "compose.language.search": "Tìm ngôn ngữ...", "compose_form.direct_message_warning_learn_more": "Tìm hiểu thêm", "compose_form.encryption_warning": "Các tút trên Mastodon không được mã hóa đầu cuối. Không chia sẻ bất kỳ thông tin nhạy cảm nào qua Mastodon.", @@ -374,12 +374,12 @@ "poll_button.remove_poll": "Hủy cuộc bình chọn", "privacy.change": "Thay đổi quyền riêng tư", "privacy.direct.long": "Chỉ người được nhắc đến mới thấy", - "privacy.direct.short": "Chỉ người được nhắc", + "privacy.direct.short": "Nhắn riêng", "privacy.private.long": "Dành riêng cho người theo dõi", "privacy.private.short": "Chỉ người theo dõi", "privacy.public.long": "Hiển thị với mọi người", "privacy.public.short": "Công khai", - "privacy.unlisted.long": "Hiển thị với mọi người, nhưng không hiện trong tính năng khám phá", + "privacy.unlisted.long": "Công khai nhưng không hiện trên bảng tin", "privacy.unlisted.short": "Hạn chế", "refresh": "Làm mới", "regeneration_indicator.label": "Đang tải…", @@ -468,7 +468,7 @@ "status.embed": "Nhúng", "status.favourite": "Thích", "status.filtered": "Bộ lọc", - "status.hide": "Hide toot", + "status.hide": "Ẩn tút", "status.history.created": "{name} tạo lúc {date}", "status.history.edited": "{name} sửa lúc {date}", "status.load_more": "Tải thêm", @@ -492,7 +492,7 @@ "status.report": "Báo cáo @{name}", "status.sensitive_warning": "Nhạy cảm", "status.share": "Chia sẻ", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Vẫn cứ xem", "status.show_less": "Thu gọn", "status.show_less_all": "Thu gọn toàn bộ", "status.show_more": "Xem thêm", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index b666ed02cc7..1589ff09ae7 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -468,7 +468,7 @@ "status.embed": "內嵌", "status.favourite": "最愛", "status.filtered": "已過濾", - "status.hide": "Hide toot", + "status.hide": "隱藏嘟文", "status.history.created": "{name} 於 {date} 建立", "status.history.edited": "{name} 於 {date} 修改", "status.load_more": "載入更多", @@ -492,7 +492,7 @@ "status.report": "檢舉 @{name}", "status.sensitive_warning": "敏感內容", "status.share": "分享", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "仍要顯示", "status.show_less": "減少顯示", "status.show_less_all": "減少顯示這類嘟文", "status.show_more": "顯示更多", diff --git a/config/locales/activerecord.ca.yml b/config/locales/activerecord.ca.yml index 056137276a6..08fa1cb5a99 100644 --- a/config/locales/activerecord.ca.yml +++ b/config/locales/activerecord.ca.yml @@ -38,3 +38,12 @@ ca: email: blocked: utilitza un proveïdor de correu electrònic no autoritzat unreachable: sembla que no existeix + role_id: + elevated: no pot ser superior que el teu rol actual + user_role: + attributes: + permissions_as_keys: + dangerous: inclou permisos que no són segurs per al rol base + elevated: no pot incloure permisos que el teu rol actual no té + position: + elevated: no pot ser superior al teu rol actual diff --git a/config/locales/activerecord.da.yml b/config/locales/activerecord.da.yml index 3566abf4395..a8fe65498c0 100644 --- a/config/locales/activerecord.da.yml +++ b/config/locales/activerecord.da.yml @@ -38,3 +38,12 @@ da: email: blocked: bruger en ikke-tilladt e-mailudbyder unreachable: ser ikke ud til at eksistere + role_id: + elevated: kan ikke være højere end din aktuelle rolle + user_role: + attributes: + permissions_as_keys: + dangerous: omfat tilladelser, som ikke er sikre for basisrollen + elevated: kan ikke omfatte tilladelser, din aktuelle rolle ikke besidder + position: + elevated: kan ikke være højere end din aktuelle rolle diff --git a/config/locales/activerecord.fr.yml b/config/locales/activerecord.fr.yml index 4ab8f6a919f..bc063864a00 100644 --- a/config/locales/activerecord.fr.yml +++ b/config/locales/activerecord.fr.yml @@ -38,3 +38,12 @@ fr: email: blocked: utilise un fournisseur de courriel interdit unreachable: ne semble pas exister + role_id: + elevated: ne peut pas être supérieur à votre rôle actuel + user_role: + attributes: + permissions_as_keys: + dangerous: inclure des autorisations non sécurisées pour le rôle de base + elevated: ne peut pas inclure des autorisations que votre rôle actuel ne possède pas + position: + elevated: ne peut pas être supérieur à votre rôle actuel diff --git a/config/locales/activerecord.hu.yml b/config/locales/activerecord.hu.yml index 442bf385813..5b055bfa275 100644 --- a/config/locales/activerecord.hu.yml +++ b/config/locales/activerecord.hu.yml @@ -38,3 +38,12 @@ hu: email: blocked: egy letiltott e-mail szolgáltatót használ unreachable: úgy tűnik, hogy nem létezik + role_id: + elevated: nem lehet magasabb, mint a jelenlegi szereped + user_role: + attributes: + permissions_as_keys: + dangerous: tartalmaz olyan engedélyeket is, melyek az alap szerephez nem biztonságosak + elevated: nem tartalmazhat olyan engedélyeket, melyek nincsenek benne a jelenlegi szerepedben + position: + elevated: nem lehet magasabb, mint a jelenlegi szereped diff --git a/config/locales/activerecord.io.yml b/config/locales/activerecord.io.yml index 9779cbdd113..545c32d5fbd 100644 --- a/config/locales/activerecord.io.yml +++ b/config/locales/activerecord.io.yml @@ -38,3 +38,12 @@ io: email: blocked: uzas nepermisata retpostodomeno unreachable: semblas ne existar + role_id: + elevated: ne povas divenar plu alta kam vua nuna rolo + user_role: + attributes: + permissions_as_keys: + dangerous: inkluzas permisi quo ne esas segura por bazrolo + elevated: ne povas inkluzar permisi quon vua nuna rolo ne havas + position: + elevated: ne povas divenar plu alta kam vua nuna rolo diff --git a/config/locales/activerecord.ku.yml b/config/locales/activerecord.ku.yml index b440181d804..ee8d9a8d8eb 100644 --- a/config/locales/activerecord.ku.yml +++ b/config/locales/activerecord.ku.yml @@ -38,3 +38,12 @@ ku: email: blocked: dabînkerê e-nameya qedexe bi kar tîne unreachable: xuya ye ku tune ye + role_id: + elevated: nabe ku ji rola te ya heyî bilindtir be + user_role: + attributes: + permissions_as_keys: + dangerous: mafdayînên ku ji bo rola bingehîn ne ewle ne tê de hene + elevated: di rola te ya heyî de nabe mafdayîn tê de hebin + position: + elevated: nabe ku ji rola te ya heyî bilindtir be diff --git a/config/locales/activerecord.pt-PT.yml b/config/locales/activerecord.pt-PT.yml index 5b89ee5a2d5..ceeaa909e42 100644 --- a/config/locales/activerecord.pt-PT.yml +++ b/config/locales/activerecord.pt-PT.yml @@ -38,3 +38,12 @@ pt-PT: email: blocked: utiliza um provedor de e-mail não permitido unreachable: não parece existir + role_id: + elevated: não pode ser maior que o da sua função atual + user_role: + attributes: + permissions_as_keys: + dangerous: incluir permissões que não são seguras para a função base + elevated: não pode incluir permissões que a sua função atual não possui + position: + elevated: não pode ser maior que o da sua função atual diff --git a/config/locales/activerecord.sq.yml b/config/locales/activerecord.sq.yml index 57de9d3cb81..1255b79a24d 100644 --- a/config/locales/activerecord.sq.yml +++ b/config/locales/activerecord.sq.yml @@ -38,3 +38,12 @@ sq: email: blocked: përdor një shërbim email të palejuar unreachable: s’duket se ekziston + role_id: + elevated: s’mund të jetë më i lartë sesa roli juaj i tanishëm + user_role: + attributes: + permissions_as_keys: + dangerous: përfshi leje që s’janë të parrezik për rolin bazë + elevated: s’mund të përfshijë leje të cilat roli juaj i tanishëm s’i përfshin + position: + elevated: s’mund të jetë më i lartë sesa roli juaj i tanishëm diff --git a/config/locales/activerecord.uk.yml b/config/locales/activerecord.uk.yml index 06967ddc77c..58e549b5337 100644 --- a/config/locales/activerecord.uk.yml +++ b/config/locales/activerecord.uk.yml @@ -38,3 +38,12 @@ uk: email: blocked: використовує не дозволенного постачальника електронної пошти unreachable: не існує + role_id: + elevated: не може бути вищою за поточну роль + user_role: + attributes: + permissions_as_keys: + dangerous: включити небезпечні для базової ролі дозволи + elevated: не можна включити права, якими не володіє ваша поточна роль + position: + elevated: не може бути вищою за поточну роль diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 680a0646f22..dfc1c1e27b2 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -651,6 +651,9 @@ ca: view_profile: Veure perfil roles: add_new: Afegir rol + assigned_users: + one: "%{count} usuari" + other: "%{count} usuaris" categories: administration: Administració devops: Operadors de desenvolupament @@ -1608,6 +1611,78 @@ ca: tags: does_not_match_previous_name: no coincideix amb el nom anterior terms: + body_html: | +

    Aquesta pàgina conté els nostres Termes del servei (adaptats de la Bsd.network ToS) i la nostra Política de privadesa. + +

    Termes del servei

    + +

    La nostra intenció és que utilitzis aquest servei per al gaudi personal i la interacció respectuosa i amistosa. A aquest efecte, esperem fomentar un entorn favorable i integrador. + +

    Aquest servidor és de propietat privada i obert als usuaris voluntàriament, no un espai públic. S'espera que els usuaris que vulguin unir-se a aquesta comunitat actuïn sense malícia i de bona fe. Fer-ho d'una altra manera pot conduir a l'eliminació de l'usuari del servei, independentment de si viola qualsevol regla que s'esbossi a continuació. + +

    Polítiques i normes

    + +

    La nostra instància està subjecta a un conjunt de normes que regeixen el comportament dels usuaris. Les regles sempre són visibles a la nostra pàgina Quant a. + +

    Aquestes normes estan dissenyades per a mantenir un ambient amistós i obert, i per a evitar l'assetjament i la discriminació. Per tant, són un conjunt de directrius, però per necessitat incompletes. Els usuaris que violen l'esperit d'aquestes normes no es tractaran de manera diferent que els usuaris que violen una regla específica. + +

    Si us plau, tingues en compte que les nostres normes contenen una secció sobre les millors pràctiques, i els usuaris que repetidament i que malaurat els advertiments ignoren aquestes millors pràctiques poden veure's violant les nostres normes. + +

    Els moderadors poden eliminar els comptes que publiquin spam, o si se sospita que un compte és creat només per reservar un nom d'usuari. La violació de les polítiques i les normes també pot portar a l'eliminació de comptes a discreció dels moderadors. + +

    Accés a dades

    + +

    El contingut d'aquest servidor no s'ha d'utilitzar per a l'aprenentatge automàtic o altres propòsits de "recerca" sense el consentiment explícit dels usuaris implicats. + +

    El contingut d'aquest servidor més enllà d'aquesta pàgina no s'ha d'arxivar o indexar a l'engròs per mitjans automatitzats per qualsevol usuari o servei. Els usuaris actius poden exportar les seves llistes i publicacions a través de l'exportació proporcionada a la seva pàgina de configuració, o l'API. + +

    Política de privadesa

    + +

    Recollida d'informació

    + +

    Informació obligatòria del compte: nom d'usuari (sempre públic), adreça de correu electrònic i contrasenya. + +

    Informació del compte opcional: nom de visualització, biografia, camps d'informació del perfil, imatge de perfil i imatge de capçalera. El nom de visualització, la biografia, la imatge de perfil i la imatge de capçalera sempre seran públics. + +

    Estat i interaccions: Retenim totes les vostres publicacions, inclosos els adjunts, i altres interaccions (com ara els preferits, els segueix i els impulsos). A més del contingut i les persones implicades, també emmagatzemen els codis de temps per a totes les entrades de dades enumerades. Si aquestes interaccions impacten en un altre servidor (per exemple, seguint, impulsant o missatger a un usuari en un servidor diferent), aquest altre servidor rebrà tota la informació requerida. Les publicacions públiques, no llistades i fitxades són públiques. Els teus seguidors només tenen missatges de seguiment, i els missatges directes estan disponibles per a tu i totes les persones esmentades en el missatge. Tingues en compte que, com que no podem controlar altres servidors, això significa que no podem garantir l'estat de privacitat dels teus missatges tan aviat abandonin aquest servidor. + +

    Galetes: Utilitzem galetes per mantenir-te registrat i guardar les teves preferències per a futures visites. + +

    Altres metadades: No registrem ni emmagatzem la teva adreça IP com a norma general. Es faran excepcions quan busquem activament errors. Una vegada que s'hagi finalitzat la cerca d'errors, les adreces IP recollides s'eliminaran. Retenim el nom de l'aplicació del teu navegador per permetre't revisar les sessions actualment iniciades per motius de seguretat. + +

    Ús de la informació

    + +

    Tota la informació que recopilem de tu pot ser utilitzada de les maneres següents: + +

    Per proporcionar la funcionalitat principal d'aquest servidor. Només pots interaccionar amb el contingut d'altres persones i publicar el teu propi contingut quan hagis iniciat la sessió. Per exemple, pots seguir a altres persones per veure les seves publicacions en la teva pròpia línia de temps personalitzada. + +

    Per a ajudar a la moderació de la comunitat, quan s'informi d'una publicació o un compte, examinarem la qüestió com a part de les nostres tasques de moderació. + +

    L'adreça de correu electrònic que proporcionis es pot utilitzar per enviar-te informació, notificacions sobre altres persones que interaccionen amb el teu contingut o que t'envien missatges, i per respondre a les investigacions, i/o altres peticions o preguntes. + +

    Protecció de la informació

    + +

    Apliquem una varietat de mesures de seguretat per a mantenir la seguretat de la teva informació personal quan entres, presentes o accedeixes a la teva informació personal. Entre altres coses, la teva sessió de navegador, així com el trànsit entre les teves aplicacions i l'API, estan assegurades amb HTTPS, i la teva contrasenya es resumeix mitjançant un algorisme d'un únic sentit. Pots habilitar l'autenticació de doble factor per a un accés més segur al teu compte. + +

    Supressió i retenció de la informació

    + +

    Pots sol·licitar i descarregar un arxiu del teu contingut, incloent-hi les entrades, el contingut gràfic, la imatge del perfil i la imatge de capçalera. + +

    En qualsevol moment pots suprimir el teu compte de manera irreversible. + +

    Si jutgem que estàs incomplint les nostres normes, pot ser que eliminem de manera irreversible el teu compte en qualsevol moment. + +

    Divulgació de la informació

    + +

    La informació no es revela tret que ho permetis explícitament. L'única excepció és el proveïdor d'aquest servidor, que és un tercer de confiança i inevitable. + +

    Contactar o permetre el contacte d'un usuari d'una instància diferent implica el consentiment que les dades necessàries es comparteixen amb el servidor en qüestió. + +

    L'autorització d'una aplicació de tercers concedeix accés a la informació en funció de l'abast dels permisos que aprovis. L'aplicació pot accedir a la teva informació de perfil públic, la teva llista següent, els teus seguidors, les teves llistes, tots els teus missatges i els teus preferits. Les aplicacions no poden accedir mai a la teva adreça de correu electrònic o contrasenya. + +

    Atribució

    + +

    This text is free to be adapted and remixed under the terms of the CC-BY (Attribution 4.0 International) license. title: "%{instance} Condicions del servei i política de privadesa" themes: contrast: Mastodon (alt contrast) diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 06a5387a751..3a58fd23bf8 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -713,6 +713,7 @@ cs: manage_rules: Spravovat pravidla manage_settings: Spravovat nastavení manage_user_access: Spravovat uživatelské přístupy + manage_user_access_description: Umožňuje uživatelům rušit jiným uživatelům dvoufázové ověřování, měnit jejich e-mailovou adresu a obnovovat jim hesla manage_users: Spravovat uživatele manage_webhooks: Spravovat webhooky view_audit_log: Zobrazovat protokol auditu diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 41c54ba7502..a1e9835d66b 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -194,6 +194,7 @@ cy: reset: Ailosod reset_password: Ailosod cyfrinair resubscribe: Aildanysgrifio + role: Rôl search: Chwilio search_same_email_domain: Defnyddwyr eraill gyda'r un parth ebost search_same_ip: Defnyddwyr eraill gyda'r un IP diff --git a/config/locales/da.yml b/config/locales/da.yml index c9a0954feed..a08748deb7e 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -697,6 +697,18 @@ da: manage_taxonomies: Håndtere taksonomier manage_taxonomies_description: Tillader brugere at gennemse tenderende indhold og opdatere hashtag-indstillinger manage_user_access: Håndtere brugeradgang + manage_user_access_description: Tillader brugere at deaktivere andre brugeres tofaktorgodkendelse, skifte deres e-mailadresse og nulstille deres adgangskode + manage_users: Håndtere brugere + manage_users_description: Tillader brugere at se andre brugeres oplysninger og underkaste dem moderationshandlinger + manage_webhooks: Håndtere Webhooks + manage_webhooks_description: Tillader brugere at opsætte webhooks til administrative begivenheder + view_audit_log: Vis revisionslog + view_audit_log_description: Tillader brugere at se en historik over administrative handlinger på serveren + view_dashboard: Vis Dashboard + view_dashboard_description: Tillader brugere at tilgå Dashboard'et og forskellige målinger + view_devops: Devops + view_devops_description: Tillader brugere at tilgå Sidekiq- og pgHero-dashboards + title: Roller rules: add_new: Tilføj regel delete: Slet diff --git a/config/locales/devise.nl.yml b/config/locales/devise.nl.yml index bf3b02e3f98..2cbbee6cfa9 100644 --- a/config/locales/devise.nl.yml +++ b/config/locales/devise.nl.yml @@ -21,7 +21,7 @@ nl: action: E-mailadres verifiëren action_with_app: Bevestigen en naar %{app} teruggaan explanation: Je hebt een account op %{host} aangemaakt en met één klik kun je deze activeren. Wanneer jij dit account niet hebt aangemaakt, mag je deze e-mail negeren. - explanation_when_pending: Je vroeg met dit e-mailadres een uitnodiging aan voor %{host}. Nadat je jouw e-mailadres hebt bevestigd, beoordelen we jouw aanvraag. Je kunt tot dan nog niet inloggen. Wanneer jouw aanvraag wordt afgekeurd, worden jouw gegevens verwijderd en hoef je daarna verder niets meer te doen. Wanneer jij dit niet was, kun je deze e-mail negeren. + explanation_when_pending: Je vroeg met dit e-mailadres een uitnodiging aan voor %{host}. Nadat je jouw e-mailadres hebt bevestigd, beoordelen we jouw aanvraag. Je kunt tot dan nog niet inloggen. Wanneer jouw aanvraag wordt afgewezen, worden jouw gegevens verwijderd en hoef je daarna verder niets meer te doen. Wanneer jij dit niet was, kun je deze e-mail negeren. extra_html: Bekijk ook de regels van de Mastodonserver en onze gebruiksvoorwaarden. subject: 'Mastodon: E-mail bevestigen voor %{instance}' title: E-mailadres verifiëren diff --git a/config/locales/doorkeeper.cy.yml b/config/locales/doorkeeper.cy.yml index 4dc4b5e0ae8..85aaccea607 100644 --- a/config/locales/doorkeeper.cy.yml +++ b/config/locales/doorkeeper.cy.yml @@ -69,6 +69,7 @@ cy: confirmations: revoke: Ydych chi'n sicr? index: + scopes: Caniatâd title: Eich rhaglenni awdurdodedig errors: messages: @@ -100,6 +101,12 @@ cy: authorized_applications: destroy: notice: Diddymwyd y cais. + grouped_scopes: + title: + accounts: Cyfrifon + bookmarks: Tudalnodau + filters: Hidlyddion + search: Chwilio layouts: admin: nav: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index e9ed57a3950..8d71055a97f 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -41,7 +41,9 @@ eo: unavailable_content_description: domain: Servilo reason: 'Kialo:' + rejecting_media: 'La aŭdovidaj dosieroj de ĉi tiuj serviloj ne estos prilaboritaj aŭ stokitaj, kaj neniu bildeto estos montrita, do necesas klaki permane por vidi la originalan afiŝon:' rejecting_media_title: Filtritaj aŭdovidaĵoj + silenced: 'La mesaĝoj de tiuj serviloj estos kaŝitaj de publikaj templinio kaj konversacioj, kaj la interagoj de la uzantoj donas neniun sciigon, ĝis vi sekvos ilin:' silenced_title: Silentigitaj serviloj suspended_title: Suspenditaj serviloj user_count_after: @@ -90,7 +92,7 @@ eo: add_email_domain_block: Bloki retadresan domajnon approve: Aprobi are_you_sure: Ĉu vi certas? - avatar: Profilbildo + avatar: Rolfiguro by_domain: Domajno change_email: current_email: Nuna retadreso @@ -129,7 +131,7 @@ eo: remote: Foraj title: Loko login_status: Ensaluta stato - media_attachments: Ligitaj aŭdovidaĵoj + media_attachments: Aŭdovidaj aldonaĵoj memorialize: Ŝanĝi al memoro memorialized: Memorita moderation: @@ -152,7 +154,7 @@ eo: push_subscription_expires: Eksvalidiĝo de la abono al PuSH redownload: Aktualigi profilon reject: Malakcepti - remove_avatar: Forigi profilbildon + remove_avatar: Forigi la rolfigron remove_header: Forigi kapan bildon resend_confirmation: already_confirmed: Ĉi tiu uzanto jam estas konfirmita @@ -179,6 +181,7 @@ eo: subscribe: Aboni suspend: Haltigu suspended: Suspendita + suspension_reversible_hint_html: La konto estas suspendita, kaj la datumoj estos komplete forgitaj en la %{date}. Ĝis tiam, la konto povas esti restaŭrita sen malutila efiko. Se vi deziras tuj forigi ĉiujn datumojn de la konto, vi povas fari ĉi-sube. title: Kontoj unblock_email: Malbloki retpoŝtadresojn unblocked_email_msg: Sukcese malblokis la retpoŝtadreson de %{username} @@ -224,7 +227,7 @@ eo: memorialize_account: Memorigu Konton promote_user: Promocii Uzanton reject_user: Malakcepti Uzanton - remove_avatar_user: Forigi profilbildon + remove_avatar_user: Forigi la rolfigron reopen_report: Remalfermi signalon reset_password_user: Restarigi pasvorton resolve_report: Solvitaj reporto @@ -268,7 +271,7 @@ eo: memorialize_account_html: "%{name} ŝanĝis la konton de %{target} al memora paĝo" promote_user_html: "%{name} plirangigis uzanton %{target}" reject_user_html: "%{name} malakceptis registriĝon de %{target}" - remove_avatar_user_html: "%{name} forigis profilbildon de %{target}" + remove_avatar_user_html: "%{name} forigis la rolfiguron de %{target}" reopen_report_html: "%{name} remalfermis signalon %{target}" suspend_account_html: "%{name} suspendis la konton de %{target}" unsuspend_account_html: "%{name} reaktivigis la konton de %{target}" @@ -330,7 +333,7 @@ eo: dashboard: active_users: aktivaj uzantoj interactions: interago - media_storage: Aŭdvidaĵa memorilo + media_storage: Memorilo de aŭdovidaĵoj new_users: novaj uzantoj opened_reports: raportoj malfermitaj resolved_reports: raportoj solvitaj @@ -363,7 +366,7 @@ eo: obfuscate: Malklara domajna nomo private_comment: Privata komento public_comment: Publika komento - reject_media: Malakcepti aŭdovidajn dosierojn + reject_media: Malakcepti la aŭdovidajn dosierojn reject_media_hint: Forigas aŭdovidaĵojn loke konservitajn kaj rifuzas alŝuti ajnan estonte. Ne koncernas haltigojn reject_reports: Malakcepti signalojn reject_reports_hint: Ignori ĉiujn signalojn el tiu domajno. Ne koncernas haltigojn @@ -394,6 +397,7 @@ eo: by_domain: Domajno content_policies: policies: + reject_media: Malakcepti la aŭdovidaĵojn reject_reports: Malakcepti raportojn silence: Kaŝu policy: Politiko @@ -402,6 +406,7 @@ eo: instance_accounts_measure: konservitaj kontoj instance_followers_measure: niaj sekvantoj tie instance_follows_measure: iliaj sekvantoj ĉi tie + instance_media_attachments_measure: stokitaj aŭdovidaj aldonaĵoj instance_reports_measure: raportoj pri ili instance_statuses_measure: konservitaj afiŝoj delivery: @@ -511,6 +516,8 @@ eo: unresolved: Nesolvitaj updated_at: Ĝisdatigita view_profile: Vidi profilon + roles: + everyone: Implicitaj permesoj rules: add_new: Aldoni regulon delete: Forigi @@ -643,8 +650,8 @@ eo: title: Tendencoj warning_presets: add_new: Aldoni novan - delete: Forigi - edit_preset: Redakti avertan antaŭagordon + delete: Forviŝi + edit_preset: Redakti la antaŭagordojn de averto title: Administri avertajn antaŭagordojn admin_mailer: new_appeal: @@ -704,6 +711,7 @@ eo: description: prefix_invited_by_user: "@%{name} invitigi vin aligiĝi ĉi tiu servilo de Mastodon!" prefix_sign_up: Registriĝi ĉe Mastodon hodiaŭ! + suffix: Kun konto, vi povos sekvi aliajn homojn, skribi afiŝojn kaj interŝanĝi mesaĝojn kun la uzantoj de iu ajn Mastodon'a servilo kaj multe pli! didnt_get_confirmation: Ĉu vi ne ricevis la instrukciojn por konfirmi? dont_have_your_security_key: Ne havas vi vian sekurecan ŝlosilon? forgot_password: Pasvorto forgesita? @@ -721,7 +729,7 @@ eo: register: Registriĝi registration_closed: "%{instance} ne estas akcepti nova uzantojn" resend_confirmation: Resendi la instrukciojn por konfirmi - reset_password: Ŝanĝi pasvorton + reset_password: Restarigi pasvorton security: Sekureco set_new_password: Elekti novan pasvorton setup: @@ -753,7 +761,7 @@ eo: invalid_signature: 올바른 Ed25519 시그니처가 아닙니다 date: formats: - default: "%Y-%m-%d " + default: "%d de %b %Y" with_month_name: "%e-a de %B %Y" datetime: distance_in_words: @@ -1029,7 +1037,7 @@ eo: too_many_options: ne povas enhavi pli da %{max} proponoj preferences: other: Aliaj aferoj - posting_defaults: Afiŝadoj defaŭltoj + posting_defaults: Implicitaj agordoj de afiŝado public_timelines: Publikaj templinioj reactions: errors: @@ -1151,6 +1159,7 @@ eo: other: "%{count} videoj" boosted_from_html: Diskonigita de %{acct_link} content_warning: 'Averto de la enhavo: %{warning}' + default_language: Same kiel lingvo de la fasado disallowed_hashtags: one: 'enhavas malpermesitan kradvorton: %{tags}' other: 'enhavis malpermesitan kradvorton: %{tags}' @@ -1189,6 +1198,8 @@ eo: ignore_reblogs: Ignori akcelojn keep_direct: Konservi rektajn mesaĝojn keep_direct_hint: Ne forigos viajn rektajn mesagôjn + keep_media: Konservi la mesaĝojn kun aŭdovidaj aldonaĵoj + keep_media_hint: Ne forviŝi la mesaĝojn kiuj enhavas aŭdovidajn aldonaĵojn keep_self_fav_hint: Ne forviŝi viajn proprajn afiŝojn, se vi aldonis ilin al viaj preferaĵoj min_age: '1209600': 2 semajnoj @@ -1213,7 +1224,7 @@ eo: mastodon-light: Mastodon (Luma) time: formats: - default: "%Y-%m-%d %H:%M" + default: "%Y.%b.%d, %H:%M" month: "%b %Y" time: "%H:%M" two_factor_authentication: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 6246836ae89..018dea3afb2 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -103,11 +103,17 @@ fr: avatar: Avatar by_domain: Domaine change_email: + changed_msg: Courriel modifié avec succès ! current_email: Courriel actuel label: Modifier le courriel new_email: Nouveau courriel submit: Modifier le courriel title: Modifier le courriel pour %{username} + change_role: + changed_msg: Rôle modifié avec succès ! + label: Modifier le rôle + no_role: Aucun rôle + title: Modifier le rôle de %{username} confirm: Confirmer confirmed: Confirmé confirming: Confirmation @@ -151,6 +157,7 @@ fr: active: Actifs all: Tous pending: En cours de traitement + silenced: Limité suspended: Suspendus title: Modération moderation_notes: Notes de modération @@ -158,6 +165,7 @@ fr: most_recent_ip: Adresse IP la plus récente no_account_selected: Aucun compte n’a été modifié, car aucun n’a été sélectionné no_limits_imposed: Aucune limite imposée + no_role_assigned: Aucun rôle assigné not_subscribed: Non abonné pending: En attente d’approbation perform_full_suspension: Suspendre @@ -184,6 +192,7 @@ fr: reset: Réinitialiser reset_password: Réinitialiser le mot de passe resubscribe: Se réabonner + role: Rôle search: Rechercher search_same_email_domain: Autres utilisateurs·trices avec le même domaine de courriel search_same_ip: Autres utilisateur·rice·s avec la même IP @@ -225,7 +234,7 @@ fr: approve_appeal: Approuver l'appel approve_user: Approuver l’utilisateur assigned_to_self_report: Affecter le signalement - change_email_user: Modifier le courriel pour + change_email_user: Modifier le courriel pour ce compte confirm_user: Confirmer l’utilisateur create_account_warning: Créer une alerte create_announcement: Créer une annonce @@ -472,8 +481,8 @@ fr: instances: availability: description_html: - one: Si la livraison au domaine échoue pendant %{count} jour sans succès, aucune autre tentative de livraison ne sera faite à moins qu'une livraison depuis le domaine soit reçue. - other: Si la livraison au domaine échoue pendant %{count} jours différents sans succès, aucune autre tentative de livraison ne sera faite à moins qu'une livraison depuis le domaine soit reçue. + one: Si la livraison au domaine échoue pendant %{count} jour, aucune autre tentative de livraison ne sera faite à moins qu'une livraison depuis le domaine ne soit reçue. + other: Si la livraison au domaine échoue pendant %{count} jours différents, aucune autre tentative de livraison ne sera faite à moins qu'une livraison depuis le domaine ne soit reçue. failure_threshold_reached: Le seuil de défaillance a été atteint le %{date}. failures_recorded: one: Tentative échouée pendant %{count} jour. @@ -640,6 +649,67 @@ fr: unresolved: Non résolus updated_at: Mis à jour view_profile: Voir le profil + roles: + add_new: Ajouter un rôle + assigned_users: + one: "%{count} utilisateur·rice" + other: "%{count} utilisateur·rice·s" + categories: + administration: Administration + devops: Devops + invites: Invitations + moderation: Modération + special: Spécial + delete: Supprimer + description_html: Les rôles utilisateur vous permettent de personnaliser les fonctions et les zones de Mastodon auxquelles vos utilisateur⋅rice⋅s peuvent accéder. + edit: Modifier le rôle '%{name}' + everyone: Autorisations par défaut + everyone_full_description_html: Ceci est le rôle de base qui impacte tou⋅te⋅s les utilisateur⋅rice⋅s, même celleux sans rôle assigné. Tous les autres rôles héritent des autorisations de celui-ci. + permissions_count: + one: "%{count} autorisation" + other: "%{count} autorisations" + privileges: + administrator: Administrateur·rice + administrator_description: Les utilisateur⋅rice⋅s ayant cette autorisation pourront contourner toutes les autorisations + delete_user_data: Supprimer les données de l'utilisateur⋅rice + delete_user_data_description: Permet aux utilisateur⋅rice⋅s de supprimer sans délai les données des autres utilisateur⋅rice⋅s + invite_users: Inviter des utilisateur⋅rice⋅s + invite_users_description: Permet aux utilisateur⋅rice⋅s d'inviter de nouvelles personnes sur le serveur + manage_announcements: Gérer les annonces + manage_announcements_description: Permet aux utilisateur⋅rice⋅s de gérer les annonces sur le serveur + manage_appeals: Gérer les contestations + manage_appeals_description: Permet aux utilisateur⋅rice⋅s d'examiner les appels contre les actions de modération + manage_blocks: Gérer les blocages + manage_blocks_description: Permet aux utilisateur⋅rice⋅s de bloquer des fournisseurs de courriel et des adresses IP + manage_custom_emojis: Gérer les émojis personnalisés + manage_custom_emojis_description: Permet aux utilisateur⋅rice⋅s de gérer les émoticônes personnalisées sur le serveur + manage_federation: Gérer de la féderation + manage_federation_description: Permet aux utilisateur⋅rice⋅s de bloquer ou d'autoriser la fédération avec d'autres domaines, et de contrôler la capacité de livraison + manage_invites: Gérer les invitations + manage_invites_description: Permet aux utilisateur⋅rice⋅s de parcourir et de désactiver les liens d'invitation + manage_reports: Gérer les rapports + manage_reports_description: Permet aux utilisateur⋅rice⋅s d'examiner les signalements et d'effectuer des actions de modération en conséquence + manage_roles: Gérer les rôles + manage_roles_description: Permet aux utilisateur⋅rice⋅s de gérer et d'assigner des rôles inférieurs au leur + manage_rules: Gérer les règles + manage_rules_description: Permet aux utilisateur·rice·s de modifier les règles du serveur + manage_settings: Gérer les paramètres + manage_settings_description: Permet aux utilisateur·rice·s de modifier les paramètres du site + manage_taxonomies: Gérer les taxonomies + manage_taxonomies_description: Permet aux utilisateur⋅rice⋅s d'examiner les contenus tendance et de mettre à jour les paramètres des hashtags + manage_user_access: Gérer l'accès utilisateur + manage_user_access_description: Permet aux utilisateur⋅rice⋅s de désactiver l'authentification à deux facteurs, de modifier l'adresse courriel et de réinitialiser le mot de passe des autres utilisateur⋅rice⋅s + manage_users: Gérer les utilisateur·rice·s + manage_users_description: Permet aux utilisateur⋅rice⋅s de voir les détails des autres utilisateur⋅rice⋅s et d'effectuer des actions de modération en conséquence + manage_webhooks: Gérer les points d’ancrage web + manage_webhooks_description: Permet aux utilisateur⋅rice⋅s de configurer des webhooks pour des événements d'administration + view_audit_log: Afficher le journal d'audit + view_audit_log_description: Permet aux utilisateur⋅rice⋅s de voir l'historique des opérations d'administration sur le serveur + view_dashboard: Voir le tableau de bord + view_dashboard_description: Permet aux utilisateur⋅rice⋅s d'accéder au tableau de bord et à diverses statistiques + view_devops: Devops + view_devops_description: Permet aux utilisateur⋅rice⋅s d'accéder aux tableaux de bord Sidekiq et pgHero + title: Rôles rules: add_new: Ajouter une règle delete: Supprimer @@ -853,6 +923,7 @@ fr: events: Événements new: Nouveau point d’ancrage web rotate_secret: Effectuer une rotation du secret + secret: Jeton de connexion status: État title: Points d’ancrage web webhook: Point d’ancrage web diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 4d459a74a4d..a5baa17f28c 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -601,7 +601,7 @@ gl: delete_description_html: As publicacións denunciadas van ser eliminadas e gárdase un aviso para axudarche a xestionar futuras infraccións desta conta. mark_as_sensitive_description_html: Os multimedia das publicacións denunciadas serán marcados como sensibles e engadirase un aviso para axudarche a xestionar futuras infraccións da mesma conta. other_description_html: Mira máis opcións para controlar o comportamento da conta e personalizar as comunicacións coa conta denunciada. - resolve_description_html: Non se van tomar accións contra a conta denunciada, nin se gardan avisos, e a denuncia arquivada. + resolve_description_html: Non se van tomar accións contra a conta denunciada, nin se gardarán avisos, e pecharase a denuncia. silence_description_html: O perfil será visible só para quen xa o está a seguir ou quen o buscou manualmente, limitando moito o seu alcance. Pódese cambiar. suspend_description_html: O perfil e tódolos seus contidos será inaccesbles e finalmente eliminados. A interacción coa conta non será posible. Reversible durante 30 días. actions_description_html: Decide que acción tomar respecto desta denuncia. Se tomas accións punitivas contra a conta denunciada, enviaráselles un email coa notificación, excepto se está seleccionada a categoría Spam. @@ -631,7 +631,7 @@ gl: placeholder: Describir que accións foron tomadas ou calquera outra novidade sobre esta denuncia... title: Notas notes_description_html: Ver e deixar unha nota para ti no futuro e outras moderadoras - quick_actions_description_html: 'Tomar unha acción rápida ou desprázate abaixo para ver o contido denunciado:' + quick_actions_description_html: 'Toma unha acción rápida ou desprázate abaixo para ver o contido denunciado:' remote_user_placeholder: a usuaria remota desde %{instance} reopen: Reabrir denuncia report: 'Denuncia #%{id}' @@ -664,7 +664,7 @@ gl: description_html: Cos roles das usuarias podes personalizar as funcións e áreas de Mastodon ás que as usuarias poden acceder. edit: Editar rol '%{name}' everyone: Permisos por defecto - everyone_full_description_html: Este é o rol básico que afecta a tódalas usuarias, incluso aquelas sen un rol asignado. Tódolos outros roles herdar os seus permisos. + everyone_full_description_html: Este é o rol básico que afecta a tódalas usuarias, incluso aquelas sen un rol asignado. Tódolos outros roles herdan os seus permisos. permissions_count: one: "%{count} permiso" other: "%{count} permisos" @@ -700,7 +700,7 @@ gl: manage_user_access: Xestionar Acceso das usuarias manage_user_access_description: Permite desactivar o segundo factor de autenticación doutras usuarias, cambiar o enderezo de email e restablecer o contrasinal manage_users: Xestionar Usuarias - manage_users_description: Permite ver os detalles doutras usuarias e realizar accións de moderación en sobre elas + manage_users_description: Permite ver os detalles doutras usuarias e realizar accións de moderación sobre elas manage_webhooks: Xestionar Webhooks manage_webhooks_description: Permite establecer webhooks para eventos administrativos view_audit_log: Ver Rexistro de auditoría diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 2c286e87d55..9a601c4cafd 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -666,6 +666,52 @@ hu: description_html: A felhasználói szerepekkel testreszabhatod, hogy a felhasználóid milyen Mastodon funkciókat és területeket érjenek el. edit: "'%{name}' szerep szerkesztése" everyone: Alapértelmezett engedélyek + everyone_full_description_html: Ez az alap szerep, mely minden felhasználóra kihat, azokra is, akiknek nincs hozzárendelt szerepük. Minden más szerep ebből örökli az engedélyeit. + permissions_count: + one: "%{count} engedély" + other: "%{count} engedély" + privileges: + administrator: Adminisztrátor + administrator_description: A felhasználók ezzel a szereppel minden jogosultsággal rendelkeznek + delete_user_data: Felhasználói adatok törlése + delete_user_data_description: Lehetővé teszi a felhasználónak, hogy azonnal törölhesse más felhasználó adatait + invite_users: Felhasználók meghívása + invite_users_description: Lehetővé teszi a felhasználónak, hogy új embereket hívjon meg a kiszolgálóra + manage_announcements: Hirdetmények kezelése + manage_announcements_description: Lehetővé teszi a felhasználónak, hogy a kiszolgáló hirdetményeit kezelje + manage_appeals: Fellebbezések kezelése + manage_appeals_description: Lehetővé teszi, hogy a felhasználó átnézze a moderációval kapcsolatos fellebbezéseket + manage_blocks: Letiltások kezelése + manage_blocks_description: Lehetővé teszi, hogy a felhasználó letiltson email szolgáltatókat és IP címeket + manage_custom_emojis: Egyedi emodzsik kezelése + manage_custom_emojis_description: Lehetővé teszi a felhasználó számára, hogy a kiszolgáló egyedi emodzsiait kezelje + manage_federation: Föderáció kezelése + manage_federation_description: Lehetővé teszi a felhasználó számára, hogy más domainnekkel való föderációt engedélyezzen vagy letiltson, illetve szabályozza a kézbesítést + manage_invites: Meghívások kezelése + manage_invites_description: Lehetővé teszi a felhasználó számára, hogy böngéssze és deaktiválja a meghívási hivatkozásokat + manage_reports: Bejelentések kezelése + manage_reports_description: Lehetővé teszi a felhasználó számára, hogy átnézze a bejelentéseket és moderáljon ezek alapján + manage_roles: Szerepek kezelése + manage_roles_description: Lehetővé teszi a felhasználó számára, hogy a sajátjánál alacsonyabb rangú szerepeket kezeljen és hozzárendeljen másokhoz + manage_rules: Szabályok kezelése + manage_rules_description: Lehetővé teszi a felhasználó számára, hogy megváltoztassa a kiszolgáló szabályait + manage_settings: Beállítások kezelése + manage_settings_description: Lehetővé teszi, hogy a felhasználó megváltoztassa az oldal beállításait + manage_taxonomies: Taxonómiák kezelése + manage_taxonomies_description: Lehetővé teszi, hogy a felhasználó átnézze a népszerű tartalmakat és frissítse a hashtag-ek beállításait + manage_user_access: Felhasználói hozzáférések kezelése + manage_user_access_description: Lehetővé teszi, hogy a felhasználó letiltsa mások kétlépcsős azonosítását, megváltoztassa az email címüket, és alaphelyzetbe állítsa a jelszavukat + manage_users: Felhasználók kezelése + manage_users_description: Lehetővé teszi, hogy a felhasználó megtekintse mások részletes adatait és moderálja őket + manage_webhooks: Webhookok kezelése + manage_webhooks_description: Lehetővé teszi, hogy a felhasználó webhookokat állítson be adminisztratív eseményekhez + view_audit_log: Audit napló megtekintése + view_audit_log_description: Lehetővé teszi, hogy a felhasználó megtekintse a kiszolgáló adminisztratív eseményeinek történetét + view_dashboard: Irányítópult megtekintése + view_dashboard_description: Lehetővé teszi, hogy a felhasználó elérje az irányítópultot és vele számos metrikát + view_devops: Devops + view_devops_description: Lehetővé teszi, hogy a felhasználó elérje a Sidekiq és pgHero irányítópultjait + title: Szerepek rules: add_new: Szabály hozzáadása delete: Törlés diff --git a/config/locales/io.yml b/config/locales/io.yml index e7a8b1daf1b..f88ab41646c 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -103,11 +103,17 @@ io: avatar: Profilimajo by_domain: Domeno change_email: + changed_msg: Kontoretposto sucesoze chanjesis! current_email: Nuna retposto label: Chanjez retposto new_email: Nova retposto submit: Chanjez retposto title: Chanjez retposto por %{username} + change_role: + changed_msg: Rolo sucesoze chanjesis! + label: Chanjez rolo + no_role: Nula rolo + title: Chanjez rolo por %{username} confirm: Konfirmez confirmed: Konfirmita confirming: Ankore konfirmesas @@ -151,6 +157,7 @@ io: active: Aktiva all: Omna pending: Vartanta + silenced: Limitizita suspended: Restriktita title: Jero moderation_notes: Jernoti @@ -158,6 +165,7 @@ io: most_recent_ip: Maxim recenta IP no_account_selected: Nula konti chanjesis pro ke nulo selektesis no_limits_imposed: Limiti ne fixesis + no_role_assigned: Nula rolo not_subscribed: Ne abonita pending: Vartar kontrolo perform_full_suspension: Perform full suspension @@ -184,6 +192,7 @@ io: reset: Richanjez reset_password: Richanjez pasvorto resubscribe: Riabonez + role: Rolo search: Trovez search_same_email_domain: Altra uzanti kun sama retpostodomeno search_same_ip: Altra uzanti kun sama IP @@ -640,6 +649,67 @@ io: unresolved: Nerezolvita updated_at: Novigesis view_profile: Videz profilo + roles: + add_new: Insertez rolo + assigned_users: + one: "%{count} uzanto" + other: "%{count} uzanti" + categories: + administration: Administro + devops: Developeri + invites: Inviti + moderation: Jero + special: Specala + delete: Efacez + description_html: Per uzantoroli, vu povas kustumizar funciono e siti di Mastodon quon vua uzanti povas uzar. + edit: Modifikez rolo di '%{name}' + everyone: Originala permisi + everyone_full_description_html: Co esas bazrolo quo efektigas omna uzanti, mem personi sen rolo. Omna altra roli ganas sama permisi de ol. + permissions_count: + one: "%{count} permiso" + other: "%{count} permisi" + privileges: + administrator: Administrero + administrator_description: Uzanti kun ca permiso ignoros singla permiso + delete_user_data: Efacez uzantinformi + delete_user_data_description: Permisez uzanti efacar informi di altra uzanti sen varto + invite_users: Invitez uzanti + invite_users_description: Permisez uzanti invitar nova personi a la servilo + manage_announcements: Jerez anunci + manage_announcements_description: Permisez uzanti jerar anunci en la servilo + manage_appeals: Jerez apeli + manage_appeals_description: Permisez uzanti kontrolar apeli kontra jero + manage_blocks: Jerez obstrukti + manage_blocks_description: Permisez uzanti obstruktar retpostoservilo e adresi di IP + manage_custom_emojis: Jerez kustumizita emocimaji + manage_custom_emojis_description: Permisez uzanti jerar kustumizita emocimaji en la servilo + manage_federation: Jerez federo + manage_federation_description: Permisez uzanti obstruktar o permisez federo kun altra domeni, e dominacar sendebleso + manage_invites: Jerez inviti + manage_invites_description: Permisez uzanti vidar e desaktivigar invitligili + manage_reports: Jerez raporti + manage_reports_description: Permisez uzanti kontrolar raporti e jerez kontra oli + manage_roles: Jerez roli + manage_roles_description: Permisez uzanti jerar e ajustar plu basa roli di olia + manage_rules: Jerez reguli + manage_rules_description: Permisez uzanti chanjar servilreguli + manage_settings: Jerez opcioni + manage_settings_description: Permisez uzanti chanjar sitopcioni + manage_taxonomies: Jerez nomkategorii + manage_taxonomies_description: Permisez uzanti kontrolar tendencoza kontenajo e novigar hashtagopcioni + manage_user_access: Jerez uzantoeniro + manage_user_access_description: Permisez uzanti desaktivigar 2-faktoryurizeso di altra uzanti, chanjar olia retpostoadreso e richanjar olia pasvorto + manage_users: Jerez uzanti + manage_users_description: Permisez uzanti vidar detali di altra uzanti e jerar kontra oli + manage_webhooks: Jerez interrethoki + manage_webhooks_description: Permisez uzanti igas interrethoki por administrala eventi + view_audit_log: Videz kontrollogo + view_audit_log_description: Permisez uzanti vidar historio di administrala agi en la servilo + view_dashboard: Videz chefpanelo + view_dashboard_description: Permisez uzanti uzar chefpanelo e diversa opcioni + view_devops: Developeri + view_devops_description: Permisez uzanti uzar chefpaneli Sidekiq e pgHero + title: Roli rules: add_new: Insertez regulo delete: Efacez @@ -1113,8 +1183,10 @@ io: keywords: Klefvorti title: Modifikez filtrilo errors: + deprecated_api_multiple_keywords: Ca parametri ne povas chanjesar per ca softwaro pro quo oli efektigas plu kam 1 filtrilklefvorto. Uzez plu recenta softwaro o interretintervizajo. invalid_context: Nula o nevalida kuntexto donesis index: + contexts: Filtrili kun %{contexts} delete: Efacez empty: Vu ne havas filtrili. expires_in: Expiras ye %{distance} @@ -1124,6 +1196,7 @@ io: other: "%{count} klefvorti" title: Filtrili new: + save: Salvez nova filtrilo title: Insertez nova filtrilo footer: developers: Developeri diff --git a/config/locales/is.yml b/config/locales/is.yml index 912a3f5bc6e..1a13e322230 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -664,6 +664,7 @@ is: description_html: Með hlutverkum notenda geturðu sérsniðið að hvaða aðgerðum og hvaða svæðum í Mastodon notendurnir þínir hafa aðgang. edit: Breyta hlutverki fyrir '%{name}' everyone: Sjálfgefnar heimildir + everyone_full_description_html: Þetta er grunnhlutverk sem allir notendur fá, líka þeir sem ekki hafa fengið neitt sérstakt hlutverk. Öll önnur hlutverk erfa heimildir frá þessu. permissions_count: one: "%{count} heimild" other: "%{count} heimildir" @@ -680,6 +681,8 @@ is: manage_appeals_description: Leyfir notendum að yfirfara áfrýjanir vegna aðgerða umsjónarfólks manage_blocks: Sýsla með útilokanir manage_blocks_description: Leyfir notendum að loka á tölvupóstþjónustur og IP-vistföng + manage_rules: Sýsla með reglur + manage_rules_description: Leyfir notendum að breyta reglum á netþjóninum manage_settings: Sýsla með stillingar manage_settings_description: Leyfir notendum að breyta stillingum vefsvæðisins view_dashboard: Skoða stjórnborð diff --git a/config/locales/ko.yml b/config/locales/ko.yml index ce377f4d665..4109bfb4a7f 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -654,8 +654,11 @@ ko: other: "%{count} 개의 권한" privileges: administrator: 관리자 + administrator_description: 이 권한을 가진 사용자는 모든 권한을 우회합니다 delete_user_data: 사용자 데이터 삭제 + delete_user_data_description: 사용자가 다른 사용자의 데이터를 지체 없이 삭제할 수 있도록 허용 invite_users: 사용자 초대 + invite_users_description: 사용자가 다른 사람들을 서버에 초대할 수 있도록 허용 manage_announcements: 공지 관리 manage_announcements_description: 사용자가 서버의 공지사항을 관리할 수 있도록 허용 manage_appeals: 이의제기 관리 diff --git a/config/locales/ku.yml b/config/locales/ku.yml index 47b8b037b1e..ccc70d9c5e9 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -663,8 +663,23 @@ ku: moderation: Çavdêrî special: Taybet delete: Jê bibe + description_html: Bi rolên bikarhêner, tu dikarî fonksiyon û deverên Mastodon ku bikarhênerên wê dikarin xwe bigihînin kesane bikî. + edit: Rolê '%{name}' serrast bike + everyone: Mafdayînên berdest + everyone_full_description_html: Ev rola bingehîn bandorê li hemû bikarhêneran dike, tevî yên bêyî rolek diyarkirî jî. Hemû rolên din mafdayînan jê digirin. + permissions_count: + one: "%{count} mafdayîn" + other: "%{count} mafdayîn" privileges: + administrator: Rêvebir + invite_users: Bikarhêneran vexwîne + manage_custom_emojis: Emojiyên kesane bi rêve bibe + manage_invites: Vexwendinan bi rêve bibe + manage_roles: Rolan bi rêve bibe + manage_rules: Rolan bi rêve bibe manage_settings: Sazkariyan bi rê ve bibe + manage_users: Bikarhêneran bi rêve bibe + title: Rol rules: add_new: Rêbazekê tevlî bike delete: Jê bibe @@ -1134,6 +1149,7 @@ ku: public: Demnameya gelemperî thread: Axaftin edit: + keywords: Peyvkilît title: Parzûnê serrast bike errors: invalid_context: Naverok tune ye yan jî nederbasdar tê peydakirin diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 08ccb823c4d..caf3370d877 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -101,11 +101,17 @@ nl: avatar: Avatar by_domain: Domein change_email: + changed_msg: E-mailadres succesvol veranderd! current_email: Huidig e-mailadres label: E-mailadres wijzigen new_email: Nieuw e-mailadres submit: E-mailadres veranderen title: E-mailadres wijzigen voor %{username} + change_role: + changed_msg: Rol succesvol veranderd! + label: Rol veranderen + no_role: Geen rol + title: Rol van %{username} veranderen confirm: Bevestigen confirmed: Bevestigd confirming: Bevestiging @@ -147,6 +153,7 @@ nl: active: Actief all: Alles pending: In afwachting + silenced: Beperkt suspended: Opgeschort title: Moderatie moderation_notes: Opmerkingen voor moderatoren @@ -154,6 +161,7 @@ nl: most_recent_ip: Laatst gebruikt IP-adres no_account_selected: Er zijn geen accounts veranderd, omdat er geen een was geselecteerd no_limits_imposed: Geen limieten ingesteld + no_role_assigned: Geen rol toegewezen not_subscribed: Niet geabonneerd pending: Moet nog beoordeeld worden perform_full_suspension: Opschorten @@ -167,7 +175,7 @@ nl: push_subscription_expires: PuSH-abonnement verloopt op redownload: Profiel vernieuwen redownloaded_msg: Het herstellen van het oorspronkelijke profiel van %{username} is geslaagd - reject: Afkeuren + reject: Afwijzen rejected_msg: Het afwijzen van het registratieverzoek van %{username} is geslaagd remove_avatar: Avatar verwijderen remove_header: Omslagfoto verwijderen @@ -180,9 +188,13 @@ nl: reset: Opnieuw reset_password: Wachtwoord opnieuw instellen resubscribe: Opnieuw abonneren + role: Rol search: Zoeken search_same_email_domain: Andere gebruikers met hetzelfde e-maildomein search_same_ip: Andere gebruikers met hetzelfde IP-adres + security_measures: + only_password: Alleen wachtwoord + password_and_2fa: Wachtwoord en tweestapsverificatie sensitive: Gevoelig forceren sensitized: als gevoelig gemarkeerd shared_inbox_url: Gedeelde inbox-URL @@ -192,12 +204,14 @@ nl: silence: Beperken silenced: Beperkt statuses: Berichten + strikes: Eerdere overtredingen subscribe: Abonneren suspend: Opschorten suspended: Opgeschort suspension_irreversible: De gegevens van dit account zijn onomkeerbaar verwijderd. Je kunt het opschorten van dit account ongedaan maken zodat het weer valt te gebruiken, maar de verwijderde gegevens worden hiermee niet hersteld. suspension_reversible_hint_html: Dit account is opgeschort en de gegevens worden volledig verwijderd op %{date}. Tot die tijd kan dit account worden hersteld zonder nadelige gevolgen. Wanneer je alle gegevens van dit account onmiddellijk wilt verwijderen, kun je dit hieronder doen. title: Accounts + unblock_email: E-mailadres deblokkeren unconfirmed_email: Onbevestigd e-mailadres undo_sensitized: Niet meer als gevoelig forceren undo_silenced: Niet langer beperken @@ -213,6 +227,7 @@ nl: action_logs: action_types: approve_appeal: Bezwaar goedkeuren + approve_user: Gebruiker goedkeuren assigned_to_self_report: Rapportage toewijzen change_email_user: E-mailadres van gebruiker wijzigen confirm_user: Gebruiker bevestigen @@ -230,6 +245,7 @@ nl: destroy_domain_allow: Domeingoedkeuring verwijderen destroy_domain_block: Domeinblokkade verwijderen destroy_email_domain_block: Blokkade van e-maildomein verwijderen + destroy_instance: Domein volledig verwijderen destroy_ip_block: IP-regel verwijderen destroy_status: Toot verwijderen destroy_unavailable_domain: Niet beschikbaar domein verwijderen @@ -240,7 +256,8 @@ nl: enable_user: Gebruiker inschakelen memorialize_account: Het account in een In memoriam veranderen promote_user: Gebruiker promoveren - reject_appeal: Bezwaar verwerpen + reject_appeal: Bezwaar afwijzen + reject_user: Gebruiker afwijzen remove_avatar_user: Avatar verwijderen reopen_report: Rapportage heropenen reset_password_user: Wachtwoord opnieuw instellen @@ -249,6 +266,7 @@ nl: silence_account: Account beperken suspend_account: Account opschorten unassigned_report: Rapportage niet langer toewijzen + unblock_email_account: E-mailadres deblokkeren unsensitive_account: De media in jouw account niet langer als gevoelig markeren unsilence_account: Account niet langer beperken unsuspend_account: Account niet langer opschorten @@ -285,7 +303,8 @@ nl: enable_user_html: Inloggen voor %{target} is door %{name} ingeschakeld memorialize_account_html: Het account %{target} is door %{name} in een In memoriam veranderd promote_user_html: Gebruiker %{target} is door %{name} gepromoveerd - reject_appeal_html: "%{name} heeft het bezwaar tegen de moderatie-actie van %{target} verworpen" + reject_appeal_html: "%{name} heeft het bezwaar tegen de moderatie-actie van %{target} afgewezen" + reject_user_html: "%{name} heeft de registratie van %{target} afgewezen" remove_avatar_user_html: "%{name} verwijderde de avatar van %{target}" reopen_report_html: "%{name} heeft rapportage %{target} heropend" reset_password_user_html: Wachtwoord van gebruiker %{target} is door %{name} opnieuw ingesteld @@ -565,6 +584,8 @@ nl: unresolved: Onopgelost updated_at: Bijgewerkt view_profile: Profiel bekijken + roles: + add_new: Rol toevoegen rules: add_new: Regel toevoegen delete: Verwijderen @@ -694,7 +715,7 @@ nl: pending_review: In afwachting van beoordeling preview_card_providers: title: Uitgevers - rejected: Geweigerd + rejected: Afgewezen statuses: allow: Bericht toestaan warning_presets: @@ -717,7 +738,7 @@ nl: next_steps: Je kunt het bezwaar goedkeuren om daarmee de moderatie-actie ongedaan te maken, of je kunt het verwerpen. subject: "%{username} maakt bezwaar tegen een moderatie-actie op %{instance}" new_pending_account: - body: Zie hieronder de details van het nieuwe account. Je kunt de aanvraag goedkeuren of afkeuren. + body: Zie hieronder de details van het nieuwe account. Je kunt de aanvraag goedkeuren of afwijzen. subject: Er dient een nieuw account op %{instance} te worden beoordeeld (%{username}) new_report: body: "%{reporter} heeft %{target} gerapporteerd" @@ -863,16 +884,24 @@ nl: strikes: appeal: Bezwaar appeal_approved: Het ingediende bezwaar is goedgekeurd en de eerder vastgestelde overtreding is niet langer geldig - appeal_rejected: Het ingediende bezwaar is verworpen + appeal_rejected: Het ingediende bezwaar is afgewezen appeal_submitted_at: Bezwaar ingediend appealed_msg: Jouw bezwaar is ingediend. Wanneer deze wordt goedgekeurd, krijg je hiervan bericht. appeals: submit: Bezwaar indienen approve_appeal: Bezwaar goedkeuren - reject_appeal: Bezwaar verworpen + reject_appeal: Bezwaar afgewezen + title_actions: + delete_statuses: Verwijdering bericht + disable: Bevriezen van account + mark_statuses_as_sensitive: Berichten als gevoelig markeren + none: Waarschuwing + sensitive: Volledige account als gevoelig markeren + silence: Beperking account + suspend: Opschorting account your_appeal_approved: Jouw bezwaar is goedgekeurd your_appeal_pending: Je hebt een bezwaar ingediend - your_appeal_rejected: Jouw bezwaar is verworpen + your_appeal_rejected: Jouw bezwaar is afgewezen domain_validator: invalid_domain: is een ongeldige domeinnaam errors: @@ -1002,6 +1031,12 @@ nl: lists: errors: limit: Je hebt het maximaal aantal lijsten bereikt + login_activities: + authentication_methods: + otp: tweestapsverificatie-app + password: wachtwoord + sign_in_token: beveiligingscode via e-mail + webauthn: beveiligingssleutels media_attachments: validations: images_and_video: Een video kan niet aan een bericht met afbeeldingen worden gekoppeld @@ -1408,19 +1443,25 @@ nl: subject: Jouw bezwaar van %{date} is goedgekeurd title: Bezwaar goedgekeurd appeal_rejected: - explanation: Het bezwaar tegen een door een moderator vastgestelde overtreding van jou op %{strike_date}, ingediend op %{appeal_date}, is verworpen. De vastgestelde overtreding blijft daarom ongewijzigd. - subject: Jouw bezwaar van %{date} is verworpen - title: Bezwaar verworpen + explanation: Het bezwaar tegen een door een moderator vastgestelde overtreding van jou op %{strike_date}, ingediend op %{appeal_date}, is afgewezen. De vastgestelde overtreding blijft daarom ongewijzigd. + subject: Jouw bezwaar van %{date} is afgewezen + title: Bezwaar afgewezen backup_ready: explanation: Je hebt een volledige back-up van jouw Mastodon-account opgevraagd. Het staat nu klaar om te worden gedownload! subject: Jouw archief staat klaar om te worden gedownload title: Archief ophalen + suspicious_sign_in: + title: Een nieuwe registratie warning: appeal: Bezwaar indienen appeal_description: Wanneer je denkt dat dit een fout is, kun je een bezwaar indienen bij de medewerkers van %{instance}. + categories: + spam: Spam explanation: mark_statuses_as_sensitive: Sommige van jouw berichten zijn als gevoelig gemarkeerd door de moderatoren van %{instance}. Dit betekent dat mensen op de media in de berichten moeten klikken/tikken om deze weer te geven. Je kunt media in de toekomst ook zelf als gevoelig markeren. sensitive: Vanaf nu worden al jouw geüploade media als gevoelig gemarkeerd en verborgen achter een waarschuwing. + reason: 'Reden:' + statuses: 'Gerapporteerde berichten:' subject: disable: Jouw account %{acct} is bevroren none: Waarschuwing voor %{acct} diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 4008bb2a2bb..ac21c330eb8 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -103,11 +103,17 @@ pt-PT: avatar: Imagem de Perfil by_domain: Domínio change_email: + changed_msg: E-mail alterado com sucesso! current_email: E-mail atual label: Alterar e-mail new_email: Novo e-mail submit: Alterar e-mail title: Alterar e-mail para %{username} + change_role: + changed_msg: Função alterada com sucesso! + label: Alterar função + no_role: Nenhuma função + title: Alterar a função de %{username} confirm: Confirmar confirmed: Confirmado confirming: A confirmar @@ -151,6 +157,7 @@ pt-PT: active: Activo all: Todos pending: Pendente + silenced: Limitadas suspended: Supensos title: Moderação moderation_notes: Notas de moderação @@ -158,6 +165,7 @@ pt-PT: most_recent_ip: IP mais recente no_account_selected: Nenhuma conta foi alterada porque nenhuma foi selecionada no_limits_imposed: Sem limites impostos + no_role_assigned: Nenhuma função atribuída not_subscribed: Não inscrito pending: Pendente de revisão perform_full_suspension: Fazer suspensão completa @@ -184,6 +192,7 @@ pt-PT: reset: Restaurar reset_password: Reset palavra-passe resubscribe: Reinscrever + role: Função search: Pesquisar search_same_email_domain: Outros utilizadores com o mesmo domínio de e-mail search_same_ip: Outros utilizadores com o mesmo IP @@ -640,6 +649,67 @@ pt-PT: unresolved: Por resolver updated_at: Atualizado view_profile: Ver perfil + roles: + add_new: Adicionar função + assigned_users: + one: "%{count} utilizador" + other: "%{count} utilizadores" + categories: + administration: Administração + devops: DevOps + invites: Convites + moderation: Moderação + special: Especiais + delete: Eliminar + description_html: Com as funções de utilizador, pode personalizar quais funções e áreas do Mastodon os seus utilizadores podem aceder. + edit: Editar função '%{name}' + everyone: Permissões padrão + everyone_full_description_html: Esta é a função base que afeta todos os utilizadores, mesmo aqueles sem uma função atribuída. Todas as outras funções herdam as permissões desta. + permissions_count: + one: "%{count} permissão" + other: "%{count} permissões" + privileges: + administrator: Administrador + administrator_description: Utilizadores com esta permissão irão contornar todas as permissões + delete_user_data: Eliminar Dados de Utilizador + delete_user_data_description: Permite que os utilizadores eliminem os dados de outros utilizadores sem atraso + invite_users: Convidar Utilizadores + invite_users_description: Permite aos utilizadores convidar pessoas novas para o servidor + manage_announcements: Gerir Anúncios + manage_announcements_description: Permite aos utilizadores gerir anúncios no servidor + manage_appeals: Gerir Recursos + manage_appeals_description: Permite aos utilizadores rever recursos de moderação + manage_blocks: Gerir Bloqueios + manage_blocks_description: Permite aos utilizadores bloquear provedores de e-mail e endereços IP + manage_custom_emojis: Gerir Emojis Personalizados + manage_custom_emojis_description: Permite aos utilizadores gerir os emojis personalizados do servidor + manage_federation: Gerir Federação + manage_federation_description: Permite aos utilizadores bloquear ou permitir federação com outros domínios e controlar a entregabilidade + manage_invites: Gerir Convites + manage_invites_description: Permite aos utilizadores pesquisar e desativar links de convite + manage_reports: Gerir Relatórios + manage_reports_description: Permite aos utilizadores rever relatórios e executar ações de moderação contra eles + manage_roles: Gerir Funções + manage_roles_description: Permite aos usuários gerir e atribuir funções abaixo das deles + manage_rules: Gerir Regras + manage_rules_description: Permite aos utilizadores alterar as regras do servidor + manage_settings: Gerir Configurações + manage_settings_description: Permite aos utilizadores alterar as configurações do site + manage_taxonomies: Gerir Taxonomias + manage_taxonomies_description: Permite aos utilizadores rever o conteúdo em tendência e atualizar as configurações de hashtag + manage_user_access: Gerir Acesso de Utilizador + manage_user_access_description: Permite aos utilizadores desativar a autenticação em duas etapas de outros utilizadores, alterar o seu endereço de e-mail e redefinir a sua palavra-passe + manage_users: Gerir Utilizadores + manage_users_description: Permite aos utilizadores ver os detalhes de outros utilizadores e executar ações de moderação contra eles + manage_webhooks: Gerir Webhooks + manage_webhooks_description: Permite aos utilizadores configurar webhooks para eventos administrativos + view_audit_log: Ver Registo de Auditoria + view_audit_log_description: Permite aos utilizadores ver um histórico de ações administrativas no servidor + view_dashboard: Ver Painel de Controlo + view_dashboard_description: Permite aos utilizadores aceder ao painel de controlo e várias métricas + view_devops: DevOps + view_devops_description: Permite aos utilizadores aceder aos painéis de controlo do Sidekiq e pgHero + title: Funções rules: add_new: Adicionar regra delete: Eliminar @@ -1541,6 +1611,87 @@ pt-PT: tags: does_not_match_previous_name: não coincide com o nome anterior terms: + body_html: | +

    Política de privacidade

    +

    Que informação nós recolhemos?

    + +
      +
    • Informação básica da conta: Ao registar-se neste servidor, pode ser-lhe pedido que indique um nome de utilizador, um endereço de e-mail e uma palavra-chave. Pode ainda incluir informações adicionais no seu perfil, tais como um nome a exibir e biografia, e carregar uma imagem de perfil e imagem de cabeçalho. O nome de utilizador, nome a exibir, a biografia, a imagem de perfil e a imagem de cabeçalho são sempre listados publicamente.
    • +
    • Publicações, seguimento e outra informação pública: A lista de pessoas que segue é pública, o mesmo é verdade para os seus seguidores. Quando publica uma mensagem, a data e a hora são guardados, tal como a aplicação a partir da qual a mensagem foi enviada. As mensagens podem conter anexos de media, tais como fotografias ou vídeos. Publicações públicas e não listadas são acessíveis publicamente. Quando destaca uma publicação no seu perfil, isso é também informação disponível publicamente. As suas publicações são enviadas aos seus seguidores, em alguns casos isso significa que elas são enviadas para servidores diferentes onde são guardadas cópias. Quando elimina publicações, isso também é enviado para os teus seguidores. A ação de partilhar ou adicionar uma publicação aos favoritos é sempre pública.
    • +
    • Publicações diretas e exclusivas para seguidores: Todas as publicações são guardadas e processadas no servidor. Publicações exclusivas para seguidores são enviadas para os teus seguidores e para os utilizadores nelas mencionados. As publicações diretas são enviadas apenas para os utilizadores nelas mencionados. Em alguns casos isso significa que são enviadas para diferentes servidores onde são guardadas cópias. Nós fazemos um grande esforço para limitar o acesso a estas publicações aos utilizadores autorizados, mas outros servidores podem falhar neste objetivo. Por isso, deve rever os servidores a que os seus seguidores pertencem. Pode ativar uma opção para aprovar e rejeitar manualmente novos seguidores nas configurações. Por favor, tenha em mente que os gestores do seu servidor e qualquer servidor que receba a publicação pode lê-la e que os destinatários podem fazer uma captura de tela, copiar ou partilhar a publicação. Não partilhe qualquer informação sensível no Mastodon.
    • +
    • IPs e outros metadados: Quando inicia sessão, nós guardamos o endereço de IP a partir do qual inicou sessão, tal como o nome do seu navegador. Todas as sessões estão disponíveis para verificação e revogação nas configurações. O último endereço de IP usado é guardado até 12 meses. Nós também podemos guardar registos de servidor, os quais incluem o endereço de IP de cada pedido dirigido ao nosso servidor.
    • +
    + +
    + +

    Para que utilizamos a sua informação?

    + +

    Qualquer informação que recolhemos sobre sí pode ser utilizada dos seguintes modos:

    + +
      +
    • Para prover a funcionalidade central do Mastodon. Só pode interagir com o conteúdo de outras pessoas e publicar o seu próprio conteúdo depois de ter iniciado sessão. Por exemplo, pode seguir outras pessoas para veres as suas publicações na sua cronologia inicial personalizada.
    • +
    • Para ajudar na moderação da comunidade, por exemplo, para comparar o seu endereço IP com outros conhecidos, para determinar a fuga ao banimento ou outras violações.
    • +
    • O endereço de e-mail que fornece pode ser utilizado para lhe enviar informações e/ou notificações sobre outras pessoas que estão a interagir com o seu conteúdo ou a enviar-lhe mensagens, para responder a inquéritos e/ou outros pedidos ou questões.
    • +
    + +
    + +

    Como protegemos a sua informação?

    + +

    Implementamos uma variedade de medidas para garantir a segurança da sua informação pessoal quando introduz, submete ou acede à mesma. Entre outras coisas, a sua sessão de navegação, tal como o tráfego entre as tuas aplicações e a API, estão seguras por SSL e a sua palavra-passe é codificada utilizando um forte algoritmo de sentido único. Pode activar a autenticação em duas etapas para aumentar ainda mais a segurança do acesso à sua conta.

    + +
    + +

    >Qual é a nossa política de retenção de dados?

    + +

    Faremos o nosso melhor esforço para:

    + +
      +
    • Reter registos do servidor contendo o endereço de IP de todos os pedidos feitos a este servidor, considerando que estes registos não sejam guardados por mais de 90 dias.
    • +
    • Reter os endereços de IP associados aos utilizadores registados durante um período que não ultrapasse os 12 meses.
    • +
    + +

    Pode requer e descarregar um ficheiro com o seu conteúdo, incluindo as suas publicações, os ficheiros multimédia, a imagem de perfil e a imagem de cabeçalho.

    + +

    Pode eliminar a sua conta de modo irreversível a qualquer momento.

    + +
    + +

    Utilizamos cookies?

    + +

    Sim. Cookies são pequenos ficheiros que um site ou o seu fornecedor de serviço transfere para o disco rígido do seu computador através do seu navegador (se você o permitir). Esses cookies possibilitam ao site reconhecer o seu navegador e, se você tiver uma conta registada, associá-lo a ela.

    + +

    Nós usamos os cookies para compreender e guardar as suas preferências para visitas futuras.

    + +
    + +

    Divulgamos alguma informação para entidades externas?

    + +

    Nós não vendemos, trocamos ou transferimos de qualquer modo a sua informação pessoal que seja identificável para qualquer entidade externa. Isto não inclui entindades terceiras de confiança que nos ajudam a manter o nosso site, conduzir o nosso negócio ou prestar-lhe este serviço, desde que essas entendidades concordem em manter essa informação confidencial. Poderemos também revelar a sua informação quando acreditarmos que isso é o apropriado para cumprir a lei, forçar a aplicação dos nossos termos de serviço ou proteger os direitos, propriedade e segurança, nossos e de outrem.

    + +

    O seu conteúdo público pode ser descarregado por outros servidores na rede. As suas publicações públicas e exclusivas para os seus seguidores são enviadas para os servidores onde os seus seguidores residem e as mensagens diretas são entregues aos servidores dos seus destinatários, no caso desses seguidores ou destinatários residirem num servidor diferente deste.

    + +

    Quando autoriza uma aplicação a utilizar a sua conta, dependendo da abrangência das permissões que aprova, ela pode ter acesso à informação pública do seu perfil, à lista de quem segue, aos seus seguidores, às suas listas, a todas as suas publicações e aos seus favoritos. As aplicações nunca terão acesso ao seu endereço de e-mail ou à sua palavra-passe.

    + +
    + +

    Utilização do site por crianças

    + +

    Se este servidor estiver na UE ou no EEE: O nosso site, produtos e serviços são todos dirigidos a pessoas que tenham, pelo menos, 16 anos de idade. Se você tem menos de 16 anos de idade, em concordância com os requisitos da GDPR (General Data Protection Regulation) não utilize este site.

    + +

    Se este servidor estiver nos EUA: O nosso site, produtos e serviços são todos dirigidos a pessoas que tenham, pelo menos, 13 anos de idade. Se você tem menos de 13 anos de idade, em concordância com os requisitos da COPPA (Children's Online Privacy Protection Act) não utilize este site.

    + +

    Os requisitos legais poderão ser diferentes se este servidor estiver noutra jurisdição.

    + +
    + +

    Alterações à nossa Política de Privacidade

    + +

    Se decidirmos alterar a nossa política de privacidade, iremos publicar essas alterações nesta página.

    + +

    Este documento é CC-BY-SA. Ele foi actualizado pela última vez em 26 de Maio 2022.

    + +

    Originalmente adaptado de Discourse privacy policy.

    title: "%{instance} Termos de Serviço e Política de Privacidade" themes: contrast: Mastodon (Elevado contraste) diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 515636d3505..7cdf1f0c75a 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -516,6 +516,7 @@ ru: comment: Внутренняя заметка policies: reject_media: Отклонить медиа + reject_reports: Отклонять жалобы silence: Лимит suspend: Приостановить policy: Политика diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 81fd117f79a..f136244030a 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -96,6 +96,13 @@ ca: name: Només pots canviar la caixa de les lletres, per exemple, per fer-la més llegible user: chosen_languages: Quan estigui marcat, només es mostraran les publicacions en les llengües seleccionades en les línies de temps públiques + role: El rol controla quines permissions té l'usuari + user_role: + color: Color que s'utilitzarà per al rol a tota la interfície d'usuari, com a RGB en format hexadecimal + highlighted: Això torno el rol visibile publicament + name: Nom públic del rol, si el rol està configurat per a ser mostrat com a insígnia + permissions_as_keys: Els usuaris amb aquest rol tingran accés a... + position: El rol superior decideix la resolució de conflictes en certes situacions. Certes accions només es poden realitzar amb rols amb menor prioritat webhook: events: Selecciona esdeveniments a enviar url: On els esdeveniments seran enviats @@ -232,6 +239,14 @@ ca: name: Etiqueta trendable: Permet que aquesta etiqueta aparegui en les tendències usable: Permetre a les publicacions emprar aquesta etiqueta + user: + role: Rol + user_role: + color: Color de la insígnia + highlighted: Motra el rol com a insígnia en el perfil dels usuaris + name: Nom + permissions_as_keys: Permisos + position: Prioritat webhook: events: Esdeveniments activats url: URL del extrem diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml index 110a13c7621..bc84e0f39b1 100644 --- a/config/locales/simple_form.cs.yml +++ b/config/locales/simple_form.cs.yml @@ -228,6 +228,8 @@ cs: user: role: Role user_role: + color: Barva odznaku + highlighted: Zobrazit roli jako odznak na profilech uživatelů name: Název permissions_as_keys: Oprávnění position: Priorita diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml index 77b46ad2b3d..b0217cfe301 100644 --- a/config/locales/simple_form.cy.yml +++ b/config/locales/simple_form.cy.yml @@ -73,6 +73,7 @@ cy: labels: account: fields: + name: Label value: Cynnwys account_alias: acct: Enw'r hen gyfrif @@ -89,6 +90,7 @@ cy: types: disable: Analluogi none: Gwneud dim + sensitive: Sensitif silence: Tawelwch suspend: Dileu data cyfrif warning_preset_id: Defnyddiwch ragnod rhag rhybudd @@ -107,6 +109,7 @@ cy: confirm_password: Cadarnhau cyfrinair context: Hidlo cyd-destunau current_password: Cyfrinair presennol + data: Data discoverable: Rhestrwch y cyfrif hwn ar y cyfeiriadur display_name: Enw arddangos email: Cyfeiriad e-bost @@ -149,6 +152,7 @@ cy: setting_use_pending_items: Modd araf severity: Difrifoldeb sign_in_token_attempt: Cod dioelwch + title: Teitl type: Modd mewnforio username: Enw defnyddiwr username_or_email: Enw defnyddiwr neu e-bost @@ -166,6 +170,8 @@ cy: invite_request: text: Pam hoffech ymuno? ip_block: + comment: Sylw + ip: IP severity: Rheol notification_emails: digest: Anfonwch e-byst crynhoi @@ -183,6 +189,11 @@ cy: name: Hashnod trendable: Gadewch i'r hashnod hwn ymddangos o dan dueddiadau usable: Caniatáu i tŵtiau ddefnyddio'r hashnod hwn + user: + role: Rôl + user_role: + name: Enw + permissions_as_keys: Caniatâd 'no': Na recommended: Argymhellwyd required: diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index cb80f7eaafb..0c190f1b3a0 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -96,6 +96,13 @@ da: name: Kun bogstavtyper (store/små) kan ændres, eksempelvis for at gøre det mere læsbart user: chosen_languages: Når markeret, vil kun indlæg på de valgte sprog fremgå på offentlige tidslinjer + role: Rollen styrer, hvilke tilladelser brugeren har + user_role: + color: Farven, i RGB hex-format, der skal bruges til rollen i hele UI'en + highlighted: Dette gør rollen offentligt synlig + name: Offentligt rollennavn, hvis rollen er opsat til fremstå som et badge + permissions_as_keys: Brugere med denne rolle vil kunne tilgå... + position: Højere rolle bestemmer konfliktløsning i visse situationer. Visse handlinger kan kun udføres på roller med lavere prioritet webhook: events: Vælg begivenheder at sende url: Hvor begivenheder sendes til @@ -232,6 +239,14 @@ da: name: Hashtag trendable: Tillad visning af dette hashtag under trends usable: Tillad indlæg at benytte dette hashtag + user: + role: Rolle + user_role: + color: Badge-farve + highlighted: Vis rolle som badge på brugerprofiler + name: Navn + permissions_as_keys: Tilladelser + position: Prioritet webhook: events: Aktive begivenheder url: Endepunkts-URL diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index 2175ab5712d..30ea0f4be30 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -35,27 +35,28 @@ eo: current_password: Pro sekuraj kialoj, bonvolu enigi la pasvorton de la nuna konto current_username: Por konfirmi, bonvolu enigi la uzantnomon de la nuna konto digest: Sendita nur post longa tempo de neaktiveco, kaj nur se vi ricevis personan mesaĝon en via foresto - email: Vi ricevos konfirman retmesaĝon + email: Vi ricevos retpoŝtaĵon de konfirmo fields: Vi povas havi ĝis 4 tabelajn elementojn en via profilo header: Formato PNG, GIF aŭ JPG. Ĝis %{size}. Estos malgrandigita al %{dimensions}px inbox_url: Kopiu la URL de la ĉefpaĝo de la ripetilo, kiun vi volas uzi - irreversible: Elfiltritaj mesaĝoj malaperos por ĉiam, eĉ se la filtrilo estas poste forigita - locale: La lingvo de la uzant-interfaco, retmesaĝoj kaj puŝ-sciigoj + irreversible: La filtritaj mesaĝoj malaperos por eterne, eĉ se la filtrilo estas forigita poste + locale: La lingvo de la fasado, de retpoŝtaĵoj, kaj de sciigoj locked: Vi devos aprobi ĉiun peton de sekvado mane password: Uzu almenaŭ 8 signojn phrase: Estos provita senzorge pri la uskleco de teksto aŭ averto pri enhavo de mesaĝo scopes: Kiujn API-ojn la aplikaĵo permesiĝos atingi. Se vi elektas supran amplekson, vi ne bezonas elekti la individuajn. setting_aggregate_reblogs: Ne montri novajn plusendojn de mesaĝoj lastatempe plusenditaj (nur efikas al nove ricevitaj plusendoj) - setting_default_sensitive: Tiklaj aŭdovidaĵoj estas defaŭlte kaŝita kaj povas esti malkiŝita per klako - setting_display_media_default: Kaŝi aŭdovidaĵojn markitajn kiel tiklaj - setting_display_media_hide_all: Ĉiam kaŝi ĉiujn aŭdovidaĵojn - setting_display_media_show_all: Ĉiam montri aŭdovidaĵojn markitajn kiel tiklaj - setting_hide_network: Tiuj, kiujn vi sekvas, kaj tiuj, kiuj sekvas vin ne estos videblaj en via profilo + setting_always_send_emails: Normale, la sciigoj per retpoŝto ne estos senditaj kiam vi uzas Mastodon aktive + setting_default_sensitive: La tiklaj aŭdovidaĵoj estas kaŝitaj implicite, kaj povas esti montritaj per klako + setting_display_media_default: Kaŝi aŭdovidaĵojn markitajn kiel tikla + setting_display_media_hide_all: Ĉiam kaŝi la aŭdovidaĵojn + setting_display_media_show_all: Ĉiam montri la aŭdovidaĵojn + setting_hide_network: Tiuj kiujn vi sekvas, kaj tiuj kiuj sekvas vin estos kaŝitaj en via profilo setting_noindex: Influas vian publikan profilon kaj mesaĝajn paĝojn setting_show_application: La aplikaĵo, kiun vi uzas por afiŝi, estos montrita en la detala vido de viaj mesaĝoj setting_use_blurhash: Transirojn estas bazita sur la koloroj de la kaŝitaj aŭdovidaĵoj sed ne montri iun ajn detalon setting_use_pending_items: Kaŝi tempoliniajn ĝisdatigojn malantaŭ klako anstataŭ aŭtomate rulumi la fluon - username: Via uzantnomo estos unika ĉe %{domain} + username: Via uzantnomo estos unika en %{domain} whole_word: Kiam la vorto aŭ frazo estas nur litera aŭ cifera, ĝi estos uzata nur se ĝi kongruas kun la tuta vorto domain_allow: domain: Ĉi tiu domajno povos akiri datumon de ĉi tiu servilo kaj envenanta datumo estos prilaborita kaj konservita @@ -117,7 +118,7 @@ eo: text: Anonco defaults: autofollow: Inviti al sekvi vian konton - avatar: Profilbildo + avatar: Rolfiguro bot: Tio estas robota konto chosen_languages: Filtri lingvojn confirm_new_password: Konfirmi novan pasvorton @@ -154,7 +155,7 @@ eo: setting_delete_modal: Montri konfirman fenestron antaŭ ol forigi mesaĝon setting_disable_swiping: Malebligi svingajn movojn setting_display_media: Aŭdovidaĵa montrado - setting_display_media_default: Dekomenca + setting_display_media_default: Implicita setting_display_media_hide_all: Kaŝi ĉiujn setting_display_media_show_all: Montri ĉiujn setting_expand_spoilers: Ĉiam malfoldas mesaĝojn markitajn per averto pri enhavo diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml index 656599d9402..d61666834a1 100644 --- a/config/locales/simple_form.es-AR.yml +++ b/config/locales/simple_form.es-AR.yml @@ -102,7 +102,7 @@ es-AR: highlighted: Esto hace que el rol sea públicamente visible name: Nombre público del rol, si el rol se establece para que se muestre como una insignia permissions_as_keys: Los usuarios con este rol tendrán acceso a… - position: Un rol más alto decide la resolución de conflictos en ciertas situaciones + position: Un rol más alto decide la resolución de conflictos en ciertas situaciones. Ciertas acciones sólo pueden llevarse a cabo en roles con prioridad inferior webhook: events: Seleccionar eventos para enviar url: Adónde serán enviados los eventos diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index b4c00359373..582295abb50 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -96,6 +96,12 @@ es-MX: name: Sólo se puede cambiar el cajón de las letras, por ejemplo, para que sea más legible user: chosen_languages: Cuando se marca, solo se mostrarán los toots en los idiomas seleccionados en los timelines públicos + role: El rol controla qué permisos tiene el usuario + user_role: + color: Color que se utilizará para el rol a lo largo de la interfaz de usuario, como RGB en formato hexadecimal + highlighted: Esto hace que el rol sea públicamente visible + name: Nombre público del rol, si el rol se establece para que se muestre como una insignia + permissions_as_keys: Los usuarios con este rol tendrán acceso a... webhook: events: Seleccionar eventos para enviar url: Donde los eventos serán enviados @@ -232,6 +238,14 @@ es-MX: name: Etiqueta trendable: Permitir que esta etiqueta aparezca bajo tendencias usable: Permitir a los toots usar esta etiqueta + user: + role: Rol + user_role: + color: Color de insignia + highlighted: Mostrar rol como insignia en perfiles de usuario + name: Nombre + permissions_as_keys: Permisos + position: Prioridad webhook: events: Eventos habilitados url: URL de Endpoint diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml index b407e0581db..cd390493c98 100644 --- a/config/locales/simple_form.es.yml +++ b/config/locales/simple_form.es.yml @@ -102,7 +102,7 @@ es: highlighted: Esto hace que el rol sea públicamente visible name: Nombre público del rol, si el rol se establece para que se muestre como una insignia permissions_as_keys: Los usuarios con este rol tendrán acceso a... - position: Un rol más alto decide la resolución de conflictos en ciertas situaciones + position: Un rol superior decide la resolución de conflictos en ciertas situaciones. Ciertas acciones sólo pueden llevarse a cabo en roles con menor prioridad webhook: events: Seleccionar eventos para enviar url: Donde los eventos serán enviados diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index e9545cf085b..d942382428e 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -96,6 +96,13 @@ fr: name: Vous ne pouvez modifier que la casse des lettres, par exemple, pour le rendre plus lisible user: chosen_languages: Lorsque coché, seuls les messages dans les langues sélectionnées seront affichés sur les fils publics + role: Le rôle définit quelles autorisations a l'utilisateur⋅rice + user_role: + color: Couleur à attribuer au rôle dans l'interface, au format hexadécimal RVB + highlighted: Cela rend le rôle visible publiquement + name: Nom public du rôle, si le rôle est configuré pour être affiché avec un badge + permissions_as_keys: Les utilisateur·rice·s ayant ce rôle auront accès à … + position: Dans certaines situations, un rôle supérieur peut trancher la résolution d'un conflit. Mais certaines opérations ne peuvent être effectuées que sur des rôles ayant une priorité inférieure webhook: events: Sélectionnez les événements à envoyer url: Là où les événements seront envoyés @@ -232,6 +239,14 @@ fr: name: Hashtag trendable: Autoriser ce hashtag à apparaitre dans les tendances usable: Autoriser les messages à utiliser ce hashtag + user: + role: Rôle + user_role: + color: Couleur du badge + highlighted: Afficher le rôle avec un badge sur les profils des utilisateur·rice·s + name: Nom + permissions_as_keys: Autorisations + position: Priorité webhook: events: Événements activés url: URL du point de terminaison diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index fdd58ebbc92..0727fb97f46 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -102,7 +102,7 @@ gl: highlighted: Esto fai o rol públicamente visible name: Nome público do rol, se o rol se mostra como unha insignia permissions_as_keys: As usuarias con este rol terá acceso a... - position: O rol de maior rango decide en situación de resolución de conflitos + position: O rol superior decide nos conflitos en certas situacións. Algunhas accións só poden aplicarse sobre roles cunha prioridade menor webhook: events: Elixir eventos a enviar url: A onde se enviarán os eventos diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index 6152a87f1e3..d0ae814e6d6 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -96,6 +96,13 @@ hu: name: Csak a kis/nagybetűséget változtathatod meg, pl. hogy olvashatóbb legyen user: chosen_languages: Ha aktív, csak a kiválasztott nyelvű bejegyzések jelennek majd meg a nyilvános idővonalon + role: A szerep szabályozza, hogy a felhasználó milyen jogosultságokkal rendelkezik + user_role: + color: A szerephez használandó szín mindenhol a felhasználói felületen, hexa RGB formátumban + highlighted: Ez nyilvánosan láthatóvá teszi a szerepet + name: A szerep nyilvános neve, ha a szerepet úgy állították be, hogy jelvényként látható legyen + permissions_as_keys: A felhasználók ezzel a szereppel elérhetik a... + position: A magasabb szerepkör oldja fel az ütközéseket bizonyos helyzetekben. Bizonyos műveleteket csak alacsonyabb prioritású szerepkörrel lehet elvégezni. webhook: events: Válaszd ki a küldendő eseményeket url: Ahová az eseményket küldjük @@ -232,6 +239,14 @@ hu: name: Hashtag trendable: A hashtag megjelenhet a felkapottak között usable: Bejegyzések használhatják ezt a hashtaget + user: + role: Szerep + user_role: + color: Jelvény színe + highlighted: Szerep megjelenítése jelvényként a felhasználói profilokon + name: Név + permissions_as_keys: Engedélyek + position: Prioritás webhook: events: Engedélyezett események url: Végponti URL diff --git a/config/locales/simple_form.io.yml b/config/locales/simple_form.io.yml index c6831eac2c9..743c8964a1e 100644 --- a/config/locales/simple_form.io.yml +++ b/config/locales/simple_form.io.yml @@ -68,6 +68,11 @@ io: with_dns_records: Probo di rezolvar registri DNS di la domeno agesos e rezulti anke preventesos featured_tag: name: 'Vu forsan volas uzar 1 de co:' + filters: + action: Selektez ago kande posto parigas filtrilo + actions: + hide: Komplete celez filtrita kontenajo quale ol ne existas + warn: Celez filtrita kontenajo dop avert quo montras titulo di filtrilo form_challenge: current_password: Vu eniras sekura areo imports: @@ -91,6 +96,13 @@ io: name: Vu povas nur chanjar literkaso, por exemplo, por kauzigar lu divenar plu lektebla user: chosen_languages: Kande marketigesis, nur posti en selektesis lingui montresos en publika tempolinei + role: Rolo dominacas permisi quon uzanto havas + user_role: + color: Koloro quo uzesas por rolo en tota UI, quale RGB kun hexformato + highlighted: Co kauzigas rolo divenar publike videbla + name: Publika nomo di ca rolo, se rolo ajustesas quale montresas quale insigno + permissions_as_keys: Uzanti kun ca rolo povas... + position: Plu alta rolo decidas problemsolvo en kelka situeso. Kelka agi povas nur eventar a roli kun plu basa prioreso webhook: events: Selektigez eventi por sendar url: Ibe eventi sendesos @@ -227,6 +239,14 @@ io: name: Hashtago trendable: Permisez ca hashtago aparar che tendenci usable: Permisez posti uzar ca hashtago + user: + role: Rolo + user_role: + color: Insignokoloro + highlighted: Montrez rolo quale insigno en uzantoprofili + name: Nomo + permissions_as_keys: Permisi + position: Prioreso webhook: events: Aktivigita eventi url: URL di finpunto diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml index d14673287c1..f0fd23d5e6b 100644 --- a/config/locales/simple_form.is.yml +++ b/config/locales/simple_form.is.yml @@ -96,6 +96,11 @@ is: name: Þú getur aðeins breytt stafstöði mill há-/lágstafa, til gæmis til að gera þetta læsilegra user: chosen_languages: Þegar merkt er við þetta, birtast einungis færslur á völdum tungumálum á opinberum tímalínum + role: Hlutverk stýrir hvaða heimildir notandinn hefur + user_role: + highlighted: Þetta gerir hlutverk sýnilegt opinberlega + name: Opinbert heiti hlutverks, ef birta á hlutverk sem merki + permissions_as_keys: Notendur með þetta hlutverk munu hafa aðgang að... webhook: events: Veldu atburði sem á að senda url: Hvert atburðir verða sendir @@ -235,6 +240,8 @@ is: user: role: Hlutverk user_role: + color: Litur merkis + highlighted: Birta hlutverk sem merki á notandaauðkenni name: Nafn permissions_as_keys: Heimildir position: Forgangur diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index 668474ff9a4..d2ffda88863 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -102,7 +102,7 @@ it: highlighted: Rende il ruolo visibile name: Nome pubblico del ruolo, se il ruolo è impostato per essere visualizzato come distintivo permissions_as_keys: Gli utenti con questo ruolo avranno accesso a... - position: Il ruolo più elevato decide la risoluzione dei conflitti in determinate situazioni + position: Un ruolo più alto decide la risoluzione dei conflitti in determinate situazioni. Alcune azioni possono essere eseguite solo su ruoli con priorità più bassa webhook: events: Seleziona eventi da inviare url: Dove gli eventi saranno inviati diff --git a/config/locales/simple_form.ku.yml b/config/locales/simple_form.ku.yml index 139d46a2dfd..ea6db0972c6 100644 --- a/config/locales/simple_form.ku.yml +++ b/config/locales/simple_form.ku.yml @@ -93,6 +93,8 @@ ku: name: Tîpan, mînak ji bo ku bêhtir paknivîs bibe, tenê rewşa tîpên girdek/hûrdek dikarî biguherînî user: chosen_languages: Dema were nîşankirin, tenê parvekirinên bi zimanên hilbijartî dê di rêzikên giştî de werin nîşandan + user_role: + position: Rola bilind di hinek rewşan de biryara çareserkirina nakokiyan dide. Hinej çalakî tenê dikarin li ser rolên bi pêşanînek kêmtir bêne kirin webhook: events: Bûyeran hilbijêre bo şandinê url: Cihê ku bûyer wê werin şandin diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index 325c421cc95..ad8f3bd4d0a 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -102,7 +102,7 @@ lv: highlighted: Tas padara lomu publiski redzamu name: Lomas publiskais nosaukums, ja loma ir iestatīta rādīšanai kā emblēma permissions_as_keys: Lietotājiem ar šo lomu būs piekļuve... - position: Augstāka loma nosaka konfliktu risināšanu noteiktās situācijās + position: What is "alower"? webhook: events: Atlasi nosūtāmos notikums url: Kur notikumi tiks nosūtīti diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index cb0025f21b0..00f8e762c77 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -154,6 +154,7 @@ nl: phrase: Trefwoord of zinsdeel setting_advanced_layout: Geavanceerde webomgeving inschakelen setting_aggregate_reblogs: Boosts in tijdlijnen groeperen + setting_always_send_emails: Altijd e-mailmeldingen verzenden setting_auto_play_gif: Speel geanimeerde GIF's automatisch af setting_boost_modal: Vraag voor het boosten van een bericht een bevestiging setting_crop_images: Afbeeldingen bijsnijden tot 16x9 in berichten op tijdlijnen @@ -225,6 +226,13 @@ nl: name: Hashtag trendable: Toestaan dat deze hashtag onder trends te zien valt usable: Toestaan dat deze hashtag in berichten gebruikt mag worden + user: + role: Rol + user_role: + color: Kleur van badge + name: Naam + permissions_as_keys: Rechten + position: Prioriteit webhook: url: Eindpunt URL 'no': Nee diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index 8a9b6a905ce..1db60d3fab6 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -96,6 +96,8 @@ pl: name: Możesz zmieniać tylko wielkość liter, np. aby były bardziej widoczne user: chosen_languages: Jeżeli zaznaczone, tylko wpisy w wybranych językach będą wyświetlane na publicznych osiach czasu + user_role: + position: Wyższa rola decyduje o rozwiązywaniu konfliktów w pewnych sytuacjach. Niektóre działania mogą być wykonywane tylko na rolach z niższym priorytetem webhook: events: Wybierz zdarzenia do wysłania url: Dokąd będą wysłane zdarzenia diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml index 2ce3e154238..e77457f94e6 100644 --- a/config/locales/simple_form.pt-PT.yml +++ b/config/locales/simple_form.pt-PT.yml @@ -96,6 +96,13 @@ pt-PT: name: Só pode alterar a capitalização das letras, por exemplo, para torná-las mais legíveis user: chosen_languages: Quando seleccionado, só publicações nas línguas escolhidas serão mostradas nas cronologias públicas + role: A função controla que permissões o utilizador tem + user_role: + color: Cor a ser utilizada para a função em toda a interface de utilizador, como RGB no formato hexadecimal + highlighted: Isto torna a função visível publicamente + name: Nome público da função, se a função for definida para ser exibida como um distintivo + permissions_as_keys: Utilizadores com esta função terão acesso a... + position: Função mais alta decidem a resolução de conflitos em certas situações. Certas ações só podem ser executadas em funções com uma menor prioridade webhook: events: Selecione os eventos a enviar url: Para onde os eventos serão enviados @@ -232,6 +239,14 @@ pt-PT: name: Hashtag trendable: Permitir que esta hashtag apareça em destaque usable: Permitir que toots utilizem esta hashtag + user: + role: Função + user_role: + color: Cor do distintivo + highlighted: Exibir a função como distintivo nos perfis de utilizador + name: Nome + permissions_as_keys: Permissões + position: Prioridade webhook: events: Eventos ativados url: URL do Endpoint diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index f86bca0167e..ffe41dd1437 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -100,6 +100,7 @@ ru: user_role: color: Цвет, который будет использоваться для роли в интерфейсе (UI), как RGB в формате HEX permissions_as_keys: Пользователи с этой ролью будут иметь доступ... + position: Повышение роли разрешают конфликты интересов в некоторых ситуациях. Некоторые действия могут выполняться только на ролях с более низким приоритетом webhook: events: Выберите события для отправки url: Куда события будут отправляться diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml index 698a3152eb7..640d2c27ecc 100644 --- a/config/locales/simple_form.sl.yml +++ b/config/locales/simple_form.sl.yml @@ -102,7 +102,7 @@ sl: highlighted: S tem je vloga javno vidna name: Javno ime vloge, če naj bo vloga prikazana kot priponka permissions_as_keys: Uporabniki s to vlogo bodo imeli dostop do ... - position: Višja vloga odloča o razrešitvi sporov v določenih situacijah + position: Višja vloga se odloča o razrešitvi sporov v določenih situacijah. Določena dejanja lahko izvede le na vlogah z nižjo prioriteto webhook: events: Izberite dogodke za pošiljanje url: Kam bodo poslani dogodki diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index 0e2fb4ab88b..fd17afb0e37 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -68,6 +68,11 @@ sq: with_dns_records: Do të bëhet një përpjekje për ftillimin e zërave DNS të përkatësisë së dhënë dhe do të futen në listë bllokimesh edhe përfundimet featured_tag: name: 'Mund të doni të përdorni një nga këto:' + filters: + action: Zgjidhni cili veprim të kryhet, kur një postim ka përputhje me një filtër + actions: + hide: Fshihe plotësisht lëndën e filtruar, duke u sjellë sikur të mos ekzistonte + warn: Fshihe lëndën e filtruar pas një sinjalizimi që përmend titullin e filtrit form_challenge: current_password: Po hyni në një zonë të sigurt imports: @@ -91,6 +96,13 @@ sq: name: Mund të ndryshoni shkronjat vetëm nga të mëdha në të vogla ose anasjelltas, për shembull, për t’i bërë më të lexueshme user: chosen_languages: Në iu vëntë shenjë, te rrjedha kohore publike do të shfaqen vetëm mesazhe në gjuhët e përzgjedhura + role: Roli kontrollon cilat leje ka përdoruesi + user_role: + color: Ngjyrë për t’u përdorur për rolin nëpër UI, si RGB në format gjashtëmbëdhjetësh + highlighted: Kjo e bën rolin të dukshëm publikisht + name: Emër publik për rolin, nëse roli është ujdisur të shfaqet si një stemë + permissions_as_keys: Përdoruest me këtë rol do të mund të… + position: Role më të lartë vendosin zgjidhje përplasje në disa raste. Disa veprime mund të kryhen vetëm mbi role të një shkalle më të ulët webhook: events: Përzgjidhni akte për dërgim url: Ku do të dërgohen aktet @@ -181,6 +193,7 @@ sq: setting_use_pending_items: Mënyra ngadalë severity: Rëndësi sign_in_token_attempt: Kod sigurie + title: Titull type: Lloj importimi username: Emër përdoruesi username_or_email: Emër përdoruesi ose Email @@ -189,6 +202,10 @@ sq: with_dns_records: Përfshi zëra MX dhe IP-ra të përkatësisë featured_tag: name: Hashtag + filters: + actions: + hide: Fshihe plotësisht + warn: Fshihe me një sinjalizim interactions: must_be_follower: Blloko njoftime nga jo-ndjekës must_be_following: Blloko njoftime nga persona që s’i ndiqni @@ -222,6 +239,14 @@ sq: name: Hashtag trendable: Lejoje këtë hashtag të shfaqet në prirje usable: Lejoji mesazhet të përdorin këtë hashtag + user: + role: Rol + user_role: + color: Ngjyrë steme + highlighted: Shfaqe rolin si një stemë në profile përdoruesish + name: Emër + permissions_as_keys: Leje + position: Përparësi webhook: events: Akte të aktivizuar url: URL pikëmbarimi diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index a33e87593d7..3de5753e1dd 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -175,6 +175,7 @@ th: setting_use_pending_items: โหมดช้า severity: ความรุนแรง sign_in_token_attempt: รหัสความปลอดภัย + title: ชื่อเรื่อง type: ชนิดการนำเข้า username: ชื่อผู้ใช้ username_or_email: ชื่อผู้ใช้หรืออีเมล @@ -216,6 +217,11 @@ th: name: แฮชแท็ก trendable: อนุญาตให้แฮชแท็กนี้ปรากฏภายใต้แนวโน้ม usable: อนุญาตให้โพสต์ใช้แฮชแท็กนี้ + user: + role: บทบาท + user_role: + name: ชื่อ + permissions_as_keys: สิทธิอนุญาต webhook: url: URL ปลายทาง 'no': ไม่ diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index 93d0c20f0dc..d1124e3b6c1 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -102,7 +102,6 @@ tr: highlighted: Bu rolü herkese açık hale getirir name: Rolün, eğer rozet olarak görüntülenmesi ayarlandıysa kullanılacak herkese açık ismi permissions_as_keys: Bu role sahip kullanıcıların şunlara erişimi var... - position: Belirli durumlarda uyuşmazlığın çözümünde daha yüksek rol belirleyicidir webhook: events: Gönderilecek etkinlikleri seçin url: Olayların gönderileceği yer diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml index 8763e0226c7..ec43655e448 100644 --- a/config/locales/simple_form.uk.yml +++ b/config/locales/simple_form.uk.yml @@ -96,6 +96,13 @@ uk: name: Тут ви можете лише змінювати регістр літер, щоб підвищити читабельність user: chosen_languages: У глобальних стрічках будуть відображатися дмухи тільки обраними мовами + role: Роль визначає права користувача + user_role: + color: Колір, який буде використовуватися для ролі у всьому інтерфейсі, як RGB у форматі hex + highlighted: Це робить роль видимою всім + name: Загальнодоступна назва ролі, якщо роль налаштована бути показаною у вигляді відзнаки + permissions_as_keys: Користувачі з цією роллю матимуть доступ до... + position: Вища роль розв'язує конфлікти у певних ситуаціях. Певні дії можуть бути виконані лише щодо ролей з нижчим пріоритетом webhook: events: Оберіть події для надсилання url: Куди надсилатимуться події @@ -232,6 +239,14 @@ uk: name: Хештеґ trendable: Дозволити появу цього хештеґа у списку популярних хештеґів usable: Дозволити дмухам використовувати цей хештеґ + user: + role: Роль + user_role: + color: Колір відзнаки + highlighted: Показувати роль у вигляді відзнаки у профілях користувачів + name: Назва + permissions_as_keys: Дозволи + position: Пріоритет webhook: events: Увімкнені події url: URL кінцевої точки diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index 915bb4d24be..7bc43a0b068 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -102,7 +102,7 @@ vi: highlighted: Vai trò sẽ hiển thị công khai name: Tên công khai của vai trò, nếu vai trò được đặt để hiển thị dưới dạng huy hiệu permissions_as_keys: Người dùng có vai trò này sẽ có quyền truy cập vào... - position: Vai trò cao hơn quyết định việc giải quyết xung đột trong một số tình huống nhất định + position: Vai trò cao hơn sẽ có quyền quyết định xung đột trong các tình huống. Các vai trò có mức độ ưu tiên thấp hơn chỉ có thể thực hiện một số hành động nhất định webhook: events: Chọn sự kiện để gửi url: Nơi những sự kiện được gửi đến diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml index 0526df527f0..a3e29b3748f 100644 --- a/config/locales/simple_form.zh-TW.yml +++ b/config/locales/simple_form.zh-TW.yml @@ -102,7 +102,7 @@ zh-TW: highlighted: 這會讓角色公開可見 name: 角色的公開名稱,如果角色設定為顯示為徽章 permissions_as_keys: 有此角色的使用者將有權存取…… - position: 更高的角色決定在某些情況下解決衝突 + position: 在某些情況下,衝突的解決方式由更高階的角色決定。某些動作只能由優先程度較低的角色執行 webhook: events: 請選擇要傳送的事件 url: 事件會被傳送至何處 diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 5eaf0afee3b..e4c510308fd 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -686,6 +686,7 @@ sl: two: "%{count} uporabnika" categories: administration: Upravljanje + devops: Razvojniki invites: Povabila moderation: Moderiranje special: Posebno @@ -712,24 +713,33 @@ sl: manage_appeals_description: Omogoča uporabnikom, da pregledajo pritožbe glede dejanj moderiranja manage_blocks: Upravljaj blokirano manage_blocks_description: Omogoča uporabnikom, da blokirajo ponudnike e-pošte in naslove IP + manage_custom_emojis: Upravljaj emodžije po meri + manage_custom_emojis_description: Omogoča uporabnikom, da upravljajo emodžije po meri na strežniku + manage_federation: Upravljaj beli seznam + manage_federation_description: Omogoča uporabnikom blokirati ali dovoljevati vstop na beli seznam z druimi domenami ter nadzirati dostavljivost manage_invites: Upravljaj vabila manage_invites_description: Omogoča uporabnikom, da brskajo in deaktivirajo povezave povabil manage_reports: Upravljaj poročila manage_reports_description: Omogoča uporabnikom, da pregledajo poročila in glede le-teh opravijo dejanja moderiranja manage_roles: Upravljaj vloge + manage_roles_description: Omogoča uporabnikom upravljati in dodeljevati vloge pod svojo manage_rules: Upravljaj pravila manage_rules_description: Omogoča uporabnikom, da spremenijo pravila strežnika manage_settings: Upravljaj nastavitve manage_settings_description: Omogoča uporabnikom, da spremenijo nastavitve spletišča manage_taxonomies: Upravljaj taksonomije + manage_taxonomies_description: Omogoča uporabnikom, da preverijo vsebino v trendu in posodobijo nastavitve ključnikov manage_user_access: Upravljaj dostop uporabnikov + manage_user_access_description: Omogoča uporabnikom, da onemogočijo drugim uporabnikom dvofazno overjanje, spremenijo njihov e-naslov ter ponastavijo njihovo geslo manage_users: Upravljaj uporabnike manage_users_description: Omogoča uporabnikom, da vidijo podrobnosti drugih uporabnikov in nad njimi izvedejo dejanja moderiranja manage_webhooks: Upravljaj spletne zanke manage_webhooks_description: Omogoča uporabnikom, da vzpostavijo nove spletne zanke za skrbniške dogodke + view_audit_log: Pokaži revizijski zapisnik view_audit_log_description: Omogoča, da uporabnik vidi zgodovino skrbniških opravil na strežniku view_dashboard: Pokaži nadzorno ploščo view_dashboard_description: Omogoča uporabnikom, da dostopajo do nadzorne plošče in različnih meritev + view_devops: Razvojniki view_devops_description: Omogoča uporabnikom, da dostopajo do nadzornih plošč Sidekiq in phHero title: Vloge rules: diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 748072c29b1..8a91cc6f445 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -103,11 +103,17 @@ sq: avatar: Avatar by_domain: Përkatësi change_email: + changed_msg: Email-i u ndryshua me sukses! current_email: Email-i i tanishëm label: Ndrysho email-in new_email: Email i ri submit: Ndrysho email-in title: Ndrysho email-in për %{username} + change_role: + changed_msg: Roli u ndryshua me sukses! + label: Ndryshoni rol + no_role: Pa rol + title: Ndryshoni rolin për %{username} confirm: Ripohojeni confirmed: U ripohua confirming: Po ripohohet @@ -151,6 +157,7 @@ sq: active: Aktiv all: Krejt pending: Pezull + silenced: I kufizuar suspended: Të pezulluara title: Moderim moderation_notes: Shënime moderimesh @@ -158,6 +165,7 @@ sq: most_recent_ip: IP-ja më e freskët no_account_selected: S’u ndryshua ndonjë llogari, ngaqë s’u përzgjodh ndonjë no_limits_imposed: Pa imponim kufijsh + no_role_assigned: Pa rol të caktuar not_subscribed: Jo i pajtuar pending: Në pritje të shqyrtimit perform_full_suspension: Pezulloje @@ -184,6 +192,7 @@ sq: reset: Riktheje te parazgjedhjet reset_password: Ricaktoni fjalëkalimin resubscribe: Ripajtohuni + role: Rol search: Kërkoni search_same_email_domain: Të tjerë përdorues me të njëjtën përkatësi email-i search_same_ip: Të tjerë përdorues me të njëjtën IP @@ -639,6 +648,65 @@ sq: unresolved: Të pazgjidhur updated_at: U përditësua më view_profile: Shihni profilin + roles: + add_new: Shtoni rol + assigned_users: + one: "%{count} përdorues" + other: "%{count} përdorues" + categories: + administration: Administrim + invites: Ftesa + moderation: Moderim + special: Special + delete: Fshije + description_html: Me role përdoruesi, mund të përshtatni cilat funksione dhe fusha të Mastodon-it mund të përdorin përdoruesit tuaj. + edit: Përpunoni rolin e '%{name}' + everyone: Leje parazgjedhje + everyone_full_description_html: Ky është roli bazë që prek krejt përdoruesit, madje edhe ata pa një rol të caktuar. Krejt rolet e tjerë trashëgojnë lejet prej tij. + permissions_count: + one: "%{count} leje" + other: "%{count} leje" + privileges: + administrator: Përgjegjës + administrator_description: Përdoruesit me këtë leje do të anashkalojnë çdo leje + delete_user_data: Të Fshijë të Dhëna Përdoruesi + delete_user_data_description: U lejon përdoruesve të fshijnë pa humbur kohë të dhëna përdoruesish të tjerë + invite_users: Të Ftojë Përdorues + invite_users_description: U lejon përdruesve të ftojë te shërbyesi persona të rinj + manage_announcements: Të Administrojë Njoftime + manage_announcements_description: U lejon përdoruesve të administrojë njoftime te shërbyesi + manage_appeals: Të Administrojë Apelime + manage_appeals_description: U lejon përdoruesve të shqyrtojnë apelime kundër veprimesh moderimi + manage_blocks: Të Administrojë Bllokim + manage_blocks_description: U lejon përdoruesve të bllokojnë shërbime email dhe adresa IP + manage_custom_emojis: Të Administrojë Emoxhi Vetjake + manage_custom_emojis_description: U lejon përdoruesve të administrojnë te shërbyesi emoxhi vetjake + manage_federation: Të Administrjë Federim + manage_federation_description: U lejon përdoruesve të bllokojnë ose lejojnë federim me përkatësi të tjera dhe të kontrollojnë shpërndarjen + manage_invites: Të Administrojë Ftesa + manage_invites_description: U lejon përdoruesve të shfletojnë dhe çaktivizojnë lidhje ftesash + manage_reports: Të Administrojë Raportime + manage_reports_description: U lejon përdruesve të shqyrtojnë raportime dhe kryejnë veprime moderimi ndaj tyre + manage_roles: Të Administrojë Role + manage_roles_description: U lejon përdoruesve të administrojnë dhe caktojnë role nën të tyret + manage_rules: Të Administrojë Rregulla + manage_rules_description: U lejon përdoruesve të ndryshojnë rregulla shërbyesi + manage_settings: Të Administrojë Rregullime + manage_settings_description: U lejon përdoruesve të ndryshojnë rregullime sajti + manage_taxonomies: Të Administrojë Klasifikime + manage_taxonomies_description: U lejon përdoruesve të shqyrtojnë lëndë në modë dhe të përditësojnë rregullime hashtag-ësh + manage_user_access: Të Administrojë Hyrje Përdoruesi + manage_user_access_description: U lejon përdoruesve të çaktivizojnë mirëfilltësim dyfaktorësh për përdorues të tjerë, të ndryshojnë adresa të tyret email dhe të ricaktojnë fjalëkalimet e tyre + manage_users: Të Administrojë Përdorues + manage_users_description: U lejon përdoruesve të shohin hollësi përdoruesish të tjerë dhe të kryejnë veprime moderimi mbi ta + manage_webhooks: Të Administrojë Webhook-e + manage_webhooks_description: U lejon përdoruesve të ujdisin webhook-e për veprime administrative + view_audit_log: Shihni Regjistër Auditimesh + view_audit_log_description: U lejon përdoruesve të shohin një historik veprimesh administrative te shërbyesi + view_dashboard: Shihni Pultin + view_dashboard_description: U lejon përdoruesve të hyjnë te pulti dhe shohin shifra të ndryshme matjesh + view_devops_description: U lejon përdoruesve të hyjnë në pultet Sidekiq dhe pgHero + title: Role rules: add_new: Shtoni rregull delete: Fshije @@ -852,6 +920,7 @@ sq: secret: E fshehtë nënshkrimesh status: Gjendje title: Webhook-ë + webhook: Webhook admin_mailer: new_appeal: actions: @@ -1101,14 +1170,24 @@ sq: public: Rrjedha kohore publike thread: Biseda edit: + add_keyword: Shtoni fjalëkyç + keywords: Fjalëkyçe title: Përpunoni filtër errors: + deprecated_api_multiple_keywords: Këta parametra s’mund të ndryshohen nga ky aplikacion, ngaqë aplikohen mbi më shumë se një fjalëkyç filtri. Përdorni një aplikacion më të ri, ose ndërfaqen web. invalid_context: Ose s’u dha fare, ose u dha kontekst i pavlefshëm index: + contexts: Filtra në %{contexts} delete: Fshije empty: S’keni filtra. + expires_in: Skadon për %{distance} + expires_on: Skadon më %{date} + keywords: + one: "%{count} fjalëkyç" + other: "%{count} fjalëkyçe" title: Filtra new: + save: Ruani filtër të ri title: Shtoni filtër të ri footer: developers: Zhvillues @@ -1227,6 +1306,8 @@ sq: copy_account_note_text: 'Ky përdorues ka ikur prej %{acct}, ja ku janë shënimet tuaja të mëparshme mbi të:' notification_mailer: admin: + report: + subject: "%{name} parashtroi një raportim" sign_up: subject: "%{name} u regjistrua" digest: diff --git a/config/locales/th.yml b/config/locales/th.yml index 9963825438e..d48d4ddb34a 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -94,11 +94,17 @@ th: avatar: ภาพประจำตัว by_domain: โดเมน change_email: + changed_msg: เปลี่ยนอีเมลสำเร็จ! current_email: อีเมลปัจจุบัน label: เปลี่ยนอีเมล new_email: อีเมลใหม่ submit: เปลี่ยนอีเมล title: เปลี่ยนอีเมลสำหรับ %{username} + change_role: + changed_msg: เปลี่ยนบทบาทสำเร็จ! + label: เปลี่ยนบทบาท + no_role: ไม่มีบทบาท + title: เปลี่ยนบทบาทสำหรับ %{username} confirm: ยืนยัน confirmed: ยืนยันแล้ว confirming: กำลังยืนยัน @@ -142,6 +148,7 @@ th: active: ใช้งานอยู่ all: ทั้งหมด pending: รอดำเนินการ + silenced: จำกัดอยู่ suspended: ระงับอยู่ title: การควบคุม moderation_notes: หมายเหตุการควบคุม @@ -174,6 +181,7 @@ th: reset: รีเซ็ต reset_password: ตั้งรหัสผ่านใหม่ resubscribe: บอกรับใหม่ + role: บทบาท search: ค้นหา search_same_email_domain: ผู้ใช้อื่น ๆ ที่มีโดเมนอีเมลเดียวกัน search_same_ip: ผู้ใช้อื่น ๆ ที่มี IP เดียวกัน @@ -587,6 +595,23 @@ th: unresolved: ยังไม่ได้แก้ปัญหา updated_at: อัปเดตเมื่อ view_profile: ดูโปรไฟล์ + roles: + add_new: เพิ่มบทบาท + assigned_users: + other: "%{count} ผู้ใช้" + categories: + administration: การดูแล + invites: คำเชิญ + moderation: การควบคุม + special: พิเศษ + delete: ลบ + edit: แก้ไขบทบาท '%{name}' + everyone: สิทธิอนุญาตเริ่มต้น + permissions_count: + other: "%{count} สิทธิอนุญาต" + privileges: + manage_roles: จัดการบทบาท + title: บทบาท rules: add_new: เพิ่มกฎ delete: ลบ @@ -1017,12 +1042,20 @@ th: public: เส้นเวลาสาธารณะ thread: การสนทนา edit: + add_keyword: เพิ่มคำสำคัญ + keywords: คำสำคัญ title: แก้ไขตัวกรอง index: + contexts: กรองใน %{contexts} delete: ลบ empty: คุณไม่มีตัวกรอง + expires_in: หมดอายุใน %{distance} + expires_on: หมดอายุเมื่อ %{date} + keywords: + other: "%{count} คำสำคัญ" title: ตัวกรอง new: + save: บันทึกตัวกรองใหม่ title: เพิ่มตัวกรองใหม่ footer: developers: นักพัฒนา @@ -1127,6 +1160,8 @@ th: copy_account_note_text: 'ผู้ใช้นี้ได้ย้ายจาก %{acct} นี่คือหมายเหตุก่อนหน้านี้ของคุณเกี่ยวกับผู้ใช้:' notification_mailer: admin: + report: + subject: "%{name} ได้ส่งรายงาน" sign_up: subject: "%{name} ได้ลงทะเบียน" digest: diff --git a/config/locales/uk.yml b/config/locales/uk.yml index e29c59cb6cc..708ce998e4e 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -109,11 +109,17 @@ uk: avatar: Аватар by_domain: Домен change_email: + changed_msg: Адресу електронної пошти успішно змінено! current_email: Поточна адреса електронної пошти label: Змінити адресу електронної пошти new_email: Нова адреса електронної пошти submit: Змінити адресу електронної пошти title: Змінити адресу електронної пошти для %{username} + change_role: + changed_msg: Роль успішно змінено! + label: Змінити роль + no_role: Немає ролі + title: Змінити роль для %{username} confirm: Зберегти confirmed: Збережено confirming: Зберігається @@ -157,6 +163,7 @@ uk: active: Активний all: Усі pending: Очікують + silenced: Обмежені suspended: Призупинені title: Модерація moderation_notes: Нотатки модераторів @@ -164,6 +171,7 @@ uk: most_recent_ip: Останній IP no_account_selected: Жоден обліковий запис не було змінено, оскільки жоден не було вибрано no_limits_imposed: Жодних обмежень не накладено + no_role_assigned: Роль не призначено not_subscribed: Не підписані pending: Відгук в очікуванні perform_full_suspension: Призупинити @@ -192,6 +200,7 @@ uk: reset: Скинути reset_password: Скинути пароль resubscribe: Перепідписатися + role: Роль search: Пошук search_same_email_domain: Інші користувачі з тим самим поштовим доменом search_same_ip: Інші користувачі з тим самим IP @@ -655,6 +664,71 @@ uk: unresolved: Невирішені updated_at: Оновлені view_profile: Переглянути профіль + roles: + add_new: Додати роль + assigned_users: + few: "%{count} користувачі" + many: "%{count} користувачів" + one: "%{count} користувач" + other: "%{count} користувача" + categories: + administration: Адміністрування + devops: DevOps + invites: Запрошення + moderation: Модерація + special: Спеціальні + delete: Видалити + description_html: За допомогою ролі користувача, ви можете налаштувати, до яких функцій і місць можуть доступатися ваші користувачі Mastodon. + edit: Змінити роль «%{name}» + everyone: Типові дозволи + everyone_full_description_html: Це базова роль, яка впливає на всіх користувачів, навіть ті, яким не призначені ролі. Усі інші ролі успадковують її дозволи. + permissions_count: + few: "%{count} дозволи" + many: "%{count} дозволів" + one: "%{count} дозвіл" + other: "%{count} дозволи" + privileges: + administrator: Адміністратор + administrator_description: Користувачі з цим дозволом обходять усі дозволи + delete_user_data: Видаляти дані користувача + delete_user_data_description: Дозволяє користувачам видаляти дані інших користувачів без затримок + invite_users: Запрошувати користувачів + invite_users_description: Дозволяє користувачам запрошувати нових людей на сервер + manage_announcements: Керувати оголошеннями + manage_announcements_description: Дозволяє користувачам керувати оголошеннями на сервері + manage_appeals: Керувати оскарженнями + manage_appeals_description: Дозволяє користувачам розглядати оскарження дій модерації + manage_blocks: Керувати блокуваннями + manage_blocks_description: Дозволяє користувачам блокувати постачальників е-пошти та IP-адреси + manage_custom_emojis: Керувати користувацькими емоджі + manage_custom_emojis_description: Дозволяє користувачам керувати користувацькими емоджі на сервері + manage_federation: Керувати федерацією + manage_federation_description: Дозволяє користувачам блокувати або дозволяти федерацію з іншими доменами й керувати можливостями доставлення + manage_invites: Керувати запрошеннями + manage_invites_description: Дозволяє користувачам переглядати й деактивувати запрошувальні посилання + manage_reports: Керувати скаргами + manage_reports_description: Дозволяє користувачам переглядати скарги та виконувати відповідні дії модерації + manage_roles: Керувати ролями + manage_roles_description: Дозволяє користувачам керувати та призначати ролі, нижчі за свій рівень + manage_rules: Керувати правилами + manage_rules_description: Дозволяє користувачам змінювати правила сервера + manage_settings: Керування налаштуваннями + manage_settings_description: Дозволяє користувачам змінювати налаштування сайту + manage_taxonomies: Керувати таксономіями + manage_taxonomies_description: Дозволяє користувачам переглядати актуальні налаштування вмісту й оновити хештеґ + manage_user_access: Керувати доступом користувачів + manage_user_access_description: Дозволяє користувачам вимкнути двоетапну перевірку інших користувачів, змінити їхню адресу електронної пошти та відновити пароль + manage_users: Керувати користувачами + manage_users_description: Дозволяє користувачам переглядати подробиці інших користувачів і виконувати їхню модерацію + manage_webhooks: Керувати Webhooks + manage_webhooks_description: Дозволяє користувачам налаштовувати вебхуки для адміністративних подій + view_audit_log: Переглядати журнал перевірки + view_audit_log_description: Дозволяє користувачам бачити історію адміністративних дій на сервері + view_dashboard: Переглядати панель керування + view_dashboard_description: Дозволяє користувачам доступ до панелі керування та різних метрик + view_devops: DevOps + view_devops_description: Дозволяє користувачам доступ до Sidekiq і панелі pgHero + title: Ролі rules: add_new: Додати правило delete: Видалити @@ -849,7 +923,7 @@ uk: delete: Видалити edit_preset: Редагувати шаблон попередження empty: Ви ще не визначили жодних попереджень. - title: Управління шаблонами попереджень + title: Керування шаблонами попереджень webhooks: add_new: Додати кінцеву точку delete: Видалити From 05e39dc6199c609d200d546fed8a6a560659aa06 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Jul 2022 10:21:28 +0900 Subject: [PATCH 101/646] Bump oj from 3.13.15 to 3.13.16 (#18797) Bumps [oj](https://github.com/ohler55/oj) from 3.13.15 to 3.13.16. - [Release notes](https://github.com/ohler55/oj/releases) - [Changelog](https://github.com/ohler55/oj/blob/develop/CHANGELOG.md) - [Commits](https://github.com/ohler55/oj/compare/v3.13.15...v3.13.16) --- updated-dependencies: - dependency-name: oj dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 9b610400498..f68442d4398 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -413,7 +413,7 @@ GEM concurrent-ruby (~> 1.0, >= 1.0.2) sidekiq (>= 3.5) statsd-ruby (~> 1.4, >= 1.4.0) - oj (3.13.15) + oj (3.13.16) omniauth (1.9.1) hashie (>= 3.4.6) rack (>= 1.6.2, < 3) From ecb3bb3256fe1bab0d7a63829cdce914b2b509a9 Mon Sep 17 00:00:00 2001 From: Claire Date: Sun, 17 Jul 2022 13:37:30 +0200 Subject: [PATCH 102/646] Add support for editing labelling of one's own role (#18812) Still disallow edition of rank or permissions --- app/models/user_role.rb | 7 +++++++ app/policies/user_role_policy.rb | 2 +- app/views/admin/roles/_form.html.haml | 23 +++++++++++++---------- config/locales/activerecord.en.yml | 2 ++ 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/app/models/user_role.rb b/app/models/user_role.rb index 833b96d719f..57a56c0b085 100644 --- a/app/models/user_role.rb +++ b/app/models/user_role.rb @@ -90,6 +90,7 @@ class UserRole < ApplicationRecord validate :validate_permissions_elevation validate :validate_position_elevation validate :validate_dangerous_permissions + validate :validate_own_role_edition before_validation :set_position @@ -165,6 +166,12 @@ class UserRole < ApplicationRecord self.position = -1 if everyone? end + def validate_own_role_edition + return unless defined?(@current_account) && @current_account.user_role.id == id + errors.add(:permissions_as_keys, :own_role) if permissions_changed? + errors.add(:position, :own_role) if position_changed? + end + def validate_permissions_elevation errors.add(:permissions_as_keys, :elevated) if defined?(@current_account) && @current_account.user_role.computed_permissions & permissions != permissions end diff --git a/app/policies/user_role_policy.rb b/app/policies/user_role_policy.rb index 7019637fcc3..6144a0ec4a9 100644 --- a/app/policies/user_role_policy.rb +++ b/app/policies/user_role_policy.rb @@ -10,7 +10,7 @@ class UserRolePolicy < ApplicationPolicy end def update? - role.can?(:manage_roles) && role.overrides?(record) + role.can?(:manage_roles) && (role.overrides?(record) || role.id == record.id) end def destroy? diff --git a/app/views/admin/roles/_form.html.haml b/app/views/admin/roles/_form.html.haml index 99a211eeae8..9beaf619fa5 100644 --- a/app/views/admin/roles/_form.html.haml +++ b/app/views/admin/roles/_form.html.haml @@ -8,8 +8,9 @@ .fields-group = f.input :name, wrapper: :with_label - .fields-group - = f.input :position, wrapper: :with_label, input_html: { max: current_user.role.position - 1 } + - unless current_user.role.id == @role.id + .fields-group + = f.input :position, wrapper: :with_label, input_html: { max: current_user.role.position - 1 } .fields-group = f.input :color, wrapper: :with_label, input_html: { placeholder: '#000000' } @@ -21,17 +22,19 @@ %hr.spacer/ - .field-group - .input.with_block_label - %label= t('simple_form.labels.user_role.permissions_as_keys') - %span.hint= t('simple_form.hints.user_role.permissions_as_keys') + - unless current_user.role.id == @role.id - - (@role.everyone? ? UserRole::Flags::CATEGORIES.slice(:invites) : UserRole::Flags::CATEGORIES).each do |category, permissions| - %h4= t(category, scope: 'admin.roles.categories') + .field-group + .input.with_block_label + %label= t('simple_form.labels.user_role.permissions_as_keys') + %span.hint= t('simple_form.hints.user_role.permissions_as_keys') - = f.input :permissions_as_keys, collection: permissions, wrapper: :with_block_label, include_blank: false, label_method: lambda { |privilege| safe_join([t("admin.roles.privileges.#{privilege}"), content_tag(:span, t("admin.roles.privileges.#{privilege}_description"), class: 'hint')]) }, required: false, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', label: false, hint: false, disabled: permissions.filter { |privilege| UserRole::FLAGS[privilege] & current_user.role.computed_permissions == 0 } + - (@role.everyone? ? UserRole::Flags::CATEGORIES.slice(:invites) : UserRole::Flags::CATEGORIES).each do |category, permissions| + %h4= t(category, scope: 'admin.roles.categories') - %hr.spacer/ + = f.input :permissions_as_keys, collection: permissions, wrapper: :with_block_label, include_blank: false, label_method: lambda { |privilege| safe_join([t("admin.roles.privileges.#{privilege}"), content_tag(:span, t("admin.roles.privileges.#{privilege}_description"), class: 'hint')]) }, required: false, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', label: false, hint: false, disabled: permissions.filter { |privilege| UserRole::FLAGS[privilege] & current_user.role.computed_permissions == 0 } + + %hr.spacer/ .actions = f.button :button, @role.new_record? ? t('admin.roles.add_new') : t('generic.save_changes'), type: :submit diff --git a/config/locales/activerecord.en.yml b/config/locales/activerecord.en.yml index daeed58b8a6..2dfa3b955ef 100644 --- a/config/locales/activerecord.en.yml +++ b/config/locales/activerecord.en.yml @@ -45,5 +45,7 @@ en: permissions_as_keys: dangerous: include permissions that are not safe for the base role elevated: cannot include permissions your current role does not possess + own_role: cannot be changed with your current role position: elevated: cannot be higher than your current role + own_role: cannot be changed with your current role From c3f0621a59a74d0e20e6db6170894871c48e8f0f Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 17 Jul 2022 13:49:29 +0200 Subject: [PATCH 103/646] Add ability to follow hashtags (#18809) --- .../featured_tags/suggestions_controller.rb | 2 +- .../api/v1/followed_tags_controller.rb | 52 ++++++++++++ app/controllers/api/v1/tags_controller.rb | 29 +++++++ .../api/v1/trends/tags_controller.rb | 2 +- app/lib/feed_manager.rb | 36 +++++--- app/models/tag.rb | 5 +- app/models/tag_follow.rb | 24 ++++++ app/presenters/tag_relationships_presenter.rb | 15 ++++ app/serializers/rest/tag_serializer.rb | 14 ++++ app/services/fan_out_on_write_service.rb | 15 +++- app/workers/feed_insert_worker.rb | 8 +- config/routes.rb | 9 ++ .../20220714171049_create_tag_follows.rb | 12 +++ db/schema.rb | 13 ++- .../api/v1/followed_tags_controller_spec.rb | 23 ++++++ .../api/v1/tags_controller_spec.rb | 82 +++++++++++++++++++ spec/fabricators/tag_follow_fabricator.rb | 4 + spec/models/tag_follow_spec.rb | 4 + 18 files changed, 329 insertions(+), 20 deletions(-) create mode 100644 app/controllers/api/v1/followed_tags_controller.rb create mode 100644 app/controllers/api/v1/tags_controller.rb create mode 100644 app/models/tag_follow.rb create mode 100644 app/presenters/tag_relationships_presenter.rb create mode 100644 db/migrate/20220714171049_create_tag_follows.rb create mode 100644 spec/controllers/api/v1/followed_tags_controller_spec.rb create mode 100644 spec/controllers/api/v1/tags_controller_spec.rb create mode 100644 spec/fabricators/tag_follow_fabricator.rb create mode 100644 spec/models/tag_follow_spec.rb diff --git a/app/controllers/api/v1/featured_tags/suggestions_controller.rb b/app/controllers/api/v1/featured_tags/suggestions_controller.rb index 75545d3c7f7..76633210a1d 100644 --- a/app/controllers/api/v1/featured_tags/suggestions_controller.rb +++ b/app/controllers/api/v1/featured_tags/suggestions_controller.rb @@ -6,7 +6,7 @@ class Api::V1::FeaturedTags::SuggestionsController < Api::BaseController before_action :set_recently_used_tags, only: :index def index - render json: @recently_used_tags, each_serializer: REST::TagSerializer + render json: @recently_used_tags, each_serializer: REST::TagSerializer, relationships: TagRelationshipsPresenter.new(@recently_used_tags, current_user&.account_id) end private diff --git a/app/controllers/api/v1/followed_tags_controller.rb b/app/controllers/api/v1/followed_tags_controller.rb new file mode 100644 index 00000000000..f0dfd044cc0 --- /dev/null +++ b/app/controllers/api/v1/followed_tags_controller.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +class Api::V1::FollowedTagsController < Api::BaseController + TAGS_LIMIT = 100 + + before_action -> { doorkeeper_authorize! :follow, :read, :'read:follows' }, except: :show + before_action :require_user! + before_action :set_results + + after_action :insert_pagination_headers, only: :show + + def index + render json: @results.map(&:tag), each_serializer: REST::TagSerializer, relationships: TagRelationshipsPresenter.new(@results.map(&:tag), current_user&.account_id) + end + + private + + def set_results + @results = TagFollow.where(account: current_account).joins(:tag).eager_load(:tag).to_a_paginated_by_id( + limit_param(TAGS_LIMIT), + params_slice(:max_id, :since_id, :min_id) + ) + end + + def insert_pagination_headers + set_pagination_headers(next_path, prev_path) + end + + def next_path + api_v1_followed_tags_url pagination_params(max_id: pagination_max_id) if records_continue? + end + + def prev_path + api_v1_followed_tags_url pagination_params(since_id: pagination_since_id) unless @results.empty? + end + + def pagination_max_id + @results.last.id + end + + def pagination_since_id + @results.first.id + end + + def records_continue? + @results.size == limit_param(TAG_LIMIT) + end + + def pagination_params(core_params) + params.slice(:limit).permit(:limit).merge(core_params) + end +end diff --git a/app/controllers/api/v1/tags_controller.rb b/app/controllers/api/v1/tags_controller.rb new file mode 100644 index 00000000000..d45015ff5a0 --- /dev/null +++ b/app/controllers/api/v1/tags_controller.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +class Api::V1::TagsController < Api::BaseController + before_action -> { doorkeeper_authorize! :follow, :write, :'write:follows' }, except: :show + before_action :require_user!, except: :show + before_action :set_or_create_tag + + override_rate_limit_headers :follow, family: :follows + + def show + render json: @tag, serializer: REST::TagSerializer + end + + def follow + TagFollow.create!(tag: @tag, account: current_account, rate_limit: true) + render json: @tag, serializer: REST::TagSerializer + end + + def unfollow + TagFollow.find_by(account: current_account, tag: @tag)&.destroy! + render json: @tag, serializer: REST::TagSerializer + end + + private + + def set_or_create_tag + @tag = Tag.find_normalized(params[:id]) || Tag.new(name: Tag.normalize(params[:id]), display_name: params[:id]) + end +end diff --git a/app/controllers/api/v1/trends/tags_controller.rb b/app/controllers/api/v1/trends/tags_controller.rb index 41f9ffac19e..21adfa2a1fc 100644 --- a/app/controllers/api/v1/trends/tags_controller.rb +++ b/app/controllers/api/v1/trends/tags_controller.rb @@ -8,7 +8,7 @@ class Api::V1::Trends::TagsController < Api::BaseController DEFAULT_TAGS_LIMIT = 10 def index - render json: @tags, each_serializer: REST::TagSerializer + render json: @tags, each_serializer: REST::TagSerializer, relationships: TagRelationshipsPresenter.new(@tags, current_user&.account_id) end private diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index 2eb4ba2f4df..145352fe8e8 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -45,6 +45,8 @@ class FeedManager filter_from_list?(status, receiver) || filter_from_home?(status, receiver.account_id, build_crutches(receiver.account_id, [status])) when :mentions filter_from_mentions?(status, receiver.id) + when :tags + filter_from_tags?(status, receiver.id, build_crutches(receiver.id, [status])) else false end @@ -56,7 +58,7 @@ class FeedManager # @param [Boolean] update # @return [Boolean] def push_to_home(account, status, update: false) - return false unless add_to_feed(:home, account.id, status, account.user&.aggregates_reblogs?) + return false unless add_to_feed(:home, account.id, status, aggregate_reblogs: account.user&.aggregates_reblogs?) trim(:home, account.id) PushUpdateWorker.perform_async(account.id, status.id, "timeline:#{account.id}", { 'update' => update }) if push_update_required?("timeline:#{account.id}") @@ -69,7 +71,7 @@ class FeedManager # @param [Boolean] update # @return [Boolean] def unpush_from_home(account, status, update: false) - return false unless remove_from_feed(:home, account.id, status, account.user&.aggregates_reblogs?) + return false unless remove_from_feed(:home, account.id, status, aggregate_reblogs: account.user&.aggregates_reblogs?) redis.publish("timeline:#{account.id}", Oj.dump(event: :delete, payload: status.id.to_s)) unless update true @@ -81,7 +83,7 @@ class FeedManager # @param [Boolean] update # @return [Boolean] def push_to_list(list, status, update: false) - return false if filter_from_list?(status, list) || !add_to_feed(:list, list.id, status, list.account.user&.aggregates_reblogs?) + return false if filter_from_list?(status, list) || !add_to_feed(:list, list.id, status, aggregate_reblogs: list.account.user&.aggregates_reblogs?) trim(:list, list.id) PushUpdateWorker.perform_async(list.account_id, status.id, "timeline:list:#{list.id}", { 'update' => update }) if push_update_required?("timeline:list:#{list.id}") @@ -94,7 +96,7 @@ class FeedManager # @param [Boolean] update # @return [Boolean] def unpush_from_list(list, status, update: false) - return false unless remove_from_feed(:list, list.id, status, list.account.user&.aggregates_reblogs?) + return false unless remove_from_feed(:list, list.id, status, aggregate_reblogs: list.account.user&.aggregates_reblogs?) redis.publish("timeline:list:#{list.id}", Oj.dump(event: :delete, payload: status.id.to_s)) unless update true @@ -120,7 +122,7 @@ class FeedManager statuses.each do |status| next if filter_from_home?(status, into_account.id, crutches) - add_to_feed(:home, into_account.id, status, aggregate) + add_to_feed(:home, into_account.id, status, aggregate_reblogs: aggregate) end trim(:home, into_account.id) @@ -146,7 +148,7 @@ class FeedManager statuses.each do |status| next if filter_from_home?(status, list.account_id, crutches) || filter_from_list?(status, list) - add_to_feed(:list, list.id, status, aggregate) + add_to_feed(:list, list.id, status, aggregate_reblogs: aggregate) end trim(:list, list.id) @@ -161,7 +163,7 @@ class FeedManager timeline_status_ids = redis.zrange(timeline_key, 0, -1) from_account.statuses.select('id, reblog_of_id').where(id: timeline_status_ids).reorder(nil).find_each do |status| - remove_from_feed(:home, into_account.id, status, into_account.user&.aggregates_reblogs?) + remove_from_feed(:home, into_account.id, status, aggregate_reblogs: into_account.user&.aggregates_reblogs?) end end @@ -174,7 +176,7 @@ class FeedManager timeline_status_ids = redis.zrange(timeline_key, 0, -1) from_account.statuses.select('id, reblog_of_id').where(id: timeline_status_ids).reorder(nil).find_each do |status| - remove_from_feed(:list, list.id, status, list.account.user&.aggregates_reblogs?) + remove_from_feed(:list, list.id, status, aggregate_reblogs: list.account.user&.aggregates_reblogs?) end end @@ -237,7 +239,7 @@ class FeedManager timeline_key = key(:home, account.id) account.statuses.limit(limit).each do |status| - add_to_feed(:home, account.id, status, aggregate) + add_to_feed(:home, account.id, status, aggregate_reblogs: aggregate) end account.following.includes(:account_stat).find_each do |target_account| @@ -257,7 +259,7 @@ class FeedManager statuses.each do |status| next if filter_from_home?(status, account.id, crutches) - add_to_feed(:home, account.id, status, aggregate) + add_to_feed(:home, account.id, status, aggregate_reblogs: aggregate) end trim(:home, account.id) @@ -416,6 +418,16 @@ class FeedManager false end + # Check if a status should not be added to the home feed when it comes + # from a followed hashtag + # @param [Status] status + # @param [Integer] receiver_id + # @param [Hash] crutches + # @return [Boolean] + def filter_from_tags?(status, receiver_id, crutches) + receiver_id != status.account_id && (((crutches[:active_mentions][status.id] || []) + [status.account_id]).any? { |target_account_id| crutches[:blocking][target_account_id] || crutches[:muting][target_account_id] } || crutches[:blocked_by][status.account_id] || crutches[:domain_blocking][status.account.domain]) + end + # Adds a status to an account's feed, returning true if a status was # added, and false if it was not added to the feed. Note that this is # an internal helper: callers must call trim or push updates if @@ -425,7 +437,7 @@ class FeedManager # @param [Status] status # @param [Boolean] aggregate_reblogs # @return [Boolean] - def add_to_feed(timeline_type, account_id, status, aggregate_reblogs = true) + def add_to_feed(timeline_type, account_id, status, aggregate_reblogs: true) timeline_key = key(timeline_type, account_id) reblog_key = key(timeline_type, account_id, 'reblogs') @@ -473,7 +485,7 @@ class FeedManager # @param [Status] status # @param [Boolean] aggregate_reblogs # @return [Boolean] - def remove_from_feed(timeline_type, account_id, status, aggregate_reblogs = true) + def remove_from_feed(timeline_type, account_id, status, aggregate_reblogs: true) timeline_key = key(timeline_type, account_id) reblog_key = key(timeline_type, account_id, 'reblogs') diff --git a/app/models/tag.rb b/app/models/tag.rb index f078007f24f..eebf3b47dde 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -22,13 +22,16 @@ class Tag < ApplicationRecord has_and_belongs_to_many :statuses has_and_belongs_to_many :accounts + has_many :passive_relationships, class_name: 'TagFollow', inverse_of: :tag, dependent: :destroy has_many :featured_tags, dependent: :destroy, inverse_of: :tag + has_many :followers, through: :passive_relationships, source: :account HASHTAG_SEPARATORS = "_\u00B7\u200c" HASHTAG_NAME_RE = "([[:alnum:]_][[:alnum:]#{HASHTAG_SEPARATORS}]*[[:alpha:]#{HASHTAG_SEPARATORS}][[:alnum:]#{HASHTAG_SEPARATORS}]*[[:alnum:]_])|([[:alnum:]_]*[[:alpha:]][[:alnum:]_]*)" HASHTAG_RE = /(?:^|[^\/\)\w])#(#{HASHTAG_NAME_RE})/i validates :name, presence: true, format: { with: /\A(#{HASHTAG_NAME_RE})\z/i } + validates :display_name, format: { with: /\A(#{HASHTAG_NAME_RE})\z/i } validate :validate_name_change, if: -> { !new_record? && name_changed? } validate :validate_display_name_change, if: -> { !new_record? && display_name_changed? } @@ -99,7 +102,7 @@ class Tag < ApplicationRecord names = Array(name_or_names).map { |str| [normalize(str), str] }.uniq(&:first) names.map do |(normalized_name, display_name)| - tag = matching_name(normalized_name).first || create(name: normalized_name, display_name: display_name) + tag = matching_name(normalized_name).first || create(name: normalized_name, display_name: display_name.gsub(/[^[:alnum:]#{HASHTAG_SEPARATORS}]/, '')) yield tag if block_given? diff --git a/app/models/tag_follow.rb b/app/models/tag_follow.rb new file mode 100644 index 00000000000..abe36cd1710 --- /dev/null +++ b/app/models/tag_follow.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: tag_follows +# +# id :bigint(8) not null, primary key +# tag_id :bigint(8) not null +# account_id :bigint(8) not null +# created_at :datetime not null +# updated_at :datetime not null +# + +class TagFollow < ApplicationRecord + include RateLimitable + include Paginable + + belongs_to :tag + belongs_to :account + + accepts_nested_attributes_for :tag + + rate_limit by: :account, family: :follows +end diff --git a/app/presenters/tag_relationships_presenter.rb b/app/presenters/tag_relationships_presenter.rb new file mode 100644 index 00000000000..c3bdbaf0714 --- /dev/null +++ b/app/presenters/tag_relationships_presenter.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class TagRelationshipsPresenter + attr_reader :following_map + + def initialize(tags, current_account_id = nil, **options) + @following_map = begin + if current_account_id.nil? + {} + else + TagFollow.select(:tag_id).where(tag_id: tags.map(&:id), account_id: current_account_id).each_with_object({}) { |f, h| h[f.tag_id] = true }.merge(options[:following_map] || {}) + end + end + end +end diff --git a/app/serializers/rest/tag_serializer.rb b/app/serializers/rest/tag_serializer.rb index 52bfaa4ce4e..7801e77d1fe 100644 --- a/app/serializers/rest/tag_serializer.rb +++ b/app/serializers/rest/tag_serializer.rb @@ -5,6 +5,8 @@ class REST::TagSerializer < ActiveModel::Serializer attributes :name, :url, :history + attribute :following, if: :current_user? + def url tag_url(object) end @@ -12,4 +14,16 @@ class REST::TagSerializer < ActiveModel::Serializer def name object.display_name end + + def following + if instance_options && instance_options[:relationships] + instance_options[:relationships].following_map[object.id] || false + else + TagFollow.where(tag_id: object.id, account_id: current_user.account_id).exists? + end + end + + def current_user? + !current_user.nil? + end end diff --git a/app/services/fan_out_on_write_service.rb b/app/services/fan_out_on_write_service.rb index de5c5ebe440..ce20a146e9f 100644 --- a/app/services/fan_out_on_write_service.rb +++ b/app/services/fan_out_on_write_service.rb @@ -16,6 +16,7 @@ class FanOutOnWriteService < BaseService check_race_condition! fan_out_to_local_recipients! + fan_out_to_public_recipients! if broadcastable? fan_out_to_public_streams! if broadcastable? end @@ -50,6 +51,10 @@ class FanOutOnWriteService < BaseService end end + def fan_out_to_public_recipients! + deliver_to_hashtag_followers! + end + def fan_out_to_public_streams! broadcast_to_hashtag_streams! broadcast_to_public_streams! @@ -83,6 +88,14 @@ class FanOutOnWriteService < BaseService end end + def deliver_to_hashtag_followers! + TagFollow.where(tag_id: @status.tags.map(&:id)).select(:id, :account_id).reorder(nil).find_in_batches do |follows| + FeedInsertWorker.push_bulk(follows) do |follow| + [@status.id, follow.account_id, 'tags', { 'update' => update? }] + end + end + end + def deliver_to_lists! @account.lists_for_local_distribution.select(:id).reorder(nil).find_in_batches do |lists| FeedInsertWorker.push_bulk(lists) do |list| @@ -100,7 +113,7 @@ class FanOutOnWriteService < BaseService end def broadcast_to_hashtag_streams! - @status.tags.pluck(:name).each do |hashtag| + @status.tags.map(&:name).each do |hashtag| redis.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}", anonymous_payload) redis.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}:local", anonymous_payload) if @status.local? end diff --git a/app/workers/feed_insert_worker.rb b/app/workers/feed_insert_worker.rb index 40bc9cb6e26..758cebd4ba7 100644 --- a/app/workers/feed_insert_worker.rb +++ b/app/workers/feed_insert_worker.rb @@ -9,7 +9,7 @@ class FeedInsertWorker @options = options.symbolize_keys case @type - when :home + when :home, :tags @follower = Account.find(id) when :list @list = List.find(id) @@ -36,6 +36,8 @@ class FeedInsertWorker case @type when :home FeedManager.instance.filter?(:home, @status, @follower) + when :tags + FeedManager.instance.filter?(:tags, @status, @follower) when :list FeedManager.instance.filter?(:list, @status, @list) end @@ -49,7 +51,7 @@ class FeedInsertWorker def perform_push case @type - when :home + when :home, :tags FeedManager.instance.push_to_home(@follower, @status, update: update?) when :list FeedManager.instance.push_to_list(@list, @status, update: update?) @@ -58,7 +60,7 @@ class FeedInsertWorker def perform_unpush case @type - when :home + when :home, :tags FeedManager.instance.unpush_from_home(@follower, @status, update: true) when :list FeedManager.instance.unpush_from_list(@list, @status, update: true) diff --git a/config/routes.rb b/config/routes.rb index 177c1cff423..7a902b1f032 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -530,6 +530,15 @@ Rails.application.routes.draw do resource :note, only: :create, controller: 'accounts/notes' end + resources :tags, only: [:show], constraints: { id: /#{Tag::HASHTAG_NAME_RE}/ } do + member do + post :follow + post :unfollow + end + end + + resources :followed_tags, only: [:index] + resources :lists, only: [:index, :create, :show, :update, :destroy] do resource :accounts, only: [:show, :create, :destroy], controller: 'lists/accounts' end diff --git a/db/migrate/20220714171049_create_tag_follows.rb b/db/migrate/20220714171049_create_tag_follows.rb new file mode 100644 index 00000000000..a393e90f508 --- /dev/null +++ b/db/migrate/20220714171049_create_tag_follows.rb @@ -0,0 +1,12 @@ +class CreateTagFollows < ActiveRecord::Migration[6.1] + def change + create_table :tag_follows do |t| + t.belongs_to :tag, null: false, foreign_key: { on_delete: :cascade } + t.belongs_to :account, null: false, foreign_key: { on_delete: :cascade }, index: false + + t.timestamps + end + + add_index :tag_follows, [:account_id, :tag_id], unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index 9b465b674f4..2263dc7d7cd 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2022_07_10_102457) do +ActiveRecord::Schema.define(version: 2022_07_14_171049) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -928,6 +928,15 @@ ActiveRecord::Schema.define(version: 2022_07_10_102457) do t.datetime "updated_at", null: false end + create_table "tag_follows", force: :cascade do |t| + t.bigint "tag_id", null: false + t.bigint "account_id", null: false + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["account_id", "tag_id"], name: "index_tag_follows_on_account_id_and_tag_id", unique: true + t.index ["tag_id"], name: "index_tag_follows_on_tag_id" + end + create_table "tags", force: :cascade do |t| t.string "name", default: "", null: false t.datetime "created_at", null: false @@ -1167,6 +1176,8 @@ ActiveRecord::Schema.define(version: 2022_07_10_102457) do add_foreign_key "statuses", "statuses", column: "reblog_of_id", on_delete: :cascade add_foreign_key "statuses_tags", "statuses", on_delete: :cascade add_foreign_key "statuses_tags", "tags", name: "fk_3081861e21", on_delete: :cascade + add_foreign_key "tag_follows", "accounts", on_delete: :cascade + add_foreign_key "tag_follows", "tags", on_delete: :cascade add_foreign_key "tombstones", "accounts", on_delete: :cascade add_foreign_key "user_invite_requests", "users", on_delete: :cascade add_foreign_key "users", "accounts", name: "fk_50500f500d", on_delete: :cascade diff --git a/spec/controllers/api/v1/followed_tags_controller_spec.rb b/spec/controllers/api/v1/followed_tags_controller_spec.rb new file mode 100644 index 00000000000..2191350ef6b --- /dev/null +++ b/spec/controllers/api/v1/followed_tags_controller_spec.rb @@ -0,0 +1,23 @@ +require 'rails_helper' + +RSpec.describe Api::V1::FollowedTagsController, type: :controller do + render_views + + let(:user) { Fabricate(:user) } + let(:scopes) { 'read:follows' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + + before { allow(controller).to receive(:doorkeeper_token) { token } } + + describe 'GET #index' do + let!(:tag_follows) { Fabricate.times(5, :tag_follow, account: user.account) } + + before do + get :index, params: { limit: 1 } + end + + it 'returns http success' do + expect(response).to have_http_status(:success) + end + end +end diff --git a/spec/controllers/api/v1/tags_controller_spec.rb b/spec/controllers/api/v1/tags_controller_spec.rb new file mode 100644 index 00000000000..ac42660dfaf --- /dev/null +++ b/spec/controllers/api/v1/tags_controller_spec.rb @@ -0,0 +1,82 @@ +require 'rails_helper' + +RSpec.describe Api::V1::TagsController, type: :controller do + render_views + + let(:user) { Fabricate(:user) } + let(:scopes) { 'write:follows' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + + before { allow(controller).to receive(:doorkeeper_token) { token } } + + describe 'GET #show' do + before do + get :show, params: { id: name } + end + + context 'with existing tag' do + let!(:tag) { Fabricate(:tag) } + let(:name) { tag.name } + + it 'returns http success' do + expect(response).to have_http_status(:success) + end + end + + context 'with non-existing tag' do + let(:name) { 'hoge' } + + it 'returns http success' do + expect(response).to have_http_status(:success) + end + end + end + + describe 'POST #follow' do + before do + post :follow, params: { id: name } + end + + context 'with existing tag' do + let!(:tag) { Fabricate(:tag) } + let(:name) { tag.name } + + it 'returns http success' do + expect(response).to have_http_status(:success) + end + + it 'creates follow' do + expect(TagFollow.where(tag: tag, account: user.account).exists?).to be true + end + end + + context 'with non-existing tag' do + let(:name) { 'hoge' } + + it 'returns http success' do + expect(response).to have_http_status(:success) + end + + it 'creates follow' do + expect(TagFollow.where(tag: Tag.find_by!(name: name), account: user.account).exists?).to be true + end + end + end + + describe 'POST #unfollow' do + let!(:tag) { Fabricate(:tag, name: 'foo') } + let!(:tag_follow) { Fabricate(:tag_follow, account: user.account, tag: tag) } + + before do + post :unfollow, params: { id: tag.name } + end + + it 'returns http success' do + expect(response).to have_http_status(:success) + end + + it 'removes the follow' do + expect(TagFollow.where(tag: tag, account: user.account).exists?).to be false + end + end +end diff --git a/spec/fabricators/tag_follow_fabricator.rb b/spec/fabricators/tag_follow_fabricator.rb new file mode 100644 index 00000000000..a2cccb07a83 --- /dev/null +++ b/spec/fabricators/tag_follow_fabricator.rb @@ -0,0 +1,4 @@ +Fabricator(:tag_follow) do + tag + account +end diff --git a/spec/models/tag_follow_spec.rb b/spec/models/tag_follow_spec.rb new file mode 100644 index 00000000000..50c04d2e460 --- /dev/null +++ b/spec/models/tag_follow_spec.rb @@ -0,0 +1,4 @@ +require 'rails_helper' + +RSpec.describe TagFollow, type: :model do +end From 6c0d73a675d62f676b005c06593fd69e9a7bc0e5 Mon Sep 17 00:00:00 2001 From: Claire Date: Sun, 17 Jul 2022 22:58:41 +0200 Subject: [PATCH 104/646] Change default values for emoji limits in .env.production.sample and comment them out --- .env.production.sample | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.env.production.sample b/.env.production.sample index 5fae5f66193..ad058b2b792 100644 --- a/.env.production.sample +++ b/.env.production.sample @@ -283,8 +283,8 @@ MAX_POLL_OPTION_CHARS=100 # If undefined or smaller than MAX_EMOJI_SIZE, the value # of MAX_EMOJI_SIZE will be used for MAX_REMOTE_EMOJI_SIZE # Units are in bytes -MAX_EMOJI_SIZE=51200 -MAX_REMOTE_EMOJI_SIZE=204800 +# MAX_EMOJI_SIZE=262144 +# MAX_REMOTE_EMOJI_SIZE=262144 # Optional hCaptcha support # HCAPTCHA_SECRET_KEY= From ad489f865a38e54a0f05598fa3f0638d3808214d Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Mon, 18 Jul 2022 15:41:08 +0900 Subject: [PATCH 105/646] Fix custom.css html escaped (#18824) --- app/views/custom_css/show.css.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/custom_css/show.css.erb b/app/views/custom_css/show.css.erb index 521834832e5..9cd38fb3714 100644 --- a/app/views/custom_css/show.css.erb +++ b/app/views/custom_css/show.css.erb @@ -1,5 +1,5 @@ <%- if Setting.custom_css.present? %> -<%= Setting.custom_css %> +<%= raw Setting.custom_css %> <%- end %> <%- UserRole.where(highlighted: true).select { |role| role.color.present? }.each do |role| %> From ec83e2a35ee5f3a68ec0f8f5285e45d24d4d1da6 Mon Sep 17 00:00:00 2001 From: Jeremy Kescher Date: Mon, 18 Jul 2022 06:41:50 +0000 Subject: [PATCH 106/646] Fix missing scope for current_user in _sidebar.html.haml (#18822) Fixes https://github.com/mastodon/mastodon/issues/18821 Fix suggested by https://miaow.gay/@meganeko/108665430982072358 --- app/views/application/_sidebar.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/application/_sidebar.html.haml b/app/views/application/_sidebar.html.haml index 0a952add077..cc157bf4793 100644 --- a/app/views/application/_sidebar.html.haml +++ b/app/views/application/_sidebar.html.haml @@ -13,4 +13,4 @@ %h4.emojify= t('footer.trending_now') - trends.each do |tag| - = react_component :hashtag, hashtag: ActiveModelSerializers::SerializableResource.new(tag, serializer: REST::TagSerializer).as_json + = react_component :hashtag, hashtag: ActiveModelSerializers::SerializableResource.new(tag, serializer: REST::TagSerializer, scope: current_user, scope_name: :current_user).as_json From f248d95be26ceca3c2d717fa71557a56e975fece Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Tue, 19 Jul 2022 08:06:11 +0900 Subject: [PATCH 107/646] Fix badge color not affected (#18826) * Fix badge color not affected * Generate user role css --- app/javascript/styles/mastodon/accounts.scss | 6 +++--- app/views/custom_css/show.css.erb | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/javascript/styles/mastodon/accounts.scss b/app/javascript/styles/mastodon/accounts.scss index 215774a192f..54b65bfc8c2 100644 --- a/app/javascript/styles/mastodon/accounts.scss +++ b/app/javascript/styles/mastodon/accounts.scss @@ -210,9 +210,9 @@ font-size: 12px; line-height: 12px; font-weight: 500; - color: $ui-secondary-color; - background-color: rgba($ui-secondary-color, 0.1); - border: 1px solid rgba($ui-secondary-color, 0.5); + color: var(--user-role-accent, $ui-secondary-color); + background-color: var(--user-role-background, rgba($ui-secondary-color, 0.1)); + border: 1px solid var(--user-role-border, rgba($ui-secondary-color, 0.5)); &.moderator { color: $success-green; diff --git a/app/views/custom_css/show.css.erb b/app/views/custom_css/show.css.erb index 9cd38fb3714..bcbe819621f 100644 --- a/app/views/custom_css/show.css.erb +++ b/app/views/custom_css/show.css.erb @@ -5,6 +5,8 @@ <%- UserRole.where(highlighted: true).select { |role| role.color.present? }.each do |role| %> .user-role-<%= role.id %> { --user-role-accent: <%= role.color %>; + --user-role-background: <%= role.color + '19' %>; + --user-role-border: <%= role.color + '80' %>; } <%- end %> From 7205098ccf6573c1bd05da9c7a23a9b17d3fca8a Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Tue, 19 Jul 2022 08:06:11 +0900 Subject: [PATCH 108/646] [Glitch] Fix badge color not affected Port f248d95be26ceca3c2d717fa71557a56e975fece to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/styles/accounts.scss | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/javascript/flavours/glitch/styles/accounts.scss b/app/javascript/flavours/glitch/styles/accounts.scss index a3bfb050790..3d8b761e61b 100644 --- a/app/javascript/flavours/glitch/styles/accounts.scss +++ b/app/javascript/flavours/glitch/styles/accounts.scss @@ -212,9 +212,9 @@ font-size: 12px; line-height: 12px; font-weight: 500; - color: $ui-secondary-color; - background-color: rgba($ui-secondary-color, 0.1); - border: 1px solid rgba($ui-secondary-color, 0.5); + color: var(--user-role-accent, $ui-secondary-color); + background-color: var(--user-role-background, rgba($ui-secondary-color, 0.1)); + border: 1px solid var(--user-role-border, rgba($ui-secondary-color, 0.5)); &.moderator { color: $success-green; From 8a67e6e237c7df81eb38571cd81fac2768293aba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 20:24:34 +0900 Subject: [PATCH 109/646] Bump terser from 4.8.0 to 4.8.1 (#18849) Bumps [terser](https://github.com/terser/terser) from 4.8.0 to 4.8.1. - [Release notes](https://github.com/terser/terser/releases) - [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md) - [Commits](https://github.com/terser/terser/commits) --- updated-dependencies: - dependency-name: terser dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index c93c30ede10..9f26d5dae65 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2895,9 +2895,9 @@ bser@2.1.1: node-int64 "^0.4.0" buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer-indexof@^1.0.0: version "1.1.1" @@ -10115,9 +10115,9 @@ source-map-support@0.5.13: source-map "^0.6.0" source-map-support@~0.5.12, source-map-support@~0.5.19: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -10721,9 +10721,9 @@ terser-webpack-plugin@^4.2.3: webpack-sources "^1.4.3" terser@^4.1.2: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + version "4.8.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" + integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== dependencies: commander "^2.20.0" source-map "~0.6.1" From bcc6510f5315048f0d5800f331ee56e282080ded Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 20:25:14 +0900 Subject: [PATCH 110/646] Bump @babel/preset-env from 7.18.6 to 7.18.9 (#18830) Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.18.6 to 7.18.9. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.9/packages/babel-preset-env) --- updated-dependencies: - dependency-name: "@babel/preset-env" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 387 +++++++++++++++++++++++++++++++-------------------- 2 files changed, 239 insertions(+), 150 deletions(-) diff --git a/package.json b/package.json index 5c94e8fefe2..e7aaa7366fc 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@babel/plugin-proposal-decorators": "^7.18.6", "@babel/plugin-transform-react-inline-elements": "^7.18.6", "@babel/plugin-transform-runtime": "^7.18.6", - "@babel/preset-env": "^7.18.6", + "@babel/preset-env": "^7.18.9", "@babel/preset-react": "^7.18.6", "@babel/runtime": "^7.18.6", "@gamestdio/websocket": "^0.3.2", diff --git a/yarn.lock b/yarn.lock index 9f26d5dae65..0101ee51675 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,10 +23,10 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.6.tgz#8b37d24e88e8e21c499d4328db80577d8882fa53" - integrity sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ== +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" + integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.6", "@babel/core@^7.7.2": version "7.18.6" @@ -67,6 +67,15 @@ "@jridgewell/gen-mapping" "^0.3.0" jsesc "^2.5.1" +"@babel/generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.9.tgz#68337e9ea8044d6ddc690fb29acae39359cca0a5" + integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== + dependencies: + "@babel/types" "^7.18.9" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" @@ -90,12 +99,12 @@ "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz#18d35bfb9f83b1293c22c55b3d576c1315b6ed96" - integrity sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.18.6", "@babel/helper-compilation-targets@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" + integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== dependencies: - "@babel/compat-data" "^7.18.6" + "@babel/compat-data" "^7.18.8" "@babel/helper-validator-option" "^7.18.6" browserslist "^4.20.2" semver "^6.3.0" @@ -140,6 +149,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz#b7eee2b5b9d70602e59d1a6cad7dd24de7ca6cd7" integrity sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q== +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + "@babel/helper-explode-assignable-expression@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" @@ -155,6 +169,14 @@ "@babel/template" "^7.18.6" "@babel/types" "^7.18.6" +"@babel/helper-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" + integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.9" + "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" @@ -169,6 +191,13 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-member-expression-to-functions@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" + integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== + dependencies: + "@babel/types" "^7.18.9" + "@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" @@ -190,6 +219,20 @@ "@babel/traverse" "^7.18.6" "@babel/types" "^7.18.6" +"@babel/helper-module-transforms@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" + integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + "@babel/helper-optimise-call-expression@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" @@ -197,10 +240,10 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz#9448974dd4fb1d80fefe72e8a0af37809cd30d6d" - integrity sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" + integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== "@babel/helper-remap-async-to-generator@^7.18.6": version "7.18.6" @@ -223,6 +266,17 @@ "@babel/traverse" "^7.18.6" "@babel/types" "^7.18.6" +"@babel/helper-replace-supers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz#1092e002feca980fbbb0bd4d51b74a65c6a500e6" + integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + "@babel/helper-simple-access@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" @@ -230,12 +284,12 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-skip-transparent-expression-wrappers@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.6.tgz#7dff00a5320ca4cf63270e5a0eca4b268b7380d9" - integrity sha512-4KoLhwGS9vGethZpAhYnMejWkX64wsnHPDwvOsKWU6Fg4+AlK2Jz3TyjQLMEPvz+1zemi/WBdkYxCD0bAfIkiw== +"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818" + integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.18.9" "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" @@ -301,6 +355,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.6.tgz#845338edecad65ebffef058d3be851f1d28a63bc" integrity sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw== +"@babel/parser@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539" + integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" @@ -308,14 +367,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.6.tgz#b4e4dbc2cd1acd0133479918f7c6412961c9adb8" - integrity sha512-Udgu8ZRgrBrttVz6A0EVL0SJ1z+RLbIeqsu632SA1hf0awEppD6TvdznoH+orIF8wtFFAV/Enmw9Y+9oV8TQcw== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" + integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" "@babel/plugin-proposal-async-generator-functions@^7.18.6": version "7.18.6" @@ -363,12 +422,12 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.6.tgz#1016f0aa5ab383bbf8b3a85a2dcaedf6c8ee7491" - integrity sha512-zr/QcUlUo7GPo6+X1wC98NJADqmy5QTFWWhqeQWiki4XHafJtLl/YMGkmRB2szDD2IYJCCdBTd4ElwhId9T7Xw== +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-proposal-json-strings@^7.18.6": @@ -379,12 +438,12 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.6.tgz#3b9cac6f1ffc2aa459d111df80c12020dfc6b665" - integrity sha512-zMo66azZth/0tVd7gmkxOkOjs2rpHyhpcFo565PUP37hSp6hSd9uUKIfTDFMz58BwqgQKhJ9YxtM5XddjXVn+Q== +"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" + integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": @@ -403,16 +462,16 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.6.tgz#ec93bba06bfb3e15ebd7da73e953d84b094d5daf" - integrity sha512-9yuM6wr4rIsKa1wlUAbZEazkCrgw2sMPEXCr4Rnwetu7cEW1NydkCWytLuYletbf8vFxdJxFhwEZqMpOx2eZyw== +"@babel/plugin-proposal-object-rest-spread@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz#f9434f6beb2c8cae9dfcf97d2a5941bbbf9ad4e7" + integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q== dependencies: - "@babel/compat-data" "^7.18.6" - "@babel/helper-compilation-targets" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.18.8" "@babel/plugin-proposal-optional-catch-binding@^7.18.6": version "7.18.6" @@ -422,13 +481,13 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.6.tgz#46d4f2ffc20e87fad1d98bc4fa5d466366f6aa0b" - integrity sha512-PatI6elL5eMzoypFAiYDpYQyMtXTn+iMhuxxQt5mAXD4fEmKorpSI3PHd+i3JXBJN3xyA6MvJv7at23HffFHwA== +"@babel/plugin-proposal-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" + integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-proposal-private-methods@^7.18.6": @@ -627,40 +686,40 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-block-scoping@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.6.tgz#b5f78318914615397d86a731ef2cc668796a726c" - integrity sha512-pRqwb91C42vs1ahSAWJkxOxU1RHWDn16XAa6ggQ72wjLlWyYeAcLvTtE0aM8ph3KNydy9CQF2nLYcjq1WysgxQ== +"@babel/plugin-transform-block-scoping@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz#f9b7e018ac3f373c81452d6ada8bd5a18928926d" + integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-classes@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.6.tgz#3501a8f3f4c7d5697c27a3eedbee71d68312669f" - integrity sha512-XTg8XW/mKpzAF3actL554Jl/dOYoJtv3l8fxaEczpgz84IeeVf+T1u2CSvPHuZbt0w3JkIx4rdn/MRQI7mo0HQ== +"@babel/plugin-transform-classes@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz#90818efc5b9746879b869d5ce83eb2aa48bbc3da" + integrity sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.6" - "@babel/helper-function-name" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-replace-supers" "^7.18.9" "@babel/helper-split-export-declaration" "^7.18.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.6.tgz#5d15eb90e22e69604f3348344c91165c5395d032" - integrity sha512-9repI4BhNrR0KenoR9vm3/cIc1tSBIo+u1WVjKCAynahj25O8zfbiE6JtAtHPGQSs4yZ+bA8mRasRP+qc+2R5A== +"@babel/plugin-transform-computed-properties@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e" + integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-destructuring@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.6.tgz#a98b0e42c7ffbf5eefcbcf33280430f230895c6f" - integrity sha512-tgy3u6lRp17ilY8r1kP4i2+HDUwxlVqq3RTc943eAWSzGgpU1qhiKpqZ5CMyHReIYPHdo3Kg8v8edKtDqSVEyQ== +"@babel/plugin-transform-destructuring@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz#68906549c021cb231bee1db21d3b5b095f8ee292" + integrity sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.18.6" @@ -670,12 +729,12 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-duplicate-keys@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.6.tgz#e6c94e8cd3c9dd8a88144f7b78ae22975a7ff473" - integrity sha512-NJU26U/208+sxYszf82nmGYqVF9QN8py2HFTblPT9hbawi8+1C5a9JubODLTGFuT0qlkqVinmkwOD13s0sZktg== +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-exponentiation-operator@^7.18.6": version "7.18.6" @@ -685,28 +744,28 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-for-of@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.6.tgz#e0fdb813be908e91ccc9ec87b30cc2eabf046f7c" - integrity sha512-WAjoMf4wIiSsy88KmG7tgj2nFdEK7E46tArVtcgED7Bkj6Fg/tG5SbvNIOKxbFS2VFgNh6+iaPswBeQZm4ox8w== +"@babel/plugin-transform-for-of@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" + integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-function-name@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.6.tgz#6a7e4ae2893d336fd1b8f64c9f92276391d0f1b4" - integrity sha512-kJha/Gbs5RjzIu0CxZwf5e3aTTSlhZnHMT8zPWnJMjNpLOUgqevg+PN5oMH68nMCXnfiMo4Bhgxqj59KHTlAnA== +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== dependencies: - "@babel/helper-compilation-targets" "^7.18.6" - "@babel/helper-function-name" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.6.tgz#9d6af353b5209df72960baf4492722d56f39a205" - integrity sha512-x3HEw0cJZVDoENXOp20HlypIHfl0zMIhMVZEBVTfmqbObIpsMxMbmU5nOEO8R7LYT+z5RORKPlTI5Hj4OsO9/Q== +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-member-expression-literals@^7.18.6": version "7.18.6" @@ -734,14 +793,14 @@ "@babel/helper-simple-access" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.6.tgz#026511b7657d63bf5d4cf2fd4aeb963139914a54" - integrity sha512-UbPYpXxLjTw6w6yXX2BYNxF3p6QY225wcTkfQCy3OMnSlS/C3xGtwUjEzGkldb/sy6PWLiCQ3NbYfjWUTI3t4g== +"@babel/plugin-transform-modules-systemjs@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz#545df284a7ac6a05125e3e405e536c5853099a06" + integrity sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A== dependencies: "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/helper-validator-identifier" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" @@ -776,10 +835,10 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-parameters@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.6.tgz#cbe03d5a4c6385dd756034ac1baa63c04beab8dc" - integrity sha512-FjdqgMv37yVl/gwvzkcB+wfjRI8HQmc5EgOG9iGNvUY1ok+TjsoaMP7IqCDZBhkFcM5f3OPVMs6Dmp03C5k4/A== +"@babel/plugin-transform-parameters@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a" + integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== dependencies: "@babel/helper-plugin-utils" "^7.18.6" @@ -865,13 +924,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-spread@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.6.tgz#82b080241965f1689f0a60ecc6f1f6575dbdb9d6" - integrity sha512-ayT53rT/ENF8WWexIRg9AiV9h0aIteyWn5ptfZTZQrjk/+f3WdrJGCY4c9wcgl2+MKkKPhzbYp97FTsquZpDCw== +"@babel/plugin-transform-spread@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz#6ea7a6297740f381c540ac56caf75b05b74fb664" + integrity sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" "@babel/plugin-transform-sticky-regex@^7.18.6": version "7.18.6" @@ -880,19 +939,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-template-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.6.tgz#b763f4dc9d11a7cce58cf9a490d82e80547db9c2" - integrity sha512-UuqlRrQmT2SWRvahW46cGSany0uTlcj8NYOS5sRGYi8FxPYPoLd5DDmMd32ZXEj2Jq+06uGVQKHxa/hJx2EzKw== +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-typeof-symbol@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.6.tgz#486bb39d5a18047358e0d04dc0d2f322f0b92e92" - integrity sha512-7m71iS/QhsPk85xSjFPovHPcH3H9qeyzsujhTc+vcdnsXavoWYJ74zx0lP5RhpC5+iDnVLO+PPMHzC11qels1g== +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-unicode-escapes@^7.18.6": version "7.18.6" @@ -909,29 +968,29 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/preset-env@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.6.tgz#953422e98a5f66bc56cd0b9074eaea127ec86ace" - integrity sha512-WrthhuIIYKrEFAwttYzgRNQ5hULGmwTj+D6l7Zdfsv5M7IWV/OZbUfbeL++Qrzx1nVJwWROIFhCHRYQV4xbPNw== +"@babel/preset-env@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.9.tgz#9b3425140d724fbe590322017466580844c7eaff" + integrity sha512-75pt/q95cMIHWssYtyfjVlvI+QEZQThQbKvR9xH+F/Agtw/s4Wfc2V9Bwd/P39VtixB7oWxGdH4GteTTwYJWMg== dependencies: - "@babel/compat-data" "^7.18.6" - "@babel/helper-compilation-targets" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/helper-validator-option" "^7.18.6" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" "@babel/plugin-proposal-async-generator-functions" "^7.18.6" "@babel/plugin-proposal-class-properties" "^7.18.6" "@babel/plugin-proposal-class-static-block" "^7.18.6" "@babel/plugin-proposal-dynamic-import" "^7.18.6" - "@babel/plugin-proposal-export-namespace-from" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" "@babel/plugin-proposal-json-strings" "^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" "@babel/plugin-proposal-numeric-separator" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.18.9" "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" "@babel/plugin-proposal-private-methods" "^7.18.6" "@babel/plugin-proposal-private-property-in-object" "^7.18.6" "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" @@ -953,37 +1012,37 @@ "@babel/plugin-transform-arrow-functions" "^7.18.6" "@babel/plugin-transform-async-to-generator" "^7.18.6" "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.18.6" - "@babel/plugin-transform-classes" "^7.18.6" - "@babel/plugin-transform-computed-properties" "^7.18.6" - "@babel/plugin-transform-destructuring" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.18.9" + "@babel/plugin-transform-classes" "^7.18.9" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.18.9" "@babel/plugin-transform-dotall-regex" "^7.18.6" - "@babel/plugin-transform-duplicate-keys" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-for-of" "^7.18.6" - "@babel/plugin-transform-function-name" "^7.18.6" - "@babel/plugin-transform-literals" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" "@babel/plugin-transform-member-expression-literals" "^7.18.6" "@babel/plugin-transform-modules-amd" "^7.18.6" "@babel/plugin-transform-modules-commonjs" "^7.18.6" - "@babel/plugin-transform-modules-systemjs" "^7.18.6" + "@babel/plugin-transform-modules-systemjs" "^7.18.9" "@babel/plugin-transform-modules-umd" "^7.18.6" "@babel/plugin-transform-named-capturing-groups-regex" "^7.18.6" "@babel/plugin-transform-new-target" "^7.18.6" "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-parameters" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.18.8" "@babel/plugin-transform-property-literals" "^7.18.6" "@babel/plugin-transform-regenerator" "^7.18.6" "@babel/plugin-transform-reserved-words" "^7.18.6" "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.18.6" + "@babel/plugin-transform-spread" "^7.18.9" "@babel/plugin-transform-sticky-regex" "^7.18.6" - "@babel/plugin-transform-template-literals" "^7.18.6" - "@babel/plugin-transform-typeof-symbol" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" "@babel/plugin-transform-unicode-escapes" "^7.18.6" "@babel/plugin-transform-unicode-regex" "^7.18.6" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.18.6" + "@babel/types" "^7.18.9" babel-plugin-polyfill-corejs2 "^0.3.1" babel-plugin-polyfill-corejs3 "^0.5.2" babel-plugin-polyfill-regenerator "^0.3.1" @@ -1060,10 +1119,26 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.18.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.6.tgz#5d781dd10a3f0c9f1f931bd19de5eb26ec31acf0" - integrity sha512-NdBNzPDwed30fZdDQtVR7ZgaO4UKjuaQFH9VArS+HMnurlOY0JWN+4ROlu/iapMFwjRQU4pOG4StZfDmulEwGA== +"@babel/traverse@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98" + integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.9" + "@babel/types" "^7.18.9" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f" + integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== dependencies: "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" @@ -1456,6 +1531,15 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/resolve-uri@^3.0.3": version "3.0.4" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz#b876e3feefb9c8d3aa84014da28b5e52a0640d72" @@ -1466,6 +1550,11 @@ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.0.tgz#1179863356ac8fbea64a5a4bcde93a4871012c01" integrity sha512-SfJxIxNVYLTsKwzB3MoOQ1yxf4w/E6MdkvTgrgAt1bfxjSrLUoHMKrDOykwN14q65waezZIdqDneUIPh4/sKxg== +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.10" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz#baf57b4e2a690d4f38560171f91783656b7f8186" From e8207d984086347794f3608f610bf72797b7426a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 20:25:45 +0900 Subject: [PATCH 111/646] Bump @babel/runtime from 7.18.6 to 7.18.9 (#18833) Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.18.6 to 7.18.9. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.9/packages/babel-runtime) --- updated-dependencies: - dependency-name: "@babel/runtime" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e7aaa7366fc..420997758a1 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "@babel/plugin-transform-runtime": "^7.18.6", "@babel/preset-env": "^7.18.9", "@babel/preset-react": "^7.18.6", - "@babel/runtime": "^7.18.6", + "@babel/runtime": "^7.18.9", "@gamestdio/websocket": "^0.3.2", "@github/webauthn-json": "^0.5.7", "@rails/ujs": "^6.1.6", diff --git a/yarn.lock b/yarn.lock index 0101ee51675..36775b18d7d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1087,10 +1087,10 @@ dependencies: regenerator-runtime "^0.12.0" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.6.tgz#6a1ef59f838debd670421f8c7f2cbb8da9751580" - integrity sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" + integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== dependencies: regenerator-runtime "^0.13.4" From e8e65c10bce131df66bc2864d5152303035281af Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 20:26:23 +0900 Subject: [PATCH 112/646] Bump babel-jest from 28.1.2 to 28.1.3 (#18838) Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 28.1.2 to 28.1.3. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v28.1.3/packages/babel-jest) --- updated-dependencies: - dependency-name: babel-jest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 108 ++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 87 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index 420997758a1..232a24d14aa 100644 --- a/package.json +++ b/package.json @@ -142,7 +142,7 @@ "@babel/eslint-parser": "^7.18.2", "@testing-library/jest-dom": "^5.16.4", "@testing-library/react": "^12.1.5", - "babel-jest": "^28.1.2", + "babel-jest": "^28.1.3", "eslint": "^7.32.0", "eslint-plugin-import": "~2.26.0", "eslint-plugin-jsx-a11y": "~6.6.0", diff --git a/yarn.lock b/yarn.lock index 36775b18d7d..b8e9a232cc0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1439,6 +1439,13 @@ dependencies: "@sinclair/typebox" "^0.23.3" +"@jest/schemas@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" + integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== + dependencies: + "@sinclair/typebox" "^0.24.1" + "@jest/source-map@^28.1.2": version "28.1.2" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-28.1.2.tgz#7fe832b172b497d6663cdff6c13b0a920e139e24" @@ -1468,22 +1475,22 @@ jest-haste-map "^28.1.1" slash "^3.0.0" -"@jest/transform@^28.1.2": - version "28.1.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.2.tgz#b367962c53fd53821269bde050ce373e111327c1" - integrity sha512-3o+lKF6iweLeJFHBlMJysdaPbpoMmtbHEFsjzSv37HIq/wWt5ijTeO2Yf7MO5yyczCopD507cNwNLeX8Y/CuIg== +"@jest/transform@^28.1.2", "@jest/transform@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.3.tgz#59d8098e50ab07950e0f2fc0fc7ec462371281b0" + integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^28.1.1" + "@jest/types" "^28.1.3" "@jridgewell/trace-mapping" "^0.3.13" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.2.9" - jest-haste-map "^28.1.1" + jest-haste-map "^28.1.3" jest-regex-util "^28.0.2" - jest-util "^28.1.1" + jest-util "^28.1.3" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" @@ -1522,6 +1529,18 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" +"@jest/types@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" + integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== + dependencies: + "@jest/schemas" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + "@jridgewell/gen-mapping@^0.3.0": version "0.3.1" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz#cf92a983c83466b8c0ce9124fadeaf09f7c66ea9" @@ -1662,6 +1681,11 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.23.5.tgz#93f7b9f4e3285a7a9ade7557d9a8d36809cbc47d" integrity sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg== +"@sinclair/typebox@^0.24.1": + version "0.24.20" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.20.tgz#11a657875de6008622d53f56e063a6347c51a6dd" + integrity sha512-kVaO5aEFZb33nPMTZBxiPEkY+slxiPtqC7QX8f9B3eGOMBvEfuMfxp9DSTTCsRJPumPKjrge4yagyssO4q6qzQ== + "@sinonjs/commons@^1.7.0": version "1.8.1" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" @@ -2550,15 +2574,15 @@ axobject-query@^2.2.0: resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== -babel-jest@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.2.tgz#2b37fb81439f14d34d8b2cc4a4bd7efabf9acbfe" - integrity sha512-pfmoo6sh4L/+5/G2OOfQrGJgvH7fTa1oChnuYH2G/6gA+JwDvO8PELwvwnofKBMNrQsam0Wy/Rw+QSrBNewq2Q== +babel-jest@^28.1.2, babel-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.3.tgz#c1187258197c099072156a0a121c11ee1e3917d5" + integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== dependencies: - "@jest/transform" "^28.1.2" + "@jest/transform" "^28.1.3" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^28.1.1" + babel-preset-jest "^28.1.3" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -2591,10 +2615,10 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.1.tgz#5e055cdcc47894f28341f87f5e35aad2df680b11" - integrity sha512-NovGCy5Hn25uMJSAU8FaHqzs13cFoOI4lhIujiepssjCKRsAo3TA734RDWSGxuFTsUJXerYOqQQodlxgmtqbzw== +babel-plugin-jest-hoist@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz#1952c4d0ea50f2d6d794353762278d1d8cca3fbe" + integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -2700,12 +2724,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-28.1.1.tgz#5b6e5e69f963eb2d70f739c607b8f723c0ee75e4" - integrity sha512-FCq9Oud0ReTeWtcneYf/48981aTfXYuB9gbU4rBNNJVBSQ6ssv7E6v/qvbBxtOWwZFXjLZwpg+W3q7J6vhH25g== +babel-preset-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz#5dfc20b99abed5db994406c2b9ab94c73aaa419d" + integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== dependencies: - babel-plugin-jest-hoist "^28.1.1" + babel-plugin-jest-hoist "^28.1.3" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -6634,6 +6658,25 @@ jest-haste-map@^28.1.1: optionalDependencies: fsevents "^2.3.2" +jest-haste-map@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.3.tgz#abd5451129a38d9841049644f34b034308944e2b" + integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== + dependencies: + "@jest/types" "^28.1.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + jest-worker "^28.1.3" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + jest-leak-detector@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-28.1.1.tgz#537f37afd610a4b3f4cab15e06baf60484548efb" @@ -6804,6 +6847,18 @@ jest-util@^28.1.1: graceful-fs "^4.2.9" picomatch "^2.2.3" +jest-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" + integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + jest-validate@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-28.1.1.tgz#59b7b339b3c85b5144bd0c06ad3600f503a4acc8" @@ -6848,6 +6903,15 @@ jest-worker@^28.1.1: merge-stream "^2.0.0" supports-color "^8.0.0" +jest-worker@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" + integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jest@^28.1.2: version "28.1.2" resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.2.tgz#451ff24081ce31ca00b07b60c61add13aa96f8eb" From bd9095fcfa476a63a35674e4ba2eb53aaa378e88 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 20:27:45 +0900 Subject: [PATCH 113/646] Bump @babel/eslint-parser from 7.18.2 to 7.18.9 (#18842) Bumps [@babel/eslint-parser](https://github.com/babel/babel/tree/HEAD/eslint/babel-eslint-parser) from 7.18.2 to 7.18.9. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.9/eslint/babel-eslint-parser) --- updated-dependencies: - dependency-name: "@babel/eslint-parser" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 15 +++++---------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 232a24d14aa..840870fff7c 100644 --- a/package.json +++ b/package.json @@ -139,7 +139,7 @@ "ws": "^8.8.0" }, "devDependencies": { - "@babel/eslint-parser": "^7.18.2", + "@babel/eslint-parser": "^7.18.9", "@testing-library/jest-dom": "^5.16.4", "@testing-library/react": "^12.1.5", "babel-jest": "^28.1.3", diff --git a/yarn.lock b/yarn.lock index b8e9a232cc0..686b625b0ee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -49,10 +49,10 @@ json5 "^2.2.1" semver "^6.3.0" -"@babel/eslint-parser@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.18.2.tgz#e14dee36c010edfb0153cf900c2b0815e82e3245" - integrity sha512-oFQYkE8SuH14+uR51JVAmdqwKYXGRjEXx7s+WiagVjqQ+HPE+nnwyF2qlVG8evUsUHmPcA+6YXMEDbIhEyQc5A== +"@babel/eslint-parser@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz#255a63796819a97b7578751bb08ab9f2a375a031" + integrity sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ== dependencies: eslint-scope "^5.1.1" eslint-visitor-keys "^2.1.0" @@ -4690,12 +4690,7 @@ eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== -eslint-visitor-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" - integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== - -eslint-visitor-keys@^2.1.0: +eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== From 22755e621bf906d1b2a4d4124445d214c4cd6d18 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 20:28:53 +0900 Subject: [PATCH 114/646] Bump nokogiri from 1.13.6 to 1.13.7 (#18843) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.13.6 to 1.13.7. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.13.6...v1.13.7) --- updated-dependencies: - dependency-name: nokogiri dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index f68442d4398..f8f54e67a6a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -405,7 +405,7 @@ GEM net-ssh (>= 2.6.5, < 7.0.0) net-ssh (6.1.0) nio4r (2.5.8) - nokogiri (1.13.6) + nokogiri (1.13.7) mini_portile2 (~> 2.8.0) racc (~> 1.4) nsa (0.2.8) From e37a792c36fe1dab2667a10fe44901dc3f466bdb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 20:29:18 +0900 Subject: [PATCH 115/646] Bump jest-environment-jsdom from 28.1.2 to 28.1.3 (#18840) Bumps [jest-environment-jsdom](https://github.com/facebook/jest/tree/HEAD/packages/jest-environment-jsdom) from 28.1.2 to 28.1.3. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v28.1.3/packages/jest-environment-jsdom) --- updated-dependencies: - dependency-name: jest-environment-jsdom dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 103 ++++++++++++++++++++++++++++++++------------------- 2 files changed, 65 insertions(+), 40 deletions(-) diff --git a/package.json b/package.json index 840870fff7c..0881f607a1b 100644 --- a/package.json +++ b/package.json @@ -149,7 +149,7 @@ "eslint-plugin-promise": "~6.0.0", "eslint-plugin-react": "~7.30.1", "jest": "^28.1.2", - "jest-environment-jsdom": "^28.1.2", + "jest-environment-jsdom": "^28.1.3", "postcss-scss": "^4.0.4", "prettier": "^2.7.1", "raf": "^3.4.1", diff --git a/yarn.lock b/yarn.lock index 686b625b0ee..f9a970a305a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1355,15 +1355,15 @@ slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^28.1.2": - version "28.1.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.2.tgz#94a052c0c5f9f8c8e6d13ea6da78dbc5d7d9b85b" - integrity sha512-I0CR1RUMmOzd0tRpz10oUfaChBWs+/Hrvn5xYhMEF/ZqrDaaeHwS8yDBqEWCrEnkH2g+WE/6g90oBv3nKpcm8Q== +"@jest/environment@^28.1.2", "@jest/environment@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.3.tgz#abed43a6b040a4c24fdcb69eab1f97589b2d663e" + integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== dependencies: - "@jest/fake-timers" "^28.1.2" - "@jest/types" "^28.1.1" + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" "@types/node" "*" - jest-mock "^28.1.1" + jest-mock "^28.1.3" "@jest/expect-utils@^28.1.1": version "28.1.1" @@ -1380,17 +1380,17 @@ expect "^28.1.1" jest-snapshot "^28.1.2" -"@jest/fake-timers@^28.1.2": - version "28.1.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.2.tgz#d49e8ee4e02ba85a6e844a52a5e7c59c23e3b76f" - integrity sha512-xSYEI7Y0D5FbZN2LsCUj/EKRR1zfQYmGuAUVh6xTqhx7V5JhjgMcK5Pa0iR6WIk0GXiHDe0Ke4A+yERKE9saqg== +"@jest/fake-timers@^28.1.2", "@jest/fake-timers@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.3.tgz#230255b3ad0a3d4978f1d06f70685baea91c640e" + integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== dependencies: - "@jest/types" "^28.1.1" + "@jest/types" "^28.1.3" "@sinonjs/fake-timers" "^9.1.2" "@types/node" "*" - jest-message-util "^28.1.1" - jest-mock "^28.1.1" - jest-util "^28.1.1" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-util "^28.1.3" "@jest/globals@^28.1.2": version "28.1.2" @@ -1517,12 +1517,12 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jest/types@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.1.tgz#d059bbc80e6da6eda9f081f293299348bd78ee0b" - integrity sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw== +"@jest/types@^28.1.1", "@jest/types@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" + integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== dependencies: - "@jest/schemas" "^28.0.2" + "@jest/schemas" "^28.1.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" @@ -6598,18 +6598,18 @@ jest-each@^28.1.1: jest-util "^28.1.1" pretty-format "^28.1.1" -jest-environment-jsdom@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-28.1.2.tgz#d3fe82ef8f900c34ab582df7d3002c5079e3d8ab" - integrity sha512-Ujhx/xFZGVPuxAVpseQ7KqdBErenuWH3Io2HujkGOKMS2VWmpnTGYHzv+73p21QJ9yYQlJkeg06rTe1svV+u0g== +jest-environment-jsdom@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-28.1.3.tgz#2d4e5d61b7f1d94c3bddfbb21f0308ee506c09fb" + integrity sha512-HnlGUmZRdxfCByd3GM2F100DgQOajUBzEitjGqIREcb45kGjZvRrKUdlaF6escXBdcXNl0OBh+1ZrfeZT3GnAg== dependencies: - "@jest/environment" "^28.1.2" - "@jest/fake-timers" "^28.1.2" - "@jest/types" "^28.1.1" + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" "@types/jsdom" "^16.2.4" "@types/node" "*" - jest-mock "^28.1.1" - jest-util "^28.1.1" + jest-mock "^28.1.3" + jest-util "^28.1.3" jsdom "^19.0.0" jest-environment-node@^28.1.2: @@ -6705,12 +6705,27 @@ jest-message-util@^28.1.1: slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.1.1.tgz#37903d269427fa1ef5b2447be874e1c62a39a371" - integrity sha512-bDCb0FjfsmKweAvE09dZT59IMkzgN0fYBH6t5S45NoJfd2DHkS3ySG2K+hucortryhO3fVuXdlxWcbtIuV/Skw== +jest-message-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" + integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== dependencies: - "@jest/types" "^28.1.1" + "@babel/code-frame" "^7.12.13" + "@jest/types" "^28.1.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^28.1.1, jest-mock@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.1.3.tgz#d4e9b1fc838bea595c77ab73672ebf513ab249da" + integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== + dependencies: + "@jest/types" "^28.1.3" "@types/node" "*" jest-pnp-resolver@^1.2.2: @@ -6830,12 +6845,12 @@ jest-snapshot@^28.1.2: pretty-format "^28.1.1" semver "^7.3.5" -jest-util@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.1.tgz#ff39e436a1aca397c0ab998db5a51ae2b7080d05" - integrity sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw== +jest-util@^28.1.1, jest-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" + integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== dependencies: - "@jest/types" "^28.1.1" + "@jest/types" "^28.1.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" @@ -8981,6 +8996,16 @@ pretty-format@^28.1.1: ansi-styles "^5.0.0" react-is "^18.0.0" +pretty-format@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" + integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== + dependencies: + "@jest/schemas" "^28.1.3" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^18.0.0" + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" From d7595ce3332389495c3b597376d8113f092c8bb4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 20:29:59 +0900 Subject: [PATCH 116/646] Bump oj from 3.13.16 to 3.13.17 (#18835) Bumps [oj](https://github.com/ohler55/oj) from 3.13.16 to 3.13.17. - [Release notes](https://github.com/ohler55/oj/releases) - [Changelog](https://github.com/ohler55/oj/blob/develop/CHANGELOG.md) - [Commits](https://github.com/ohler55/oj/compare/v3.13.16...v3.13.17) --- updated-dependencies: - dependency-name: oj dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index f8f54e67a6a..af07cb9a20b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -413,7 +413,7 @@ GEM concurrent-ruby (~> 1.0, >= 1.0.2) sidekiq (>= 3.5) statsd-ruby (~> 1.4, >= 1.4.0) - oj (3.13.16) + oj (3.13.17) omniauth (1.9.1) hashie (>= 3.4.6) rack (>= 1.6.2, < 3) From f8835387ea6ce66c16a1c1baf582a787bf436903 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 20:30:41 +0900 Subject: [PATCH 117/646] Bump react-toggle from 4.1.2 to 4.1.3 (#18839) Bumps [react-toggle](https://github.com/aaronshaf/react-toggle) from 4.1.2 to 4.1.3. - [Release notes](https://github.com/aaronshaf/react-toggle/releases) - [Changelog](https://github.com/aaronshaf/react-toggle/blob/master/CHANGELOG.md) - [Commits](https://github.com/aaronshaf/react-toggle/commits) --- updated-dependencies: - dependency-name: react-toggle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 0881f607a1b..daaf8af2aa2 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,7 @@ "react-sparklines": "^1.7.0", "react-swipeable-views": "^0.14.0", "react-textarea-autosize": "^8.3.4", - "react-toggle": "^4.1.2", + "react-toggle": "^4.1.3", "redis": "^4.0.6 <4.1.0", "redux": "^4.2.0", "redux-immutable": "^4.0.0", diff --git a/yarn.lock b/yarn.lock index f9a970a305a..f07c6d4548b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9459,10 +9459,10 @@ react-textarea-autosize@^8.3.4: use-composed-ref "^1.3.0" use-latest "^1.2.1" -react-toggle@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/react-toggle/-/react-toggle-4.1.2.tgz#b00500832f925ad524356d909821821ae39f6c52" - integrity sha512-4Ohw31TuYQdhWfA6qlKafeXx3IOH7t4ZHhmRdwsm1fQREwOBGxJT+I22sgHqR/w8JRdk+AeMCJXPImEFSrNXow== +react-toggle@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/react-toggle/-/react-toggle-4.1.3.tgz#99193392cca8e495710860c49f55e74c4e6cf452" + integrity sha512-WoPrvbwfQSvoagbrDnXPrlsxwzuhQIrs+V0I162j/s+4XPgY/YDAUmHSeWiroznfI73wj+MBydvW95zX8ABbSg== dependencies: classnames "^2.2.5" From f290be71e02c842c583979eb419f2fbb86fffbcb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 20:36:45 +0900 Subject: [PATCH 118/646] Bump @babel/plugin-proposal-decorators from 7.18.6 to 7.18.9 (#18837) Bumps [@babel/plugin-proposal-decorators](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-proposal-decorators) from 7.18.6 to 7.18.9. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.9/packages/babel-plugin-proposal-decorators) --- updated-dependencies: - dependency-name: "@babel/plugin-proposal-decorators" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 50 ++++++++++++++++---------------------------------- 2 files changed, 17 insertions(+), 35 deletions(-) diff --git a/package.json b/package.json index daaf8af2aa2..d76e0fe35e5 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "private": true, "dependencies": { "@babel/core": "^7.18.6", - "@babel/plugin-proposal-decorators": "^7.18.6", + "@babel/plugin-proposal-decorators": "^7.18.9", "@babel/plugin-transform-react-inline-elements": "^7.18.6", "@babel/plugin-transform-runtime": "^7.18.6", "@babel/preset-env": "^7.18.9", diff --git a/yarn.lock b/yarn.lock index f07c6d4548b..1ef86911e0a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -109,17 +109,17 @@ browserslist "^4.20.2" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz#6f15f8459f3b523b39e00a99982e2c040871ed72" - integrity sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz#d802ee16a64a9e824fcbf0a2ffc92f19d58550ce" + integrity sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.6" - "@babel/helper-function-name" "^7.18.6" - "@babel/helper-member-expression-to-functions" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.9" "@babel/helper-split-export-declaration" "^7.18.6" "@babel/helper-create-regexp-features-plugin@^7.18.6": @@ -184,13 +184,6 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-member-expression-to-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.6.tgz#44802d7d602c285e1692db0bad9396d007be2afc" - integrity sha512-CeHxqwwipekotzPDUuJOfIMtcIHBuc7WAzLmTYWctVigqS5RktNMQ5bEwQSuGewzYnCtTWa3BARXeiLxDTv+Ng== - dependencies: - "@babel/types" "^7.18.6" - "@babel/helper-member-expression-to-functions@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" @@ -255,18 +248,7 @@ "@babel/helper-wrap-function" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-replace-supers@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz#efedf51cfccea7b7b8c0f00002ab317e7abfe420" - integrity sha512-fTf7zoXnUGl9gF25fXCWE26t7Tvtyn6H4hkLSYhATwJvw2uYxd3aoXplMSe0g9XbwK7bmxNes7+FGO0rB/xC0g== - dependencies: - "@babel/helper-environment-visitor" "^7.18.6" - "@babel/helper-member-expression-to-functions" "^7.18.6" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/traverse" "^7.18.6" - "@babel/types" "^7.18.6" - -"@babel/helper-replace-supers@^7.18.9": +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz#1092e002feca980fbbb0bd4d51b74a65c6a500e6" integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ== @@ -403,14 +385,14 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-decorators@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.6.tgz#68e9fd0f022b944f84a8824bb28bfaee724d2595" - integrity sha512-gAdhsjaYmiZVxx5vTMiRfj31nB7LhwBJFMSLzeDxc7X4tKLixup0+k9ughn0RcpBrv9E3PBaXJW7jF5TCihAOg== +"@babel/plugin-proposal-decorators@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.9.tgz#d09d41ffc74af8499d2ac706ed0dbd5474711665" + integrity sha512-KD7zDNaD14CRpjQjVbV4EnH9lsKYlcpUrhZH37ei2IY+AlXrfAPy5pTmRUE4X6X1k8EsKXPraykxeaogqQvSGA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-replace-supers" "^7.18.9" "@babel/helper-split-export-declaration" "^7.18.6" "@babel/plugin-syntax-decorators" "^7.18.6" From 21a536a16ea37e874c2645c611ade3f397c27adc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 20:47:44 +0900 Subject: [PATCH 119/646] Bump jest from 28.1.2 to 28.1.3 (#18832) Bumps [jest](https://github.com/facebook/jest/tree/HEAD/packages/jest) from 28.1.2 to 28.1.3. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v28.1.3/packages/jest) --- updated-dependencies: - dependency-name: jest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 586 ++++++++++++++++++++++----------------------------- 2 files changed, 253 insertions(+), 335 deletions(-) diff --git a/package.json b/package.json index d76e0fe35e5..14e5c628049 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "eslint-plugin-jsx-a11y": "~6.6.0", "eslint-plugin-promise": "~6.0.0", "eslint-plugin-react": "~7.30.1", - "jest": "^28.1.2", + "jest": "^28.1.3", "jest-environment-jsdom": "^28.1.3", "postcss-scss": "^4.0.4", "prettier": "^2.7.1", diff --git a/yarn.lock b/yarn.lock index 1ef86911e0a..7d95b881bfe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1290,54 +1290,54 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@jest/console@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.1.tgz#305f8ca50b6e70413839f54c0e002b60a0f2fd7d" - integrity sha512-0RiUocPVFEm3WRMOStIHbRWllG6iW6E3/gUPnf4lkrVFyXIIDeCe+vlKeYyFOMhB2EPE6FLFCNADSOOQMaqvyA== +"@jest/console@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" + integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== dependencies: - "@jest/types" "^28.1.1" + "@jest/types" "^28.1.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^28.1.1" - jest-util "^28.1.1" + jest-message-util "^28.1.3" + jest-util "^28.1.3" slash "^3.0.0" -"@jest/core@^28.1.2": - version "28.1.2" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.1.2.tgz#eac519b9acbd154313854b8823a47b5c645f785a" - integrity sha512-Xo4E+Sb/nZODMGOPt2G3cMmCBqL4/W2Ijwr7/mrXlq4jdJwcFQ/9KrrJZT2adQRk2otVBXXOz1GRQ4Z5iOgvRQ== +"@jest/core@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.1.3.tgz#0ebf2bd39840f1233cd5f2d1e6fc8b71bd5a1ac7" + integrity sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA== dependencies: - "@jest/console" "^28.1.1" - "@jest/reporters" "^28.1.2" - "@jest/test-result" "^28.1.1" - "@jest/transform" "^28.1.2" - "@jest/types" "^28.1.1" + "@jest/console" "^28.1.3" + "@jest/reporters" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^28.0.2" - jest-config "^28.1.2" - jest-haste-map "^28.1.1" - jest-message-util "^28.1.1" + jest-changed-files "^28.1.3" + jest-config "^28.1.3" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" jest-regex-util "^28.0.2" - jest-resolve "^28.1.1" - jest-resolve-dependencies "^28.1.2" - jest-runner "^28.1.2" - jest-runtime "^28.1.2" - jest-snapshot "^28.1.2" - jest-util "^28.1.1" - jest-validate "^28.1.1" - jest-watcher "^28.1.1" + jest-resolve "^28.1.3" + jest-resolve-dependencies "^28.1.3" + jest-runner "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + jest-watcher "^28.1.3" micromatch "^4.0.4" - pretty-format "^28.1.1" + pretty-format "^28.1.3" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^28.1.2", "@jest/environment@^28.1.3": +"@jest/environment@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.3.tgz#abed43a6b040a4c24fdcb69eab1f97589b2d663e" integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== @@ -1347,22 +1347,22 @@ "@types/node" "*" jest-mock "^28.1.3" -"@jest/expect-utils@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.1.1.tgz#d84c346025b9f6f3886d02c48a6177e2b0360587" - integrity sha512-n/ghlvdhCdMI/hTcnn4qV57kQuV9OTsZzH1TTCVARANKhl6hXJqLKUkwX69ftMGpsbpt96SsDD8n8LD2d9+FRw== +"@jest/expect-utils@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.1.3.tgz#58561ce5db7cd253a7edddbc051fb39dda50f525" + integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== dependencies: jest-get-type "^28.0.2" -"@jest/expect@^28.1.2": - version "28.1.2" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.1.2.tgz#0b25acedff46e1e1e5606285306c8a399c12534f" - integrity sha512-HBzyZBeFBiOelNbBKN0pilWbbrGvwDUwAqMC46NVJmWm8AVkuE58NbG1s7DR4cxFt4U5cVLxofAoHxgvC5MyOw== +"@jest/expect@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.1.3.tgz#9ac57e1d4491baca550f6bdbd232487177ad6a72" + integrity sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw== dependencies: - expect "^28.1.1" - jest-snapshot "^28.1.2" + expect "^28.1.3" + jest-snapshot "^28.1.3" -"@jest/fake-timers@^28.1.2", "@jest/fake-timers@^28.1.3": +"@jest/fake-timers@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.3.tgz#230255b3ad0a3d4978f1d06f70685baea91c640e" integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== @@ -1374,25 +1374,25 @@ jest-mock "^28.1.3" jest-util "^28.1.3" -"@jest/globals@^28.1.2": - version "28.1.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.1.2.tgz#92fab296e337c7309c25e4202fb724f62249d83f" - integrity sha512-cz0lkJVDOtDaYhvT3Fv2U1B6FtBnV+OpEyJCzTHM1fdoTsU4QNLAt/H4RkiwEUU+dL4g/MFsoTuHeT2pvbo4Hg== +"@jest/globals@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.1.3.tgz#a601d78ddc5fdef542728309894895b4a42dc333" + integrity sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA== dependencies: - "@jest/environment" "^28.1.2" - "@jest/expect" "^28.1.2" - "@jest/types" "^28.1.1" + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/types" "^28.1.3" -"@jest/reporters@^28.1.2": - version "28.1.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.1.2.tgz#0327be4ce4d0d9ae49e7908656f89669d0c2a260" - integrity sha512-/whGLhiwAqeCTmQEouSigUZJPVl7sW8V26EiboImL+UyXznnr1a03/YZ2BX8OlFw0n+Zlwu+EZAITZtaeRTxyA== +"@jest/reporters@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.1.3.tgz#9adf6d265edafc5fc4a434cfb31e2df5a67a369a" + integrity sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^28.1.1" - "@jest/test-result" "^28.1.1" - "@jest/transform" "^28.1.2" - "@jest/types" "^28.1.1" + "@jest/console" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" "@jridgewell/trace-mapping" "^0.3.13" "@types/node" "*" chalk "^4.0.0" @@ -1405,22 +1405,15 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-message-util "^28.1.1" - jest-util "^28.1.1" - jest-worker "^28.1.1" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + jest-worker "^28.1.3" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" terminal-link "^2.0.0" v8-to-istanbul "^9.0.1" -"@jest/schemas@^28.0.2": - version "28.0.2" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.0.2.tgz#08c30df6a8d07eafea0aef9fb222c5e26d72e613" - integrity sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA== - dependencies: - "@sinclair/typebox" "^0.23.3" - "@jest/schemas@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" @@ -1437,27 +1430,27 @@ callsites "^3.0.0" graceful-fs "^4.2.9" -"@jest/test-result@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.1.tgz#c6f18d1bbb01aa88925dd687872a75f8414b317a" - integrity sha512-hPmkugBktqL6rRzwWAtp1JtYT4VHwv8OQ+9lE5Gymj6dHzubI/oJHMUpPOt8NrdVWSrz9S7bHjJUmv2ggFoUNQ== +"@jest/test-result@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" + integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== dependencies: - "@jest/console" "^28.1.1" - "@jest/types" "^28.1.1" + "@jest/console" "^28.1.3" + "@jest/types" "^28.1.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-28.1.1.tgz#f594ee2331df75000afe0d1ae3237630ecec732e" - integrity sha512-nuL+dNSVMcWB7OOtgb0EGH5AjO4UBCt68SLP08rwmC+iRhyuJWS9MtZ/MpipxFwKAlHFftbMsydXqWre8B0+XA== +"@jest/test-sequencer@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz#9d0c283d906ac599c74bde464bc0d7e6a82886c3" + integrity sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw== dependencies: - "@jest/test-result" "^28.1.1" + "@jest/test-result" "^28.1.3" graceful-fs "^4.2.9" - jest-haste-map "^28.1.1" + jest-haste-map "^28.1.3" slash "^3.0.0" -"@jest/transform@^28.1.2", "@jest/transform@^28.1.3": +"@jest/transform@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.3.tgz#59d8098e50ab07950e0f2fc0fc7ec462371281b0" integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== @@ -1499,18 +1492,6 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jest/types@^28.1.1", "@jest/types@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" - integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== - dependencies: - "@jest/schemas" "^28.1.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - "@jest/types@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" @@ -1658,11 +1639,6 @@ resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-6.1.6.tgz#de486ae0a663e1bed637a012cbb2739bfcfa2031" integrity sha512-2M4zlthYmOC6X/tcPcFd//sIL26a7JbCpGNl8uIrQf+pR1Z47uhYt9cOwVqJTJZPurdy2k+YY3Pn64pqruAPEA== -"@sinclair/typebox@^0.23.3": - version "0.23.5" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.23.5.tgz#93f7b9f4e3285a7a9ade7557d9a8d36809cbc47d" - integrity sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg== - "@sinclair/typebox@^0.24.1": version "0.24.20" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.20.tgz#11a657875de6008622d53f56e063a6347c51a6dd" @@ -2556,7 +2532,7 @@ axobject-query@^2.2.0: resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== -babel-jest@^28.1.2, babel-jest@^28.1.3: +babel-jest@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.3.tgz#c1187258197c099072156a0a121c11ee1e3917d5" integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== @@ -4861,16 +4837,16 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.1.tgz#ca6fff65f6517cf7220c2e805a49c19aea30b420" - integrity sha512-/AANEwGL0tWBwzLNOvO0yUdy2D52jVdNXppOqswC49sxMN2cPWsGCQdzuIf9tj6hHoBQzNvx75JUYuQAckPo3w== +expect@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.3.tgz#90a7c1a124f1824133dd4533cce2d2bdcb6603ec" + integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== dependencies: - "@jest/expect-utils" "^28.1.1" + "@jest/expect-utils" "^28.1.3" jest-get-type "^28.0.2" - jest-matcher-utils "^28.1.1" - jest-message-util "^28.1.1" - jest-util "^28.1.1" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" express@^4.17.1, express@^4.18.1: version "4.18.1" @@ -6463,82 +6439,82 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-28.0.2.tgz#7d7810660a5bd043af9e9cfbe4d58adb05e91531" - integrity sha512-QX9u+5I2s54ZnGoMEjiM2WeBvJR2J7w/8ZUmH2um/WLAuGAYFQcsVXY9+1YL6k0H/AGUdH8pXUAv6erDqEsvIA== +jest-changed-files@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-28.1.3.tgz#d9aeee6792be3686c47cb988a8eaf82ff4238831" + integrity sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA== dependencies: execa "^5.0.0" - throat "^6.0.1" + p-limit "^3.1.0" -jest-circus@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.1.2.tgz#0d5a5623eccb244efe87d1edc365696e4fcf80ce" - integrity sha512-E2vdPIJG5/69EMpslFhaA46WkcrN74LI5V/cSJ59L7uS8UNoXbzTxmwhpi9XrIL3zqvMt5T0pl5k2l2u2GwBNQ== +jest-circus@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.1.3.tgz#d14bd11cf8ee1a03d69902dc47b6bd4634ee00e4" + integrity sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow== dependencies: - "@jest/environment" "^28.1.2" - "@jest/expect" "^28.1.2" - "@jest/test-result" "^28.1.1" - "@jest/types" "^28.1.1" + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" is-generator-fn "^2.0.0" - jest-each "^28.1.1" - jest-matcher-utils "^28.1.1" - jest-message-util "^28.1.1" - jest-runtime "^28.1.2" - jest-snapshot "^28.1.2" - jest-util "^28.1.1" - pretty-format "^28.1.1" + jest-each "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + p-limit "^3.1.0" + pretty-format "^28.1.3" slash "^3.0.0" stack-utils "^2.0.3" - throat "^6.0.1" -jest-cli@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.1.2.tgz#b89012e5bad14135e71b1628b85475d3773a1bbc" - integrity sha512-l6eoi5Do/IJUXAFL9qRmDiFpBeEJAnjJb1dcd9i/VWfVWbp3mJhuH50dNtX67Ali4Ecvt4eBkWb4hXhPHkAZTw== +jest-cli@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.1.3.tgz#558b33c577d06de55087b8448d373b9f654e46b2" + integrity sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ== dependencies: - "@jest/core" "^28.1.2" - "@jest/test-result" "^28.1.1" - "@jest/types" "^28.1.1" + "@jest/core" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^28.1.2" - jest-util "^28.1.1" - jest-validate "^28.1.1" + jest-config "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" prompts "^2.0.1" yargs "^17.3.1" -jest-config@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.1.2.tgz#ba00ad30caf62286c86e7c1099e915218a0ac8c6" - integrity sha512-g6EfeRqddVbjPVBVY4JWpUY4IvQoFRIZcv4V36QkqzE0IGhEC/VkugFeBMAeUE7PRgC8KJF0yvJNDeQRbamEVA== +jest-config@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.1.3.tgz#e315e1f73df3cac31447eed8b8740a477392ec60" + integrity sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^28.1.1" - "@jest/types" "^28.1.1" - babel-jest "^28.1.2" + "@jest/test-sequencer" "^28.1.3" + "@jest/types" "^28.1.3" + babel-jest "^28.1.3" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^28.1.2" - jest-environment-node "^28.1.2" + jest-circus "^28.1.3" + jest-environment-node "^28.1.3" jest-get-type "^28.0.2" jest-regex-util "^28.0.2" - jest-resolve "^28.1.1" - jest-runner "^28.1.2" - jest-util "^28.1.1" - jest-validate "^28.1.1" + jest-resolve "^28.1.3" + jest-runner "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^28.1.1" + pretty-format "^28.1.3" slash "^3.0.0" strip-json-comments "^3.1.1" @@ -6552,15 +6528,15 @@ jest-diff@^25.2.1: jest-get-type "^25.2.6" pretty-format "^25.5.0" -jest-diff@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.1.tgz#1a3eedfd81ae79810931c63a1d0f201b9120106c" - integrity sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg== +jest-diff@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.3.tgz#948a192d86f4e7a64c5264ad4da4877133d8792f" + integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== dependencies: chalk "^4.0.0" diff-sequences "^28.1.1" jest-get-type "^28.0.2" - pretty-format "^28.1.1" + pretty-format "^28.1.3" jest-docblock@^28.1.1: version "28.1.1" @@ -6569,16 +6545,16 @@ jest-docblock@^28.1.1: dependencies: detect-newline "^3.0.0" -jest-each@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-28.1.1.tgz#ba5238dacf4f31d9fe23ddc2c44c01e7c23885c4" - integrity sha512-A042rqh17ZvEhRceDMi784ppoXR7MWGDEKTXEZXb4svt0eShMZvijGxzKsx+yIjeE8QYmHPrnHiTSQVhN4nqaw== +jest-each@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-28.1.3.tgz#bdd1516edbe2b1f3569cfdad9acd543040028f81" + integrity sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g== dependencies: - "@jest/types" "^28.1.1" + "@jest/types" "^28.1.3" chalk "^4.0.0" jest-get-type "^28.0.2" - jest-util "^28.1.1" - pretty-format "^28.1.1" + jest-util "^28.1.3" + pretty-format "^28.1.3" jest-environment-jsdom@^28.1.3: version "28.1.3" @@ -6594,17 +6570,17 @@ jest-environment-jsdom@^28.1.3: jest-util "^28.1.3" jsdom "^19.0.0" -jest-environment-node@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.1.2.tgz#3e2eb47f6d173b0648d5f7c717cb1c26651d5c8a" - integrity sha512-oYsZz9Qw27XKmOgTtnl0jW7VplJkN2oeof+SwAwKFQacq3CLlG9u4kTGuuLWfvu3J7bVutWlrbEQMOCL/jughw== +jest-environment-node@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.1.3.tgz#7e74fe40eb645b9d56c0c4b70ca4357faa349be5" + integrity sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A== dependencies: - "@jest/environment" "^28.1.2" - "@jest/fake-timers" "^28.1.2" - "@jest/types" "^28.1.1" + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" "@types/node" "*" - jest-mock "^28.1.1" - jest-util "^28.1.1" + jest-mock "^28.1.3" + jest-util "^28.1.3" jest-get-type@^25.2.6: version "25.2.6" @@ -6616,25 +6592,6 @@ jest-get-type@^28.0.2: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== -jest-haste-map@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.1.tgz#471685f1acd365a9394745bb97c8fc16289adca3" - integrity sha512-ZrRSE2o3Ezh7sb1KmeLEZRZ4mgufbrMwolcFHNRSjKZhpLa8TdooXOOFlSwoUzlbVs1t0l7upVRW2K7RWGHzbQ== - dependencies: - "@jest/types" "^28.1.1" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^28.0.2" - jest-util "^28.1.1" - jest-worker "^28.1.1" - micromatch "^4.0.4" - walker "^1.0.8" - optionalDependencies: - fsevents "^2.3.2" - jest-haste-map@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.3.tgz#abd5451129a38d9841049644f34b034308944e2b" @@ -6654,38 +6611,23 @@ jest-haste-map@^28.1.3: optionalDependencies: fsevents "^2.3.2" -jest-leak-detector@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-28.1.1.tgz#537f37afd610a4b3f4cab15e06baf60484548efb" - integrity sha512-4jvs8V8kLbAaotE+wFR7vfUGf603cwYtFf1/PYEsyX2BAjSzj8hQSVTP6OWzseTl0xL6dyHuKs2JAks7Pfubmw== +jest-leak-detector@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz#a6685d9b074be99e3adee816ce84fd30795e654d" + integrity sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA== dependencies: jest-get-type "^28.0.2" - pretty-format "^28.1.1" + pretty-format "^28.1.3" -jest-matcher-utils@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz#a7c4653c2b782ec96796eb3088060720f1e29304" - integrity sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw== +jest-matcher-utils@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e" + integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== dependencies: chalk "^4.0.0" - jest-diff "^28.1.1" + jest-diff "^28.1.3" jest-get-type "^28.0.2" - pretty-format "^28.1.1" - -jest-message-util@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.1.tgz#60aa0b475cfc08c8a9363ed2fb9108514dd9ab89" - integrity sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^28.1.1" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^28.1.1" - slash "^3.0.0" - stack-utils "^2.0.3" + pretty-format "^28.1.3" jest-message-util@^28.1.3: version "28.1.3" @@ -6702,7 +6644,7 @@ jest-message-util@^28.1.3: slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^28.1.1, jest-mock@^28.1.3: +jest-mock@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.1.3.tgz#d4e9b1fc838bea595c77ab73672ebf513ab249da" integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== @@ -6720,125 +6662,113 @@ jest-regex-util@^28.0.2: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== -jest-resolve-dependencies@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.2.tgz#ca528858e0c6642d5a1dda8fc7cda10230c275bc" - integrity sha512-OXw4vbOZuyRTBi3tapWBqdyodU+T33ww5cPZORuTWkg+Y8lmsxQlVu3MWtJh6NMlKRTHQetF96yGPv01Ye7Mbg== +jest-resolve-dependencies@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz#8c65d7583460df7275c6ea2791901fa975c1fe66" + integrity sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA== dependencies: jest-regex-util "^28.0.2" - jest-snapshot "^28.1.2" + jest-snapshot "^28.1.3" -jest-resolve@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-28.1.1.tgz#bc2eaf384abdcc1aaf3ba7c50d1adf01e59095e5" - integrity sha512-/d1UbyUkf9nvsgdBildLe6LAD4DalgkgZcKd0nZ8XUGPyA/7fsnaQIlKVnDiuUXv/IeZhPEDrRJubVSulxrShA== +jest-resolve@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-28.1.3.tgz#cfb36100341ddbb061ec781426b3c31eb51aa0a8" + integrity sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^28.1.1" + jest-haste-map "^28.1.3" jest-pnp-resolver "^1.2.2" - jest-util "^28.1.1" - jest-validate "^28.1.1" + jest-util "^28.1.3" + jest-validate "^28.1.3" resolve "^1.20.0" resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.1.2.tgz#f293409592a62234285a71237e38499a3554e350" - integrity sha512-6/k3DlAsAEr5VcptCMdhtRhOoYClZQmxnVMZvZ/quvPGRpN7OBQYPIC32tWSgOnbgqLXNs5RAniC+nkdFZpD4A== +jest-runner@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.1.3.tgz#5eee25febd730b4713a2cdfd76bdd5557840f9a1" + integrity sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA== dependencies: - "@jest/console" "^28.1.1" - "@jest/environment" "^28.1.2" - "@jest/test-result" "^28.1.1" - "@jest/transform" "^28.1.2" - "@jest/types" "^28.1.1" + "@jest/console" "^28.1.3" + "@jest/environment" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" "@types/node" "*" chalk "^4.0.0" emittery "^0.10.2" graceful-fs "^4.2.9" jest-docblock "^28.1.1" - jest-environment-node "^28.1.2" - jest-haste-map "^28.1.1" - jest-leak-detector "^28.1.1" - jest-message-util "^28.1.1" - jest-resolve "^28.1.1" - jest-runtime "^28.1.2" - jest-util "^28.1.1" - jest-watcher "^28.1.1" - jest-worker "^28.1.1" + jest-environment-node "^28.1.3" + jest-haste-map "^28.1.3" + jest-leak-detector "^28.1.3" + jest-message-util "^28.1.3" + jest-resolve "^28.1.3" + jest-runtime "^28.1.3" + jest-util "^28.1.3" + jest-watcher "^28.1.3" + jest-worker "^28.1.3" + p-limit "^3.1.0" source-map-support "0.5.13" - throat "^6.0.1" -jest-runtime@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.1.2.tgz#d68f34f814a848555a345ceda23289f14d59a688" - integrity sha512-i4w93OsWzLOeMXSi9epmakb2+3z0AchZtUQVF1hesBmcQQy4vtaql5YdVe9KexdJaVRyPDw8DoBR0j3lYsZVYw== +jest-runtime@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.1.3.tgz#a57643458235aa53e8ec7821949e728960d0605f" + integrity sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw== dependencies: - "@jest/environment" "^28.1.2" - "@jest/fake-timers" "^28.1.2" - "@jest/globals" "^28.1.2" + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/globals" "^28.1.3" "@jest/source-map" "^28.1.2" - "@jest/test-result" "^28.1.1" - "@jest/transform" "^28.1.2" - "@jest/types" "^28.1.1" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^28.1.1" - jest-message-util "^28.1.1" - jest-mock "^28.1.1" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" jest-regex-util "^28.0.2" - jest-resolve "^28.1.1" - jest-snapshot "^28.1.2" - jest-util "^28.1.1" + jest-resolve "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" slash "^3.0.0" strip-bom "^4.0.0" -jest-snapshot@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.1.2.tgz#93d31b87b11b384f5946fe0767541496135f8d52" - integrity sha512-wzrieFttZYfLvrCVRJxX+jwML2YTArOUqFpCoSVy1QUapx+LlV9uLbV/mMEhYj4t7aMeE9aSQFHSvV/oNoDAMA== +jest-snapshot@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.1.3.tgz#17467b3ab8ddb81e2f605db05583d69388fc0668" + integrity sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^28.1.1" - "@jest/transform" "^28.1.2" - "@jest/types" "^28.1.1" + "@jest/expect-utils" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^28.1.1" + expect "^28.1.3" graceful-fs "^4.2.9" - jest-diff "^28.1.1" + jest-diff "^28.1.3" jest-get-type "^28.0.2" - jest-haste-map "^28.1.1" - jest-matcher-utils "^28.1.1" - jest-message-util "^28.1.1" - jest-util "^28.1.1" + jest-haste-map "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" natural-compare "^1.4.0" - pretty-format "^28.1.1" + pretty-format "^28.1.3" semver "^7.3.5" -jest-util@^28.1.1, jest-util@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" - integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== - dependencies: - "@jest/types" "^28.1.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - jest-util@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" @@ -6851,30 +6781,30 @@ jest-util@^28.1.3: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-28.1.1.tgz#59b7b339b3c85b5144bd0c06ad3600f503a4acc8" - integrity sha512-Kpf6gcClqFCIZ4ti5++XemYJWUPCFUW+N2gknn+KgnDf549iLul3cBuKVe1YcWRlaF8tZV8eJCap0eECOEE3Ug== +jest-validate@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-28.1.3.tgz#e322267fd5e7c64cea4629612c357bbda96229df" + integrity sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA== dependencies: - "@jest/types" "^28.1.1" + "@jest/types" "^28.1.3" camelcase "^6.2.0" chalk "^4.0.0" jest-get-type "^28.0.2" leven "^3.1.0" - pretty-format "^28.1.1" + pretty-format "^28.1.3" -jest-watcher@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.1.tgz#533597fb3bfefd52b5cd115cd916cffd237fb60c" - integrity sha512-RQIpeZ8EIJMxbQrXpJQYIIlubBnB9imEHsxxE41f54ZwcqWLysL/A0ZcdMirf+XsMn3xfphVQVV4EW0/p7i7Ug== +jest-watcher@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" + integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== dependencies: - "@jest/test-result" "^28.1.1" - "@jest/types" "^28.1.1" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.10.2" - jest-util "^28.1.1" + jest-util "^28.1.3" string-length "^4.0.1" jest-worker@^26.5.0: @@ -6886,15 +6816,6 @@ jest-worker@^26.5.0: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.1.tgz#3480c73247171dfd01eda77200f0063ab6a3bf28" - integrity sha512-Au7slXB08C6h+xbJPp7VIb6U0XX5Kc9uel/WFc6/rcTzGiaVCBRngBExSYuXSLFPULPSYU3cJ3ybS988lNFQhQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - jest-worker@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" @@ -6904,15 +6825,15 @@ jest-worker@^28.1.3: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.2.tgz#451ff24081ce31ca00b07b60c61add13aa96f8eb" - integrity sha512-Tuf05DwLeCh2cfWCQbcz9UxldoDyiR1E9Igaei5khjonKncYdc6LDfynKCEWozK0oLE3GD+xKAo2u8x/0s6GOg== +jest@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.3.tgz#e9c6a7eecdebe3548ca2b18894a50f45b36dfc6b" + integrity sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA== dependencies: - "@jest/core" "^28.1.2" - "@jest/types" "^28.1.1" + "@jest/core" "^28.1.3" + "@jest/types" "^28.1.3" import-local "^3.0.2" - jest-cli "^28.1.2" + jest-cli "^28.1.3" js-base64@^2.1.9: version "2.6.4" @@ -8159,6 +8080,13 @@ p-limit@^3.0.2: dependencies: p-try "^2.0.0" +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -8968,16 +8896,6 @@ pretty-format@^27.0.2: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.1.tgz#f731530394e0f7fcd95aba6b43c50e02d86b95cb" - integrity sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw== - dependencies: - "@jest/schemas" "^28.0.2" - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^18.0.0" - pretty-format@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" @@ -10929,11 +10847,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -throat@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" - integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== - throng@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/throng/-/throng-4.0.0.tgz#983c6ba1993b58eae859998aa687ffe88df84c17" @@ -11890,6 +11803,11 @@ yargs@^17.3.1, yargs@^17.5.1: y18n "^5.0.5" yargs-parser "^21.0.0" +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + zlibjs@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/zlibjs/-/zlibjs-0.3.1.tgz#50197edb28a1c42ca659cc8b4e6a9ddd6d444554" From 085ce95dc2f640e86701df41743de9bd7fa57a70 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 20:55:45 +0900 Subject: [PATCH 120/646] Bump @babel/core from 7.18.6 to 7.18.9 (#18834) Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.18.6 to 7.18.9. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.9/packages/babel-core) --- updated-dependencies: - dependency-name: "@babel/core" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 102 +++++++++++---------------------------------------- 2 files changed, 23 insertions(+), 81 deletions(-) diff --git a/package.json b/package.json index 14e5c628049..5183257ecfb 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ }, "private": true, "dependencies": { - "@babel/core": "^7.18.6", + "@babel/core": "^7.18.9", "@babel/plugin-proposal-decorators": "^7.18.9", "@babel/plugin-transform-react-inline-elements": "^7.18.6", "@babel/plugin-transform-runtime": "^7.18.6", diff --git a/yarn.lock b/yarn.lock index 7d95b881bfe..b3eeee3b579 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28,21 +28,21 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.6", "@babel/core@^7.7.2": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.6.tgz#54a107a3c298aee3fe5e1947a6464b9b6faca03d" - integrity sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ== +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.9", "@babel/core@^7.7.2": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.9.tgz#805461f967c77ff46c74ca0460ccf4fe933ddd59" + integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.6" - "@babel/helper-compilation-targets" "^7.18.6" - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helpers" "^7.18.6" - "@babel/parser" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.9" "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.6" - "@babel/types" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -58,16 +58,7 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.0" -"@babel/generator@^7.18.6", "@babel/generator@^7.7.2": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.6.tgz#9ab2d46d3cbf631f0e80f72e72874a04c3fc12a9" - integrity sha512-AIwwoOS8axIC5MZbhNHRLKi3D+DMpvDf9XUcu3pIVAfOHFT45f4AoDAltRbHIQomCipkCZxrNkfpOEHhJz/VKw== - dependencies: - "@babel/types" "^7.18.6" - "@jridgewell/gen-mapping" "^0.3.0" - jsesc "^2.5.1" - -"@babel/generator@^7.18.9": +"@babel/generator@^7.18.9", "@babel/generator@^7.7.2": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.9.tgz#68337e9ea8044d6ddc690fb29acae39359cca0a5" integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== @@ -99,7 +90,7 @@ "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.18.6", "@babel/helper-compilation-targets@^7.18.9": +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== @@ -198,21 +189,7 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-transforms@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz#57e3ca669e273d55c3cda55e6ebf552f37f483c8" - integrity sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw== - dependencies: - "@babel/helper-environment-visitor" "^7.18.6" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.18.6" - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.6" - "@babel/types" "^7.18.6" - -"@babel/helper-module-transforms@^7.18.9": +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== @@ -305,14 +282,14 @@ "@babel/traverse" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helpers@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.6.tgz#4c966140eaa1fcaa3d5a8c09d7db61077d4debfd" - integrity sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ== +"@babel/helpers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" + integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== dependencies: "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.6" - "@babel/types" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" "@babel/highlight@^7.10.4": version "7.12.13" @@ -332,12 +309,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.6.tgz#845338edecad65ebffef058d3be851f1d28a63bc" - integrity sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw== - -"@babel/parser@^7.18.9": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.6", "@babel/parser@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539" integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== @@ -1085,23 +1057,7 @@ "@babel/parser" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.18.6", "@babel/traverse@^7.7.2": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.6.tgz#a228562d2f46e89258efa4ddd0416942e2fd671d" - integrity sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.6" - "@babel/helper-function-name" "^7.18.6" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.18.6" - "@babel/types" "^7.18.6" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/traverse@^7.18.9": +"@babel/traverse@^7.13.0", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98" integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== @@ -1504,15 +1460,6 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz#cf92a983c83466b8c0ce9124fadeaf09f7c66ea9" - integrity sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - "@jridgewell/gen-mapping@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" @@ -1527,11 +1474,6 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz#b876e3feefb9c8d3aa84014da28b5e52a0640d72" integrity sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg== -"@jridgewell/set-array@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.0.tgz#1179863356ac8fbea64a5a4bcde93a4871012c01" - integrity sha512-SfJxIxNVYLTsKwzB3MoOQ1yxf4w/E6MdkvTgrgAt1bfxjSrLUoHMKrDOykwN14q65waezZIdqDneUIPh4/sKxg== - "@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" From a44ea8af53d100b3414de96e14d66e3a73ef520b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 20:55:56 +0900 Subject: [PATCH 121/646] Bump @babel/plugin-transform-runtime from 7.18.6 to 7.18.9 (#18841) Bumps [@babel/plugin-transform-runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-runtime) from 7.18.6 to 7.18.9. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.9/packages/babel-plugin-transform-runtime) --- updated-dependencies: - dependency-name: "@babel/plugin-transform-runtime" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 5183257ecfb..a3c520b5c04 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@babel/core": "^7.18.9", "@babel/plugin-proposal-decorators": "^7.18.9", "@babel/plugin-transform-react-inline-elements": "^7.18.6", - "@babel/plugin-transform-runtime": "^7.18.6", + "@babel/plugin-transform-runtime": "^7.18.9", "@babel/preset-env": "^7.18.9", "@babel/preset-react": "^7.18.6", "@babel/runtime": "^7.18.9", diff --git a/yarn.lock b/yarn.lock index b3eeee3b579..27276089ec8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -859,13 +859,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-runtime@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.6.tgz#77b14416015ea93367ca06979710f5000ff34ccb" - integrity sha512-8uRHk9ZmRSnWqUgyae249EJZ94b0yAGLBIqzZzl+0iEdbno55Pmlt/32JZsHwXD9k/uZj18Aqqk35wBX4CBTXA== +"@babel/plugin-transform-runtime@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.9.tgz#d9e4b1b25719307bfafbf43065ed7fb3a83adb8f" + integrity sha512-wS8uJwBt7/b/mzE13ktsJdmS4JP/j7PQSaADtnb4I2wL0zK51MQ0pmF8/Jy0wUIS96fr+fXT6S/ifiPXnvrlSg== dependencies: "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" babel-plugin-polyfill-corejs2 "^0.3.1" babel-plugin-polyfill-corejs3 "^0.5.2" babel-plugin-polyfill-regenerator "^0.3.1" From d5ca204e89377ebce72a06eaf318c9ff848b2187 Mon Sep 17 00:00:00 2001 From: Yamagishi Kazutoshi Date: Wed, 20 Jul 2022 20:56:44 +0900 Subject: [PATCH 122/646] Bump react-redux-loading-bar from 4.0.8 to 5.0.4 (#18562) --- .../features/ui/components/image_loader.js | 26 +++++++++++-------- .../styles/mastodon/components.scss | 6 ++++- package.json | 2 +- yarn.lock | 14 +++++----- 4 files changed, 28 insertions(+), 20 deletions(-) diff --git a/app/javascript/mastodon/features/ui/components/image_loader.js b/app/javascript/mastodon/features/ui/components/image_loader.js index c6f16a79237..dfa0efe49b7 100644 --- a/app/javascript/mastodon/features/ui/components/image_loader.js +++ b/app/javascript/mastodon/features/ui/components/image_loader.js @@ -1,10 +1,10 @@ -import React from 'react'; -import PropTypes from 'prop-types'; import classNames from 'classnames'; +import PropTypes from 'prop-types'; +import React, { PureComponent } from 'react'; import { LoadingBar } from 'react-redux-loading-bar'; import ZoomableImage from './zoomable_image'; -export default class ImageLoader extends React.PureComponent { +export default class ImageLoader extends PureComponent { static propTypes = { alt: PropTypes.string, @@ -43,7 +43,7 @@ export default class ImageLoader extends React.PureComponent { this.loadImage(this.props); } - componentWillReceiveProps (nextProps) { + UNSAFE_componentWillReceiveProps (nextProps) { if (this.props.src !== nextProps.src) { this.loadImage(nextProps); } @@ -139,14 +139,18 @@ export default class ImageLoader extends React.PureComponent { return ( ); } diff --git a/app/javascript/flavours/glitch/features/status/components/detailed_status.js b/app/javascript/flavours/glitch/features/status/components/detailed_status.js index bfbfabcb600..301a2add6fa 100644 --- a/app/javascript/flavours/glitch/features/status/components/detailed_status.js +++ b/app/javascript/flavours/glitch/features/status/components/detailed_status.js @@ -296,6 +296,7 @@ class DetailedStatus extends ImmutablePureComponent { - {extraMedia} -
    From eacde1a130a5764686a284d610890ba0f60b193e Mon Sep 17 00:00:00 2001 From: Claire Date: Sun, 24 Jul 2022 17:28:47 +0200 Subject: [PATCH 134/646] Regroup CW unfolding settings in their own section --- .../features/local_settings/page/index.js | 67 ++++++++++--------- 1 file changed, 35 insertions(+), 32 deletions(-) diff --git a/app/javascript/flavours/glitch/features/local_settings/page/index.js b/app/javascript/flavours/glitch/features/local_settings/page/index.js index 2f16ed50c4f..94a87c484b3 100644 --- a/app/javascript/flavours/glitch/features/local_settings/page/index.js +++ b/app/javascript/flavours/glitch/features/local_settings/page/index.js @@ -312,38 +312,41 @@ class LocalSettingsPage extends React.PureComponent { - - - - - - - ) - }} - /> - - - - - +
    +

    + + + + + + + ) + }} + /> + + + + + +
    ), ({ intl, onChange, settings }) => ( From 18346f40443f1c01b45d94be1b0edce20b2c27be Mon Sep 17 00:00:00 2001 From: Claire Date: Sun, 24 Jul 2022 20:01:30 +0200 Subject: [PATCH 135/646] Add option to share CW toggle state across instances of a post --- .../flavours/glitch/actions/importer/index.js | 2 +- .../glitch/actions/importer/normalizer.js | 5 +- .../flavours/glitch/actions/statuses.js | 34 ++++++++ .../flavours/glitch/components/status.js | 80 ++++++++++--------- .../glitch/containers/status_container.js | 17 +++- .../components/conversation.js | 5 +- .../containers/conversation_container.js | 1 + .../features/local_settings/page/index.js | 9 +++ .../flavours/glitch/features/status/index.js | 46 ++++++++--- .../glitch/reducers/local_settings.js | 1 + .../flavours/glitch/reducers/statuses.js | 21 +++++ .../flavours/glitch/util/content_warning.js | 39 +++++---- 12 files changed, 191 insertions(+), 69 deletions(-) diff --git a/app/javascript/flavours/glitch/actions/importer/index.js b/app/javascript/flavours/glitch/actions/importer/index.js index f4372fb31d0..ec41fea6e2d 100644 --- a/app/javascript/flavours/glitch/actions/importer/index.js +++ b/app/javascript/flavours/glitch/actions/importer/index.js @@ -63,7 +63,7 @@ export function importFetchedStatuses(statuses) { const polls = []; function processStatus(status) { - pushUnique(normalStatuses, normalizeStatus(status, getState().getIn(['statuses', status.id]))); + pushUnique(normalStatuses, normalizeStatus(status, getState().getIn(['statuses', status.id]), getState().get('local_settings'))); pushUnique(accounts, status.account); if (status.reblog && status.reblog.id) { diff --git a/app/javascript/flavours/glitch/actions/importer/normalizer.js b/app/javascript/flavours/glitch/actions/importer/normalizer.js index c38af196af9..c6acdbdbb3d 100644 --- a/app/javascript/flavours/glitch/actions/importer/normalizer.js +++ b/app/javascript/flavours/glitch/actions/importer/normalizer.js @@ -1,6 +1,7 @@ import escapeTextContentForBrowser from 'escape-html'; import emojify from 'flavours/glitch/util/emoji'; import { unescapeHTML } from 'flavours/glitch/util/html'; +import { autoHideCW } from 'flavours/glitch/util/content_warning'; const domParser = new DOMParser(); @@ -41,7 +42,7 @@ export function normalizeAccount(account) { return account; } -export function normalizeStatus(status, normalOldStatus) { +export function normalizeStatus(status, normalOldStatus, settings) { const normalStatus = { ...status }; normalStatus.account = status.account.id; @@ -60,6 +61,7 @@ export function normalizeStatus(status, normalOldStatus) { normalStatus.search_index = normalOldStatus.get('search_index'); normalStatus.contentHtml = normalOldStatus.get('contentHtml'); normalStatus.spoilerHtml = normalOldStatus.get('spoilerHtml'); + normalStatus.hidden = normalOldStatus.get('hidden'); } else { const spoilerText = normalStatus.spoiler_text || ''; const searchContent = ([spoilerText, status.content].concat((status.poll && status.poll.options) ? status.poll.options.map(option => option.title) : [])).concat(status.media_attachments.map(att => att.description)).join('\n\n').replace(//g, '\n').replace(/<\/p>

    /g, '\n\n'); @@ -68,6 +70,7 @@ export function normalizeStatus(status, normalOldStatus) { normalStatus.search_index = domParser.parseFromString(searchContent, 'text/html').documentElement.textContent; normalStatus.contentHtml = emojify(normalStatus.content, emojiMap); normalStatus.spoilerHtml = emojify(escapeTextContentForBrowser(spoilerText), emojiMap); + normalStatus.hidden = (spoilerText.length > 0 || normalStatus.sensitive) && autoHideCW(settings, spoilerText); } return normalStatus; diff --git a/app/javascript/flavours/glitch/actions/statuses.js b/app/javascript/flavours/glitch/actions/statuses.js index 6ffcf181de1..1f223f22ef0 100644 --- a/app/javascript/flavours/glitch/actions/statuses.js +++ b/app/javascript/flavours/glitch/actions/statuses.js @@ -24,6 +24,10 @@ export const STATUS_UNMUTE_REQUEST = 'STATUS_UNMUTE_REQUEST'; export const STATUS_UNMUTE_SUCCESS = 'STATUS_UNMUTE_SUCCESS'; export const STATUS_UNMUTE_FAIL = 'STATUS_UNMUTE_FAIL'; +export const STATUS_REVEAL = 'STATUS_REVEAL'; +export const STATUS_HIDE = 'STATUS_HIDE'; +export const STATUS_COLLAPSE = 'STATUS_COLLAPSE'; + export const REDRAFT = 'REDRAFT'; export const STATUS_FETCH_SOURCE_REQUEST = 'STATUS_FETCH_SOURCE_REQUEST'; @@ -277,3 +281,33 @@ export function unmuteStatusFail(id, error) { error, }; }; + +export function hideStatus(ids) { + if (!Array.isArray(ids)) { + ids = [ids]; + } + + return { + type: STATUS_HIDE, + ids, + }; +}; + +export function revealStatus(ids) { + if (!Array.isArray(ids)) { + ids = [ids]; + } + + return { + type: STATUS_REVEAL, + ids, + }; +}; + +export function toggleStatusCollapse(id, isCollapsed) { + return { + type: STATUS_COLLAPSE, + id, + isCollapsed, + }; +} diff --git a/app/javascript/flavours/glitch/components/status.js b/app/javascript/flavours/glitch/components/status.js index 219f7de7abf..11c81765b0d 100644 --- a/app/javascript/flavours/glitch/components/status.js +++ b/app/javascript/flavours/glitch/components/status.js @@ -81,8 +81,8 @@ class Status extends ImmutablePureComponent { onBlock: PropTypes.func, onEmbed: PropTypes.func, onHeightChange: PropTypes.func, + onToggleHidden: PropTypes.func, muted: PropTypes.bool, - collapse: PropTypes.bool, hidden: PropTypes.bool, unread: PropTypes.bool, prepend: PropTypes.string, @@ -121,7 +121,6 @@ class Status extends ImmutablePureComponent { 'settings', 'prepend', 'muted', - 'collapse', 'notification', 'hidden', 'expanded', @@ -149,14 +148,14 @@ class Status extends ImmutablePureComponent { let updated = false; // Make sure the state mirrors props we track… - if (nextProps.collapse !== prevState.collapseProp) { - update.collapseProp = nextProps.collapse; - updated = true; - } if (nextProps.expanded !== prevState.expandedProp) { update.expandedProp = nextProps.expanded; updated = true; } + if (nextProps.status?.get('hidden') !== prevState.statusPropHidden) { + update.statusPropHidden = nextProps.status?.get('hidden'); + updated = true; + } // Update state based on new props if (!nextProps.settings.getIn(['collapsed', 'enabled'])) { @@ -164,14 +163,19 @@ class Status extends ImmutablePureComponent { update.isCollapsed = false; updated = true; } - } else if ( - nextProps.collapse !== prevState.collapseProp && - nextProps.collapse !== undefined + } + + // Handle uncollapsing toots when the shared CW state is expanded + if (nextProps.settings.getIn(['content_warnings', 'shared_state']) && + nextProps.status?.get('spoiler_text')?.length && nextProps.status?.get('hidden') === false && + prevState.statusPropHidden !== false && prevState.isCollapsed ) { - update.isCollapsed = nextProps.collapse; - if (nextProps.collapse) update.isExpanded = false; + update.isCollapsed = false; updated = true; } + + // The “expanded” prop is used to one-off change the local state. + // It's used in the thread view when unfolding/re-folding all CWs at once. if (nextProps.expanded !== prevState.expandedProp && nextProps.expanded !== undefined ) { @@ -180,15 +184,9 @@ class Status extends ImmutablePureComponent { updated = true; } - if (nextProps.expanded === undefined && - prevState.isExpanded === undefined && - update.isExpanded === undefined - ) { - const isExpanded = autoUnfoldCW(nextProps.settings, nextProps.status); - if (isExpanded !== undefined) { - update.isExpanded = isExpanded; - updated = true; - } + if (prevState.isExpanded === undefined && update.isExpanded === undefined) { + update.isExpanded = autoUnfoldCW(nextProps.settings, nextProps.status); + updated = true; } if (nextProps.status && nextProps.status.get('id') !== prevState.statusId) { @@ -243,22 +241,18 @@ class Status extends ImmutablePureComponent { const autoCollapseSettings = settings.getIn(['collapsed', 'auto']); - if (function () { - switch (true) { - case !!collapse: - case !!autoCollapseSettings.get('all'): - case autoCollapseSettings.get('notifications') && !!muted: - case autoCollapseSettings.get('lengthy') && node.clientHeight > ( - status.get('media_attachments').size && !muted ? 650 : 400 - ): - case autoCollapseSettings.get('reblogs') && prepend === 'reblogged_by': - case autoCollapseSettings.get('replies') && status.get('in_reply_to_id', null) !== null: - case autoCollapseSettings.get('media') && !(status.get('spoiler_text').length) && !!status.get('media_attachments').size: - return true; - default: - return false; - } - }()) { + // Don't autocollapse if CW state is shared and status is explicitly revealed, + // as it could cause surprising changes when receiving notifications + if (settings.getIn(['content_warnings', 'shared_state']) && status.get('spoiler_text').length && !status.get('hidden')) return; + + if (collapse || + autoCollapseSettings.get('all') || + (autoCollapseSettings.get('notifications') && muted) || + (autoCollapseSettings.get('lengthy') && node.clientHeight > ((status.get('media_attachments').size && !muted) ? 650 : 400)) || + (autoCollapseSettings.get('reblogs') && prepend === 'reblogged_by') || + (autoCollapseSettings.get('replies') && status.get('in_reply_to_id', null) !== null) || + (autoCollapseSettings.get('media') && !(status.get('spoiler_text').length) && status.get('media_attachments').size > 0) + ) { this.setCollapsed(true); // Hack to fix timeline jumps on second rendering when auto-collapsing this.setState({ autoCollapsed: true }); @@ -309,16 +303,20 @@ class Status extends ImmutablePureComponent { // is enabled, so we don't have to. setCollapsed = (value) => { if (this.props.settings.getIn(['collapsed', 'enabled'])) { - this.setState({ isCollapsed: value }); if (value) { this.setExpansion(false); } + this.setState({ isCollapsed: value }); } else { this.setState({ isCollapsed: false }); } } setExpansion = (value) => { + if (this.props.settings.getIn(['content_warnings', 'shared_state']) && this.props.status.get('hidden') === value) { + this.props.onToggleHidden(this.props.status); + } + this.setState({ isExpanded: value }); if (value) { this.setCollapsed(false); @@ -365,7 +363,9 @@ class Status extends ImmutablePureComponent { } handleExpandedToggle = () => { - if (this.props.status.get('spoiler_text')) { + if (this.props.settings.getIn(['content_warnings', 'shared_state'])) { + this.props.onToggleHidden(this.props.status); + } else if (this.props.status.get('spoiler_text')) { this.setExpansion(!this.state.isExpanded); } }; @@ -505,7 +505,7 @@ class Status extends ImmutablePureComponent { usingPiP, ...other } = this.props; - const { isExpanded, isCollapsed, forceFilter } = this.state; + const { isCollapsed, forceFilter } = this.state; let background = null; let attachments = null; @@ -528,6 +528,8 @@ class Status extends ImmutablePureComponent { return null; } + const isExpanded = settings.getIn(['content_warnings', 'shared_state']) ? !status.get('hidden') : this.state.isExpanded; + const handlers = { reply: this.handleHotkeyReply, favourite: this.handleHotkeyFavourite, diff --git a/app/javascript/flavours/glitch/containers/status_container.js b/app/javascript/flavours/glitch/containers/status_container.js index 358b89ab9f5..6c8f261e46f 100644 --- a/app/javascript/flavours/glitch/containers/status_container.js +++ b/app/javascript/flavours/glitch/containers/status_container.js @@ -17,7 +17,14 @@ import { pin, unpin, } from 'flavours/glitch/actions/interactions'; -import { muteStatus, unmuteStatus, deleteStatus, editStatus } from 'flavours/glitch/actions/statuses'; +import { + muteStatus, + unmuteStatus, + deleteStatus, + hideStatus, + revealStatus, + editStatus +} from 'flavours/glitch/actions/statuses'; import { initMuteModal } from 'flavours/glitch/actions/mutes'; import { initBlockModal } from 'flavours/glitch/actions/blocks'; import { initReport } from 'flavours/glitch/actions/reports'; @@ -252,6 +259,14 @@ const mapDispatchToProps = (dispatch, { intl, contextType }) => ({ } }, + onToggleHidden (status) { + if (status.get('hidden')) { + dispatch(revealStatus(status.get('id'))); + } else { + dispatch(hideStatus(status.get('id'))); + } + }, + deployPictureInPicture (status, type, mediaProps) { dispatch((_, getState) => { if (getState().getIn(['local_settings', 'media', 'pop_in_player'])) { diff --git a/app/javascript/flavours/glitch/features/direct_timeline/components/conversation.js b/app/javascript/flavours/glitch/features/direct_timeline/components/conversation.js index 202d9667618..7107c9db3bc 100644 --- a/app/javascript/flavours/glitch/features/direct_timeline/components/conversation.js +++ b/app/javascript/flavours/glitch/features/direct_timeline/components/conversation.js @@ -132,6 +132,8 @@ class Conversation extends ImmutablePureComponent { } handleShowMore = () => { + this.props.onToggleHidden(this.props.lastStatus); + if (this.props.lastStatus.get('spoiler_text')) { this.setExpansion(!this.state.isExpanded); } @@ -143,12 +145,13 @@ class Conversation extends ImmutablePureComponent { render () { const { accounts, lastStatus, unread, scrollKey, intl } = this.props; - const { isExpanded } = this.state; if (lastStatus === null) { return null; } + const isExpanded = this.props.settings.getIn(['content_warnings', 'shared_state']) ? !lastStatus.get('hidden') : this.state.isExpanded; + const menu = [ { text: intl.formatMessage(messages.open), action: this.handleClick }, null, diff --git a/app/javascript/flavours/glitch/features/direct_timeline/containers/conversation_container.js b/app/javascript/flavours/glitch/features/direct_timeline/containers/conversation_container.js index b15ce9f0f64..f5e5946e3b4 100644 --- a/app/javascript/flavours/glitch/features/direct_timeline/containers/conversation_container.js +++ b/app/javascript/flavours/glitch/features/direct_timeline/containers/conversation_container.js @@ -23,6 +23,7 @@ const mapStateToProps = () => { accounts: conversation.get('accounts').map(accountId => state.getIn(['accounts', accountId], null)), unread: conversation.get('unread'), lastStatus: lastStatusId && getStatus(state, { id: lastStatusId }), + settings: state.get('local_settings'), }; }; }; diff --git a/app/javascript/flavours/glitch/features/local_settings/page/index.js b/app/javascript/flavours/glitch/features/local_settings/page/index.js index 94a87c484b3..ffa4e34091a 100644 --- a/app/javascript/flavours/glitch/features/local_settings/page/index.js +++ b/app/javascript/flavours/glitch/features/local_settings/page/index.js @@ -303,6 +303,15 @@ class LocalSettingsPage extends React.PureComponent { ({ intl, onChange, settings }) => (

    + + + + { - if (this.props.status.get('spoiler_text')) { + handleToggleHidden = () => { + const { status } = this.props; + + if (this.props.settings.getIn(['content_warnings', 'shared_state'])) { + if (status.get('hidden')) { + this.props.dispatch(revealStatus(status.get('id'))); + } else { + this.props.dispatch(hideStatus(status.get('id'))); + } + } else if (this.props.status.get('spoiler_text')) { this.setExpansion(!this.state.isExpanded); } - }; + } handleToggleMediaVisibility = () => { this.setState({ showMedia: !this.state.showMedia }); @@ -354,7 +369,19 @@ class Status extends ImmutablePureComponent { } handleToggleAll = () => { - const { isExpanded } = this.state; + const { status, ancestorsIds, descendantsIds, settings } = this.props; + const statusIds = [status.get('id')].concat(ancestorsIds.toJS(), descendantsIds.toJS()); + let { isExpanded } = this.state; + + if (settings.getIn(['content_warnings', 'shared_state'])) + isExpanded = !status.get('hidden'); + + if (!isExpanded) { + this.props.dispatch(revealStatus(statusIds)); + } else { + this.props.dispatch(hideStatus(statusIds)); + } + this.setState({ isExpanded: !isExpanded, threadExpanded: !isExpanded }); } @@ -513,9 +540,8 @@ class Status extends ImmutablePureComponent { render () { let ancestors, descendants; - const { setExpansion } = this; const { status, settings, ancestorsIds, descendantsIds, intl, domain, multiColumn, usingPiP } = this.props; - const { fullscreen, isExpanded } = this.state; + const { fullscreen } = this.state; if (status === null) { return ( @@ -526,6 +552,8 @@ class Status extends ImmutablePureComponent { ); } + const isExpanded = settings.getIn(['content_warnings', 'shared_state']) ? !status.get('hidden') : this.state.isExpanded; + if (ancestorsIds && ancestorsIds.size > 0) { ancestors =
    {this.renderChildren(ancestorsIds)}
    ; } @@ -543,7 +571,7 @@ class Status extends ImmutablePureComponent { bookmark: this.handleHotkeyBookmark, mention: this.handleHotkeyMention, openProfile: this.handleHotkeyOpenProfile, - toggleSpoiler: this.handleExpandedToggle, + toggleSpoiler: this.handleToggleHidden, toggleSensitive: this.handleHotkeyToggleSensitive, openMedia: this.handleHotkeyOpenMedia, }; @@ -574,7 +602,7 @@ class Status extends ImmutablePureComponent { onOpenVideo={this.handleOpenVideo} onOpenMedia={this.handleOpenMedia} expanded={isExpanded} - onToggleHidden={this.handleExpandedToggle} + onToggleHidden={this.handleToggleHidden} domain={domain} showMedia={this.state.showMedia} onToggleMediaVisibility={this.handleToggleMediaVisibility} diff --git a/app/javascript/flavours/glitch/reducers/local_settings.js b/app/javascript/flavours/glitch/reducers/local_settings.js index 6d8feaf66fa..62ce29f0c76 100644 --- a/app/javascript/flavours/glitch/reducers/local_settings.js +++ b/app/javascript/flavours/glitch/reducers/local_settings.js @@ -27,6 +27,7 @@ const initialState = ImmutableMap({ content_warnings : ImmutableMap({ filter : null, media_outside: false, + shared_state : false, }), collapsed : ImmutableMap({ enabled : true, diff --git a/app/javascript/flavours/glitch/reducers/statuses.js b/app/javascript/flavours/glitch/reducers/statuses.js index 5db766b9672..333e4b45c59 100644 --- a/app/javascript/flavours/glitch/reducers/statuses.js +++ b/app/javascript/flavours/glitch/reducers/statuses.js @@ -10,6 +10,9 @@ import { import { STATUS_MUTE_SUCCESS, STATUS_UNMUTE_SUCCESS, + STATUS_REVEAL, + STATUS_HIDE, + STATUS_COLLAPSE, } from 'flavours/glitch/actions/statuses'; import { TIMELINE_DELETE, @@ -56,6 +59,24 @@ export default function statuses(state = initialState, action) { return state.setIn([action.id, 'muted'], true); case STATUS_UNMUTE_SUCCESS: return state.setIn([action.id, 'muted'], false); + case STATUS_REVEAL: + return state.withMutations(map => { + action.ids.forEach(id => { + if (!(state.get(id) === undefined)) { + map.setIn([id, 'hidden'], false); + } + }); + }); + case STATUS_HIDE: + return state.withMutations(map => { + action.ids.forEach(id => { + if (!(state.get(id) === undefined)) { + map.setIn([id, 'hidden'], true); + } + }); + }); + case STATUS_COLLAPSE: + return state.setIn([action.id, 'collapsed'], action.isCollapsed); case TIMELINE_DELETE: return deleteStatus(state, action.id, action.references); default: diff --git a/app/javascript/flavours/glitch/util/content_warning.js b/app/javascript/flavours/glitch/util/content_warning.js index baeb97881f6..383a342264a 100644 --- a/app/javascript/flavours/glitch/util/content_warning.js +++ b/app/javascript/flavours/glitch/util/content_warning.js @@ -1,26 +1,31 @@ import { expandSpoilers } from 'flavours/glitch/util/initial_state'; -export function autoUnfoldCW (settings, status) { - if (!expandSpoilers) { +function _autoUnfoldCW(spoiler_text, skip_unfold_regex) { + if (!expandSpoilers) return false; - } - const rawRegex = settings.getIn(['content_warnings', 'filter']); + if (!skip_unfold_regex) + return true; - if (!rawRegex) { + let regex = null; + + try { + regex = new RegExp(skip_unfold_regex.trim(), 'i'); + } catch (e) { + // Bad regex, skip filters return true; } - let regex = null; - - try { - regex = rawRegex && new RegExp(rawRegex.trim(), 'i'); - } catch (e) { - // Bad regex, don't affect filters - } - - if (!(status && regex)) { - return undefined; - } - return !regex.test(status.get('spoiler_text')); + return !regex.test(spoiler_text); +} + +export function autoHideCW(settings, spoiler_text) { + return !_autoUnfoldCW(spoiler_text, settings.getIn(['content_warnings', 'filter'])); +} + +export function autoUnfoldCW(settings, status) { + if (!status) + return false; + + return _autoUnfoldCW(status.get('spoiler_text'), settings.getIn(['content_warnings', 'filter'])); } From f174ce1048e91a42e6bbed44011c2496bca74a3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lanie=20Chauvel?= Date: Wed, 27 Jul 2022 19:17:15 +0200 Subject: [PATCH 136/646] Use slightly more margin between post buttons (under compose box) (#1816) --- app/javascript/flavours/glitch/styles/components/composer.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/styles/components/composer.scss b/app/javascript/flavours/glitch/styles/components/composer.scss index 6d45c110c5d..1468bd4f58e 100644 --- a/app/javascript/flavours/glitch/styles/components/composer.scss +++ b/app/javascript/flavours/glitch/styles/components/composer.scss @@ -634,7 +634,7 @@ & > .side_arm { display: inline-block; - margin: 0 2px; + margin: 0 5px; padding: 7px 0; width: 36px; text-align: center; From 3bc3a172eb87c9635c8e72cc6b56f93e6707b2ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 30 Jul 2022 00:56:29 +0900 Subject: [PATCH 137/646] Bump sass from 1.53.0 to 1.54.0 (#18881) Bumps [sass](https://github.com/sass/dart-sass) from 1.53.0 to 1.54.0. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.53.0...1.54.0) --- updated-dependencies: - dependency-name: sass dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 9b933a59da4..b19aeaabc01 100644 --- a/package.json +++ b/package.json @@ -119,7 +119,7 @@ "requestidlecallback": "^0.3.0", "reselect": "^4.1.6", "rimraf": "^3.0.2", - "sass": "^1.53.0", + "sass": "^1.54.0", "sass-loader": "^10.2.0", "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", diff --git a/yarn.lock b/yarn.lock index 2168c1230e4..1735e8fa61a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9749,10 +9749,10 @@ sass-loader@^10.2.0: schema-utils "^3.0.0" semver "^7.3.2" -sass@^1.53.0: - version "1.53.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.53.0.tgz#eab73a7baac045cc57ddc1d1ff501ad2659952eb" - integrity sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ== +sass@^1.54.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.0.tgz#24873673265e2a4fe3d3a997f714971db2fba1f4" + integrity sha512-C4zp79GCXZfK0yoHZg+GxF818/aclhp9F48XBu/+bm9vXEVAYov9iU3FBVRMq3Hx3OA4jfKL+p2K9180mEh0xQ== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From f305bd2c761114935e9dddd3116675b62933c3a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 30 Jul 2022 00:57:08 +0900 Subject: [PATCH 138/646] Bump eslint-plugin-jsx-a11y from 6.6.0 to 6.6.1 (#18884) Bumps [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) from 6.6.0 to 6.6.1. - [Release notes](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/releases) - [Changelog](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/CHANGELOG.md) - [Commits](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/compare/v6.6.0...v6.6.1) --- updated-dependencies: - dependency-name: eslint-plugin-jsx-a11y dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 32 ++++++++++++++++---------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index b19aeaabc01..3f777ee758d 100644 --- a/package.json +++ b/package.json @@ -145,7 +145,7 @@ "babel-jest": "^28.1.3", "eslint": "^7.32.0", "eslint-plugin-import": "~2.26.0", - "eslint-plugin-jsx-a11y": "~6.6.0", + "eslint-plugin-jsx-a11y": "~6.6.1", "eslint-plugin-promise": "~6.0.0", "eslint-plugin-react": "~7.30.1", "jest": "^28.1.3", diff --git a/yarn.lock b/yarn.lock index 1735e8fa61a..d054daf02fc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1041,7 +1041,7 @@ dependencies: regenerator-runtime "^0.12.0" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.9", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== @@ -2456,10 +2456,10 @@ autoprefixer@^9.8.8: postcss "^7.0.32" postcss-value-parser "^4.1.0" -axe-core@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.2.tgz#dcf7fb6dea866166c3eab33d68208afe4d5f670c" - integrity sha512-LVAaGp/wkkgYJcjmHsoKx4juT1aQvJyPcW09MLCjVTh3V2cc6PnyempiLMNH5iMdfIX/zdbjUx2KDjMLCTdPeA== +axe-core@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.3.tgz#11c74d23d5013c0fa5d183796729bc3482bd2f6f" + integrity sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w== axios@^0.27.2: version "0.27.2" @@ -4518,21 +4518,21 @@ eslint-plugin-import@~2.26.0: resolve "^1.22.0" tsconfig-paths "^3.14.1" -eslint-plugin-jsx-a11y@~6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.0.tgz#2c5ac12e013eb98337b9aa261c3b355275cc6415" - integrity sha512-kTeLuIzpNhXL2CwLlc8AHI0aFRwWHcg483yepO9VQiHzM9bZwJdzTkzBszbuPrbgGmq2rlX/FaT2fJQsjUSHsw== +eslint-plugin-jsx-a11y@~6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff" + integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q== dependencies: - "@babel/runtime" "^7.18.3" + "@babel/runtime" "^7.18.9" aria-query "^4.2.2" array-includes "^3.1.5" ast-types-flow "^0.0.7" - axe-core "^4.4.2" + axe-core "^4.4.3" axobject-query "^2.2.0" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" has "^1.0.3" - jsx-ast-utils "^3.3.1" + jsx-ast-utils "^3.3.2" language-tags "^1.0.5" minimatch "^3.1.2" semver "^6.3.0" @@ -6944,10 +6944,10 @@ jsonify@~0.0.0: resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.1.tgz#a3e0f1cb7e230954eab4dcbce9f6288a78f8ba44" - integrity sha512-pxrjmNpeRw5wwVeWyEAk7QJu2GnBO3uzPFmHCKJJFPKK2Cy0cWL23krGtLdnMmbIi6/FjlrQpPyfQI19ByPOhQ== +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz#afe5efe4332cd3515c065072bd4d6b0aa22152bd" + integrity sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q== dependencies: array-includes "^3.1.5" object.assign "^4.1.2" From d52afaa6c71b02d56935b4f64234b48f95913efc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 30 Jul 2022 00:59:37 +0900 Subject: [PATCH 139/646] Bump nokogiri from 1.13.7 to 1.13.8 (#18882) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.13.7 to 1.13.8. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.13.7...v1.13.8) --- updated-dependencies: - dependency-name: nokogiri dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index af07cb9a20b..d9646bd2dec 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -405,7 +405,7 @@ GEM net-ssh (>= 2.6.5, < 7.0.0) net-ssh (6.1.0) nio4r (2.5.8) - nokogiri (1.13.7) + nokogiri (1.13.8) mini_portile2 (~> 2.8.0) racc (~> 1.4) nsa (0.2.8) From 1f611d6ffb7170cd3121920c6c6d2da36b9377df Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 30 Jul 2022 01:09:28 +0900 Subject: [PATCH 140/646] Bump oj from 3.13.17 to 3.13.18 (#18896) Bumps [oj](https://github.com/ohler55/oj) from 3.13.17 to 3.13.18. - [Release notes](https://github.com/ohler55/oj/releases) - [Changelog](https://github.com/ohler55/oj/blob/develop/CHANGELOG.md) - [Commits](https://github.com/ohler55/oj/compare/v3.13.17...v3.13.18) --- updated-dependencies: - dependency-name: oj dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index d9646bd2dec..408424e0c37 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -413,7 +413,7 @@ GEM concurrent-ruby (~> 1.0, >= 1.0.2) sidekiq (>= 3.5) statsd-ruby (~> 1.4, >= 1.4.0) - oj (3.13.17) + oj (3.13.18) omniauth (1.9.1) hashie (>= 3.4.6) rack (>= 1.6.2, < 3) From f12afa177ebb51e92c222f43c01f7a5c11f4ec0d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 30 Jul 2022 01:11:57 +0900 Subject: [PATCH 141/646] Bump rqrcode from 2.1.1 to 2.1.2 (#18897) Bumps [rqrcode](https://github.com/whomwah/rqrcode) from 2.1.1 to 2.1.2. - [Release notes](https://github.com/whomwah/rqrcode/releases) - [Changelog](https://github.com/whomwah/rqrcode/blob/master/CHANGELOG.md) - [Commits](https://github.com/whomwah/rqrcode/compare/v2.1.1...v2.1.2) --- updated-dependencies: - dependency-name: rqrcode dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 408424e0c37..76c5fdb492a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -543,7 +543,7 @@ GEM rexml (3.2.5) rotp (6.2.0) rpam2 (4.0.2) - rqrcode (2.1.1) + rqrcode (2.1.2) chunky_png (~> 1.0) rqrcode_core (~> 1.0) rqrcode_core (1.2.0) From 07025a7f1bb8cee45e66249320336bf37aedaa27 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 30 Jul 2022 01:16:28 +0900 Subject: [PATCH 142/646] Bump faker from 2.21.0 to 2.22.0 (#18899) Bumps [faker](https://github.com/faker-ruby/faker) from 2.21.0 to 2.22.0. - [Release notes](https://github.com/faker-ruby/faker/releases) - [Changelog](https://github.com/faker-ruby/faker/blob/master/CHANGELOG.md) - [Commits](https://github.com/faker-ruby/faker/compare/v2.21.0...v2.22.0) --- updated-dependencies: - dependency-name: faker dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index ce5e231d06a..6f042eefec6 100644 --- a/Gemfile +++ b/Gemfile @@ -114,7 +114,7 @@ end group :test do gem 'capybara', '~> 3.37' gem 'climate_control', '~> 0.2' - gem 'faker', '~> 2.21' + gem 'faker', '~> 2.22' gem 'microformats', '~> 4.4' gem 'rails-controller-testing', '~> 1.0' gem 'rspec-sidekiq', '~> 3.1' diff --git a/Gemfile.lock b/Gemfile.lock index 76c5fdb492a..508fd395798 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -220,7 +220,7 @@ GEM tzinfo excon (0.76.0) fabrication (2.29.0) - faker (2.21.0) + faker (2.22.0) i18n (>= 1.8.11, < 2) faraday (1.9.3) faraday-em_http (~> 1.0) @@ -305,7 +305,7 @@ GEM httplog (1.5.0) rack (>= 1.0) rainbow (>= 2.0.0) - i18n (1.10.0) + i18n (1.12.0) concurrent-ruby (~> 1.0) i18n-tasks (1.0.11) activesupport (>= 4.0.2) @@ -759,7 +759,7 @@ DEPENDENCIES dotenv-rails (~> 2.7) ed25519 (~> 1.3) fabrication (~> 2.29) - faker (~> 2.21) + faker (~> 2.22) fast_blank (~> 1.0) fastimage fog-core (<= 2.1.0) From 7ad86cbc96533055e5afb12d8da8fc807059cdc2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 30 Jul 2022 01:24:30 +0900 Subject: [PATCH 143/646] Bump stackprof from 0.2.19 to 0.2.20 (#18903) Bumps [stackprof](https://github.com/tmm1/stackprof) from 0.2.19 to 0.2.20. - [Release notes](https://github.com/tmm1/stackprof/releases) - [Changelog](https://github.com/tmm1/stackprof/blob/master/CHANGELOG.md) - [Commits](https://github.com/tmm1/stackprof/compare/v0.2.19...v0.2.20) --- updated-dependencies: - dependency-name: stackprof dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 508fd395798..436838fc343 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -639,7 +639,7 @@ GEM sshkit (1.21.2) net-scp (>= 1.1.2) net-ssh (>= 2.8.0) - stackprof (0.2.19) + stackprof (0.2.20) statsd-ruby (1.5.0) stoplight (3.0.0) strong_migrations (0.7.9) From 742a8301e7dc3b4d7e83a276dbce66ccd617135b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 30 Jul 2022 01:27:12 +0900 Subject: [PATCH 144/646] Bump fabrication from 2.29.0 to 2.30.0 (#18901) Bumps [fabrication](https://gitlab.com/fabrication-gem/fabrication/) from 2.29.0 to 2.30.0. - [Release notes](https://gitlab.com/fabrication-gem/fabrication//tags) - [Commits](https://gitlab.com/fabrication-gem/fabrication//compare/2.29.0...2.30.0) --- updated-dependencies: - dependency-name: fabrication dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 6f042eefec6..0a99f075e8e 100644 --- a/Gemfile +++ b/Gemfile @@ -99,7 +99,7 @@ gem 'json-ld-preloaded', '~> 3.2' gem 'rdf-normalize', '~> 0.5' group :development, :test do - gem 'fabrication', '~> 2.29' + gem 'fabrication', '~> 2.30' gem 'fuubar', '~> 2.5' gem 'i18n-tasks', '~> 1.0', require: false gem 'pry-byebug', '~> 3.9' diff --git a/Gemfile.lock b/Gemfile.lock index 436838fc343..1b6b847ce6d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -219,7 +219,7 @@ GEM et-orbi (1.2.7) tzinfo excon (0.76.0) - fabrication (2.29.0) + fabrication (2.30.0) faker (2.22.0) i18n (>= 1.8.11, < 2) faraday (1.9.3) @@ -758,7 +758,7 @@ DEPENDENCIES doorkeeper (~> 5.5) dotenv-rails (~> 2.7) ed25519 (~> 1.3) - fabrication (~> 2.29) + fabrication (~> 2.30) faker (~> 2.22) fast_blank (~> 1.0) fastimage From f3bb142b8f86219e5dfca6d8fa99f95ff37d37fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 30 Jul 2022 01:29:43 +0900 Subject: [PATCH 145/646] Bump bootsnap from 1.12.0 to 1.13.0 (#18902) Bumps [bootsnap](https://github.com/Shopify/bootsnap) from 1.12.0 to 1.13.0. - [Release notes](https://github.com/Shopify/bootsnap/releases) - [Changelog](https://github.com/Shopify/bootsnap/blob/main/CHANGELOG.md) - [Commits](https://github.com/Shopify/bootsnap/compare/v1.12.0...v1.13.0) --- updated-dependencies: - dependency-name: bootsnap dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index 0a99f075e8e..5bb386a80c7 100644 --- a/Gemfile +++ b/Gemfile @@ -26,7 +26,7 @@ gem 'blurhash', '~> 0.1' gem 'active_model_serializers', '~> 0.10' gem 'addressable', '~> 2.8' -gem 'bootsnap', '~> 1.12.0', require: false +gem 'bootsnap', '~> 1.13.0', require: false gem 'browser' gem 'charlock_holmes', '~> 0.7.7' gem 'chewy', '~> 7.2' diff --git a/Gemfile.lock b/Gemfile.lock index 1b6b847ce6d..91c8de7aa63 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -114,7 +114,7 @@ GEM debug_inspector (>= 0.0.1) blurhash (0.1.6) ffi (~> 1.14) - bootsnap (1.12.0) + bootsnap (1.13.0) msgpack (~> 1.2) brakeman (5.2.3) browser (4.2.0) @@ -397,7 +397,7 @@ GEM mini_mime (1.1.2) mini_portile2 (2.8.0) minitest (5.16.0) - msgpack (1.5.2) + msgpack (1.5.4) multi_json (1.15.0) multipart-post (2.1.1) net-ldap (0.17.1) @@ -734,7 +734,7 @@ DEPENDENCIES better_errors (~> 2.9) binding_of_caller (~> 1.0) blurhash (~> 0.1) - bootsnap (~> 1.12.0) + bootsnap (~> 1.13.0) brakeman (~> 5.2) browser bullet (~> 7.0) From 7bfbf1c119a8c2a8a3655505fdc1ce098d47cd93 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 30 Jul 2022 01:31:49 +0900 Subject: [PATCH 146/646] Bump sidekiq-unique-jobs from 7.1.25 to 7.1.26 (#18900) Bumps [sidekiq-unique-jobs](https://github.com/mhenrixon/sidekiq-unique-jobs) from 7.1.25 to 7.1.26. - [Release notes](https://github.com/mhenrixon/sidekiq-unique-jobs/releases) - [Changelog](https://github.com/mhenrixon/sidekiq-unique-jobs/blob/main/CHANGELOG.md) - [Commits](https://github.com/mhenrixon/sidekiq-unique-jobs/compare/v7.1.25...v7.1.26) --- updated-dependencies: - dependency-name: sidekiq-unique-jobs dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 91c8de7aa63..ad99e390990 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -612,7 +612,7 @@ GEM rufus-scheduler (~> 3.2) sidekiq (>= 4) tilt (>= 1.4.0) - sidekiq-unique-jobs (7.1.25) + sidekiq-unique-jobs (7.1.26) brpoplpush-redis_script (> 0.1.1, <= 2.0.0) concurrent-ruby (~> 1.0, >= 1.0.5) sidekiq (>= 5.0, < 8.0) From 6af383213adc1666fd222c11837a9a0ddb5d24bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 30 Jul 2022 01:39:38 +0900 Subject: [PATCH 147/646] Bump dotenv-rails from 2.7.6 to 2.8.1 (#18898) Bumps [dotenv-rails](https://github.com/bkeepers/dotenv) from 2.7.6 to 2.8.1. - [Release notes](https://github.com/bkeepers/dotenv/releases) - [Changelog](https://github.com/bkeepers/dotenv/blob/master/Changelog.md) - [Commits](https://github.com/bkeepers/dotenv/compare/v2.7.6...v2.8.1) --- updated-dependencies: - dependency-name: dotenv-rails dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Gemfile b/Gemfile index 5bb386a80c7..1690f92df32 100644 --- a/Gemfile +++ b/Gemfile @@ -16,7 +16,7 @@ gem 'hamlit-rails', '~> 0.2' gem 'pg', '~> 1.4' gem 'makara', '~> 0.5' gem 'pghero', '~> 2.8' -gem 'dotenv-rails', '~> 2.7' +gem 'dotenv-rails', '~> 2.8' gem 'aws-sdk-s3', '~> 1.114', require: false gem 'fog-core', '<= 2.1.0' diff --git a/Gemfile.lock b/Gemfile.lock index ad99e390990..a37486aaa4c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -200,9 +200,9 @@ GEM unf (>= 0.0.5, < 1.0.0) doorkeeper (5.5.4) railties (>= 5) - dotenv (2.7.6) - dotenv-rails (2.7.6) - dotenv (= 2.7.6) + dotenv (2.8.1) + dotenv-rails (2.8.1) + dotenv (= 2.8.1) railties (>= 3.2) ed25519 (1.3.0) elasticsearch (7.13.3) @@ -396,7 +396,7 @@ GEM mime-types-data (3.2022.0105) mini_mime (1.1.2) mini_portile2 (2.8.0) - minitest (5.16.0) + minitest (5.16.2) msgpack (1.5.4) multi_json (1.15.0) multipart-post (2.1.1) @@ -488,8 +488,8 @@ GEM rack (>= 2.1.0) rack-proxy (0.7.0) rack - rack-test (1.1.0) - rack (>= 1.0, < 3) + rack-test (2.0.2) + rack (>= 1.3) rails (6.1.6) actioncable (= 6.1.6) actionmailbox (= 6.1.6) @@ -671,7 +671,7 @@ GEM twitter-text (3.1.0) idn-ruby unf (~> 0.1.0) - tzinfo (2.0.4) + tzinfo (2.0.5) concurrent-ruby (~> 1.0) tzinfo-data (1.2022.1) tzinfo (>= 1.0.0) @@ -756,7 +756,7 @@ DEPENDENCIES devise_pam_authenticatable2 (~> 9.2) discard (~> 1.2) doorkeeper (~> 5.5) - dotenv-rails (~> 2.7) + dotenv-rails (~> 2.8) ed25519 (~> 1.3) fabrication (~> 2.30) faker (~> 2.22) From e606140bacbfd4a3a5a203458c451d334b1b204f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 30 Jul 2022 01:48:43 +0900 Subject: [PATCH 148/646] Bump pg from 1.4.1 to 1.4.2 (#18895) Bumps [pg](https://github.com/ged/ruby-pg) from 1.4.1 to 1.4.2. - [Release notes](https://github.com/ged/ruby-pg/releases) - [Changelog](https://github.com/ged/ruby-pg/blob/master/History.rdoc) - [Commits](https://github.com/ged/ruby-pg/compare/v1.4.1...v1.4.2) --- updated-dependencies: - dependency-name: pg dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index a37486aaa4c..6130ea07fc7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -447,7 +447,7 @@ GEM parslet (2.0.0) pastel (0.8.0) tty-color (~> 0.5) - pg (1.4.1) + pg (1.4.2) pghero (2.8.3) activerecord (>= 5) pkg-config (1.4.7) From 4b36e47474d11849ac28c6c8121a568feb8308a7 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 30 Jul 2022 15:09:18 +0200 Subject: [PATCH 149/646] New Crowdin updates (#18855) * New translations en.json (Hebrew) * New translations en.json (Indonesian) * New translations activerecord.en.yml (Hebrew) * New translations activerecord.en.yml (Indonesian) * New translations en.yml (Hebrew) * New translations en.yml (Indonesian) * New translations simple_form.en.yml (Hebrew) * New translations activerecord.en.yml (Hebrew) * New translations en.yml (Hebrew) * New translations devise.en.yml (Hebrew) * New translations en.json (Chinese Simplified) * New translations en.json (Galician) * New translations en.json (Punjabi) * New translations en.json (Irish) * New translations en.json (Hungarian) * New translations en.json (Armenian) * New translations en.json (Italian) * New translations en.json (Georgian) * New translations en.json (Korean) * New translations en.json (Lithuanian) * New translations en.json (Macedonian) * New translations en.json (Norwegian) * New translations en.json (Polish) * New translations en.json (Basque) * New translations en.json (Russian) * New translations en.json (Slovak) * New translations en.json (Slovenian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Traditional) * New translations en.json (Urdu (Pakistan)) * New translations en.json (Icelandic) * New translations en.json (Finnish) * New translations en.json (Frisian) * New translations en.json (Hebrew) * New translations en.json (Greek) * New translations en.json (Albanian) * New translations en.json (French) * New translations en.json (Spanish) * New translations en.json (Japanese) * New translations en.json (Dutch) * New translations en.json (Portuguese) * New translations en.json (Chinese Simplified) * New translations en.json (Vietnamese) * New translations en.json (Portuguese, Brazilian) * New translations en.json (Romanian) * New translations en.json (Afrikaans) * New translations en.json (Arabic) * New translations en.json (Bulgarian) * New translations en.json (Catalan) * New translations en.json (Czech) * New translations en.json (Danish) * New translations en.json (German) * New translations en.json (Sinhala) * New translations en.json (Kurmanji (Kurdish)) * New translations en.json (Indonesian) * New translations en.json (Esperanto) * New translations en.json (Thai) * New translations en.json (Welsh) * New translations en.json (Persian) * New translations en.json (Sorani (Kurdish)) * New translations en.json (Cornish) * New translations en.json (Kannada) * New translations en.json (Scottish Gaelic) * New translations en.json (Asturian) * New translations en.json (Occitan) * New translations en.json (Serbian (Latin)) * New translations en.json (Corsican) * New translations en.json (Malayalam) * New translations en.json (Sardinian) * New translations en.json (Sanskrit) * New translations en.json (Kabyle) * New translations en.json (Ido) * New translations en.json (Taigi) * New translations en.json (Silesian) * New translations en.json (Breton) * New translations en.json (Tatar) * New translations en.json (Tamil) * New translations en.json (Kazakh) * New translations en.json (Spanish, Argentina) * New translations en.json (Spanish, Mexico) * New translations en.json (Bengali) * New translations en.json (Marathi) * New translations en.json (Croatian) * New translations en.json (Norwegian Nynorsk) * New translations en.json (Estonian) * New translations en.json (Chinese Traditional, Hong Kong) * New translations en.json (Latvian) * New translations en.json (Hindi) * New translations en.json (Malay) * New translations en.json (Telugu) * New translations en.json (English, United Kingdom) * New translations en.json (Uyghur) * New translations en.json (Standard Moroccan Tamazight) * New translations en.yml (Thai) * New translations activerecord.en.yml (Thai) * New translations en.json (Spanish, Argentina) * New translations en.json (Chinese Traditional) * New translations en.json (Galician) * New translations en.json (Greek) * New translations en.json (Hungarian) * New translations activerecord.en.yml (Chinese Simplified) * New translations en.json (Polish) * New translations en.json (Latvian) * New translations en.json (Albanian) * New translations simple_form.en.yml (Turkish) * New translations activerecord.en.yml (Turkish) * New translations en.json (Russian) * New translations en.json (Turkish) * New translations en.json (Portuguese) * New translations en.json (Spanish) * New translations en.json (Danish) * New translations en.json (Russian) * New translations en.json (Slovak) * New translations en.json (Slovenian) * New translations en.json (Ukrainian) * New translations en.json (Portuguese) * New translations en.json (Italian) * New translations en.json (Polish) * New translations en.json (Swedish) * New translations en.json (Ukrainian) * New translations en.json (Tamil) * New translations en.json (Spanish, Argentina) * New translations en.json (Kabyle) * New translations en.json (Spanish, Argentina) * New translations en.json (Ido) * New translations en.json (Kurmanji (Kurdish)) * New translations en.json (Hebrew) * New translations simple_form.en.yml (Hebrew) * New translations en.yml (Hebrew) * New translations en.yml (Japanese) * New translations simple_form.en.yml (Japanese) * New translations en.yml (Polish) * New translations simple_form.en.yml (Polish) * New translations activerecord.en.yml (Polish) * New translations en.json (Korean) * New translations en.json (Spanish) * New translations en.json (Hindi) * New translations en.json (Vietnamese) * New translations activerecord.en.yml (Vietnamese) * New translations en.json (Hindi) * New translations en.json (German) * New translations en.json (German) * New translations en.yml (Esperanto) * New translations en.yml (Chinese Simplified) * New translations en.json (Chinese Simplified) * New translations en.json (Esperanto) * New translations activerecord.en.yml (French) * New translations en.json (French) * New translations en.json (French) * New translations en.yml (Thai) * New translations en.json (Thai) * New translations activerecord.en.yml (Thai) * New translations en.yml (Thai) * New translations simple_form.en.yml (Thai) * New translations activerecord.en.yml (Thai) * New translations en.json (Thai) * New translations activerecord.en.yml (Thai) * New translations en.yml (Thai) * New translations simple_form.en.yml (Thai) * New translations simple_form.en.yml (Thai) * New translations doorkeeper.en.yml (Thai) * New translations simple_form.en.yml (Thai) * Run `yarn manage:translations` * Run `bundle exec i18n-tasks normalize` Co-authored-by: Yamagishi Kazutoshi --- app/javascript/mastodon/locales/af.json | 5 +- app/javascript/mastodon/locales/ar.json | 5 +- app/javascript/mastodon/locales/ast.json | 5 +- app/javascript/mastodon/locales/bg.json | 5 +- app/javascript/mastodon/locales/bn.json | 5 +- app/javascript/mastodon/locales/br.json | 5 +- app/javascript/mastodon/locales/ca.json | 5 +- app/javascript/mastodon/locales/ckb.json | 5 +- app/javascript/mastodon/locales/co.json | 5 +- app/javascript/mastodon/locales/cs.json | 5 +- app/javascript/mastodon/locales/cy.json | 5 +- app/javascript/mastodon/locales/da.json | 5 +- app/javascript/mastodon/locales/de.json | 21 ++- .../mastodon/locales/defaultMessages.json | 10 +- app/javascript/mastodon/locales/el.json | 5 +- app/javascript/mastodon/locales/en-GB.json | 5 +- app/javascript/mastodon/locales/en.json | 2 + app/javascript/mastodon/locales/eo.json | 7 +- app/javascript/mastodon/locales/es-AR.json | 5 +- app/javascript/mastodon/locales/es-MX.json | 9 +- app/javascript/mastodon/locales/es.json | 5 +- app/javascript/mastodon/locales/et.json | 5 +- app/javascript/mastodon/locales/eu.json | 5 +- app/javascript/mastodon/locales/fa.json | 5 +- app/javascript/mastodon/locales/fi.json | 5 +- app/javascript/mastodon/locales/fr.json | 7 +- app/javascript/mastodon/locales/fy.json | 5 +- app/javascript/mastodon/locales/ga.json | 5 +- app/javascript/mastodon/locales/gd.json | 5 +- app/javascript/mastodon/locales/gl.json | 5 +- app/javascript/mastodon/locales/he.json | 85 +++++----- app/javascript/mastodon/locales/hi.json | 35 ++-- app/javascript/mastodon/locales/hr.json | 5 +- app/javascript/mastodon/locales/hu.json | 5 +- app/javascript/mastodon/locales/hy.json | 5 +- app/javascript/mastodon/locales/id.json | 9 +- app/javascript/mastodon/locales/io.json | 5 +- app/javascript/mastodon/locales/is.json | 5 +- app/javascript/mastodon/locales/it.json | 7 +- app/javascript/mastodon/locales/ja.json | 5 +- app/javascript/mastodon/locales/ka.json | 5 +- app/javascript/mastodon/locales/kab.json | 7 +- app/javascript/mastodon/locales/kk.json | 5 +- app/javascript/mastodon/locales/kn.json | 5 +- app/javascript/mastodon/locales/ko.json | 5 +- app/javascript/mastodon/locales/ku.json | 5 +- app/javascript/mastodon/locales/kw.json | 5 +- app/javascript/mastodon/locales/lt.json | 5 +- app/javascript/mastodon/locales/lv.json | 5 +- app/javascript/mastodon/locales/mk.json | 5 +- app/javascript/mastodon/locales/ml.json | 5 +- app/javascript/mastodon/locales/mr.json | 5 +- app/javascript/mastodon/locales/ms.json | 5 +- app/javascript/mastodon/locales/nl.json | 5 +- app/javascript/mastodon/locales/nn.json | 5 +- app/javascript/mastodon/locales/no.json | 5 +- app/javascript/mastodon/locales/oc.json | 5 +- app/javascript/mastodon/locales/pa.json | 5 +- app/javascript/mastodon/locales/pl.json | 7 +- app/javascript/mastodon/locales/pt-BR.json | 5 +- app/javascript/mastodon/locales/pt-PT.json | 7 +- app/javascript/mastodon/locales/ro.json | 5 +- app/javascript/mastodon/locales/ru.json | 5 +- app/javascript/mastodon/locales/sa.json | 5 +- app/javascript/mastodon/locales/sc.json | 5 +- app/javascript/mastodon/locales/si.json | 5 +- app/javascript/mastodon/locales/sk.json | 9 +- app/javascript/mastodon/locales/sl.json | 5 +- app/javascript/mastodon/locales/sq.json | 5 +- app/javascript/mastodon/locales/sr-Latn.json | 5 +- app/javascript/mastodon/locales/sr.json | 5 +- app/javascript/mastodon/locales/sv.json | 7 +- app/javascript/mastodon/locales/szl.json | 5 +- app/javascript/mastodon/locales/ta.json | 7 +- app/javascript/mastodon/locales/tai.json | 5 +- app/javascript/mastodon/locales/te.json | 5 +- app/javascript/mastodon/locales/th.json | 11 +- app/javascript/mastodon/locales/tr.json | 7 +- app/javascript/mastodon/locales/tt.json | 5 +- app/javascript/mastodon/locales/ug.json | 5 +- app/javascript/mastodon/locales/uk.json | 5 +- app/javascript/mastodon/locales/ur.json | 5 +- app/javascript/mastodon/locales/vi.json | 5 +- app/javascript/mastodon/locales/zgh.json | 5 +- app/javascript/mastodon/locales/zh-CN.json | 7 +- app/javascript/mastodon/locales/zh-HK.json | 5 +- app/javascript/mastodon/locales/zh-TW.json | 5 +- config/locales/activerecord.fr.yml | 2 + config/locales/activerecord.he.yml | 19 +++ config/locales/activerecord.pl.yml | 2 + config/locales/activerecord.th.yml | 6 +- config/locales/activerecord.tr.yml | 2 + config/locales/activerecord.vi.yml | 2 + config/locales/activerecord.zh-CN.yml | 11 +- config/locales/devise.he.yml | 5 + config/locales/doorkeeper.th.yml | 18 +- config/locales/eo.yml | 2 +- config/locales/he.yml | 159 +++++++++++++++--- config/locales/id.yml | 5 + config/locales/ja.yml | 26 +++ config/locales/pl.yml | 9 + config/locales/simple_form.he.yml | 41 ++++- config/locales/simple_form.ja.yml | 13 ++ config/locales/simple_form.pl.yml | 5 + config/locales/simple_form.th.yml | 26 +-- config/locales/simple_form.tr.yml | 1 + config/locales/th.yml | 43 +++-- config/locales/zh-CN.yml | 21 +++ 108 files changed, 777 insertions(+), 242 deletions(-) diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json index 9e84a1bd7b6..942c8191fac 100644 --- a/app/javascript/mastodon/locales/af.json +++ b/app/javascript/mastodon/locales/af.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index d3f49b82fd3..13d6e4e7a75 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "أي كان مِن هذه", "hashtag.column_settings.tag_mode.none": "لا شيء مِن هذه", "hashtag.column_settings.tag_toggle": "إدراج الوسوم الإضافية لهذا العمود", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "الأساسية", "home.column_settings.show_reblogs": "اعرض الترقيات", "home.column_settings.show_replies": "اعرض الردود", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "المتابِعون", "timeline_hint.resources.follows": "المتابَعون", "timeline_hint.resources.statuses": "المنشورات القديمة", - "trends.counter_by_accounts": "{count,plural,zero{} one{{counter} شخص} two{{counter} شخصين} few{{counter} أشخاص } many{{counter} شخص} other{{counter} شخص}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "المتداولة الآن", "ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.", "units.short.billion": "{count} مليار", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 16fa5e1b665..034885e816e 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Cualesquiera d'estes", "hashtag.column_settings.tag_mode.none": "Nenguna d'estes", "hashtag.column_settings.tag_toggle": "Incluyir les etiquetes adicionales d'esta columna", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Amosar rempuestes", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older posts", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "En tendencia", "ui.beforeunload": "El borrador va perdese si coles de Mastodon.", "units.short.billion": "{count} B", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 18d95b5dd04..89f2efc8553 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Някое от тези", "hashtag.column_settings.tag_mode.none": "Никое от тези", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Основно", "home.column_settings.show_reblogs": "Показване на споделяния", "home.column_settings.show_replies": "Показване на отговори", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Последователи", "timeline_hint.resources.follows": "Последвани", "timeline_hint.resources.statuses": "По-стари публикации", - "trends.counter_by_accounts": "{count, plural, one {{counter} човек} other {{counter} човека}} говорят", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Налагащи се сега", "ui.beforeunload": "Черновата ви ще бъде загубена, ако излезете от Mastodon.", "units.short.billion": "{count}млрд", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index 34d650234b6..852c4c72048 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "এর ভেতরে যেকোনোটা", "hashtag.column_settings.tag_mode.none": "এগুলোর একটাও না", "hashtag.column_settings.tag_toggle": "আরো ট্যাগ এই কলামে যুক্ত করতে", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "সাধারণ", "home.column_settings.show_reblogs": "সমর্থনগুলো দেখান", "home.column_settings.show_replies": "মতামত দেখান", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "অনুসরকারীরা", "timeline_hint.resources.follows": "অনুসরণ করে", "timeline_hint.resources.statuses": "পুরনো টুটগুলি", - "trends.counter_by_accounts": "{count, plural,one {{counter} জন ব্যক্তি} other {{counter} জন লোক}} কথা বলছে", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "বর্তমানে জনপ্রিয়", "ui.beforeunload": "যে পর্যন্ত এটা লেখা হয়েছে, মাস্টাডন থেকে চলে গেলে এটা মুছে যাবে।", "units.short.billion": "{count}বিলিয়ন", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 14a55e42046..ac504c49c94 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Unan e mesk anezho", "hashtag.column_settings.tag_mode.none": "Hini ebet anezho", "hashtag.column_settings.tag_toggle": "Endelc'her gerioù-alc'hwez ouzhpenn evit ar bannad-mañ", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Diazez", "home.column_settings.show_reblogs": "Diskouez ar skignadennoù", "home.column_settings.show_replies": "Diskouez ar respontoù", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Heulier·ezed·ien", "timeline_hint.resources.follows": "Heuliañ", "timeline_hint.resources.statuses": "Toudoù koshoc'h", - "trends.counter_by_accounts": "{count, plural, one {{counter} den} other {{counter} a zud}} a zo o komz", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Luskad ar mare", "ui.beforeunload": "Kollet e vo ho prell ma kuitit Mastodon.", "units.short.billion": "{count}miliard", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 2e3520fedc8..bc6029fe0c6 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Qualsevol d’aquests", "hashtag.column_settings.tag_mode.none": "Cap d’aquests", "hashtag.column_settings.tag_toggle": "Inclou etiquetes addicionals per a aquesta columna", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Bàsic", "home.column_settings.show_reblogs": "Mostra els impulsos", "home.column_settings.show_replies": "Mostra les respostes", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Seguidors", "timeline_hint.resources.follows": "Seguiments", "timeline_hint.resources.statuses": "Publicacions més antigues", - "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} persones}} parlant-ne", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "En tendència", "ui.beforeunload": "El teu esborrany es perdrà si surts de Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json index 223b0d41749..80c5089aeb1 100644 --- a/app/javascript/mastodon/locales/ckb.json +++ b/app/javascript/mastodon/locales/ckb.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "هەر کام لەمانە", "hashtag.column_settings.tag_mode.none": "هیچ کام لەمانە", "hashtag.column_settings.tag_toggle": "تاگی زیادە ی ئەم ستوونە لەخۆ بنووسە", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "بنەڕەتی", "home.column_settings.show_reblogs": "پیشاندانی بەهێزکردن", "home.column_settings.show_replies": "وەڵامدانەوەکان پیشان بدە", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "شوێنکەوتوو", "timeline_hint.resources.follows": "شوێنکەوتن", "timeline_hint.resources.statuses": "نێردراوی کۆن", - "trends.counter_by_accounts": "{count, plural, one {{counter} کەس} other {{counter} کەس}} گفتوگۆ دەکا", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "ڕۆژەڤ", "ui.beforeunload": "ڕەشنووسەکەت لەدەست دەچێت ئەگەر ماستۆدۆن جێ بهێڵیت.", "units.short.billion": "{count} ملیار", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 9dd6f1a48bd..2dbc256ee1e 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Unu di quessi", "hashtag.column_settings.tag_mode.none": "Nisunu di quessi", "hashtag.column_settings.tag_toggle": "Inchjude tag addiziunali per sta colonna", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Bàsichi", "home.column_settings.show_reblogs": "Vede e spartere", "home.column_settings.show_replies": "Vede e risposte", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Abbunati", "timeline_hint.resources.follows": "Abbunamenti", "timeline_hint.resources.statuses": "Statuti più anziani", - "trends.counter_by_accounts": "{count, plural, one {{counter} persona chì parla} other {{counter} persone chì parlanu}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Tindenze d'avà", "ui.beforeunload": "A bruttacopia sarà persa s'ellu hè chjosu Mastodon.", "units.short.billion": "{count}G", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index e7d6eb87bd4..2f667eae668 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Jakékoliv z těchto", "hashtag.column_settings.tag_mode.none": "Žádné z těchto", "hashtag.column_settings.tag_toggle": "Zahrnout v tomto sloupci dodatečné tagy", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Základní", "home.column_settings.show_reblogs": "Zobrazit boosty", "home.column_settings.show_replies": "Zobrazit odpovědi", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Sledující", "timeline_hint.resources.follows": "Sledovaní", "timeline_hint.resources.statuses": "Starší příspěvky", - "trends.counter_by_accounts": "zmiňuje {count, plural, one {{counter} člověk} few {{counter} lidé} many {{counter} lidí} other {{counter} lidí}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Právě populární", "ui.beforeunload": "Pokud Mastodon opustíte, váš koncept se ztratí.", "units.short.billion": "{count} mld.", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 3a18db09539..228fd280f5c 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Unrhyw un o'r rhain", "hashtag.column_settings.tag_mode.none": "Dim o'r rhain", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Syml", "home.column_settings.show_reblogs": "Dangos hybiau", "home.column_settings.show_replies": "Dangos ymatebion", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Dilynwyr", "timeline_hint.resources.follows": "Yn dilyn", "timeline_hint.resources.statuses": "Postiadau hŷn", - "trends.counter_by_accounts": "{count, plural, one {{counter} berson} other {{counter} o bobl}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Yn tueddu nawr", "ui.beforeunload": "Mi fyddwch yn colli eich drafft os gadewch Mastodon.", "units.short.billion": "{count}biliwn", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index fab1f207506..0898b9081b9 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Nogle af disse", "hashtag.column_settings.tag_mode.none": "Ingen af disse", "hashtag.column_settings.tag_toggle": "Inkludér ekstra tags for denne kolonne", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Samlet volumen {days, plural, one {den seneste dag} other {de seneste {days} dage}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Grundlæggende", "home.column_settings.show_reblogs": "Vis boosts", "home.column_settings.show_replies": "Vis svar", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Følgere", "timeline_hint.resources.follows": "Følger", "timeline_hint.resources.statuses": "Ældre indlæg", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} personer}} taler", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} personer}} {days, plural, one {den seneste dag} other {de seneste {days} dage}}", "trends.trending_now": "Hot lige nu", "ui.beforeunload": "Dit udkast går tabt, hvis du lukker Mastodon.", "units.short.billion": "{count} mia.", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index ee6c7cfda2c..f2ec638c75d 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Eins von diesen", "hashtag.column_settings.tag_mode.none": "Keins von diesen", "hashtag.column_settings.tag_toggle": "Zusätzliche Hashtags für diese Spalte einfügen", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Gesamtes Aufkommen {days, plural, one {am letzten Tag} other {in den letzten {days} Tagen}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Einfach", "home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen", "home.column_settings.show_replies": "Antworten anzeigen", @@ -314,7 +317,7 @@ "navigation_bar.preferences": "Einstellungen", "navigation_bar.public_timeline": "Föderierte Zeitleiste", "navigation_bar.security": "Sicherheit", - "notification.admin.report": "{name} reported {target}", + "notification.admin.report": "{target} wurde von {name} gemeldet", "notification.admin.sign_up": "{name} hat sich registriert", "notification.favourite": "{name} hat deinen Beitrag favorisiert", "notification.follow": "{name} folgt dir", @@ -327,7 +330,7 @@ "notification.update": "{name} bearbeitete einen Beitrag", "notifications.clear": "Mitteilungen löschen", "notifications.clear_confirmation": "Bist du dir sicher, dass du alle Mitteilungen löschen möchtest?", - "notifications.column_settings.admin.report": "New reports:", + "notifications.column_settings.admin.report": "Neue Meldungen:", "notifications.column_settings.admin.sign_up": "Neue Anmeldungen:", "notifications.column_settings.alert": "Desktop-Benachrichtigungen", "notifications.column_settings.favourite": "Favorisierungen:", @@ -433,11 +436,11 @@ "report.thanks.title_actionable": "Vielen Dank für die Meldung, wir werden uns das ansehen.", "report.unfollow": "@{name} entfolgen", "report.unfollow_explanation": "Du folgst diesem Konto. Um die Beiträge nicht mehr auf deiner Startseite zu sehen, entfolge dem Konto.", - "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", - "report_notification.categories.other": "Other", + "report_notification.attached_statuses": "{count, plural, one {{count} angehangener Beitrag} other {{count} angehängte Beiträge}}", + "report_notification.categories.other": "Nicht Aufgelistet", "report_notification.categories.spam": "Spam", - "report_notification.categories.violation": "Rule violation", - "report_notification.open": "Open report", + "report_notification.categories.violation": "Regelbruch", + "report_notification.open": "Meldung öffnen", "search.placeholder": "Suche", "search_popout.search_format": "Fortgeschrittenes Suchformat", "search_popout.tips.full_text": "Einfache Texteingabe gibt Beiträge, die du geschrieben, favorisiert und geteilt hast zurück. Außerdem auch Beiträge in denen du erwähnt wurdest, aber auch passende Nutzernamen, Anzeigenamen oder Hashtags.", @@ -468,7 +471,7 @@ "status.embed": "Einbetten", "status.favourite": "Favorisieren", "status.filtered": "Gefiltert", - "status.hide": "Hide toot", + "status.hide": "Tröt verbergen", "status.history.created": "{name} erstellte {date}", "status.history.edited": "{name} bearbeitete {date}", "status.load_more": "Weitere laden", @@ -492,7 +495,7 @@ "status.report": "@{name} melden", "status.sensitive_warning": "NSFW", "status.share": "Teilen", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Trotzdem anzeigen", "status.show_less": "Weniger anzeigen", "status.show_less_all": "Alle Inhaltswarnungen zuklappen", "status.show_more": "Mehr anzeigen", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Follower", "timeline_hint.resources.follows": "Folgt", "timeline_hint.resources.statuses": "Ältere Beiträge", - "trends.counter_by_accounts": "{count, plural, one {{counter} Person redet darüber} other {{counter} Personen reden darüber}}", + "trends.counter_by_accounts": "{count, plural, one {{count} Person} other {{count} Personen}} {days, plural, one {am vergangenen Tag} other {in den vergangenen {days} Tagen}}", "trends.trending_now": "In den Trends", "ui.beforeunload": "Dein Entwurf geht verloren, wenn du Mastodon verlässt.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index d86cddc9bf1..9083963488d 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -2124,6 +2124,14 @@ }, { "descriptors": [ + { + "defaultMessage": "Follow hashtag", + "id": "hashtag.follow" + }, + { + "defaultMessage": "Unfollow hashtag", + "id": "hashtag.unfollow" + }, { "defaultMessage": "or {additional}", "id": "hashtag.column_header.tag_mode.any" @@ -3756,4 +3764,4 @@ ], "path": "app/javascript/mastodon/features/video/index.json" } -] +] \ No newline at end of file diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 3240b682a03..3cfce164746 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Οποιοδήποτε από αυτά", "hashtag.column_settings.tag_mode.none": "Κανένα από αυτά", "hashtag.column_settings.tag_toggle": "Προσθήκη επιπλέον ταμπελών για την κολώνα", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Συνολικός όγκος κατά την τελευταία {days, plural, one {ημέρα} other {{days} ημέρες}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Βασικές ρυθμίσεις", "home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων", "home.column_settings.show_replies": "Εμφάνιση απαντήσεων", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Ακόλουθοι", "timeline_hint.resources.follows": "Ακολουθεί", "timeline_hint.resources.statuses": "Παλαιότερα τουτ", - "trends.counter_by_accounts": "{count, plural, one {{counter} άτομο μιλάει} other {{counter} άτομα μιλάνε}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} άτομο} other {{counter} άνθρωποι}} στο παρελθόν {days, plural, one {ημέρα} other {{days} ημέρες}}", "trends.trending_now": "Δημοφιλή τώρα", "ui.beforeunload": "Το προσχέδιό σου θα χαθεί αν φύγεις από το Mastodon.", "units.short.billion": "{count}Δ", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 561f1088bd0..535c5852a48 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older posts", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index c668cefc6fe..ed7ea299267 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -220,7 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags for this column", + "hashtag.follow": "Follow hashtag", "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 3e2475f203e..67872ff0ad5 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -123,7 +123,7 @@ "confirmations.delete.message": "Ĉu vi certas, ke vi volas forigi ĉi tiun mesaĝon?", "confirmations.delete_list.confirm": "Forigi", "confirmations.delete_list.message": "Ĉu vi certas, ke vi volas porĉiame forigi ĉi tiun liston?", - "confirmations.discard_edit_media.confirm": "Forlasi", + "confirmations.discard_edit_media.confirm": "Forĵeti", "confirmations.discard_edit_media.message": "Vi havas nekonservitajn ŝanĝojn de la priskribo aŭ de la antaŭmontro de la aŭdovidaĵo, ĉu vi forlasu ilin ĉiuokaze?", "confirmations.domain_block.confirm": "Bloki la tutan domajnon", "confirmations.domain_block.message": "Ĉu vi vere, vere certas, ke vi volas tute bloki {domain}? Plej ofte, trafa blokado kaj silentigado sufiĉas kaj preferindas. Vi ne vidos enhavon de tiu domajno en publika templinio aŭ en viaj sciigoj. Viaj sekvantoj de tiu domajno estos forigitaj.", @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Iu ajn", "hashtag.column_settings.tag_mode.none": "Neniu", "hashtag.column_settings.tag_toggle": "Aldoni pliajn etikedojn por ĉi tiu kolumno", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Bazaj agordoj", "home.column_settings.show_reblogs": "Montri plusendojn", "home.column_settings.show_replies": "Montri respondojn", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Sekvantoj", "timeline_hint.resources.follows": "Sekvatoj", "timeline_hint.resources.statuses": "Pli malnovaj mesaĝoj", - "trends.counter_by_accounts": "{count, plural, one {{counter} persono} other {{counter} personoj}} parolante", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Nunaj furoraĵoj", "ui.beforeunload": "Via malneto perdiĝos se vi eliras de Mastodon.", "units.short.billion": "{count}Md", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 2c967ccdfb6..0eeb6e1ff56 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Cualquiera de estas", "hashtag.column_settings.tag_mode.none": "Ninguna de estas", "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionales para esta columna", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Volumen total en el/los último/s {days, plural, one {día} other {{days} días}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar adhesiones", "home.column_settings.show_replies": "Mostrar respuestas", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Tus seguidores", "timeline_hint.resources.follows": "Las cuentas que seguís", "timeline_hint.resources.statuses": "Mensajes más antiguos", - "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} hablando", + "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} en el/los pasado/s {days, plural, one {día} other {{days} días}}", "trends.trending_now": "Tendencia ahora", "ui.beforeunload": "Tu borrador se perderá si abandonás Mastodon.", "units.short.billion": "{count}MM", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 0923a073439..23a8d7247b8 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Cualquiera de estos", "hashtag.column_settings.tag_mode.none": "Ninguno de estos", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar retoots", "home.column_settings.show_replies": "Mostrar respuestas", @@ -468,7 +471,7 @@ "status.embed": "Incrustado", "status.favourite": "Favorito", "status.filtered": "Filtrado", - "status.hide": "Hide toot", + "status.hide": "Ocultar publicación", "status.history.created": "{name} creó {date}", "status.history.edited": "{name} editado {date}", "status.load_more": "Cargar más", @@ -492,7 +495,7 @@ "status.report": "Reportar", "status.sensitive_warning": "Contenido sensible", "status.share": "Compartir", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Mostrar de todos modos", "status.show_less": "Mostrar menos", "status.show_less_all": "Mostrar menos para todo", "status.show_more": "Mostrar más", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Seguidores", "timeline_hint.resources.follows": "Seguidos", "timeline_hint.resources.statuses": "Toots más antiguos", - "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} hablando", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Tendencia ahora", "ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.", "units.short.billion": "{count} MM", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 4e30f7b71ef..0ca847b351b 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Cualquiera de estos", "hashtag.column_settings.tag_mode.none": "Ninguno de estos", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Volumen total en los últimos {days, plural, one {día} other {{days} días}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar retoots", "home.column_settings.show_replies": "Mostrar respuestas", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Seguidores", "timeline_hint.resources.follows": "Seguidos", "timeline_hint.resources.statuses": "Publicaciones más antiguas", - "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} hablando", + "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} en los últimos {days, plural, one {días} other {{days} días}}", "trends.trending_now": "Tendencia ahora", "ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.", "units.short.billion": "{count} MM", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 2f2d29b8de8..2b6594b87ff 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Mõni neist", "hashtag.column_settings.tag_mode.none": "Mitte ükski neist", "hashtag.column_settings.tag_toggle": "Kaasa lisamärked selle tulba jaoks", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Peamine", "home.column_settings.show_reblogs": "Näita upitusi", "home.column_settings.show_replies": "Näita vastuseid", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Hetkel populaarne", "ui.beforeunload": "Teie mustand läheb kaotsi, kui lahkute Mastodonist.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 618b8265fa3..44ab5f80eca 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Hautako edozein", "hashtag.column_settings.tag_mode.none": "Hauetako bat ere ez", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Oinarrizkoa", "home.column_settings.show_reblogs": "Erakutsi bultzadak", "home.column_settings.show_replies": "Erakutsi erantzunak", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Jarraitzaileak", "timeline_hint.resources.follows": "Jarraitzen", "timeline_hint.resources.statuses": "Bidalketa zaharragoak", - "trends.counter_by_accounts": "{count, plural, one {Pertsona {counter}} other {{counter} pertsona}} hizketan", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Joera orain", "ui.beforeunload": "Zure zirriborroa galduko da Mastodon uzten baduzu.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 99621747e2e..977b0aa7402 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "هرکدام از این‌ها", "hashtag.column_settings.tag_mode.none": "هیچ‌کدام از این‌ها", "hashtag.column_settings.tag_toggle": "افزودن برچسب‌هایی بیشتر به این ستون", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "پایه‌ای", "home.column_settings.show_reblogs": "نمایش تقویت‌ها", "home.column_settings.show_replies": "نمایش پاسخ‌ها", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "پیگیرندگان", "timeline_hint.resources.follows": "پی‌گرفتگان", "timeline_hint.resources.statuses": "فرسته‌های قدیمی‌تر", - "trends.counter_by_accounts": "{count, plural, one {{counter} نفر} other {{counter} نفر}} صحبت می‌کنند", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "پرطرفدار", "ui.beforeunload": "اگر از ماستودون خارج شوید پیش‌نویس شما از دست خواهد رفت.", "units.short.billion": "{count}میلیارد", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index a423d1f0212..faa322df983 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Mikä tahansa näistä", "hashtag.column_settings.tag_mode.none": "Ei mitään näistä", "hashtag.column_settings.tag_toggle": "Sisällytä lisätunnisteet tähän sarakkeeseen", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Perusasetukset", "home.column_settings.show_reblogs": "Näytä buustaukset", "home.column_settings.show_replies": "Näytä vastaukset", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Seuraajat", "timeline_hint.resources.follows": "Seuraa", "timeline_hint.resources.statuses": "Vanhemmat julkaisut", - "trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} puhuu", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Suosittua nyt", "ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.", "units.short.billion": "{count} mrd.", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index e0a9cb42d02..18b889e9b4c 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Au moins un de ces éléments", "hashtag.column_settings.tag_mode.none": "Aucun de ces éléments", "hashtag.column_settings.tag_toggle": "Inclure des hashtags additionnels pour cette colonne", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Volume total {days, plural, one {des dernières 24h} other {des {days} derniers jours}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Basique", "home.column_settings.show_reblogs": "Afficher les partages", "home.column_settings.show_replies": "Afficher les réponses", @@ -433,7 +436,7 @@ "report.thanks.title_actionable": "Merci pour votre signalement, nous allons investiguer.", "report.unfollow": "Ne plus suivre @{name}", "report.unfollow_explanation": "Vous suivez ce compte. Désabonnez-vous pour ne plus en voir les messages sur votre fil principal.", - "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.attached_statuses": "{count, plural, one {{count} message lié} other {{count} messages liés}}", "report_notification.categories.other": "Autre", "report_notification.categories.spam": "Spam", "report_notification.categories.violation": "Infraction aux règles du serveur", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Les abonnés", "timeline_hint.resources.follows": "Les abonnements", "timeline_hint.resources.statuses": "Messages plus anciens", - "trends.counter_by_accounts": "{count, plural, one {{counter} personne en parle} other {{counter} personnes en parlent}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} personne} other {{counter} personnes}} au cours {days, plural, one {des dernières 24h} other {des {days} derniers jours}}", "trends.trending_now": "Tendance en ce moment", "ui.beforeunload": "Votre brouillon sera perdu si vous quittez Mastodon.", "units.short.billion": "{count}Md", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index dd361b995e5..ea5a61cdc23 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Folgers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Aldere berjochten", - "trends.counter_by_accounts": "{count, plural, one {{counter} persoan is} other {{counter} persoanen binne}} yn petear", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index f036e9b08c0..1dd7e635f40 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Taispeáin treisithe", "home.column_settings.show_replies": "Show replies", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Leantóirí", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older posts", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index a0127c5784a..f7ffe0d87dc 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Gin sam bith dhiubh", "hashtag.column_settings.tag_mode.none": "Às aonais gin sam bith dhiubh", "hashtag.column_settings.tag_toggle": "Gabh a-steach barrachd tagaichean sa cholbh seo", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Bunasach", "home.column_settings.show_reblogs": "Seall na brosnachaidhean", "home.column_settings.show_replies": "Seall na freagairtean", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Luchd-leantainn", "timeline_hint.resources.follows": "A’ leantainn air", "timeline_hint.resources.statuses": "Postaichean nas sine", - "trends.counter_by_accounts": "{count, plural, one {Tha {counter} neach} two {Tha {counter} neach} few {Tha {counter} daoine} other {Tha {counter} duine}} a’ bruidhinn", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "A’ treandadh an-dràsta", "ui.beforeunload": "Caillidh tu an dreachd agad ma dh’fhàgas tu Mastodon an-dràsta.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index c11db8a6555..56ceb54e892 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Calquera destes", "hashtag.column_settings.tag_mode.none": "Ningún destes", "hashtag.column_settings.tag_toggle": "Incluír cancelos adicionais para esta columna", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Cantidade total {days, plural, one {no último día} other {nos {days} últimos días}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Amosar compartidos", "home.column_settings.show_replies": "Amosar respostas", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Seguidoras", "timeline_hint.resources.follows": "Seguindo", "timeline_hint.resources.statuses": "Publicacións antigas", - "trends.counter_by_accounts": "{count, plural, one {{counter} persoa} other {{counter} persoas}} comentando", + "trends.counter_by_accounts": "{count, plural, one {{counter} persoa} other {{counter} persoas}} nos últimos {days, plural, one {día} other {{days} días}}", "trends.trending_now": "Tendencias actuais", "ui.beforeunload": "O borrador perderase se saes de Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 5d71113e41d..4cb3380b4dd 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -5,7 +5,7 @@ "account.badges.group": "קבוצה", "account.block": "חסמי את @{name}", "account.block_domain": "חסמו את קהילת {domain}", - "account.blocked": "חסום", + "account.blocked": "לחסום", "account.browse_more_on_origin_server": "ראה יותר בפרופיל המקורי", "account.cancel_follow_request": "בטל בקשת מעקב", "account.direct": "הודעה ישירה ל@{name}", @@ -38,7 +38,7 @@ "account.requested": "בהמתנה לאישור. לחצי כדי לבטל בקשת מעקב", "account.share": "שתף את הפרופיל של @{name}", "account.show_reblogs": "הצג הדהודים מאת @{name}", - "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", + "account.statuses_counter": "{count, plural, one {{counter} פוסט} two {{counter} פוסטים} many {{counter} פוסטים} other {{counter} פוסטים}}", "account.unblock": "הסר את החסימה של @{name}", "account.unblock_domain": "הסירי את החסימה של קהילת {domain}", "account.unblock_short": "הסר חסימה", @@ -77,7 +77,7 @@ "column.follow_requests": "בקשות מעקב", "column.home": "פיד הבית", "column.lists": "רשימות", - "column.mutes": "השתקות", + "column.mutes": "משתמשים בהשתקה", "column.notifications": "התראות", "column.pins": "פווסטים נעוצים", "column.public": "פיד כללי (כל השרתים)", @@ -99,7 +99,7 @@ "compose_form.hashtag_warning": "פוסט זה לא יירשם תחת תגי הקבצה (האשטאגים) היות והנראות שלו היא 'לא רשום'. רק פוסטים ציבוריים יכולים להימצא באמצעות תגי הקבצה.", "compose_form.lock_disclaimer": "חשבונך אינו {locked}. כל אחד יוכל לעקוב אחריך כדי לקרוא את הודעותיך המיועדות לעוקבים בלבד.", "compose_form.lock_disclaimer.lock": "נעול", - "compose_form.placeholder": "מה עובר לך בראש?", + "compose_form.placeholder": "על מה את/ה חושב/ת ?", "compose_form.poll.add_option": "הוסיפו בחירה", "compose_form.poll.duration": "משך הסקר", "compose_form.poll.option_placeholder": "אפשרות מספר {number}", @@ -131,12 +131,12 @@ "confirmations.logout.message": "האם אתם בטוחים שאתם רוצים להתנתק?", "confirmations.mute.confirm": "להשתיק", "confirmations.mute.explanation": "זה יסתיר פוסטים שלהם ופוסטים שמאזכרים אותם, אבל עדיין יתיר להם לראות פוסטים שלך ולעקוב אחריך.", - "confirmations.mute.message": "להשתיק את {name}?", - "confirmations.redraft.confirm": "מחק וערוך מחדש", + "confirmations.mute.message": "בטוח/ה שברצונך להשתיק את {name}?", + "confirmations.redraft.confirm": "מחיקה ועריכה מחדש", "confirmations.redraft.message": "בטוחה שאת רוצה למחוק ולהתחיל טיוטה חדשה? חיבובים והדהודים יאבדו, ותגובות לפוסט המקורי ישארו יתומות.", - "confirmations.reply.confirm": "הגב", + "confirmations.reply.confirm": "תגובה", "confirmations.reply.message": "תגובה עכשיו תדרוס את ההודעה שכבר התחלתים לכתוב. האם אתם בטוחים שברצונכם להמשיך?", - "confirmations.unfollow.confirm": "להפסיק מעקב", + "confirmations.unfollow.confirm": "הפסקת מעקב", "confirmations.unfollow.message": "להפסיק מעקב אחרי {name}?", "conversation.delete": "מחיקת שיחה", "conversation.mark_as_read": "סמן כנקרא", @@ -146,17 +146,17 @@ "directory.local": "מ- {domain} בלבד", "directory.new_arrivals": "חדשים כאן", "directory.recently_active": "פעילים לאחרונה", - "embed.instructions": "ניתן להטמיע את ההודעה באתרך ע\"י העתקת הקוד שלהלן.", + "embed.instructions": "ניתן להטמיע את הפוסט הזה באתרך ע\"י העתקת הקוד שלהלן.", "embed.preview": "דוגמא כיצד זה יראה:", "emoji_button.activity": "פעילות", "emoji_button.clear": "ניקוי", - "emoji_button.custom": "מיוחדים", + "emoji_button.custom": "בהתאמה אישית", "emoji_button.flags": "דגלים", "emoji_button.food": "אוכל ושתיה", "emoji_button.label": "הוספת אמוג'י", "emoji_button.nature": "טבע", - "emoji_button.not_found": "רגישון לא נמצא!! (╯°□°)╯︵ ┻━┻", - "emoji_button.objects": "חפצים", + "emoji_button.not_found": "לא נמצאו סמלונים מתאימים", + "emoji_button.objects": "אובייקטים", "emoji_button.people": "אנשים", "emoji_button.recent": "בשימוש תדיר", "emoji_button.search": "חיפוש...", @@ -167,7 +167,7 @@ "empty_column.account_timeline": "אין עדיין אף פוסט!", "empty_column.account_unavailable": "פרופיל לא זמין", "empty_column.blocks": "עדיין לא חסמתם משתמשים אחרים.", - "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "empty_column.bookmarked_statuses": "אין עדיין פוסטים שחיבבת. כשתחבב את הראשון, הוא יופיע כאן.", "empty_column.community": "פיד השרת המקומי ריק. יש לפרסם משהו כדי שדברים יתרחילו להתגלגל!", "empty_column.direct": "אין לך שום הודעות פרטיות עדיין. כשתשלחו או תקבלו אחת, היא תופיע כאן.", "empty_column.domain_blocks": "אין עדיין קהילות מוסתרות.", @@ -177,7 +177,7 @@ "empty_column.follow_recommendations": "נראה שלא ניתן לייצר המלצות עבורך. נסה/י להשתמש בחיפוש כדי למצוא אנשים מוכרים או לבדוק את הנושאים החמים.", "empty_column.follow_requests": "אין לך שום בקשות מעקב עדיין. לכשיתקבלו כאלה, הן תופענה כאן.", "empty_column.hashtag": "אין כלום בהאשתג הזה עדיין.", - "empty_column.home": "אף אחד לא במעקב עדיין. אפשר לבקר ב{public} או להשתמש בחיפוש כדי להתחיל ולהכיר חצוצרנים אחרים. {suggestions}", + "empty_column.home": "פיד הבית ריק ! אפשר לבקר ב{public} או להשתמש בחיפוש כדי להתחיל ולהכיר משתמשים/ות אחרים/ות. {suggestions}", "empty_column.home.suggestions": "ראה/י כמה הצעות", "empty_column.list": "אין עדיין פריטים ברשימה. כאשר חברים ברשימה הזאת יפרסמו פוסטים חדשים, הם יופיעו פה.", "empty_column.lists": "אין לך שום רשימות עדיין. לכשיהיו, הן תופענה כאן.", @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "כל אלה", "hashtag.column_settings.tag_mode.none": "אף אחד מאלה", "hashtag.column_settings.tag_toggle": "כלול תגיות נוספות בטור זה", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "למתחילים", "home.column_settings.show_reblogs": "הצגת הדהודים", "home.column_settings.show_replies": "הצגת תגובות", @@ -240,10 +243,10 @@ "keyboard_shortcuts.favourite": "לחבב", "keyboard_shortcuts.favourites": "פתיחת רשימת מועדפים", "keyboard_shortcuts.federated": "פתיחת ציר זמן בין-קהילתי", - "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.heading": "מקשי קיצור במקלדת", "keyboard_shortcuts.home": "פתיחת ציר זמן אישי", "keyboard_shortcuts.hotkey": "מקש קיצור", - "keyboard_shortcuts.legend": "להציג את הפירוש", + "keyboard_shortcuts.legend": "הצגת מקרא", "keyboard_shortcuts.local": "פתיחת ציר זמן קהילתי", "keyboard_shortcuts.mention": "לאזכר את המחבר(ת)", "keyboard_shortcuts.muted": "פתיחת רשימת משתמשים מושתקים", @@ -252,11 +255,11 @@ "keyboard_shortcuts.open_media": "פתיחת מדיה", "keyboard_shortcuts.pinned": "פתיחת רשימת חצרותים מוצמדים", "keyboard_shortcuts.profile": "פתח את פרופיל המשתמש", - "keyboard_shortcuts.reply": "לענות", + "keyboard_shortcuts.reply": "תגובה לפוסט", "keyboard_shortcuts.requests": "פתיחת רשימת בקשות מעקב", "keyboard_shortcuts.search": "להתמקד בחלון החיפוש", "keyboard_shortcuts.spoilers": "הצגת/הסתרת שדה אזהרת תוכן (CW)", - "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.start": "לפתוח את הטור \"בואו נתחיל\"", "keyboard_shortcuts.toggle_hidden": "הצגת/הסתרת טקסט מוסתר מאחורי אזהרת תוכן", "keyboard_shortcuts.toggle_sensitivity": "הצגת/הסתרת מדיה", "keyboard_shortcuts.toot": "להתחיל פוסט חדש", @@ -265,7 +268,7 @@ "lightbox.close": "סגירה", "lightbox.compress": "דחיסת קופסת צפייה בתמונה", "lightbox.expand": "הרחבת קופסת צפייה בתמונה", - "lightbox.next": "הלאה", + "lightbox.next": "הבא", "lightbox.previous": "הקודם", "limited_account_hint.action": "הצג חשבון בכל זאת", "limited_account_hint.title": "פרופיל זה הוסתר ע\"י מנהלי השרת שלך.", @@ -284,7 +287,7 @@ "lists.subheading": "הרשימות שלך", "load_pending": "{count, plural, one {# פריט חדש} other {# פריטים חדשים}}", "loading_indicator.label": "טוען...", - "media_gallery.toggle_visible": "נראה\\בלתי נראה", + "media_gallery.toggle_visible": "{number, plural, one {להסתיר תמונה} two {Hide images} many {להסתיר תמונות} other {Hide תמונות}}", "missing_indicator.label": "לא נמצא", "missing_indicator.sublabel": "לא ניתן היה למצוא את המשאב", "mute_modal.duration": "משך הזמן", @@ -308,15 +311,15 @@ "navigation_bar.keyboard_shortcuts": "קיצורי מקלדת", "navigation_bar.lists": "רשימות", "navigation_bar.logout": "התנתקות", - "navigation_bar.mutes": "השתקות", + "navigation_bar.mutes": "משתמשים בהשתקה", "navigation_bar.personal": "אישי", "navigation_bar.pins": "פוסטים נעוצים", "navigation_bar.preferences": "העדפות", - "navigation_bar.public_timeline": "ציר זמן בין-קהילתי", + "navigation_bar.public_timeline": "פיד כללי (כל השרתים)", "navigation_bar.security": "אבטחה", - "notification.admin.report": "{name} reported {target}", + "notification.admin.report": "{name} דיווח.ה על {target}", "notification.admin.sign_up": "{name} נרשמו", - "notification.favourite": "חצרוצך חובב על ידי {name}", + "notification.favourite": "{name} חיבב/ה את הפוסט שלך", "notification.follow": "{name} במעקב אחרייך", "notification.follow_request": "{name} ביקשו לעקוב אחריך", "notification.mention": "אוזכרת על ידי {name}", @@ -326,8 +329,8 @@ "notification.status": "{name} הרגע פרסמו", "notification.update": "{name} ערכו פוסט", "notifications.clear": "הסרת התראות", - "notifications.clear_confirmation": "להסיר את כל ההתראות? בטוח?", - "notifications.column_settings.admin.report": "New reports:", + "notifications.clear_confirmation": "להסיר את כל ההתראות לצמיתות ? ", + "notifications.column_settings.admin.report": "דו\"חות חדשים", "notifications.column_settings.admin.sign_up": "הרשמות חדשות:", "notifications.column_settings.alert": "התראות לשולחן העבודה", "notifications.column_settings.favourite": "מחובבים:", @@ -338,7 +341,7 @@ "notifications.column_settings.follow_request": "בקשות מעקב חדשות:", "notifications.column_settings.mention": "פניות:", "notifications.column_settings.poll": "תוצאות סקר:", - "notifications.column_settings.push": "הודעות בדחיפה", + "notifications.column_settings.push": "התראות בדחיפה", "notifications.column_settings.reblog": "הדהודים:", "notifications.column_settings.show": "הצגה בטור", "notifications.column_settings.sound": "שמע מופעל", @@ -433,24 +436,24 @@ "report.thanks.title_actionable": "תודה על הדיווח, נבדוק את העניין.", "report.unfollow": "הפסיקו לעקוב אחרי @{name}", "report.unfollow_explanation": "אתם עוקבים אחרי החשבון הזה. כדי להפסיק לראות את הפרסומים שלו בפיד הבית שלכם, הפסיקו לעקוב אחריהם.", - "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", - "report_notification.categories.other": "Other", - "report_notification.categories.spam": "Spam", - "report_notification.categories.violation": "Rule violation", - "report_notification.open": "Open report", + "report_notification.attached_statuses": "{count, plural, one {{count} פוסט} two {{count} posts} many {{count} פוסטים} other {{count} פוסטים}} מצורפים", + "report_notification.categories.other": "שונות", + "report_notification.categories.spam": "ספאם (דואר זבל)", + "report_notification.categories.violation": "הפרת כלל", + "report_notification.open": "פתח דו\"ח", "search.placeholder": "חיפוש", "search_popout.search_format": "מבנה חיפוש מתקדם", - "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.full_text": "טקסט פשוט מחזיר פוסטים שכתבת, חיבבת, הידהדת או שאוזכרת בהם, כמו גם שמות משתמשים, שמות להצגה ותגיות מתאימים.", "search_popout.tips.hashtag": "האשתג", - "search_popout.tips.status": "status", + "search_popout.tips.status": "פוסט", "search_popout.tips.text": "טקסט פשוט מחזיר כינויים, שמות משתמש והאשתגים", "search_popout.tips.user": "משתמש(ת)", "search_results.accounts": "אנשים", "search_results.all": "כל התוצאות", "search_results.hashtags": "האשתגיות", "search_results.nothing_found": "לא נמצא דבר עבור תנאי חיפוש אלה", - "search_results.statuses": "Toots", - "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.statuses": "פוסטים", + "search_results.statuses_fts_disabled": "חיפוש פוסטים לפי תוכן לא מאופשר בשרת מסטודון זה.", "search_results.total": "{count, number} {count, plural, one {תוצאה} other {תוצאות}}", "status.admin_account": "פתח/י ממשק ניהול עבור @{name}", "status.admin_status": "Open this status in the moderation interface", @@ -468,7 +471,7 @@ "status.embed": "הטמעה", "status.favourite": "חיבוב", "status.filtered": "סונן", - "status.hide": "Hide toot", + "status.hide": "הסתר פוסט", "status.history.created": "{name} יצר/ה {date}", "status.history.edited": "{name} ערך/ה {date}", "status.load_more": "עוד", @@ -479,7 +482,7 @@ "status.mute_conversation": "השתקת שיחה", "status.open": "הרחבת פוסט זה", "status.pin": "הצמדה לפרופיל שלי", - "status.pinned": "Pinned toot", + "status.pinned": "פוסט נעוץ", "status.read_more": "לקרוא עוד", "status.reblog": "הדהוד", "status.reblog_private": "להדהד ברמת הנראות המקורית", @@ -492,7 +495,7 @@ "status.report": "דיווח על @{name}", "status.sensitive_warning": "תוכן רגיש", "status.share": "שיתוף", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "הראה בכל זאת", "status.show_less": "הראה פחות", "status.show_less_all": "להציג פחות מהכל", "status.show_more": "הראה יותר", @@ -516,8 +519,8 @@ "timeline_hint.remote_resource_not_displayed": "{resource} משרתים אחרים לא מוצגים.", "timeline_hint.resources.followers": "עוקבים", "timeline_hint.resources.follows": "נעקבים", - "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} אחד/ת מדבר/ת} other {{counter} אנשים מדברים}}", + "timeline_hint.resources.statuses": "פוסטים ישנים יותר", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "נושאים חמים", "ui.beforeunload": "הטיוטא תאבד אם תעזבו את מסטודון.", "units.short.billion": "{count} מליארד", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index 0ff1fc7a16f..aa76ebf101d 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -92,10 +92,10 @@ "community.column_settings.local_only": "स्थानीय ही", "community.column_settings.media_only": "सिर्फ़ मीडिया", "community.column_settings.remote_only": "केवल सुदूर", - "compose.language.change": "Change language", - "compose.language.search": "Search languages...", + "compose.language.change": "भाषा बदलें", + "compose.language.search": "भाषाएँ खोजें...", "compose_form.direct_message_warning_learn_more": "और जानें", - "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", + "compose_form.encryption_warning": "मास्टोडॉन पर पोस्ट एन्ड-टू-एन्ड एन्क्रिप्टेड नहीं है। कोई भी व्यक्तिगत जानकारी मास्टोडॉन पर मत भेजें।", "compose_form.hashtag_warning": "यह टूट् किसी भी हैशटैग के तहत सूचीबद्ध नहीं होगा क्योंकि यह अनलिस्टेड है। हैशटैग द्वारा केवल सार्वजनिक टूट्स खोजे जा सकते हैं।", "compose_form.lock_disclaimer": "आपका खाता {locked} नहीं है। आपको केवल फॉलोवर्स को दिखाई दिए जाने वाले पोस्ट देखने के लिए कोई भी फॉलो कर सकता है।", "compose_form.lock_disclaimer.lock": "लॉक्ड", @@ -149,7 +149,7 @@ "embed.instructions": "अपने वेबसाइट पर, निचे दिए कोड को कॉपी करके, इस स्टेटस को एम्बेड करें", "embed.preview": "यह ऐसा दिखेगा :", "emoji_button.activity": "गतिविधि", - "emoji_button.clear": "Clear", + "emoji_button.clear": "मिटा दें", "emoji_button.custom": "निजीकृत", "emoji_button.flags": "झंडे", "emoji_button.food": "भोजन एवं पेय", @@ -191,7 +191,7 @@ "errors.unexpected_crash.copy_stacktrace": "स्टैकट्रेस को क्लिपबोर्ड पर कॉपी करें", "errors.unexpected_crash.report_issue": "समस्या सूचित करें", "explore.search_results": "Search results", - "explore.suggested_follows": "For you", + "explore.suggested_follows": "आपके लिए", "explore.title": "Explore", "explore.trending_links": "News", "explore.trending_statuses": "Posts", @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "इनमें से कोई भी", "hashtag.column_settings.tag_mode.none": "इनमें से कोई भी नहीं", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "बुनियादी", "home.column_settings.show_reblogs": "बूस्ट दिखाए", "home.column_settings.show_replies": "जवाबों को दिखाए", @@ -387,17 +390,17 @@ "relative_time.days": "{number}d", "relative_time.full.days": "{number, plural, one {# day} other {# days}} ago", "relative_time.full.hours": "{number, plural, one {# hour} other {# hours}} ago", - "relative_time.full.just_now": "just now", - "relative_time.full.minutes": "{number, plural, one {# minute} other {# minutes}} ago", - "relative_time.full.seconds": "{number, plural, one {# second} other {# seconds}} ago", - "relative_time.hours": "{number}h", + "relative_time.full.just_now": "अभी-अभी", + "relative_time.full.minutes": "{number, plural, one {# मिनट} other {# मिनट}} पहले", + "relative_time.full.seconds": "{number, plural, one {# सेकंड} other {# सेकंड}} पहले", + "relative_time.hours": "{number} घंटे", "relative_time.just_now": "अभी", - "relative_time.minutes": "{number}m", - "relative_time.seconds": "{number}s", - "relative_time.today": "today", + "relative_time.minutes": "{number} मिनट", + "relative_time.seconds": "{number} सेकंड", + "relative_time.today": "आज", "reply_indicator.cancel": "रद्द करें", "report.block": "Block", - "report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.", + "report.block_explanation": "आपको उनकी पोस्टें नहीं दिखेंगे। वे आपकी पोस्टें को देख नहीं पाएंगे और आपको फ़ॉलो नहीं कर पाएंगे। उन्हे पता लगेगा कि वे blocked हैं।", "report.categories.other": "Other", "report.categories.spam": "Spam", "report.categories.violation": "Content violates one or more server rules", @@ -413,9 +416,9 @@ "report.mute_explanation": "You will not see their posts. They can still follow you and see your posts and will not know that they are muted.", "report.next": "Next", "report.placeholder": "Type or paste additional comments", - "report.reasons.dislike": "I don't like it", + "report.reasons.dislike": "मुझे यह पसंद नहीं है", "report.reasons.dislike_description": "It is not something you want to see", - "report.reasons.other": "It's something else", + "report.reasons.other": "कुछ और है।", "report.reasons.other_description": "The issue does not fit into other categories", "report.reasons.spam": "It's spam", "report.reasons.spam_description": "Malicious links, fake engagement, or repetitive replies", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 56678d12a95..fe0379f0af5 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Bilo koji navedeni", "hashtag.column_settings.tag_mode.none": "Nijedan navedeni", "hashtag.column_settings.tag_toggle": "Uključi dodatne oznake za ovaj stupac", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Osnovno", "home.column_settings.show_reblogs": "Pokaži boostove", "home.column_settings.show_replies": "Pokaži odgovore", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Pratitelji", "timeline_hint.resources.follows": "Praćenja", "timeline_hint.resources.statuses": "Stariji tootovi", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Popularno", "ui.beforeunload": "Vaša skica bit će izgubljena ako napustite Mastodon.", "units.short.billion": "{count} mlrd.", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 4b768de8f43..def9348ec89 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Bármelyik", "hashtag.column_settings.tag_mode.none": "Egyik sem", "hashtag.column_settings.tag_toggle": "Új címkék felvétele ehhez az oszlophoz", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Teljes mennyiség az elmúlt {days, plural, one {napban} other {{days} napban}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Alapvető", "home.column_settings.show_reblogs": "Megtolások mutatása", "home.column_settings.show_replies": "Válaszok megjelenítése", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Követő", "timeline_hint.resources.follows": "Követett", "timeline_hint.resources.statuses": "Régi bejegyzések", - "trends.counter_by_accounts": "{count, plural, one {{counter} személy} other {{counter} személy}} beszélget", + "trends.counter_by_accounts": "{count, plural, one {{counter} ember} other {{counter} ember}} az elmúlt {days, plural,one {napban} other {{days} napban}}", "trends.trending_now": "Most felkapott", "ui.beforeunload": "A piszkozatod el fog veszni, ha elhagyod a Mastodont.", "units.short.billion": "{count}Mrd", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 866a6a2cf3b..9aa8ec4c37a 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Ցանկացածը", "hashtag.column_settings.tag_mode.none": "Ոչ մեկը", "hashtag.column_settings.tag_toggle": "Ներառել լրացուցիչ պիտակները այս սիւնակում ", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Հիմնական", "home.column_settings.show_reblogs": "Ցուցադրել տարածածները", "home.column_settings.show_replies": "Ցուցադրել պատասխանները", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Հետեւորդ", "timeline_hint.resources.follows": "Հետեւել", "timeline_hint.resources.statuses": "Հին գրառումներ", - "trends.counter_by_accounts": "{count, plural, one {{counter} մարդ} other {{counter} մարդիկ}} խօսում են", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Այժմ արդիական", "ui.beforeunload": "Քո սեւագիրը կը կորի, եթէ լքես Մաստոդոնը։", "units.short.billion": "{count}մլրդ", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 04fe5213b35..effc01737ab 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -1,9 +1,9 @@ { "account.account_note_header": "Catatan", "account.add_or_remove_from_list": "Tambah atau Hapus dari daftar", - "account.badges.bot": "Bot", + "account.badges.bot": "בוט", "account.badges.group": "Grup", - "account.block": "Blokir @{name}", + "account.block": "{name}לחסום את ", "account.block_domain": "Blokir domain {domain}", "account.blocked": "Terblokir", "account.browse_more_on_origin_server": "Lihat lebih lanjut diprofil asli", @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Semua ini", "hashtag.column_settings.tag_mode.none": "Tak satu pun", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Dasar", "home.column_settings.show_reblogs": "Tampilkan boost", "home.column_settings.show_replies": "Tampilkan balasan", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Pengikut", "timeline_hint.resources.follows": "Ikuti", "timeline_hint.resources.statuses": "Toot lama", - "trends.counter_by_accounts": "{count, plural, other {{counter} orang}} berbicara", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Sedang tren sekarang", "ui.beforeunload": "Naskah anda akan hilang jika anda keluar dari Mastodon.", "units.short.billion": "{count}M", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index d06045cf8ab..d546871177b 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Irga co", "hashtag.column_settings.tag_mode.none": "Nula co", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Sumo en antea {days, plural,one {dio} other {{days} dii}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Simpla", "home.column_settings.show_reblogs": "Montrar repeti", "home.column_settings.show_replies": "Montrar respondi", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Sequanti", "timeline_hint.resources.follows": "Sequati", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} persono} other {{counter} personi}} parolas", + "trends.counter_by_accounts": "{count, plural,one {{counter} persono} other {{counter} personi}} en antea {days, plural,one {dio} other {{days} dii}}", "trends.trending_now": "Tendencigas nun", "ui.beforeunload": "Vua skisato perdesos se vu ekiras Mastodon.", "units.short.billion": "{count}G", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index a2714aa4f46..e12bfe30564 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Hvað sem er af þessu", "hashtag.column_settings.tag_mode.none": "Ekkert af þessu", "hashtag.column_settings.tag_toggle": "Taka með viðbótarmerki fyrir þennan dálk", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Einfalt", "home.column_settings.show_reblogs": "Sýna endurbirtingar", "home.column_settings.show_replies": "Birta svör", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Fylgjendur", "timeline_hint.resources.follows": "Fylgist með", "timeline_hint.resources.statuses": "Eldri færslur", - "trends.counter_by_accounts": "{count, plural, one {{counter} aðili} other {{counter} aðilar}} tala", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Í umræðunni núna", "ui.beforeunload": "Drögin tapast ef þú ferð út úr Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index ab8b10e8ded..da29dfde141 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Uno o più di questi", "hashtag.column_settings.tag_mode.none": "Nessuno di questi", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Volume totale {days, plural, one {nell'ultimo giorno} other {negli ultimi {days} giorni}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Semplice", "home.column_settings.show_reblogs": "Mostra condivisioni", "home.column_settings.show_replies": "Mostra risposte", @@ -513,11 +516,11 @@ "time_remaining.minutes": "{number, plural, one {# minuto} other {# minuti}} left", "time_remaining.moments": "Restano pochi istanti", "time_remaining.seconds": "{number, plural, one {# secondo} other {# secondi}} left", - "timeline_hint.remote_resource_not_displayed": "{resource] da altri server non sono mostrati.", + "timeline_hint.remote_resource_not_displayed": "{resource} da altri server non sono mostrati.", "timeline_hint.resources.followers": "Follower", "timeline_hint.resources.follows": "Segue", "timeline_hint.resources.statuses": "Post meno recenti", - "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} persone}} ne parlano", + "trends.counter_by_accounts": "{count, plural, one {{count} persona} other {{count} persone}} {days, plural, one {nell'ultimo giorno} other {negli ultimi {days} giorni}}", "trends.trending_now": "Di tendenza ora", "ui.beforeunload": "La bozza andrà persa se esci da Mastodon.", "units.short.billion": "{count}G", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 430d81c126a..35c7d916e6a 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "いずれかを含む", "hashtag.column_settings.tag_mode.none": "これらを除く", "hashtag.column_settings.tag_toggle": "このカラムに追加のタグを含める", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "基本設定", "home.column_settings.show_reblogs": "ブースト表示", "home.column_settings.show_replies": "返信表示", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "フォロワー", "timeline_hint.resources.follows": "フォロー", "timeline_hint.resources.statuses": "以前の投稿", - "trends.counter_by_accounts": "{counter}人が投稿", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "トレンドタグ", "ui.beforeunload": "Mastodonから離れると送信前の投稿は失われます。", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index 047cdab85ab..a01b2290c64 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "ძირითადი", "home.column_settings.show_reblogs": "ბუსტების ჩვენება", "home.column_settings.show_replies": "პასუხების ჩვენება", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "თქვენი დრაფტი გაუქმდება თუ დატოვებთ მასტოდონს.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 57e6bf0d15c..d5ab20008e6 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -19,7 +19,7 @@ "account.followers.empty": "Ar tura, ulac yiwen i yeṭṭafaṛen amseqdac-agi.", "account.followers_counter": "{count, plural, one {{count} n umeḍfar} other {{count} n imeḍfaren}}", "account.following": "Following", - "account.following_counter": "{count, plural, one {{counter} yeṭṭafaren} aḍfar {{counter} wayeḍ}}", + "account.following_counter": "{count, plural, one {{counter} yeṭṭafaren} other {{counter} wayeḍ}}", "account.follows.empty": "Ar tura, amseqdac-agi ur yeṭṭafaṛ yiwen.", "account.follows_you": "Yeṭṭafaṛ-ik", "account.hide_reblogs": "Ffer ayen i ibeṭṭu @{name}", @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Yiwen seg-sen", "hashtag.column_settings.tag_mode.none": "Yiwen ala seg-sen", "hashtag.column_settings.tag_toggle": "Glu-d s yihacṭagen imerna i ujgu-agi", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Igejdanen", "home.column_settings.show_reblogs": "Ssken-d beṭṭu", "home.column_settings.show_replies": "Ssken-d tiririyin", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Imeḍfaṛen", "timeline_hint.resources.follows": "T·Yeṭafaṛ", "timeline_hint.resources.statuses": "Tijewwaqin tiqdimin", - "trends.counter_by_accounts": "{count, plural, one {{counter} amdan} imdanen {{counter} wiyaḍ}} yettmeslayen", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Arewway-ik·im ad iruḥ ma yella tefeɣ-d deg Maṣṭudun.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index c5459baf32f..5334331c4b2 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Осылардың біреуін", "hashtag.column_settings.tag_mode.none": "Бұлардың ешқайсысын", "hashtag.column_settings.tag_toggle": "Осы бағанға қосымша тегтерді қосыңыз", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Негізгі", "home.column_settings.show_reblogs": "Бөлісулерді көрсету", "home.column_settings.show_replies": "Жауаптарды көрсету", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Оқырман", "timeline_hint.resources.follows": "Жазылым", "timeline_hint.resources.statuses": "Ескі посттары", - "trends.counter_by_accounts": "{count, plural, one {{counter} адам} other {{counter} адам}} айтып жатыр", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Тренд тақырыптар", "ui.beforeunload": "Mastodon желісінен шықсаңыз, нобайыңыз сақталмайды.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json index 3e0649ba140..bde13c04c47 100644 --- a/app/javascript/mastodon/locales/kn.json +++ b/app/javascript/mastodon/locales/kn.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index c07948a73a7..30cf08ff2da 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "아무것이든", "hashtag.column_settings.tag_mode.none": "이것들을 제외하고", "hashtag.column_settings.tag_toggle": "추가 해시태그를 이 컬럼에 추가합니다", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "최근 {days}일 동안의 총 사용량", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "기본", "home.column_settings.show_reblogs": "부스트 표시", "home.column_settings.show_replies": "답글 표시", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "팔로워", "timeline_hint.resources.follows": "팔로우", "timeline_hint.resources.statuses": "이전 게시물", - "trends.counter_by_accounts": "{counter} 명이 말하는 중", + "trends.counter_by_accounts": "이전 {days}일 동안 {counter} 명의 사용자", "trends.trending_now": "지금 유행중", "ui.beforeunload": "지금 나가면 저장되지 않은 항목을 잃게 됩니다.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index 2bc1e9bea22..d8c4151d3f4 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Yek ji van", "hashtag.column_settings.tag_mode.none": "Ne yek ji van", "hashtag.column_settings.tag_toggle": "Ji bo vê stûnê hin pêvekan tevlî bike", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Tevahiya giraniyê dawîn di {days, plural, one {roj} other {{days} roj}} de", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Bingehîn", "home.column_settings.show_reblogs": "Bilindkirinan nîşan bike", "home.column_settings.show_replies": "Bersivan nîşan bide", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Şopîner", "timeline_hint.resources.follows": "Dişopîne", "timeline_hint.resources.statuses": "Şandiyên kevn", - "trends.counter_by_accounts": "{count, plural, one {{counter} kes} other {{counter} kes}} diaxivin", + "trends.counter_by_accounts": "{count, plural, one {{counter} kes} other {{counter} kes}} berî {days, plural, one {roj} other {{days} roj}}", "trends.trending_now": "Rojev", "ui.beforeunload": "Ger ji Mastodonê veketi wê reşnivîsa te jî winda bibe.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json index 8ffa521b5c8..988655921b6 100644 --- a/app/javascript/mastodon/locales/kw.json +++ b/app/javascript/mastodon/locales/kw.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Pynag a'n re ma", "hashtag.column_settings.tag_mode.none": "Travyth a'n re ma", "hashtag.column_settings.tag_toggle": "Yssynsi taggys ynwedhek rag an goloven ma", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Selyek", "home.column_settings.show_reblogs": "Diskwedhes kenerthow", "home.column_settings.show_replies": "Diskwedhes gorthebow", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Holyoryon", "timeline_hint.resources.follows": "Holyansow", "timeline_hint.resources.statuses": "Kottha postow", - "trends.counter_by_accounts": "{count, plural, one {{counter} den} other {{counter} a dus}} ow kewsel", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Tuedhegus lemmyn", "ui.beforeunload": "Agas kysnkrif a vydh kellys mar kwrewgh diberth a Mastodon.", "units.short.billion": "{count}Mek", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 1a69e7e1d2c..3df14c833ff 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index a91fa9aea9a..1cb0095b147 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Kāds no šiem", "hashtag.column_settings.tag_mode.none": "Neviens no šiem", "hashtag.column_settings.tag_toggle": "Iekļaut šai kolonnai papildu tagus", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Kopējais apjoms par {days, plural, one {dienu} other {{days} dienām}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Pamata", "home.column_settings.show_reblogs": "Rādīt palielinājumus", "home.column_settings.show_replies": "Rādīt atbildes", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Sekotāji", "timeline_hint.resources.follows": "Seko", "timeline_hint.resources.statuses": "Vecākas ziņas", - "trends.counter_by_accounts": "Sarunājas {count, plural, one {{counter} persona} other {{counter} cilvēki}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} cilvēki}} par {days, plural, one {dienu} other {{days} dienām}}", "trends.trending_now": "Šobrīd tendences", "ui.beforeunload": "Ja pametīsit Mastodonu, jūsu melnraksts tiks zaudēts.", "units.short.billion": "{count}M", diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json index 36126fc25af..faf4174f9c5 100644 --- a/app/javascript/mastodon/locales/mk.json +++ b/app/javascript/mastodon/locales/mk.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Било кои", "hashtag.column_settings.tag_mode.none": "Никои", "hashtag.column_settings.tag_toggle": "Стави додатни тагови за оваа колона", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Основно", "home.column_settings.show_reblogs": "Прикажи бустирања", "home.column_settings.show_replies": "Прикажи одговори", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 4307259c010..175316e84d2 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "ഇവയിലേതെങ്കിലും", "hashtag.column_settings.tag_mode.none": "ഇതിലൊന്നുമല്ല", "hashtag.column_settings.tag_toggle": "ഈ എഴുത്തുപംക്തിക്ക് കൂടുതൽ ഉപനാമങ്ങൾ ചേർക്കുക", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "അടിസ്ഥാനം", "home.column_settings.show_reblogs": "ബൂസ്റ്റുകൾ കാണിക്കുക", "home.column_settings.show_replies": "മറുപടികൾ കാണിക്കുക", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "പിന്തുടരുന്നവർ", "timeline_hint.resources.follows": "പിന്തുടരുന്നു", "timeline_hint.resources.statuses": "പഴയ ടൂട്ടുകൾ", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "ഇപ്പോൾ ട്രെൻഡിംഗ്", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index d78e0384ed1..762d94c4006 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index c1f20ec4f9b..13a1e334513 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Mana-mana daripada yang ini", "hashtag.column_settings.tag_mode.none": "Tiada apa pun daripada yang ini", "hashtag.column_settings.tag_toggle": "Sertakan tag tambahan untuk lajur ini", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Asas", "home.column_settings.show_reblogs": "Tunjukkan galakan", "home.column_settings.show_replies": "Tunjukkan balasan", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Pengikut", "timeline_hint.resources.follows": "Ikutan", "timeline_hint.resources.statuses": "Hantaran lebih lama", - "trends.counter_by_accounts": "{count, plural, other {{counter} orang}} bercakap", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Sohor kini", "ui.beforeunload": "Rangka anda akan terhapus jika anda meninggalkan Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index db67d2bcdc0..94cbd5bcd7e 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Een van deze", "hashtag.column_settings.tag_mode.none": "Geen van deze", "hashtag.column_settings.tag_toggle": "Additionele tags aan deze kolom toevoegen", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Algemeen", "home.column_settings.show_reblogs": "Boosts tonen", "home.column_settings.show_replies": "Reacties tonen", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Volgers", "timeline_hint.resources.follows": "Volgend", "timeline_hint.resources.statuses": "Oudere berichten", - "trends.counter_by_accounts": "{count, plural, one {{counter} persoon} other {{counter} personen}} zijn aan het praten", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Huidige trends", "ui.beforeunload": "Je concept gaat verloren wanneer je Mastodon verlaat.", "units.short.billion": "{count} mrd.", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 87d3579e962..1a8904cd28b 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Kva som helst av desse", "hashtag.column_settings.tag_mode.none": "Ikkje nokon av disse", "hashtag.column_settings.tag_toggle": "Inkluder ekstra emneknaggar for denne kolonna", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Enkelt", "home.column_settings.show_reblogs": "Vis framhevingar", "home.column_settings.show_replies": "Vis svar", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Fylgjarar", "timeline_hint.resources.follows": "Fylgjer", "timeline_hint.resources.statuses": "Eldre tut", - "trends.counter_by_accounts": "Pratas om av {count, plural, one {{counter} person} other {{counter} folk}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Populært no", "ui.beforeunload": "Kladden din forsvinn om du forlèt Mastodon no.", "units.short.billion": "{count}m.ard", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index b4da321eb4d..829be51a586 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Enhver av disse", "hashtag.column_settings.tag_mode.none": "Ingen av disse", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Enkelt", "home.column_settings.show_reblogs": "Vis fremhevinger", "home.column_settings.show_replies": "Vis svar", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Følgere", "timeline_hint.resources.follows": "Følger", "timeline_hint.resources.statuses": "Eldre tuter", - "trends.counter_by_accounts": "Snakkes om av {count, plural, one {{counter} person} other {{counter} personer}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trender nå", "ui.beforeunload": "Din kladd vil bli forkastet om du forlater Mastodon.", "units.short.billion": "{count}m.ard", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 982a3fa1631..b065b4e8f6c 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Un d’aquestes", "hashtag.column_settings.tag_mode.none": "Cap d’aquestes", "hashtag.column_settings.tag_toggle": "Inclure las etiquetas suplementàrias dins aquesta colomna", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Mostrar los partatges", "home.column_settings.show_replies": "Mostrar las responsas", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Seguidors", "timeline_hint.resources.follows": "Abonaments", "timeline_hint.resources.statuses": "Tuts mai ancians", - "trends.counter_by_accounts": "{count, plural, one {{counter} persona ne parla} other {{counter} personas ne parlan}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Tendéncia del moment", "ui.beforeunload": "Vòstre brolhon serà perdut se quitatz Mastodon.", "units.short.billion": "{count}Md", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index 13cb39de85e..99fdcfd453e 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 3093ce15e8b..bc87998314d 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Dowolne", "hashtag.column_settings.tag_mode.none": "Żadne", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Całkowity wolumen w ciągu {days, plural, one {ostatniego dnia} other {ostatnich {days} dni}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Podstawowe", "home.column_settings.show_reblogs": "Pokazuj podbicia", "home.column_settings.show_replies": "Pokazuj odpowiedzi", @@ -451,7 +454,7 @@ "search_results.nothing_found": "Nie znaleziono innych wyników dla tego wyszukania", "search_results.statuses": "Wpisy", "search_results.statuses_fts_disabled": "Szukanie wpisów przy pomocy ich zawartości nie jest włączone na tym serwerze Mastodona.", - "search_results.total": "{count, number} {count, plural, one {wynik} few {wyniki} many {wyników} more {wyników}}", + "search_results.total": "{count, number} {count, plural, one {wynik} few {wyniki} many {wyników} other {wyników}}", "status.admin_account": "Otwórz interfejs moderacyjny dla @{name}", "status.admin_status": "Otwórz ten wpis w interfejsie moderacyjnym", "status.block": "Zablokuj @{name}", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Śledzący", "timeline_hint.resources.follows": "Śledzeni", "timeline_hint.resources.statuses": "Starsze wpisy", - "trends.counter_by_accounts": "rozmawiają: {count, plural, one {{counter} osoba} few {{counter} osoby} many {{counter} osób} other {{counter} osoby}}", + "trends.counter_by_accounts": "{count, plural, one {jedna osoba} few {{count} osoby} many {{count} osób} other {{counter} ludzie}} w ciągu {days, plural, one {ostatniego dnia} other {ostatnich {days} dni}}", "trends.trending_now": "Popularne teraz", "ui.beforeunload": "Utracisz tworzony wpis, jeżeli opuścisz Mastodona.", "units.short.billion": "{count} mld", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index bb98007860c..0073ff5f1a2 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Qualquer uma", "hashtag.column_settings.tag_mode.none": "Nenhuma", "hashtag.column_settings.tag_toggle": "Adicionar mais hashtags aqui", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar boosts", "home.column_settings.show_replies": "Mostrar respostas", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Seguidores", "timeline_hint.resources.follows": "Segue", "timeline_hint.resources.statuses": "Toots anteriores", - "trends.counter_by_accounts": "{count, plural, one {{counter} pessoa} other {{counter} pessoas}} falando", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Em alta agora", "ui.beforeunload": "Seu rascunho será perdido se sair do Mastodon.", "units.short.billion": "{count} bi", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index c8810703e8d..643ef1c6ef0 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Qualquer destes", "hashtag.column_settings.tag_mode.none": "Nenhum destes", "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionais para esta coluna", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Volume total {days, plural, one {no último dia} other {nos últimos {days} dias}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar boosts", "home.column_settings.show_replies": "Mostrar respostas", @@ -366,7 +369,7 @@ "poll.closed": "Fechado", "poll.refresh": "Recarregar", "poll.total_people": "{count, plural, one {# pessoa} other {# pessoas}}", - "poll.total_votes": "{contar, plural, um {# vote} outro {# votes}}", + "poll.total_votes": "{count, plural, one {# voto} other {# votos}}", "poll.vote": "Votar", "poll.voted": "Votaste nesta resposta", "poll.votes": "{votes, plural, one {# voto } other {# votos}}", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Seguidores", "timeline_hint.resources.follows": "Seguindo", "timeline_hint.resources.statuses": "Toots antigos", - "trends.counter_by_accounts": "{count, plural, one {{counter} pessoa} other {{counter} pessoas}} a conversar", + "trends.counter_by_accounts": "{count, plural, one {{counter} pessoa} other {{counter} pessoas}} {days, plural, one {no último dia} other {nos últimos {days} dias}}", "trends.trending_now": "Tendências atuais", "ui.beforeunload": "O teu rascunho será perdido se abandonares o Mastodon.", "units.short.billion": "{count}MM", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index 0c2ce0b2d62..a3188f5537a 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Oricare din acestea", "hashtag.column_settings.tag_mode.none": "Niciuna dintre acestea", "hashtag.column_settings.tag_toggle": "Adaugă etichete suplimentare pentru această coloană", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "De bază", "home.column_settings.show_reblogs": "Afișează distribuirile", "home.column_settings.show_replies": "Afișează răspunsurile", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Urmăritori", "timeline_hint.resources.follows": "Urmăriri", "timeline_hint.resources.statuses": "Postări mai vechi", - "trends.counter_by_accounts": "{count, plural, one {{counter} persoană postează} other {{counter} persoane postează}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "În tendință acum", "ui.beforeunload": "Postarea se va pierde dacă părăsești pagina.", "units.short.billion": "{count}Mld", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 015fb0febfc..ca9a2cceb99 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Любой из списка", "hashtag.column_settings.tag_mode.none": "Ни один из списка", "hashtag.column_settings.tag_toggle": "Включить дополнительные теги для этой колонки", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Общий объем за {days, plural, =1 {последний день} one {последний {days} день} few {последних {days} дня} many {последних {days} дней} other {последних {days} дней}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Основные", "home.column_settings.show_reblogs": "Показывать продвижения", "home.column_settings.show_replies": "Показывать ответы", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "подписчиков", "timeline_hint.resources.follows": "подписки", "timeline_hint.resources.statuses": "прошлые посты", - "trends.counter_by_accounts": "{count, plural, one {{counter} человек обсуждает} few {{counter} человека обсуждают} many {{counter} человек обсуждают} other {{counter} человека обсуждает}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} человек} few {{counter} человека} many {{counter} человек} other {{counter} человека}} на протяжении {days, plural, =1 {последнего дня} one {последнего {days} дня} few {последних {days} дней} many {последних {days} дней} other {последних {days} дней}}", "trends.trending_now": "Самое актуальное", "ui.beforeunload": "Ваш черновик будет утерян, если вы покинете Mastodon.", "units.short.billion": "{count} млрд", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index 0bcca64ea87..ecbdf816c10 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 957b114c01e..aaecfd8e18e 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Cale si siat de custos", "hashtag.column_settings.tag_mode.none": "Perunu de custos", "hashtag.column_settings.tag_toggle": "Include etichetas additzionales pro custa colunna", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Bàsicu", "home.column_settings.show_reblogs": "Ammustra is cumpartziduras", "home.column_settings.show_replies": "Ammustra rispostas", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Sighiduras", "timeline_hint.resources.follows": "Sighende", "timeline_hint.resources.statuses": "Publicatziones prus betzas", - "trends.counter_by_accounts": "{count, plural, one {{counter} persone} other {{counter} persones}} chistionende", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Est tendèntzia immoe", "ui.beforeunload": "S'abbotzu tuo at a èssere pèrdidu si essis dae Mastodon.", "units.short.billion": "{count}Mrd", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 7ef22827344..e50ea913516 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "ඇතුළත් එකක්", "hashtag.column_settings.tag_mode.none": "මේ කිසිවක් නැත", "hashtag.column_settings.tag_toggle": "මෙම තීරුවේ අමතර ටැග් ඇතුළත් කරන්න", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "මූලික", "home.column_settings.show_reblogs": "බූස්ට් පෙන්වන්න", "home.column_settings.show_replies": "ප්රතිචාර පෙන්වන්න", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "අනුගාමිකයින්", "timeline_hint.resources.follows": "පහත සඳහන්", "timeline_hint.resources.statuses": "පැරණි දත්", - "trends.counter_by_accounts": "{count, plural, one {{counter} පුද්ගලයා} other {{counter} මහජන}} කතා කරනවා", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "දැන් ප්‍රවණතාවය", "ui.beforeunload": "ඔබ Mastodon හැර ගියහොත් ඔබේ කෙටුම්පත නැති වනු ඇත.", "units.short.billion": "{count}බී", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 46873d31c97..3454fe7d241 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Hociktorý z týchto", "hashtag.column_settings.tag_mode.none": "Žiaden z týchto", "hashtag.column_settings.tag_toggle": "Vlož dodatočné haštagy pre tento stĺpec", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Základné", "home.column_settings.show_reblogs": "Ukáž vyzdvihnuté", "home.column_settings.show_replies": "Ukáž odpovede", @@ -234,7 +237,7 @@ "keyboard_shortcuts.column": "zameraj sa na príspevok v jednom zo stĺpcov", "keyboard_shortcuts.compose": "zameraj sa na písaciu plochu", "keyboard_shortcuts.description": "Popis", - "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.direct": "pre otvorenie panelu priamých správ", "keyboard_shortcuts.down": "posunúť sa dole v zozname", "keyboard_shortcuts.enter": "Otvor príspevok", "keyboard_shortcuts.favourite": "pridaj do obľúbených", @@ -327,7 +330,7 @@ "notification.update": "{name} upravil/a príspevok", "notifications.clear": "Vyčisti oboznámenia", "notifications.clear_confirmation": "Naozaj chceš nenávratne prečistiť všetky tvoje oboznámenia?", - "notifications.column_settings.admin.report": "New reports:", + "notifications.column_settings.admin.report": "Nové hlásenia:", "notifications.column_settings.admin.sign_up": "Nové registrácie:", "notifications.column_settings.alert": "Oboznámenia na ploche", "notifications.column_settings.favourite": "Obľúbené:", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Sledujúci", "timeline_hint.resources.follows": "Následuje", "timeline_hint.resources.statuses": "Staršie príspevky", - "trends.counter_by_accounts": "{count, plural, one {{counter} človek rozpráva} few {{counter} ľudia rozprávajú} many {{counter} ľudia rozprávajú} other {{counter} ľudí rozpráva}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Teraz populárne", "ui.beforeunload": "Čo máš rozpísané sa stratí, ak opustíš Mastodon.", "units.short.billion": "{count}mld.", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 6e73685924e..733614f3eb3 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Karkoli od naštetega", "hashtag.column_settings.tag_mode.none": "Nič od naštetega", "hashtag.column_settings.tag_toggle": "Za ta stolpec vključi dodatne oznake", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Skupen obseg v {days, plural, one {zadnjem {day} dnevu} two {zadnjih {days} dneh} few {zadnjih {days} dneh} other {zadnjih {days} dneh}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Osnovno", "home.column_settings.show_reblogs": "Pokaži izpostavitve", "home.column_settings.show_replies": "Pokaži odgovore", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "sledilcev", "timeline_hint.resources.follows": "Sledi", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{count} oseba govori} two {{count} osebi govorita} few {{count} osebe govorijo} other {{count} oseb govori}}", + "trends.counter_by_accounts": "{count, plural, one {{count} oseba} two {{count} osebi} few {{count} osebe} other {{count} oseb}} v {days, plural, one {zadnjem {day} dnevu} two {zadnjih {days} dneh} few {zadnjih {days} dneh} other {zadnjih {days} dneh}}", "trends.trending_now": "Zdaj v trendu", "ui.beforeunload": "Vaš osnutek bo izgubljen, če zapustite Mastodona.", "units.short.billion": "{count} milijard", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 4aa70477d59..8bc44050358 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Cilindo prej këtyre", "hashtag.column_settings.tag_mode.none": "Asnjë prej këtyre", "hashtag.column_settings.tag_toggle": "Përfshi etiketa shtesë për këtë shtyllë", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Vëllim gjithsej {days, plural, një {day} other {{days} ditët}} e fundit", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Bazë", "home.column_settings.show_reblogs": "Shfaq përforcime", "home.column_settings.show_replies": "Shfaq përgjigje", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Ndjekës", "timeline_hint.resources.follows": "Ndjekje", "timeline_hint.resources.statuses": "Mesazhe të vjetër", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} vetë}} duke folur", + "trends.counter_by_accounts": "{count, plural, një {{counter} person} other {{counter} vetë}} në {days, plural, një {day} other {{days} ditë}} të kaluar", "trends.trending_now": "Prirjet e tashme", "ui.beforeunload": "Skica juaj do të humbë, nëse dilni nga Mastodon-i.", "units.short.billion": "{count}Md", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 4dedb58bbc8..131af97e132 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Osnovno", "home.column_settings.show_reblogs": "Prikaži i podržavanja", "home.column_settings.show_replies": "Prikaži odgovore", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Ako napustite Mastodont, izgubićete napisani nacrt.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 42ae479daa5..a2409e957e3 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Било које од ових", "hashtag.column_settings.tag_mode.none": "Ништа од ових", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Основно", "home.column_settings.show_reblogs": "Прикажи и подржавања", "home.column_settings.show_replies": "Прикажи одговоре", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Пратиоци", "timeline_hint.resources.follows": "Праћени", "timeline_hint.resources.statuses": "Старији тут", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Ако напустите Мастодонт, изгубићете написани нацрт.", "units.short.billion": "{count}Б", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index d8d2c6720da..c0a69b24b22 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Någon av dessa", "hashtag.column_settings.tag_mode.none": "Ingen av dessa", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Grundläggande", "home.column_settings.show_reblogs": "Visa knuffar", "home.column_settings.show_replies": "Visa svar", @@ -451,7 +454,7 @@ "search_results.nothing_found": "Kunde inte hitta något för dessa sökord", "search_results.statuses": "Inlägg", "search_results.statuses_fts_disabled": "Att söka toots med deras innehåll är inte möjligt på denna Mastodon-server.", - "search_results.total": "{count, number} {count, plural, ett {result} andra {results}}", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "status.admin_account": "Öppet modereringsgränssnitt för @{name}", "status.admin_status": "Öppna denna status i modereringsgränssnittet", "status.block": "Blockera @{name}", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Följare", "timeline_hint.resources.follows": "Följer", "timeline_hint.resources.statuses": "Äldre tutningar", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} personer}} pratar", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trendar nu", "ui.beforeunload": "Ditt utkast kommer att förloras om du lämnar Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json index 13cb39de85e..99fdcfd453e 100644 --- a/app/javascript/mastodon/locales/szl.json +++ b/app/javascript/mastodon/locales/szl.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 6491ff7b703..cc7241badbb 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "இவற்றில் எவையேனும்", "hashtag.column_settings.tag_mode.none": "இவற்றில் ஏதுமில்லை", "hashtag.column_settings.tag_toggle": "இந்த நெடுவரிசையில் கூடுதல் சிட்டைகளைச் சேர்க்கவும்", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "அடிப்படையானவை", "home.column_settings.show_reblogs": "பகிர்வுகளைக் காண்பி", "home.column_settings.show_replies": "மறுமொழிகளைக் காண்பி", @@ -366,7 +369,7 @@ "poll.closed": "மூடிய", "poll.refresh": "பத்துயிர்ப்ப?ட்டு", "poll.total_people": "{count, plural, one {# நபர்} other {# நபர்கள்}}", - "poll.total_votes": "{count, plural, one {# vote} மற்ற {# votes}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "வாக்களி", "poll.voted": "உங்கள் தேர்வு", "poll.votes": "{votes, plural, one {# vote} other {# votes}}", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "வாசகர்கள்", "timeline_hint.resources.follows": "வாசிக்கிறார்", "timeline_hint.resources.statuses": "பழைய டூட்டுகள்", - "trends.counter_by_accounts": "{count, plural, one {{counter} நபர்} other {{counter} நபர்கள்}} உரையாடலில்", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "இப்போது செல்திசையில் இருப்பவை", "ui.beforeunload": "நீங்கள் வெளியே சென்றால் உங்கள் வரைவு இழக்கப்படும் மஸ்தோடோன்.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index 268ce7ef72f..17b0e1ed1e9 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index f2312ee12c0..bbe99b4a61b 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "వీటిలో ఏవైనా", "hashtag.column_settings.tag_mode.none": "ఇవేవీ కావు", "hashtag.column_settings.tag_toggle": "ఈ నిలువు వరుసలో మరికొన్ని ట్యాగులను చేర్చండి", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "ప్రాథమిక", "home.column_settings.show_reblogs": "బూస్ట్ లను చూపించు", "home.column_settings.show_replies": "ప్రత్యుత్తరాలను చూపించు", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "మీరు మాస్టొడొన్ను వదిలివేస్తే మీ డ్రాఫ్ట్లు పోతాయి.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 3bcae61b876..0bff3caabdf 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -198,7 +198,7 @@ "explore.trending_tags": "แฮชแท็ก", "follow_recommendations.done": "เสร็จสิ้น", "follow_recommendations.heading": "ติดตามผู้คนที่คุณต้องการเห็นโพสต์! นี่คือข้อเสนอแนะบางส่วน", - "follow_recommendations.lead": "โพสต์จากคนที่คุณติดตามจะแสดงตามลำดับเวลาบนฟีดหลักของคุณ อย่ากลัวที่จะทำผิดพลาด คุณสามารถเลิกติดตามผู้คนได้ง่ายๆ ทุกเมื่อ!", + "follow_recommendations.lead": "โพสต์จากผู้คนที่คุณติดตามจะแสดงตามลำดับเวลาในฟีดหน้าแรกของคุณ อย่ากลัวที่จะทำผิดพลาด คุณสามารถเลิกติดตามผู้คนได้อย่างง่ายดายเมื่อใดก็ตาม!", "follow_request.authorize": "อนุญาต", "follow_request.reject": "ปฏิเสธ", "follow_requests.unlocked_explanation": "แม้ว่าไม่มีการล็อคบัญชีของคุณ พนักงานของ {domain} คิดว่าคุณอาจต้องการตรวจทานคำขอติดตามจากบัญชีเหล่านี้ด้วยตนเอง", @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "ใดก็ตามนี้", "hashtag.column_settings.tag_mode.none": "ไม่ใช่ทั้งหมดนี้", "hashtag.column_settings.tag_toggle": "รวมแท็กเพิ่มเติมสำหรับคอลัมน์นี้", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "พื้นฐาน", "home.column_settings.show_reblogs": "แสดงการดัน", "home.column_settings.show_replies": "แสดงการตอบกลับ", @@ -268,7 +271,7 @@ "lightbox.next": "ถัดไป", "lightbox.previous": "ก่อนหน้า", "limited_account_hint.action": "แสดงโปรไฟล์ต่อไป", - "limited_account_hint.title": "โปรไฟล์นี้ถูกซ่อนไว้โดยโมเดอเรเตอร์ของเซิร์ฟเวอร์ของคุณ", + "limited_account_hint.title": "มีการซ่อนโปรไฟล์นี้โดยผู้ควบคุมของเซิร์ฟเวอร์ของคุณ", "lists.account.add": "เพิ่มไปยังรายการ", "lists.account.remove": "เอาออกจากรายการ", "lists.delete": "ลบรายการ", @@ -360,7 +363,7 @@ "notifications.permission_denied_alert": "ไม่สามารถเปิดใช้งานการแจ้งเตือนบนเดสก์ท็อป เนื่องจากมีการปฏิเสธสิทธิอนุญาตเบราว์เซอร์ก่อนหน้านี้", "notifications.permission_required": "การแจ้งเตือนบนเดสก์ท็อปไม่พร้อมใช้งานเนื่องจากไม่ได้ให้สิทธิอนุญาตที่จำเป็น", "notifications_permission_banner.enable": "เปิดใช้งานการแจ้งเตือนบนเดสก์ท็อป", - "notifications_permission_banner.how_to_control": "หากต้องการรับการแจ้งเตือนเมื่อไม่ได้เปิด Mastodon ให้เปิดใช้การแจ้งเตือนบนเดสก์ท็อป คุณสามารถควบคุมได้ตามความต้องการด้วยการโต้ตอบประเภทที่สร้างการแจ้งเตือนบนเดสก์ท็อปผ่านปุ่ม {icon} ด้านบนเมื่อเปิดใช้งาน", + "notifications_permission_banner.how_to_control": "เพื่อรับการแจ้งเตือนเมื่อ Mastodon ไม่ได้เปิด เปิดใช้งานการแจ้งเตือนบนเดสก์ท็อป คุณสามารถควบคุมชนิดของการโต้ตอบที่สร้างการแจ้งเตือนบนเดสก์ท็อปได้อย่างแม่นยำผ่านปุ่ม {icon} ด้านบนเมื่อเปิดใช้งานการแจ้งเตือน", "notifications_permission_banner.title": "ไม่พลาดสิ่งใด", "picture_in_picture.restore": "นำกลับมา", "poll.closed": "ปิดแล้ว", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "ผู้ติดตาม", "timeline_hint.resources.follows": "การติดตาม", "timeline_hint.resources.statuses": "โพสต์ที่เก่ากว่า", - "trends.counter_by_accounts": "{count, plural, other {{counter} คน}}กำลังพูดคุย", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "กำลังนิยม", "ui.beforeunload": "แบบร่างของคุณจะหายไปหากคุณออกจาก Mastodon", "units.short.billion": "{count} พันล้าน", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 070bdb95b36..3948bde5ea4 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Herhangi biri", "hashtag.column_settings.tag_mode.none": "Bunların hiçbiri", "hashtag.column_settings.tag_toggle": "Bu sütundaki ek etiketleri içer", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Son {days, plural, one {gündeki} other {{days} gündeki}} toplam hacim", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Temel", "home.column_settings.show_reblogs": "Boostları göster", "home.column_settings.show_replies": "Yanıtları göster", @@ -468,7 +471,7 @@ "status.embed": "Gömülü", "status.favourite": "Favorilerine ekle", "status.filtered": "Filtrelenmiş", - "status.hide": "Hide toot", + "status.hide": "Gönderiyi sakla", "status.history.created": "{name} oluşturdu {date}", "status.history.edited": "{name} düzenledi {date}", "status.load_more": "Daha fazlasını yükle", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Takipçiler", "timeline_hint.resources.follows": "Takip Edilenler", "timeline_hint.resources.statuses": "Eski tootlar", - "trends.counter_by_accounts": "{count, plural, one {{counter} kişi} other {{counter} kişi}} konuşuyor", + "trends.counter_by_accounts": "Son {days, plural, one {gündeki} other {{days} gündeki}} {count, plural, one {{counter} kişi} other {{counter} kişi}}", "trends.trending_now": "Şu an gündemde", "ui.beforeunload": "Mastodon'u terk ederseniz taslağınız kaybolacak.", "units.short.billion": "{count}Mr", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index 6ace5e76305..c9a48d37c45 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index 13cb39de85e..99fdcfd453e 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 4b0bc5e70cc..727b0b99426 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Який-небудь зі списку", "hashtag.column_settings.tag_mode.none": "Жоден зі списку", "hashtag.column_settings.tag_toggle": "Додати додаткові теґи до цього стовпчика", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Загальний обсяг за останні(й) {days, plural, one {день} few {{days} дні} other {{days} днів}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Основні", "home.column_settings.show_reblogs": "Показувати поширення", "home.column_settings.show_replies": "Показувати відповіді", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Підписники", "timeline_hint.resources.follows": "Підписки", "timeline_hint.resources.statuses": "Попередні дописи", - "trends.counter_by_accounts": "{count, plural, one {{counter} особа обговорює} few {{counter} особи обговорюють} many {{counter} осіб обговорюють} other {{counter} особи обговорюють}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} особа} few {{counter} особи} other {{counter} осіб}} за останні(й) {days, plural, one {день} few {{days} дні} other {{days} днів}}", "trends.trending_now": "Актуальні", "ui.beforeunload": "Вашу чернетку буде втрачено, якщо ви покинете Mastodon.", "units.short.billion": "{count} млрд.", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index 9485dbabf3b..b3e3fd771de 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "ان میں سے کوئی", "hashtag.column_settings.tag_mode.none": "ان میں سے کوئی بھی نہیں", "hashtag.column_settings.tag_toggle": "اس کالم کے لئے مزید ٹیگز شامل کریں", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "بنیادی", "home.column_settings.show_reblogs": "افزائشات دکھائیں", "home.column_settings.show_replies": "جوابات دکھائیں", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 1019c342a82..4cdb1e53dc2 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Một phần", "hashtag.column_settings.tag_mode.none": "Không chọn", "hashtag.column_settings.tag_toggle": "Bao gồm thêm hashtag cho cột này", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Tổng số lần sử dụng {days, plural, other {{days} ngày}} qua", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Tùy chỉnh", "home.column_settings.show_reblogs": "Hiện những lượt đăng lại", "home.column_settings.show_replies": "Hiện những tút dạng trả lời", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "Người theo dõi", "timeline_hint.resources.follows": "Đang theo dõi", "timeline_hint.resources.statuses": "Tút cũ hơn", - "trends.counter_by_accounts": "{count, plural, one {{counter} người} other {{counter} người}} đang thảo luận", + "trends.counter_by_accounts": "{count, plural, other {{count} lượt}} dùng trong {days, plural, other {{days} ngày}} qua", "trends.trending_now": "Xu hướng", "ui.beforeunload": "Bản nháp của bạn sẽ bị mất nếu bạn thoát khỏi Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json index 7f1965401d5..898cc22a90a 100644 --- a/app/javascript/mastodon/locales/zgh.json +++ b/app/javascript/mastodon/locales/zgh.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "ⵉⵎⴹⴼⴰⵕⵏ", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older toots", - "trends.counter_by_accounts": "{count, plural, one {{counter} ⵓⴼⴳⴰⵏ} other {{counter} ⵉⴼⴳⴰⵏⵏ}} ⴰⴳ ⵙⵙⴰⵡⴰⵍⵏ", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index dcb54735fcf..334b930343b 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "任一", "hashtag.column_settings.tag_mode.none": "无一", "hashtag.column_settings.tag_toggle": "在此栏加入额外的标签", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "在过去的{days, plural,one {day}other {{days}days}}的总数量", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "基本设置", "home.column_settings.show_reblogs": "显示转嘟", "home.column_settings.show_replies": "显示回复", @@ -278,7 +281,7 @@ "lists.new.title_placeholder": "新列表的标题", "lists.replies_policy.followed": "任何被关注的用户", "lists.replies_policy.list": "列表成员", - "lists.replies_policy.none": "没有人", + "lists.replies_policy.none": "无人", "lists.replies_policy.title": "显示回复给:", "lists.search": "搜索你关注的人", "lists.subheading": "你的列表", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "关注者", "timeline_hint.resources.follows": "关注", "timeline_hint.resources.statuses": "更早的嘟文", - "trends.counter_by_accounts": "{count, plural, one {{counter} 人} other {{counter} 人}}正在讨论", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "现在流行", "ui.beforeunload": "如果你现在离开 Mastodon,你的草稿内容将会丢失。", "units.short.billion": "{count} B", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 867ced8d551..e3c65cdaba7 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "任一", "hashtag.column_settings.tag_mode.none": "全不", "hashtag.column_settings.tag_toggle": "在這欄位加入額外的標籤", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "基本", "home.column_settings.show_reblogs": "顯示被轉推的文章", "home.column_settings.show_replies": "顯示回應文章", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "關注者", "timeline_hint.resources.follows": "關注中", "timeline_hint.resources.statuses": "更早的文章", - "trends.counter_by_accounts": "{count, plural, one {{counter} 個人}other {{counter} 個人}}正在討論", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "現在流行", "ui.beforeunload": "如果你現在離開 Mastodon,你的草稿內容將會被丟棄。", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 1589ff09ae7..99814b30dc7 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -220,6 +220,9 @@ "hashtag.column_settings.tag_mode.any": "任一", "hashtag.column_settings.tag_mode.none": "全不", "hashtag.column_settings.tag_toggle": "將額外標籤加入到這個欄位", + "hashtag.follow": "Follow hashtag", + "hashtag.total_volume": "過去 {days, plural, one {日} other {{days} 日}} 之總量", + "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "基本", "home.column_settings.show_reblogs": "顯示轉嘟", "home.column_settings.show_replies": "顯示回覆", @@ -517,7 +520,7 @@ "timeline_hint.resources.followers": "跟隨者", "timeline_hint.resources.follows": "正在跟隨", "timeline_hint.resources.statuses": "更早的嘟文", - "trends.counter_by_accounts": "{count, plural,one {{counter} 人}other {{counter} 人}}正在討論", + "trends.counter_by_accounts": "{count, plural, one {{counter} 人} other {{counter} 人}} 於過去 {days, plural, one {日} other {{days} days}} 之間", "trends.trending_now": "現正熱門", "ui.beforeunload": "如果離開 Mastodon,您的草稿將會不見。", "units.short.billion": "{count}B", diff --git a/config/locales/activerecord.fr.yml b/config/locales/activerecord.fr.yml index bc063864a00..cc650cec839 100644 --- a/config/locales/activerecord.fr.yml +++ b/config/locales/activerecord.fr.yml @@ -45,5 +45,7 @@ fr: permissions_as_keys: dangerous: inclure des autorisations non sécurisées pour le rôle de base elevated: ne peut pas inclure des autorisations que votre rôle actuel ne possède pas + own_role: ne peut pas être modifié avec votre rôle actuel position: elevated: ne peut pas être supérieur à votre rôle actuel + own_role: ne peut pas être modifié avec votre rôle actuel diff --git a/config/locales/activerecord.he.yml b/config/locales/activerecord.he.yml index 5dc8ddc962b..7a9d54cd24b 100644 --- a/config/locales/activerecord.he.yml +++ b/config/locales/activerecord.he.yml @@ -21,6 +21,14 @@ he: username: invalid: ספרות, אותיות לטיניות וקו תחתי בלבד reserved: שמור + admin/webhook: + attributes: + url: + invalid: כתובת לא חוקית + doorkeeper/application: + attributes: + website: + invalid: הינה כתובת לא חוקית status: attributes: reblog: @@ -30,3 +38,14 @@ he: email: blocked: עושה שימוש בספק דוא"ל אסור unreachable: נראה שלא קיים + role_id: + elevated: לא יכול להיות גבוה יותר מתפקידך הנוכחי + user_role: + attributes: + permissions_as_keys: + dangerous: כלול הרשאות לא בטוחות לתפקיד הבסיסי + elevated: לא ניתן לכלול הרשאות שתפקידך הנוכחי לא כולל + own_role: לא ניתן למזג על תפקידך הנוכחי + position: + elevated: לא יכול להיות גבוה יותר מתפקידך הנוכחי + own_role: לא ניתן לשנות באמצעות תפקידך הנוכחי diff --git a/config/locales/activerecord.pl.yml b/config/locales/activerecord.pl.yml index 78ee745e284..68d0b778470 100644 --- a/config/locales/activerecord.pl.yml +++ b/config/locales/activerecord.pl.yml @@ -43,6 +43,8 @@ pl: user_role: attributes: permissions_as_keys: + dangerous: dołącz uprawnienia, które nie są bezpieczne dla roli podstawowej + elevated: nie może zawierać uprawnień, jakie twoja obecna rola nie posiada own_role: nie można zmienić z aktualną rolą position: elevated: nie może być wyższa niż twoja bieżąca rola diff --git a/config/locales/activerecord.th.yml b/config/locales/activerecord.th.yml index 716c003e948..64586f5bbe8 100644 --- a/config/locales/activerecord.th.yml +++ b/config/locales/activerecord.th.yml @@ -43,7 +43,9 @@ th: user_role: attributes: permissions_as_keys: - dangerous: รวมสิทธิ์ที่ไม่ปลอดภัยสำหรับบทบาทพื้นฐาน - elevated: ไม่สามารถรวบรวมสิทธิ์ในบทบาทปัจจุบันของคุณไม่ได้ + dangerous: รวมสิทธิอนุญาตที่ไม่ปลอดภัยสำหรับบทบาทพื้นฐาน + elevated: ไม่สามารถรวมสิทธิอนุญาตที่บทบาทปัจจุบันของคุณไม่มี + own_role: ไม่สามารถเปลี่ยนด้วยบทบาทปัจจุบันของคุณ position: elevated: ไม่สามารถสูงกว่าบทบาทปัจจุบันของคุณ + own_role: ไม่สามารถเปลี่ยนด้วยบทบาทปัจจุบันของคุณ diff --git a/config/locales/activerecord.tr.yml b/config/locales/activerecord.tr.yml index e9f8a9fff79..f0787dc4156 100644 --- a/config/locales/activerecord.tr.yml +++ b/config/locales/activerecord.tr.yml @@ -45,5 +45,7 @@ tr: permissions_as_keys: dangerous: temel rol için güvenli olmayan izinleri içerir elevated: mevcut rolünüzün sahip olmadığı izinleri içeremez + own_role: mevcut rolünüzle değiştirilemez position: elevated: mevcut rolünüzden yüksek olamaz + own_role: mevcut rolünüzle değiştirilemez diff --git a/config/locales/activerecord.vi.yml b/config/locales/activerecord.vi.yml index aeffa3dafde..9062dc53213 100644 --- a/config/locales/activerecord.vi.yml +++ b/config/locales/activerecord.vi.yml @@ -45,5 +45,7 @@ vi: permissions_as_keys: dangerous: bao gồm các quyền không an toàn cho vai trò cơ bản elevated: không thể bao gồm các quyền mà vai trò hiện tại của bạn không có + own_role: không thể thay đổi vai trò hiện tại của bạn position: elevated: không thể cao hơn vai trò hiện tại của bạn + own_role: không thể thay đổi vai trò hiện tại của bạn diff --git a/config/locales/activerecord.zh-CN.yml b/config/locales/activerecord.zh-CN.yml index 27ec73ab96d..c46c8745178 100644 --- a/config/locales/activerecord.zh-CN.yml +++ b/config/locales/activerecord.zh-CN.yml @@ -19,27 +19,27 @@ zh-CN: account: attributes: username: - invalid: 只能使用字母、数字和下划线 + invalid: 只能包含字母、数字和下划线 reserved: 是保留关键字 admin/webhook: attributes: url: - invalid: 不是有效的 URL。 + invalid: 非有效网址 doorkeeper/application: attributes: website: - invalid: 网址无效 + invalid: 非有效网址 status: attributes: reblog: - taken: 已经被转嘟过 + taken: 已被转嘟过 user: attributes: email: blocked: 使用了被封禁的电子邮件提供商 unreachable: 似乎不存在 role_id: - elevated: 不能高于您当前的角色 + elevated: 不能高于您当前的身份 user_role: attributes: permissions_as_keys: @@ -48,3 +48,4 @@ zh-CN: own_role: 无法以您当前的身份更改 position: elevated: 不能高于您当前的角色 + own_role: 无法以您当前的身份更改 diff --git a/config/locales/devise.he.yml b/config/locales/devise.he.yml index 63bb3aeddb4..0f389bd3836 100644 --- a/config/locales/devise.he.yml +++ b/config/locales/devise.he.yml @@ -110,3 +110,8 @@ he: expired: פג תוקפו. נא לבקש חדש not_found: לא נמצא not_locked: לא היה נעול + not_saved: + many: "%{count} שגיאות מנעו מ%{resource} זה מלהשמר:" + one: 'שגיאה אחת מנעה מ%{resource} זה מלהשמר:' + other: "%{count} שגיאות מנעו מ%{resource} זה מלהשמר:" + two: " %{count} שגיאות מנעו מ%{resource} זה מלהשמר:" diff --git a/config/locales/doorkeeper.th.yml b/config/locales/doorkeeper.th.yml index 963b2361dae..a7e4a69a522 100644 --- a/config/locales/doorkeeper.th.yml +++ b/config/locales/doorkeeper.th.yml @@ -81,25 +81,25 @@ th: errors: messages: access_denied: เจ้าของทรัพยากรหรือเซิร์ฟเวอร์การอนุญาตปฏิเสธคำขอ - credential_flow_not_configured: การไหลของข้อมูลรับรองรหัสผ่านเจ้าของทรัพยากรล้มเหลวเนื่องจาก Doorkeeper.configure.resource_owner_from_credentials ไม่ได้ถูกกำหนดค่า - invalid_client: การตรวจสอบสิทธิ์ไคลเอ็นต์ล้มเหลวเนื่องจากไคลเอ็นต์ที่ไม่รู้จัก ไม่รวมการตรวจสอบไคลเอ็นต์ หรือวิธีการตรวจสอบสิทธิ์ที่ไม่รองรับ - invalid_grant: การให้สิทธิ์ที่ระบุไม่ถูกต้อง หมดอายุ เพิกถอน ไม่ตรงกับ URI การเปลี่ยนเส้นทางที่ใช้ในคำขอการให้สิทธิ์ หรือออกให้ไคลเอ็นต์อื่น + credential_flow_not_configured: โฟลว์ข้อมูลประจำตัวรหัสผ่านเจ้าของทรัพยากรล้มเหลวเนื่องจากไม่ได้กำหนดค่า Doorkeeper.configure.resource_owner_from_credentials + invalid_client: การรับรองความถูกต้องไคลเอ็นต์ล้มเหลวเนื่องจากไคลเอ็นต์ที่ไม่รู้จัก ไม่มีการรับรองความถูกต้องไคลเอ็นต์ที่รวมอยู่ หรือวิธีการรับรองความถูกต้องที่ไม่รองรับ + invalid_grant: การให้การรับรองความถูกต้องที่ให้มาไม่ถูกต้อง หมดอายุแล้ว เพิกถอนแล้ว ไม่ตรงกับ URI การเปลี่ยนเส้นทางที่ใช้ในคำขอการรับรองความถูกต้อง หรือออกให้ไคลเอ็นต์อื่น invalid_redirect_uri: URI การเปลี่ยนเส้นทางที่รวมอยู่ไม่ถูกต้อง invalid_request: missing_param: 'พารามิเตอร์ที่จำเป็นขาดหายไป: %{value}' - request_not_authorized: คำขอต้องได้รับอนุญาต พารามิเตอร์ที่จำเป็นสำหรับการให้สิทธิ์คำขอขาดหายไปหรือไม่ถูกต้อง - unknown: คำขอไม่มีพารามิเตอร์ที่จำเป็น มีค่าพารามิเตอร์ที่ไม่รองรับ หรืออยู่ในรูปแบบที่ไม่ถูกต้อง - invalid_resource_owner: ข้อมูลรับรองเจ้าของทรัพยากรที่ระบุไม่ถูกต้อง หรือไม่พบเจ้าของทรัพยากร + request_not_authorized: คำขอจำเป็นต้องได้รับอนุญาต พารามิเตอร์ที่จำเป็นสำหรับการอนุญาตคำขอขาดหายไปหรือไม่ถูกต้อง + unknown: คำขอไม่มีพารามิเตอร์ที่จำเป็น รวมค่าพารามิเตอร์ที่ไม่รองรับ หรือผิดรูปแบบ + invalid_resource_owner: ข้อมูลประจำตัวเจ้าของทรัพยากรที่ให้มาไม่ถูกต้อง หรือไม่พบเจ้าของทรัพยากร invalid_scope: ขอบเขตที่ขอไม่ถูกต้อง ไม่รู้จัก หรือผิดรูปแบบ invalid_token: expired: โทเคนการเข้าถึงหมดอายุแล้ว revoked: เพิกถอนโทเคนการเข้าถึงแล้ว unknown: โทเคนการเข้าถึงไม่ถูกต้อง resource_owner_authenticator_not_configured: การค้นหาเจ้าของทรัพยากรล้มเหลวเนื่องจากไม่ได้กำหนดค่า Doorkeeper.configure.resource_owner_authenticator - server_error: เซิร์ฟเวอร์การให้สิทธิ์พบสภาวะที่ไม่คาดคิดซึ่งทำให้ไม่สามารถดำเนินการตามคำขอได้ - temporarily_unavailable: ขณะนี้เซิร์ฟเวอร์การให้สิทธิ์ไม่สามารถจัดการตามคำขอได้ เนื่องจากการโอเวอร์โหลดหรือมีการบำรุงรักษาเซิร์ฟเวอร์ชั่วคราว + server_error: เซิร์ฟเวอร์การรับรองความถูกต้องพบเงื่อนไขที่ไม่คาดคิดซึ่งป้องกันไม่ให้เซิร์ฟเวอร์ดำเนินการตามคำขอ + temporarily_unavailable: เซิร์ฟเวอร์การรับรองความถูกต้องไม่สามารถจัดการคำขอได้ในปัจจุบันเนื่องจากการทำงานเกินพิกัดชั่วคราวหรือการบำรุงรักษาเซิร์ฟเวอร์ unauthorized_client: ไคลเอ็นต์ไม่ได้รับอนุญาตให้ทำคำขอนี้โดยใช้วิธีการนี้ - unsupported_grant_type: ประเภทการให้สิทธิ์ไม่ได้รับการสนับสนุนโดยเซิร์ฟเวอร์การให้สิทธิ์นะ + unsupported_grant_type: ชนิดการให้การรับรองความถูกต้องไม่รองรับโดยเซิร์ฟเวอร์การรับรองความถูกต้อง unsupported_response_type: เซิร์ฟเวอร์การอนุญาตไม่รองรับชนิดการตอบสนองนี้ flash: applications: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 5fbde142b90..5d3e1e367af 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -22,7 +22,7 @@ eo: federation_hint_html: Per konto ĉe %{instance}, vi povos sekvi homojn ĉe iu ajn Mastodon nodo kaj preter. get_apps: Provu telefonan aplikaĵon hosted_on: "%{domain} estas nodo de Mastodon" - instance_actor_flash: 'Ĉi tiu konto estas virtuala agento uzata por reprezenti la servilon mem kaj neniu individua uzanto. Ĝi estas uzata por celoj de la federaĵo kaj devas ne esti brokita se vi ne volas bloki la tutan servilon, en kiu okazo vi devas uzi blokadon de domajno. + instance_actor_flash: 'Ĉi tiu konto estas virtuala agento uzata por reprezenti la servilon mem kaj neniu individua uzanto. Ĝi estas uzata por celoj de la federaĵo, kaj devas ne esti brokita, krom se vi ne volas bloki la tutan servilon, tiuokaze vi devas uzi blokadon de domajno. ' learn_more: Lerni pli diff --git a/config/locales/he.yml b/config/locales/he.yml index 4daa4f3b6d3..74fee81cc0e 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -35,11 +35,12 @@ he: server_stats: 'סטטיסטיקות שרת:' source_code: קוד מקור status_count_after: - many: חצרוצים - one: חצרוץ - other: חצרוצים - two: חצרוצים + many: פוסטים + one: פוסט + other: פוסטים + two: פוסטים status_count_before: שכתבו + tagline: רשת חברתית מבוזרת terms: תנאי שימוש unavailable_content: שרתים מוגבלים unavailable_content_description: @@ -83,10 +84,10 @@ he: pin_errors: following: עליך לעקוב אחרי חשבון לפני שניתן יהיה להמליץ עליו posts: - many: חצרוצים - one: חצרוץ - other: חצרוצים - two: חצרוצים + many: פוסטים + one: פוסט + other: פוסטים + two: פוסטים posts_tab_heading: חצרוצים posts_with_replies: חצרוצים ותגובות roles: @@ -110,11 +111,17 @@ he: avatar: יַצְגָן by_domain: שם מתחם change_email: + changed_msg: דוא"ל שונה בהצלחה current_email: כתובת דוא"ל נוכחית label: שינוי כתובת דוא"ל משוייכת לחשבון new_email: כתובת דוא"ל חדשה submit: שלחי בקשה לשינוי דוא"ל title: שינוי כתובת דוא"ל עבור המשתמש.ת %{username} + change_role: + changed_msg: תפקיד שונה בהצלחה ! + label: שנה תפקיד + no_role: ללא תפקיד + title: שינוי תפקיד עבור המשתמש.ת %{username} confirm: אישור confirmed: אושר confirming: המאשר @@ -158,6 +165,7 @@ he: active: פעילים all: הכל pending: בהמתנה + silenced: מוגבלים suspended: מושהים title: ניהול קהילה moderation_notes: הודעות מנחה @@ -165,6 +173,7 @@ he: most_recent_ip: כתובות אחרונות no_account_selected: לא בוצעו שינויים בחשבונות ל שכן לא נבחרו חשבונות no_limits_imposed: לא הוטלו הגבלות + no_role_assigned: ללא תפקיד not_subscribed: לא רשום pending: ממתינים לסקירה perform_full_suspension: ביצוע השעייה מלאה @@ -193,6 +202,7 @@ he: reset: איפוס reset_password: אתחול סיסמא resubscribe: להרשם מחדש + role: תפקיד search: חיפוש search_same_email_domain: משתמשים אחרים מאותו דומיין דוא"ל search_same_ip: משתמשים אחרים מאותה כתובת IP @@ -252,7 +262,7 @@ he: destroy_email_domain_block: מחיקת חסימת דומיין דוא"ל destroy_instance: טיהור דומיין destroy_ip_block: מחיקת כלל IP - destroy_status: מחיקת חצרוץ + destroy_status: מחיקת פוסט destroy_unavailable_domain: מחיקת דומיין בלתי זמין disable_2fa_user: השעיית זיהוי דו-גורמי disable_custom_emoji: השעיית אמוג'י מיוחד @@ -303,7 +313,7 @@ he: destroy_email_domain_block_html: '%{name} הסיר/ה חסימה מדומיין הדוא"ל %{target}' destroy_instance_html: "%{name} טיהר/ה את הדומיין %{target}" destroy_ip_block_html: "%{name} מחק/ה את הכלל עבור IP %{target}" - destroy_status_html: "%{name} הסיר/ה חצרוץ מאת %{target}" + destroy_status_html: "%{name} הסיר/ה פוסט מאת %{target}" destroy_unavailable_domain_html: "%{name} התחיל/ה מחדש משלוח לדומיין %{target}" disable_2fa_user_html: "%{name} ביטל/ה את הדרישה לאימות דו-גורמי למשתמש %{target}" disable_custom_emoji_html: "%{name} השבית/ה את האמוג'י %{target}" @@ -331,8 +341,8 @@ he: update_announcement_html: "%{name} עדכן/ה הכרזה %{target}" update_custom_emoji_html: "%{name} עדכן/ה אמוג'י %{target}" update_domain_block_html: "%{name} עדכן/ה חסימת דומיין עבור %{target}" - update_status_html: "%{name} עדכן/ה חצרוץ של %{target}" - deleted_status: "(חצרוץ נמחק)" + update_status_html: "%{name} עדכן/ה פוסט של %{target}" + deleted_status: "(פוסט נמחק)" empty: לא נמצאו יומנים. filter_by_action: סינון לפי פעולה filter_by_user: סינון לפי משתמש @@ -436,6 +446,7 @@ he: destroyed_msg: חסימת שרת בוטלה domain: שרת edit: עריכת חסימת שם מתחם + existing_domain_block: כבר החלת הגבלות מחמירות יותר על %{name} existing_domain_block_html: כבר הפעלת הגבלות חמורות יותר על %{name}, עליך ראשית להסיר מעליו/ה את החסימה. new: create: יצירת חסימה @@ -666,6 +677,71 @@ he: unresolved: לא פתור updated_at: עודכן view_profile: צפה בפרופיל + roles: + add_new: הוספת תפקיד + assigned_users: + many: "%{count} משתמשים" + one: 'משתמש %{count} ' + other: "%{count} משתמשים" + two: "%{count} שני משתמשים" + categories: + administration: ניהול מערכת + devops: פיתוח + invites: הזמנות + moderation: פיקוח + special: מיוחדים + delete: מחיקה + description_html: באמצעות תפקידי משתמש, תוכלו להתאים אישית לאילו פונקציות ואזורים של מסטודון המשתמשים יוכלו לגשת + edit: עריכת התפקיד של %{name} + everyone: הרשאות ברירת מחדל + everyone_full_description_html: זהו התפקיד הבסיסי שמשפיע על כלל המשתשמשים, אפילו אלו ללא תפקיד. כל התפקידים האחרים יורשים את ההרשאות שלהם ממנו. + permissions_count: + many: "%{count} הרשאות" + one: הרשאה %{count} + other: "%{count} הרשאות" + two: "%{count} הרשאות" + privileges: + administrator: מנהל מערכת + administrator_description: משתמשים עם הרשאה זו יוכלו לעקוף כל הרשאה + delete_user_data: מחיקת כל נתוני המשתמש + delete_user_data_description: מאפשר למשתמשים למחוק נתוני משתמשים אחרים ללא דיחוי + invite_users: הזמנת משתמשים + invite_users_description: מאפשר למשתמשים להזמין אנשים חדשים לשרת + manage_announcements: ניהול הכרזות + manage_announcements_description: מאפשר למשתמשים לנהל הכרזות של השרת + manage_appeals: ניהול ערעורים + manage_appeals_description: מאפשר למשתמשים לסקור ערעורים כנגד פעולות מודרציה + manage_blocks: ניהול חסימות + manage_blocks_description: מאפשר למשתמשים לחסום ספקי דוא"ל וכתובות IP + manage_custom_emojis: ניהול סמלונים בהתאמה אישית + manage_custom_emojis_description: מאפשר למשתמשים לנהל סמלונים בהתאמה אישית של השרת + manage_federation: ניהול פדרציה + manage_federation_description: מאפשר למשתמשים לחסום או לאפשר התממשקות עם שמות מתחם אחרים + manage_invites: ניהול הזמנות + manage_invites_description: מאפשר למשתמשים לעלעל ב ולבטל קישורי הזמנה + manage_reports: ניהול דו"חות + manage_reports_description: מאפשר למשתמשים לסקור דו"חות ולבצע פעולות מודרציה בהתבסס עליהם + manage_roles: ניהול תפקידים + manage_roles_description: מאפשר למשתמשים לנהל ולמנות אחרים לתפקידים נמוכים יותר משלהם. + manage_rules: ניהול כללים + manage_rules_description: מאפשר למשתמשים לנהל את כללי השרת + manage_settings: נהל הגדרות + manage_settings_description: מאפשר למשתמשים לנהל את הגדרות השרת + manage_taxonomies: ניהול טקסונומיות + manage_taxonomies_description: מאפשר למשתמשים לסקור תוכן אופנתי (טרנדי) ולעדכן אפשרויות של תגיות. + manage_user_access: ניהול גישת משתמשים + manage_user_access_description: מאפשר למשתמשים לבטל אימות דו-שלבי של משתמשים אחרים, לשנות את כתובות הדוא"ל שלהם, ולאפס את סיסמתם + manage_users: ניהול משתמשים + manage_users_description: מאפשר למשתמשים לצפות בפרטים של משתמשים אחרים ולבצע פעולות מודרציה לפיהם + manage_webhooks: ניהול Webhooks + manage_webhooks_description: מאפשר למשתמשים להגדיר Webhooks לאירועים מנהלתיים + view_audit_log: צפייה בלוג ביקורת + view_audit_log_description: מאפשר למשתשמשים לצפות בהיסטוריה של פעולות מנהלתיות על השרת + view_dashboard: הצג לוח מחוונים + view_dashboard_description: אפשר למשתמשים לגשת ללוח המחוונים + view_devops: פיתוח + view_devops_description: מאפשר למשתמשים לגשת ללוחות המחוונים של Sidekiq ושל pgHero + title: תפקידים rules: add_new: הוספת כלל delete: מחיקה @@ -825,10 +901,10 @@ he: title: מפרסמים rejected: דחוי statuses: - allow: הרשאת חצרוץ + allow: הרשאת פוסט allow_account: הרשאת מחבר/ת description_html: אלו הם חצרוצים שהשרת שלך מכיר וזוכים להדהודים וחיבובים רבים כרגע. זה עשוי למשתמשיך החדשים והחוזרים למצוא עוד נעקבים. החצרוצים לא מוצגים עד שיאושר המחבר/ת, והמחבר/ת יאשרו שחשבונים יומלץ לאחרים. ניתן לאשר או לדחות חצרוצים ספציפיים. - disallow: לא לאשר חצרוץ + disallow: לדחות פוסט disallow_account: לא לאשר מחבר/ת not_discoverable: המחבר/ת לא בחר/ה לאפשר את גילויים shared_by: @@ -870,13 +946,26 @@ he: empty: לא הגדרת עדיין שום טקסט מוכן מראש לאזהרה. title: ניהול טקסטים מוכנים מראש לאזהרות webhooks: + add_new: הוספת נקודת קצה delete: מחיקה disable: כיבוי disabled: כבוי + edit: עריכת נקודת קצה + empty: לא הוגדו נקודות קצה להתליות רשת עדיין. enable: אפשר enabled: פעילים + enabled_events: + many: "%{count} אירועים אופשרו" + one: אירוע %{count} מאופשר + other: "%{count} אירועים אופשרו" + two: "%{count} אירועים אופשרו" events: אירועים + new: Webhook חדש + rotate_secret: החלף מפתח + secret: מפתח הרשמה status: סטטוס + title: התליות רשת + webhook: התליית רשת admin_mailer: new_appeal: actions: @@ -905,7 +994,7 @@ he: title: נושאים חמים new_trending_statuses: no_approved_statuses: אין כרגע שום חצרוצים חמים מאושרים. - requirements: כל אחד מהמועמדים האלה עשוי לעבור החצרוץ החם המאושר מדרגה %{rank}, שההא כרגע %{lowest_status_url} עם ציון של %{lowest_status_score}. + requirements: כל אחד מהמועמדים האלה עשוי לעבור את הפוסט החם המאושר מדרגה %{rank}, שהוא כרגע %{lowest_status_url} עם ציון של %{lowest_status_score}. title: חצרוצים לוהטים new_trending_tags: no_approved_tags: אין כרגע שום האשתגיות חמות מאושרות. @@ -930,14 +1019,14 @@ he: guide_link: https://crowdin.com/project/mastodon guide_link_text: כולם יכולים לתרום. sensitive_content: תוכן רגיש - toot_layout: פריסת חצרוץ + toot_layout: פריסת פוסט application_mailer: notification_preferences: שינוי העדפות דוא"ל salutation: "%{name}," settings: 'שינוי הגדרות דוא"ל: %{link}' view: 'תצוגה:' view_profile: צפיה בפרופיל - view_status: הצגת חצרוץ + view_status: הצגת פוסט applications: created: ישום נוצר בהצלחה destroyed: ישום נמחק בהצלחה @@ -1061,15 +1150,17 @@ he: appealed_msg: הערעור שלך הוגש. במידה ויאושר, תיודע. appeals: submit: הגש ערעור + approve_appeal: קבלת ערעור associated_report: הדו"ח המשויך created_at: מתאריך description_html: אלו הן הפעולות שננקטו כנגד חשבונך והאזהרות שנשלחו אליך על ידי צוות %{instance}. recipient: הנמען - status: 'חצרוץ #%{id}' - status_removed: החצרוץ כבר הוסר מהמערכת + reject_appeal: דחיית ערעור + status: 'פוסט #%{id}' + status_removed: הפוסט כבר הוסר מהמערכת title: "%{action} מתאריך %{date}" title_actions: - delete_statuses: הסרת חצרוץ + delete_statuses: הסרת פוסט disable: הקפאת חשבון mark_statuses_as_sensitive: סימון חצרוצים כרגישים none: אזהרה @@ -1127,14 +1218,26 @@ he: public: פידים פומביים thread: שיחות edit: + add_keyword: הוספת מילת מפתח + keywords: מילות מפתח title: ערוך מסנן errors: + deprecated_api_multiple_keywords: לא ניתן לשנות פרמטרים אלו מהיישומון הזה בגלל שהם חלים על יותר ממילת מפתח אחת. ניתן להשתמש ביישומון מעודכן יותר או בממשק הוובי. invalid_context: לא סופק הקשר או הקשר לא תקין index: + contexts: פילטרים ב %{contexts} delete: למחוק empty: אין לך מסננים. + expires_in: פג תוקף ב %{distance} + expires_on: פג תוקף ב %{date} + keywords: + many: "%{count} מילות מפתח" + one: מילת מפתח %{count} + other: "%{count} מילות מפתח" + two: "%{count} מילות מפתח" title: מסננים new: + save: שמירת מסנן חדש title: הוספת מסנן חדש footer: developers: מפתחות @@ -1215,7 +1318,7 @@ he: title: הסטוריית אימותים media_attachments: validations: - images_and_video: לא ניתן להוסיף וידאו לחצרוץ שכבר מכיל תמונות + images_and_video: לא ניתן להוסיף וידאו לפוסט שכבר מכיל תמונות not_ready: לא ניתן להצמיד קבצים שהעלאתם לא הסתיימה. נסה/י שוב בעוד רגע! too_many: לא ניתן להוסיף יותר מארבעה קבצים migrations: @@ -1257,6 +1360,8 @@ he: copy_account_note_text: 'חשבון זה הועבר מ-%{acct}, הנה הערותיך הקודמות לגביהם:' notification_mailer: admin: + report: + subject: '%{name} שלח/ה דו"ח' sign_up: subject: "%{name} נרשמו" digest: @@ -1343,7 +1448,7 @@ he: too_many_options: לא יכול להכיל יותר מ-%{max} פריטים preferences: other: שונות - posting_defaults: ברירות מחדל לחצרוץ + posting_defaults: ברירות מחדל לפוסטים public_timelines: פידים פומביים reactions: errors: @@ -1376,13 +1481,13 @@ he: remote_interaction: favourite: proceed: המשך לחיבוב - prompt: 'ברצונך לחבב חצרוץ זה:' + prompt: 'ברצונך לחבב פוסט זה:' reblog: proceed: המשיכו להדהוד - prompt: 'ברצונך להדהד חצרוץ זה:' + prompt: 'ברצונך להדהד פוסט זה:' reply: proceed: המשיבו לתגובה - prompt: 'ברצונך להשיב לחצרוץ זה:' + prompt: 'ברצונך להשיב לפוסט זה:' reports: errors: invalid_rules: לא מתייחס לכללים קבילים @@ -1488,7 +1593,7 @@ he: two: 'מכיל את ההאשתגיות האסורות: %{tags}' edited_at_html: נערך ב-%{date} errors: - in_reply_not_found: נראה שהחצרוץ שאת/ה מנסה להגיב לו לא קיים. + in_reply_not_found: נראה שהפוסט שאת/ה מנסה להגיב לו לא קיים. open_in_web: פתח ברשת over_character_limit: חריגה מגבול התווים של %{max} pin_errors: @@ -1558,7 +1663,7 @@ he: min_reblogs: שמור חצרוצים מהודהדים לפחות min_reblogs_hint: לא מוחק מי מחצרוציך שקיבלו לפחות את המספר הזה של הדהודים. להשאיר ריק כדי למחוק חצרוצים ללא קשר למספר ההדהודים שקיבלו stream_entries: - pinned: חצרוץ מוצמד + pinned: פוסט נעוץ reblogged: הודהד sensitive_content: תוכן רגיש strikes: diff --git a/config/locales/id.yml b/config/locales/id.yml index 2bf3e7d1392..f14f4cf9f01 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -97,11 +97,14 @@ id: avatar: Avatar by_domain: Domian change_email: + changed_msg: כתובת דוא"ל שונתה בהצלחה ! current_email: Email saat ini label: Ganti email new_email: Email baru submit: Ganti email title: Ganti email untuk %{username} + change_role: + changed_msg: תפקיד שונה בהצלחה ! confirm: Konfirmasi confirmed: Dikonfirmasi confirming: Mengkonfirmasi @@ -624,6 +627,8 @@ id: unresolved: Belum Terseleseikan updated_at: Diperbarui view_profile: Lihat profil + roles: + edit: ערכי את התפקיד של '%{name}' rules: add_new: Tambah aturan delete: Hapus diff --git a/config/locales/ja.yml b/config/locales/ja.yml index cb7a1526c65..e4c7b6d117b 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -620,6 +620,25 @@ ja: unresolved: 未解決 updated_at: 更新日時 view_profile: プロフィールを表示 + roles: + privileges: + manage_rules: ルールの管理 + manage_rules_description: ユーザーがサーバールールを変更できるようにします + manage_settings: 設定の管理 + manage_settings_description: ユーザーがサイト設定を変更できるようにします + manage_taxonomies_description: トレンドコンテンツの確認とハッシュタグの設定の更新 + manage_user_access: アクセス権を管理 + manage_user_access_description: 他のユーザーの2段階認証を無効にしたり、メールアドレスを変更したり、パスワードをリセットしたりすることができます。 + manage_users: ユーザーの管理 + manage_webhooks: Webhook の管理 + manage_webhooks_description: 管理者イベントのWebhookを設定できます。 + view_audit_log: 監査ログの表示 + view_audit_log_description: ユーザーがサーバー上で管理アクションの履歴を表示できるようにします + view_dashboard: ダッシュボードの表示 + view_dashboard_description: ユーザーがダッシュボードやさまざまなメトリクスにアクセスできるようにします + view_devops: 開発者 + view_devops_description: Sidekiq と pgHero ダッシュボードにアクセスできるようにします + title: 権限 rules: add_new: ルールを追加 delete: 削除 @@ -820,6 +839,7 @@ ja: enabled: アクティブ events: イベント new: 新しいwebhook + status: ステータス title: Webhooks webhook: Webhook admin_mailer: @@ -1076,12 +1096,16 @@ ja: errors: invalid_context: 対象がないか無効です index: + contexts: "%{contexts} のフィルター" delete: 削除 empty: フィルターはありません。 + expires_in: "%{distance} で期限切れ" + expires_on: 有効期限 %{date} keywords: other: "%{count}件のキーワード" title: フィルター new: + save: 新規フィルターを保存 title: 新規フィルターを追加 footer: developers: 開発者向け @@ -1198,6 +1222,8 @@ ja: copy_account_note_text: このユーザーは%{acct}から引っ越しました。これは以前のメモです。 notification_mailer: admin: + report: + subject: "%{name} がレポートを送信しました" sign_up: subject: "%{name}さんがサインアップしました" digest: diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 2d49d756d47..9c20a8f8af4 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -695,6 +695,11 @@ pl: edit: Edytuj rolę '%{name}' everyone: Domyślnie uprawnienia everyone_full_description_html: To jest rola podstawowa wpływająca na wszystkich użytkowników, nawet tych, którzy nie mają przypisanej roli. Wszystkie inne role dziedziczą z niej uprawnienia. + permissions_count: + few: "%{count} uprawnień" + many: "%{count} uprawnień" + one: "%{count} uprawnienie" + other: "%{count} uprawnień" privileges: administrator: Administrator administrator_description: Użytkownicy z tym uprawnieniem omijają każde uprawnienie @@ -725,11 +730,15 @@ pl: manage_taxonomies: Zarządzaj taksonomiami manage_taxonomies_description: Pozwala użytkownikom przeglądać najpopularniejsze treści i aktualizować ustawienia hasztagów manage_user_access: Zarządzaj dostępem użytkownika + manage_user_access_description: Pozwala użytkownikom na wyłączenie uwierzytelniania dwuskładnikowego innych użytkowników, zmianę adresu e-mail i zresetowanie hasła manage_users: Zarządzanie użytkownikami + manage_users_description: Pozwala użytkownikom na oglądanie szczegółów innych użytkowników i wykonywanie na ich kontach działań moderacyjnych manage_webhooks: Zarządzanie webhookami + manage_webhooks_description: Pozwala użytkownikom na konfigurację webhooków dla wydarzeń administracyjnych view_audit_log: Wyświetl dziennik zdarzeń view_audit_log_description: Pozwala użytkownikom zobaczyć historię działań administracyjnych na serwerze view_dashboard: Wyświetl panel + view_dashboard_description: Pozwala użytkownikom na dostęp do panelu i różnych metryk view_devops: Devops view_devops_description: Pozwala użytkownikom na dostęp do paneli Sidekiq i pgHero title: Role diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml index c7fe6026cb8..fe0ed1a77be 100644 --- a/config/locales/simple_form.he.yml +++ b/config/locales/simple_form.he.yml @@ -46,7 +46,7 @@ he: locale: שפת ממשק המשתמש, הדוא"ל וההתראות בדחיפה locked: מחייב אישור עוקבים באופן ידני. פרטיות ההודעות תהיה עוקבים-בלבד אלא אם יצוין אחרת password: נא להשתמש בלפחות 8 תוים - phrase: התאמה תמצא ללא תלות באזהרת תוכן בחצרוץ + phrase: התאמה תמצא ללא תלות באזהרת תוכן בפוסט scopes: לאיזה ממשק יורשה היישום לגשת. בבחירת תחום כללי, אין צורך לבחור ממשקים ספציפיים. setting_aggregate_reblogs: לא להראות הדהודים של חצרוצים שהודהדו לאחרונה (משפיע רק על הדהודים שהתקבלו לא מזמן) setting_always_send_emails: בדרך כלל התראות דוא"ל לא יישלחו בזמן שימוש פעיל במסטודון @@ -56,7 +56,7 @@ he: setting_display_media_show_all: גלה מדיה תמיד setting_hide_network: עוקבייך ונעקבייך יוסתרו בפרופילך setting_noindex: משפיע על הפרופיל הציבורי שלך ועמודי ההודעות - setting_show_application: היישום בו נעשה שימוש כדי לחצרץ יופיע בתצוגה המפורטת של החצרוץ + setting_show_application: היישום בו נעשה שימוש כדי לפרסם פוסט יופיע בתצוגה המפורטת של הפוסט setting_use_blurhash: הגראדיינטים מבוססים על תוכן התמונה המוסתרת, אבל מסתירים את כל הפרטים setting_use_pending_items: הסתר עדכוני פיד מאחורי קליק במקום לגלול את הפיד אוטומטית username: שם המשתמש שלך יהיה ייחודי ב-%{domain} @@ -68,6 +68,11 @@ he: with_dns_records: ייעשה נסיון למצוא את רשומות ה-DNS של דומיין נתון והתוצאות ייחסמו גם הן featured_tag: name: 'אולי תרצה/י להשתמש באחד מאלה:' + filters: + action: בחרו איזו פעולה לבצע כאשר פוסט מתאים למסנן + actions: + hide: הסתר את התוכן המסונן, כאילו לא היה קיים + warn: הסתר את התוכן המסונן מאחורי אזהרה עם כותרת המסנן form_challenge: current_password: את.ה נכנס. ת לאזור מאובטח imports: @@ -91,8 +96,16 @@ he: name: ניתן רק להחליף בין אותיות קטנות וגדולות, למשל כדי לשפר את הקריאות user: chosen_languages: אם פעיל, רק חצרוצים בשפות הנבחרות יוצגו לפידים הפומביים + role: התפקיד שולט על אילו הרשאות יש למשתמש + user_role: + color: צבע לתפקיד בממשק המשתמש, כ RGB בפורמט הקסדצימלי + highlighted: מאפשר נראות ציבורית של התפקיד + name: שם ציבורי של התפקיד, במידה והתפקיד מוגדר ככזה שמופיע כתג + permissions_as_keys: למשתמשים בתפקיד זה תהיה גישה ל... + position: תפקיד גבוה יותר מכריע בחילוקי דעות במצבים מסוימים. פעולות מסוימות יכולות להתבצע רק על תפקידים בדרגה נמוכה יותר webhook: events: בחר אירועים לשליחה + url: היעד שאליו יישלחו אירועים labels: account: fields: @@ -158,7 +171,7 @@ he: setting_auto_play_gif: ניגון אוטומטי של גיפים setting_boost_modal: הצגת דיאלוג אישור לפני הדהוד setting_crop_images: קטום תמונות בחצרוצים לא מורחבים ל 16 על 9 - setting_default_language: שפת חצרוץ + setting_default_language: שפת ברירת מחדל לפוסט setting_default_privacy: פרטיות ההודעות setting_default_sensitive: תמיד לתת סימון "רגיש" למדיה setting_delete_modal: להראות תיבת אישור לפני מחיקת חיצרוץ @@ -171,7 +184,7 @@ he: setting_hide_network: להחביא את הגרף החברתי שלך setting_noindex: לבקש הסתרה ממנועי חיפוש setting_reduce_motion: הפחתת תנועה בהנפשות - setting_show_application: הצגת הישום ששימש לחצרוץ + setting_show_application: הצגת הישום ששימש לפרסום הפוסט setting_system_font_ui: להשתמש בגופן ברירת המחדל של המערכת setting_theme: ערכת העיצוב של האתר setting_trends: הצגת הנושאים החמים @@ -180,6 +193,7 @@ he: setting_use_pending_items: מצב איטי severity: חומרה sign_in_token_attempt: קוד אבטחה + title: כותרת type: סוג יבוא username: שם משתמש username_or_email: שם משתמש או דוא"ל @@ -188,6 +202,10 @@ he: with_dns_records: לכלול רשומות MX וכתובות IP של הדומיין featured_tag: name: האשתג + filters: + actions: + hide: הסתרה כוללת + warn: הסתרה עם אזהרה interactions: must_be_follower: חסימת התראות משאינם עוקבים must_be_following: חסימת התראות משאינם נעקבים @@ -206,12 +224,12 @@ he: notification_emails: appeal: מישהם מערערים על החלטת מנהל קהילה digest: שליחת הודעות דוא"ל מסכמות - favourite: שליחת דוא"ל כשמחבבים חצרוץ + favourite: שליחת דוא"ל כשמחבבים פוסט follow: שליחת דוא"ל כשנוספות עוקבות follow_request: שליחת דוא"ל כשמבקשים לעקוב mention: שליחת דוא"ל כשפונים אלייך pending_account: נדרשת סקירה של חשבון חדש - reblog: שליחת דוא"ל כשמהדהדים חצרוץ שלך + reblog: שליחת דוא"ל כשמהדהדים פוסט שלך report: דו"ח חדש הוגש trending_tag: נושאים חמים חדשים דורשים סקירה rule: @@ -221,6 +239,17 @@ he: name: האשתג trendable: הרשה/י להאשתג זה להופיע תחת נושאים חמים usable: הרשה/י לחצרוצים להכיל האשתג זה + user: + role: תפקיד + user_role: + color: צבע תג + highlighted: הצג תפקיד כתג בפרופיל משתמש + name: שם + permissions_as_keys: הרשאות + position: עדיפות + webhook: + events: אירועים מאופשרים + url: כתובת URL של נקודת הקצה 'no': לא recommended: מומלץ required: diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index cde47dbd042..5e8ef67b4ca 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -91,6 +91,10 @@ ja: name: 視認性向上などのためにアルファベット大文字小文字の変更のみ行うことができます user: chosen_languages: 選択すると、選択した言語の投稿のみが公開タイムラインに表示されるようになります + user_role: + highlighted: これにより、役割が公開されます。 + name: 役割をバッジ表示する際の表示名 + permissions_as_keys: この役割を持つユーザーは次の機能にアクセスできます labels: account: fields: @@ -178,6 +182,7 @@ ja: setting_use_pending_items: 手動更新モード severity: 重大性 sign_in_token_attempt: セキュリティコード + title: タイトル type: インポートする項目 username: ユーザー名 username_or_email: ユーザー名またはメールアドレス @@ -219,6 +224,14 @@ ja: name: ハッシュタグ trendable: トレンドへの表示を許可する usable: 投稿への使用を許可する + user: + role: 役割 + user_role: + color: バッジの色 + highlighted: プロフィールに役割のバッジを表示する + name: 名前 + permissions_as_keys: 権限 + position: 優先度 webhook: events: 有効なイベント url: エンドポイントURL diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index 1be350dcae2..91a472b21f6 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -96,7 +96,12 @@ pl: name: Możesz zmieniać tylko wielkość liter, np. aby były bardziej widoczne user: chosen_languages: Jeżeli zaznaczone, tylko wpisy w wybranych językach będą wyświetlane na publicznych osiach czasu + role: Rola kontroluje uprawnienia użytkownika user_role: + color: Kolor używany dla roli w całym interfejsie użytkownika, wyrażony jako RGB w formacie szesnastkowym + highlighted: To sprawia, że rola jest widoczna publicznie + name: Publiczna nazwa roli, jeśli włączone jest wyświetlanie odznaki + permissions_as_keys: Użytkownicy z tą rolą będą mieli dostęp do... position: Wyższa rola decyduje o rozwiązywaniu konfliktów w pewnych sytuacjach. Niektóre działania mogą być wykonywane tylko na rolach z niższym priorytetem webhook: events: Wybierz zdarzenia do wysłania diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index b542eba54e3..b032295bafb 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -81,7 +81,7 @@ th: text: นี่จะช่วยให้เราตรวจทานใบสมัครของคุณ ip_block: comment: ไม่จำเป็น จดจำเหตุผลที่คุณเพิ่มกฎนี้ - expires_in: ที่อยู่ IP เป็นทรัพยากร บางครั้งมีการแบ่งปันและมักเปลี่ยนมือ ด้วยเหตุผลนี้ จึงไม่แนะนำให้บล็อก IP + expires_in: ที่อยู่ IP เป็นทรัพยากรที่มีจำกัด บางครั้งที่อยู่ใช้ร่วมกันและมักเปลี่ยนมือ ด้วยเหตุผลนี้ การปิดกั้น IP แบบไม่มีกำหนดจึงไม่แนะนำ ip: ป้อนที่อยู่ IPv4 หรือ IPv6 คุณสามารถปิดกั้นทั้งช่วงได้โดยใช้ไวยากรณ์ CIDR ระวังอย่าล็อคตัวคุณเองออก! severities: no_access: ปิดกั้นการเข้าถึงทรัพยากรทั้งหมด @@ -91,21 +91,21 @@ th: text: อธิบายกฎหรือข้อกำหนดสำหรับผู้ใช้ในเซิร์ฟเวอร์นี้ พยายามทำให้กฎหรือข้อกำหนดสั้นและเรียบง่าย sessions: otp: 'ป้อนรหัสสองปัจจัยที่สร้างโดยแอปในโทรศัพท์ของคุณหรือใช้หนึ่งในรหัสกู้คืนของคุณ:' - webauthn: หากเป็นคีย์ USB อย่าลืมเสียบไว้ และหากจำเป็น ให้แตะคีย์นั้นไว้นะ + webauthn: หากกุญแจความปลอดภัยเป็นกุญแจ USB ตรวจสอบให้แน่ใจว่าได้เสียบกุญแจ และหากจำเป็น ให้แตะกุญแจ tag: name: คุณสามารถเปลี่ยนได้เฉพาะตัวพิมพ์ใหญ่เล็กของตัวอักษรเท่านั้น ตัวอย่างเช่น เพื่อทำให้ตัวอักษรอ่านได้ง่ายขึ้น user: chosen_languages: เมื่อกาเครื่องหมาย จะแสดงเฉพาะโพสต์ในภาษาที่เลือกในเส้นเวลาสาธารณะเท่านั้น - role: ควบคุมบทบาท ว่าผู้ใช้มีสิทธิใดบ้าง + role: บทบาทควบคุมว่าสิทธิอนุญาตใดที่ผู้ใช้มี user_role: - color: สีที่จะใช้สำหรับบทบาทตลอดทั้ง UI เป็น RGB ในรูปแบบฐานสิบหก - highlighted: ทำให้บทบาทนี้ปรากฏต่อสู่สาธารณะ - name: ชื่อสาธารณะของบทบาท หากกำหนดบทบาทให้แสดงเป็นตราสัญลักษณ์ - permissions_as_keys: ผู้ใช้ที่มีบทบาทนี้จะมีสิทธิ์เข้าถึง... - position: บทบาทที่สูงขึ้นอาจจะตัดสินใจแก้ไขข้อขัดแย้งในบางสถานการณ์ การดำเนินการบางอย่างสามารถทำได้เฉพาะกับบทบาทที่มีลำดับความสำคัญต่ำกว่า + color: สีที่ใช้สำหรับบทบาททั่วทั้ง UI เป็น RGB ในรูปแบบฐานสิบหก + highlighted: สิ่งนี้ทำให้บทบาทปรากฏเป็นสาธารณะ + name: ชื่อสาธารณะของบทบาท หากมีการตั้งบทบาทให้แสดงเป็นป้าย + permissions_as_keys: ผู้ใช้ที่มีบทบาทนี้จะสามารถเข้าถึง... + position: บทบาทที่สูงขึ้นตัดสินใจการแก้ปัญหาข้อขัดแย้งในบางสถานการณ์ การกระทำบางอย่างสามารถทำได้เฉพาะกับบทบาทที่มีระดับความสำคัญต่ำกว่าเท่านั้น webhook: events: เลือกเหตุการณ์ที่จะส่ง - url: กิจกรรมจะถูกส่งไปที่ + url: จะส่งเหตุการณ์ไปยัง labels: account: fields: @@ -137,7 +137,7 @@ th: starts_at: การเริ่มต้นเหตุการณ์ text: ประกาศ appeal: - text: อธิบายว่าเหตุใดจึงควรกลับคำตัดสินนี้ + text: อธิบายเหตุผลที่ควรกลับการตัดสินใจนี้ defaults: autofollow: เชิญให้ติดตามบัญชีของคุณ avatar: ภาพประจำตัว @@ -242,13 +242,13 @@ th: user: role: บทบาท user_role: - color: สีของตรา - highlighted: แสดงบทบาทเป็นเครื่องหมายบนโปรไฟล์ผู้ใช้ + color: สีป้าย + highlighted: แสดงบทบาทเป็นป้ายในโปรไฟล์ผู้ใช้ name: ชื่อ permissions_as_keys: สิทธิอนุญาต position: ระดับความสำคัญ webhook: - events: เปิดใช้งานอีเว้น + events: เหตุการณ์ที่เปิดใช้งาน url: URL ปลายทาง 'no': ไม่ recommended: แนะนำ diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index d1124e3b6c1..f2e728d2a19 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -102,6 +102,7 @@ tr: highlighted: Bu rolü herkese açık hale getirir name: Rolün, eğer rozet olarak görüntülenmesi ayarlandıysa kullanılacak herkese açık ismi permissions_as_keys: Bu role sahip kullanıcıların şunlara erişimi var... + position: Belirli durumlarda çatışmayı çözmek için daha yüksek rol belirleyicidir. Bazı eylemler ancak daha düşük öncelikteki rollere uygulanabilir webhook: events: Gönderilecek etkinlikleri seçin url: Olayların gönderileceği yer diff --git a/config/locales/th.yml b/config/locales/th.yml index e2f1db85519..28ffeb46276 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -22,7 +22,7 @@ th: federation_hint_html: ด้วยบัญชีที่ %{instance} คุณจะสามารถติดตามผู้คนในเซิร์ฟเวอร์ Mastodon และอื่น ๆ get_apps: ลองแอปมือถือ hosted_on: Mastodon ที่โฮสต์ที่ %{domain} - instance_actor_flash: 'บัญชีนี้เป็นนักแสดงเสมือนที่ใช้เพื่อเป็นตัวแทนของเซิร์ฟเวอร์เอง ไม่ใช่ผู้ใช้รายบุคคล แต่มันก็ถูกใช้เพื่อวัตถุประสงค์ในการรวมกลุ่มและไม่ควรถูกบล็อก เว้นแต่คุณต้องการบล็อกทั้งอินสแตนซ์นั้น ซึ่งในกรณีนี้คุณควรใช้บล็อกโดเมนนะ + instance_actor_flash: 'บัญชีนี้เป็นตัวดำเนินการเสมือนที่ใช้เพื่อเป็นตัวแทนของเซิร์ฟเวอร์เองและไม่ใช่ผู้ใช้รายบุคคลใด ๆ บัญชีใช้สำหรับวัตถุประสงค์ในการติดต่อกับภายนอกและไม่ควรได้รับการปิดกั้นเว้นแต่คุณต้องการปิดกั้นทั้งอินสแตนซ์ ในกรณีนี้คุณควรใช้การปิดกั้นโดเมน ' learn_more: เรียนรู้เพิ่มเติม @@ -49,7 +49,7 @@ th: silenced_title: เซิร์ฟเวอร์ที่จำกัดอยู่ suspended: 'จะไม่ประมวลผล จัดเก็บ หรือแลกเปลี่ยนข้อมูลจากเซิร์ฟเวอร์เหล่านี้ ทำให้การโต้ตอบหรือการสื่อสารใด ๆ กับผู้ใช้จากเซิร์ฟเวอร์เหล่านี้เป็นไปไม่ได้:' suspended_title: เซิร์ฟเวอร์ที่ระงับอยู่ - unavailable_content_html: โดยทั่วไปแล้ว Mastodon อนุญาตให้คุณดูเนื้อหาและโต้ตอบกับผู้ใช้งานจากเซิร์ฟเวอร์อื่นใน fediverse เหล่านี้เป็นข้อยกเว้นที่เกิดขึ้นบนเซิร์ฟเวอร์นี้โดยเฉพาะ + unavailable_content_html: โดยทั่วไป Mastodon อนุญาตให้คุณดูเนื้อหาจากและโต้ตอบกับผู้ใช้จากเซิร์ฟเวอร์อื่นใดในจักรวาลสหพันธ์ นี่คือข้อยกเว้นที่ทำขึ้นในเซิร์ฟเวอร์นี้โดยเฉพาะ user_count_after: other: ผู้ใช้ user_count_before: บ้านของ @@ -62,7 +62,7 @@ th: followers: other: ผู้ติดตาม following: กำลังติดตาม - instance_actor_flash: บัญชีนี้เป็นนักแสดงเสมือนที่ใช้เพื่อเป็นตัวแทนของเซิร์ฟเวอร์เอง แต่ก็ไม่ใช่ผู้ใช้รายบุคคล แต่มันถูกใช้เพื่อวัตถุประสงค์ของการรวมกลุ่มและไม่ควรถูกระงับ + instance_actor_flash: บัญชีนี้เป็นตัวดำเนินการเสมือนที่ใช้เพื่อเป็นตัวแทนของเซิร์ฟเวอร์เองและไม่ใช่ผู้ใช้รายบุคคลใด ๆ บัญชีใช้สำหรับวัตถุประสงค์ในการติดต่อกับภายนอกและไม่ควรได้รับการระงับ joined: เข้าร่วมเมื่อ %{date} last_active: ใช้งานล่าสุด link_verified_on: ตรวจสอบความเป็นเจ้าของของลิงก์นี้เมื่อ %{date} @@ -207,8 +207,8 @@ th: subscribe: บอกรับ suspend: ระงับ suspended: ระงับอยู่ - suspension_irreversible: ข้อมูลของบัญชีนี้ถูกลบไม่สามารถย้อนกลับได้ คุณสามารถระงับบัญชีเพื่อให้ใช้งานได้ แต่จะไม่กู้คืนข้อมูลใดๆทั้งสิ้น ที่เคยมีอยู่ก่อนหน้านี้ - suspension_reversible_hint_html: บัญชีถูกระงับ และข้อมูลจะถูกลบออกอย่างสมบูรณ์ในวันที่ %{date} ก่อนหน้านั้น บัญชีสามารถกู้คืนได้โดยไม่มีผลร้ายใดๆทั้งสิ้น ถ้าหากคุณต้องการลบข้อมูลของบัญชีทั้งหมดในทันที คุณสามารถทำได้ด้านล่างนี้ + suspension_irreversible: ลบข้อมูลของบัญชีนี้อย่างถาวรแล้ว คุณสามารถเลิกระงับบัญชีเพื่อทำให้บัญชีใช้งานได้แต่จะไม่กู้คืนข้อมูลใด ๆ ที่บัญชีมีก่อนหน้านี้ + suspension_reversible_hint_html: ระงับบัญชีแล้ว และจะเอาข้อมูลออกอย่างสมบูรณ์ใน %{date} จนกว่าจะถึงตอนนั้น สามารถกู้คืนบัญชีได้โดยไม่มีผลร้ายใด ๆ หากคุณต้องการเอาข้อมูลของบัญชีทั้งหมดออกในทันที คุณสามารถทำได้ด้านล่าง title: บัญชี unblock_email: เลิกปิดกั้นที่อยู่อีเมล unblocked_email_msg: เลิกปิดกั้นที่อยู่อีเมลของ %{username} สำเร็จ @@ -299,7 +299,7 @@ th: destroy_instance_html: "%{name} ได้ล้างข้อมูลโดเมน %{target}" destroy_ip_block_html: "%{name} ได้ลบกฎสำหรับ IP %{target}" destroy_status_html: "%{name} ได้เอาโพสต์โดย %{target} ออก" - destroy_unavailable_domain_html: "%{name} ได้พักการจัดส่งไปยังโดเมน %{target}" + destroy_unavailable_domain_html: "%{name} ได้ทำการจัดส่งไปยังโดเมน %{target} ต่อ" disable_2fa_user_html: "%{name} ได้ปิดใช้งานความต้องการสองปัจจัยสำหรับผู้ใช้ %{target}" disable_custom_emoji_html: "%{name} ได้ปิดใช้งานอีโมจิ %{target}" disable_sign_in_token_auth_user_html: "%{name} ได้ปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมลสำหรับ %{target}" @@ -419,8 +419,8 @@ th: destroyed_msg: เลิกทำการปิดกั้นโดเมนแล้ว domain: โดเมน edit: แก้ไขการปิดกั้นโดเมน - existing_domain_block: คุณได้กำหนดขีดจำกัดที่เข้มงวดขึ้นแล้วบน %{name} - existing_domain_block_html: คุณได้กำหนดขีดจำกัดที่เข้มงวดขึ้นใน %{name} แล้วคุณต้อง unblock ก่อน + existing_domain_block: คุณได้กำหนดขีดจำกัดที่เข้มงวดกว่าใน %{name} ไปแล้ว + existing_domain_block_html: คุณได้กำหนดขีดจำกัดที่เข้มงวดกว่าใน %{name} ไปแล้ว คุณจำเป็นต้อง เลิกปิดกั้น ก่อน new: create: สร้างการปิดกั้น hint: การปิดกั้นโดเมนจะไม่ป้องกันการสร้างรายการบัญชีในฐานข้อมูล แต่จะใช้วิธีการควบคุมที่เฉพาะเจาะจงกับบัญชีเหล่านั้นย้อนหลังและโดยอัตโนมัติ @@ -431,11 +431,11 @@ th: suspend: ระงับ title: การปิดกั้นโดเมนใหม่ obfuscate: ทำให้ชื่อโดเมนคลุมเครือ - obfuscate_hint: อาจมีผลทำให้ชื่อโดเมนสับสนบางส่วนในรายการหากเปิดใช้งานการโฆษณารายการข้อจำกัดของโดเมน + obfuscate_hint: ปิดบังชื่อโดเมนบางส่วนในรายการหากมีการเปิดใช้งานการประกาศรายการการจำกัดโดเมน private_comment: ความคิดเห็นส่วนตัว - private_comment_hint: แสดงความคิดเห็นเกี่ยวกับข้อจำกัดของโดเมนนี้สำหรับการใช้งานภายในโดยผู้ดูแล + private_comment_hint: ความคิดเห็นเกี่ยวกับการจำกัดโดเมนนี้สำหรับการใช้งานภายในโดยผู้ควบคุม public_comment: ความคิดเห็นสาธารณะ - public_comment_hint: แสดงความคิดเห็นเกี่ยวกับข้อจำกัดโดเมนนี้สำหรับบุคคลทั่วไป หากต้องการโฆษณารายการข้อจำกัดโดเมนเปิดใช้งานอยู่ + public_comment_hint: ความคิดเห็นเกี่ยวกับการจำกัดโดเมนนี้สำหรับสาธารณชนทั่วไป หากมีการเปิดใช้งานการประกาศรายการการจำกัดโดเมน reject_media: ปฏิเสธไฟล์สื่อ reject_media_hint: เอาไฟล์สื่อที่จัดเก็บไว้ในเซิร์ฟเวอร์ออกและปฏิเสธที่จะดาวน์โหลดไฟล์ใด ๆ ในอนาคต ไม่เกี่ยวข้องกับการระงับ reject_reports: ปฏิเสธรายงาน @@ -444,6 +444,8 @@ th: view: ดูการปิดกั้นโดเมน email_domain_blocks: add_new: เพิ่มใหม่ + attempts_over_week: + other: "%{count} ความพยายามในการลงทะเบียนในช่วงสัปดาห์ที่ผ่านมา" created_msg: ปิดกั้นโดเมนอีเมลสำเร็จ delete: ลบ dns: @@ -455,9 +457,11 @@ th: resolve: แปลงที่อยู่โดเมน title: ปิดกั้นโดเมนอีเมลใหม่ no_email_domain_block_selected: ไม่มีการเปลี่ยนแปลงการปิดกั้นโดเมนอีเมลเนื่องจากไม่มีการเลือก + resolved_dns_records_hint_html: ชื่อโดเมนจะแก้ไขเป็นโดเมน MX ต่อไปนี้ ซึ่งแต่ท้ายที่สุดแล้วคุณจะต้องรับผิดชอบในการยอมรับอีเมล การบล็อกโดเมน MX จะบล็อกการลงชื่อสมัครใช้จากที่อยู่อีเมลใดๆ ที่ใช้โดเมน MX เดียวกัน ถึงแม้ว่าชื่อโดเมนที่มองเห็นได้นั้นจะต่างกัน ระวังอย่าบล็อกผู้ให้บริการอีเมลรายใหญ่ resolved_through_html: แปลงที่อยู่ผ่าน %{domain} title: โดเมนอีเมลที่ปิดกั้นอยู่ follow_recommendations: + description_html: "จะทำตามคำแนะนำช่วยให้ผู้ใช้ใหม่ให้พบเนื้อหาที่น่าสนใจได้อย่างรวดเร็ว เมื่อผู้ใช้ไม่ได้โต้ตอบใดๆกับผู้อื่นมากพอที่จะสร้างคำแนะนำส่วนบุคคลให้กดติดตาม ขอแนะนำให้ใช้บัญชีเหล่านี้แทน พวกเขาจะคำนวณใหม่ทุกๆวันจากบัญชีต่างๆ ที่มีการมีส่วนร่วมล่าสุดและจำนวนผู้ติดตามในพื้นที่สูงสุดสำหรับภาษาที่คุณกำหนดไว้" language: สำหรับภาษา status: สถานะ suppress: ระงับคำแนะนำการติดตาม @@ -624,7 +628,22 @@ th: permissions_count: other: "%{count} สิทธิอนุญาต" privileges: + administrator: ผู้ดูแล + delete_user_data: ลบข้อมูลผู้ใช้ + invite_users: เชิญผู้ใช้ + manage_announcements: จัดการประกาศ + manage_appeals: จัดการการอุทธรณ์ + manage_blocks: จัดการการปิดกั้น + manage_custom_emojis: จัดการอีโมจิที่กำหนดเอง + manage_federation: จัดการการติดต่อกับภายนอก + manage_invites: จัดการคำเชิญ + manage_reports: จัดการรายงาน manage_roles: จัดการบทบาท + manage_rules: จัดการกฎ + manage_settings: จัดการการตั้งค่า + manage_user_access: จัดการการเข้าถึงของผู้ใช้ + manage_users: จัดการผู้ใช้ + view_devops_description: อนุญาตให้ผู้ใช้เข้าถึงแดชบอร์ด Sidekiq และ pgHero title: บทบาท rules: add_new: เพิ่มกฎ @@ -815,6 +834,8 @@ th: edit: แก้ไขปลายทาง enable: เปิดใช้งาน enabled: ใช้งานอยู่ + enabled_events: + other: "%{count} เหตุการณ์ที่เปิดใช้งาน" events: เหตุการณ์ status: สถานะ admin_mailer: diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 47a1ab29f31..12b371bf345 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -668,6 +668,7 @@ zh-CN: manage_custom_emojis: 管理自定义表情 manage_custom_emojis_description: 允许用户管理服务器上的自定义表情 manage_federation: 管理联邦 + manage_federation_description: 允许用户阻止或允许使用其他域切换并控制可交付性 manage_invites: 管理邀请 manage_invites_description: 允许用户浏览和停用邀请链接 manage_reports: 管理报告 @@ -678,6 +679,10 @@ zh-CN: manage_rules_description: 允许用户更改服务器规则 manage_settings: 管理设置 manage_settings_description: 允许用户更改站点设置 + manage_taxonomies: 管理分类法 + manage_taxonomies_description: 允许用户查看热门内容并更新标签设置 + manage_user_access: 管理访问 + manage_user_access_description: 允许用户禁用其他用户的双重身份验证, 更改他们的电子邮件地址, 并重置他们的密码 manage_users: 管理用户 manage_users_description: 允许用户查看其他用户信息并对他们执行审核操作 manage_webhooks: 管理网钩 @@ -686,6 +691,8 @@ zh-CN: view_audit_log_description: 允许用户在服务器上查看管理操作历史 view_dashboard: 查看仪表板 view_dashboard_description: 允许用户访问仪表盘和各种指标 + view_devops: 开发运维 + title: 角色 rules: add_new: 添加规则 delete: 删除 @@ -881,10 +888,20 @@ zh-CN: empty: 你尚未定义任何警告预设。 title: 管理预设警告 webhooks: + add_new: 端点 delete: 删除 + description_html: "webhook 使Mastodon能够推送 关于所选事件的实时通知 到您自己的应用程序。 所以您的应用程序可以自动触发反应 。" disable: 禁用 disabled: 已禁用 + empty: 您尚未配置任何Web 钩子端点。 enable: 启用 + enabled: 活跃 + enabled_events: + other: "%{count} 启用的事件" + events: 事件 + new: 新建网钩 + rotate_secret: 旋转密钥 + secret: 签名密钥 status: 状态 title: 网钩 webhook: 网钩 @@ -1144,10 +1161,14 @@ zh-CN: keywords: 关键词 title: 编辑过滤器 errors: + deprecated_api_multiple_keywords: 这些参数不能从此应用程序更改,因为它们应用于一个以上的过滤关键字。 使用较新的应用程序或网页界面。 invalid_context: 过滤器场景没有或无效 index: + contexts: 在 %{contexts} 中的过滤器 delete: 删除 empty: 你没有过滤器。 + expires_in: 在 %{distance} 后过期 + expires_on: "%{date} 后到期" keywords: other: "%{count} 关键词" title: 过滤器 From 991349e6e27f90b671c7892cfbfc74c5a1300f8b Mon Sep 17 00:00:00 2001 From: prplecake Date: Sat, 30 Jul 2022 20:00:00 -0500 Subject: [PATCH 150/646] [Glitch] Add ability to follow hashtags in web UI --- .../flavours/glitch/actions/tags.js | 92 +++++++++++++++++++ .../glitch/features/hashtag_timeline/index.js | 82 +++++++++++++---- .../flavours/glitch/reducers/index.js | 2 + .../flavours/glitch/reducers/tags.js | 25 +++++ 4 files changed, 185 insertions(+), 16 deletions(-) create mode 100644 app/javascript/flavours/glitch/actions/tags.js create mode 100644 app/javascript/flavours/glitch/reducers/tags.js diff --git a/app/javascript/flavours/glitch/actions/tags.js b/app/javascript/flavours/glitch/actions/tags.js new file mode 100644 index 00000000000..3933da8ba6b --- /dev/null +++ b/app/javascript/flavours/glitch/actions/tags.js @@ -0,0 +1,92 @@ +import api from 'flavours/glitch/util/api'; + +export const HASHTAG_FETCH_REQUEST = 'HASHTAG_FETCH_REQUEST'; +export const HASHTAG_FETCH_SUCCESS = 'HASHTAG_FETCH_SUCCESS'; +export const HASHTAG_FETCH_FAIL = 'HASHTAG_FETCH_FAIL'; + +export const HASHTAG_FOLLOW_REQUEST = 'HASHTAG_FOLLOW_REQUEST'; +export const HASHTAG_FOLLOW_SUCCESS = 'HASHTAG_FOLLOW_SUCCESS'; +export const HASHTAG_FOLLOW_FAIL = 'HASHTAG_FOLLOW_FAIL'; + +export const HASHTAG_UNFOLLOW_REQUEST = 'HASHTAG_UNFOLLOW_REQUEST'; +export const HASHTAG_UNFOLLOW_SUCCESS = 'HASHTAG_UNFOLLOW_SUCCESS'; +export const HASHTAG_UNFOLLOW_FAIL = 'HASHTAG_UNFOLLOW_FAIL'; + +export const fetchHashtag = name => (dispatch, getState) => { + dispatch(fetchHashtagRequest()); + + api(getState).get(`/api/v1/tags/${name}`).then(({ data }) => { + dispatch(fetchHashtagSuccess(name, data)); + }).catch(err => { + dispatch(fetchHashtagFail(err)); + }); +}; + +export const fetchHashtagRequest = () => ({ + type: HASHTAG_FETCH_REQUEST, +}); + +export const fetchHashtagSuccess = (name, tag) => ({ + type: HASHTAG_FETCH_SUCCESS, + name, + tag, +}); + +export const fetchHashtagFail = error => ({ + type: HASHTAG_FETCH_FAIL, + error, +}); + +export const followHashtag = name => (dispatch, getState) => { + dispatch(followHashtagRequest(name)); + + api(getState).post(`/api/v1/tags/${name}/follow`).then(({ data }) => { + dispatch(followHashtagSuccess(name, data)); + }).catch(err => { + dispatch(followHashtagFail(name, err)); + }); +}; + +export const followHashtagRequest = name => ({ + type: HASHTAG_FOLLOW_REQUEST, + name, +}); + +export const followHashtagSuccess = (name, tag) => ({ + type: HASHTAG_FOLLOW_SUCCESS, + name, + tag, +}); + +export const followHashtagFail = (name, error) => ({ + type: HASHTAG_FOLLOW_FAIL, + name, + error, +}); + +export const unfollowHashtag = name => (dispatch, getState) => { + dispatch(unfollowHashtagRequest(name)); + + api(getState).post(`/api/v1/tags/${name}/unfollow`).then(({ data }) => { + dispatch(unfollowHashtagSuccess(name, data)); + }).catch(err => { + dispatch(unfollowHashtagFail(name, err)); + }); +}; + +export const unfollowHashtagRequest = name => ({ + type: HASHTAG_FETCH_REQUEST, + name, +}); + +export const unfollowHashtagSuccess = (name, tag) => ({ + type: HASHTAG_FETCH_SUCCESS, + name, + tag, +}); + +export const unfollowHashtagFail = (name, error) => ({ + type: HASHTAG_FETCH_FAIL, + name, + error, +}); diff --git a/app/javascript/flavours/glitch/features/hashtag_timeline/index.js b/app/javascript/flavours/glitch/features/hashtag_timeline/index.js index 48e52e4cde1..87a52b269e4 100644 --- a/app/javascript/flavours/glitch/features/hashtag_timeline/index.js +++ b/app/javascript/flavours/glitch/features/hashtag_timeline/index.js @@ -4,18 +4,29 @@ import PropTypes from 'prop-types'; import StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container'; import Column from 'flavours/glitch/components/column'; import ColumnHeader from 'flavours/glitch/components/column_header'; +import ImmutablePropTypes from 'react-immutable-proptypes'; import ColumnSettingsContainer from './containers/column_settings_container'; import { expandHashtagTimeline, clearTimeline } from 'flavours/glitch/actions/timelines'; import { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns'; -import { FormattedMessage } from 'react-intl'; import { connectHashtagStream } from 'flavours/glitch/actions/streaming'; +import { injectIntl, FormattedMessage, defineMessages } from 'react-intl'; import { isEqual } from 'lodash'; +import { fetchHashtag, followHashtag, unfollowHashtag } from 'flavours/glitch/actions/tags'; +import Icon from 'flavours/glitch/components/icon'; +import classNames from 'classnames'; + +const messages = defineMessages({ + followHashtag: { id: 'hashtag.follow', defaultMessage: 'Follow hashtag' }, + unfollowHashtag: { id: 'hashtag.unfollow', defaultMessage: 'Unfollow hashtag' }, +}); const mapStateToProps = (state, props) => ({ hasUnread: state.getIn(['timelines', `hashtag:${props.params.id}${props.params.local ? ':local' : ''}`, 'unread']) > 0, + tag: state.getIn(['tags', props.params.id]), }); export default @connect(mapStateToProps) +@injectIntl class HashtagTimeline extends React.PureComponent { disconnects = []; @@ -25,7 +36,9 @@ class HashtagTimeline extends React.PureComponent { columnId: PropTypes.string, dispatch: PropTypes.func.isRequired, hasUnread: PropTypes.bool, + tag: ImmutablePropTypes.map, multiColumn: PropTypes.bool, + intl: PropTypes.object, }; handlePin = () => { @@ -39,7 +52,8 @@ class HashtagTimeline extends React.PureComponent { } title = () => { - let title = [this.props.params.id]; + const { id } = this.props.params; + const title = [id]; if (this.additionalFor('any')) { title.push(' ', ); @@ -95,23 +109,34 @@ class HashtagTimeline extends React.PureComponent { this.disconnects = []; } - componentDidMount () { + _unload () { + const { dispatch } = this.props; + const { id, local } = this.props.params; + + this._unsubscribe(); + dispatch(clearTimeline(`hashtag:${id}${local ? ':local' : ''}`)); + } + + _load() { const { dispatch } = this.props; const { id, tags, local } = this.props.params; this._subscribe(dispatch, id, tags, local); dispatch(expandHashtagTimeline(id, { tags, local })); + dispatch(fetchHashtag(id)); } - componentWillReceiveProps (nextProps) { - const { dispatch, params } = this.props; - const { id, tags, local } = nextProps.params; + componentDidMount () { + this._load(); + } + + componentDidUpdate (prevProps) { + const { params } = this.props; + const { id, tags, local } = prevProps.params; if (id !== params.id || !isEqual(tags, params.tags) || !isEqual(local, params.local)) { - this._unsubscribe(); - this._subscribe(dispatch, id, tags, local); - dispatch(clearTimeline(`hashtag:${id}${local ? ':local' : ''}`)); - dispatch(expandHashtagTimeline(id, { tags, local })); + this._unload(); + this._load(); } } @@ -124,17 +149,42 @@ class HashtagTimeline extends React.PureComponent { } handleLoadMore = maxId => { - const { id, tags, local } = this.props.params; - this.props.dispatch(expandHashtagTimeline(id, { maxId, tags, local })); + const { dispatch, params } = this.props; + const { id, tags, local } = params; + + dispatch(expandHashtagTimeline(id, { maxId, tags, local })); + } + + handleFollow = () => { + const { dispatch, params, tag } = this.props; + const { id } = params; + + if (tag.get('following')) { + dispatch(unfollowHashtag(id)); + } else { + dispatch(followHashtag(id)); + } } render () { - const { hasUnread, columnId, multiColumn } = this.props; - const { id, local } = this.props.params; + const { hasUnread, columnId, multiColumn, tag, intl } = this.props; + const { id, local } = this.props.params; const pinned = !!columnId; + let followButton; + + if (tag) { + const following = tag.get('following'); + + followButton = ( + + ); + } + return ( - + {columnId && } diff --git a/app/javascript/flavours/glitch/reducers/index.js b/app/javascript/flavours/glitch/reducers/index.js index b8aad9fad44..991b4aa7960 100644 --- a/app/javascript/flavours/glitch/reducers/index.js +++ b/app/javascript/flavours/glitch/reducers/index.js @@ -41,6 +41,7 @@ import account_notes from './account_notes'; import picture_in_picture from './picture_in_picture'; import accounts_map from './accounts_map'; import history from './history'; +import tags from './tags'; const reducers = { announcements, @@ -85,6 +86,7 @@ const reducers = { account_notes, picture_in_picture, history, + tags, }; export default combineReducers(reducers); diff --git a/app/javascript/flavours/glitch/reducers/tags.js b/app/javascript/flavours/glitch/reducers/tags.js new file mode 100644 index 00000000000..d24098e3941 --- /dev/null +++ b/app/javascript/flavours/glitch/reducers/tags.js @@ -0,0 +1,25 @@ +import { + HASHTAG_FETCH_SUCCESS, + HASHTAG_FOLLOW_REQUEST, + HASHTAG_FOLLOW_FAIL, + HASHTAG_UNFOLLOW_REQUEST, + HASHTAG_UNFOLLOW_FAIL, +} from 'mastodon/actions/tags'; +import { Map as ImmutableMap, fromJS } from 'immutable'; + +const initialState = ImmutableMap(); + +export default function tags(state = initialState, action) { + switch(action.type) { + case HASHTAG_FETCH_SUCCESS: + return state.set(action.name, fromJS(action.tag)); + case HASHTAG_FOLLOW_REQUEST: + case HASHTAG_UNFOLLOW_FAIL: + return state.setIn([action.name, 'following'], true); + case HASHTAG_FOLLOW_FAIL: + case HASHTAG_UNFOLLOW_REQUEST: + return state.setIn([action.name, 'following'], false); + default: + return state; + } +}; From 47bbd53eca6c91c631725e40f29c91daafaa13ea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 6 Aug 2022 15:14:17 +0900 Subject: [PATCH 151/646] Bump @babel/preset-env from 7.18.9 to 7.18.10 (#18915) Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.18.9 to 7.18.10. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.10/packages/babel-preset-env) --- updated-dependencies: - dependency-name: "@babel/preset-env" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 162 ++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 124 insertions(+), 40 deletions(-) diff --git a/package.json b/package.json index 3f777ee758d..f41ea3feb39 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@babel/plugin-proposal-decorators": "^7.18.9", "@babel/plugin-transform-react-inline-elements": "^7.18.6", "@babel/plugin-transform-runtime": "^7.18.9", - "@babel/preset-env": "^7.18.9", + "@babel/preset-env": "^7.18.10", "@babel/preset-react": "^7.18.6", "@babel/runtime": "^7.18.9", "@gamestdio/websocket": "^0.3.2", diff --git a/yarn.lock b/yarn.lock index d054daf02fc..6f07eef0418 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,7 +23,7 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.18.8": +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8": version "7.18.8" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== @@ -58,6 +58,15 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.0" +"@babel/generator@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.10.tgz#794f328bfabdcbaf0ebf9bf91b5b57b61fa77a2a" + integrity sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA== + dependencies: + "@babel/types" "^7.18.10" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + "@babel/generator@^7.18.9", "@babel/generator@^7.7.2": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.9.tgz#68337e9ea8044d6ddc690fb29acae39359cca0a5" @@ -90,7 +99,7 @@ "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.18.9": +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== @@ -135,6 +144,18 @@ resolve "^1.14.2" semver "^6.1.2" +"@babel/helper-define-polyfill-provider@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz#bd10d0aca18e8ce012755395b05a79f45eca5073" + integrity sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg== + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + "@babel/helper-environment-visitor@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz#b7eee2b5b9d70602e59d1a6cad7dd24de7ca6cd7" @@ -225,6 +246,16 @@ "@babel/helper-wrap-function" "^7.18.6" "@babel/types" "^7.18.6" +"@babel/helper-remap-async-to-generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + "@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz#1092e002feca980fbbb0bd4d51b74a65c6a500e6" @@ -257,6 +288,11 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + "@babel/helper-validator-identifier@^7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" @@ -282,6 +318,16 @@ "@babel/traverse" "^7.18.6" "@babel/types" "^7.18.6" +"@babel/helper-wrap-function@^7.18.9": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.18.10.tgz#a7fcd3ab9b1be4c9b52cf7d7fdc1e88c2ce93396" + integrity sha512-95NLBP59VWdfK2lyLKe6eTMq9xg+yWKzxzxbJ1wcYNi1Auz200+83fMDADjRxBvc2QQor5zja2yTQzXGhk2GtQ== + dependencies: + "@babel/helper-function-name" "^7.18.9" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.10" + "@babel/types" "^7.18.10" + "@babel/helpers@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" @@ -314,6 +360,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539" integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== +"@babel/parser@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.10.tgz#94b5f8522356e69e8277276adf67ed280c90ecc1" + integrity sha512-TYk3OA0HKL6qNryUayb5UUEhM/rkOQozIBEA5ITXh5DWrSp0TlUQXMyZmnWxG/DizSWBeeQ0Zbc5z8UGaaqoeg== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" @@ -330,14 +381,14 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" "@babel/plugin-proposal-optional-chaining" "^7.18.9" -"@babel/plugin-proposal-async-generator-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz#aedac81e6fc12bb643374656dd5f2605bf743d17" - integrity sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w== +"@babel/plugin-proposal-async-generator-functions@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz#85ea478c98b0095c3e4102bff3b67d306ed24952" + integrity sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew== dependencies: - "@babel/helper-environment-visitor" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-remap-async-to-generator" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-proposal-class-properties@^7.18.6": @@ -907,12 +958,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-unicode-escapes@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz#0d01fb7fb2243ae1c033f65f6e3b4be78db75f27" - integrity sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw== +"@babel/plugin-transform-unicode-escapes@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" + integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-unicode-regex@^7.18.6": version "7.18.6" @@ -922,10 +973,10 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/preset-env@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.9.tgz#9b3425140d724fbe590322017466580844c7eaff" - integrity sha512-75pt/q95cMIHWssYtyfjVlvI+QEZQThQbKvR9xH+F/Agtw/s4Wfc2V9Bwd/P39VtixB7oWxGdH4GteTTwYJWMg== +"@babel/preset-env@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.10.tgz#83b8dfe70d7eea1aae5a10635ab0a5fe60dfc0f4" + integrity sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA== dependencies: "@babel/compat-data" "^7.18.8" "@babel/helper-compilation-targets" "^7.18.9" @@ -933,7 +984,7 @@ "@babel/helper-validator-option" "^7.18.6" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-async-generator-functions" "^7.18.6" + "@babel/plugin-proposal-async-generator-functions" "^7.18.10" "@babel/plugin-proposal-class-properties" "^7.18.6" "@babel/plugin-proposal-class-static-block" "^7.18.6" "@babel/plugin-proposal-dynamic-import" "^7.18.6" @@ -993,13 +1044,13 @@ "@babel/plugin-transform-sticky-regex" "^7.18.6" "@babel/plugin-transform-template-literals" "^7.18.9" "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.18.6" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" "@babel/plugin-transform-unicode-regex" "^7.18.6" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.18.9" - babel-plugin-polyfill-corejs2 "^0.3.1" - babel-plugin-polyfill-corejs3 "^0.5.2" - babel-plugin-polyfill-regenerator "^0.3.1" + "@babel/types" "^7.18.10" + babel-plugin-polyfill-corejs2 "^0.3.2" + babel-plugin-polyfill-corejs3 "^0.5.3" + babel-plugin-polyfill-regenerator "^0.4.0" core-js-compat "^3.22.1" semver "^6.3.0" @@ -1048,6 +1099,15 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/template@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + "@babel/template@^7.18.6", "@babel/template@^7.3.3": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" @@ -1073,11 +1133,28 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f" - integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== +"@babel/traverse@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.10.tgz#37ad97d1cb00efa869b91dd5d1950f8a6cf0cb08" + integrity sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g== dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.10" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" + integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== + dependencies: + "@babel/helper-string-parser" "^7.18.10" "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" @@ -2554,21 +2631,21 @@ babel-plugin-macros@^3.0.1: cosmiconfig "^7.0.0" resolve "^1.19.0" -babel-plugin-polyfill-corejs2@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" - integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== +babel-plugin-polyfill-corejs2@^0.3.1, babel-plugin-polyfill-corejs2@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz#e4c31d4c89b56f3cf85b92558954c66b54bd972d" + integrity sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q== dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.1" + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.2" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" - integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== +babel-plugin-polyfill-corejs3@^0.5.2, babel-plugin-polyfill-corejs3@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7" + integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" + "@babel/helper-define-polyfill-provider" "^0.3.2" core-js-compat "^3.21.0" babel-plugin-polyfill-regenerator@^0.3.1: @@ -2578,6 +2655,13 @@ babel-plugin-polyfill-regenerator@^0.3.1: dependencies: "@babel/helper-define-polyfill-provider" "^0.3.1" +babel-plugin-polyfill-regenerator@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz#8f51809b6d5883e07e71548d75966ff7635527fe" + integrity sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.2" + babel-plugin-preval@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/babel-plugin-preval/-/babel-plugin-preval-5.1.0.tgz#6efb89bf6b97af592cd1400c6df49c0e9e6ab027" From 6897f70119fa5bc30da37450cf4f46bfab6eb0eb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 6 Aug 2022 15:14:41 +0900 Subject: [PATCH 152/646] Bump @babel/plugin-proposal-decorators from 7.18.9 to 7.18.10 (#18917) Bumps [@babel/plugin-proposal-decorators](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-proposal-decorators) from 7.18.9 to 7.18.10. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.10/packages/babel-plugin-proposal-decorators) --- updated-dependencies: - dependency-name: "@babel/plugin-proposal-decorators" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index f41ea3feb39..ab7586e3950 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "private": true, "dependencies": { "@babel/core": "^7.18.9", - "@babel/plugin-proposal-decorators": "^7.18.9", + "@babel/plugin-proposal-decorators": "^7.18.10", "@babel/plugin-transform-react-inline-elements": "^7.18.6", "@babel/plugin-transform-runtime": "^7.18.9", "@babel/preset-env": "^7.18.10", diff --git a/yarn.lock b/yarn.lock index 6f07eef0418..da9d335ae6a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -408,10 +408,10 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-decorators@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.9.tgz#d09d41ffc74af8499d2ac706ed0dbd5474711665" - integrity sha512-KD7zDNaD14CRpjQjVbV4EnH9lsKYlcpUrhZH37ei2IY+AlXrfAPy5pTmRUE4X6X1k8EsKXPraykxeaogqQvSGA== +"@babel/plugin-proposal-decorators@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.10.tgz#788650d01e518a8a722eb8b3055dd9d73ecb7a35" + integrity sha512-wdGTwWF5QtpTY/gbBtQLAiCnoxfD4qMbN87NYZle1dOZ9Os8Y6zXcKrIaOU8W+TIvFUWVGG9tUgNww3CjXRVVw== dependencies: "@babel/helper-create-class-features-plugin" "^7.18.9" "@babel/helper-plugin-utils" "^7.18.9" From d53152baa4c8f2be1d884cebc8776ee1468bbbdb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 6 Aug 2022 15:21:06 +0900 Subject: [PATCH 153/646] Bump @babel/plugin-transform-runtime from 7.18.9 to 7.18.10 (#18913) Bumps [@babel/plugin-transform-runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-runtime) from 7.18.9 to 7.18.10. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.10/packages/babel-plugin-transform-runtime) --- updated-dependencies: - dependency-name: "@babel/plugin-transform-runtime" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 75 +++++++++++++++++++--------------------------------- 2 files changed, 28 insertions(+), 49 deletions(-) diff --git a/package.json b/package.json index ab7586e3950..945774f9a4e 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@babel/core": "^7.18.9", "@babel/plugin-proposal-decorators": "^7.18.10", "@babel/plugin-transform-react-inline-elements": "^7.18.6", - "@babel/plugin-transform-runtime": "^7.18.9", + "@babel/plugin-transform-runtime": "^7.18.10", "@babel/preset-env": "^7.18.10", "@babel/preset-react": "^7.18.6", "@babel/runtime": "^7.18.9", diff --git a/yarn.lock b/yarn.lock index da9d335ae6a..097f5825446 100644 --- a/yarn.lock +++ b/yarn.lock @@ -99,7 +99,7 @@ "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9": +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== @@ -130,20 +130,6 @@ "@babel/helper-annotate-as-pure" "^7.18.6" regexpu-core "^5.1.0" -"@babel/helper-define-polyfill-provider@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" - integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - "@babel/helper-define-polyfill-provider@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz#bd10d0aca18e8ce012755395b05a79f45eca5073" @@ -231,7 +217,7 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== @@ -910,16 +896,16 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-runtime@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.9.tgz#d9e4b1b25719307bfafbf43065ed7fb3a83adb8f" - integrity sha512-wS8uJwBt7/b/mzE13ktsJdmS4JP/j7PQSaADtnb4I2wL0zK51MQ0pmF8/Jy0wUIS96fr+fXT6S/ifiPXnvrlSg== +"@babel/plugin-transform-runtime@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz#37d14d1fa810a368fd635d4d1476c0154144a96f" + integrity sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ== dependencies: "@babel/helper-module-imports" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.9" - babel-plugin-polyfill-corejs2 "^0.3.1" - babel-plugin-polyfill-corejs3 "^0.5.2" - babel-plugin-polyfill-regenerator "^0.3.1" + babel-plugin-polyfill-corejs2 "^0.3.2" + babel-plugin-polyfill-corejs3 "^0.5.3" + babel-plugin-polyfill-regenerator "^0.4.0" semver "^6.3.0" "@babel/plugin-transform-shorthand-properties@^7.18.6": @@ -1117,22 +1103,6 @@ "@babel/parser" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98" - integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.9" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.18.9" - "@babel/types" "^7.18.9" - debug "^4.1.0" - globals "^11.1.0" - "@babel/traverse@^7.18.10": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.10.tgz#37ad97d1cb00efa869b91dd5d1950f8a6cf0cb08" @@ -1149,6 +1119,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98" + integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.9" + "@babel/types" "^7.18.9" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" @@ -2631,7 +2617,7 @@ babel-plugin-macros@^3.0.1: cosmiconfig "^7.0.0" resolve "^1.19.0" -babel-plugin-polyfill-corejs2@^0.3.1, babel-plugin-polyfill-corejs2@^0.3.2: +babel-plugin-polyfill-corejs2@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz#e4c31d4c89b56f3cf85b92558954c66b54bd972d" integrity sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q== @@ -2640,7 +2626,7 @@ babel-plugin-polyfill-corejs2@^0.3.1, babel-plugin-polyfill-corejs2@^0.3.2: "@babel/helper-define-polyfill-provider" "^0.3.2" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.2, babel-plugin-polyfill-corejs3@^0.5.3: +babel-plugin-polyfill-corejs3@^0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7" integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== @@ -2648,13 +2634,6 @@ babel-plugin-polyfill-corejs3@^0.5.2, babel-plugin-polyfill-corejs3@^0.5.3: "@babel/helper-define-polyfill-provider" "^0.3.2" core-js-compat "^3.21.0" -babel-plugin-polyfill-regenerator@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" - integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - babel-plugin-polyfill-regenerator@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz#8f51809b6d5883e07e71548d75966ff7635527fe" From c23a0a3ebc6fcbcc930a44711f2fc26c97452123 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 6 Aug 2022 15:31:15 +0900 Subject: [PATCH 154/646] Bump @babel/core from 7.18.9 to 7.18.10 (#18914) Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.18.9 to 7.18.10. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.10/packages/babel-core) --- updated-dependencies: - dependency-name: "@babel/core" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 65 +++++++++++----------------------------------------- 2 files changed, 14 insertions(+), 53 deletions(-) diff --git a/package.json b/package.json index 945774f9a4e..90f7af38431 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ }, "private": true, "dependencies": { - "@babel/core": "^7.18.9", + "@babel/core": "^7.18.10", "@babel/plugin-proposal-decorators": "^7.18.10", "@babel/plugin-transform-react-inline-elements": "^7.18.6", "@babel/plugin-transform-runtime": "^7.18.10", diff --git a/yarn.lock b/yarn.lock index 097f5825446..1369a9b3266 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28,21 +28,21 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.9", "@babel/core@^7.7.2": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.9.tgz#805461f967c77ff46c74ca0460ccf4fe933ddd59" - integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.10", "@babel/core@^7.7.2": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" + integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.9" + "@babel/generator" "^7.18.10" "@babel/helper-compilation-targets" "^7.18.9" "@babel/helper-module-transforms" "^7.18.9" "@babel/helpers" "^7.18.9" - "@babel/parser" "^7.18.9" - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" + "@babel/parser" "^7.18.10" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.10" + "@babel/types" "^7.18.10" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -58,7 +58,7 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.0" -"@babel/generator@^7.18.10": +"@babel/generator@^7.18.10", "@babel/generator@^7.7.2": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.10.tgz#794f328bfabdcbaf0ebf9bf91b5b57b61fa77a2a" integrity sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA== @@ -67,15 +67,6 @@ "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" -"@babel/generator@^7.18.9", "@babel/generator@^7.7.2": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.9.tgz#68337e9ea8044d6ddc690fb29acae39359cca0a5" - integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== - dependencies: - "@babel/types" "^7.18.9" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" @@ -341,12 +332,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.6", "@babel/parser@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539" - integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== - -"@babel/parser@^7.18.10": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.10.tgz#94b5f8522356e69e8277276adf67ed280c90ecc1" integrity sha512-TYk3OA0HKL6qNryUayb5UUEhM/rkOQozIBEA5ITXh5DWrSp0TlUQXMyZmnWxG/DizSWBeeQ0Zbc5z8UGaaqoeg== @@ -1085,7 +1071,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.18.10": +"@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.3.3": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== @@ -1094,16 +1080,7 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/template@^7.18.6", "@babel/template@^7.3.3": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" - integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.6" - "@babel/types" "^7.18.6" - -"@babel/traverse@^7.18.10": +"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.10.tgz#37ad97d1cb00efa869b91dd5d1950f8a6cf0cb08" integrity sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g== @@ -1119,22 +1096,6 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98" - integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.9" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.18.9" - "@babel/types" "^7.18.9" - debug "^4.1.0" - globals "^11.1.0" - "@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" From 2aba0a98f887c510333661de6fca430be3b79dab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 6 Aug 2022 15:31:47 +0900 Subject: [PATCH 155/646] Bump sidekiq-unique-jobs from 7.1.26 to 7.1.27 (#18912) Bumps [sidekiq-unique-jobs](https://github.com/mhenrixon/sidekiq-unique-jobs) from 7.1.26 to 7.1.27. - [Release notes](https://github.com/mhenrixon/sidekiq-unique-jobs/releases) - [Changelog](https://github.com/mhenrixon/sidekiq-unique-jobs/blob/main/CHANGELOG.md) - [Commits](https://github.com/mhenrixon/sidekiq-unique-jobs/compare/v7.1.26...v7.1.27) --- updated-dependencies: - dependency-name: sidekiq-unique-jobs dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 6130ea07fc7..250f857cdac 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -612,7 +612,7 @@ GEM rufus-scheduler (~> 3.2) sidekiq (>= 4) tilt (>= 1.4.0) - sidekiq-unique-jobs (7.1.26) + sidekiq-unique-jobs (7.1.27) brpoplpush-redis_script (> 0.1.1, <= 2.0.0) concurrent-ruby (~> 1.0, >= 1.0.5) sidekiq (>= 5.0, < 8.0) From 79ccc1575fba826b82dc234e74c38d9bd4e938dc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 6 Aug 2022 15:34:00 +0900 Subject: [PATCH 156/646] Bump pkg-config from 1.4.7 to 1.4.9 (#18916) Bumps [pkg-config](https://github.com/ruby-gnome/pkg-config) from 1.4.7 to 1.4.9. - [Release notes](https://github.com/ruby-gnome/pkg-config/releases) - [Changelog](https://github.com/ruby-gnome/pkg-config/blob/master/NEWS) - [Commits](https://github.com/ruby-gnome/pkg-config/compare/1.4.7...1.4.9) --- updated-dependencies: - dependency-name: pkg-config dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 250f857cdac..66805010e82 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -450,7 +450,7 @@ GEM pg (1.4.2) pghero (2.8.3) activerecord (>= 5) - pkg-config (1.4.7) + pkg-config (1.4.9) posix-spawn (0.3.15) premailer (1.14.2) addressable From 47066bb26a16e0d3913a5035364afc19b1962fde Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 6 Aug 2022 15:37:04 +0900 Subject: [PATCH 157/646] Bump oj from 3.13.18 to 3.13.19 (#18911) Bumps [oj](https://github.com/ohler55/oj) from 3.13.18 to 3.13.19. - [Release notes](https://github.com/ohler55/oj/releases) - [Changelog](https://github.com/ohler55/oj/blob/develop/CHANGELOG.md) - [Commits](https://github.com/ohler55/oj/compare/v3.13.18...v3.13.19) --- updated-dependencies: - dependency-name: oj dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 66805010e82..dcec4e72d97 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -413,7 +413,7 @@ GEM concurrent-ruby (~> 1.0, >= 1.0.2) sidekiq (>= 3.5) statsd-ruby (~> 1.4, >= 1.4.0) - oj (3.13.18) + oj (3.13.19) omniauth (1.9.1) hashie (>= 3.4.6) rack (>= 1.6.2, < 3) From e34135270023f0ca1433595160cb385481071356 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 6 Aug 2022 15:46:33 +0900 Subject: [PATCH 158/646] Bump json-ld from 3.2.0 to 3.2.2 (#18932) Bumps [json-ld](https://github.com/ruby-rdf/json-ld) from 3.2.0 to 3.2.2. - [Release notes](https://github.com/ruby-rdf/json-ld/releases) - [Commits](https://github.com/ruby-rdf/json-ld/compare/3.2.0...3.2.2) --- updated-dependencies: - dependency-name: json-ld dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index dcec4e72d97..f3e99545317 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -327,7 +327,7 @@ GEM activesupport (>= 4.2) aes_key_wrap bindata - json-ld (3.2.0) + json-ld (3.2.2) htmlentities (~> 4.3) json-canonicalization (~> 0.3) link_header (~> 0.0, >= 0.0.8) @@ -527,7 +527,7 @@ GEM thor (~> 1.0) rainbow (3.1.1) rake (13.0.6) - rdf (3.2.3) + rdf (3.2.8) link_header (~> 0.0, >= 0.0.8) rdf-normalize (0.5.0) rdf (~> 3.2) From 4e830af31c4dee239068b31295c149a4094c4548 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 6 Aug 2022 15:47:17 +0900 Subject: [PATCH 159/646] Bump xorcist from 1.1.2 to 1.1.3 (#18936) Bumps [xorcist](https://github.com/fny/xorcist) from 1.1.2 to 1.1.3. - [Release notes](https://github.com/fny/xorcist/releases) - [Commits](https://github.com/fny/xorcist/compare/v1.1.2...v1.1.3) --- updated-dependencies: - dependency-name: xorcist dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index f3e99545317..49aa15650b3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -717,7 +717,7 @@ GEM websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) wisper (2.0.1) - xorcist (1.1.2) + xorcist (1.1.3) xpath (3.2.0) nokogiri (~> 1.8) zeitwerk (2.6.0) From 0a2433948bac34af277c21b474e567475bf995df Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 6 Aug 2022 16:01:40 +0900 Subject: [PATCH 160/646] Bump sidekiq from 6.5.1 to 6.5.3 (#18934) Bumps [sidekiq](https://github.com/mperham/sidekiq) from 6.5.1 to 6.5.3. - [Release notes](https://github.com/mperham/sidekiq/releases) - [Changelog](https://github.com/mperham/sidekiq/blob/main/Changes.md) - [Commits](https://github.com/mperham/sidekiq/compare/v6.5.1...v6.5.3) --- updated-dependencies: - dependency-name: sidekiq dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 49aa15650b3..486c772d376 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -601,10 +601,10 @@ GEM railties (>= 4.0.0) securecompare (1.0.0) semantic_range (3.0.0) - sidekiq (6.5.1) + sidekiq (6.5.3) connection_pool (>= 2.2.2) rack (~> 2.0) - redis (>= 4.2.0) + redis (>= 4.5.0) sidekiq-bulk (0.2.0) sidekiq sidekiq-scheduler (4.0.2) From 041f87471f1058a06a1c454a13e31bbd38a96a33 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 6 Aug 2022 16:28:09 +0900 Subject: [PATCH 161/646] Bump webmock from 3.14.0 to 3.17.0 (#18935) Bumps [webmock](https://github.com/bblimke/webmock) from 3.14.0 to 3.17.0. - [Release notes](https://github.com/bblimke/webmock/releases) - [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md) - [Commits](https://github.com/bblimke/webmock/compare/v3.14.0...v3.17.0) --- updated-dependencies: - dependency-name: webmock dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 1690f92df32..d21459fcccb 100644 --- a/Gemfile +++ b/Gemfile @@ -119,7 +119,7 @@ group :test do gem 'rails-controller-testing', '~> 1.0' gem 'rspec-sidekiq', '~> 3.1' gem 'simplecov', '~> 0.21', require: false - gem 'webmock', '~> 3.14' + gem 'webmock', '~> 3.17' gem 'rspec_junit_formatter', '~> 0.5' end diff --git a/Gemfile.lock b/Gemfile.lock index 486c772d376..03c0f297b67 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -701,7 +701,7 @@ GEM webfinger (1.2.0) activesupport httpclient (>= 2.4) - webmock (3.14.0) + webmock (3.17.0) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) @@ -844,7 +844,7 @@ DEPENDENCIES twitter-text (~> 3.1.0) tzinfo-data (~> 1.2022) webauthn (~> 3.0.0.alpha1) - webmock (~> 3.14) + webmock (~> 3.17) webpacker (~> 5.4) webpush (~> 0.3) xorcist (~> 1.1) From 7ccf7a73f1c47a8c03712c39f7c591e837cf6d08 Mon Sep 17 00:00:00 2001 From: Alex Nordlund Date: Wed, 10 Aug 2022 17:12:58 +0200 Subject: [PATCH 162/646] Fix broken dependencies in helm chart and allow using existing secrets in the chart (#18941) * Add ability to specify an existing Secret (#18139) Closes #18139 * Allow using secrets with external postgres * Upgrade CronJob to batch/v1 * Allow using redis.auth.existingSecret * Helmignore mastodon-*.tgz for easy local development * Upgrade helm dependencies * Upgrade postgresql to 11 * Allow putting SMTP password into a secret * Add optional login to SMTP secret This to allow setting LOGIN either in values.yaml or in the secret. * Switch to bitnami charts full archive This prevents older versions from disappearing, see https://github.com/bitnami/charts/issues/10539 for full context. Co-authored-by: Ted Tramonte --- chart/.helmignore | 1 + chart/Chart.lock | 16 ++-- chart/Chart.yaml | 14 +-- chart/templates/_helpers.tpl | 50 +++++++++++ chart/templates/configmap-env.yaml | 6 +- chart/templates/cronjob-media-remove.yaml | 14 ++- chart/templates/deployment-sidekiq.yaml | 25 ++++-- chart/templates/deployment-streaming.yaml | 10 +-- chart/templates/deployment-web.yaml | 12 +-- chart/templates/job-assets-precompile.yaml | 12 +-- chart/templates/job-chewy-upgrade.yaml | 12 +-- chart/templates/job-create-admin.yaml | 12 +-- chart/templates/job-db-migrate.yaml | 12 +-- chart/templates/secrets.yaml | 12 ++- chart/values.yaml | 100 ++++++++++++--------- 15 files changed, 183 insertions(+), 125 deletions(-) diff --git a/chart/.helmignore b/chart/.helmignore index 0e8a0eb36f4..886747ed0b4 100644 --- a/chart/.helmignore +++ b/chart/.helmignore @@ -21,3 +21,4 @@ .idea/ *.tmproj .vscode/ +mastodon-*.tgz diff --git a/chart/Chart.lock b/chart/Chart.lock index d74e7570ce0..961e4fa80fe 100644 --- a/chart/Chart.lock +++ b/chart/Chart.lock @@ -1,12 +1,12 @@ dependencies: - name: elasticsearch - repository: https://charts.bitnami.com/bitnami - version: 15.10.3 + repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami + version: 19.0.1 - name: postgresql - repository: https://charts.bitnami.com/bitnami - version: 8.10.14 + repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami + version: 11.1.3 - name: redis - repository: https://charts.bitnami.com/bitnami - version: 10.9.0 -digest: sha256:f5c57108f7768fd16391c1a050991c7809f84a640cca308d7d24d87379d04000 -generated: "2021-08-05T08:01:01.457727804Z" + repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami + version: 16.13.2 +digest: sha256:17ea58a3264aa22faff18215c4269f47dabae956d0df273c684972f356416193 +generated: "2022-08-08T21:44:18.0195364+02:00" diff --git a/chart/Chart.yaml b/chart/Chart.yaml index 1687132acb0..b1138b594f6 100644 --- a/chart/Chart.yaml +++ b/chart/Chart.yaml @@ -15,7 +15,7 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 1.2.1 +version: 2.0.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to @@ -24,13 +24,13 @@ appVersion: 3.3.0 dependencies: - name: elasticsearch - version: 15.10.3 - repository: https://charts.bitnami.com/bitnami + version: 19.0.1 + repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami condition: elasticsearch.enabled - name: postgresql - version: 8.10.14 - repository: https://charts.bitnami.com/bitnami + version: 11.1.3 + repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami condition: postgresql.enabled - name: redis - version: 10.9.0 - repository: https://charts.bitnami.com/bitnami + version: 16.13.2 + repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami diff --git a/chart/templates/_helpers.tpl b/chart/templates/_helpers.tpl index 5814a31203f..71bb002ef2b 100644 --- a/chart/templates/_helpers.tpl +++ b/chart/templates/_helpers.tpl @@ -77,3 +77,53 @@ We truncate at 63 chars because some Kubernetes name fields are limited to this {{- define "mastodon.postgresql.fullname" -}} {{- printf "%s-%s" .Release.Name "postgresql" | trunc 63 | trimSuffix "-" -}} {{- end -}} + +{{/* +Get the mastodon secret. +*/}} +{{- define "mastodon.secretName" -}} +{{- if .Values.mastodon.secrets.existingSecret }} + {{- printf "%s" (tpl .Values.mastodon.secrets.existingSecret $) -}} +{{- else -}} + {{- printf "%s" (include "common.names.fullname" .) -}} +{{- end -}} +{{- end -}} + +{{/* +Get the postgresql secret. +*/}} +{{- define "mastodon.postgresql.secretName" -}} +{{- if (and (or .Values.postgresql.enabled .Values.postgresql.postgresqlHostname) .Values.postgresql.auth.existingSecret) }} + {{- printf "%s" (tpl .Values.postgresql.auth.existingSecret $) -}} +{{- else if .Values.postgresql.enabled -}} + {{- printf "%s-postgresql" (tpl .Release.Name $) -}} +{{- else -}} + {{- printf "%s" (include "common.names.fullname" .) -}} +{{- end -}} +{{- end -}} + +{{/* +Get the redis secret. +*/}} +{{- define "mastodon.redis.secretName" -}} +{{- if .Values.redis.auth.existingSecret }} + {{- printf "%s" (tpl .Values.redis.auth.existingSecret $) -}} +{{- else if .Values.redis.existingSecret }} + {{- printf "%s" (tpl .Values.redis.existingSecret $) -}} +{{- else -}} + {{- printf "%s-redis" (tpl .Release.Name $) -}} +{{- end -}} +{{- end -}} + +{{/* +Return true if a mastodon secret object should be created +*/}} +{{- define "mastodon.createSecret" -}} +{{- if (or + (and .Values.mastodon.s3.enabled (not .Values.mastodon.s3.existingSecret)) + (not .Values.mastodon.secrets.existingSecret ) + (and (not .Values.postgresql.enabled) (not .Values.postgresql.auth.existingSecret)) + ) -}} + {{- true -}} +{{- end -}} +{{- end -}} diff --git a/chart/templates/configmap-env.yaml b/chart/templates/configmap-env.yaml index aa242684ff0..f988477d91a 100644 --- a/chart/templates/configmap-env.yaml +++ b/chart/templates/configmap-env.yaml @@ -10,14 +10,14 @@ data: {{- else }} DB_HOST: {{ .Values.postgresql.postgresqlHostname }} {{- end }} - DB_NAME: {{ .Values.postgresql.postgresqlDatabase }} + DB_NAME: {{ .Values.postgresql.auth.database }} DB_POOL: {{ .Values.mastodon.sidekiq.concurrency | quote }} DB_PORT: "5432" - DB_USER: {{ .Values.postgresql.postgresqlUsername }} + DB_USER: {{ .Values.postgresql.auth.username }} DEFAULT_LOCALE: {{ .Values.mastodon.locale }} {{- if .Values.elasticsearch.enabled }} ES_ENABLED: "true" - ES_HOST: {{ template "mastodon.elasticsearch.fullname" . }}-master + ES_HOST: {{ template "mastodon.elasticsearch.fullname" . }}-master-hl ES_PORT: "9200" {{- end }} LOCAL_DOMAIN: {{ .Values.mastodon.local_domain }} diff --git a/chart/templates/cronjob-media-remove.yaml b/chart/templates/cronjob-media-remove.yaml index 3d6e25cc68b..726e100cf8d 100644 --- a/chart/templates/cronjob-media-remove.yaml +++ b/chart/templates/cronjob-media-remove.yaml @@ -1,5 +1,5 @@ {{ if .Values.mastodon.cron.removeMedia.enabled }} -apiVersion: batch/v1beta1 +apiVersion: batch/v1 kind: CronJob metadata: name: {{ include "mastodon.fullname" . }}-media-remove @@ -49,21 +49,17 @@ spec: - configMapRef: name: {{ include "mastodon.fullname" . }}-env - secretRef: - name: {{ template "mastodon.fullname" . }} + name: {{ template "mastodon.secretName" . }} env: - name: "DB_PASS" valueFrom: secretKeyRef: - {{- if .Values.postgresql.enabled }} - name: {{ .Release.Name }}-postgresql - {{- else }} - name: {{ template "mastodon.fullname" . }} - {{- end }} - key: postgresql-password + name: {{ template "mastodon.postgresql.secretName" . }} + key: password - name: "REDIS_PASSWORD" valueFrom: secretKeyRef: - name: {{ .Release.Name }}-redis + name: {{ template "mastodon.redis.secretName" . }} key: redis-password - name: "PORT" value: {{ .Values.mastodon.web.port | quote }} diff --git a/chart/templates/deployment-sidekiq.yaml b/chart/templates/deployment-sidekiq.yaml index baf6c2b2dde..f1809bd8582 100644 --- a/chart/templates/deployment-sidekiq.yaml +++ b/chart/templates/deployment-sidekiq.yaml @@ -70,22 +70,31 @@ spec: - configMapRef: name: {{ include "mastodon.fullname" . }}-env - secretRef: - name: {{ template "mastodon.fullname" . }} + name: {{ template "mastodon.secretName" . }} env: - name: "DB_PASS" valueFrom: secretKeyRef: - {{- if .Values.postgresql.enabled }} - name: {{ .Release.Name }}-postgresql - {{- else }} - name: {{ template "mastodon.fullname" . }} - {{- end }} - key: postgresql-password + name: {{ template "mastodon.postgresql.secretName" . }} + key: password - name: "REDIS_PASSWORD" valueFrom: secretKeyRef: - name: {{ .Release.Name }}-redis + name: {{ template "mastodon.redis.secretName" . }} key: redis-password + {{- if .Values.mastodon.smtp.existingSecret }} + - name: "SMTP_LOGIN" + valueFrom: + secretKeyRef: + name: {{ .Values.mastodon.smtp.existingSecret }} + key: login + optional: true + - name: "SMTP_PASSWORD" + valueFrom: + secretKeyRef: + name: {{ .Values.mastodon.smtp.existingSecret }} + key: password + {{- end -}} {{- if (not .Values.mastodon.s3.enabled) }} volumeMounts: - name: assets diff --git a/chart/templates/deployment-streaming.yaml b/chart/templates/deployment-streaming.yaml index b332b686ac3..12203a530bb 100644 --- a/chart/templates/deployment-streaming.yaml +++ b/chart/templates/deployment-streaming.yaml @@ -43,16 +43,12 @@ spec: - name: "DB_PASS" valueFrom: secretKeyRef: - {{- if .Values.postgresql.enabled }} - name: {{ .Release.Name }}-postgresql - {{- else }} - name: {{ template "mastodon.fullname" . }} - {{- end }} - key: postgresql-password + name: {{ template "mastodon.postgresql.secretName" . }} + key: password - name: "REDIS_PASSWORD" valueFrom: secretKeyRef: - name: {{ .Release.Name }}-redis + name: {{ template "mastodon.redis.secretName" . }} key: redis-password - name: "PORT" value: {{ .Values.mastodon.streaming.port | quote }} diff --git a/chart/templates/deployment-web.yaml b/chart/templates/deployment-web.yaml index 8b8bb4f29cb..5e22ca53932 100644 --- a/chart/templates/deployment-web.yaml +++ b/chart/templates/deployment-web.yaml @@ -56,21 +56,17 @@ spec: - configMapRef: name: {{ include "mastodon.fullname" . }}-env - secretRef: - name: {{ template "mastodon.fullname" . }} + name: {{ template "mastodon.secretName" . }} env: - name: "DB_PASS" valueFrom: secretKeyRef: - {{- if .Values.postgresql.enabled }} - name: {{ .Release.Name }}-postgresql - {{- else }} - name: {{ template "mastodon.fullname" . }} - {{- end }} - key: postgresql-password + name: {{ template "mastodon.postgresql.secretName" . }} + key: password - name: "REDIS_PASSWORD" valueFrom: secretKeyRef: - name: {{ .Release.Name }}-redis + name: {{ template "mastodon.redis.secretName" . }} key: redis-password - name: "PORT" value: {{ .Values.mastodon.web.port | quote }} diff --git a/chart/templates/job-assets-precompile.yaml b/chart/templates/job-assets-precompile.yaml index 825a7e9160d..4aa8d1407c4 100644 --- a/chart/templates/job-assets-precompile.yaml +++ b/chart/templates/job-assets-precompile.yaml @@ -50,21 +50,17 @@ spec: - configMapRef: name: {{ include "mastodon.fullname" . }}-env - secretRef: - name: {{ template "mastodon.fullname" . }} + name: {{ template "mastodon.secretName" . }} env: - name: "DB_PASS" valueFrom: secretKeyRef: - {{- if .Values.postgresql.enabled }} - name: {{ .Release.Name }}-postgresql - {{- else }} - name: {{ template "mastodon.fullname" . }} - {{- end }} - key: postgresql-password + name: {{ template "mastodon.postgresql.secretName" . }} + key: password - name: "REDIS_PASSWORD" valueFrom: secretKeyRef: - name: {{ .Release.Name }}-redis + name: {{ template "mastodon.redis.secretName" . }} key: redis-password - name: "PORT" value: {{ .Values.mastodon.web.port | quote }} diff --git a/chart/templates/job-chewy-upgrade.yaml b/chart/templates/job-chewy-upgrade.yaml index cc68a3385af..16b4f75a7db 100644 --- a/chart/templates/job-chewy-upgrade.yaml +++ b/chart/templates/job-chewy-upgrade.yaml @@ -51,21 +51,17 @@ spec: - configMapRef: name: {{ include "mastodon.fullname" . }}-env - secretRef: - name: {{ template "mastodon.fullname" . }} + name: {{ template "mastodon.secretName" . }} env: - name: "DB_PASS" valueFrom: secretKeyRef: - {{- if .Values.postgresql.enabled }} - name: {{ .Release.Name }}-postgresql - {{- else }} - name: {{ template "mastodon.fullname" . }} - {{- end }} - key: postgresql-password + name: {{ template "mastodon.postgresql.secretName" . }} + key: password - name: "REDIS_PASSWORD" valueFrom: secretKeyRef: - name: {{ .Release.Name }}-redis + name: {{ template "mastodon.redis.secretName" . }} key: redis-password - name: "PORT" value: {{ .Values.mastodon.web.port | quote }} diff --git a/chart/templates/job-create-admin.yaml b/chart/templates/job-create-admin.yaml index ffb8bb05906..486c0c35726 100644 --- a/chart/templates/job-create-admin.yaml +++ b/chart/templates/job-create-admin.yaml @@ -56,21 +56,17 @@ spec: - configMapRef: name: {{ include "mastodon.fullname" . }}-env - secretRef: - name: {{ template "mastodon.fullname" . }} + name: {{ template "mastodon.secretName" . }} env: - name: "DB_PASS" valueFrom: secretKeyRef: - {{- if .Values.postgresql.enabled }} - name: {{ .Release.Name }}-postgresql - {{- else }} - name: {{ template "mastodon.fullname" . }} - {{- end }} - key: postgresql-password + name: {{ template "mastodon.postgresql.secretName" . }} + key: password - name: "REDIS_PASSWORD" valueFrom: secretKeyRef: - name: {{ .Release.Name }}-redis + name: {{ template "mastodon.redis.secretName" . }} key: redis-password - name: "PORT" value: {{ .Values.mastodon.web.port | quote }} diff --git a/chart/templates/job-db-migrate.yaml b/chart/templates/job-db-migrate.yaml index 72f910e3b22..41ece64a2a1 100644 --- a/chart/templates/job-db-migrate.yaml +++ b/chart/templates/job-db-migrate.yaml @@ -50,21 +50,17 @@ spec: - configMapRef: name: {{ include "mastodon.fullname" . }}-env - secretRef: - name: {{ template "mastodon.fullname" . }} + name: {{ template "mastodon.secretName" . }} env: - name: "DB_PASS" valueFrom: secretKeyRef: - {{- if .Values.postgresql.enabled }} - name: {{ .Release.Name }}-postgresql - {{- else }} - name: {{ template "mastodon.fullname" . }} - {{- end }} - key: postgresql-password + name: {{ template "mastodon.postgresql.secretName" . }} + key: password - name: "REDIS_PASSWORD" valueFrom: secretKeyRef: - name: {{ .Release.Name }}-redis + name: {{ template "mastodon.redis.secretName" . }} key: redis-password - name: "PORT" value: {{ .Values.mastodon.web.port | quote }} diff --git a/chart/templates/secrets.yaml b/chart/templates/secrets.yaml index 0452a8ae1ec..135d5b61a4f 100644 --- a/chart/templates/secrets.yaml +++ b/chart/templates/secrets.yaml @@ -1,3 +1,4 @@ +{{- if (include "mastodon.createSecret" .) }} apiVersion: v1 kind: Secret metadata: @@ -7,9 +8,12 @@ metadata: type: Opaque data: {{- if .Values.mastodon.s3.enabled }} + {{- if not .Values.mastodon.s3.existingSecret }} AWS_ACCESS_KEY_ID: "{{ .Values.mastodon.s3.access_key | b64enc }}" AWS_SECRET_ACCESS_KEY: "{{ .Values.mastodon.s3.access_secret | b64enc }}" {{- end }} + {{- end }} + {{- if not .Values.mastodon.secrets.existingSecret }} {{- if not (empty .Values.mastodon.secrets.secret_key_base) }} SECRET_KEY_BASE: "{{ .Values.mastodon.secrets.secret_key_base | b64enc }}" {{- else }} @@ -30,6 +34,10 @@ data: {{- else }} VAPID_PUBLIC_KEY: {{ required "vapid.public_key is required" .Values.mastodon.secrets.vapid.public_key }} {{- end }} - {{- if not .Values.postgresql.enabled }} - postgresql-password: "{{ .Values.postgresql.postgresqlPassword | b64enc }}" {{- end }} + {{- if not .Values.postgresql.enabled }} + {{- if not .Values.postgresql.auth.existingSecret }} + postgresql-password: "{{ .Values.postgresql.auth.password | b64enc }}" + {{- end }} + {{- end }} +{{- end -}} diff --git a/chart/values.yaml b/chart/values.yaml index 2cfa3484b47..bd723567f0f 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -48,6 +48,9 @@ mastodon: enabled: false access_key: "" access_secret: "" + # you can also specify the name of an existing Secret + # with keys AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY + existingSecret: "" bucket: "" endpoint: https://us-east-1.linodeobjects.com hostname: us-east-1.linodeobjects.com @@ -61,6 +64,10 @@ mastodon: vapid: private_key: "" public_key: "" + # you can also specify the name of an existing Secret + # with keys SECRET_KEY_BASE and OTP_SECRET and + # VAPID_PRIVATE_KEY and VAPID_PUBLIC_KEY + existingSecret: "" sidekiq: concurrency: 25 smtp: @@ -70,13 +77,16 @@ mastodon: domain: enable_starttls_auto: true from_address: notifications@example.com - login: openssl_verify_mode: peer - password: port: 587 reply_to: server: smtp.mailgun.org tls: false + login: + password: + # you can also specify the name of an existing Secret + # with the keys login and password + existingSecret: streaming: port: 4000 # this should be set manually since os.cpus() returns the number of CPUs on @@ -127,18 +137,26 @@ postgresql: # must match those of that external postgres instance enabled: true # postgresqlHostname: preexisting-postgresql - postgresqlDatabase: mastodon_production - # you must set a password; the password generated by the postgresql chart will - # be rotated on each upgrade: - # https://github.com/bitnami/charts/tree/master/bitnami/postgresql#upgrade - postgresqlPassword: "" - postgresqlUsername: postgres + auth: + database: mastodon_production + username: postgres + # you must set a password; the password generated by the postgresql chart will + # be rotated on each upgrade: + # https://github.com/bitnami/charts/tree/master/bitnami/postgresql#upgrade + password: "" + # you can also specify the name of an existing Secret + # with a key of postgres-password set to the password you want + existingSecret: "" # https://github.com/bitnami/charts/tree/master/bitnami/redis#parameters redis: # you must set a password; the password generated by the redis chart will be # rotated on each upgrade: password: "" + # you can also specify the name of an existing Secret + # with a key of redis-password set to the password you want + # auth: + # existingSecret: "" service: type: ClusterIP @@ -157,45 +175,45 @@ externalAuth: # client_secret: SECRETKEY # redirect_uri: https://example.com/auth/auth/openid_connect/callback # assume_email_is_verified: true - # client_auth_method: - # response_type: - # response_mode: - # display: - # prompt: - # send_nonce: - # send_scope_to_token_endpoint: - # idp_logout_redirect_uri: - # http_scheme: - # host: - # port: - # jwks_uri: - # auth_endpoint: - # token_endpoint: - # user_info_endpoint: - # end_session_endpoint: + # client_auth_method: + # response_type: + # response_mode: + # display: + # prompt: + # send_nonce: + # send_scope_to_token_endpoint: + # idp_logout_redirect_uri: + # http_scheme: + # host: + # port: + # jwks_uri: + # auth_endpoint: + # token_endpoint: + # user_info_endpoint: + # end_session_endpoint: saml: enabled: false # acs_url: http://mastodon.example.com/auth/auth/saml/callback # issuer: mastodon # idp_sso_target_url: https://login.example.com/auth/realms/example/protocol/saml # idp_cert: '-----BEGIN CERTIFICATE-----[your_cert_content]-----END CERTIFICATE-----' - # idp_cert_fingerprint: + # idp_cert_fingerprint: # name_identifier_format: urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified - # cert: - # private_key: + # cert: + # private_key: # want_assertion_signed: true # want_assertion_encrypted: true # assume_email_is_verified: true # uid_attribute: "urn:oid:0.9.2342.19200300.100.1.1" - # attributes_statements: + # attributes_statements: # uid: "urn:oid:0.9.2342.19200300.100.1.1" # email: "urn:oid:1.3.6.1.4.1.5923.1.1.1.6" # full_name: "urn:oid:2.16.840.1.113730.3.1.241" # first_name: "urn:oid:2.5.4.42" # last_name: "urn:oid:2.5.4.4" - # verified: - # verified_email: - oauth_global: + # verified: + # verified_email: + oauth_global: # Force redirect local login to CAS. Does not function with SAML or LDAP. oauth_redirect_at_sign_in: false cas: @@ -204,15 +222,15 @@ externalAuth: # host: sso.myserver.com # port: 443 # ssl: true - # validate_url: - # callback_url: - # logout_url: - # login_url: + # validate_url: + # callback_url: + # logout_url: + # login_url: # uid_field: 'user' - # ca_path: + # ca_path: # disable_ssl_verification: false # assume_email_is_verified: true - # keys: + # keys: # uid: 'user' # name: 'name' # email: 'email' @@ -222,7 +240,7 @@ externalAuth: # location: 'location' # image: 'image' # phone: 'phone' - pam: + pam: enabled: false # email_domain: example.com # default_service: rpam @@ -232,9 +250,9 @@ externalAuth: # host: myservice.namespace.svc # port: 389 # method: simple_tls - # base: - # bind_on: - # password: + # base: + # bind_on: + # password: # uid: cn # mail: mail # search_filter: "(|(%{uid}=%{email})(%{mail}=%{email}))" From 03f19b8cd38ee0096f9a4ce47247379ed6f94cd7 Mon Sep 17 00:00:00 2001 From: Tony Jiang Date: Sat, 13 Aug 2022 06:28:16 -0700 Subject: [PATCH 163/646] Remove nanobox (#17881) Co-authored-by: Tony Jiang --- .env.nanobox | 254 ---------------------------------- boxfile.yml | 205 --------------------------- nanobox/nginx-local.conf | 92 ------------ nanobox/nginx-stream.conf.erb | 66 --------- nanobox/nginx-web.conf.erb | 90 ------------ 5 files changed, 707 deletions(-) delete mode 100644 .env.nanobox delete mode 100644 boxfile.yml delete mode 100644 nanobox/nginx-local.conf delete mode 100644 nanobox/nginx-stream.conf.erb delete mode 100644 nanobox/nginx-web.conf.erb diff --git a/.env.nanobox b/.env.nanobox deleted file mode 100644 index 51dfdbd58fb..00000000000 --- a/.env.nanobox +++ /dev/null @@ -1,254 +0,0 @@ -# Service dependencies -# You may set REDIS_URL instead for more advanced options -REDIS_HOST=$DATA_REDIS_HOST -REDIS_PORT=6379 -# REDIS_DB=0 - -# You may set DATABASE_URL instead for more advanced options -DB_HOST=$DATA_DB_HOST -DB_USER=$DATA_DB_USER -DB_NAME=gonano -DB_PASS=$DATA_DB_PASS -DB_PORT=5432 - -# DATABASE_URL=postgresql://$DATA_DB_USER:$DATA_DB_PASS@$DATA_DB_HOST/gonano - -# Optional Elasticsearch configuration -ES_ENABLED=true -ES_HOST=$DATA_ELASTIC_HOST -ES_PORT=9200 - -BIND=0.0.0.0 - -# Federation -# Note: Changing LOCAL_DOMAIN at a later time will cause unwanted side effects, including breaking all existing federation. -# LOCAL_DOMAIN should *NOT* contain the protocol part of the domain e.g https://example.com. -LOCAL_DOMAIN=${APP_NAME}.nanoapp.io - -# Changing LOCAL_HTTPS in production is no longer supported. (Mastodon will always serve https:// links) - -# Use this only if you need to run mastodon on a different domain than the one used for federation. -# You can read more about this option on https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Serving_a_different_domain.md -# DO *NOT* USE THIS UNLESS YOU KNOW *EXACTLY* WHAT YOU ARE DOING. -# WEB_DOMAIN=mastodon.example.com - -# Use this if you want to have several aliases handler@example1.com -# handler@example2.com etc. for the same user. LOCAL_DOMAIN should not -# be added. Comma separated values -# ALTERNATE_DOMAINS=example1.com,example2.com - -# Application secrets -# Generate each with the `rake secret` task (`nanobox run bundle exec rake secret`) -SECRET_KEY_BASE=$SECRET_KEY_BASE -OTP_SECRET=$OTP_SECRET - -# VAPID keys (used for push notifications) -# You can generate the keys using the following command (first is the private key, second is the public one) -# You should only generate this once per instance. If you later decide to change it, all push subscription will -# be invalidated, requiring the users to access the website again to resubscribe. -# -# Generate with `rake mastodon:webpush:generate_vapid_key` task (`nanobox run bundle exec rake mastodon:webpush:generate_vapid_key`) -# -# For more information visit https://rossta.net/blog/using-the-web-push-api-with-vapid.html -VAPID_PRIVATE_KEY=$VAPID_PRIVATE_KEY -VAPID_PUBLIC_KEY=$VAPID_PUBLIC_KEY - -# Registrations -# Single user mode will disable registrations and redirect frontpage to the first profile -# SINGLE_USER_MODE=true -# Prevent registrations with following e-mail domains -# EMAIL_DOMAIN_BLACKLIST=example1.com|example2.de|etc -# Only allow registrations with the following e-mail domains -# EMAIL_DOMAIN_WHITELIST=example1.com|example2.de|etc - -# Optionally change default language -# DEFAULT_LOCALE=de - -# E-mail configuration -# Note: Mailgun and SparkPost (https://sparkpo.st/smtp) each have good free tiers -# If you want to use an SMTP server without authentication (e.g local Postfix relay) -# then set SMTP_AUTH_METHOD and SMTP_OPENSSL_VERIFY_MODE to 'none' and -# *comment* SMTP_LOGIN and SMTP_PASSWORD (leaving them blank is not enough). -SMTP_SERVER=$SMTP_SERVER -SMTP_PORT=587 -SMTP_LOGIN=$SMTP_LOGIN -SMTP_PASSWORD=$SMTP_PASSWORD -SMTP_FROM_ADDRESS=notifications@${APP_NAME}.nanoapp.io -#SMTP_REPLY_TO= -#SMTP_DOMAIN= # defaults to LOCAL_DOMAIN -#SMTP_DELIVERY_METHOD=smtp # delivery method can also be sendmail -#SMTP_AUTH_METHOD=plain -#SMTP_CA_FILE=/etc/ssl/certs/ca-certificates.crt -#SMTP_OPENSSL_VERIFY_MODE=peer -#SMTP_ENABLE_STARTTLS_AUTO=true -#SMTP_TLS=true - -# Optional user upload path and URL (images, avatars). Default is :rails_root/public/system. If you set this variable, you are responsible for making your HTTP server (eg. nginx) serve these files. -# PAPERCLIP_ROOT_PATH=/var/lib/mastodon/public-system -# PAPERCLIP_ROOT_URL=/system - -# Optional asset host for multi-server setups -# The asset host must allow cross origin request from WEB_DOMAIN or LOCAL_DOMAIN -# if WEB_DOMAIN is not set. For example, the server may have the -# following header field: -# Access-Control-Allow-Origin: https://example.com/ -# CDN_HOST=https://assets.example.com - -# S3 (optional) -# The attachment host must allow cross origin request from WEB_DOMAIN or -# LOCAL_DOMAIN if WEB_DOMAIN is not set. For example, the server may have the -# following header field: -# Access-Control-Allow-Origin: https://192.168.1.123:9000/ -# S3_ENABLED=true -# S3_BUCKET= -# AWS_ACCESS_KEY_ID= -# AWS_SECRET_ACCESS_KEY= -# S3_REGION= -# S3_PROTOCOL=http -# S3_HOSTNAME=192.168.1.123:9000 - -# S3 (Minio Config (optional) Please check Minio instance for details) -# The attachment host must allow cross origin request - see the description -# above. -# S3_ENABLED=true -# S3_BUCKET= -# AWS_ACCESS_KEY_ID= -# AWS_SECRET_ACCESS_KEY= -# S3_REGION= -# S3_PROTOCOL=https -# S3_HOSTNAME= -# S3_ENDPOINT= -# S3_SIGNATURE_VERSION= - -# Google Cloud Storage (optional) -# Use S3 compatible API. Since GCS does not support Multipart Upload, -# increase the value of S3_MULTIPART_THRESHOLD to disable Multipart Upload. -# The attachment host must allow cross origin request - see the description -# above. -# S3_ENABLED=true -# AWS_ACCESS_KEY_ID= -# AWS_SECRET_ACCESS_KEY= -# S3_REGION= -# S3_PROTOCOL=https -# S3_HOSTNAME=storage.googleapis.com -# S3_ENDPOINT=https://storage.googleapis.com -# S3_MULTIPART_THRESHOLD=52428801 # 50.megabytes - -# Swift (optional) -# The attachment host must allow cross origin request - see the description -# above. -# SWIFT_ENABLED=true -# SWIFT_USERNAME= -# For Keystone V3, the value for SWIFT_TENANT should be the project name -# SWIFT_TENANT= -# SWIFT_PASSWORD= -# Some OpenStack V3 providers require PROJECT_ID (optional) -# SWIFT_PROJECT_ID= -# Keystone V2 and V3 URLs are supported. Use a V3 URL if possible to avoid -# issues with token rate-limiting during high load. -# SWIFT_AUTH_URL= -# SWIFT_CONTAINER= -# SWIFT_OBJECT_URL= -# SWIFT_REGION= -# Defaults to 'default' -# SWIFT_DOMAIN_NAME= -# Defaults to 60 seconds. Set to 0 to disable -# SWIFT_CACHE_TTL= - -# Optional alias for S3 (e.g. to serve files on a custom domain, possibly using Cloudfront or Cloudflare) -# S3_ALIAS_HOST= - -# Streaming API integration -# STREAMING_API_BASE_URL= - -# Advanced settings -# If you need to use pgBouncer, you need to disable prepared statements: -# PREPARED_STATEMENTS=false - -# Cluster number setting for streaming API server. -# If you comment out following line, cluster number will be `numOfCpuCores - 1`. -# STREAMING_CLUSTER_NUM=1 - -# Docker mastodon user -# If you use Docker, you may want to assign UID/GID manually. -# UID=1000 -# GID=1000 - -# LDAP authentication (optional) -# LDAP_ENABLED=true -# LDAP_HOST=localhost -# LDAP_PORT=389 -# LDAP_METHOD=simple_tls -# LDAP_BASE= -# LDAP_BIND_DN= -# LDAP_PASSWORD= -# LDAP_UID=cn -# LDAP_MAIL=mail -# LDAP_SEARCH_FILTER=(|(%{uid}=%{email})(%{mail}=%{email})) -# LDAP_UID_CONVERSION_ENABLED=true -# LDAP_UID_CONVERSION_SEARCH=., - -# LDAP_UID_CONVERSION_REPLACE=_ - -# PAM authentication (optional) -# PAM authentication uses for the email generation the "email" pam variable -# and optional as fallback PAM_DEFAULT_SUFFIX -# The pam environment variable "email" is provided by: -# https://github.com/devkral/pam_email_extractor -# PAM_ENABLED=true -# Fallback email domain for email address generation (LOCAL_DOMAIN by default) -# PAM_EMAIL_DOMAIN=example.com -# Name of the pam service (pam "auth" section is evaluated) -# PAM_DEFAULT_SERVICE=rpam -# Name of the pam service used for checking if an user can register (pam "account" section is evaluated) (nil (disabled) by default) -# PAM_CONTROLLED_SERVICE=rpam - -# Optional CAS authentication (cf. omniauth-cas) : -# CAS_ENABLED=true -# CAS_URL=https://sso.myserver.com/ -# CAS_HOST=sso.myserver.com/ -# CAS_PORT=443 -# CAS_SSL=true -# CAS_VALIDATE_URL= -# CAS_CALLBACK_URL= -# CAS_LOGOUT_URL= -# CAS_LOGIN_URL= -# CAS_UID_FIELD='user' -# CAS_CA_PATH= -# CAS_DISABLE_SSL_VERIFICATION=false -# CAS_UID_KEY='user' -# CAS_NAME_KEY='name' -# CAS_EMAIL_KEY='email' -# CAS_NICKNAME_KEY='nickname' -# CAS_FIRST_NAME_KEY='firstname' -# CAS_LAST_NAME_KEY='lastname' -# CAS_LOCATION_KEY='location' -# CAS_IMAGE_KEY='image' -# CAS_PHONE_KEY='phone' -# CAS_SECURITY_ASSUME_EMAIL_IS_VERIFIED=true - -# Optional SAML authentication (cf. omniauth-saml) -# SAML_ENABLED=true -# SAML_ACS_URL=http://localhost:3000/auth/auth/saml/callback -# SAML_ISSUER=https://example.com -# SAML_IDP_SSO_TARGET_URL=https://idp.testshib.org/idp/profile/SAML2/Redirect/SSO -# SAML_IDP_CERT= -# SAML_IDP_CERT_FINGERPRINT= -# SAML_NAME_IDENTIFIER_FORMAT= -# SAML_CERT= -# SAML_PRIVATE_KEY= -# SAML_SECURITY_WANT_ASSERTION_SIGNED=true -# SAML_SECURITY_WANT_ASSERTION_ENCRYPTED=true -# SAML_SECURITY_ASSUME_EMAIL_IS_VERIFIED=true -# SAML_ATTRIBUTES_STATEMENTS_UID="urn:oid:0.9.2342.19200300.100.1.1" -# SAML_ATTRIBUTES_STATEMENTS_EMAIL="urn:oid:1.3.6.1.4.1.5923.1.1.1.6" -# SAML_ATTRIBUTES_STATEMENTS_FULL_NAME="urn:oid:2.16.840.1.113730.3.1.241" -# SAML_ATTRIBUTES_STATEMENTS_FIRST_NAME="urn:oid:2.5.4.42" -# SAML_ATTRIBUTES_STATEMENTS_LAST_NAME="urn:oid:2.5.4.4" -# SAML_UID_ATTRIBUTE="urn:oid:0.9.2342.19200300.100.1.1" -# SAML_ATTRIBUTES_STATEMENTS_VERIFIED= -# SAML_ATTRIBUTES_STATEMENTS_VERIFIED_EMAIL= - -# Use HTTP proxy for outgoing request (optional) -# http_proxy=http://gateway.local:8118 -# Access control for hidden service. -# ALLOW_ACCESS_TO_HIDDEN_SERVICE=true diff --git a/boxfile.yml b/boxfile.yml deleted file mode 100644 index 27166cec9f7..00000000000 --- a/boxfile.yml +++ /dev/null @@ -1,205 +0,0 @@ -run.config: - engine: ruby - engine.config: - runtime: ruby-2.5 - - extra_packages: - # basic servers: - - nginx - - nodejs - - # for images: - - ImageMagick - - jemalloc - - # for videos: - - ffmpeg3 - - # to prep the .env file: - - gettext-tools - - # for node-gyp, used in the asset compilation process: - - python-2 - - # i18n: - - libidn - - cache_dirs: - - node_modules - - extra_path_dirs: - - node_modules/.bin - - build_triggers: - - .ruby-version - - Gemfile - - Gemfile.lock - - package.json - - yarn.lock - - extra_steps: - - cp .env.nanobox .env - - yarn - - fs_watch: true - -deploy.config: - extra_steps: - - NODE_ENV=production bundle exec rake assets:precompile - transform: - - 'envsubst < /app/.env.nanobox > /app/.env.production' - - |- - if [ -z "$LOCAL_DOMAIN" ] - then - . /app/.env.production - export LOCAL_DOMAIN - fi - erb /app/nanobox/nginx-web.conf.erb > /app/nanobox/nginx-web.conf - erb /app/nanobox/nginx-stream.conf.erb > /app/nanobox/nginx-stream.conf - - touch /app/log/production.log - before_live: - web.web: - - bin/tootctl cache clear - - bundle exec rake db:migrate:setup - after_live: - worker.sidekiq: - - |- - if [[ "${ES_ENABLED}" != "false" ]] - then - bin/tootctl search deploy - fi - -web.web: - start: - nginx: nginx -c /app/nanobox/nginx-web.conf - rails: bundle exec puma -C /app/config/puma.rb - - routes: - - '/' - - writable_dirs: - - tmp - - log_watch: - rails: 'log/production.log' - - network_dirs: - data.storage: - - public/system - -web.stream: - start: - nginx: nginx -c /app/nanobox/nginx-stream.conf - node: yarn run start - - routes: - - '/api/v1/streaming*' - # Somehow we're getting requests for scheme://domain//api/v1/streaming* - match those, too - - '//api/v1/streaming*' - - writable_dirs: - - tmp - -worker.sidekiq: - start: - default: bundle exec sidekiq -c 5 -q default -L /app/log/sidekiq.log - mailers: bundle exec sidekiq -c 5 -q mailers -L /app/log/sidekiq.log - pull: bundle exec sidekiq -c 5 -q pull -L /app/log/sidekiq.log - push: bundle exec sidekiq -c 5 -q push -L /app/log/sidekiq.log - scheduler: bundle exec sidekiq -c 5 -q scheduler -L /app/log/sidekiq.log - - writable_dirs: - - tmp - - log_watch: - rails: 'log/production.log' - sidekiq: 'log/sidekiq.log' - - network_dirs: - data.storage: - - public/system - -data.db: - image: nanobox/postgresql:9.6 - - cron: - - id: backup - schedule: '0 3 * * *' - command: | - PGPASSWORD=${DATA_DB_PASS} pg_dump -U ${DATA_DB_USER} -w -Fc -O gonano | - gzip | - curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/backup-${HOSTNAME}-$(date -u +%Y-%m-%d.%H-%M-%S).sql.gz -X POST -T - >&2 - curl -k -s -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/ | - sed 's/,/\n/g' | - grep ${HOSTNAME} | - sort | - head -n-${BACKUP_COUNT:-1} | - sed 's/.*: \?"\(.*\)".*/\1/' | - while read file - do - curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/${file} -X DELETE - done - -data.elastic: - image: nanobox/elasticsearch:5 - - cron: - - id: backup - schedule: '0 3 * * *' - command: | - id=$(cat /proc/sys/kernel/random/uuid) - curl -X PUT -H "Content-Type: application/json" "127.0.0.1:9200/_snapshot/${id}" -d "{\"type\": \"fs\",\"settings\": {\"location\": \"/var/tmp/${id}\",\"compress\": true}}" - curl -X PUT -H "Content-Type: application/json" "127.0.0.1:9200/_snapshot/${id}/backup?wait_for_completion=true&pretty" - tar -cz -C "/var/tmp/${id}" . | - curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/backup-${HOSTNAME}-$(date -u +%Y-%m-%d.%H-%M-%S).tgz -X POST -T - >&2 - curl -X DELETE -H "Content-Type: application/json" "127.0.0.1:9200/_snapshot/${id}" - rm -rf "/var/tmp/${id}" - curl -k -s -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/ | - sed 's/,/\n/g' | - grep ${HOSTNAME} | - sort | - head -n-${BACKUP_COUNT:-1} | - sed 's/.*: \?"\(.*\)".*/\1/' | - while read file - do - curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/${file} -X DELETE - done - -data.redis: - image: nanobox/redis:4.0 - - cron: - - id: backup - schedule: '0 3 * * *' - command: | - curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/backup-${HOSTNAME}-$(date -u +%Y-%m-%d.%H-%M-%S).rdb -X POST -T /data/var/db/redis/dump.rdb >&2 - curl -k -s -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/ | - sed 's/,/\n/g' | - grep ${HOSTNAME} | - sort | - head -n-${BACKUP_COUNT:-1} | - sed 's/.*: \?"\(.*\)".*/\1/' | - while read file - do - curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/${file} -X DELETE - done - -data.storage: - image: nanobox/unfs:0.9 - - cron: - - id: backup - schedule: '0 3 * * *' - command: | - tar cz -C /data/var/db/unfs/ . | - curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/backup-${HOSTNAME}-$(date -u +%Y-%m-%d.%H-%M-%S).tgz -X POST -T - >&2 - curl -k -s -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/ | - sed 's/,/\n/g' | - grep ${HOSTNAME} | - sort | - head -n-${BACKUP_COUNT:-1} | - sed 's/.*: \?"\(.*\)".*/\1/' | - while read file - do - curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/${file} -X DELETE - done diff --git a/nanobox/nginx-local.conf b/nanobox/nginx-local.conf deleted file mode 100644 index 37c8a451a35..00000000000 --- a/nanobox/nginx-local.conf +++ /dev/null @@ -1,92 +0,0 @@ -worker_processes 1; -daemon off; - -events { - worker_connections 1024; -} - -http { - include /data/etc/nginx/mime.types; - sendfile on; - - gzip on; - gzip_disable "MSIE [1-6]\."; - gzip_vary on; - gzip_proxied any; - gzip_comp_level 6; - gzip_buffers 16 8k; - gzip_min_length 500; - gzip_http_version 1.1; - gzip_types text/plain text/xml text/javascript text/css text/comma-separated-values application/xml+rss application/xml application/x-javascript application/json application/javascript application/atom+xml; - - # Proxy upstream to the puma process - upstream rails { - server 127.0.0.1:3000; - } - - # Proxy upstream to the node process - upstream node { - server 127.0.0.1:4000; - } - - map $http_upgrade $connection_upgrade { - default upgrade; - '' close; - } - - # Configuration for Nginx - server { - # Listen on port 8080 - listen 8080; - - keepalive_timeout 70; - client_max_body_size 80M; - - root /app/public; - - add_header Strict-Transport-Security "max-age=31536000"; - - location / { - try_files $uri @rails; - } - - # Proxy connections to rails - location @rails { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto https; - proxy_set_header Proxy ""; - proxy_pass_header Server; - - proxy_pass http://rails; - proxy_buffering off; - proxy_redirect off; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; - - tcp_nodelay on; - } - - # Proxy connections to node - location /api/v1/streaming { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto https; - proxy_set_header Proxy ""; - - proxy_pass http://node; - proxy_buffering off; - proxy_redirect off; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; - - tcp_nodelay on; - } - } - - error_page 500 501 502 503 504 /500.html; -} diff --git a/nanobox/nginx-stream.conf.erb b/nanobox/nginx-stream.conf.erb deleted file mode 100644 index 4ea6e30fc9a..00000000000 --- a/nanobox/nginx-stream.conf.erb +++ /dev/null @@ -1,66 +0,0 @@ -worker_processes 1; -daemon off; - -events { - worker_connections 1024; -} - -http { - include /data/etc/nginx/mime.types; - sendfile on; - - gzip on; - gzip_disable "MSIE [1-6]\."; - gzip_vary on; - gzip_proxied any; - gzip_comp_level 6; - gzip_buffers 16 8k; - gzip_min_length 500; - gzip_http_version 1.1; - gzip_types text/plain text/xml text/javascript text/css text/comma-separated-values application/xml+rss application/xml application/x-javascript application/json application/javascript application/atom+xml; - - # Proxy upstream to the node process - upstream node { - server 127.0.0.1:4000; - } - - map $http_upgrade $connection_upgrade { - default upgrade; - '' close; - } - - # Configuration for Nginx - server { - # Listen on port 8080 - listen 8080; - - keepalive_timeout 70; - client_max_body_size 80M; - - root /app/public; - - add_header Strict-Transport-Security "max-age=31536000"; - - location / { - try_files $uri @node; - } - - # Proxy connections to node - location @node { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto https; - proxy_set_header Proxy ""; - - proxy_pass http://node; - proxy_buffering off; - proxy_redirect off; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; - - tcp_nodelay on; - } - } -} diff --git a/nanobox/nginx-web.conf.erb b/nanobox/nginx-web.conf.erb deleted file mode 100644 index 182d9920993..00000000000 --- a/nanobox/nginx-web.conf.erb +++ /dev/null @@ -1,90 +0,0 @@ -worker_processes 1; -daemon off; - -events { - worker_connections 1024; -} - -http { - include /data/etc/nginx/mime.types; - sendfile on; - - gzip on; - gzip_disable "MSIE [1-6]\."; - gzip_vary on; - gzip_proxied any; - gzip_comp_level 6; - gzip_buffers 16 8k; - gzip_min_length 500; - gzip_http_version 1.1; - gzip_types text/plain text/xml text/javascript text/css text/comma-separated-values application/xml+rss application/xml application/x-javascript application/json application/javascript application/atom+xml; - - # Proxy upstream to the puma process - upstream rails { - server 127.0.0.1:3000; - } - - map $http_upgrade $connection_upgrade { - default upgrade; - '' close; - } - - # Configuration for Nginx - server { - # Listen on port 8080 - listen 8080; - - keepalive_timeout 70; - client_max_body_size 80M; - - root /app/public; - - add_header Strict-Transport-Security "max-age=31536000"; - - location / { - try_files $uri @rails; - } - - location /sw.js { - add_header Cache-Control "public, max-age=0"; - add_header Strict-Transport-Security "max-age=31536000"; - try_files $uri @rails; - } - - location ~ ^/(emoji|packs|system/media_attachments/files|system/accounts/avatars) { - add_header Cache-Control "public, max-age=31536000, immutable"; - add_header Strict-Transport-Security "max-age=31536000"; - try_files $uri @rails; - } - - # Proxy connections to rails - location @rails { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto https; - proxy_set_header Proxy ""; - proxy_pass_header Server; - - proxy_pass http://rails; - proxy_buffering on; - proxy_redirect off; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; - - proxy_cache CACHE; - proxy_cache_valid 200 7d; - proxy_cache_valid 410 24h; - proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; - add_header Strict-Transport-Security "max-age=31536000"; - add_header X-Cached $upstream_cache_status; - - tcp_nodelay on; - } - } - - proxy_cache_path /data/var/cache/nginx levels=1:2 keys_zone=CACHE:10m inactive=7d max_size=1g; - - error_page 500 501 502 503 504 /500.html; -} From e6979aa6d43f24ab290c27f596fcd71fcc0ac03a Mon Sep 17 00:00:00 2001 From: Rens Groothuijsen Date: Sat, 13 Aug 2022 15:39:05 +0200 Subject: [PATCH 164/646] Add warning for sensitive audio posts (#17885) --- app/javascript/mastodon/components/status.js | 4 ++ .../mastodon/features/audio/index.js | 64 ++++++++++++++++--- .../status/components/detailed_status.js | 4 ++ .../styles/mastodon/components.scss | 7 ++ 4 files changed, 71 insertions(+), 8 deletions(-) diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js index 238a0d73493..dee935a6cda 100644 --- a/app/javascript/mastodon/components/status.js +++ b/app/javascript/mastodon/components/status.js @@ -409,6 +409,10 @@ class Status extends ImmutablePureComponent { height={110} cacheWidth={this.props.cacheMediaWidth} deployPictureInPicture={pictureInPicture.get('available') ? this.handleDeployPictureInPicture : undefined} + sensitive={status.get('sensitive')} + blurhash={attachment.get('blurhash')} + visible={this.state.showMedia} + onToggleVisibility={this.handleToggleMediaVisibility} /> )} diff --git a/app/javascript/mastodon/features/audio/index.js b/app/javascript/mastodon/features/audio/index.js index c47f55dd1ea..00854d0e497 100644 --- a/app/javascript/mastodon/features/audio/index.js +++ b/app/javascript/mastodon/features/audio/index.js @@ -1,6 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { defineMessages, injectIntl } from 'react-intl'; +import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; import { formatTime } from 'mastodon/features/video'; import Icon from 'mastodon/components/icon'; import classNames from 'classnames'; @@ -8,6 +8,9 @@ import { throttle } from 'lodash'; import { getPointerPosition, fileNameFromURL } from 'mastodon/features/video'; import { debounce } from 'lodash'; import Visualizer from './visualizer'; +import { displayMedia, useBlurhash } from '../../initial_state'; +import Blurhash from '../../components/blurhash'; +import { is } from 'immutable'; const messages = defineMessages({ play: { id: 'video.play', defaultMessage: 'Play' }, @@ -15,6 +18,7 @@ const messages = defineMessages({ mute: { id: 'video.mute', defaultMessage: 'Mute sound' }, unmute: { id: 'video.unmute', defaultMessage: 'Unmute sound' }, download: { id: 'video.download', defaultMessage: 'Download file' }, + hide: { id: 'audio.hide', defaultMessage: 'Hide audio' }, }); const TICK_SIZE = 10; @@ -30,10 +34,14 @@ class Audio extends React.PureComponent { duration: PropTypes.number, width: PropTypes.number, height: PropTypes.number, + sensitive: PropTypes.bool, editable: PropTypes.bool, fullscreen: PropTypes.bool, intl: PropTypes.object.isRequired, + blurhash: PropTypes.string, cacheWidth: PropTypes.func, + visible: PropTypes.bool, + onToggleVisibility: PropTypes.func, backgroundColor: PropTypes.string, foregroundColor: PropTypes.string, accentColor: PropTypes.string, @@ -53,6 +61,7 @@ class Audio extends React.PureComponent { muted: false, volume: 0.5, dragging: false, + revealed: this.props.visible !== undefined ? this.props.visible : (displayMedia !== 'hide_all' && !this.props.sensitive || displayMedia === 'show_all'), }; constructor (props) { @@ -78,6 +87,8 @@ class Audio extends React.PureComponent { backgroundColor: this.props.backgroundColor, foregroundColor: this.props.foregroundColor, accentColor: this.props.accentColor, + sensitive: this.props.sensitive, + visible: this.props.visible, }; } @@ -126,6 +137,12 @@ class Audio extends React.PureComponent { } } + componentWillReceiveProps (nextProps) { + if (!is(nextProps.visible, this.props.visible) && nextProps.visible !== undefined) { + this.setState({ revealed: nextProps.visible }); + } + } + componentWillUnmount () { window.removeEventListener('scroll', this.handleScroll); window.removeEventListener('resize', this.handleResize); @@ -189,6 +206,14 @@ class Audio extends React.PureComponent { }); } + toggleReveal = () => { + if (this.props.onToggleVisibility) { + this.props.onToggleVisibility(); + } else { + this.setState({ revealed: !this.state.revealed }); + } + } + handleVolumeMouseDown = e => { document.addEventListener('mousemove', this.handleMouseVolSlide, true); document.addEventListener('mouseup', this.handleVolumeMouseUp, true); @@ -433,13 +458,29 @@ class Audio extends React.PureComponent { } render () { - const { src, intl, alt, editable, autoPlay } = this.props; - const { paused, muted, volume, currentTime, duration, buffer, dragging } = this.state; + const { src, intl, alt, editable, autoPlay, sensitive, blurhash } = this.props; + const { paused, muted, volume, currentTime, duration, buffer, dragging, revealed } = this.state; const progress = Math.min((currentTime / duration) * 100, 100); + let warning; + if (sensitive) { + warning = ; + } else { + warning = ; + } + return ( -
    -
    + + {(revealed || editable) && + />}
    @@ -508,6 +555,7 @@ class Audio extends React.PureComponent {
    + {!editable && } diff --git a/app/javascript/mastodon/features/status/components/detailed_status.js b/app/javascript/mastodon/features/status/components/detailed_status.js index 13bce1b831f..5c43c20388f 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.js +++ b/app/javascript/mastodon/features/status/components/detailed_status.js @@ -138,7 +138,11 @@ class DetailedStatus extends ImmutablePureComponent { backgroundColor={attachment.getIn(['meta', 'colors', 'background'])} foregroundColor={attachment.getIn(['meta', 'colors', 'foreground'])} accentColor={attachment.getIn(['meta', 'colors', 'accent'])} + sensitive={status.get('sensitive')} + visible={this.props.showMedia} + blurhash={attachment.get('blurhash')} height={150} + onToggleVisibility={this.props.onToggleMediaVisibility} /> ); } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') { diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 3e202841b09..a0a39812b0f 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -5939,6 +5939,13 @@ a.status-card.compact:hover { height: 100%; } + &.inactive { + audio, + .video-player__controls { + visibility: hidden; + } + } + .video-player__volume::before, .video-player__seek::before { background: currentColor; From 8d3318910461c30ffbfc48a15f8b907f45ce98a3 Mon Sep 17 00:00:00 2001 From: gol-cha Date: Sat, 13 Aug 2022 22:40:00 +0900 Subject: [PATCH 165/646] Remove Rack::Deflater (#17937) Co-authored-by: Eugen Rochko --- config/application.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/config/application.rb b/config/application.rb index 06360832c43..2e54eb6f67a 100644 --- a/config/application.rb +++ b/config/application.rb @@ -165,7 +165,6 @@ module Mastodon config.active_job.queue_adapter = :sidekiq config.middleware.use Rack::Attack - config.middleware.use Rack::Deflater config.middleware.use Mastodon::RackMiddleware config.to_prepare do From fc46fa8f99124b132a82f4f7ef06850c45df445b Mon Sep 17 00:00:00 2001 From: Brayd Date: Sat, 13 Aug 2022 15:41:12 +0200 Subject: [PATCH 166/646] Minimal adjustments to the short description (#18001) Minimal adjustments have been made to the short description so that it logically follows the long description --- lib/mastodon/accounts_cli.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/mastodon/accounts_cli.rb b/lib/mastodon/accounts_cli.rb index 29c93445386..558f4d3c41b 100644 --- a/lib/mastodon/accounts_cli.rb +++ b/lib/mastodon/accounts_cli.rb @@ -57,7 +57,7 @@ module Mastodon option :role option :reattach, type: :boolean option :force, type: :boolean - desc 'create USERNAME', 'Create a new user' + desc 'create USERNAME', 'Create a new user account' long_desc <<-LONG_DESC Create a new user account with a given USERNAME and an e-mail address provided with --email. @@ -133,7 +133,7 @@ module Mastodon option :disable_2fa, type: :boolean option :approve, type: :boolean option :reset_password, type: :boolean - desc 'modify USERNAME', 'Modify a user' + desc 'modify USERNAME', 'Modify a user account' long_desc <<-LONG_DESC Modify a user account. From f879cf03f03632c016a0c5b73e90a388f04bed13 Mon Sep 17 00:00:00 2001 From: The Stranjer <791672+TheStranjer@users.noreply.github.com> Date: Sat, 13 Aug 2022 07:44:34 -0600 Subject: [PATCH 167/646] Make Mastodon use its own gemset (#17858) --- .ruby-gemset | 1 + 1 file changed, 1 insertion(+) create mode 100644 .ruby-gemset diff --git a/.ruby-gemset b/.ruby-gemset new file mode 100644 index 00000000000..2b97bf65d8f --- /dev/null +++ b/.ruby-gemset @@ -0,0 +1 @@ +mastodon From aa33c7f26e67ca2afdd69557ffbae3d9ae656dce Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 15 Aug 2022 00:39:44 +0200 Subject: [PATCH 168/646] New Crowdin updates (#18905) * New translations doorkeeper.en.yml (Chinese Traditional) * New translations en.yml (Urdu (Pakistan)) * New translations devise.en.yml (Urdu (Pakistan)) * New translations en.yml (Vietnamese) * New translations simple_form.en.yml (Vietnamese) * New translations simple_form.en.yml (Bengali) * New translations simple_form.en.yml (Spanish, Argentina) * New translations devise.en.yml (Spanish, Argentina) * New translations doorkeeper.en.yml (Spanish, Argentina) * New translations en.yml (Spanish, Mexico) * New translations simple_form.en.yml (Spanish, Mexico) * New translations activerecord.en.yml (Spanish, Mexico) * New translations devise.en.yml (Spanish, Mexico) * New translations doorkeeper.en.yml (Spanish, Mexico) * New translations en.yml (Bengali) * New translations activerecord.en.yml (Bengali) * New translations doorkeeper.en.yml (Tamil) * New translations devise.en.yml (Bengali) * New translations en.yml (Marathi) * New translations activerecord.en.yml (Marathi) * New translations doorkeeper.en.yml (Marathi) * New translations devise.en.yml (Thai) * New translations en.yml (Croatian) * New translations simple_form.en.yml (Croatian) * New translations en.yml (Spanish, Argentina) * New translations devise.en.yml (Tamil) * New translations devise.en.yml (Vietnamese) * New translations devise.en.yml (Portuguese, Brazilian) * New translations doorkeeper.en.yml (Vietnamese) * New translations en.yml (Galician) * New translations simple_form.en.yml (Galician) * New translations devise.en.yml (Galician) * New translations doorkeeper.en.yml (Galician) * New translations devise.en.yml (Icelandic) * New translations doorkeeper.en.yml (Icelandic) * New translations en.yml (Portuguese, Brazilian) * New translations simple_form.en.yml (Portuguese, Brazilian) * New translations activerecord.en.yml (Portuguese, Brazilian) * New translations doorkeeper.en.yml (Portuguese, Brazilian) * New translations activerecord.en.yml (Tamil) * New translations simple_form.en.yml (Indonesian) * New translations devise.en.yml (Indonesian) * New translations doorkeeper.en.yml (Indonesian) * New translations en.yml (Persian) * New translations simple_form.en.yml (Persian) * New translations activerecord.en.yml (Persian) * New translations devise.en.yml (Persian) * New translations doorkeeper.en.yml (Persian) * New translations en.yml (Tamil) * New translations simple_form.en.yml (Tamil) * New translations activerecord.en.yml (Croatian) * New translations devise.en.yml (Croatian) * New translations en.yml (English, United Kingdom) * New translations en.yml (Telugu) * New translations doorkeeper.en.yml (Hindi) * New translations devise.en.yml (English, United Kingdom) * New translations en.yml (Welsh) * New translations simple_form.en.yml (Welsh) * New translations activerecord.en.yml (Welsh) * New translations devise.en.yml (Welsh) * New translations doorkeeper.en.yml (Welsh) * New translations simple_form.en.yml (Esperanto) * New translations activerecord.en.yml (Esperanto) * New translations en.yml (Malay) * New translations devise.en.yml (Hindi) * New translations doorkeeper.en.yml (Croatian) * New translations en.yml (Estonian) * New translations en.yml (Norwegian Nynorsk) * New translations simple_form.en.yml (Norwegian Nynorsk) * New translations activerecord.en.yml (Norwegian Nynorsk) * New translations devise.en.yml (Norwegian Nynorsk) * New translations doorkeeper.en.yml (Norwegian Nynorsk) * New translations en.yml (Kazakh) * New translations simple_form.en.yml (Kazakh) * New translations activerecord.en.yml (Kazakh) * New translations devise.en.yml (Kazakh) * New translations doorkeeper.en.yml (Kazakh) * New translations simple_form.en.yml (Estonian) * New translations activerecord.en.yml (Hindi) * New translations activerecord.en.yml (Estonian) * New translations devise.en.yml (Estonian) * New translations doorkeeper.en.yml (Estonian) * New translations en.yml (Latvian) * New translations simple_form.en.yml (Latvian) * New translations activerecord.en.yml (Latvian) * New translations devise.en.yml (Latvian) * New translations doorkeeper.en.yml (Latvian) * New translations en.yml (Hindi) * New translations devise.en.yml (Esperanto) * New translations doorkeeper.en.yml (Esperanto) * New translations activerecord.en.yml (Sinhala) * New translations devise.en.yml (Sinhala) * New translations doorkeeper.en.yml (Sinhala) * New translations en.yml (Cornish) * New translations en.yml (Kannada) * New translations en.yml (Sinhala) * New translations devise.en.yml (Kannada) * New translations en.yml (Scottish Gaelic) * New translations simple_form.en.yml (Scottish Gaelic) * New translations activerecord.en.yml (Scottish Gaelic) * New translations devise.en.yml (Scottish Gaelic) * New translations doorkeeper.en.yml (Scottish Gaelic) * New translations en.yml (Asturian) * New translations simple_form.en.yml (Asturian) * New translations activerecord.en.yml (Asturian) * New translations simple_form.en.yml (Sinhala) * New translations doorkeeper.en.yml (Breton) * New translations en.yml (Uyghur) * New translations simple_form.en.yml (Tatar) * New translations en.yml (Chinese Traditional, Hong Kong) * New translations simple_form.en.yml (Chinese Traditional, Hong Kong) * New translations activerecord.en.yml (Chinese Traditional, Hong Kong) * New translations devise.en.yml (Chinese Traditional, Hong Kong) * New translations doorkeeper.en.yml (Chinese Traditional, Hong Kong) * New translations en.yml (Tatar) * New translations activerecord.en.yml (Tatar) * New translations devise.en.yml (Breton) * New translations devise.en.yml (Tatar) * New translations doorkeeper.en.yml (Tatar) * New translations en.yml (Malayalam) * New translations simple_form.en.yml (Malayalam) * New translations activerecord.en.yml (Malayalam) * New translations devise.en.yml (Malayalam) * New translations doorkeeper.en.yml (Malayalam) * New translations en.yml (Breton) * New translations simple_form.en.yml (Breton) * New translations activerecord.en.yml (Breton) * New translations devise.en.yml (Asturian) * New translations doorkeeper.en.yml (Asturian) * New translations simple_form.en.yml (Kabyle) * New translations activerecord.en.yml (Sardinian) * New translations devise.en.yml (Sardinian) * New translations doorkeeper.en.yml (Sardinian) * New translations en.yml (Sanskrit) * New translations en.yml (Kabyle) * New translations activerecord.en.yml (Kabyle) * New translations en.yml (Sardinian) * New translations devise.en.yml (Kabyle) * New translations doorkeeper.en.yml (Kabyle) * New translations en.yml (Ido) * New translations simple_form.en.yml (Ido) * New translations devise.en.yml (Ido) * New translations doorkeeper.en.yml (Ido) * New translations en.yml (Taigi) * New translations simple_form.en.yml (Sardinian) * New translations doorkeeper.en.yml (Corsican) * New translations en.yml (Occitan) * New translations simple_form.en.yml (Kurmanji (Kurdish)) * New translations simple_form.en.yml (Occitan) * New translations activerecord.en.yml (Occitan) * New translations devise.en.yml (Occitan) * New translations doorkeeper.en.yml (Occitan) * New translations en.yml (Serbian (Latin)) * New translations simple_form.en.yml (Serbian (Latin)) * New translations activerecord.en.yml (Serbian (Latin)) * New translations devise.en.yml (Serbian (Latin)) * New translations doorkeeper.en.yml (Serbian (Latin)) * New translations en.yml (Kurmanji (Kurdish)) * New translations activerecord.en.yml (Kurmanji (Kurdish)) * New translations devise.en.yml (Corsican) * New translations devise.en.yml (Kurmanji (Kurdish)) * New translations doorkeeper.en.yml (Kurmanji (Kurdish)) * New translations en.yml (Sorani (Kurdish)) * New translations simple_form.en.yml (Sorani (Kurdish)) * New translations activerecord.en.yml (Sorani (Kurdish)) * New translations devise.en.yml (Sorani (Kurdish)) * New translations doorkeeper.en.yml (Sorani (Kurdish)) * New translations en.yml (Corsican) * New translations simple_form.en.yml (Corsican) * New translations activerecord.en.yml (Corsican) * New translations en.yml (Silesian) * New translations en.yml (Standard Moroccan Tamazight) * New translations simple_form.en.yml (Standard Moroccan Tamazight) * New translations activerecord.en.yml (Standard Moroccan Tamazight) * New translations devise.en.yml (Standard Moroccan Tamazight) * New translations doorkeeper.en.yml (Standard Moroccan Tamazight) * New translations en.yml (Vietnamese) * New translations en.yml (Esperanto) * New translations simple_form.en.yml (Esperanto) * New translations simple_form.en.yml (Esperanto) * New translations en.yml (Esperanto) * New translations en.json (Ido) * New translations en.yml (German) * New translations en.yml (German) * New translations en.json (Hebrew) * New translations en.json (Hebrew) * New translations en.yml (Hebrew) * New translations activerecord.en.yml (German) * New translations en.yml (Hebrew) * New translations en.json (Scottish Gaelic) * New translations en.yml (Scottish Gaelic) * New translations simple_form.en.yml (Scottish Gaelic) * New translations activerecord.en.yml (Scottish Gaelic) * New translations doorkeeper.en.yml (Scottish Gaelic) * New translations en.yml (Chinese Simplified) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Simplified) * New translations en.json (Esperanto) * New translations en.yml (Esperanto) * New translations en.yml (Esperanto) * New translations en.json (Spanish) * New translations en.yml (German) * New translations simple_form.en.yml (German) * New translations activerecord.en.yml (German) * New translations en.yml (Thai) * New translations en.yml (Thai) * New translations en.json (Dutch) * New translations en.yml (Dutch) * New translations devise.en.yml (Dutch) * New translations en.json (Dutch) * New translations en.yml (Dutch) * New translations simple_form.en.yml (Dutch) * New translations en.json (Slovak) * New translations en.json (Finnish) * New translations en.json (Finnish) * New translations simple_form.en.yml (Finnish) * New translations activerecord.en.yml (Finnish) * New translations doorkeeper.en.yml (Finnish) * New translations en.yml (German) * New translations simple_form.en.yml (German) * New translations en.yml (German) * New translations en.yml (Russian) * New translations simple_form.en.yml (Russian) * New translations en.yml (Thai) * New translations en.yml (Thai) * New translations en.json (Norwegian Nynorsk) * New translations en.json (Norwegian Nynorsk) * New translations en.yml (Norwegian Nynorsk) * New translations simple_form.en.yml (Norwegian Nynorsk) * New translations activerecord.en.yml (Norwegian Nynorsk) * New translations devise.en.yml (Norwegian Nynorsk) * New translations doorkeeper.en.yml (Norwegian Nynorsk) * New translations en.yml (Norwegian Nynorsk) * New translations en.json (Kurmanji (Kurdish)) * New translations en.yml (Kurmanji (Kurdish)) * New translations activerecord.en.yml (Kurmanji (Kurdish)) * New translations en.yml (Kurmanji (Kurdish)) * New translations en.json (Albanian) * New translations en.yml (Thai) * New translations en.yml (Thai) * New translations en.json (Japanese) * New translations en.yml (Japanese) * New translations activerecord.en.yml (Japanese) * New translations en.yml (Japanese) * New translations en.yml (Esperanto) * New translations en.json (Slovak) * New translations en.yml (Slovak) * Run `yarn manage:translations` * Run `bundle exec i18n-tasks normalize` Co-authored-by: Yamagishi Kazutoshi --- app/javascript/mastodon/locales/af.json | 1 + app/javascript/mastodon/locales/ar.json | 1 + app/javascript/mastodon/locales/ast.json | 1 + app/javascript/mastodon/locales/bg.json | 1 + app/javascript/mastodon/locales/bn.json | 1 + app/javascript/mastodon/locales/br.json | 21 +-- app/javascript/mastodon/locales/ca.json | 5 +- app/javascript/mastodon/locales/ckb.json | 1 + app/javascript/mastodon/locales/co.json | 1 + app/javascript/mastodon/locales/cs.json | 1 + app/javascript/mastodon/locales/cy.json | 1 + app/javascript/mastodon/locales/da.json | 5 +- app/javascript/mastodon/locales/de.json | 5 +- .../mastodon/locales/defaultMessages.json | 12 ++ app/javascript/mastodon/locales/el.json | 5 +- app/javascript/mastodon/locales/en-GB.json | 1 + app/javascript/mastodon/locales/en.json | 1 + app/javascript/mastodon/locales/eo.json | 5 +- app/javascript/mastodon/locales/es-AR.json | 5 +- app/javascript/mastodon/locales/es-MX.json | 5 +- app/javascript/mastodon/locales/es.json | 5 +- app/javascript/mastodon/locales/et.json | 1 + app/javascript/mastodon/locales/eu.json | 1 + app/javascript/mastodon/locales/fa.json | 1 + app/javascript/mastodon/locales/fi.json | 67 ++++----- app/javascript/mastodon/locales/fr.json | 5 +- app/javascript/mastodon/locales/fy.json | 1 + app/javascript/mastodon/locales/ga.json | 1 + app/javascript/mastodon/locales/gd.json | 35 ++--- app/javascript/mastodon/locales/gl.json | 5 +- app/javascript/mastodon/locales/he.json | 7 +- app/javascript/mastodon/locales/hi.json | 1 + app/javascript/mastodon/locales/hr.json | 1 + app/javascript/mastodon/locales/hu.json | 5 +- app/javascript/mastodon/locales/hy.json | 1 + app/javascript/mastodon/locales/id.json | 1 + app/javascript/mastodon/locales/io.json | 5 +- app/javascript/mastodon/locales/is.json | 9 +- app/javascript/mastodon/locales/it.json | 5 +- app/javascript/mastodon/locales/ja.json | 5 +- app/javascript/mastodon/locales/ka.json | 1 + app/javascript/mastodon/locales/kab.json | 1 + app/javascript/mastodon/locales/kk.json | 1 + app/javascript/mastodon/locales/kn.json | 1 + app/javascript/mastodon/locales/ko.json | 5 +- app/javascript/mastodon/locales/ku.json | 5 +- app/javascript/mastodon/locales/kw.json | 1 + app/javascript/mastodon/locales/lt.json | 1 + app/javascript/mastodon/locales/lv.json | 5 +- app/javascript/mastodon/locales/mk.json | 1 + app/javascript/mastodon/locales/ml.json | 1 + app/javascript/mastodon/locales/mr.json | 1 + app/javascript/mastodon/locales/ms.json | 1 + app/javascript/mastodon/locales/nl.json | 19 +-- app/javascript/mastodon/locales/nn.json | 137 +++++++++--------- app/javascript/mastodon/locales/no.json | 1 + app/javascript/mastodon/locales/oc.json | 1 + app/javascript/mastodon/locales/pa.json | 1 + app/javascript/mastodon/locales/pl.json | 5 +- app/javascript/mastodon/locales/pt-BR.json | 1 + app/javascript/mastodon/locales/pt-PT.json | 5 +- app/javascript/mastodon/locales/ro.json | 1 + app/javascript/mastodon/locales/ru.json | 5 +- app/javascript/mastodon/locales/sa.json | 1 + app/javascript/mastodon/locales/sc.json | 1 + app/javascript/mastodon/locales/si.json | 1 + app/javascript/mastodon/locales/sk.json | 13 +- app/javascript/mastodon/locales/sl.json | 5 +- app/javascript/mastodon/locales/sq.json | 5 +- app/javascript/mastodon/locales/sr-Latn.json | 1 + app/javascript/mastodon/locales/sr.json | 1 + app/javascript/mastodon/locales/sv.json | 1 + app/javascript/mastodon/locales/szl.json | 1 + app/javascript/mastodon/locales/ta.json | 1 + app/javascript/mastodon/locales/tai.json | 1 + app/javascript/mastodon/locales/te.json | 1 + app/javascript/mastodon/locales/th.json | 9 +- app/javascript/mastodon/locales/tr.json | 5 +- app/javascript/mastodon/locales/tt.json | 1 + app/javascript/mastodon/locales/ug.json | 1 + app/javascript/mastodon/locales/uk.json | 5 +- app/javascript/mastodon/locales/ur.json | 1 + app/javascript/mastodon/locales/vi.json | 5 +- app/javascript/mastodon/locales/zgh.json | 1 + app/javascript/mastodon/locales/zh-CN.json | 7 +- app/javascript/mastodon/locales/zh-HK.json | 1 + app/javascript/mastodon/locales/zh-TW.json | 5 +- config/locales/activerecord.de.yml | 11 ++ config/locales/activerecord.es-MX.yml | 2 + config/locales/activerecord.fi.yml | 19 +++ config/locales/activerecord.gd.yml | 19 +++ config/locales/activerecord.ja.yml | 6 + config/locales/activerecord.ku.yml | 2 + config/locales/activerecord.nn.yml | 32 +++- config/locales/de.yml | 82 +++++++++++ config/locales/devise.en-GB.yml | 1 + config/locales/devise.ku.yml | 6 +- config/locales/devise.nl.yml | 2 +- config/locales/devise.nn.yml | 50 +++---- config/locales/doorkeeper.fi.yml | 8 + config/locales/doorkeeper.nn.yml | 33 ++++- config/locales/doorkeeper.th.yml | 2 +- config/locales/eo.yml | 71 ++++----- config/locales/es-MX.yml | 70 +++++++++ config/locales/gd.yml | 113 ++++++++++++++- config/locales/he.yml | 109 ++++++++++++-- config/locales/ja.yml | 38 +++++ config/locales/ku.yml | 11 ++ config/locales/lv.yml | 10 +- config/locales/nl.yml | 11 +- config/locales/nn.yml | 13 +- config/locales/ru.yml | 2 + config/locales/simple_form.de.yml | 25 ++++ config/locales/simple_form.eo.yml | 2 +- config/locales/simple_form.es-MX.yml | 1 + config/locales/simple_form.fi.yml | 20 +++ config/locales/simple_form.gd.yml | 31 ++++ config/locales/simple_form.nl.yml | 2 +- config/locales/simple_form.nn.yml | 18 +++ config/locales/simple_form.ru.yml | 8 +- config/locales/simple_form.th.yml | 12 +- config/locales/sk.yml | 31 ++++ config/locales/th.yml | 42 +++++- config/locales/vi.yml | 2 +- config/locales/zh-CN.yml | 2 + 125 files changed, 1115 insertions(+), 320 deletions(-) create mode 100644 config/locales/devise.en-GB.yml diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json index 942c8191fac..cb5a70dd489 100644 --- a/app/javascript/mastodon/locales/af.json +++ b/app/javascript/mastodon/locales/af.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Oops!", "announcement.announcement": "Aankondiging", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 13d6e4e7a75..45a5beede5a 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "المعذرة!", "announcement.announcement": "إعلان", "attachments_list.unprocessed": "(غير معالَج)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} في الأسبوع", "boost_modal.combo": "يُمكنك الضّغط على {combo} لتخطي هذا في المرة المُقبلة", "bundle_column_error.body": "لقد حدث خطأ ما أثناء تحميل هذا العنصر.", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 034885e816e..289e328f5ca 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "¡Meca!", "announcement.announcement": "Anunciu", "attachments_list.unprocessed": "(ensin procesar)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per selmana", "boost_modal.combo": "Pues primir {combo} pa saltar esto la próxima vegada", "bundle_column_error.body": "Asocedió daqué malo mentanto se cargaba esti componente.", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 89f2efc8553..160219e0999 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Опаа!", "announcement.announcement": "Оповестяване", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} на седмица", "boost_modal.combo": "Можете да натиснете {combo}, за да пропуснете това следващия път", "bundle_column_error.body": "Нещо се обърка при зареждането на този компонент.", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index 852c4c72048..d4626e463e1 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "ওহো!", "announcement.announcement": "ঘোষণা", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "প্রতি সপ্তাহে {count}", "boost_modal.combo": "পরেরবার আপনি {combo} টিপলে এটি আর আসবে না", "bundle_column_error.body": "এই অংশটি দেখতে যেয়ে কোনো সমস্যা হয়েছে।.", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index ac504c49c94..c784c697ae8 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -18,7 +18,7 @@ "account.followers": "Heulier·ezed·ien", "account.followers.empty": "Den na heul an implijer-mañ c'hoazh.", "account.followers_counter": "{count, plural, other{{counter} Heulier}}", - "account.following": "Following", + "account.following": "O heuliañ", "account.following_counter": "{count, plural, other {{counter} Heuliañ}}", "account.follows.empty": "An implijer·ez-mañ na heul den ebet.", "account.follows_you": "Ho heul", @@ -59,6 +59,7 @@ "alert.unexpected.title": "Hopala!", "announcement.announcement": "Kemenn", "attachments_list.unprocessed": "(ket meret)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} bep sizhun", "boost_modal.combo": "Ar wezh kentañ e c'halliot gwaskañ war {combo} evit tremen hebiou", "bundle_column_error.body": "Degouezhet ez eus bet ur fazi en ur gargañ an elfenn-mañ.", @@ -108,7 +109,7 @@ "compose_form.poll.switch_to_single": "Kemmañ ar sontadeg evit aotren un dibab hepken", "compose_form.publish": "Embann", "compose_form.publish_loud": "{publish} !", - "compose_form.save_changes": "Save changes", + "compose_form.save_changes": "Enrollañ ar cheñchamantoù", "compose_form.sensitive.hide": "Merkañ ar media evel kizidik", "compose_form.sensitive.marked": "Merket eo ar media evel kizidik", "compose_form.sensitive.unmarked": "N'eo ket merket ar media evel kizidik", @@ -149,7 +150,7 @@ "embed.instructions": "Enkorfit ar statud war ho lec'hienn en ur eilañ ar c'hod dindan.", "embed.preview": "Setu penaos e vo diskouezet:", "emoji_button.activity": "Obererezh", - "emoji_button.clear": "Clear", + "emoji_button.clear": "Diverkañ", "emoji_button.custom": "Kempennet", "emoji_button.flags": "Bannieloù", "emoji_button.food": "Boued hag Evaj", @@ -169,7 +170,7 @@ "empty_column.blocks": "N'eus ket bet berzet implijer·ez ganeoc'h c'hoazh.", "empty_column.bookmarked_statuses": "N'ho peus toud ebet enrollet en ho sinedoù c'hoazh. Pa vo ouzhpennet unan ganeoc'h e teuio war wel amañ.", "empty_column.community": "Goulo eo ar red-amzer lec'hel. Skrivit'ta un dra evit lakaat tan dezhi !", - "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.direct": "N'ho peus kemennad prevez ebet c'hoazh. Pa vo resevet pe kaset unan ganeoc'h e teuio war wel amañ.", "empty_column.domain_blocks": "N'eus domani kuzh ebet c'hoazh.", "empty_column.explore_statuses": "Nothing is trending right now. Check back later!", "empty_column.favourited_statuses": "N'ho peus toud muiañ-karet ebet c'hoazh. Pa vo lakaet unan ganeoc'h e vo diskouezet amañ.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Unan e mesk anezho", "hashtag.column_settings.tag_mode.none": "Hini ebet anezho", "hashtag.column_settings.tag_toggle": "Endelc'her gerioù-alc'hwez ouzhpenn evit ar bannad-mañ", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Heuliañ ar ger-klik", "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Paouez heuliañ ar ger-klik", "home.column_settings.basic": "Diazez", "home.column_settings.show_reblogs": "Diskouez ar skignadennoù", "home.column_settings.show_replies": "Diskouez ar respontoù", @@ -270,8 +271,8 @@ "lightbox.expand": "Ledanaat boest hewel ar skeudenn", "lightbox.next": "Da-heul", "lightbox.previous": "A-raok", - "limited_account_hint.action": "Show profile anyway", - "limited_account_hint.title": "This profile has been hidden by the moderators of your server.", + "limited_account_hint.action": "Diskouez an aelad memes tra", + "limited_account_hint.title": "Kuzhet eo bet an aelad-mañ gant habaskerien·ezed ho servijer.", "lists.account.add": "Ouzhpennañ d'al listenn", "lists.account.remove": "Lemel kuit eus al listenn", "lists.delete": "Dilemel al listenn", @@ -317,8 +318,8 @@ "navigation_bar.preferences": "Gwellvezioù", "navigation_bar.public_timeline": "Red-amzer kevreet", "navigation_bar.security": "Diogelroez", - "notification.admin.report": "{name} reported {target}", - "notification.admin.sign_up": "{name} signed up", + "notification.admin.report": "Disklêriet eo bet {target} gant {name}", + "notification.admin.sign_up": "{name} en·he deus lakaet e·hec'h anv", "notification.favourite": "{name} en/he deus lakaet ho toud en e/he muiañ-karet", "notification.follow": "heuliañ a ra {name} ac'hanoc'h", "notification.follow_request": "{name} en/he deus goulennet da heuliañ ac'hanoc'h", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index bc6029fe0c6..5549b395215 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Vaja!", "announcement.announcement": "Anunci", "attachments_list.unprocessed": "(sense processar)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per setmana", "boost_modal.combo": "Pots prémer {combo} per evitar-ho el pròxim cop", "bundle_column_error.body": "S'ha produït un error en carregar aquest component.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Qualsevol d’aquests", "hashtag.column_settings.tag_mode.none": "Cap d’aquests", "hashtag.column_settings.tag_toggle": "Inclou etiquetes addicionals per a aquesta columna", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Segueix etiqueta", "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Deixa de seguir etiqueta", "home.column_settings.basic": "Bàsic", "home.column_settings.show_reblogs": "Mostra els impulsos", "home.column_settings.show_replies": "Mostra les respostes", diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json index 80c5089aeb1..1addda37060 100644 --- a/app/javascript/mastodon/locales/ckb.json +++ b/app/javascript/mastodon/locales/ckb.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "تەححح!", "announcement.announcement": "بانگەواز", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} هەرهەفتە", "boost_modal.combo": "دەتوانیت دەست بنێی بە سەر {combo} بۆ بازدان لە جاری داهاتوو", "bundle_column_error.body": "هەڵەیەک ڕوویدا لەکاتی بارکردنی ئەم پێکهاتەیە.", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 2dbc256ee1e..63d21404623 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Uups!", "announcement.announcement": "Annunziu", "attachments_list.unprocessed": "(micca trattata)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per settimana", "boost_modal.combo": "Pudete appughjà nant'à {combo} per saltà quessa a prussima volta", "bundle_column_error.body": "C'hè statu un prublemu caricandu st'elementu.", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 2f667eae668..7ac077ae5ac 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Jejda!", "announcement.announcement": "Oznámení", "attachments_list.unprocessed": "(nezpracováno)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} za týden", "boost_modal.combo": "Příště můžete pro přeskočení stisknout {combo}", "bundle_column_error.body": "Při načítání této komponenty se něco pokazilo.", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 228fd280f5c..f6440db72f5 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Wps!", "announcement.announcement": "Cyhoeddiad", "attachments_list.unprocessed": "(heb eu prosesu)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} yr wythnos", "boost_modal.combo": "Mae modd gwasgu {combo} er mwyn sgipio hyn tro nesa", "bundle_column_error.body": "Aeth rhywbeth o'i le tra'n llwytho'r elfen hon.", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 0898b9081b9..ef7f85a3b83 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Ups!", "announcement.announcement": "Bekendtgørelse", "attachments_list.unprocessed": "(ubehandlet)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} pr. uge", "boost_modal.combo": "Du kan trykke på {combo} for at overspringe dette næste gang", "bundle_column_error.body": "Noget gik galt under indlæsningen af denne komponent.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Nogle af disse", "hashtag.column_settings.tag_mode.none": "Ingen af disse", "hashtag.column_settings.tag_toggle": "Inkludér ekstra tags for denne kolonne", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Følg hashtag", "hashtag.total_volume": "Samlet volumen {days, plural, one {den seneste dag} other {de seneste {days} dage}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Stop med at følge hashtag", "home.column_settings.basic": "Grundlæggende", "home.column_settings.show_reblogs": "Vis boosts", "home.column_settings.show_replies": "Vis svar", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index f2ec638c75d..8a9d0f06dc9 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Hoppla!", "announcement.announcement": "Ankündigung", "attachments_list.unprocessed": "(ausstehend)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} pro Woche", "boost_modal.combo": "Drücke {combo}, um dieses Fenster zu überspringen", "bundle_column_error.body": "Etwas ist beim Laden schiefgelaufen.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Eins von diesen", "hashtag.column_settings.tag_mode.none": "Keins von diesen", "hashtag.column_settings.tag_toggle": "Zusätzliche Hashtags für diese Spalte einfügen", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Hashtag folgen", "hashtag.total_volume": "Gesamtes Aufkommen {days, plural, one {am letzten Tag} other {in den letzten {days} Tagen}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Hashtag entfolgen", "home.column_settings.basic": "Einfach", "home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen", "home.column_settings.show_replies": "Antworten anzeigen", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index 9083963488d..760602f6ef5 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -1078,6 +1078,18 @@ { "defaultMessage": "Download file", "id": "video.download" + }, + { + "defaultMessage": "Hide audio", + "id": "audio.hide" + }, + { + "defaultMessage": "Sensitive content", + "id": "status.sensitive_warning" + }, + { + "defaultMessage": "Media hidden", + "id": "status.media_hidden" } ], "path": "app/javascript/mastodon/features/audio/index.json" diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 3cfce164746..de96147cf2d 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Εεπ!", "announcement.announcement": "Ανακοίνωση", "attachments_list.unprocessed": "(μη επεξεργασμένο)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} ανα εβδομάδα", "boost_modal.combo": "Μπορείς να πατήσεις {combo} για να το προσπεράσεις αυτό την επόμενη φορά", "bundle_column_error.body": "Κάτι πήγε στραβά ενώ φορτωνόταν αυτό το στοιχείο.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Οποιοδήποτε από αυτά", "hashtag.column_settings.tag_mode.none": "Κανένα από αυτά", "hashtag.column_settings.tag_toggle": "Προσθήκη επιπλέον ταμπελών για την κολώνα", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Παρακολούθηση ετικέτας", "hashtag.total_volume": "Συνολικός όγκος κατά την τελευταία {days, plural, one {ημέρα} other {{days} ημέρες}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Διακοπή παρακολούθησης ετικέτας", "home.column_settings.basic": "Βασικές ρυθμίσεις", "home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων", "home.column_settings.show_replies": "Εμφάνιση απαντήσεων", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 535c5852a48..988793357a6 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index ed7ea299267..22ecee8dfda 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 67872ff0ad5..a86842d087d 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Aj!", "announcement.announcement": "Anonco", "attachments_list.unprocessed": "(neprilaborita)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} semajne", "boost_modal.combo": "Vi povas premi {combo} por preterpasi sekvafoje", "bundle_column_error.body": "Io misfunkciis en la ŝargado de ĉi tiu elemento.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Iu ajn", "hashtag.column_settings.tag_mode.none": "Neniu", "hashtag.column_settings.tag_toggle": "Aldoni pliajn etikedojn por ĉi tiu kolumno", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Sekvi la kradvorton", "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Ne plu sekvi la kradvorton", "home.column_settings.basic": "Bazaj agordoj", "home.column_settings.show_reblogs": "Montri plusendojn", "home.column_settings.show_replies": "Montri respondojn", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 0eeb6e1ff56..9f2bbc2e4e3 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "¡Epa!", "announcement.announcement": "Anuncio", "attachments_list.unprocessed": "[sin procesar]", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} por semana", "boost_modal.combo": "Podés hacer clic en {combo} para saltar esto la próxima vez", "bundle_column_error.body": "Algo salió mal al cargar este componente.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Cualquiera de estas", "hashtag.column_settings.tag_mode.none": "Ninguna de estas", "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionales para esta columna", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Seguir etiqueta", "hashtag.total_volume": "Volumen total en el/los último/s {days, plural, one {día} other {{days} días}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Dejar de seguir etiqueta", "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar adhesiones", "home.column_settings.show_replies": "Mostrar respuestas", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 23a8d7247b8..d8854041b39 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "¡Ups!", "announcement.announcement": "Anuncio", "attachments_list.unprocessed": "(sin procesar)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} por semana", "boost_modal.combo": "Puedes hacer clic en {combo} para saltar este aviso la próxima vez", "bundle_column_error.body": "Algo salió mal al cargar este componente.", @@ -221,7 +222,7 @@ "hashtag.column_settings.tag_mode.none": "Ninguno de estos", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "hashtag.follow": "Follow hashtag", - "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.total_volume": "Volumen total en los últimos {days, plural, one {día} other {{days} días}}", "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar retoots", @@ -520,7 +521,7 @@ "timeline_hint.resources.followers": "Seguidores", "timeline_hint.resources.follows": "Seguidos", "timeline_hint.resources.statuses": "Toots más antiguos", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} en los últimos {days, plural, one {días} other {{days} días}}", "trends.trending_now": "Tendencia ahora", "ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.", "units.short.billion": "{count} MM", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 0ca847b351b..928b870e4f5 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "¡Ups!", "announcement.announcement": "Anuncio", "attachments_list.unprocessed": "(sin procesar)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} por semana", "boost_modal.combo": "Puedes hacer clic en {combo} para saltar este aviso la próxima vez", "bundle_column_error.body": "Algo salió mal al cargar este componente.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Cualquiera de estos", "hashtag.column_settings.tag_mode.none": "Ninguno de estos", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Seguir etiqueta", "hashtag.total_volume": "Volumen total en los últimos {days, plural, one {día} other {{days} días}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Dejar de seguir etiqueta", "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar retoots", "home.column_settings.show_replies": "Mostrar respuestas", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 2b6594b87ff..0bac1f3d3f5 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Oih!", "announcement.announcement": "Teadaanne", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} nädalas", "boost_modal.combo": "Võite vajutada {combo}, et see järgmine kord vahele jätta", "bundle_column_error.body": "Midagi läks valesti selle komponendi laadimisel.", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 44ab5f80eca..76c520a590a 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Ene!", "announcement.announcement": "Iragarpena", "attachments_list.unprocessed": "(prozesatu gabe)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} asteko", "boost_modal.combo": "{combo} sakatu dezakezu hurrengoan hau saltatzeko", "bundle_column_error.body": "Zerbait okerra gertatu da osagai hau kargatzean.", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 977b0aa7402..c3876e2e332 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "ای وای!", "announcement.announcement": "اعلامیه", "attachments_list.unprocessed": "(پردازش نشده)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} در هفته", "boost_modal.combo": "دکمهٔ {combo} را بزنید تا دیگر این را نبینید", "bundle_column_error.body": "هنگام بار کردن این مولفه، اشتباهی رخ داد.", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index faa322df983..46316731a24 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -18,7 +18,7 @@ "account.followers": "Seuraajat", "account.followers.empty": "Kukaan ei seuraa tätä käyttäjää vielä.", "account.followers_counter": "{count, plural, one {{counter} seuraaja} other {{counter} seuraajat}}", - "account.following": "Following", + "account.following": "Seurataan", "account.following_counter": "{count, plural, one {{counter} seuraa} other {{counter} seuraa}}", "account.follows.empty": "Tämä käyttäjä ei vielä seuraa ketään.", "account.follows_you": "Seuraa sinua", @@ -41,12 +41,12 @@ "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", "account.unblock": "Salli @{name}", "account.unblock_domain": "Salli {domain}", - "account.unblock_short": "Unblock", + "account.unblock_short": "Poista esto", "account.unendorse": "Poista suosittelu profiilistasi", "account.unfollow": "Lopeta seuraaminen", "account.unmute": "Poista käyttäjän @{name} mykistys", "account.unmute_notifications": "Poista mykistys käyttäjän @{name} ilmoituksilta", - "account.unmute_short": "Unmute", + "account.unmute_short": "Poista mykistys", "account_note.placeholder": "Lisää muistiinpano napsauttamalla", "admin.dashboard.daily_retention": "Käyttäjän säilyminen rekisteröitymisen jälkeiseen päivään mennessä", "admin.dashboard.monthly_retention": "Käyttäjän säilyminen rekisteröitymisen jälkeiseen kuukauteen mennessä", @@ -59,6 +59,7 @@ "alert.unexpected.title": "Hups!", "announcement.announcement": "Ilmoitus", "attachments_list.unprocessed": "(käsittelemätön)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} viikossa", "boost_modal.combo": "Ensi kerralla voit ohittaa tämän painamalla {combo}", "bundle_column_error.body": "Jokin meni vikaan komponenttia ladattaessa.", @@ -70,7 +71,7 @@ "column.blocks": "Estetyt käyttäjät", "column.bookmarks": "Kirjanmerkit", "column.community": "Paikallinen aikajana", - "column.direct": "Direct messages", + "column.direct": "Yksityisviestit", "column.directory": "Selaa profiileja", "column.domain_blocks": "Piilotetut verkkotunnukset", "column.favourites": "Suosikit", @@ -92,10 +93,10 @@ "community.column_settings.local_only": "Vain paikalliset", "community.column_settings.media_only": "Vain media", "community.column_settings.remote_only": "Vain etäkäyttö", - "compose.language.change": "Change language", - "compose.language.search": "Search languages...", + "compose.language.change": "Vaihda kieli", + "compose.language.search": "Hae kieliä...", "compose_form.direct_message_warning_learn_more": "Lisätietoja", - "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", + "compose_form.encryption_warning": "Mastodonin viestit eivät ole päästä päähän salattuja. Älä jaa arkaluonteisia tietoja Mastodonissa.", "compose_form.hashtag_warning": "Tätä julkaisua listata minkään hastagin alle, koska se on listaamaton. Ainoastaan julkisia julkaisuja etsiä hastageilla.", "compose_form.lock_disclaimer": "Tilisi ei ole {locked}. Kuka tahansa voi seurata tiliäsi ja nähdä vain seuraajille rajaamasi julkaisut.", "compose_form.lock_disclaimer.lock": "lukittu", @@ -106,7 +107,7 @@ "compose_form.poll.remove_option": "Poista tämä valinta", "compose_form.poll.switch_to_multiple": "Muuta kysely monivalinnaksi", "compose_form.poll.switch_to_single": "Muuta kysely sallimaan vain yksi valinta", - "compose_form.publish": "Publish", + "compose_form.publish": "Julkaise", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Tallenna muutokset", "compose_form.sensitive.hide": "{count, plural, one {Merkitse media arkaluontoiseksi} other {Merkitse media arkaluontoiseksi}}", @@ -149,7 +150,7 @@ "embed.instructions": "Upota julkaisu verkkosivullesi kopioimalla alla oleva koodi.", "embed.preview": "Se tulee näyttämään tältä:", "emoji_button.activity": "Aktiviteetit", - "emoji_button.clear": "Clear", + "emoji_button.clear": "Tyhjennä", "emoji_button.custom": "Mukautetut", "emoji_button.flags": "Liput", "emoji_button.food": "Ruoka ja juoma", @@ -169,7 +170,7 @@ "empty_column.blocks": "Et ole vielä estänyt yhtään käyttäjää.", "empty_column.bookmarked_statuses": "Et ole vielä lisännyt viestejä kirjanmerkkeihisi. Kun lisäät yhden, se näkyy tässä.", "empty_column.community": "Paikallinen aikajana on tyhjä. Kirjoita jotain julkista, niin homma lähtee käyntiin!", - "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.direct": "Sinulla ei ole vielä yksityisviestejä. Kun lähetät tai vastaanotat sellaisen, se näkyy tässä.", "empty_column.domain_blocks": "Yhtään verkko-osoitetta ei ole vielä estetty.", "empty_column.explore_statuses": "Mikään ei ole nyt trendi. Tarkista myöhemmin!", "empty_column.favourited_statuses": "Et ole vielä lisännyt viestejä kirjanmerkkeihisi. Kun lisäät yhden, se näkyy tässä.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Mikä tahansa näistä", "hashtag.column_settings.tag_mode.none": "Ei mitään näistä", "hashtag.column_settings.tag_toggle": "Sisällytä lisätunnisteet tähän sarakkeeseen", - "hashtag.follow": "Follow hashtag", - "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.follow": "Seuraa hashtagia", + "hashtag.total_volume": "Kokonaismäärä viimeiset {days, plural, one {päivä} other {{days} päivää}}", + "hashtag.unfollow": "Lopeta seuraaminen hashtagilla", "home.column_settings.basic": "Perusasetukset", "home.column_settings.show_reblogs": "Näytä buustaukset", "home.column_settings.show_replies": "Näytä vastaukset", @@ -237,7 +238,7 @@ "keyboard_shortcuts.column": "Kohdista sarakkeeseen", "keyboard_shortcuts.compose": "siirry tekstinsyöttöön", "keyboard_shortcuts.description": "Kuvaus", - "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.direct": "avaa yksityisviesti sarake", "keyboard_shortcuts.down": "Siirry listassa alaspäin", "keyboard_shortcuts.enter": "Avaa julkaisu", "keyboard_shortcuts.favourite": "Lisää suosikkeihin", @@ -270,8 +271,8 @@ "lightbox.expand": "Laajenna kuvan näkymälaatikko", "lightbox.next": "Seuraava", "lightbox.previous": "Edellinen", - "limited_account_hint.action": "Show profile anyway", - "limited_account_hint.title": "This profile has been hidden by the moderators of your server.", + "limited_account_hint.action": "Näytä profiili joka tapauksessa", + "limited_account_hint.title": "Tämä profiili on piilotettu serverisi valvojien toimesta.", "lists.account.add": "Lisää listaan", "lists.account.remove": "Poista listasta", "lists.delete": "Poista lista", @@ -298,11 +299,11 @@ "navigation_bar.bookmarks": "Kirjanmerkit", "navigation_bar.community_timeline": "Paikallinen aikajana", "navigation_bar.compose": "Luo uusi viesti", - "navigation_bar.direct": "Direct messages", + "navigation_bar.direct": "Yksityisviestit", "navigation_bar.discover": "Löydä uutta", "navigation_bar.domain_blocks": "Estetyt verkkotunnukset", "navigation_bar.edit_profile": "Muokkaa profiilia", - "navigation_bar.explore": "Explore", + "navigation_bar.explore": "Selaa", "navigation_bar.favourites": "Suosikit", "navigation_bar.filters": "Mykistetyt sanat", "navigation_bar.follow_requests": "Seuraamispyynnöt", @@ -317,7 +318,7 @@ "navigation_bar.preferences": "Asetukset", "navigation_bar.public_timeline": "Yleinen aikajana", "navigation_bar.security": "Turvallisuus", - "notification.admin.report": "{name} reported {target}", + "notification.admin.report": "{name} ilmoitti {target}", "notification.admin.sign_up": "{name} rekisteröitynyt", "notification.favourite": "{name} tykkäsi viestistäsi", "notification.follow": "{name} seurasi sinua", @@ -330,7 +331,7 @@ "notification.update": "{name} muokkasi viestiä", "notifications.clear": "Tyhjennä ilmoitukset", "notifications.clear_confirmation": "Haluatko varmasti poistaa kaikki ilmoitukset pysyvästi?", - "notifications.column_settings.admin.report": "New reports:", + "notifications.column_settings.admin.report": "Uudet raportit:", "notifications.column_settings.admin.sign_up": "Uudet kirjautumiset:", "notifications.column_settings.alert": "Työpöytäilmoitukset", "notifications.column_settings.favourite": "Tykkäykset:", @@ -377,12 +378,12 @@ "poll_button.remove_poll": "Poista kysely", "privacy.change": "Muuta julkaisun näkyvyyttä", "privacy.direct.long": "Julkaise vain mainituille käyttäjille", - "privacy.direct.short": "Direct", + "privacy.direct.short": "Vain mainitut henkilöt", "privacy.private.long": "Julkaise vain seuraajille", - "privacy.private.short": "Followers-only", - "privacy.public.long": "Visible for all", + "privacy.private.short": "Vain seuraajat", + "privacy.public.long": "Näkyvissä kaikille", "privacy.public.short": "Julkinen", - "privacy.unlisted.long": "Visible for all, but opted-out of discovery features", + "privacy.unlisted.long": "Näkyvissä kaikille, mutta jättäen pois hakemisen mahdollisuus", "privacy.unlisted.short": "Listaamaton julkinen", "refresh": "Päivitä", "regeneration_indicator.label": "Ladataan…", @@ -436,11 +437,11 @@ "report.thanks.title_actionable": "Kiitos raportista, tutkimme asiaa.", "report.unfollow": "Lopeta seuraaminen @{name}", "report.unfollow_explanation": "Seuraat tätä tiliä. Jotta et enää näkisi heidän kirjoituksiaan, lopeta niiden seuraaminen.", - "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", - "report_notification.categories.other": "Other", - "report_notification.categories.spam": "Spam", - "report_notification.categories.violation": "Rule violation", - "report_notification.open": "Open report", + "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} viestiä}} liitteenä", + "report_notification.categories.other": "Muu", + "report_notification.categories.spam": "Roskaposti", + "report_notification.categories.violation": "Sääntöjen rikkominen", + "report_notification.open": "Avaa raportti", "search.placeholder": "Hae", "search_popout.search_format": "Tarkennettu haku", "search_popout.tips.full_text": "Tekstihaku listaa tilapäivitykset, jotka olet kirjoittanut, lisännyt suosikkeihisi, boostannut tai joissa sinut mainitaan, sekä tekstin sisältävät käyttäjänimet, nimimerkit ja hastagit.", @@ -471,7 +472,7 @@ "status.embed": "Upota", "status.favourite": "Tykkää", "status.filtered": "Suodatettu", - "status.hide": "Hide toot", + "status.hide": "Piilota toot", "status.history.created": "{name} luotu {date}", "status.history.edited": "{name} muokkasi {date}", "status.load_more": "Lataa lisää", @@ -495,7 +496,7 @@ "status.report": "Raportoi @{name}", "status.sensitive_warning": "Arkaluontoista sisältöä", "status.share": "Jaa", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Näytä joka tapauksessa", "status.show_less": "Näytä vähemmän", "status.show_less_all": "Näytä vähemmän kaikista", "status.show_more": "Näytä lisää", @@ -520,7 +521,7 @@ "timeline_hint.resources.followers": "Seuraajat", "timeline_hint.resources.follows": "Seuraa", "timeline_hint.resources.statuses": "Vanhemmat julkaisut", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} viimeinen {days, plural, one {päivä} other {{days} päivää}}", "trends.trending_now": "Suosittua nyt", "ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.", "units.short.billion": "{count} mrd.", @@ -532,7 +533,7 @@ "upload_error.poll": "Tiedon lataaminen ei ole sallittua kyselyissä.", "upload_form.audio_description": "Kuvaile kuulovammaisille", "upload_form.description": "Anna kuvaus näkörajoitteisia varten", - "upload_form.description_missing": "No description added", + "upload_form.description_missing": "Kuvausta ei ole lisätty", "upload_form.edit": "Muokkaa", "upload_form.thumbnail": "Vaihda pikkukuva", "upload_form.undo": "Peru", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 18b889e9b4c..b6b8e5d6f4a 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Oups !", "announcement.announcement": "Annonce", "attachments_list.unprocessed": "(non traité)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} par semaine", "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour passer ceci la prochaine fois", "bundle_column_error.body": "Une erreur s’est produite lors du chargement de ce composant.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Au moins un de ces éléments", "hashtag.column_settings.tag_mode.none": "Aucun de ces éléments", "hashtag.column_settings.tag_toggle": "Inclure des hashtags additionnels pour cette colonne", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Suivre le hashtag", "hashtag.total_volume": "Volume total {days, plural, one {des dernières 24h} other {des {days} derniers jours}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Ne plus suivre le hashtag", "home.column_settings.basic": "Basique", "home.column_settings.show_reblogs": "Afficher les partages", "home.column_settings.show_replies": "Afficher les réponses", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index ea5a61cdc23..2ff93a6e3f2 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(net ferwurke)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 1dd7e635f40..6a7aff2afe2 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Hiúps!", "announcement.announcement": "Fógra", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "Is féidir leat brúigh {combo} chun é seo a scipeáil an chéad uair eile", "bundle_column_error.body": "Something went wrong while loading this component.", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index f7ffe0d87dc..cfaa429a7ba 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Oich!", "announcement.announcement": "Brath-fios", "attachments_list.unprocessed": "(gun phròiseasadh)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} san t-seachdain", "boost_modal.combo": "Brùth air {combo} nam b’ fheàrr leat leum a ghearradh thar seo an ath-thuras", "bundle_column_error.body": "Chaidh rudeigin cearr nuair a dh’fheuch sinn ris a’ cho-phàirt seo a luchdadh.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Gin sam bith dhiubh", "hashtag.column_settings.tag_mode.none": "Às aonais gin sam bith dhiubh", "hashtag.column_settings.tag_toggle": "Gabh a-steach barrachd tagaichean sa cholbh seo", - "hashtag.follow": "Follow hashtag", - "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.follow": "Lean air an taga hais", + "hashtag.total_volume": "An t-iomlan sna {days, plural, one {{days} latha} two {{days} latha} few {{days} làithean} other {{days} latha}} seo chaidh", + "hashtag.unfollow": "Na lean air an taga hais tuilleadh", "home.column_settings.basic": "Bunasach", "home.column_settings.show_reblogs": "Seall na brosnachaidhean", "home.column_settings.show_replies": "Seall na freagairtean", @@ -317,7 +318,7 @@ "navigation_bar.preferences": "Roghainnean", "navigation_bar.public_timeline": "Loidhne-ama cho-naisgte", "navigation_bar.security": "Tèarainteachd", - "notification.admin.report": "{name} reported {target}", + "notification.admin.report": "Rinn {name} mu {target}", "notification.admin.sign_up": "Chlàraich {name}", "notification.favourite": "Is annsa le {name} am post agad", "notification.follow": "Tha {name} a’ leantainn ort a-nis", @@ -330,7 +331,7 @@ "notification.update": "Dheasaich {name} post", "notifications.clear": "Falamhaich na brathan", "notifications.clear_confirmation": "A bheil thu cinnteach gu bheil thu airson na brathan uile agad fhalamhachadh gu buan?", - "notifications.column_settings.admin.report": "New reports:", + "notifications.column_settings.admin.report": "Gearanan ùra:", "notifications.column_settings.admin.sign_up": "Clàraidhean ùra:", "notifications.column_settings.alert": "Brathan deasga", "notifications.column_settings.favourite": "Na h-annsachdan:", @@ -388,11 +389,11 @@ "regeneration_indicator.label": "’Ga luchdadh…", "regeneration_indicator.sublabel": "Tha inbhir na dachaigh agad ’ga ullachadh!", "relative_time.days": "{number}l", - "relative_time.full.days": "{count, plural, one {# latha} two {# latha} few {# làithean} other {# latha}} air ais", - "relative_time.full.hours": "{count, plural, one {# uair a thìde} two {# uair a thìde} few {# uairean a thìde} other {# uair a thìde}} air ais", + "relative_time.full.days": "{number, plural, one {# latha} two {# latha} few {# làithean} other {# latha}} air ais", + "relative_time.full.hours": "{number, plural, one {# uair a thìde} two {# uair a thìde} few {# uairean a thìde} other {# uair a thìde}} air ais", "relative_time.full.just_now": "an-dràsta fhèin", - "relative_time.full.minutes": "{count, plural, one {# mhionaid} two {# mhionaid} few {# mionaidean} other {# mionaid}} air ais", - "relative_time.full.seconds": "{count, plural, one {# diog} two {# dhiog} few {# diogan} other {# diog}} air ais", + "relative_time.full.minutes": "{number, plural, one {# mhionaid} two {# mhionaid} few {# mionaidean} other {# mionaid}} air ais", + "relative_time.full.seconds": "{number, plural, one {# diog} two {# dhiog} few {# diogan} other {# diog}} air ais", "relative_time.hours": "{number}u", "relative_time.just_now": "an-dràsta", "relative_time.minutes": "{number}m", @@ -436,11 +437,11 @@ "report.thanks.title_actionable": "Mòran taing airson a’ ghearain, bheir sinn sùil air.", "report.unfollow": "Na lean air @{name} tuilleadh", "report.unfollow_explanation": "Tha thu a’ leantainn air a’ chunntas seo. Sgur de leantainn orra ach nach fhaic thu na puist aca air inbhir na dachaigh agad.", - "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", - "report_notification.categories.other": "Other", - "report_notification.categories.spam": "Spam", - "report_notification.categories.violation": "Rule violation", - "report_notification.open": "Open report", + "report_notification.attached_statuses": "Tha {count, plural, one {{counter} phost} two {{counter} phost} few {{counter} postaichean} other {{counter} post}} ceangailte ris", + "report_notification.categories.other": "Eile", + "report_notification.categories.spam": "Spama", + "report_notification.categories.violation": "Briseadh riaghailte", + "report_notification.open": "Fosgail an gearan", "search.placeholder": "Lorg", "search_popout.search_format": "Fòrmat adhartach an luirg", "search_popout.tips.full_text": "Bheir teacsa sìmplidh dhut na postaichean a sgrìobh thu, a tha nan annsachdan dhut, a bhrosnaich thu no san deach iomradh a thoirt ort cho math ri ainmean-cleachdaiche, ainmean taisbeanaidh agus tagaichean hais a mhaidsicheas.", @@ -471,7 +472,7 @@ "status.embed": "Leabaich", "status.favourite": "Cuir ris na h-annsachdan", "status.filtered": "Criathraichte", - "status.hide": "Hide toot", + "status.hide": "Falaich am post", "status.history.created": "Chruthaich {name} {date} e", "status.history.edited": "Dheasaich {name} {date} e", "status.load_more": "Luchdaich barrachd dheth", @@ -495,7 +496,7 @@ "status.report": "Dèan gearan mu @{name}", "status.sensitive_warning": "Susbaint fhrionasach", "status.share": "Co-roinn", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Seall e co-dhiù", "status.show_less": "Seall nas lugha dheth", "status.show_less_all": "Seall nas lugha dhen a h-uile", "status.show_more": "Seall barrachd dheth", @@ -520,7 +521,7 @@ "timeline_hint.resources.followers": "Luchd-leantainn", "timeline_hint.resources.follows": "A’ leantainn air", "timeline_hint.resources.statuses": "Postaichean nas sine", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} neach} two {{counter} neach} few {{counter} daoine} other {{counter} duine}} sna {days, plural, one {{days} latha} two {{days} latha} few {{days} làithean} other {{days} latha}} seo chaidh", "trends.trending_now": "A’ treandadh an-dràsta", "ui.beforeunload": "Caillidh tu an dreachd agad ma dh’fhàgas tu Mastodon an-dràsta.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 56ceb54e892..adef612c691 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Vaites!", "announcement.announcement": "Anuncio", "attachments_list.unprocessed": "(sen procesar)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} por semana", "boost_modal.combo": "Preme {combo} para ignorar isto na seguinte vez", "bundle_column_error.body": "Ocorreu un erro ó cargar este compoñente.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Calquera destes", "hashtag.column_settings.tag_mode.none": "Ningún destes", "hashtag.column_settings.tag_toggle": "Incluír cancelos adicionais para esta columna", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Seguir cancelo", "hashtag.total_volume": "Cantidade total {days, plural, one {no último día} other {nos {days} últimos días}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Deixar de seguir cancelo", "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Amosar compartidos", "home.column_settings.show_replies": "Amosar respostas", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 4cb3380b4dd..c0c0b57f144 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "אופס!", "announcement.announcement": "הכרזה", "attachments_list.unprocessed": "(לא מעובד)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} לשבוע", "boost_modal.combo": "ניתן להקיש {combo} כדי לדלג בפעם הבאה", "bundle_column_error.body": "משהו השתבש בעת טעינת הרכיב הזה.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "כל אלה", "hashtag.column_settings.tag_mode.none": "אף אחד מאלה", "hashtag.column_settings.tag_toggle": "כלול תגיות נוספות בטור זה", - "hashtag.follow": "Follow hashtag", - "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.follow": "מעקב אחר תגית", + "hashtag.total_volume": "נפח כולל ב {days, plural, one {יום} other {{days} ימים}} האחרונים", + "hashtag.unfollow": "ביטול מעקב אחר תגית", "home.column_settings.basic": "למתחילים", "home.column_settings.show_reblogs": "הצגת הדהודים", "home.column_settings.show_replies": "הצגת תגובות", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index aa76ebf101d..9f35187f22c 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "उफ़!", "announcement.announcement": "घोषणा", "attachments_list.unprocessed": "(असंसाधित)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} हर सप्ताह", "boost_modal.combo": "अगली बार स्किप करने के लिए आप {combo} दबा सकते है", "bundle_column_error.body": "इस कॉम्पोनेन्ट को लोड करते वक्त कुछ गलत हो गया", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index fe0379f0af5..9f2df3c7194 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Ups!", "announcement.announcement": "Najava", "attachments_list.unprocessed": "(neobrađeno)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} tjedno", "boost_modal.combo": "Možete pritisnuti {combo} kako biste preskočili ovo sljedeći put", "bundle_column_error.body": "Nešto je pošlo po zlu tijekom učitavanja ove komponente.", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index def9348ec89..5b2b981725c 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Hoppá!", "announcement.announcement": "Közlemény", "attachments_list.unprocessed": "(feldolgozatlan)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} hetente", "boost_modal.combo": "Hogy átugord ezt következő alkalommal, használd {combo}", "bundle_column_error.body": "Valami hiba történt a komponens betöltése közben.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Bármelyik", "hashtag.column_settings.tag_mode.none": "Egyik sem", "hashtag.column_settings.tag_toggle": "Új címkék felvétele ehhez az oszlophoz", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Hashtag követése", "hashtag.total_volume": "Teljes mennyiség az elmúlt {days, plural, one {napban} other {{days} napban}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Hashtag követésének megszüntetése", "home.column_settings.basic": "Alapvető", "home.column_settings.show_reblogs": "Megtolások mutatása", "home.column_settings.show_replies": "Válaszok megjelenítése", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 9aa8ec4c37a..f552e345c17 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Վա՜յ", "announcement.announcement": "Յայտարարութիւններ", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "շաբաթը՝ {count}", "boost_modal.combo": "Կարող ես սեղմել {combo}՝ սա յաջորդ անգամ բաց թողնելու համար", "bundle_column_error.body": "Այս բաղադրիչը բեռնելու ընթացքում ինչ֊որ բան խափանուեց։", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index effc01737ab..2a081cfbbd8 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Ups!", "announcement.announcement": "Pengumuman", "attachments_list.unprocessed": "(tidak diproses)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per minggu", "boost_modal.combo": "Anda dapat menekan {combo} untuk melewati ini", "bundle_column_error.body": "Kesalahan terjadi saat memuat komponen ini.", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index d546871177b..1d0a909a234 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Problemo!", "announcement.announcement": "Anunco", "attachments_list.unprocessed": "(neprocedita)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} dum singla semano", "boost_modal.combo": "Tu povas presar sur {combo} por omisar co en la venonta foyo", "bundle_column_error.body": "Nulo ne functionis dum chargar ca kompozaj.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Irga co", "hashtag.column_settings.tag_mode.none": "Nula co", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Sequez hashtago", "hashtag.total_volume": "Sumo en antea {days, plural,one {dio} other {{days} dii}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Desequez hashtago", "home.column_settings.basic": "Simpla", "home.column_settings.show_reblogs": "Montrar repeti", "home.column_settings.show_replies": "Montrar respondi", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index e12bfe30564..d74d45a7647 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Úbbs!", "announcement.announcement": "Auglýsing", "attachments_list.unprocessed": "(óunnið)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} á viku", "boost_modal.combo": "Þú getur ýtt á {combo} til að sleppa þessu næst", "bundle_column_error.body": "Eitthvað fór úrskeiðis við að hlaða inn þessari einingu.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Hvað sem er af þessu", "hashtag.column_settings.tag_mode.none": "Ekkert af þessu", "hashtag.column_settings.tag_toggle": "Taka með viðbótarmerki fyrir þennan dálk", - "hashtag.follow": "Follow hashtag", - "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.follow": "Fylgjast með myllumerki", + "hashtag.total_volume": "Heildarmagn {days, plural, one {síðasta {days} sólarhring} other {síðustu {days} daga}}", + "hashtag.unfollow": "Hætta að fylgjast með myllumerki", "home.column_settings.basic": "Einfalt", "home.column_settings.show_reblogs": "Sýna endurbirtingar", "home.column_settings.show_replies": "Birta svör", @@ -520,7 +521,7 @@ "timeline_hint.resources.followers": "Fylgjendur", "timeline_hint.resources.follows": "Fylgist með", "timeline_hint.resources.statuses": "Eldri færslur", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} aðili} other {{counter} manns}} {days, plural, one {síðasta sólarhringinn} other {síðustu {days} daga}}", "trends.trending_now": "Í umræðunni núna", "ui.beforeunload": "Drögin tapast ef þú ferð út úr Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index da29dfde141..7a99d031ece 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Oops!", "announcement.announcement": "Annuncio", "attachments_list.unprocessed": "(non elaborato)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per settimana", "boost_modal.combo": "Puoi premere {combo} per saltare questo passaggio la prossima volta", "bundle_column_error.body": "E' avvenuto un errore durante il caricamento di questo componente.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Uno o più di questi", "hashtag.column_settings.tag_mode.none": "Nessuno di questi", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Segui l'hashtag", "hashtag.total_volume": "Volume totale {days, plural, one {nell'ultimo giorno} other {negli ultimi {days} giorni}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Cessa di seguire l'hashtag", "home.column_settings.basic": "Semplice", "home.column_settings.show_reblogs": "Mostra condivisioni", "home.column_settings.show_replies": "Mostra risposte", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 35c7d916e6a..070248d10f4 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "エラー!", "announcement.announcement": "お知らせ", "attachments_list.unprocessed": "(未処理)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} 回 / 週", "boost_modal.combo": "次からは{combo}を押せばスキップできます", "bundle_column_error.body": "コンポーネントの読み込み中に問題が発生しました。", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "いずれかを含む", "hashtag.column_settings.tag_mode.none": "これらを除く", "hashtag.column_settings.tag_toggle": "このカラムに追加のタグを含める", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "ハッシュタグをフォローする", "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "ハッシュタグのフォローを解除", "home.column_settings.basic": "基本設定", "home.column_settings.show_reblogs": "ブースト表示", "home.column_settings.show_replies": "返信表示", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index a01b2290c64..bafaca65e66 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "უპს!", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "კვირაში {count}", "boost_modal.combo": "შეგიძლიათ დააჭიროთ {combo}-ს რათა შემდეგ ჯერზე გამოტოვოთ ეს", "bundle_column_error.body": "ამ კომპონენტის ჩატვირთვისას რაღაც აირია.", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index d5ab20008e6..ff93fc968c0 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Ayhuh!", "announcement.announcement": "Ulɣu", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} i yimalas", "boost_modal.combo": "Tzemreḍ ad tetekkiḍ ɣef {combo} akken ad tessurfeḍ aya tikelt-nniḍen", "bundle_column_error.body": "Tella-d kra n tuccḍa mi d-yettali ugbur-agi.", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index 5334331c4b2..f15dc88a0e8 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Өй!", "announcement.announcement": "Хабарландыру", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} аптасына", "boost_modal.combo": "Келесіде өткізіп жіберу үшін басыңыз {combo}", "bundle_column_error.body": "Бұл компонентті жүктеген кезде бір қате пайда болды.", diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json index bde13c04c47..1e81ab32a19 100644 --- a/app/javascript/mastodon/locales/kn.json +++ b/app/javascript/mastodon/locales/kn.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "ಅಯ್ಯೋ!", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 30cf08ff2da..d8eca4ee0b8 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "앗!", "announcement.announcement": "공지사항", "attachments_list.unprocessed": "(처리 안 됨)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "주간 {count}회", "boost_modal.combo": "다음엔 {combo}를 눌러서 이 과정을 건너뛸 수 있습니다", "bundle_column_error.body": "컴포넌트를 불러오는 과정에서 문제가 발생했습니다.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "아무것이든", "hashtag.column_settings.tag_mode.none": "이것들을 제외하고", "hashtag.column_settings.tag_toggle": "추가 해시태그를 이 컬럼에 추가합니다", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "해시태그 팔로우", "hashtag.total_volume": "최근 {days}일 동안의 총 사용량", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "해시태그 팔로우 해제", "home.column_settings.basic": "기본", "home.column_settings.show_reblogs": "부스트 표시", "home.column_settings.show_replies": "답글 표시", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index d8c4151d3f4..740bcd917c4 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Wey li min!", "announcement.announcement": "Daxuyanî", "attachments_list.unprocessed": "(bêpêvajo)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "Her hefte {count}", "boost_modal.combo": "Ji bo derbas bî carekî din de pêlê {combo} bike", "bundle_column_error.body": "Di dema barkirina vê hêmanê de tiştek çewt çê bû.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Yek ji van", "hashtag.column_settings.tag_mode.none": "Ne yek ji van", "hashtag.column_settings.tag_toggle": "Ji bo vê stûnê hin pêvekan tevlî bike", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Hashtagê bişopîne", "hashtag.total_volume": "Tevahiya giraniyê dawîn di {days, plural, one {roj} other {{days} roj}} de", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Hashtagê neşopîne", "home.column_settings.basic": "Bingehîn", "home.column_settings.show_reblogs": "Bilindkirinan nîşan bike", "home.column_settings.show_replies": "Bersivan nîşan bide", diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json index 988655921b6..ad0e1ae3162 100644 --- a/app/javascript/mastodon/locales/kw.json +++ b/app/javascript/mastodon/locales/kw.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Oups!", "announcement.announcement": "Deklaryans", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} an seythen", "boost_modal.combo": "Hwi a yll gwaska {combo} dhe woheles hemma an nessa tro", "bundle_column_error.body": "Neppyth eth yn kamm ow karga'n elven ma.", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 3df14c833ff..a3837423007 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Oi!", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 1cb0095b147..60b6e75da3b 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Ups!", "announcement.announcement": "Paziņojums", "attachments_list.unprocessed": "(neapstrādāti)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} nedēļā", "boost_modal.combo": "Nospied {combo} lai izlaistu šo nākamreiz", "bundle_column_error.body": "Kaut kas nogāja greizi ielādējot šo komponenti.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Kāds no šiem", "hashtag.column_settings.tag_mode.none": "Neviens no šiem", "hashtag.column_settings.tag_toggle": "Iekļaut šai kolonnai papildu tagus", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Seko mirkļbirkai", "hashtag.total_volume": "Kopējais apjoms par {days, plural, one {dienu} other {{days} dienām}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Pārstāj sekot mirkļbirkai", "home.column_settings.basic": "Pamata", "home.column_settings.show_reblogs": "Rādīt palielinājumus", "home.column_settings.show_replies": "Rādīt atbildes", diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json index faf4174f9c5..a00e1762c0f 100644 --- a/app/javascript/mastodon/locales/mk.json +++ b/app/javascript/mastodon/locales/mk.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Упс!", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} неделно", "boost_modal.combo": "Кликни {combo} за да го прескокниш ова нареден пат", "bundle_column_error.body": "Се случи проблем при вчитувањето.", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 175316e84d2..2e4aac762be 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "ശ്ശോ!", "announcement.announcement": "അറിയിപ്പ്", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "ആഴ്ച തോറും {count}", "boost_modal.combo": "അടുത്ത തവണ ഇത് ഒഴിവാക്കുവാൻ {combo} ഞെക്കാവുന്നതാണ്", "bundle_column_error.body": "ഈ ഘടകം പ്രദശിപ്പിക്കുമ്പോൾ എന്തോ കുഴപ്പം സംഭവിച്ചു.", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index 762d94c4006..3ce4fc0f973 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "अरेरे!", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} प्रतिसप्ताह", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "हा घटक लोड करतांना काहीतरी चुकले आहे.", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 13a1e334513..70683ef42ad 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Alamak!", "announcement.announcement": "Pengumuman", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} seminggu", "boost_modal.combo": "Anda boleh tekan {combo} untuk melangkauinya pada waktu lain", "bundle_column_error.body": "Terdapat kesilapan ketika memuatkan komponen ini.", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 94cbd5bcd7e..64c747aa16a 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -51,7 +51,7 @@ "admin.dashboard.daily_retention": "Retentiegraad van gebruikers per dag, vanaf registratie", "admin.dashboard.monthly_retention": "Retentiegraad van gebruikers per maand, vanaf registratie", "admin.dashboard.retention.average": "Gemiddelde", - "admin.dashboard.retention.cohort": "Aanmeldingsmaand", + "admin.dashboard.retention.cohort": "Maand van registratie", "admin.dashboard.retention.cohort_size": "Nieuwe gebruikers", "alert.rate_limited.message": "Probeer het nog een keer na {retry_time, time, medium}.", "alert.rate_limited.title": "Beperkt te gebruiken", @@ -59,6 +59,7 @@ "alert.unexpected.title": "Oeps!", "announcement.announcement": "Mededeling", "attachments_list.unprocessed": "(niet verwerkt)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "Je kunt {combo} klikken om dit de volgende keer over te slaan", "bundle_column_error.body": "Tijdens het laden van dit onderdeel is er iets fout gegaan.", @@ -172,8 +173,8 @@ "empty_column.direct": "Je hebt nog geen directe berichten. Wanneer je er een verzend of ontvangt, komt deze hier te staan.", "empty_column.domain_blocks": "Er zijn nog geen geblokkeerde domeinen.", "empty_column.explore_statuses": "Momenteel zijn er geen trends. Kom later terug!", - "empty_column.favourited_statuses": "Jij hebt nog geen favoriete berichten. Wanneer je er een aan jouw favorieten toevoegt, valt deze hier te zien.", - "empty_column.favourites": "Niemand heeft dit bericht nog aan diens favorieten toegevoegd. Wanneer iemand dit doet, valt dat hier te zien.", + "empty_column.favourited_statuses": "Jij hebt nog geen favoriete berichten. Wanneer je een bericht als favoriet markeert, valt deze hier te zien.", + "empty_column.favourites": "Niemand heeft dit bericht nog als favoriet gemarkeerd. Wanneer iemand dit doet, valt dat hier te zien.", "empty_column.follow_recommendations": "Het lijkt er op dat er geen aanbevelingen voor jou aangemaakt kunnen worden. Je kunt proberen te zoeken naar mensen die je wellicht kent, zoeken op hashtags, de lokale en globale tijdlijnen bekijken of de gebruikersgids doorbladeren.", "empty_column.follow_requests": "Jij hebt nog enkel volgverzoek ontvangen. Wanneer je er eentje ontvangt, valt dat hier te zien.", "empty_column.hashtag": "Er is nog niks te vinden onder deze hashtag.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Een van deze", "hashtag.column_settings.tag_mode.none": "Geen van deze", "hashtag.column_settings.tag_toggle": "Additionele tags aan deze kolom toevoegen", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Hashtag volgen", "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Hashtag ontvolgen", "home.column_settings.basic": "Algemeen", "home.column_settings.show_reblogs": "Boosts tonen", "home.column_settings.show_replies": "Reacties tonen", @@ -240,7 +241,7 @@ "keyboard_shortcuts.direct": "Directe berichten tonen", "keyboard_shortcuts.down": "Naar beneden in de lijst bewegen", "keyboard_shortcuts.enter": "Volledig bericht tonen", - "keyboard_shortcuts.favourite": "Aan jouw favorieten toevoegen", + "keyboard_shortcuts.favourite": "Als favoriet markeren", "keyboard_shortcuts.favourites": "Favorieten tonen", "keyboard_shortcuts.federated": "Globale tijdlijn tonen", "keyboard_shortcuts.heading": "Sneltoetsen", @@ -318,8 +319,8 @@ "navigation_bar.public_timeline": "Globale tijdlijn", "navigation_bar.security": "Beveiliging", "notification.admin.report": "{name} heeft {target} geapporteerd", - "notification.admin.sign_up": "{name} heeft zich aangemeld", - "notification.favourite": "{name} voegde jouw bericht als favoriet toe", + "notification.admin.sign_up": "{name} heeft zich geregistreerd", + "notification.favourite": "{name} markeerde jouw bericht als favoriet", "notification.follow": "{name} volgt jou nu", "notification.follow_request": "{name} wil jou graag volgen", "notification.mention": "{name} vermeldde jou", @@ -331,7 +332,7 @@ "notifications.clear": "Meldingen verwijderen", "notifications.clear_confirmation": "Weet je het zeker dat je al jouw meldingen wilt verwijderen?", "notifications.column_settings.admin.report": "Nieuwe rapportages:", - "notifications.column_settings.admin.sign_up": "Nieuwe aanmeldingen:", + "notifications.column_settings.admin.sign_up": "Nieuwe registraties:", "notifications.column_settings.alert": "Desktopmeldingen", "notifications.column_settings.favourite": "Favorieten:", "notifications.column_settings.filter_bar.advanced": "Alle categorieën tonen", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 1a8904cd28b..3f6a1747b66 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -41,24 +41,25 @@ "account.statuses_counter": "{count, plural, one {{counter} tut} other {{counter} tut}}", "account.unblock": "Slutt å blokera @{name}", "account.unblock_domain": "Vis {domain}", - "account.unblock_short": "Opphev blokkering", + "account.unblock_short": "Avblokker", "account.unendorse": "Ikkje framhev på profil", "account.unfollow": "Slutt å fylgja", - "account.unmute": "Av-demp @{name}", + "account.unmute": "Opphev målbinding av @{name}", "account.unmute_notifications": "Vis varsel frå @{name}", - "account.unmute_short": "Opphev demping", + "account.unmute_short": "Opphev målbinding", "account_note.placeholder": "Klikk for å leggja til merknad", "admin.dashboard.daily_retention": "User retention rate by day after sign-up", "admin.dashboard.monthly_retention": "User retention rate by month after sign-up", "admin.dashboard.retention.average": "Gjennomsnitt", "admin.dashboard.retention.cohort": "Sign-up month", - "admin.dashboard.retention.cohort_size": "Nye brukere", + "admin.dashboard.retention.cohort_size": "Nye brukarar", "alert.rate_limited.message": "Ver venleg å prøva igjen etter {retry_time, time, medium}.", "alert.rate_limited.title": "Begrensa rate", "alert.unexpected.message": "Eit uventa problem oppstod.", "alert.unexpected.title": "Oi sann!", "announcement.announcement": "Kunngjering", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per veke", "boost_modal.combo": "Du kan trykkja {combo} for å hoppa over dette neste gong", "bundle_column_error.body": "Noko gjekk gale mens denne komponenten vart lasta ned.", @@ -70,7 +71,7 @@ "column.blocks": "Blokkerte brukarar", "column.bookmarks": "Bokmerke", "column.community": "Lokal tidsline", - "column.direct": "Direct messages", + "column.direct": "Direktemeldingar", "column.directory": "Sjå gjennom profilar", "column.domain_blocks": "Gøymde domene", "column.favourites": "Favorittar", @@ -92,10 +93,10 @@ "community.column_settings.local_only": "Berre lokalt", "community.column_settings.media_only": "Berre media", "community.column_settings.remote_only": "Berre eksternt", - "compose.language.change": "Change language", + "compose.language.change": "Byt språk", "compose.language.search": "Search languages...", "compose_form.direct_message_warning_learn_more": "Lær meir", - "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", + "compose_form.encryption_warning": "Innlegg på Mastodon er ikkje ende-til-ende-krypterte. Ikkje del eventuell sensitiv informasjon via Mastodon.", "compose_form.hashtag_warning": "Dette tutet vert ikkje oppført under nokon emneknagg sidan det ikkje er oppført. Berre offentlege tut kan verta søkt etter med emneknagg.", "compose_form.lock_disclaimer": "Kontoen din er ikkje {locked}. Kven som helst kan fylgja deg for å sjå innlegga dine som berre visast til fylgjarar.", "compose_form.lock_disclaimer.lock": "låst", @@ -108,7 +109,7 @@ "compose_form.poll.switch_to_single": "Endra avstemninga til tillate berre eitt val", "compose_form.publish": "Publish", "compose_form.publish_loud": "{publish}!", - "compose_form.save_changes": "Save changes", + "compose_form.save_changes": "Lagre endringar", "compose_form.sensitive.hide": "Merk medium som sensitivt", "compose_form.sensitive.marked": "Medium er markert som sensitivt", "compose_form.sensitive.unmarked": "Medium er ikkje merka som sensitivt", @@ -124,7 +125,7 @@ "confirmations.delete_list.confirm": "Slett", "confirmations.delete_list.message": "Er du sikker på at du vil sletta denne lista for alltid?", "confirmations.discard_edit_media.confirm": "Forkast", - "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", + "confirmations.discard_edit_media.message": "Du har ulagra endringar i mediabeskrivinga eller førehandsvisinga. Vil du forkaste dei likevel?", "confirmations.domain_block.confirm": "Gøym heile domenet", "confirmations.domain_block.message": "Er du heilt, heilt sikker på at du vil blokkera heile {domain}? I dei fleste tilfelle er det godt nok og føretrekt med nokre få målretta blokkeringar eller målbindingar. Du kjem ikkje til å sjå innhald frå det domenet i nokon fødererte tidsliner eller i varsla dine. Fylgjarane dine frå det domenet vert fjerna.", "confirmations.logout.confirm": "Logg ut", @@ -178,7 +179,7 @@ "empty_column.follow_requests": "Du har ingen følgjeførespurnadar ennå. Når du får ein, så vil den dukke opp her.", "empty_column.hashtag": "Det er ingenting i denne emneknaggen ennå.", "empty_column.home": "Heime-tidslinja di er tom! Besøk {public} eller søk for å starte og å møte andre brukarar.", - "empty_column.home.suggestions": "Se noen forslag", + "empty_column.home.suggestions": "Sjå nokre forslag", "empty_column.list": "Det er ingenting i denne lista enno. Når medlemer av denne lista legg ut nye statusar, så dukkar dei opp her.", "empty_column.lists": "Du har ingen lister enno. Når du lagar ei, så dukkar ho opp her.", "empty_column.mutes": "Du har ikkje målbunde nokon brukarar enno.", @@ -190,14 +191,14 @@ "error.unexpected_crash.next_steps_addons": "Prøv å deaktivere dem og laste siden på nytt. Hvis det ikke hjelper, kan du fremdeles bruke Mastodon via en annen nettleser eller en annen app.", "errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace til utklippstavla", "errors.unexpected_crash.report_issue": "Rapporter problem", - "explore.search_results": "Søkeresultater", + "explore.search_results": "Søkeresultat", "explore.suggested_follows": "For deg", "explore.title": "Utforsk", - "explore.trending_links": "Nyheter", + "explore.trending_links": "Nyheiter", "explore.trending_statuses": "Innlegg", - "explore.trending_tags": "Hashtags", + "explore.trending_tags": "Emneknaggar", "follow_recommendations.done": "Ferdig", - "follow_recommendations.heading": "Følg folk du ønsker å se innlegg fra! Her er noen forslag.", + "follow_recommendations.heading": "Fylg folk du ønsker å sjå innlegg frå! Her er nokre forslag.", "follow_recommendations.lead": "Innlegg fra mennesker du følger vil vises i kronologisk rekkefølge på hjemmefeed. Ikke vær redd for å gjøre feil, du kan slutte å følge folk like enkelt som alt!", "follow_request.authorize": "Autoriser", "follow_request.reject": "Avvis", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Kva som helst av desse", "hashtag.column_settings.tag_mode.none": "Ikkje nokon av disse", "hashtag.column_settings.tag_toggle": "Inkluder ekstra emneknaggar for denne kolonna", - "hashtag.follow": "Follow hashtag", - "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.follow": "Fylg emneknagg", + "hashtag.total_volume": "Totalt volum siste {days, plural, one {dag} other {{days} dagar}}", + "hashtag.unfollow": "Slutt å fylgje emneknaggen", "home.column_settings.basic": "Enkelt", "home.column_settings.show_reblogs": "Vis framhevingar", "home.column_settings.show_replies": "Vis svar", @@ -270,8 +271,8 @@ "lightbox.expand": "Ekspander bildevisning boks", "lightbox.next": "Neste", "lightbox.previous": "Førre", - "limited_account_hint.action": "Show profile anyway", - "limited_account_hint.title": "This profile has been hidden by the moderators of your server.", + "limited_account_hint.action": "Vis profilen likevel", + "limited_account_hint.title": "Denne profilen har vorte skjult av moderatorane på tenaren din.", "lists.account.add": "Legg til i liste", "lists.account.remove": "Fjern frå liste", "lists.delete": "Slett liste", @@ -280,7 +281,7 @@ "lists.new.create": "Legg til liste", "lists.new.title_placeholder": "Ny listetittel", "lists.replies_policy.followed": "Enhver fulgt bruker", - "lists.replies_policy.list": "Medlemmer i listen", + "lists.replies_policy.list": "Medlem i lista", "lists.replies_policy.none": "Ikkje nokon", "lists.replies_policy.title": "Vis svar på:", "lists.search": "Søk gjennom folk du følgjer", @@ -298,7 +299,7 @@ "navigation_bar.bookmarks": "Bokmerke", "navigation_bar.community_timeline": "Lokal tidsline", "navigation_bar.compose": "Lag eit nytt tut", - "navigation_bar.direct": "Direct messages", + "navigation_bar.direct": "Direktemeldingar", "navigation_bar.discover": "Oppdag", "navigation_bar.domain_blocks": "Skjulte domene", "navigation_bar.edit_profile": "Rediger profil", @@ -317,7 +318,7 @@ "navigation_bar.preferences": "Innstillingar", "navigation_bar.public_timeline": "Føderert tidsline", "navigation_bar.security": "Tryggleik", - "notification.admin.report": "{name} reported {target}", + "notification.admin.report": "{name} rapporterte {target}", "notification.admin.sign_up": "{name} signed up", "notification.favourite": "{name} merkte statusen din som favoritt", "notification.follow": "{name} fylgde deg", @@ -327,10 +328,10 @@ "notification.poll": "Ei rundspørjing du har røysta i er ferdig", "notification.reblog": "{name} framheva statusen din", "notification.status": "{name} la nettopp ut", - "notification.update": "{name} edited a post", + "notification.update": "{name} redigerte eit innlegg", "notifications.clear": "Tøm varsel", "notifications.clear_confirmation": "Er du sikker på at du vil fjerna alle varsla dine for alltid?", - "notifications.column_settings.admin.report": "New reports:", + "notifications.column_settings.admin.report": "Nye rapportar:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Skrivebordsvarsel", "notifications.column_settings.favourite": "Favorittar:", @@ -346,9 +347,9 @@ "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Spel av lyd", "notifications.column_settings.status": "Nye tuter:", - "notifications.column_settings.unread_notifications.category": "Unread notifications", - "notifications.column_settings.unread_notifications.highlight": "Highlight unread notifications", - "notifications.column_settings.update": "Redigeringer:", + "notifications.column_settings.unread_notifications.category": "Uleste varsel", + "notifications.column_settings.unread_notifications.highlight": "Marker uleste varsel", + "notifications.column_settings.update": "Redigeringar:", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Framhevingar", "notifications.filter.favourites": "Favorittar", @@ -372,15 +373,15 @@ "poll.total_votes": "{count, plural, one {# røyst} other {# røyster}}", "poll.vote": "Røyst", "poll.voted": "Du røysta på dette svaret", - "poll.votes": "{votes, plural, one {# vote} other {# votes}}", + "poll.votes": "{votes, plural, one {# stemme} other {# stemmer}}", "poll_button.add_poll": "Start ei meiningsmåling", "poll_button.remove_poll": "Fjern røyst", "privacy.change": "Juster status-synlegheit", "privacy.direct.long": "Legg berre ut for nemnde brukarar", - "privacy.direct.short": "Direct", + "privacy.direct.short": "Kun nemnde personar", "privacy.private.long": "Post kun til følgjarar", - "privacy.private.short": "Followers-only", - "privacy.public.long": "Visible for all", + "privacy.private.short": "Kun fylgjarar", + "privacy.public.long": "Synleg for alle", "privacy.public.short": "Offentleg", "privacy.unlisted.long": "Visible for all, but opted-out of discovery features", "privacy.unlisted.short": "Uoppført", @@ -388,11 +389,11 @@ "regeneration_indicator.label": "Lastar…", "regeneration_indicator.sublabel": "Heimetidslinja di vert førebudd!", "relative_time.days": "{number}dg", - "relative_time.full.days": "{number, plural, one {# day} other {# days}} ago", - "relative_time.full.hours": "{number, plural, one {# hour} other {# hours}} ago", - "relative_time.full.just_now": "just now", - "relative_time.full.minutes": "{number, plural, one {# minute} other {# minutes}} ago", - "relative_time.full.seconds": "{number, plural, one {# second} other {# seconds}} ago", + "relative_time.full.days": "{number, plural, one {# dag} other {# dagar}} sidan", + "relative_time.full.hours": "{number, plural, one {# time} other {# timar}} sidan", + "relative_time.full.just_now": "nettopp nå", + "relative_time.full.minutes": "{number, plural, one {# minutt} other {# minutt}} sidan", + "relative_time.full.seconds": "{number, plural, one {# sekund} other {# sekund}} sidan", "relative_time.hours": "{number}t", "relative_time.just_now": "nå", "relative_time.minutes": "{number}min", @@ -400,46 +401,46 @@ "relative_time.today": "i dag", "reply_indicator.cancel": "Avbryt", "report.block": "Blokker", - "report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.", - "report.categories.other": "Other", + "report.block_explanation": "Du vil ikkje kunne sjå innlegga deira. Dei vil ikkje kunne sjå innlegga dine eller fylgje deg. Dei kan sjå at dei er blokkert.", + "report.categories.other": "Anna", "report.categories.spam": "Søppelpost", - "report.categories.violation": "Content violates one or more server rules", - "report.category.subtitle": "Choose the best match", - "report.category.title": "Tell us what's going on with this {type}", + "report.categories.violation": "Innhaldet bryt ei eller fleire regler for tenaren", + "report.category.subtitle": "Vel det som passar best", + "report.category.title": "Fortel oss kva som skjer med denne {type}", "report.category.title_account": "profil", "report.category.title_status": "innlegg", - "report.close": "Utført", - "report.comment.title": "Is there anything else you think we should know?", + "report.close": "Ferdig", + "report.comment.title": "Er det noko anna du meiner me bør vite?", "report.forward": "Vidaresend til {target}", "report.forward_hint": "Kontoen er frå ein annan tenar. Vil du senda ein anonymisert kopi av rapporten dit òg?", - "report.mute": "Demp", + "report.mute": "Målbind", "report.mute_explanation": "You will not see their posts. They can still follow you and see your posts and will not know that they are muted.", "report.next": "Neste", "report.placeholder": "Tilleggskommentarar", - "report.reasons.dislike": "Jeg liker det ikke", - "report.reasons.dislike_description": "It is not something you want to see", - "report.reasons.other": "It's something else", - "report.reasons.other_description": "The issue does not fit into other categories", - "report.reasons.spam": "Det er spam", - "report.reasons.spam_description": "Malicious links, fake engagement, or repetitive replies", - "report.reasons.violation": "It violates server rules", - "report.reasons.violation_description": "You are aware that it breaks specific rules", + "report.reasons.dislike": "Eg likar det ikkje", + "report.reasons.dislike_description": "Det er ikkje noko du ønsker å sjå", + "report.reasons.other": "Det er noko anna", + "report.reasons.other_description": "Problemet passar ikkje inn i dei andre kategoriane", + "report.reasons.spam": "Det er søppelpost", + "report.reasons.spam_description": "Skadelege lenker, falskt engasjement og gjentakande svar", + "report.reasons.violation": "Det bryt tenaren sine reglar", + "report.reasons.violation_description": "Du veit at den bryt spesifikke reglar", "report.rules.subtitle": "Select all that apply", - "report.rules.title": "Which rules are being violated?", + "report.rules.title": "Kva reglar vert brotne?", "report.statuses.subtitle": "Select all that apply", "report.statuses.title": "Are there any posts that back up this report?", "report.submit": "Send inn", "report.target": "Rapporterer {target}", "report.thanks.take_action": "Here are your options for controlling what you see on Mastodon:", "report.thanks.take_action_actionable": "While we review this, you can take action against @{name}:", - "report.thanks.title": "Don't want to see this?", - "report.thanks.title_actionable": "Thanks for reporting, we'll look into this.", + "report.thanks.title": "Vil du ikkje sjå dette?", + "report.thanks.title_actionable": "Takk for at du rapporterer, me skal sjå på dette.", "report.unfollow": "Unfollow @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", - "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", - "report_notification.categories.other": "Other", - "report_notification.categories.spam": "Spam", - "report_notification.categories.violation": "Rule violation", + "report_notification.attached_statuses": "{count, plural, one {{count} innlegg} other {{count} innlegg}} lagt ved", + "report_notification.categories.other": "Anna", + "report_notification.categories.spam": "Søppelpost", + "report_notification.categories.violation": "Regelbrot", "report_notification.open": "Open report", "search.placeholder": "Søk", "search_popout.search_format": "Avansert søkeformat", @@ -451,7 +452,7 @@ "search_results.accounts": "Folk", "search_results.all": "All", "search_results.hashtags": "Emneknaggar", - "search_results.nothing_found": "Could not find anything for these search terms", + "search_results.nothing_found": "Kunne ikkje finne noko for desse søkeorda", "search_results.statuses": "Tut", "search_results.statuses_fts_disabled": "På denne Matsodon-tenaren kan du ikkje søkja på tut etter innhaldet deira.", "search_results.total": "{count, number} {count, plural, one {treff} other {treff}}", @@ -465,15 +466,15 @@ "status.delete": "Slett", "status.detailed_status": "Detaljert samtalevisning", "status.direct": "Send melding til @{name}", - "status.edit": "Edit", - "status.edited": "Edited {date}", - "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", + "status.edit": "Rediger", + "status.edited": "Redigert {date}", + "status.edited_x_times": "Redigert {count, plural, one {{count} gong} other {{count} gonger}}", "status.embed": "Bygg inn", "status.favourite": "Favoritt", "status.filtered": "Filtrert", - "status.hide": "Hide toot", - "status.history.created": "{name} created {date}", - "status.history.edited": "{name} edited {date}", + "status.hide": "Gøym innlegg", + "status.history.created": "{name} oppretta {date}", + "status.history.edited": "{name} redigerte {date}", "status.load_more": "Last inn meir", "status.media_hidden": "Medium gøymd", "status.mention": "Nemn @{name}", @@ -495,7 +496,7 @@ "status.report": "Rapporter @{name}", "status.sensitive_warning": "Sensitivt innhald", "status.share": "Del", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Vis likevel", "status.show_less": "Vis mindre", "status.show_less_all": "Vis mindre for alle", "status.show_more": "Vis meir", @@ -532,7 +533,7 @@ "upload_error.poll": "Filopplasting ikkje tillate med meiningsmålingar.", "upload_form.audio_description": "Grei ut for folk med nedsett høyrsel", "upload_form.description": "Skildr for synshemja", - "upload_form.description_missing": "Ingen beskrivelse lagt til", + "upload_form.description_missing": "Inga beskriving er lagt til", "upload_form.edit": "Rediger", "upload_form.thumbnail": "Bytt miniatyrbilete", "upload_form.undo": "Slett", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 829be51a586..b0b7f76bcda 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Oi!", "announcement.announcement": "Kunngjøring", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per uke", "boost_modal.combo": "You kan trykke {combo} for å hoppe over dette neste gang", "bundle_column_error.body": "Noe gikk galt mens denne komponenten lastet.", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index b065b4e8f6c..d9d3b20a1bd 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Ops !", "announcement.announcement": "Anóncia", "attachments_list.unprocessed": "(pas tractat)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per setmana", "boost_modal.combo": "Podètz botar {combo} per passar aquò lo còp que ven", "bundle_column_error.body": "Quicòm a fach mèuca pendent lo cargament d’aqueste compausant.", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index 99fdcfd453e..bc5e9d91ca6 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index bc87998314d..5ba83f01ffc 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "O nie!", "announcement.announcement": "Ogłoszenie", "attachments_list.unprocessed": "(nieprzetworzone)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} co tydzień", "boost_modal.combo": "Naciśnij {combo}, aby pominąć to następnym razem", "bundle_column_error.body": "Coś poszło nie tak podczas ładowania tego składnika.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Dowolne", "hashtag.column_settings.tag_mode.none": "Żadne", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Obserwuj hasztag", "hashtag.total_volume": "Całkowity wolumen w ciągu {days, plural, one {ostatniego dnia} other {ostatnich {days} dni}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Przestań obserwować hashtag", "home.column_settings.basic": "Podstawowe", "home.column_settings.show_reblogs": "Pokazuj podbicia", "home.column_settings.show_replies": "Pokazuj odpowiedzi", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 0073ff5f1a2..3fd4c822ee7 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Eita!", "announcement.announcement": "Comunicados", "attachments_list.unprocessed": "(não processado)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} por semana", "boost_modal.combo": "Pressione {combo} para pular isso na próxima vez", "bundle_column_error.body": "Erro ao carregar este componente.", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 643ef1c6ef0..0764920e848 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Bolas!", "announcement.announcement": "Anúncio", "attachments_list.unprocessed": "(não processado)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} por semana", "boost_modal.combo": "Pode clicar {combo} para não voltar a ver", "bundle_column_error.body": "Algo de errado aconteceu enquanto este componente era carregado.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Qualquer destes", "hashtag.column_settings.tag_mode.none": "Nenhum destes", "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionais para esta coluna", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Seguir hashtag", "hashtag.total_volume": "Volume total {days, plural, one {no último dia} other {nos últimos {days} dias}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Parar de seguir hashtag", "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar boosts", "home.column_settings.show_replies": "Mostrar respostas", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index a3188f5537a..e60ce2220e1 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Ups!", "announcement.announcement": "Anunț", "attachments_list.unprocessed": "(neprocesate)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} pe săptămână", "boost_modal.combo": "Poți apăsa {combo} pentru a sări peste asta data viitoare", "bundle_column_error.body": "A apărut o eroare la încărcarea acestui element.", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index ca9a2cceb99..c0bfb8b7965 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Упс!", "announcement.announcement": "Объявление", "attachments_list.unprocessed": "(не обработан)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} / неделю", "boost_modal.combo": "{combo}, чтобы пропустить это в следующий раз", "bundle_column_error.body": "Что-то пошло не так при загрузке этого компонента.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Любой из списка", "hashtag.column_settings.tag_mode.none": "Ни один из списка", "hashtag.column_settings.tag_toggle": "Включить дополнительные теги для этой колонки", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Подписаться на новые посты", "hashtag.total_volume": "Общий объем за {days, plural, =1 {последний день} one {последний {days} день} few {последних {days} дня} many {последних {days} дней} other {последних {days} дней}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Отписаться", "home.column_settings.basic": "Основные", "home.column_settings.show_reblogs": "Показывать продвижения", "home.column_settings.show_replies": "Показывать ответы", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index ecbdf816c10..3a5faf272a3 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "अरे !", "announcement.announcement": "उद्घोषणा", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} प्रतिसप्ताहे", "boost_modal.combo": "{combo} अत्र स्प्रष्टुं शक्यते, त्यक्तुमेतमन्यस्मिन् समये", "bundle_column_error.body": "विषयस्याऽऽरोपणे कश्चिद्दोषो जातः", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index aaecfd8e18e..93a7ea76938 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Oh!", "announcement.announcement": "Annùntziu", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} a sa chida", "boost_modal.combo": "Podes incarcare {combo} pro brincare custu sa borta chi benit", "bundle_column_error.body": "Faddina in su carrigamentu de custu cumponente.", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index e50ea913516..18342b7cec7 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "අපොයි!", "announcement.announcement": "නිවේදනය", "attachments_list.unprocessed": "(සැකසුම් නොකළ)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "සතියකට {count}", "boost_modal.combo": "ඊළඟ වතාවේ මෙය මඟ හැරීමට ඔබට {combo} එබිය හැක", "bundle_column_error.body": "මෙම සංරචකය පූරණය කිරීමේදී යම් දෙයක් වැරදී ඇත.", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 3454fe7d241..aff5960d90b 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Ups!", "announcement.announcement": "Oboznámenie", "attachments_list.unprocessed": "(nespracované)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} týždenne", "boost_modal.combo": "Nabudúce môžeš kliknúť {combo} pre preskočenie", "bundle_column_error.body": "Pri načítaní tohto prvku nastala nejaká chyba.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Hociktorý z týchto", "hashtag.column_settings.tag_mode.none": "Žiaden z týchto", "hashtag.column_settings.tag_toggle": "Vlož dodatočné haštagy pre tento stĺpec", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Nasleduj haštag", "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Nesleduj haštag", "home.column_settings.basic": "Základné", "home.column_settings.show_reblogs": "Ukáž vyzdvihnuté", "home.column_settings.show_replies": "Ukáž odpovede", @@ -401,7 +402,7 @@ "reply_indicator.cancel": "Zrušiť", "report.block": "Blokuj", "report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.", - "report.categories.other": "Other", + "report.categories.other": "Ostatné", "report.categories.spam": "Spam", "report.categories.violation": "Content violates one or more server rules", "report.category.subtitle": "Choose the best match", @@ -437,7 +438,7 @@ "report.unfollow": "Nesleduj @{name}", "report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.", "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", - "report_notification.categories.other": "Other", + "report_notification.categories.other": "Ostatné", "report_notification.categories.spam": "Spam", "report_notification.categories.violation": "Rule violation", "report_notification.open": "Open report", @@ -471,7 +472,7 @@ "status.embed": "Vložiť", "status.favourite": "Páči sa mi", "status.filtered": "Filtrované", - "status.hide": "Hide toot", + "status.hide": "Skry príspevok", "status.history.created": "{name} vytvoril/a {date}", "status.history.edited": "{name} upravil/a {date}", "status.load_more": "Ukáž viac", @@ -495,7 +496,7 @@ "status.report": "Nahlás @{name}", "status.sensitive_warning": "Chúlostivý obsah", "status.share": "Zdieľaj", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Ukáž aj tak", "status.show_less": "Zobraz menej", "status.show_less_all": "Všetkým ukáž menej", "status.show_more": "Ukáž viac", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 733614f3eb3..af736ed5959 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Uups!", "announcement.announcement": "Objava", "attachments_list.unprocessed": "(neobdelano)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} na teden", "boost_modal.combo": "Če želite preskočiti to, lahko pritisnete {combo}", "bundle_column_error.body": "Med nalaganjem te komponente je prišlo do napake.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Karkoli od naštetega", "hashtag.column_settings.tag_mode.none": "Nič od naštetega", "hashtag.column_settings.tag_toggle": "Za ta stolpec vključi dodatne oznake", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Sledi ključniku", "hashtag.total_volume": "Skupen obseg v {days, plural, one {zadnjem {day} dnevu} two {zadnjih {days} dneh} few {zadnjih {days} dneh} other {zadnjih {days} dneh}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Nehaj slediti ključniku", "home.column_settings.basic": "Osnovno", "home.column_settings.show_reblogs": "Pokaži izpostavitve", "home.column_settings.show_replies": "Pokaži odgovore", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 8bc44050358..4f43cec0bdb 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Hëm!", "announcement.announcement": "Lajmërim", "attachments_list.unprocessed": "(e papërpunuar)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} për javë", "boost_modal.combo": "Që kjo të anashkalohet herës tjetër, mund të shtypni {combo}", "bundle_column_error.body": "Diç shkoi ters teksa ngarkohej ky përbërës.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Cilindo prej këtyre", "hashtag.column_settings.tag_mode.none": "Asnjë prej këtyre", "hashtag.column_settings.tag_toggle": "Përfshi etiketa shtesë për këtë shtyllë", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Ndiqe hashtag-un", "hashtag.total_volume": "Vëllim gjithsej {days, plural, një {day} other {{days} ditët}} e fundit", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Hiqe ndjekjen e hashtag-ut", "home.column_settings.basic": "Bazë", "home.column_settings.show_reblogs": "Shfaq përforcime", "home.column_settings.show_replies": "Shfaq përgjigje", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 131af97e132..2f35ba2c49c 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "Možete pritisnuti {combo} da preskočite ovo sledeći put", "bundle_column_error.body": "Nešto je pošlo po zlu prilikom učitavanja ove komponente.", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index a2409e957e3..d9d67edf045 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Упс!", "announcement.announcement": "Најава", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} недељно", "boost_modal.combo": "Можете притиснути {combo} да прескочите ово следећи пут", "bundle_column_error.body": "Нешто је пошло по злу приликом учитавања ове компоненте.", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index c0a69b24b22..9e3b9cf376e 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Hoppsan!", "announcement.announcement": "Meddelande", "attachments_list.unprocessed": "(obearbetad)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per vecka", "boost_modal.combo": "Du kan trycka {combo} för att slippa detta nästa gång", "bundle_column_error.body": "Något gick fel medan denna komponent laddades.", diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json index 99fdcfd453e..bc5e9d91ca6 100644 --- a/app/javascript/mastodon/locales/szl.json +++ b/app/javascript/mastodon/locales/szl.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index cc7241badbb..021315b332a 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "அச்சச்சோ!", "announcement.announcement": "அறிவிப்பு", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "ஒவ்வொரு வாரம் {count}", "boost_modal.combo": "நீங்கள் இதை அடுத்தமுறை தவிர்க்க {combo} வை அழுத்தவும்", "bundle_column_error.body": "இக்கூற்றை ஏற்றம் செய்யும்பொழுது ஏதோ தவறு ஏற்பட்டுள்ளது.", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index 17b0e1ed1e9..77232ff5fb3 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index bbe99b4a61b..be49846cb09 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "అయ్యో!", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "మీరు తదుపరిసారి దీనిని దాటవేయడానికి {combo} నొక్కవచ్చు", "bundle_column_error.body": "ఈ భాగం లోడ్ అవుతున్నప్పుడు ఏదో తప్పు జరిగింది.", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 0bff3caabdf..e901b96470b 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "อุปส์!", "announcement.announcement": "ประกาศ", "attachments_list.unprocessed": "(ยังไม่ได้ประมวลผล)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} ต่อสัปดาห์", "boost_modal.combo": "คุณสามารถกด {combo} เพื่อข้ามสิ่งนี้ในครั้งถัดไป", "bundle_column_error.body": "มีบางอย่างผิดพลาดขณะโหลดส่วนประกอบนี้", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "ใดก็ตามนี้", "hashtag.column_settings.tag_mode.none": "ไม่ใช่ทั้งหมดนี้", "hashtag.column_settings.tag_toggle": "รวมแท็กเพิ่มเติมสำหรับคอลัมน์นี้", - "hashtag.follow": "Follow hashtag", - "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.follow": "ติดตามแฮชแท็ก", + "hashtag.total_volume": "ปริมาณรวมใน {days, plural, other {{days} วัน}}ที่ผ่านมา", + "hashtag.unfollow": "เลิกติดตามแฮชแท็ก", "home.column_settings.basic": "พื้นฐาน", "home.column_settings.show_reblogs": "แสดงการดัน", "home.column_settings.show_replies": "แสดงการตอบกลับ", @@ -520,7 +521,7 @@ "timeline_hint.resources.followers": "ผู้ติดตาม", "timeline_hint.resources.follows": "การติดตาม", "timeline_hint.resources.statuses": "โพสต์ที่เก่ากว่า", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", + "trends.counter_by_accounts": "{count, plural, other {{counter} คน}}ใน {days, plural, other {{days} วัน}}ที่ผ่านมา", "trends.trending_now": "กำลังนิยม", "ui.beforeunload": "แบบร่างของคุณจะหายไปหากคุณออกจาก Mastodon", "units.short.billion": "{count} พันล้าน", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 3948bde5ea4..b69153a62c6 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Hay aksi!", "announcement.announcement": "Duyuru", "attachments_list.unprocessed": "(işlenmemiş)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "Haftada {count}", "boost_modal.combo": "Bir daha ki sefere {combo} tuşuna basabilirsin", "bundle_column_error.body": "Bu bileşen yüklenirken bir şeyler ters gitti.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Herhangi biri", "hashtag.column_settings.tag_mode.none": "Bunların hiçbiri", "hashtag.column_settings.tag_toggle": "Bu sütundaki ek etiketleri içer", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Etiketi takip et", "hashtag.total_volume": "Son {days, plural, one {gündeki} other {{days} gündeki}} toplam hacim", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Etiketi takibi bırak", "home.column_settings.basic": "Temel", "home.column_settings.show_reblogs": "Boostları göster", "home.column_settings.show_replies": "Yanıtları göster", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index c9a48d37c45..9e72174d10d 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Ой!", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index 99fdcfd453e..bc5e9d91ca6 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 727b0b99426..e26a73f6274 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Ой!", "announcement.announcement": "Оголошення", "attachments_list.unprocessed": "(не оброблено)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} в тиждень", "boost_modal.combo": "Ви можете натиснути {combo}, щоб пропустити це наступного разу", "bundle_column_error.body": "Щось пішло не так під час завантаження цього компоненту.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Який-небудь зі списку", "hashtag.column_settings.tag_mode.none": "Жоден зі списку", "hashtag.column_settings.tag_toggle": "Додати додаткові теґи до цього стовпчика", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Стежити за хештегом", "hashtag.total_volume": "Загальний обсяг за останні(й) {days, plural, one {день} few {{days} дні} other {{days} днів}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Не стежити за хештегом", "home.column_settings.basic": "Основні", "home.column_settings.show_reblogs": "Показувати поширення", "home.column_settings.show_replies": "Показувати відповіді", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index b3e3fd771de..be9b8b80d31 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "ا رے!", "announcement.announcement": "اعلان", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} فی ہفتہ", "boost_modal.combo": "آئیندہ یہ نہ دیکھنے کیلئے آپ {combo} دبا سکتے ہیں", "bundle_column_error.body": "اس عنصر کو برآمد کرتے وقت کچھ خرابی پیش آئی ہے.", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 4cdb1e53dc2..016fa6b765c 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Ốiii!", "announcement.announcement": "Có gì mới?", "attachments_list.unprocessed": "(chưa xử lí)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} mỗi tuần", "boost_modal.combo": "Nhấn {combo} để bỏ qua bước này", "bundle_column_error.body": "Đã có lỗi xảy ra trong khi tải nội dung này.", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "Một phần", "hashtag.column_settings.tag_mode.none": "Không chọn", "hashtag.column_settings.tag_toggle": "Bao gồm thêm hashtag cho cột này", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Theo dõi hashtag", "hashtag.total_volume": "Tổng số lần sử dụng {days, plural, other {{days} ngày}} qua", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Ngưng theo dõi hashtag", "home.column_settings.basic": "Tùy chỉnh", "home.column_settings.show_reblogs": "Hiện những lượt đăng lại", "home.column_settings.show_replies": "Hiện những tút dạng trả lời", diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json index 898cc22a90a..e96b64cc438 100644 --- a/app/javascript/mastodon/locales/zgh.json +++ b/app/javascript/mastodon/locales/zgh.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "Oops!", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} ⵙ ⵉⵎⴰⵍⴰⵙⵙ", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 334b930343b..f250aa1b754 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "哎呀!", "announcement.announcement": "公告", "attachments_list.unprocessed": "(未处理)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "每星期 {count} 条", "boost_modal.combo": "下次按住 {combo} 即可跳过此提示", "bundle_column_error.body": "载入这个组件时发生了错误。", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "任一", "hashtag.column_settings.tag_mode.none": "无一", "hashtag.column_settings.tag_toggle": "在此栏加入额外的标签", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "关注哈希标签", "hashtag.total_volume": "在过去的{days, plural,one {day}other {{days}days}}的总数量", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "取消关注哈希标签", "home.column_settings.basic": "基本设置", "home.column_settings.show_reblogs": "显示转嘟", "home.column_settings.show_replies": "显示回复", @@ -520,7 +521,7 @@ "timeline_hint.resources.followers": "关注者", "timeline_hint.resources.follows": "关注", "timeline_hint.resources.statuses": "更早的嘟文", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", + "trends.counter_by_accounts": "过去{day}天有{counter}人讨论", "trends.trending_now": "现在流行", "ui.beforeunload": "如果你现在离开 Mastodon,你的草稿内容将会丢失。", "units.short.billion": "{count} B", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index e3c65cdaba7..f17df83c473 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "噢!", "announcement.announcement": "公告", "attachments_list.unprocessed": "(unprocessed)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} / 週", "boost_modal.combo": "如你想在下次路過這顯示,請按{combo},", "bundle_column_error.body": "加載本組件出錯。", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 99814b30dc7..a18e920666a 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -59,6 +59,7 @@ "alert.unexpected.title": "哎呀!", "announcement.announcement": "公告", "attachments_list.unprocessed": "(未經處理)", + "audio.hide": "Hide audio", "autosuggest_hashtag.per_week": "{count} / 週", "boost_modal.combo": "下次您可以按 {combo} 跳過", "bundle_column_error.body": "載入此元件時發生錯誤。", @@ -220,9 +221,9 @@ "hashtag.column_settings.tag_mode.any": "任一", "hashtag.column_settings.tag_mode.none": "全不", "hashtag.column_settings.tag_toggle": "將額外標籤加入到這個欄位", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "追蹤主題標籤", "hashtag.total_volume": "過去 {days, plural, one {日} other {{days} 日}} 之總量", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "取消追蹤主題標籤", "home.column_settings.basic": "基本", "home.column_settings.show_reblogs": "顯示轉嘟", "home.column_settings.show_replies": "顯示回覆", diff --git a/config/locales/activerecord.de.yml b/config/locales/activerecord.de.yml index a24862a7055..d3c013dc0f5 100644 --- a/config/locales/activerecord.de.yml +++ b/config/locales/activerecord.de.yml @@ -38,3 +38,14 @@ de: email: blocked: verwendet einen nicht erlaubten E-Mail-Anbieter unreachable: scheint nicht zu existieren + role_id: + elevated: Kann nicht höher als Ihre aktuelle Rolle sein + user_role: + attributes: + permissions_as_keys: + dangerous: enthalte Berechtigungen, die für die Basisrolle nicht sicher sind + elevated: kann keine Berechtigungen enthalten, die deine aktuelle Rolle nicht besitzt + own_role: kann nicht mit deiner aktuellen Rolle geändert werden + position: + elevated: kann nicht höher sein als deine aktuelle Rolle + own_role: kann nicht mit deiner aktuellen Rolle geändert werden diff --git a/config/locales/activerecord.es-MX.yml b/config/locales/activerecord.es-MX.yml index 37b9b05dffe..c7283aafd5a 100644 --- a/config/locales/activerecord.es-MX.yml +++ b/config/locales/activerecord.es-MX.yml @@ -45,5 +45,7 @@ es-MX: permissions_as_keys: dangerous: incluir permisos que no son seguros para el rol base elevated: no se pueden incluir permisos que tu rol actual no posea + own_role: no se puede cambiar con tu rol actual position: elevated: no puede ser mayor que tu rol actual + own_role: no se puede cambiar con tu rol actual diff --git a/config/locales/activerecord.fi.yml b/config/locales/activerecord.fi.yml index 40dd81812ea..f9798cabe42 100644 --- a/config/locales/activerecord.fi.yml +++ b/config/locales/activerecord.fi.yml @@ -21,6 +21,14 @@ fi: username: invalid: saa sisältää vain kirjaimia, numeroita ja alaviivoja reserved: on varattu + admin/webhook: + attributes: + url: + invalid: ei ole kelvollinen URL + doorkeeper/application: + attributes: + website: + invalid: ei ole kelvollinen URL status: attributes: reblog: @@ -30,3 +38,14 @@ fi: email: blocked: käyttää kiellettyä sähköpostipalvelun tarjoajaa unreachable: ei näytä olevan olemassa + role_id: + elevated: ei voi olla korkeampi kuin nykyinen roolisi + user_role: + attributes: + permissions_as_keys: + dangerous: sisältää oikeudet, jotka eivät ole turvallisia perusroolille + elevated: ei voi sisältää oikeuksia, joita nykyisellä roolillasi ei ole + own_role: ei voi muuttaa nykyisellä roolillasi + position: + elevated: ei voi olla korkeampi kuin nykyinen roolisi + own_role: ei voi muuttaa nykyisellä roolillasi diff --git a/config/locales/activerecord.gd.yml b/config/locales/activerecord.gd.yml index 2920b561ef8..b210144effb 100644 --- a/config/locales/activerecord.gd.yml +++ b/config/locales/activerecord.gd.yml @@ -21,6 +21,14 @@ gd: username: invalid: "– chan fhaod ach litrichean gun sràcan, àireamhan ’s fo-loidhnichean a bhith ’na bhroinn" reserved: "– tha e glèidhte" + admin/webhook: + attributes: + url: + invalid: "– chan eil seo ’na URL dligheach" + doorkeeper/application: + attributes: + website: + invalid: "– chan eil seo ’na URL dligheach" status: attributes: reblog: @@ -30,3 +38,14 @@ gd: email: blocked: "– tha seo a’ chleachdadh solaraiche puist-d nach eil ceadaichte" unreachable: "– tha coltas nach eil seo ann" + role_id: + elevated: "– chan fhaod seo a bhith nas àirde na an dreuchd a th’ agad an-dràsta" + user_role: + attributes: + permissions_as_keys: + dangerous: gabh a-staigh na ceadan nach eil sàbhailte dhan bhun-dreuchd + elevated: chan urrainn dhut ceadan a ghabhail a-staigh nach eil aig an dreuchd a th’ agad an-dràsta + own_role: cha ghabh seo atharrachadh leis an dreuchd a th’ agad an-dràsta + position: + elevated: chan fhaod seo a bhith nas àirde na an dreuchd a th’ agad an-dràsta + own_role: cha ghabh seo atharrachadh leis an dreuchd a th’ agad an-dràsta diff --git a/config/locales/activerecord.ja.yml b/config/locales/activerecord.ja.yml index 52b1b37fd9f..06d63da7a7c 100644 --- a/config/locales/activerecord.ja.yml +++ b/config/locales/activerecord.ja.yml @@ -38,3 +38,9 @@ ja: email: blocked: は禁止されているメールプロバイダを使用しています unreachable: は存在しないようです + user_role: + attributes: + permissions_as_keys: + own_role: 現在と同じロールには変更できません + position: + own_role: 現在と同じロールには変更できません diff --git a/config/locales/activerecord.ku.yml b/config/locales/activerecord.ku.yml index ee8d9a8d8eb..3eec2950cf9 100644 --- a/config/locales/activerecord.ku.yml +++ b/config/locales/activerecord.ku.yml @@ -45,5 +45,7 @@ ku: permissions_as_keys: dangerous: mafdayînên ku ji bo rola bingehîn ne ewle ne tê de hene elevated: di rola te ya heyî de nabe mafdayîn tê de hebin + own_role: bi rola te ya heyî nayê guhertin position: elevated: nabe ku ji rola te ya heyî bilindtir be + own_role: bi rola te ya heyî nayê guhertin diff --git a/config/locales/activerecord.nn.yml b/config/locales/activerecord.nn.yml index f23f9ae6c15..ce37d1856e5 100644 --- a/config/locales/activerecord.nn.yml +++ b/config/locales/activerecord.nn.yml @@ -6,11 +6,12 @@ nn: expires_at: Frist options: Val user: - email: E-mail address + agreement: Serviceavtale + email: Epostadresse locale: Område password: Passord user/account: - username: Brukernavn + username: Brukarnamn user/invite_request: text: Grunn errors: @@ -18,9 +19,32 @@ nn: account: attributes: username: - invalid: bare bokstaver, tall og understreker + invalid: må innehalde kun bokstavar, tal og understrekar reserved: er reservert + admin/webhook: + attributes: + url: + invalid: er ikkje ein gyldig URL + doorkeeper/application: + attributes: + website: + invalid: er ikkje ein gyldig URL status: attributes: reblog: - taken: av status eksisterer allerede + taken: av innlegg eksisterer allereie + user: + attributes: + email: + unreachable: ser ikkje ut til å eksistere + role_id: + elevated: kan ikkje vere høgare enn di noverande rolle + user_role: + attributes: + permissions_as_keys: + dangerous: inkluder tillatingar som ikkje er trygge for basisrolla + elevated: kan ikkje inkludere rettigheiter di noverande rolle ikkje innehar + own_role: kan ikkje endrast med di noverande rolle + position: + elevated: kan ikkje vere høgare enn di noverande rolle + own_role: kan ikkje endrast med di noverande rolle diff --git a/config/locales/de.yml b/config/locales/de.yml index 0c8321295fe..0ce9c32549b 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -103,11 +103,17 @@ de: avatar: Profilbild by_domain: Domain change_email: + changed_msg: E-Mail erfolgreich geändert! current_email: Aktuelle E-Mail-Adresse label: E-Mail-Adresse ändern new_email: Neue E-Mail-Adresse submit: E-Mail-Adresse ändern title: E-Mail-Adresse für %{username} ändern + change_role: + changed_msg: Rolle erfolgreich geändert! + label: Rolle ändern + no_role: Keine Rolle + title: Rolle für %{username} ändern confirm: Bestätigen confirmed: Bestätigt confirming: Bestätigung @@ -151,6 +157,7 @@ de: active: Aktiv all: Alle pending: In Warteschlange + silenced: Limitiert suspended: Gesperrt title: Moderation moderation_notes: Moderationsnotizen @@ -158,6 +165,7 @@ de: most_recent_ip: Letzte IP-Adresse no_account_selected: Keine Konten wurden geändert, da keine ausgewählt wurden no_limits_imposed: Keine Beschränkungen + no_role_assigned: Keine Rolle zugewiesen not_subscribed: Nicht abonniert pending: In Warteschlange perform_full_suspension: Verbannen @@ -184,6 +192,7 @@ de: reset: Zurücksetzen reset_password: Passwort zurücksetzen resubscribe: Wieder abonnieren + role: Rolle search: Suche search_same_email_domain: Andere Benutzer mit der gleichen E-Mail-Domain search_same_ip: Andere Benutzer mit derselben IP @@ -640,6 +649,67 @@ de: unresolved: Ungelöst updated_at: Aktualisiert view_profile: Zeige Profil + roles: + add_new: Rolle hinzufügen + assigned_users: + one: "%{count} Benutzer" + other: "%{count} Benutzer" + categories: + administration: Administration + devops: DevOps + invites: Einladungen + moderation: Moderation + special: Spezial + delete: Löschen + description_html: Mit Benutzerrollenkönnen Sie die Funktionen und Bereiche von Mastodon anpassen, auf die Ihre Benutzer zugreifen können. + edit: "'%{name}' Rolle bearbeiten" + everyone: Standardberechtigungen + everyone_full_description_html: Das ist die -Basis-Rolle die jeden Benutzer betrifft, auch diejenigen ohne zugewiesene Rolle. Alle anderen Rollen erben Berechtigungen davon. + permissions_count: + one: "%{count} Berechtigung" + other: "%{count} Berechtigungen" + privileges: + administrator: Administrator + administrator_description: Benutzer mit dieser Berechtigung werden jede Berechtigung umgehen + delete_user_data: Benutzerdaten löschen + delete_user_data_description: Erlaubt Benutzern, die Daten anderer Benutzer ohne Verzögerung zu löschen + invite_users: Benutzer einladen + invite_users_description: Erlaubt Benutzern neue Leute zum Server einzuladen + manage_announcements: Ankündigungen verwalten + manage_announcements_description: Erlaubt Benutzern Ankündigungen auf dem Server zu verwalten + manage_appeals: Anträge verwalten + manage_appeals_description: Erlaubt es Benutzer Anträge gegen Moderationsaktionen zu überprüfen + manage_blocks: Geblocktes verwalten + manage_blocks_description: Erlaubt Benutzern E-Mail-Anbieter und IP-Adressen zu blockieren + manage_custom_emojis: Benutzerdefinierte Emojis verwalten + manage_custom_emojis_description: Erlaubt Benutzern benutzerdefinierte Emojis auf dem Server zu verwalten + manage_federation: Föderation verwalten + manage_federation_description: Erlaubt Benutzern, Föderation mit anderen Domänen zu blockieren oder zuzulassen und die Zustellbarkeit zu kontrollieren + manage_invites: Einladungen verwalten + manage_invites_description: Erlaubt Benutzern Einladungslinks zu durchsuchen und zu deaktivieren + manage_reports: Meldungen verwalten + manage_reports_description: Erlaubt Benutzern Meldungen zu überprüfen und Moderationsaktionen gegen sie durchzuführen + manage_roles: Rollen verwalten + manage_roles_description: Erlaubt Benutzern Rollen unter ihren Rollen zu verwalten und zuzuweisen + manage_rules: Regeln verwalten + manage_rules_description: Erlaubt Benutzern Serverregeln zu ändern + manage_settings: Einstellungen verwalten + manage_settings_description: Erlaubt Benutzern Site-Einstellungen zu ändern + manage_taxonomies: Taxonomien verwalten + manage_taxonomies_description: Ermöglicht Benutzern die Überprüfung angesagter Inhalte und das Aktualisieren der Hashtag-Einstellungen + manage_user_access: Benutzerzugriff verwalten + manage_user_access_description: Erlaubt Benutzern die Zwei-Faktor-Authentifizierung anderer Benutzer zu deaktivieren, ihre E-Mail-Adresse zu ändern und ihr Passwort zurückzusetzen + manage_users: Benutzer verwalten + manage_users_description: Erlaubt Benutzern die Details anderer Benutzer anzuzeigen und Moderationsaktionen gegen sie auszuführen + manage_webhooks: Webhooks verwalten + manage_webhooks_description: Erlaubt Benutzern Webhooks für administrative Ereignisse einzurichten + view_audit_log: Audit-Log anzeigen + view_audit_log_description: Erlaubt Benutzern den Verlauf von administrativen Aktionen auf dem Server zu sehen + view_dashboard: Dashboard anzeigen + view_dashboard_description: Erlaubt Benutzern den Zugriff auf das Dashboard und verschiedene Metriken + view_devops: DevOps + view_devops_description: Erlaubt Benutzern auf Sidekiq und pgHero Dashboards zuzugreifen + title: Rollen rules: add_new: Regel hinzufügen delete: Löschen @@ -1109,14 +1179,24 @@ de: public: Öffentliche Zeitleisten thread: Gespräche edit: + add_keyword: Stichwort hinzufügen + keywords: Stichwörter title: Filter bearbeiten errors: + deprecated_api_multiple_keywords: Diese Parameter können von dieser Anwendung nicht geändert werden, da sie auf mehr als ein Filterschlüsselwort angewendet werden. Verwenden Sie eine neuere Anwendung oder die Web-Schnittstelle. invalid_context: Ungültiger oder fehlender Kontext übergeben index: + contexts: Filter in %{contexts} delete: Löschen empty: Du hast keine Filter. + expires_in: Läuft ab in %{distance} + expires_on: Läuft am %{date} ab + keywords: + one: "%{count} Stichwort" + other: "%{count} Stichwörter" title: Filter new: + save: Neuen Filter speichern title: Neuen Filter hinzufügen footer: developers: Entwickler @@ -1235,6 +1315,8 @@ de: copy_account_note_text: 'Dieser Benutzer ist von %{acct} umgezogen, hier waren deine letzten Notizen zu diesem Benutzer:' notification_mailer: admin: + report: + subject: "%{name} hat eine Meldung eingereicht" sign_up: subject: "%{name} registrierte sich" digest: diff --git a/config/locales/devise.en-GB.yml b/config/locales/devise.en-GB.yml new file mode 100644 index 00000000000..ef03d181049 --- /dev/null +++ b/config/locales/devise.en-GB.yml @@ -0,0 +1 @@ +en-GB: diff --git a/config/locales/devise.ku.yml b/config/locales/devise.ku.yml index 18187a156f5..d5d0105efc8 100644 --- a/config/locales/devise.ku.yml +++ b/config/locales/devise.ku.yml @@ -29,13 +29,13 @@ ku: title: Navnîşana e-nameyê piştrast bike email_changed: explanation: 'Navnîşana e-nameyê ajimêra te hate guhertin bo:' - extra: Heke te ajimêra xwe ne guhertiye. Ew tê wateya ku kesek ketiye ajimêrê te. Jkx pêborîna xwe zû biguherîne an jî bi rêveberiya rajekar re têkeve têkiliyê heke tu êdî nikare ajimêra xwe bi kar bînî. + extra: Ku te ajimêra xwe neguhertiye. Ew tê wateya ku kesek ketiye ajimêrê te. Jkx pêborîna xwe zû biguherîne an jî bi rêveberiya rajekar re têkeve têkiliyê heke tu êdî nikare ajimêra xwe bi kar bînî. subject: 'Mastodon: E-name hate guhertin' title: Navnîşana e-nameya nû password_change: explanation: Borînpeyva ajimêra te hate guhertin. - extra: Heke te ajimêra xwe ne guhertiye. Ew tê wateya ku kesek ketiye ajimêrê te. Jkx pêborîna xwe zû biguherîne an jî bi rêveberiya rajekar re têkeve têkiliyê heke tu êdî nikare ajimêra xwe bi kar bînî. - subject: 'Mastodon: pêborîn hate guhertin' + extra: Ku te ajimêra xwe neguhertiye. Ew tê wateya ku kesek ketiye ajimêrê te. Jkx pêborîna xwe zû biguherîne an jî bi rêveberiya rajekar re têkeve têkiliyê heke tu êdî nikare ajimêra xwe bi kar bînî. + subject: 'Mastodon: Borînpeyv hate guhertin' title: Borînpeyv hate guhertin reconfirmation_instructions: explanation: Navnîşana nû piştrast bike da ku tu e-nameya xwe biguherînî. diff --git a/config/locales/devise.nl.yml b/config/locales/devise.nl.yml index 2cbbee6cfa9..477c7d41f16 100644 --- a/config/locales/devise.nl.yml +++ b/config/locales/devise.nl.yml @@ -51,7 +51,7 @@ nl: subject: 'Mastodon: Tweestapsverificatie uitgeschakeld' title: Tweestapsverificatie uitgeschakeld two_factor_enabled: - explanation: Tweestapsverificatie voor jouw account is ingeschakeld. Om te kunnen aanmelden is een door een tweestapsverificatie-app genereerde toegangscode nodig. + explanation: Tweestapsverificatie voor jouw account is ingeschakeld. Om te kunnen inloggen is een door een tweestapsverificatie-app genereerde toegangscode nodig. subject: 'Mastodon: Tweestapsverificatie ingeschakeld' title: Tweestapsverificatie ingeschakeld two_factor_recovery_codes_changed: diff --git a/config/locales/devise.nn.yml b/config/locales/devise.nn.yml index 88d8458f7bd..0318e7ea92b 100644 --- a/config/locales/devise.nn.yml +++ b/config/locales/devise.nn.yml @@ -41,7 +41,7 @@ nn: subject: 'Mastodon: Stadfest e-post for %{instance}' title: Stadfest e-postadresse reset_password_instructions: - action: Endr passord + action: Endre passord explanation: Du har bedt om eit nytt passord til kontoen din. extra: Om du ikkje bad om dette, ignorer denne e-posten. Passordet ditt vert ikkje endra før du går inn på lenkja ovanfor og lagar eit nytt. subject: 'Mastodon: Instuksjonar for å endra passord' @@ -63,51 +63,51 @@ nn: webauthn_credential: added: explanation: Følgende sikkerhetsnøkkel har blitt lagt til i kontoen din - subject: 'Mastodon: Ny sikkerhetsnøkkel' - title: En ny sikkerhetsnøkkel har blitt lagt til + subject: 'Mastodon: Ny sikkerheitsnøkkel' + title: Ein ny sikkerheitsnøkkel har blitt lagt til deleted: - explanation: Følgende sikkerhetsnøkkel har blitt slettet fra kontoen din - subject: 'Mastodon: Sikkerhetsnøkkel slettet' - title: En av sikkerhetsnøklene dine har blitt slettet + explanation: Den følgande sikkerheitsnøkkelen har blitt sletta frå kontoen din + subject: 'Mastodon: Sikkerheitsnøkkel sletta' + title: Ein av sikkerheitsnøklane dine har blitt sletta webauthn_disabled: - subject: 'Mastodon: Autentisering med sikkerhetsnøkler ble skrudd av' - title: Sikkerhetsnøkler deaktivert + subject: 'Mastodon: Autentisering med sikkerheitsnøklar vart skrudd av' + title: Sikkerheitsnøklar deaktivert webauthn_enabled: - subject: 'Mastodon: Sikkerhetsnøkkelsautentisering ble skrudd på' - title: Sikkerhetsnøkler aktivert + subject: 'Mastodon: Sikkerheitsnøkkelsautentisering vart skrudd på' + title: Sikkerheitsnøklar aktivert omniauth_callbacks: - failure: Du kunne ikkje verte autentisert frå %{kind} av di "%{reason}". + failure: Kunne ikkje autentisere deg frå %{kind} fordi "%{reason}". success: Autentisert frå %{kind}-konto. passwords: - no_token: Du har ikkje tilgang til denne sida utan ha gått via ein e-post som gjeld å nullstille passordet. Dersom det er kva du har gjort, dobbelsjekk at du har kopiert heile URLen. - send_instructions: Om vi har e-postadressa di i databasen vår, får du ein e-post med lenke til gjenopprette passordet om nokre få minutt. Sjekk søppelpostmappa di om du ikkje fekk denne e-posten. - send_paranoid_instructions: Om vi har e-postadressa di i databasen vår, får du ei lenkje til å endra passordet om nokre få minutt. Ver venleg og sjekk søppelpostmappa om du ikkje fekk denne e-posten. + no_token: Du har ikkje tilgang til denne sida utan ha gått via ein e-post som gjeld å nullstille passordet. Dersom det var det du gjorde, dobbelsjekk at du har kopiert heile URLen. + send_instructions: Om me har epostadressa di i databasen vår, får du ein epost med ei lenke til å gjenopprette passordet om nokre få minutt. Sjekk søppelpostmappa di om du ikkje fekk denne eposten. + send_paranoid_instructions: Om me har epostadressa di i databasen vår, får du ei lenke til å endra passordet om nokre få minutt. Ver venleg å sjekke søppelpostmappa om du ikkje fekk denne eposten. updated: Passordet ditt er endra. No er du logga inn. updated_not_active: Passordet ditt er endra. registrations: - destroyed: Ha det! Kontoen din er sletta. Vi vonar å sjå deg igjen snart. + destroyed: Ha det! Kontoen din er sletta. Me vonar å sjå deg igjen snart. signed_up: Velkomen! No er du registrert. - signed_up_but_inactive: Du har registrert deg inn, men vi kunne ikkje logga deg inn fordi kontoen din er ikkje aktivert enno. - signed_up_but_locked: Du har registrert deg inn, men vi kunne ikkje logga deg inn fordi kontoen din er låst. - signed_up_but_pending: Ei melding med ei stadfestingslenkje er vorten send til e-postadressa di. Når du klikkar på lenkja skal vi sjå gjennom søknaden din. Du får ei melding om han vert godkjend. - signed_up_but_unconfirmed: Ei melding med ei lenke for å stadfeste kontoen har vorte sendt e-postadressa di. Klikk på lenka for å aktivere kontoen. Sjekk søppelpostmappa dersom du ikkje har fått e-posten. - update_needs_confirmation: Du har oppdatert kontoen din, men vi må stadfeste den nye e-postadressa. Sjekk innboksen og følg lenka for å stadfeste adressa di. Sjekk søppelpostmappa dersom du ikkje har fått den e-posten. + signed_up_but_inactive: Du har registrert deg, men me kunne ikkje logga deg inn fordi kontoen din er ikkje aktivert enno. + signed_up_but_locked: Du har registrert deg, men me kunne ikkje logga deg inn fordi kontoen din er låst. + signed_up_but_pending: Ei melding med ei stadfestingslenke har vorte sendt til epostadressa di. Når du klikkar på lenka skal me sjå gjennom søknaden din. Du får ei melding om den vert godkjend. + signed_up_but_unconfirmed: Ei melding med ei lenke for å stadfeste kontoen har vorte sendt til epostadressa di. Klikk på lenka for å aktivere kontoen. Sjekk søppelpostmappa dersom du ikkje har fått eposten. + update_needs_confirmation: Du har oppdatert kontoen din, men me må stadfesta den nye epostadressa. Sjekk innboksen og fylg lenka for å stadfeste adressa di. Sjekk søppelpostmappa dersom du ikkje har fått denne eposten. updated: Kontoen har vorte oppdatert. sessions: already_signed_out: Logga ut. signed_in: Logga inn. signed_out: Logga ut. unlocks: - send_instructions: Om nokre minutt får du ein e-post med instruksjonar for korleis du kan låse opp kontoen din. Sjekk søppelpostmappa om du ikkje finn den mailen. - send_paranoid_instructions: Dersom du har konto her, får du ein e-post med instruksjonar for korleis du kan låse opp kontoen din om nokre minutt. Sjekk søppelpostmappa om du ikkje finn den mailen. + send_instructions: Om nokre minutt får du ein epost med instruksjonar for korleis du kan låse opp kontoen din. Sjekk søppelpostmappa om du ikkje finn den eposten. + send_paranoid_instructions: Dersom du har konto her, får du ein epost med instruksjonar for korleis du kan låse opp kontoen din om nokre minutt. Sjekk søppelpostmappa om du ikkje finn den eposten. unlocked: Kontoen din har vorte låst opp. Logg inn for å halde fram. errors: messages: - already_confirmed: er allereie stadfesta, prøv logge inn + already_confirmed: er allereie stadfesta, prøv å logge inn confirmation_period_expired: må verte stadfesta innan %{period}, spør etter ein ny - expired: er utgått, ver venleg å beda om ein ny ein + expired: er utgått, ver venleg å be om ein ny ein not_found: ikkje funne not_locked: var ikkje låst not_saved: one: '1 feil hindra %{resource} frå verte lagra:' - other: "%{count} feil hindra %{resource} frå verte lagra:" + other: "%{count} feil hindra %{resource} frå å verte lagra:" diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml index db7c4d01a3f..5efa63bc9ca 100644 --- a/config/locales/doorkeeper.fi.yml +++ b/config/locales/doorkeeper.fi.yml @@ -60,6 +60,7 @@ fi: error: title: Tapahtui virhe new: + prompt_html: "%{client_name} pyytää lupaa käyttää tiliäsi. Se on kolmannen osapuolen sovellus. Jos et luota siihen, sinun ei pitäisi sallia sitä." review_permissions: Tarkista käyttöoikeudet title: Valtuutus vaaditaan show: @@ -70,6 +71,8 @@ fi: confirmations: revoke: Oletko varma? index: + authorized_at: Valtuutettu %{date} + description_html: Nämä ovat sovelluksia, jotka voivat käyttää tiliäsi käyttäen API. Jos et tunnista sitä tai sovellus toimii väärin, voit peruuttaa sen käyttöoikeuden. last_used_at: Viimeksi käytetty %{date} never_used: Ei käytetty scopes: Oikeudet @@ -116,6 +119,9 @@ fi: write: Vain kirjoitus title: accounts: Tilit + admin/accounts: Tilien hallinta + admin/all: Kaikki hallinnolliset toiminnot + admin/reports: Raporttien hallinta all: Kaikki blocks: Torjutut bookmarks: Kirjanmerkit @@ -147,6 +153,7 @@ fi: admin:write: muokata kaikkia tietoja palvelimella admin:write:accounts: suorita moderointitoiminnot tileillä admin:write:reports: suorita moderointitoiminnot raporteissa + crypto: käytä päästä päähän salausta follow: seurata, estää, perua eston ja lopettaa tilien seuraaminen push: vastaanottaa push-ilmoituksesi read: lukea tilin tietoja @@ -166,6 +173,7 @@ fi: write:accounts: muokata profiiliasi write:blocks: estää tilit ja palvelimet write:bookmarks: kirjanmerkki viestit + write:conversations: mykistä ja poistaa keskustelut write:favourites: suosikki viestit write:filters: luoda suodattimia write:follows: seurata ihmisiä diff --git a/config/locales/doorkeeper.nn.yml b/config/locales/doorkeeper.nn.yml index 789b50f619f..d17d38c3f6e 100644 --- a/config/locales/doorkeeper.nn.yml +++ b/config/locales/doorkeeper.nn.yml @@ -60,6 +60,7 @@ nn: error: title: Ein feil har oppstått new: + prompt_html: "%{client_name} ønsker tilgang til kontoen din. Det er ein tredjepartsapplikasjon. Dersom du ikkje stolar på den, bør du ikkje autorisere det." title: Autorisasjon nødvendig show: title: Kopier denne autorisasjonskoden og lim den inn i applikasjonen. @@ -69,6 +70,9 @@ nn: confirmations: revoke: Er du sikker? index: + authorized_at: Autorisert den %{date} + last_used_at: Sist brukt den %{date} + never_used: Aldri brukt title: Dine autoriserte applikasjonar errors: messages: @@ -104,6 +108,25 @@ nn: authorized_applications: destroy: notice: App avvist. + grouped_scopes: + title: + accounts: Kontoar + admin/accounts: Kontoadministrasjon + admin/all: Alle administrative funksjonar + admin/reports: Rapportadministrasjon + all: Alt + bookmarks: Bokmerke + conversations: Samtalar + crypto: Ende-til-ende-kryptering + favourites: Favorittar + filters: Filter + lists: Lister + media: Mediavedlegg + mutes: Målbindingar + notifications: Varsel + reports: Rapportar + search: Søk + statuses: Innlegg layouts: admin: nav: @@ -118,6 +141,7 @@ nn: admin:write: modifisere alle data på tjeneren admin:write:accounts: utføre moderatorhandlinger på kontoer admin:write:reports: utføre moderatorhandlinger på rapporter + crypto: bruk ende-til-ende-kryptering follow: følg, blokkér, avblokkér, avfølg brukere push: motta dine varsler read: lese dine data @@ -132,12 +156,13 @@ nn: read:notifications: sjå varsla dine read:reports: sjå rapportane dine read:search: søke på dine vegne - read:statuses: sjå alle statusar + read:statuses: sjå alle innlegg write: poste på dine vegne - write:accounts: rediger profilen din + write:accounts: redigera profilen din write:blocks: blokker kontoar og domene write:bookmarks: bokmerk statusar - write:favourites: merk statusar som favoritt + write:conversations: målbind og slett samtalar + write:favourites: merk innlegg som favoritt write:filters: lag filter write:follows: fylg folk write:lists: lag lister @@ -145,4 +170,4 @@ nn: write:mutes: målbind folk og samtalar write:notifications: tøm varsla dine write:reports: rapporter andre folk - write:statuses: legg ut statusar + write:statuses: publiser innlegg diff --git a/config/locales/doorkeeper.th.yml b/config/locales/doorkeeper.th.yml index a7e4a69a522..a0913dc92cd 100644 --- a/config/locales/doorkeeper.th.yml +++ b/config/locales/doorkeeper.th.yml @@ -88,7 +88,7 @@ th: invalid_request: missing_param: 'พารามิเตอร์ที่จำเป็นขาดหายไป: %{value}' request_not_authorized: คำขอจำเป็นต้องได้รับอนุญาต พารามิเตอร์ที่จำเป็นสำหรับการอนุญาตคำขอขาดหายไปหรือไม่ถูกต้อง - unknown: คำขอไม่มีพารามิเตอร์ที่จำเป็น รวมค่าพารามิเตอร์ที่ไม่รองรับ หรือผิดรูปแบบ + unknown: คำขอไม่มีพารามิเตอร์ที่จำเป็น รวมค่าพารามิเตอร์ที่ไม่รองรับ หรือมิฉะนั้นผิดรูปแบบ invalid_resource_owner: ข้อมูลประจำตัวเจ้าของทรัพยากรที่ให้มาไม่ถูกต้อง หรือไม่พบเจ้าของทรัพยากร invalid_scope: ขอบเขตที่ขอไม่ถูกต้อง ไม่รู้จัก หรือผิดรูปแบบ invalid_token: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 5d3e1e367af..6ac1eb45d5d 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -26,16 +26,18 @@ eo: ' learn_more: Lerni pli + logged_in_as_html: Vi nun salutis kiel %{username}. logout_before_registering: Vi jam salutis. - privacy_policy: Privateca politiko + privacy_policy: Politiko de privateco rules: Reguloj de la servilo see_whats_happening: Vidi kio okazas - server_stats: Servo statuso + server_stats: 'Statistiko de la servilo:' source_code: Fontkodo status_count_after: one: mesaĝo other: mesaĝoj status_count_before: Kie skribiĝis + tagline: Malcentrigita socia retejo terms: Kondiĉoj de la servo unavailable_content: Moderigitaj serviloj unavailable_content_description: @@ -108,9 +110,9 @@ eo: delete: Forigi datumojn deleted: Forigita demote: Degradi - disable: Malebligi - disable_two_factor_authentication: Malebligi 2FA - disabled: Malebligita + disable: Frostigi + disable_two_factor_authentication: Malaktivigi 2FA-n + disabled: Frostigita display_name: Montrata nomo domain: Domajno edit: Redakti @@ -220,9 +222,9 @@ eo: destroy_ip_block: Forigi IP-regulon destroy_status: Forigi mesaĝon destroy_unavailable_domain: Forigi Nehaveblan Domajnon - disable_2fa_user: Malebligi 2FA - disable_custom_emoji: Malebligi Propran Emoĝion - disable_user: Malebligi uzanton + disable_2fa_user: Malaktivigi 2FA-n + disable_custom_emoji: Malaktivigi la proprajn emoĝiojn + disable_user: Malaktivigi la uzanton enable_custom_emoji: Ebligi Propran Emoĝion enable_sign_in_token_auth_user: Aktivigi la aŭtentigon de peco per retpoŝto por la uzanto enable_user: Ebligi uzanton @@ -265,9 +267,9 @@ eo: destroy_email_domain_block_html: "%{name} malblokis retpoŝtan domajnon %{target}" destroy_ip_block_html: "%{name} forigis regulon por IP %{target}" destroy_status_html: "%{name} forigis mesaĝojn de %{target}" - disable_2fa_user_html: "%{name} malebligis dufaktoran aŭtentigon por uzanto %{target}" - disable_custom_emoji_html: "%{name} malebligis emoĝion %{target}" - disable_user_html: "%{name} malebligis ensaluton por uzanto %{target}" + disable_2fa_user_html: "%{name} malaktivigis la postulon de la dufaktora aŭtentigo por la uzanto %{target}" + disable_custom_emoji_html: "%{name} neebligis la emoĝion %{target}" + disable_user_html: "%{name} neebligis la saluton de la uzanto %{target}" enable_custom_emoji_html: "%{name} ebligis emoĝion %{target}" enable_user_html: "%{name} ebligis ensaluton por uzanto %{target}" memorialize_account_html: "%{name} ŝanĝis la konton de %{target} al memora paĝo" @@ -310,9 +312,9 @@ eo: created_msg: Emoĝio sukcese kreita! delete: Forigi destroyed_msg: Emoĝio sukcese forigita! - disable: Malebligi - disabled: Malebligita - disabled_msg: Emoĝio sukcese malebligita + disable: Neebligi + disabled: Neebligita + disabled_msg: La emoĝio sukcese neebligita emoji: Emoĝio enable: Ebligi enabled: Ebligita @@ -458,11 +460,11 @@ eo: add_new: Aldoni novan ripetilon delete: Forigi description_html: "Fratara ripetilo estas survoja servilo, kiu interŝanĝas grandan kvanton de publikaj mesaĝoj inter serviloj, kiuj abonas kaj publikigas al ĝi. Ĝi povas helpi etajn kaj mezgrandajn servilojn malkovri enhavon de la fediverse, kio normale postulus al lokaj uzantoj mane sekvi homojn de foraj serviloj." - disable: Malebligi - disabled: Malebligita + disable: Neebligi + disabled: Neebligita enable: Ebligi enable_hint: Post ebligo, via servilo abonos ĉiujn publikajn mesaĝojn de tiu ripetilo, kaj komencos sendi publikajn mesaĝojn de la servilo al ĝi. - enabled: Malebligita + enabled: Ebligita inbox_url: URL de la ripetilo pending: Atendante aprobon de la ripetilo save_and_enable: Konservi kaj ebligi @@ -618,7 +620,7 @@ eo: strikes: actions: delete_statuses: "%{name} forigis afiŝojn de %{target}" - disable: "%{name} malebligis la konton de %{target}" + disable: "%{name} frostigis la konton de %{target}" suspend: "%{name} suspendis la konton de %{target}" appeal_approved: Apelaciita system_checks: @@ -644,6 +646,9 @@ eo: allow_account: Permesi aŭtoron disallow: Malpermesi afiŝon disallow_account: Malpermesi aŭtoron + shared_by: + one: Kundividita kaj aldonita al preferaĵoj unufoje + other: Kundividita kaj aldonita al preferaĵoj %{friendly_count}-foje title: Tendencantaj afiŝoj tags: dashboard: @@ -660,7 +665,7 @@ eo: admin_mailer: new_appeal: actions: - disable: por malebligi ties konton + disable: por frostigi ties konton new_pending_account: body: La detaloj de la nova konto estas sube. Vi povas aprobi aŭ Malakcepti ĉi kandidatiĝo. subject: Nova konto atendas por recenzo en %{instance} (%{username}) @@ -765,7 +770,7 @@ eo: invalid_signature: 올바른 Ed25519 시그니처가 아닙니다 date: formats: - default: "%d de %b %Y" + default: "%Y-%b-%d" with_month_name: "%e-a de %B %Y" datetime: distance_in_words: @@ -858,7 +863,7 @@ eo: errors: invalid_context: Neniu aŭ nevalida kunteksto donita index: - contexts: Filtri en %{contexts} + contexts: Filtriloj en %{contexts} delete: Forigi empty: Vi havas neniun filtrilon. expires_in: Eksvalidiĝi en %{distance} @@ -922,7 +927,7 @@ eo: one: 1 uzo other: "%{count} uzoj" max_uses_prompt: Neniu limo - prompt: Krei kaj diskonigi ligilojn al aliaj por doni aliron al ĉi tiu servilo + prompt: Generi kaj kundividi ligilojn kun aliaj personoj por doni aliron al ĉi tiu servilo table: expires_at: Eksvalidiĝas je uses: Uzoj @@ -994,9 +999,9 @@ eo: subject: "%{name} menciis vin" title: Nova mencio reblog: - body: "%{name} diskonigis vian mesaĝon:" - subject: "%{name} diskonigis vian mesaĝon" - title: Nova diskonigo + body: 'Via mesaĝo estas suprenigita de %{name}:' + subject: "%{name} suprenigis vian mesaĝon" + title: Nova suprenigo status: subject: "%{name} ĵus afiŝita" update: @@ -1076,8 +1081,8 @@ eo: proceed: Konfirmi la stelumon prompt: 'Vi volas aldoni ĉi tiun mesaĝon al viaj preferaĵoj:' reblog: - proceed: Konfirmi la diskonigon - prompt: 'Vi volas diskonigi ĉi tiun mesaĝon:' + proceed: Procedi pri la suprenigo + prompt: 'Vi deziras suprenigi ĉi tiun mesaĝon:' reply: proceed: Konfirmi la respondon prompt: 'Vi volas respondi al ĉi tiu mesaĝo:' @@ -1161,7 +1166,7 @@ eo: video: one: "%{count} video" other: "%{count} videoj" - boosted_from_html: Diskonigita de %{acct_link} + boosted_from_html: Suprenigita de %{acct_link} content_warning: 'Averto de la enhavo: %{warning}' default_language: Same kiel lingvo de la fasado disallowed_hashtags: @@ -1172,7 +1177,7 @@ eo: pin_errors: limit: Vi jam atingis la maksimuman nombron de alpinglitaj mesaĝoj ownership: Mesaĝo de iu alia ne povas esti alpinglita - reblog: Diskonigo ne povas esti alpinglita + reblog: Suprenigo ne povas esti alpinglita poll: total_people: one: "%{count} persono" @@ -1199,7 +1204,7 @@ eo: enabled: Aŭtomate forigi malnovajn postojn exceptions: Esceptoj ignore_favs: Ignori la preferaĵojn - ignore_reblogs: Ignori akcelojn + ignore_reblogs: Ignori la suprenigojn keep_direct: Konservi rektajn mesaĝojn keep_direct_hint: Ne forigos viajn rektajn mesagôjn keep_media: Konservi la mesaĝojn kun aŭdovidaj aldonaĵoj @@ -1216,7 +1221,7 @@ eo: '7889238': 3 monatoj stream_entries: pinned: Alpinglita - reblogged: diskonigita + reblogged: suprenigita sensitive_content: Tikla enhavo tags: does_not_match_previous_name: ne kongruas kun la antaŭa nomo @@ -1233,8 +1238,8 @@ eo: time: "%H:%M" two_factor_authentication: add: Aldoni - disable: Malebligi - disabled_success: Dufaktora aŭtentigo sukcese malebligita + disable: Malaktivigi 2FA-n + disabled_success: Du-faktora aŭtentigo sukcese malaktivigita edit: Redakti enabled: Dufaktora aŭtentigo ebligita enabled_success: Dufaktora aŭtentigo sukcese ebligita diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 7ba46a89c30..8faa88f5692 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -103,11 +103,17 @@ es-MX: avatar: Foto de perfil by_domain: Dominio change_email: + changed_msg: "¡Email cambiado con éxito!" current_email: Correo electrónico actual label: Cambiar el correo electrónico new_email: Nuevo correo electrónico submit: Cambiar el correo electrónico title: Cambiar el correo electrónico de %{username} + change_role: + changed_msg: "¡Rol cambiado con éxito!" + label: Cambiar rol + no_role: Sin rol + title: Cambiar rol para %{username} confirm: Confirmar confirmed: Confirmado confirming: Confirmando @@ -151,6 +157,7 @@ es-MX: active: Activo all: Todos pending: Pendiente + silenced: Limitado suspended: Suspendidos title: Moderación moderation_notes: Notas de moderación @@ -158,6 +165,7 @@ es-MX: most_recent_ip: IP más reciente no_account_selected: Ninguna cuenta se cambió como ninguna fue seleccionada no_limits_imposed: Sin límites impuestos + no_role_assigned: Ningún rol asignado not_subscribed: No se está suscrito pending: Revisión pendiente perform_full_suspension: Suspender @@ -184,6 +192,7 @@ es-MX: reset: Reiniciar reset_password: Reiniciar contraseña resubscribe: Re-suscribir + role: Rol search: Buscar search_same_email_domain: Otros usuarios con el mismo dominio de correo search_same_ip: Otros usuarios con la misma IP @@ -640,6 +649,67 @@ es-MX: unresolved: No resuelto updated_at: Actualizado view_profile: Ver perfil + roles: + add_new: Añadir rol + assigned_users: + one: "%{count} usuario" + other: "%{count} usuarios" + categories: + administration: Administración + devops: DevOps + invites: Invitaciones + moderation: Moderación + special: Especial + delete: Eliminar + description_html: Con roles de usuario, puede personalizar las funciones y áreas de Mastodon a las que pueden acceder sus usuarios. + edit: Editar rol '%{name}' + everyone: Permisos por defecto + everyone_full_description_html: Este es el rol base que afecta a todos los usuarios, incluso aquellos sin un rol asignado. Todos los otros roles heredan permisos de él. + permissions_count: + one: "%{count} permiso" + other: "%{count} permisos" + privileges: + administrator: Administrador + administrator_description: Los usuarios con este permiso saltarán todos los permisos + delete_user_data: Borrar Datos de Usuario + delete_user_data_description: Permite a los usuarios eliminar los datos de otros usuarios sin demora + invite_users: Invitar usuarios + invite_users_description: Permite a los usuarios invitar a nuevas personas al servidor + manage_announcements: Administrar Anuncios + manage_announcements_description: Permite a los usuarios gestionar anuncios en el servidor + manage_appeals: Administrar Apelaciones + manage_appeals_description: Permite a los usuarios revisar apelaciones contra acciones de moderación + manage_blocks: Administrar Bloqueos + manage_blocks_description: Permite a los usuarios bloquear los proveedores de e-mail y las direcciones IP + manage_custom_emojis: Administrar Emojis Personalizados + manage_custom_emojis_description: Permite a los usuarios gestionar emojis personalizados en el servidor + manage_federation: Administrar Federación + manage_federation_description: Permite a los usuarios bloquear o permitir la federación con otros dominios, y controlar la entregabilidad + manage_invites: Administrar Invitaciones + manage_invites_description: Permite a los usuarios navegar y desactivar los enlaces de invitación + manage_reports: Administrar Informes + manage_reports_description: Permite a los usuarios revisar informes y realizar acciones de moderación basadas en ellos + manage_roles: Administrar Roles + manage_roles_description: Permite a los usuarios administrar y asignar roles por debajo de los suyos + manage_rules: Gestionar Reglas + manage_rules_description: Permite a los usuarios cambiar las reglas del servidor + manage_settings: Administrar Ajustes + manage_settings_description: Permite a los usuarios cambiar la configuración del sitio + manage_taxonomies: Administrar Taxonomías + manage_taxonomies_description: Permite a los usuarios revisar el contenido en tendencia y actualizar la configuración de las etiquetas + manage_user_access: Administrar Acceso de Usuarios + manage_user_access_description: Permite a los usuarios desactivar la autenticación de dos factores de otros usuarios, cambiar su dirección de correo electrónico y restablecer su contraseña + manage_users: Administrar Usuarios + manage_users_description: Permite a los usuarios ver los detalles de otros usuarios y realizar acciones de moderación contra ellos + manage_webhooks: Administrar Webhooks + manage_webhooks_description: Permite a los usuarios configurar webhooks para eventos administrativos + view_audit_log: Ver Registro de Auditoría + view_audit_log_description: Permite a los usuarios ver un historial de acciones administrativas en el servidor + view_dashboard: Ver Panel de Control + view_dashboard_description: Permite a los usuarios acceder al panel de control y varias métricas + view_devops: DevOps + view_devops_description: Permite a los usuarios acceder a los paneles de control Sidekiq y pgHero + title: Roles rules: add_new: Añadir norma delete: Eliminar diff --git a/config/locales/gd.yml b/config/locales/gd.yml index bdbd26199f8..c98235cffd6 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -40,6 +40,7 @@ gd: other: post two: phost status_count_before: A dh’fhoillsich + tagline: Lìonra sòisealta sgaoilte terms: Teirmichean na seirbheise unavailable_content: Frithealaichean fo mhaorsainneachd unavailable_content_description: @@ -110,11 +111,17 @@ gd: avatar: Avatar by_domain: Àrainn change_email: + changed_msg: Chaidh am post-d atharrachadh! current_email: Am post-d làithreach label: Atharraich am post-d new_email: Post-d ùr submit: Atharraich am post-d title: Atharraich am post-d airson %{username} + change_role: + changed_msg: Chaidh an dreuchd atharrachadh! + label: Atharraich an dreuchd + no_role: Gun dreuchd + title: Atharraich an dreuchd aig %{username} confirm: Dearbh confirmed: Chaidh a dhearbhachadh confirming: "’Ga dhearbhadh" @@ -158,6 +165,7 @@ gd: active: Gnìomhach all: Na h-uile pending: Ri dhèiligeadh + silenced: Cuingichte suspended: À rèim title: Maorsainneachd moderation_notes: Nòtaichean na maorsainneachd @@ -165,6 +173,7 @@ gd: most_recent_ip: An IP as ùire no_account_selected: Cha deach cunntas sam bith atharrachadh o nach deach gin dhiubh a thaghadh no_limits_imposed: Cha deach crìoch sam bith a sparradh + no_role_assigned: Cha deach dreuchd iomruineadh not_subscribed: Gun fho-sgrìobhadh pending: A’ feitheamh air lèirmheas perform_full_suspension: Cuir à rèim @@ -193,6 +202,7 @@ gd: reset: Ath-shuidhich reset_password: Ath-shuidhich am facal-faire resubscribe: Fo-sgrìobh a-rithist + role: Dreuchd search: Lorg search_same_email_domain: Cleachdaichean eile aig a bheil an aon àrainn puist-d search_same_ip: Cleachdaichean eile aig a bheil an t-aon IP @@ -667,6 +677,71 @@ gd: unresolved: Gun fhuasgladh updated_at: Air ùrachadh view_profile: Seall a’ phròifil + roles: + add_new: Cuir dreuchd ris + assigned_users: + few: "%{count} cleachdaichean" + one: "%{count} chleachdaiche" + other: "%{count} cleachdaiche" + two: "%{count} chleachdaiche" + categories: + administration: Rianachd + devops: DevOps + invites: Cuiridhean + moderation: Maorsainneachd + special: Sònraichte + delete: Sguab às + description_html: Le dreuchdan chleachdaichean, ’s urrainn dhut gnàthachadh dè na gleusan is raointean de Mhastodon as urrainn dha na cleachdaichean agad inntrigeadh. + edit: Deasaich an dreuchd aig “%{name}“ + everyone: Na ceadan bunaiteach + everyone_full_description_html: Seo an dreuchd bhunaiteach a bheir buaidh air gach cleachdaiche, fiù an fheadhainn nach deach dreuchd iomruineadh dhaibh. Gheibh a h-uile dreuch ceadan uaipe mar dhìleab. + permissions_count: + few: "%{count} ceadan" + one: "%{count} chead" + other: "%{count} cead" + two: "%{count} chead" + privileges: + administrator: Rianaire + administrator_description: Chan eil cuingeachadh sam bith air na cleachdaichean aig bheil an cead seo + delete_user_data: Sguab às dàta a’ chleachdaiche + delete_user_data_description: Leigidh seo le cleachdaichean dàta chleachdaichean eile a sguabadh às gun dàil + invite_users: Thoir cuireadh do chleachdaichean + invite_users_description: Leigidh seo le cleachdaichean cuireadh dhan fhrithealaiche a chur gu daoine eile + manage_announcements: Stiùireadh nam brathan-fios + manage_announcements_description: Leigidh seo le cleachdaichean brathan-fios a stiùireadh air an fhrithealaiche + manage_appeals: Stiùireadh ath-thagraidhean + manage_appeals_description: Leigidh seo le cleachdaichean lèirmheas a dhèanamh air ath-thagraidhean an aghaidh gnìomhan mhaor + manage_blocks: Stiùireadh nam bacaidhean + manage_blocks_description: Leigidh seo le cleachdaichean solaraichean puist-d is seòlaidhean IP a bhacadh + manage_custom_emojis: Stiùireadh nan Emojis gnàthaichte + manage_custom_emojis_description: Leigidh seo le cleachdaichean Emojis gnàthaichte a stiùireadh air an fhrithealaiche + manage_federation: Stiùireadh a’ cho-nasgaidh + manage_federation_description: Leigidh seo le cleachdaichean an co-nasgadh le àrainnean eile a bhacadh no a cheadachadh agus stiùireadh dè ghabhas lìbhrigeadh + manage_invites: Stiùireadh nan cuiridhean + manage_invites_description: Leigidh seo le cleachdaichean ceanglaichean cuiridh a rùrachadh ’s a chur à gnìomh + manage_reports: Stiùireadh ghearanan + manage_reports_description: Leigidh seo le cleachdaichean lèirmheas a dhèanamh air gearanan agus gnìomhan maoir a ghabhail ’nan aghaidh + manage_roles: Stiùireadh dhreuchdan + manage_roles_description: Leigidh seo le cleachdaichean dreuchdan a stiùireadh is iomruineadh do dh’ìochdaran + manage_rules: Stiùireadh nan riaghailtean + manage_rules_description: Leigidh seo le cleachdaichean riaghailtean an fhrithealaiche atharrachadh + manage_settings: Stiùireadh nan roghainnean + manage_settings_description: Leigidh seo le cleachdaichean roghainnean na làraich atharrachadh + manage_taxonomies: Stiùireadh thacsonamaidhean + manage_taxonomies_description: Leigidh seo le cleachdaichean lèirmheas a dhèanamh air an t-susbaint a tha a’ treandadh agus roghainnean nan tagaichean hais ùrachadh + manage_user_access: Stiùireadh inntrigeadh chleachdaichean + manage_user_access_description: Leigidh seo le cleachdaichean gun cuir iad à comas dearbhadh dà-cheumnach càich, gun atharraich iad an seòladh puist-d aca is gun ath-shuidhich iad am facal-faire aca + manage_users: Stiùireadh chleachdaichean + manage_users_description: Leigidh seo le cleachdaichean mion-fhiosrachadh càich a shealltainn agus gnìomhan maoir a ghabhail ’nan aghaidh + manage_webhooks: Stiùireadh nan webhooks + manage_webhooks_description: Leigidh seo le cleachdaichean webhooks a shuidheachadh do thachartasan na rianachd + view_audit_log: Coimhead air an loga sgrùdaidh + view_audit_log_description: Leigidh seo le cleachdaichean coimhead air eachdraidh gnìomhan na rianachd air an fhrithealaiche + view_dashboard: Coimhead air an deas-bhòrd + view_dashboard_description: Leigidh seo le cleachdaichean an deas-bhòrd agus meatrachdan inntrigeadh + view_devops: DevOps + view_devops_description: Leigidh seo le cleachdaichean na deas-bhùird aig Sidekiq is pgHero inntrigeadh + title: Dreuchdan rules: add_new: Cuir riaghailt ris delete: Sguab às @@ -870,6 +945,28 @@ gd: edit_preset: Deasaich rabhadh ro-shuidhichte empty: Cha do mhìnich thu ro-sheataichean rabhaidhean fhathast. title: Stiùirich na rabhaidhean ro-shuidhichte + webhooks: + add_new: Cuir puing-dheiridh ris + delete: Sguab às + description_html: Bheir webhook comas do Mhastodon gus brathan fìor-ama a phutadh dhan aplacaid agad fhèin mu na tachartasan a thagh thu ach an adhbharaich an aplacaid agad freagairtean gu fèin-obrachail. + disable: Cuir à comas + disabled: À comas + edit: Deasaich a’ phuing-dheiridh + empty: Cha deach puing-deiridh webhook sam bith a rèiteachadh fhathast. + enable: Cuir an comas + enabled: Gnìomhach + enabled_events: + few: Tha %{count} tachartasan an comas + one: Tha %{count} tachartas an comas + other: Tha %{count} tachartas an comas + two: Tha %{count} thachartas an comas + events: Tachartasan + new: Webhook ùr + rotate_secret: Cuairtich an rùn + secret: Rùn soidhnich + status: Staid + title: Webhooks + webhook: Webhook admin_mailer: new_appeal: actions: @@ -1122,14 +1219,26 @@ gd: public: Loidhnichean-ama poblach thread: Còmhraidhean edit: + add_keyword: Cuir facal-luirg ris + keywords: Faclan-luirg title: Deasaich a’ chriathrag errors: + deprecated_api_multiple_keywords: Cha ghabh na paramadairean seo atharrachadh on aplacaid seo on a bhios iad an sàs air iomadh facal-luirg na criathraige. Cleachd aplacaid nas ùire no an eadar-aghaidh-lìn. invalid_context: Cha deach co-theacs a sholar no tha e mì-dhligheach index: + contexts: Criathradh am broinn %{contexts} delete: Sguab às empty: Chan eil criathrag agad. + expires_in: Falbhaidh an ùine air an ceann %{distance} + expires_on: Falbhaidh an ùine air %{date} + keywords: + few: "%{count} faclan-luirg" + one: "%{count} fhacal-luirg" + other: "%{count} facal-luirg" + two: "%{count} fhacal-luirg" title: Criathragan new: + save: Sàbhail a’ chriathrag ùr title: Cuir criathrag ùr ris footer: developers: Luchd-leasachaidh @@ -1252,6 +1361,8 @@ gd: copy_account_note_text: 'Da cleachdaiche air gluasad o %{acct}, seo na nòtaichean a bh’ agad mu dhèidhinn roimhe:' notification_mailer: admin: + report: + subject: Rinn %{name} gearan sign_up: subject: Chlàraich %{name} digest: @@ -1328,7 +1439,7 @@ gd: polls: errors: already_voted: Chuir thu bhòt sa chunntas-bheachd seo mu thràth - duplicate_options: " – tha nithean dùblaichte ann" + duplicate_options: "– tha nithean dùblaichte ann" duration_too_long: "– tha seo ro fhad air falbh san àm ri teachd" duration_too_short: "– tha seo ro aithghearr" expired: Tha an cunntas-bheachd air a thighinn gu crìoch diff --git a/config/locales/he.yml b/config/locales/he.yml index 74fee81cc0e..2106423bcf4 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -200,15 +200,15 @@ he: send: שלח מחדש דוא"ל אימות success: הודעת האימייל נשלחה בהצלחה! reset: איפוס - reset_password: אתחול סיסמא + reset_password: איפוס סיסמה resubscribe: להרשם מחדש role: תפקיד search: חיפוש search_same_email_domain: משתמשים אחרים מאותו דומיין דוא"ל search_same_ip: משתמשים אחרים מאותה כתובת IP security_measures: - only_password: סיסמא בלבד - password_and_2fa: סיסמא ואימות דו-גורמי + only_password: סיסמה בלבד + password_and_2fa: סיסמה ואימות דו-שלבי sensitive: מאולצים לרגישות sensitized: מסומנים כרגישים shared_inbox_url: תיבה משותפת לדואר נכנס @@ -277,7 +277,7 @@ he: reject_user: דחיית משתמש remove_avatar_user: הסרת תמונת פרופיל reopen_report: פתיחת דו"ח מחדש - reset_password_user: איפוס סיסמא + reset_password_user: איפוס סיסמה resolve_report: פתירת דו"ח sensitive_account: חשבון רגיש לכח silence_account: הגבלת חשבון @@ -328,7 +328,7 @@ he: reject_user_html: "%{name} דחו הרשמה מ-%{target}" remove_avatar_user_html: "%{name} הסירו את תמונת הפרופיל של %{target}" reopen_report_html: '%{name} פתח מחדש דו"ח %{target}' - reset_password_user_html: "%{name} איפס/ה סיסמא עבור המשתמש %{target}" + reset_password_user_html: הסיסמה עבור המשתמש %{target} התאפסה על־ידי %{name} resolve_report_html: '%{name} פתר/ה דו"ח %{target}' sensitive_account_html: "%{name} סימן/ה את המדיה של %{target} כרגיש" silence_account_html: "%{name} הגביל/ה את חשבונו של %{target}" @@ -1036,7 +1036,7 @@ he: your_token: אסימון הגישה שלך auth: apply_for_account: בקשת הזמנה - change_password: סיסמא + change_password: סיסמה checkbox_agreement_html: אני מסכים/ה לכללי השרת ולתנאי השימוש checkbox_agreement_without_rules_html: אני מסכים/ה לתנאי השימוש delete_account: מחיקת חשבון @@ -1048,7 +1048,7 @@ he: didnt_get_confirmation: לא התקבלו הוראות אימות? dont_have_your_security_key: אין לך מפתח אבטחה? forgot_password: הנשתכחה סיסמתך? - invalid_reset_password_token: אסימון איפוס הסיסמא לא תקין או פג תוקף. נא לבקש אחד חדש. + invalid_reset_password_token: טוקן איפוס הסיסמה אינו תקין או שפג תוקף. נא לבקש אחד חדש. link_to_otp: נא להכניס את קוד האימות הדו-גורמי מהטלפון או את קוד האחזור link_to_webauth: נא להשתמש במכשיר מפתח האבטחה log_in_with: התחבר באמצעות @@ -1063,9 +1063,9 @@ he: register: הרשמה registration_closed: "%{instance} לא מקבל חברים חדשים" resend_confirmation: שלח הוראות אימות בשנית - reset_password: איפוס סיסמא - security: החלפת סיסמא - set_new_password: שינוי סיסמא + reset_password: איפוס סיסמה + security: אבטחה + set_new_password: סיסמה חדשה setup: email_below_hint_html: אם כתובת הדוא"ל להלן לא נכונה, ניתן לשנותה כאן ולקבל דוא"ל אישור חדש. email_settings_hint_html: דוא"ל האישור נשלח ל-%{email}. אם כתובת הדוא"ל הזו לא נכונה, ניתן לשנותה בהגדרות החשבון. @@ -1095,8 +1095,8 @@ he: challenge: confirm: המשך hint_html: "טיפ: לא נבקש את סיסמתך שוב בשעה הקרובה." - invalid_password: סיסמא שגויה - prompt: אשר/י סיסמא להמשך + invalid_password: סיסמה שגויה + prompt: יש לאשר את הסיסמה כדי להמשיך crypto: errors: invalid_key: זהו לא מפתח Ed25519 או Curve25519 קביל @@ -1121,7 +1121,7 @@ he: x_seconds: "%{count} שניות" deletes: challenge_not_passed: המידע שהכנסת לא היה נכון - confirm_password: נא להכניס את הסיסמא הנוכחית כדי לוודא את זהותך + confirm_password: נא להכניס את הסיסמה הנוכחית כדי לאמת את זהותך confirm_username: נא להכניס את שם המשתמש כדאי לאשר את הפעולה proceed: מחיקת חשבון success_msg: חשבונך נמחק בהצלחה @@ -1308,7 +1308,7 @@ he: login_activities: authentication_methods: otp: יישומון אימות דו-שלבי - password: סיסמא + password: סיסמה sign_in_token: קוד אימות בדוא"ל webauthn: מפתחות אבטחה description_html: אם את/ה רואה פעילות שאינך מזהה, אנא שנה/י את סיסמתך והפעל/י אימות דו-גורמי. @@ -1672,6 +1672,87 @@ he: tags: does_not_match_previous_name: לא תואם את השם האחרון terms: + body_html: | +

    מדיניות פרטיות

    +

    איזה מידע אנחנו אוספים ?

    + +
      +
    • מידע חשבון בסיסי: If you register on this server, you may be asked to enter a username, an e-mail address and a password. You may also enter additional profile information such as a display name and biography, and upload a profile picture and header image. The username, display name, biography, profile picture and header image are always listed publicly.
    • +
    • Posts, following and other public information: The list of people you follow is listed publicly, the same is true for your followers. When you submit a message, the date and time is stored as well as the application you submitted the message from. Messages may contain media attachments, such as pictures and videos. Public and unlisted posts are available publicly. When you feature a post on your profile, that is also publicly available information. Your posts are delivered to your followers, in some cases it means they are delivered to different servers and copies are stored there. When you delete posts, this is likewise delivered to your followers. The action of reblogging or favouriting another post is always public.
    • +
    • Direct and followers-only posts: All posts are stored and processed on the server. Followers-only posts are delivered to your followers and users who are mentioned in them, and direct posts are delivered only to users mentioned in them. In some cases it means they are delivered to different servers and copies are stored there. We make a good faith effort to limit the access to those posts only to authorized persons, but other servers may fail to do so. Therefore it's important to review servers your followers belong to. You may toggle an option to approve and reject new followers manually in the settings. Please keep in mind that the operators of the server and any receiving server may view such messages, and that recipients may screenshot, copy or otherwise re-share them. Do not share any sensitive information over Mastodon.
    • +
    • IPs and other metadata: When you log in, we record the IP address you log in from, as well as the name of your browser application. All the logged in sessions are available for your review and revocation in the settings. The latest IP address used is stored for up to 12 months. We also may retain server logs which include the IP address of every request to our server.
    • +
    + +
    + +

    What do we use your information for?

    + +

    Any of the information we collect from you may be used in the following ways:

    + +
      +
    • To provide the core functionality of Mastodon. You can only interact with other people's content and post your own content when you are logged in. For example, you may follow other people to view their combined posts in your own personalized home timeline.
    • +
    • To aid moderation of the community, for example comparing your IP address with other known ones to determine ban evasion or other violations.
    • +
    • The email address you provide may be used to send you information, notifications about other people interacting with your content or sending you messages, and to respond to inquiries, and/or other requests or questions.
    • +
    + +
    + +

    How do we protect your information?

    + +

    We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL, and your password is hashed using a strong one-way algorithm. You may enable two-factor authentication to further secure access to your account.

    + +
    + +

    What is our data retention policy?

    + +

    We will make a good faith effort to:

    + +
      +
    • Retain server logs containing the IP address of all requests to this server, in so far as such logs are kept, no more than 90 days.
    • +
    • Retain the IP addresses associated with registered users no more than 12 months.
    • +
    + +

    You can request and download an archive of your content, including your posts, media attachments, profile picture, and header image.

    + +

    You may irreversibly delete your account at any time.

    + +
    + +

    Do we use cookies?

    + +

    Yes. Cookies are small files that a site or its service provider transfers to your computer's hard drive through your Web browser (if you allow). These cookies enable the site to recognize your browser and, if you have a registered account, associate it with your registered account.

    + +

    We use cookies to understand and save your preferences for future visits.

    + +
    + +

    Do we disclose any information to outside parties?

    + +

    We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety.

    + +

    Your public content may be downloaded by other servers in the network. Your public and followers-only posts are delivered to the servers where your followers reside, and direct messages are delivered to the servers of the recipients, in so far as those followers or recipients reside on a different server than this.

    + +

    When you authorize an application to use your account, depending on the scope of permissions you approve, it may access your public profile information, your following list, your followers, your lists, all your posts, and your favourites. Applications can never access your e-mail address or password.

    + +
    + +

    Site usage by children

    + +

    If this server is in the EU or the EEA: Our site, products and services are all directed to people who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (General Data Protection Regulation) do not use this site.

    + +

    If this server is in the USA: Our site, products and services are all directed to people who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (Children's Online Privacy Protection Act) do not use this site.

    + +

    Law requirements can be different if this server is in another jurisdiction.

    + +
    + +

    Changes to our Privacy Policy

    + +

    If we decide to change our privacy policy, we will post those changes on this page.

    + +

    This document is CC-BY-SA. It was last updated May 26, 2022.

    + +

    Originally adapted from the Discourse privacy policy.

    title: תנאי שימוש ומדיניות פרטיות ב-%{instance} themes: contrast: מסטודון (ניגודיות גבוהה) diff --git a/config/locales/ja.yml b/config/locales/ja.yml index e4c7b6d117b..5dccf1a4334 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -145,6 +145,7 @@ ja: active: アクティブ all: すべて pending: 承認待ち + silenced: 制限 suspended: 停止済み title: モデレーション moderation_notes: モデレーションメモ @@ -152,6 +153,7 @@ ja: most_recent_ip: 直近のIP no_account_selected: 何も選択されていないため、変更されていません no_limits_imposed: 制限なし + no_role_assigned: ロールが割り当てられていません not_subscribed: 購読していない pending: 承認待ち perform_full_suspension: 活動を完全に停止させる @@ -177,6 +179,7 @@ ja: reset: リセット reset_password: パスワード再設定 resubscribe: 再講読 + role: 役割 search: 検索 search_same_email_domain: 同じドメインのメールアドレスを使用しているユーザー search_same_ip: 同じIPのユーザーを検索 @@ -621,7 +624,42 @@ ja: updated_at: 更新日時 view_profile: プロフィールを表示 roles: + add_new: 役割を追加 + assigned_users: + other: "%{count} 人" + categories: + administration: 管理 + devops: 開発者 + invites: 招待 + moderation: モデレーション + delete: 削除 + description_html: "ユーザー ロールを使用すると、ユーザーがアクセスできる Mastodon の機能や領域をカスタマイズできます。" + edit: "'%{name}' の役割を編集" + everyone: デフォルトの権限 + everyone_full_description_html: これは、割り当てられたロールを持っていないものであっても、 すべてのユーザー に影響を与える 基本ロールです。 他のすべてのロールは、そこから権限を継承します。 + permissions_count: + other: "%{count} つの権限" privileges: + administrator: 管理者 + administrator_description: この権限を持つユーザーはすべての権限をバイパスします + delete_user_data: ユーザーデータの削除 + delete_user_data_description: ユーザーは、遅滞なく他のユーザーのデータを削除することができます + invite_users: ユーザーを招待 + invite_users_description: ユーザーがサーバーに新しい人を招待できるようにします + manage_announcements: お知らせの管理 + manage_announcements_description: ユーザーがサーバー上のアナウンスを管理できるようにします + manage_appeals: 抗議の管理 + manage_appeals_description: ユーザーはモデレーションアクションに対する抗議を確認できます + manage_blocks: ブロックの管理 + manage_blocks_description: ユーザーが電子メールプロバイダとIPアドレスをブロックできるようにします + manage_custom_emojis: カスタム絵文字を管理 + manage_custom_emojis_description: ユーザーがサーバー上のカスタム絵文字を管理できるようにします + manage_federation: 連合の管理 + manage_federation_description: ユーザーが他のドメインとの連合をブロックまたは許可したり、配信を制御したりできます。 + manage_invites: 招待を管理 + manage_reports: レポートの管理 + manage_reports_description: ユーザーがレポートを確認したり、モデレーションアクションを実行したりできます。 + manage_roles: 役職の管理 manage_rules: ルールの管理 manage_rules_description: ユーザーがサーバールールを変更できるようにします manage_settings: 設定の管理 diff --git a/config/locales/ku.yml b/config/locales/ku.yml index ccc70d9c5e9..b6b6636629a 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -672,8 +672,19 @@ ku: other: "%{count} mafdayîn" privileges: administrator: Rêvebir + administrator_description: Bikarhênerên xwediyê vê mafdayînan wê her mafdayîn derbas bike + delete_user_data: Daneyên bikarhêner jê bibe + delete_user_data_description: Mafê dide bikarhêneran ku daneyên bikarhênerên din bêyî derengxisitn jê bibin invite_users: Bikarhêneran vexwîne + invite_users_description: Mafê dide bikarhêneran ku mirovên nû vexwîne bo rajekarê + manage_announcements: Reklaman bi rê be bibe + manage_announcements_description: Mafê dide bikarhêneran ku reklaman bi rê ve bibin li ser vê rajekarê + manage_appeals: Îtîrazan bi rê ve bibe + manage_appeals_description: Mafê dide bikarhêneran ku îtîrazan binirxînin li dijî çalakiyên çavdêriyê + manage_blocks: Astengkirinan bi rê ve bibe + manage_blocks_description: Mafê dide bikarhêneran ku peydakarê e-nameyê û navnîşanên IP asteng bike manage_custom_emojis: Emojiyên kesane bi rêve bibe + manage_custom_emojis_description: Mafê dide bikarhêneran ku îmojî kesane bikin li ser vê rajekarê manage_invites: Vexwendinan bi rêve bibe manage_roles: Rolan bi rêve bibe manage_rules: Rolan bi rêve bibe diff --git a/config/locales/lv.yml b/config/locales/lv.yml index cc7306c09d1..21da83077dc 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1002,9 +1002,9 @@ lv: sensitive_content: Sensitīvs saturs toot_layout: Ziņas izskats application_mailer: - notification_preferences: Mainīt e-pasta preferences + notification_preferences: Mainīt e-pasta uztādījumus salutation: "%{name}," - settings: 'Mainīt e-pasta preferences: %{link}' + settings: 'Mainīt e-pasta uztādījumus: %{link}' view: 'Skatījums:' view_profile: Skatīt profilu view_status: Skatīt ziņu @@ -1692,7 +1692,7 @@ lv:

    Jā. Sīkfaili ir nelieli faili, ko vietne vai tās pakalpojumu sniedzējs pārsūta uz jūsu datora cieto disku, izmantojot jūsu tīmekļa pārlūkprogrammu (ja atļaujat). Šīs sīkdatnes ļauj vietnei atpazīt jūsu pārlūkprogrammu un, ja jums ir reģistrēts konts, saistīt to ar jūsu reģistrēto kontu.

    -

    Mēs izmantojam sīkfailus, lai saprastu un saglabātu jūsu preferences turpmākiem apmeklējumiem.

    +

    Mēs izmantojam sīkfailus, lai saprastu un saglabātu jūsu uztādījumus turpmākiem apmeklējumiem.


    @@ -1808,8 +1808,8 @@ lv: final_step: 'Sāc publicēt! Pat bez sekotājiem tavas publiskās ziņas var redzēt citi, piemēram, vietējā ziņu lentā un atsaucēs. Iespējams, tu vēlēsies iepazīstināt ar sevi, izmantojot tēmturi #introductions.' full_handle: Tavs pilnais rokturis full_handle_hint: Šis ir tas, ko tu pasaki saviem draugiem, lai viņi varētu tev ziņot vai sekot tev no cita servera. - review_preferences_action: Mainīt preferences - review_preferences_step: Noteikti iestati savas preferences, piemēram, kādus e-pasta ziņojumus vēlies saņemt vai kādu konfidencialitātes līmeni vēlies iestatīt savām ziņām pēc noklusējuma. Ja tev nav kustību slimības, vari izvēlēties iespējot GIF automātisko atskaņošanu. + review_preferences_action: Mainīt uztādījumus + review_preferences_step: Noteikti iestati savas uztādījumus, piemēram, kādus e-pasta ziņojumus vēlies saņemt vai kādu konfidencialitātes līmeni vēlies iestatīt savām ziņām pēc noklusējuma. Ja tev nav kustību slimības, vari izvēlēties iespējot GIF automātisko atskaņošanu. subject: Laipni lūgts Mastodon tip_federated_timeline: Apvienotā ziņu lenta ir skats caur ugunsdzēsības šļūteni uz Mastodon tīklu. Bet tajā ir iekļauti tikai tie cilvēki, kurus abonē tavi kaimiņi, tāpēc tas nav pilnīgs. tip_following: Pēc noklusējuma tu seko sava servera administratoram(-iem). Lai atrastu vairāk interesantu cilvēku, pārbaudi vietējās un federālās ziņu lentas. diff --git a/config/locales/nl.yml b/config/locales/nl.yml index caf3370d877..e34092f8f60 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1092,8 +1092,8 @@ nl: other: Je hebt trouwens sinds je weg was er ook %{count} nieuwe volgers bijgekregen! Fantastisch! title: Tijdens jouw afwezigheid... favourite: - body: 'Jouw bericht werd door %{name} aan diens favorieten toegevoegd:' - subject: "%{name} voegde jouw bericht als favoriet toe" + body: 'Jouw bericht werd door %{name} als favoriet gemarkeerd:' + subject: "%{name} markeerde jouw bericht als favoriet" title: Nieuwe favoriet follow: body: "%{name} volgt jou nu!" @@ -1117,6 +1117,8 @@ nl: title: Nieuwe boost status: subject: "%{name} heeft zojuist een bericht geplaatst" + update: + subject: "%{name} bewerkte een bericht" notifications: email_events: E-mailmeldingen voor gebeurtenissen email_events_hint: 'Selecteer gebeurtenissen waarvoor je meldingen wilt ontvangen:' @@ -1190,8 +1192,8 @@ nl: reason_html: " Waarom is deze extra stap nodig? %{instance} is wellicht niet de server waarop jij je geregistreerd hebt. We verwijzen je eerst door naar jouw eigen server." remote_interaction: favourite: - proceed: Doorgaan met toevoegen aan jouw favorieten - prompt: 'Je wilt het volgende bericht aan jouw favorieten toevoegen:' + proceed: Doorgaan met het markeren als favoriet + prompt: 'Je wilt het volgende bericht als favoriet markeren:' reblog: proceed: Doorgaan met boosten prompt: 'Je wilt het volgende bericht boosten:' @@ -1281,6 +1283,7 @@ nl: disallowed_hashtags: one: 'bevatte een niet toegestane hashtag: %{tags}' other: 'bevatte niet toegestane hashtags: %{tags}' + edited_at_html: Bewerkt op %{date} errors: in_reply_not_found: Het bericht waarop je probeert te reageren lijkt niet te bestaan. open_in_web: In de webapp openen diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 14f9b95adfa..392b927e199 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -23,13 +23,15 @@ nn: hosted_on: "%{domain} er vert for Mastodon" instance_actor_flash: "Denne brukeren er en virtuell aktør brukt til å representere selve serveren og ingen individuell bruker. Det brukes til foreningsformål og bør ikke blokkeres med mindre du vil blokkere hele instansen, hvor domeneblokkering bør brukes i stedet. \n" learn_more: Lær meir + logout_before_registering: Du er allereie logga inn. privacy_policy: Personvernsreglar - rules: Server regler - rules_html: 'Nedenfor er et sammendrag av reglene du må følge om du vil ha en konto på denne serveren av Mastodon:' + rules: Tenarreglar + rules_html: 'Nedanfor er eit samandrag av reglar du må fylgje dersom du vil ha ein konto på denne Mastodontenaren:' see_whats_happening: Sjå kva som skjer server_stats: 'Tenarstatistikk:' source_code: Kjeldekode status_count_before: Som skreiv + tagline: Desentralisert sosialt nettverk terms: Brukarvilkår unavailable_content: Utilgjengeleg innhald unavailable_content_description: @@ -99,6 +101,10 @@ nn: new_email: Ny e-post submit: Byt e-post title: Byt e-post for %{username} + change_role: + label: Endre rolle + no_role: Inga rolle + title: Endre rolle for %{username} confirm: Stadfest confirmed: Stadfesta confirming: Stadfestar @@ -170,11 +176,12 @@ nn: reset: Attstill reset_password: Attstill passord resubscribe: Ting på nytt + role: Rolle search: Søk search_same_email_domain: Andre brukarar med same e-postdomene search_same_ip: Andre brukarar med same IP security_measures: - only_password: Bare passord + only_password: Kun passord password_and_2fa: Passord og 2FA sensitized: Merket som følsom shared_inbox_url: Delt Innboks URL diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 7cdf1f0c75a..90f2db0c496 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -692,6 +692,8 @@ ru: invite_users_description: Позволяет пользователям приглашать новых людей на сервер manage_announcements: Управление объявлениями manage_announcements_description: Позволяет пользователям управлять объявлениями на сервере + view_dashboard: Открыть панель управления + view_devops: DevOps title: Роли rules: add_new: Добавить правило diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index 46472cdcfdd..4d0cc511880 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -68,6 +68,11 @@ de: with_dns_records: Ein Versuch die DNS-Einträge der Domain aufzulösen wurde unternommen und diese Ergebnisse werden unter anderem auch geblockt featured_tag: name: 'Du möchtest vielleicht einen von diesen benutzen:' + filters: + action: Wählen Sie, welche Aktion ausgeführt werden soll, wenn ein Beitrag dem Filter entspricht + actions: + hide: Den gefilterten Inhalt vollständig ausblenden, als hätte er nie existiert + warn: Den gefilterten Inhalt hinter einer Warnung ausblenden, die den Filtertitel beinhaltet form_challenge: current_password: Du betrittst einen sicheren Bereich imports: @@ -91,6 +96,13 @@ de: name: Du kannst zum Beispiel nur die Groß- und Kleinschreibung der Buchstaben ändern, um es lesbarer zu machen user: chosen_languages: Wenn aktiviert, werden nur Beiträge in den ausgewählten Sprachen auf den öffentlichen Zeitleisten angezeigt + role: Die Rolle kontrolliert welche Berechtigungen ein Benutzer hat + user_role: + color: Die Farbe, die für die Rolle im gesamten UI verwendet wird, als RGB im Hexformat + highlighted: Dies macht die Rolle öffentlich sichtbar + name: Öffentlicher Name der Rolle, wenn die Rolle als Abzeichen angezeigt werden soll + permissions_as_keys: Benutzer mit dieser Rolle haben Zugriff auf... + position: Die höhere Rolle entscheidet über die Konfliktlösung in bestimmten Situationen. Bestimmte Aktionen können nur in Rollen mit geringerer Priorität ausgeführt werden webhook: events: Zu sendende Ereignisse auswählen url: Wo Ereignisse hingesendet werden @@ -181,6 +193,7 @@ de: setting_use_pending_items: Langsamer Modus severity: Schweregrad sign_in_token_attempt: Sicherheitscode + title: Titel type: Art des Imports username: Profilname username_or_email: Profilname oder E-Mail @@ -189,6 +202,10 @@ de: with_dns_records: MX-Einträge und IPs der Domain einbeziehen featured_tag: name: Hashtag + filters: + actions: + hide: Komplett ausblenden + warn: Mit einer Warnung ausblenden interactions: must_be_follower: Benachrichtigungen von Profilen blockieren, die mir nicht folgen must_be_following: Benachrichtigungen von Profilen blockieren, denen ich nicht folge @@ -222,6 +239,14 @@ de: name: Hashtag trendable: Erlaube es diesen Hashtag in den Trends erscheinen zu lassen usable: Beiträge erlauben, diesen Hashtag zu verwenden + user: + role: Rolle + user_role: + color: Abzeichenfarbe + highlighted: Rolle als Abzeichen in Benutzerprofilen anzeigen + name: Name + permissions_as_keys: Berechtigungen + position: Priorität webhook: events: Aktivierte Ereignisse url: Endpunkt-URL diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index 30ea0f4be30..50765067469 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -39,7 +39,7 @@ eo: fields: Vi povas havi ĝis 4 tabelajn elementojn en via profilo header: Formato PNG, GIF aŭ JPG. Ĝis %{size}. Estos malgrandigita al %{dimensions}px inbox_url: Kopiu la URL de la ĉefpaĝo de la ripetilo, kiun vi volas uzi - irreversible: La filtritaj mesaĝoj malaperos por eterne, eĉ se la filtrilo estas forigita poste + irreversible: La filtritaj mesaĝoj malaperos por eterne, eĉ se la filtrilo poste estas forigita locale: La lingvo de la fasado, de retpoŝtaĵoj, kaj de sciigoj locked: Vi devos aprobi ĉiun peton de sekvado mane password: Uzu almenaŭ 8 signojn diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index 582295abb50..3128209e8f1 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -102,6 +102,7 @@ es-MX: highlighted: Esto hace que el rol sea públicamente visible name: Nombre público del rol, si el rol se establece para que se muestre como una insignia permissions_as_keys: Los usuarios con este rol tendrán acceso a... + position: Un rol superior decide la resolución de conflictos en ciertas situaciones. Ciertas acciones sólo pueden llevarse a cabo en roles con menor prioridad webhook: events: Seleccionar eventos para enviar url: Donde los eventos serán enviados diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index 678ce72912d..8962f0b5d5a 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -89,6 +89,9 @@ fi: name: Voit muuttaa esimerkiksi kirjaimia paremmin luettavaksi user: chosen_languages: Kun valittu, vain valituilla kielillä julkaistut viestit näkyvät julkisilla aikajanoilla + webhook: + events: Valitse lähetettävät tapahtumat + url: Mihin tapahtumat lähetetään labels: account: fields: @@ -150,6 +153,7 @@ fi: phrase: Avainsana tai lause setting_advanced_layout: Ota käyttöön edistynyt web käyttöliittymä setting_aggregate_reblogs: Ryhmitä boostaukset aikajanalla + setting_always_send_emails: Lähetä aina sähköposti-ilmoituksia setting_auto_play_gif: Toista GIF-animaatiot automaattisesti setting_boost_modal: Kysy vahvistusta ennen buustausta setting_crop_images: Rajaa kuvat avaamattomissa tuuttauksissa 16:9 kuvasuhteeseen @@ -175,6 +179,7 @@ fi: setting_use_pending_items: Hidastila severity: Vakavuus sign_in_token_attempt: Turvakoodi + title: Otsikko type: Tietojen laji username: Käyttäjänimi username_or_email: Käyttäjänimi tai sähköposti @@ -183,6 +188,10 @@ fi: with_dns_records: Sisällytä toimialueen MX tietueet ja IP-osoite featured_tag: name: Aihetunniste + filters: + actions: + hide: Piilota kokonaan + warn: Piilota varoituksella interactions: must_be_follower: Estä ilmoitukset käyttäjiltä, jotka eivät seuraa sinua must_be_following: Estä ilmoitukset käyttäjiltä, joita et seuraa @@ -216,6 +225,17 @@ fi: name: Aihetunniste trendable: Salli tämän aihetunnisteen näkyä trendeissä usable: Salli postauksien käyttää tätä aihetunnistetta + user: + role: Rooli + user_role: + color: Merkin väri + highlighted: Näyttä rooli merkkinä käyttäjäprofiileissa + name: Nimi + permissions_as_keys: Oikeudet + position: Prioriteetti + webhook: + events: Tapahtumat käytössä + url: Päätepisteen URL 'no': Ei recommended: Suositeltu required: diff --git a/config/locales/simple_form.gd.yml b/config/locales/simple_form.gd.yml index 63199e2cdca..7165cb2435b 100644 --- a/config/locales/simple_form.gd.yml +++ b/config/locales/simple_form.gd.yml @@ -68,6 +68,11 @@ gd: with_dns_records: Thèid oidhirp a dhèanamh air fuasgladh clàran DNS na h-àrainne a chaidh a thoirt seachad agus thèid na toraidhean a bhacadh cuideachd featured_tag: name: 'Mholamaid fear dhe na tagaichean seo:' + filters: + action: Tagh na thachras nuair a bhios post a’ maidseadh na criathraige + actions: + hide: Falaich an t-susbaint chriathraichte uile gu lèir mar nach robh i ann idir + warn: Falaich an t-susbaint chriathraichte air cùlaibh rabhaidh a dh’innseas tiotal na criathraige form_challenge: current_password: Tha thu a’ tighinn a-steach gu raon tèarainte imports: @@ -91,6 +96,16 @@ gd: name: Mar eisimpleir, ’s urrainn dhut measgachadh de litrichean mòra ’s beaga a chleachdadh ach an gabh a leughadh nas fhasa user: chosen_languages: Nuair a bhios cromag ris, cha nochd ach postaichean sna cànain a thagh thu air loidhnichean-ama poblach + role: Stiùiridh an dreuchd dè na ceadan a bhios aig cleachdaiche + user_role: + color: An datha a bhios air an dreuchd air feadh na h-eadar-aghaidh, ’na RGB san fhòrmat sia-dheicheach + highlighted: Le seo, chithear an dreuchd gu poblach + name: Ainm poblach na dreuchd ma chaidh a suidheachadh gun nochd i na baidse + permissions_as_keys: Gheibh na cleachdaichean aig a bheil an dreuchd seo inntrigeadh dha… + position: Ma tha còmhstri ann, buannaichidh an dreuchd as àirde ann an cuid a shuidheachaidhean. Tha gnìomhan sònraichte ann nach urrainn ach dreuchdan le prìomhachas ìosail a ghabhail + webhook: + events: Tagh na tachartasan a thèid a chur + url: Far an dèid na tachartasan a chur labels: account: fields: @@ -178,6 +193,7 @@ gd: setting_use_pending_items: Am modh slaodach severity: Donad sign_in_token_attempt: Còd-tèarainteachd + title: Tiotal type: Seòrsa an ion-phortaidh username: Ainm-cleachdaiche username_or_email: Ainm-cleachdaiche no post-d @@ -186,6 +202,10 @@ gd: with_dns_records: Gabh a-steach clàran MX agus IPan na h-àrainne featured_tag: name: Taga hais + filters: + actions: + hide: Falaich uile gu lèir + warn: Falaich le rabhadh interactions: must_be_follower: Bac na brathan nach eil o luchd-leantainn must_be_following: Bac na brathan o dhaoine air nach lean thu @@ -219,6 +239,17 @@ gd: name: Taga hais trendable: Leig leis an taga hais seo gun nochd e am measg nan treandaichean usable: Leig le postaichean an taga hais seo a chleachdadh + user: + role: Dreuchd + user_role: + color: Dathan na baidse + highlighted: Seall an dreuchd ’na baidse air pròifilean nan cleachdaichean + name: Ainm + permissions_as_keys: Ceadan + position: Prìomhachas + webhook: + events: Na tachartas an comas + url: URL na puinge-deiridh 'no': Chan eil recommended: Molta required: diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index 00f8e762c77..cd9811f3c2a 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -211,7 +211,7 @@ nl: notification_emails: appeal: Iemand heeft bezwaar ingediend tegen een beslissing van een moderator digest: Periodiek e-mails met een samenvatting versturen - favourite: Wanneer iemand jouw bericht aan diens favorieten heeft toegevoegd + favourite: Wanneer iemand jouw bericht als favoriet markeert follow: Wanneer iemand jou is gaan volgen follow_request: Wanneer iemand jou wil volgen mention: Wanneer iemand jou heeft vermeld diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml index 0e998865433..71734509bcb 100644 --- a/config/locales/simple_form.nn.yml +++ b/config/locales/simple_form.nn.yml @@ -85,6 +85,10 @@ nn: name: Du kan berre endra bruken av store/små bokstavar, t. d. for å gjera det meir leseleg user: chosen_languages: Når merka vil berre tuta på dei valde språka synast på offentlege tidsliner + role: Rolla kontrollerer kva tilgangar brukaren har + user_role: + highlighted: Dette gjer rolla synleg offentleg + permissions_as_keys: Brukarar med denne rolla vil ha tilgang til... labels: account: fields: @@ -144,6 +148,7 @@ nn: phrase: Nykelord eller frase setting_advanced_layout: Skruv på det avanserte nettgrensesnittet setting_aggregate_reblogs: Gruppeframhevingar på tidsliner + setting_always_send_emails: Alltid send epostvarsel setting_auto_play_gif: Spel av animerte GIF-ar automatisk setting_boost_modal: Vis stadfesting før framheving setting_crop_images: Skjer bilete i ikkje-utvida tut til 16x9 @@ -169,6 +174,7 @@ nn: setting_use_pending_items: Saktemodus severity: Alvorsgrad sign_in_token_attempt: Trygdenykel + title: Tittel type: Importtype username: Brukarnamn username_or_email: Brukarnamn eller E-post @@ -177,6 +183,10 @@ nn: with_dns_records: Ha med MX-recordar og IP-ar til domenet featured_tag: name: Emneknagg + filters: + actions: + hide: Gøym totalt + warn: Gøym med ei advarsel interactions: must_be_follower: Gøym varslingar frå folk som ikkje fylgjer deg must_be_following: Gøym varslingar frå folk du ikkje fylgjer @@ -200,6 +210,7 @@ nn: mention: Send e-post når nokon nemner deg pending_account: Send e-post når ein ny konto treng gjennomgang reblog: Send e-post når nokon framhevar statusen din + report: Ny rapport er sendt rule: text: Regler tag: @@ -207,6 +218,13 @@ nn: name: Emneknagg trendable: Tillat denne emneknaggen til å synast under trendar usable: Gje tut lov til å nytta denne emneknaggen + user: + role: Rolle + user_role: + name: Namn + position: Prioritet + webhook: + url: Endepunkts-URL 'no': Nei recommended: Tilrådt required: diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index ffe41dd1437..b144b29d5c9 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -3,7 +3,7 @@ ru: simple_form: hints: account_alias: - acct: Укажите имя_пользователя@домен учётной записи, с которой вы собираетесь мигрировать + acct: Укажите ник@домен учётной записи, с которой вы собираетесь мигрировать account_migration: acct: Укажите имя_пользователя@домен учётной записи, на которую вы собираетесь мигрировать account_warning_preset: @@ -44,7 +44,7 @@ ru: inbox_url: Копировать URL с главной страницы ретранслятора, который вы хотите использовать irreversible: Отфильтрованные посты будут утеряны навсегда, даже если в будущем фильтр будет убран locale: Язык интерфейса, e-mail писем и push-уведомлений - locked: Подписчиков нужно будет подтверждать вручную. + locked: Вручную контролируйте, кто может подписываться на вас, утверждая запросы на подписку password: Укажите не менее 8 символов. phrase: Будет сопоставлено независимо от присутствия в тексте или предупреждения о содержании поста scopes: Какие API приложению будет позволено использовать. Если вы выберете самый верхний, нижестоящие будут выбраны автоматически. @@ -99,6 +99,8 @@ ru: role: Роль определяет, какие разрешения есть у пользователя user_role: color: Цвет, который будет использоваться для роли в интерфейсе (UI), как RGB в формате HEX + highlighted: Это действие сделает роль публичной + name: Публичное имя роли, если роль настроена на отображение в виде значка permissions_as_keys: Пользователи с этой ролью будут иметь доступ... position: Повышение роли разрешают конфликты интересов в некоторых ситуациях. Некоторые действия могут выполняться только на ролях с более низким приоритетом webhook: @@ -240,6 +242,8 @@ ru: user: role: Роль user_role: + color: Цвет значка + highlighted: Отображать роль в качестве значка в профилях пользователей name: Название permissions_as_keys: Разрешения position: Приоритет diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index b032295bafb..2a31ea9c2bd 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -64,15 +64,15 @@ th: domain_allow: domain: โดเมนนี้จะสามารถดึงข้อมูลจากเซิร์ฟเวอร์นี้และจะประมวลผลและจัดเก็บข้อมูลขาเข้าจากโดเมน email_domain_block: - domain: อาจเป็นชื่อโดเมนที่แสดงในที่อยู่อีเมลหรือทะเบียน MX ที่ใช้อยู่ พวกเขาอาจจะได้รับการตรวจสอบเมื่อมีการสมัคร + domain: สิ่งนี้สามารถเป็นชื่อโดเมนที่ปรากฏในที่อยู่อีเมลหรือระเบียน MX ที่โดเมนใช้ จะตรวจสอบโดเมนเมื่อลงทะเบียน with_dns_records: จะทำการพยายามแปลงที่อยู่ระเบียน DNS ของโดเมนที่กำหนดและจะปิดกั้นผลลัพธ์เช่นกัน featured_tag: name: 'คุณอาจต้องการใช้หนึ่งในนี้:' filters: - action: เลือกการดำเนินการเมื่อโพสต์ตรงกับตัวกรอง + action: เลือกว่าการกระทำใดที่จะทำเมื่อโพสต์ตรงกับตัวกรอง actions: - hide: ซ่อนเนื้อหาที่ถูกกรองโดยสิ้นเชิง ทำตัวราวกับว่าไม่มีอยู่จริง - warn: ซ่อนเนื้อหาที่ถูกกรองไว้ด้านหลังคำเตือนที่กล่าวถึงชื่อตัวกรอง + hide: ซ่อนเนื้อหาที่กรองอยู่อย่างสมบูรณ์ ทำเสมือนว่าไม่มีเนื้อหาอยู่ + warn: ซ่อนเนื้อหาที่กรองอยู่หลังคำเตือนที่กล่าวถึงชื่อเรื่องของตัวกรอง form_challenge: current_password: คุณกำลังเข้าสู่พื้นที่ปลอดภัย imports: @@ -105,7 +105,7 @@ th: position: บทบาทที่สูงขึ้นตัดสินใจการแก้ปัญหาข้อขัดแย้งในบางสถานการณ์ การกระทำบางอย่างสามารถทำได้เฉพาะกับบทบาทที่มีระดับความสำคัญต่ำกว่าเท่านั้น webhook: events: เลือกเหตุการณ์ที่จะส่ง - url: จะส่งเหตุการณ์ไปยัง + url: ที่ซึ่งจะส่งเหตุการณ์ไปยัง labels: account: fields: @@ -205,7 +205,7 @@ th: filters: actions: hide: ซ่อนอย่างสมบูรณ์ - warn: ซ่อนพร้อมคำเตือน + warn: ซ่อนด้วยคำเตือน interactions: must_be_follower: ปิดกั้นการแจ้งเตือนจากผู้ที่ไม่ใช่ผู้ติดตาม must_be_following: ปิดกั้นการแจ้งเตือนจากผู้คนที่คุณไม่ได้ติดตาม diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 5fefb4e09e5..7b02930c2a9 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -110,6 +110,11 @@ sk: new_email: Nový email submit: Zmeň email title: Zmeň email pre %{username} + change_role: + changed_msg: Postavenie úspešne zmenené! + label: Zmeň pozíciu + no_role: Žiadna pozícia + title: Zmeň pozíciu pre %{username} confirm: Potvrď confirmed: Potvrdený confirming: Potvrdzujúci @@ -146,6 +151,7 @@ sk: active: Aktívny/a all: Všetko pending: Čakajúci + silenced: Obmedzený suspended: Vylúčený/á title: Moderácia moderation_notes: Moderátorské poznámky @@ -153,6 +159,7 @@ sk: most_recent_ip: Posledná IP adresa no_account_selected: Nedošlo k žiadnému pozmeneniu účtov, keďže žiadne neboli vybrané no_limits_imposed: Nie sú stanovené žiadné obmedzenia + no_role_assigned: Žiadne postavenie nepriradené not_subscribed: Neodoberá pending: Vyžaduje posúdenie perform_full_suspension: Vylúč @@ -171,6 +178,7 @@ sk: reset: Resetuj reset_password: Obnov heslo resubscribe: Znovu odoberaj + role: Postavenie search: Hľadaj search_same_email_domain: Iní užívatelia s tou istou emailovou doménou search_same_ip: Ostatní užívatelia s rovnakou IP adresou @@ -347,7 +355,9 @@ sk: domain: Doména new: create: Pridaj doménu + resolve: Preveď doménu title: Nový email na zablokovanie + resolved_through_html: Prevedená cez %{domain} title: Blokované emailové adresy follow_recommendations: description_html: "Odporúčania na sledovanie pomáhaju novým užívateľom rýchlo nájsť zaujímavý obsah. Ak užívateľ zatiaľ nedostatočne interagoval s ostatnými aby si vyformoval personalizované odporúčania na sledovanie, tak mu budú odporúčané tieto účty. Sú prepočítavané na dennej báze z mixu účtov s nedávnym najvyšším záujmom a najvyšším počtom lokálnych sledujúcich pre daný jazyk." @@ -369,7 +379,11 @@ sk: policies: reject_media: Zamietni médiá suspend: Vylúč + policy: Zásady reason: Verejné odôvodnenie + title: Zásady o obsahu + dashboard: + instance_accounts_dimension: Najsledovanejšie účty delivery: all: Všetko unavailable: Nedostupné @@ -467,6 +481,23 @@ sk: unassign: Odober unresolved: Nevyriešené updated_at: Aktualizované + view_profile: Zobraz profil + roles: + add_new: Pridaj postavenie + assigned_users: + few: "%{count} užívateľov" + many: "%{count} užívateľov" + one: "%{count} užívateľ" + other: "%{count} užívatelia" + categories: + administration: Spravovanie + invites: Pozvánky + edit: Uprav postavenie %{name} + privileges: + administrator: Správca + invite_users: Pozvi užívateľov + manage_roles: Spravuj postavenia + title: Postavenia rules: empty: Žiadne pravidlá servera ešte neboli určené. title: Serverové pravidlá diff --git a/config/locales/th.yml b/config/locales/th.yml index 28ffeb46276..ef5e5e38e00 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -457,11 +457,11 @@ th: resolve: แปลงที่อยู่โดเมน title: ปิดกั้นโดเมนอีเมลใหม่ no_email_domain_block_selected: ไม่มีการเปลี่ยนแปลงการปิดกั้นโดเมนอีเมลเนื่องจากไม่มีการเลือก - resolved_dns_records_hint_html: ชื่อโดเมนจะแก้ไขเป็นโดเมน MX ต่อไปนี้ ซึ่งแต่ท้ายที่สุดแล้วคุณจะต้องรับผิดชอบในการยอมรับอีเมล การบล็อกโดเมน MX จะบล็อกการลงชื่อสมัครใช้จากที่อยู่อีเมลใดๆ ที่ใช้โดเมน MX เดียวกัน ถึงแม้ว่าชื่อโดเมนที่มองเห็นได้นั้นจะต่างกัน ระวังอย่าบล็อกผู้ให้บริการอีเมลรายใหญ่ + resolved_dns_records_hint_html: ชื่อโดเมนแปลงที่อยู่เป็นโดเมน MX ดังต่อไปนี้ ซึ่งท้ายที่สุดแล้วจะรับผิดชอบสำหรับการยอมรับอีเมล การปิดกั้นโดเมน MX จะปิดกั้นการลงทะเบียนจากที่อยู่อีเมลใด ๆ ซึ่งใช้โดเมน MX เดียวกัน แม้ว่าชื่อโดเมนที่ปรากฏจะแตกต่างกัน ระวังอย่าปิดกั้นผู้ให้บริการอีเมลรายใหญ่ resolved_through_html: แปลงที่อยู่ผ่าน %{domain} title: โดเมนอีเมลที่ปิดกั้นอยู่ follow_recommendations: - description_html: "จะทำตามคำแนะนำช่วยให้ผู้ใช้ใหม่ให้พบเนื้อหาที่น่าสนใจได้อย่างรวดเร็ว เมื่อผู้ใช้ไม่ได้โต้ตอบใดๆกับผู้อื่นมากพอที่จะสร้างคำแนะนำส่วนบุคคลให้กดติดตาม ขอแนะนำให้ใช้บัญชีเหล่านี้แทน พวกเขาจะคำนวณใหม่ทุกๆวันจากบัญชีต่างๆ ที่มีการมีส่วนร่วมล่าสุดและจำนวนผู้ติดตามในพื้นที่สูงสุดสำหรับภาษาที่คุณกำหนดไว้" + description_html: "คำแนะนำการติดตามช่วยให้ผู้ใช้ใหม่ค้นหาเนื้อหาที่น่าสนใจได้อย่างรวดเร็ว เมื่อผู้ใช้ไม่ได้โต้ตอบกับผู้อื่นมากพอที่จะสร้างคำแนะนำการติดตามส่วนบุคคล จะแนะนำบัญชีเหล่านี้แทน จะคำนวณคำแนะนำใหม่เป็นประจำทุกวันจากบัญชีต่าง ๆ ที่มีการมีส่วนร่วมล่าสุดสูงสุดและจำนวนผู้ติดตามในเซิร์ฟเวอร์สูงสุดสำหรับภาษาที่กำหนด" language: สำหรับภาษา status: สถานะ suppress: ระงับคำแนะนำการติดตาม @@ -470,7 +470,14 @@ th: unsuppress: คืนค่าคำแนะนำการติดตาม instances: availability: + description_html: + other: หากการจัดส่งไปยังโดเมนล้มเหลวเป็นเวลา %{count} วันที่แตกต่างกัน โดยไม่สำเร็จ จะไม่ทำการพยายามจัดส่งเพิ่มเติมเว้นแต่จะได้รับการจัดส่ง จาก โดเมน + failure_threshold_reached: ถึงค่าเกณฑ์ความล้มเหลวเมื่อ %{date} + failures_recorded: + other: ความพยายามที่ล้มเหลวเป็นเวลา %{count} วันที่แตกต่างกัน + no_failures_recorded: ไม่มีความล้มเหลวในระเบียน title: ความพร้อมใช้งาน + warning: ความพยายามล่าสุดในการเชื่อมต่อกับเซิร์ฟเวอร์นี้ไม่สำเร็จ back_to_all: ทั้งหมด back_to_limited: จำกัดอยู่ back_to_warning: คำเตือน @@ -505,6 +512,8 @@ th: unavailable: ไม่พร้อมใช้งาน delivery_available: มีการจัดส่ง delivery_error_days: วันที่มีข้อผิดพลาดการจัดส่ง + delivery_error_hint: หากไม่สามารถทำการจัดส่งได้เป็นเวลา %{count} วัน จะทำเครื่องหมายโดเมนว่าจัดส่งไม่ได้โดยอัตโนมัติ + destroyed_msg: ตอนนี้จัดคิวข้อมูลจาก %{domain} สำหรับการลบในเร็ว ๆ นี้แล้ว empty: ไม่พบโดเมน known_accounts: other: "%{count} บัญชีที่รู้จัก" @@ -515,12 +524,14 @@ th: private_comment: ความคิดเห็นส่วนตัว public_comment: ความคิดเห็นสาธารณะ purge: ล้างข้อมูล + purge_description_html: หากคุณเชื่อว่าโดเมนนี้ออฟไลน์อย่างถาวร คุณสามารถลบระเบียนบัญชีและข้อมูลที่เกี่ยวข้องทั้งหมดจากโดเมนนี้จากที่เก็บข้อมูลของคุณ นี่อาจใช้เวลาสักครู่ title: การติดต่อกับภายนอก total_blocked_by_us: ปิดกั้นโดยเรา total_followed_by_them: ติดตามโดยเขา total_followed_by_us: ติดตามโดยเรา total_reported: รายงานเกี่ยวกับเขา total_storage: ไฟล์แนบสื่อ + totals_time_period_hint_html: ยอดรวมที่แสดงด้านล่างรวมข้อมูลสำหรับเวลาทั้งหมด invites: deactivate_all: ปิดใช้งานทั้งหมด filter: @@ -549,6 +560,7 @@ th: relays: add_new: เพิ่มรีเลย์ใหม่ delete: ลบ + description_html: "รีเลย์การติดต่อกับภายนอก เป็นเซิร์ฟเวอร์ตัวกลางที่แลกเปลี่ยนโพสต์สาธารณะจำนวนมากระหว่างเซิร์ฟเวอร์ที่บอกรับและเผยแพร่ไปยังรีเลย์ รีเลย์สามารถช่วยให้เซิร์ฟเวอร์ขนาดเล็กและขนาดกลางค้นพบเนื้อหาจากจักรวาลสหพันธ์ ซึ่งมิฉะนั้นจะต้องให้ผู้ใช้ในเซิร์ฟเวอร์ติดตามผู้คนอื่น ๆ ในเซิร์ฟเวอร์ระยะไกลด้วยตนเอง" disable: ปิดใช้งาน disabled: ปิดใช้งานอยู่ enable: เปิดใช้งาน @@ -558,6 +570,7 @@ th: pending: กำลังรอการอนุมัติของรีเลย์ save_and_enable: บันทึกแล้วเปิดใช้งาน setup: ตั้งค่าการเชื่อมต่อแบบรีเลย์ + signatures_not_enabled: รีเลย์จะทำงานไม่ถูกต้องขณะที่มีการเปิดใช้งานโหมดปลอดภัยหรือโหมดการติดต่อกับภายนอกแบบจำกัด status: สถานะ title: รีเลย์ report_notes: @@ -571,9 +584,12 @@ th: action_log: รายการบันทึกการตรวจสอบ action_taken_by: ใช้การกระทำโดย actions: + delete_description_html: จะลบโพสต์ที่รายงานและจะบันทึกการดำเนินการเพื่อช่วยให้คุณเลื่อนระดับการละเมิดในอนาคตโดยบัญชีเดียวกัน + mark_as_sensitive_description_html: จะทำเครื่องหมายสื่อในโพสต์ที่รายงานว่าละเอียดอ่อนและจะบันทึกการดำเนินการเพื่อช่วยให้คุณเลื่อนระดับการละเมิดในอนาคตโดยบัญชีเดียวกัน other_description_html: ดูตัวเลือกเพิ่มเติมสำหรับการควบคุมพฤติกรรมของบัญชีและปรับแต่งการสื่อสารไปยังบัญชีที่รายงาน resolve_description_html: จะไม่ใช้การกระทำกับบัญชีที่รายงาน ไม่มีการบันทึกการดำเนินการ และจะปิดรายงาน actions_description_html: ตัดสินใจว่าการกระทำใดที่จะใช้เพื่อแก้ปัญหารายงานนี้ หากคุณใช้การกระทำที่เป็นการลงโทษกับบัญชีที่รายงาน จะส่งการแจ้งเตือนอีเมลถึงเขา ยกเว้นเมื่อมีการเลือกหมวดหมู่ สแปม + add_to_report: เพิ่มข้อมูลเพิ่มเติมไปยังรายงาน are_you_sure: คุณแน่ใจหรือไม่? assign_to_self: มอบหมายให้ฉัน assigned: ผู้ควบคุมที่ได้รับมอบหมาย @@ -596,6 +612,7 @@ th: create_and_unresolve: เปิดใหม่โดยมีหมายเหตุ delete: ลบ title: หมายเหตุ + notes_description_html: ดูและฝากหมายเหตุถึงผู้ควบคุมอื่น ๆ และตัวคุณเองในอนาคต quick_actions_description_html: 'ดำเนินการอย่างรวดเร็วหรือเลื่อนลงเพื่อดูเนื้อหาที่รายงาน:' remote_user_placeholder: ผู้ใช้ระยะไกลจาก %{instance} reopen: เปิดรายงานใหม่ @@ -623,6 +640,7 @@ th: moderation: การควบคุม special: พิเศษ delete: ลบ + description_html: ด้วย บทบาทผู้ใช้ คุณสามารถปรับแต่งว่าฟังก์ชันและพื้นที่ใดของ Mastodon ที่ผู้ใช้ของคุณสามารถเข้าถึง edit: แก้ไขบทบาท '%{name}' everyone: สิทธิอนุญาตเริ่มต้น permissions_count: @@ -631,18 +649,32 @@ th: administrator: ผู้ดูแล delete_user_data: ลบข้อมูลผู้ใช้ invite_users: เชิญผู้ใช้ + invite_users_description: อนุญาตให้ผู้ใช้เชิญผู้คนใหม่ไปยังเซิร์ฟเวอร์ manage_announcements: จัดการประกาศ + manage_announcements_description: อนุญาตให้ผู้ใช้จัดการประกาศในเซิร์ฟเวอร์ manage_appeals: จัดการการอุทธรณ์ manage_blocks: จัดการการปิดกั้น + manage_blocks_description: อนุญาตให้ผู้ใช้ปิดกั้นผู้ให้บริการอีเมลและที่อยู่ IP manage_custom_emojis: จัดการอีโมจิที่กำหนดเอง + manage_custom_emojis_description: อนุญาตให้ผู้ใช้จัดการอีโมจิที่กำหนดเองในเซิร์ฟเวอร์ manage_federation: จัดการการติดต่อกับภายนอก + manage_federation_description: อนุญาตให้ผู้ใช้ปิดกั้นหรืออนุญาตการติดต่อกับภายนอกกับโดเมนอื่น ๆ และควบคุมความสามารถในการจัดส่ง manage_invites: จัดการคำเชิญ + manage_invites_description: อนุญาตให้ผู้ใช้เรียกดูและปิดใช้งานลิงก์เชิญ manage_reports: จัดการรายงาน manage_roles: จัดการบทบาท manage_rules: จัดการกฎ + manage_rules_description: อนุญาตให้ผู้ใช้เปลี่ยนกฎของเซิร์ฟเวอร์ manage_settings: จัดการการตั้งค่า + manage_settings_description: อนุญาตให้ผู้ใช้เปลี่ยนการตั้งค่าไซต์ + manage_taxonomies: จัดการอนุกรมวิธาน + manage_taxonomies_description: อนุญาตให้ผู้ใช้ตรวจทานเนื้อหาที่กำลังนิยมและอัปเดตการตั้งค่าแฮชแท็ก manage_user_access: จัดการการเข้าถึงของผู้ใช้ manage_users: จัดการผู้ใช้ + view_audit_log: ดูรายการบันทึกการตรวจสอบ + view_audit_log_description: อนุญาตให้ผู้ใช้ดูประวัติการกระทำการดูแลในเซิร์ฟเวอร์ + view_dashboard: ดูแดชบอร์ด + view_dashboard_description: อนุญาตให้ผู้ใช้เข้าถึงแดชบอร์ดและเมตริกต่าง ๆ view_devops_description: อนุญาตให้ผู้ใช้เข้าถึงแดชบอร์ด Sidekiq และ pgHero title: บทบาท rules: @@ -941,6 +973,7 @@ th: confirming: กำลังรอการยืนยันอีเมลให้เสร็จสมบูรณ์ functional: บัญชีของคุณทำงานได้อย่างเต็มที่ pending: ใบสมัครของคุณกำลังรอดำเนินการตรวจทานโดยพนักงานของเรา นี่อาจใช้เวลาสักครู่ คุณจะได้รับอีเมลหากใบสมัครของคุณได้รับการอนุมัติ + redirecting_to: บัญชีของคุณไม่ได้ใช้งานเนื่องจากบัญชีกำลังเปลี่ยนเส้นทางไปยัง %{acct} ในปัจจุบัน view_strikes: ดูการดำเนินการที่ผ่านมากับบัญชีของคุณ too_fast: ส่งแบบฟอร์มเร็วเกินไป ลองอีกครั้ง trouble_logging_in: มีปัญหาในการเข้าสู่ระบบ? @@ -1008,6 +1041,7 @@ th: strikes: action_taken: การกระทำที่ใช้ appeal: อุทธรณ์ + appeal_approved: อุทธรณ์การดำเนินการนี้สำเร็จและไม่มีผลบังคับอีกต่อไป appeal_rejected: ปฏิเสธการอุทธรณ์แล้ว appeal_submitted_at: ส่งการอุทธรณ์แล้ว appeals: @@ -1119,6 +1153,7 @@ th: overwrite: เขียนทับ overwrite_long: แทนที่ระเบียนปัจจุบันด้วยระเบียนใหม่ preface: คุณสามารถนำเข้าข้อมูลที่คุณได้ส่งออกจากเซิร์ฟเวอร์อื่น เช่น รายการผู้คนที่คุณกำลังติดตามหรือกำลังปิดกั้น + success: อัปโหลดข้อมูลของคุณสำเร็จและจะได้รับการประมวลผลในเวลาที่ครบกำหนด types: blocking: รายการปิดกั้น bookmarks: ที่คั่นหน้า @@ -1170,6 +1205,7 @@ th: cancel_explanation: การยกเลิกการเปลี่ยนเส้นทางจะเปิดใช้งานบัญชีปัจจุบันของคุณใหม่ แต่จะไม่นำผู้ติดตามที่ได้รับการย้ายไปยังบัญชีนั้นกลับมา cancelled_msg: ยกเลิกการเปลี่ยนเส้นทางสำเร็จ errors: + already_moved: เป็นบัญชีเดียวกันกับที่คุณได้ย้ายไปแล้ว missing_also_known_as: ไม่ใช่นามแฝงของบัญชีนี้ move_to_self: ไม่สามารถเป็นบัญชีปัจจุบัน not_found: ไม่พบ @@ -1298,6 +1334,7 @@ th: status: สถานะบัญชี remote_follow: acct: ป้อน username@domain ของคุณที่คุณต้องการกระทำจาก + missing_resource: ไม่พบ URL การเปลี่ยนเส้นทางที่จำเป็นสำหรับบัญชีของคุณ no_account_html: ไม่มีบัญชี? คุณสามารถ ลงทะเบียนที่นี่ proceed: ดำเนินการต่อเพื่อติดตาม prompt: 'คุณกำลังจะติดตาม:' @@ -1318,6 +1355,7 @@ th: content_warning: 'คำเตือนเนื้อหา:' descriptions: account: โพสต์สาธารณะจาก @%{acct} + tag: 'โพสต์สาธารณะที่ได้รับการแท็ก #%{hashtag}' scheduled_statuses: too_soon: วันที่ตามกำหนดการต้องอยู่ในอนาคต sessions: diff --git a/config/locales/vi.yml b/config/locales/vi.yml index b471cc153a1..743d9b608ff 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -915,7 +915,7 @@ vi: sensitive: đánh dấu tài khoản của họ là nhạy cảm silence: hạn chế tài khoản của họ suspend: vô hiệu hóa tài khoản của họ - body: "%{target} đã khiếu nại quyết định kiểm duyệt từ %{action_taken_by} vào %{date}, vì %{type}. Họ cho biết:" + body: "%{target} đã khiếu nại quyết định kiểm duyệt bởi %{action_taken_by} vào %{date}, vì %{type}. Họ cho biết:" next_steps: Bạn có thể chấp nhận kháng cáo để hủy bỏ kiểm duyệt, hoặc bỏ qua. subject: "%{username} đang khiếu nại quyết định kiểm duyệt trên %{instance}" new_pending_account: diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 12b371bf345..0bf1833f2b8 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -692,6 +692,7 @@ zh-CN: view_dashboard: 查看仪表板 view_dashboard_description: 允许用户访问仪表盘和各种指标 view_devops: 开发运维 + view_devops_description: 允许用户访问 Sidekiq 和 pgHero 仪表板 title: 角色 rules: add_new: 添加规则 @@ -893,6 +894,7 @@ zh-CN: description_html: "webhook 使Mastodon能够推送 关于所选事件的实时通知 到您自己的应用程序。 所以您的应用程序可以自动触发反应 。" disable: 禁用 disabled: 已禁用 + edit: 编辑端点 empty: 您尚未配置任何Web 钩子端点。 enable: 启用 enabled: 活跃 From ac27972d9df7309993170de9931b9f76ea244a77 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 07:40:25 +0900 Subject: [PATCH 169/646] Bump postcss from 8.4.14 to 8.4.16 (#18952) Bumps [postcss](https://github.com/postcss/postcss) from 8.4.14 to 8.4.16. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.14...8.4.16) --- updated-dependencies: - dependency-name: postcss dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 90f7af38431..1d511b79c0a 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "offline-plugin": "^5.0.7", "path-complete-extname": "^1.0.0", "pg": "^8.5.0", - "postcss": "^8.4.14", + "postcss": "^8.4.16", "postcss-loader": "^3.0.0", "postcss-object-fit-images": "^1.1.2", "promise.prototype.finally": "^3.1.3", diff --git a/yarn.lock b/yarn.lock index 1369a9b3266..cfcc1e692f7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8796,10 +8796,10 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.27, postcss@^7.0.32: source-map "^0.6.1" supports-color "^6.1.0" -postcss@^8.2.15, postcss@^8.4.14: - version "8.4.14" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" - integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== +postcss@^8.2.15, postcss@^8.4.14, postcss@^8.4.16: + version "8.4.16" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c" + integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== dependencies: nanoid "^3.3.4" picocolors "^1.0.0" From 334acf93796671f28238a3a1e7a73e5bf3f6bcba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 07:41:35 +0900 Subject: [PATCH 170/646] Bump sass from 1.54.0 to 1.54.3 (#18951) Bumps [sass](https://github.com/sass/dart-sass) from 1.54.0 to 1.54.3. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.54.0...1.54.3) --- updated-dependencies: - dependency-name: sass dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 1d511b79c0a..f881335625b 100644 --- a/package.json +++ b/package.json @@ -119,7 +119,7 @@ "requestidlecallback": "^0.3.0", "reselect": "^4.1.6", "rimraf": "^3.0.2", - "sass": "^1.54.0", + "sass": "^1.54.3", "sass-loader": "^10.2.0", "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", diff --git a/yarn.lock b/yarn.lock index cfcc1e692f7..d29772bb2b0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9773,10 +9773,10 @@ sass-loader@^10.2.0: schema-utils "^3.0.0" semver "^7.3.2" -sass@^1.54.0: - version "1.54.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.0.tgz#24873673265e2a4fe3d3a997f714971db2fba1f4" - integrity sha512-C4zp79GCXZfK0yoHZg+GxF818/aclhp9F48XBu/+bm9vXEVAYov9iU3FBVRMq3Hx3OA4jfKL+p2K9180mEh0xQ== +sass@^1.54.3: + version "1.54.3" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.3.tgz#37baa2652f7f1fdadb73240ee9a2b9b81fabb5c4" + integrity sha512-fLodey5Qd41Pxp/Tk7Al97sViYwF/TazRc5t6E65O7JOk4XF8pzwIW7CvCxYVOfJFFI/1x5+elDyBIixrp+zrw== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From 2d6b41fe30dca92fd35d491ae4bf66a9fd5805a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 07:42:03 +0900 Subject: [PATCH 171/646] Bump @testing-library/jest-dom from 5.16.4 to 5.16.5 (#18947) Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 5.16.4 to 5.16.5. - [Release notes](https://github.com/testing-library/jest-dom/releases) - [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md) - [Commits](https://github.com/testing-library/jest-dom/compare/v5.16.4...v5.16.5) --- updated-dependencies: - dependency-name: "@testing-library/jest-dom" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 32 ++++++++++---------------------- 2 files changed, 11 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index f881335625b..564b8b3f558 100644 --- a/package.json +++ b/package.json @@ -140,7 +140,7 @@ }, "devDependencies": { "@babel/eslint-parser": "^7.18.9", - "@testing-library/jest-dom": "^5.16.4", + "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^12.1.5", "babel-jest": "^28.1.3", "eslint": "^7.32.0", diff --git a/yarn.lock b/yarn.lock index d29772bb2b0..d2c61b1122f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@adobe/css-tools@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.0.1.tgz#b38b444ad3aa5fedbb15f2f746dcd934226a12dd" + integrity sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g== + "@ampproject/remapping@^2.1.0": version "2.1.2" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" @@ -1638,16 +1643,16 @@ lz-string "^1.4.4" pretty-format "^27.0.2" -"@testing-library/jest-dom@^5.16.4": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.4.tgz#938302d7b8b483963a3ae821f1c0808f872245cd" - integrity sha512-Gy+IoFutbMQcky0k+bqqumXZ1cTGswLsFqmNLzNdSKkU9KGV2u9oXhukCbbJ9/LRPKiqwxEE8VpV/+YZlfkPUA== +"@testing-library/jest-dom@^5.16.5": + version "5.16.5" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz#3912846af19a29b2dbf32a6ae9c31ef52580074e" + integrity sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA== dependencies: + "@adobe/css-tools" "^4.0.1" "@babel/runtime" "^7.9.2" "@types/testing-library__jest-dom" "^5.9.1" aria-query "^5.0.0" chalk "^3.0.0" - css "^3.0.0" css.escape "^1.5.1" dom-accessibility-api "^0.5.6" lodash "^4.17.15" @@ -3759,15 +3764,6 @@ css.escape@^1.5.1: resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= -css@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" - integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== - dependencies: - inherits "^2.0.4" - source-map "^0.6.1" - source-map-resolve "^0.6.0" - cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -10137,14 +10133,6 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-resolve@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" - integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - source-map-support@0.5.13: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" From b794addc4a39e6cde38aa191e4cfc22f5d4ce59f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 07:43:03 +0900 Subject: [PATCH 172/646] Bump json-ld from 3.2.2 to 3.2.3 (#18950) Bumps [json-ld](https://github.com/ruby-rdf/json-ld) from 3.2.2 to 3.2.3. - [Release notes](https://github.com/ruby-rdf/json-ld/releases) - [Commits](https://github.com/ruby-rdf/json-ld/compare/3.2.2...3.2.3) --- updated-dependencies: - dependency-name: json-ld dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 03c0f297b67..accf9ebe75c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -327,13 +327,13 @@ GEM activesupport (>= 4.2) aes_key_wrap bindata - json-ld (3.2.2) + json-ld (3.2.3) htmlentities (~> 4.3) json-canonicalization (~> 0.3) link_header (~> 0.0, >= 0.0.8) multi_json (~> 1.15) rack (~> 2.2) - rdf (~> 3.2) + rdf (~> 3.2, >= 3.2.9) json-ld-preloaded (3.2.0) json-ld (~> 3.2) rdf (~> 3.2) @@ -527,7 +527,7 @@ GEM thor (~> 1.0) rainbow (3.1.1) rake (13.0.6) - rdf (3.2.8) + rdf (3.2.9) link_header (~> 0.0, >= 0.0.8) rdf-normalize (0.5.0) rdf (~> 3.2) From 1abf2a05849361c7e7c38f1aa8ce6206f8b03a93 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 07:43:22 +0900 Subject: [PATCH 173/646] Bump oj from 3.13.19 to 3.13.20 (#18948) Bumps [oj](https://github.com/ohler55/oj) from 3.13.19 to 3.13.20. - [Release notes](https://github.com/ohler55/oj/releases) - [Changelog](https://github.com/ohler55/oj/blob/develop/CHANGELOG.md) - [Commits](https://github.com/ohler55/oj/compare/v3.13.19...v3.13.20) --- updated-dependencies: - dependency-name: oj dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index accf9ebe75c..debce991bef 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -413,7 +413,7 @@ GEM concurrent-ruby (~> 1.0, >= 1.0.2) sidekiq (>= 3.5) statsd-ruby (~> 1.4, >= 1.4.0) - oj (3.13.19) + oj (3.13.20) omniauth (1.9.1) hashie (>= 3.4.6) rack (>= 1.6.2, < 3) From c384430ba03d3417d05d4cd2991d89a505ab51df Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 07:50:50 +0900 Subject: [PATCH 174/646] Bump capistrano from 3.17.0 to 3.17.1 (#18949) * Bump capistrano from 3.17.0 to 3.17.1 Bumps [capistrano](https://github.com/capistrano/capistrano) from 3.17.0 to 3.17.1. - [Release notes](https://github.com/capistrano/capistrano/releases) - [Commits](https://github.com/capistrano/capistrano/compare/v3.17.0...v3.17.1) --- updated-dependencies: - dependency-name: capistrano dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * 3.17.1 Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Yamagishi Kazutoshi --- Gemfile.lock | 10 +++++----- config/deploy.rb | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index debce991bef..b08a7ce2e4f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -69,7 +69,7 @@ GEM addressable (2.8.0) public_suffix (>= 2.0.2, < 5.0) aes_key_wrap (1.1.0) - airbrussh (1.4.0) + airbrussh (1.4.1) sshkit (>= 1.6.1, != 1.7.0) android_key_attestation (0.3.0) annotate (3.2.0) @@ -129,7 +129,7 @@ GEM bundler (>= 1.2.0, < 3) thor (~> 1.0) byebug (11.1.3) - capistrano (3.17.0) + capistrano (3.17.1) airbrussh (>= 1.0.0) i18n rake (>= 10.0.0) @@ -401,9 +401,9 @@ GEM multi_json (1.15.0) multipart-post (2.1.1) net-ldap (0.17.1) - net-scp (3.0.0) - net-ssh (>= 2.6.5, < 7.0.0) - net-ssh (6.1.0) + net-scp (4.0.0.rc1) + net-ssh (>= 2.6.5, < 8.0.0) + net-ssh (7.0.1) nio4r (2.5.8) nokogiri (1.13.8) mini_portile2 (~> 2.8.0) diff --git a/config/deploy.rb b/config/deploy.rb index 8a2316b5732..2bdb115950f 100644 --- a/config/deploy.rb +++ b/config/deploy.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -lock '3.17.0' +lock '3.17.1' set :repo_url, ENV.fetch('REPO', 'https://github.com/mastodon/mastodon.git') set :branch, ENV.fetch('BRANCH', 'master') From 9f61f22a3b93115763aa7b21c19c437698c34cf8 Mon Sep 17 00:00:00 2001 From: Daniel Jakots Date: Sun, 14 Aug 2022 20:47:33 -0400 Subject: [PATCH 175/646] Update node to 16.16.0 (#18790) See https://nodejs.org/en/blog/vulnerability/july-2022-security-releases/ --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6180e0796eb..c79618da90b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ SHELL ["/bin/bash", "-c"] RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections # Install Node v16 (LTS) -ENV NODE_VER="16.15.1" +ENV NODE_VER="16.16.0" RUN ARCH= && \ dpkgArch="$(dpkg --print-architecture)" && \ case "${dpkgArch##*-}" in \ From 113dd90aa3e8dd930fa343a2dea52e64bf63eb06 Mon Sep 17 00:00:00 2001 From: zunda Date: Sun, 14 Aug 2022 16:39:58 -1000 Subject: [PATCH 176/646] Bump Ruby version from 3.0.3 to 3.0.4 (#18028) https://www.ruby-lang.org/en/news/2022/04/12/ruby-3-0-4-released/ --- .ruby-version | 2 +- Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.ruby-version b/.ruby-version index 75a22a26ac4..b0f2dcb32fc 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.0.3 +3.0.4 diff --git a/Dockerfile b/Dockerfile index c79618da90b..7757bd0e47c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,7 +27,7 @@ RUN ARCH= && \ mv node-v$NODE_VER-linux-$ARCH /opt/node # Install Ruby 3.0 -ENV RUBY_VER="3.0.3" +ENV RUBY_VER="3.0.4" RUN apt-get update && \ apt-get install -y --no-install-recommends build-essential \ bison libyaml-dev libgdbm-dev libreadline-dev libjemalloc-dev \ From 41fa50ac8655e0c15cf5e93fa14f9ce847aec88f Mon Sep 17 00:00:00 2001 From: Rens Groothuijsen Date: Sat, 13 Aug 2022 15:39:05 +0200 Subject: [PATCH 177/646] [Glitch] Add warning for sensitive audio posts Port e6979aa6d43f24ab290c27f596fcd71fcc0ac03a to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/components/status.js | 4 ++ .../flavours/glitch/features/audio/index.js | 64 ++++++++++++++++--- .../status/components/detailed_status.js | 4 ++ .../glitch/styles/components/media.scss | 7 ++ 4 files changed, 71 insertions(+), 8 deletions(-) diff --git a/app/javascript/flavours/glitch/components/status.js b/app/javascript/flavours/glitch/components/status.js index 11c81765b0d..b2d9acebcdb 100644 --- a/app/javascript/flavours/glitch/components/status.js +++ b/app/javascript/flavours/glitch/components/status.js @@ -625,6 +625,10 @@ class Status extends ImmutablePureComponent { height={110} cacheWidth={this.props.cacheMediaWidth} deployPictureInPicture={this.handleDeployPictureInPicture} + sensitive={status.get('sensitive')} + blurhash={attachment.get('blurhash')} + visible={this.state.showMedia} + onToggleVisibility={this.handleToggleMediaVisibility} /> )} , diff --git a/app/javascript/flavours/glitch/features/audio/index.js b/app/javascript/flavours/glitch/features/audio/index.js index ac0468f7021..8fa64342e6c 100644 --- a/app/javascript/flavours/glitch/features/audio/index.js +++ b/app/javascript/flavours/glitch/features/audio/index.js @@ -1,6 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { defineMessages, injectIntl } from 'react-intl'; +import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; import { formatTime } from 'flavours/glitch/features/video'; import Icon from 'flavours/glitch/components/icon'; import classNames from 'classnames'; @@ -8,6 +8,9 @@ import { throttle } from 'lodash'; import { getPointerPosition, fileNameFromURL } from 'flavours/glitch/features/video'; import { debounce } from 'lodash'; import Visualizer from './visualizer'; +import { displayMedia, useBlurhash } from 'flavours/glitch/util/initial_state'; +import Blurhash from 'flavours/glitch/components/blurhash'; +import { is } from 'immutable'; const messages = defineMessages({ play: { id: 'video.play', defaultMessage: 'Play' }, @@ -15,6 +18,7 @@ const messages = defineMessages({ mute: { id: 'video.mute', defaultMessage: 'Mute sound' }, unmute: { id: 'video.unmute', defaultMessage: 'Unmute sound' }, download: { id: 'video.download', defaultMessage: 'Download file' }, + hide: { id: 'audio.hide', defaultMessage: 'Hide audio' }, }); const TICK_SIZE = 10; @@ -30,10 +34,14 @@ class Audio extends React.PureComponent { duration: PropTypes.number, width: PropTypes.number, height: PropTypes.number, + sensitive: PropTypes.bool, editable: PropTypes.bool, fullscreen: PropTypes.bool, intl: PropTypes.object.isRequired, + blurhash: PropTypes.string, cacheWidth: PropTypes.func, + visible: PropTypes.bool, + onToggleVisibility: PropTypes.func, backgroundColor: PropTypes.string, foregroundColor: PropTypes.string, accentColor: PropTypes.string, @@ -53,6 +61,7 @@ class Audio extends React.PureComponent { muted: false, volume: 0.5, dragging: false, + revealed: this.props.visible !== undefined ? this.props.visible : (displayMedia !== 'hide_all' && !this.props.sensitive || displayMedia === 'show_all'), }; constructor (props) { @@ -78,6 +87,8 @@ class Audio extends React.PureComponent { backgroundColor: this.props.backgroundColor, foregroundColor: this.props.foregroundColor, accentColor: this.props.accentColor, + sensitive: this.props.sensitive, + visible: this.props.visible, }; } @@ -132,6 +143,12 @@ class Audio extends React.PureComponent { } } + componentWillReceiveProps (nextProps) { + if (!is(nextProps.visible, this.props.visible) && nextProps.visible !== undefined) { + this.setState({ revealed: nextProps.visible }); + } + } + componentWillUnmount () { window.removeEventListener('scroll', this.handleScroll); window.removeEventListener('resize', this.handleResize); @@ -195,6 +212,14 @@ class Audio extends React.PureComponent { }); } + toggleReveal = () => { + if (this.props.onToggleVisibility) { + this.props.onToggleVisibility(); + } else { + this.setState({ revealed: !this.state.revealed }); + } + } + handleVolumeMouseDown = e => { document.addEventListener('mousemove', this.handleMouseVolSlide, true); document.addEventListener('mouseup', this.handleVolumeMouseUp, true); @@ -439,13 +464,29 @@ class Audio extends React.PureComponent { } render () { - const { src, intl, alt, editable, autoPlay } = this.props; - const { paused, muted, volume, currentTime, duration, buffer, dragging } = this.state; + const { src, intl, alt, editable, autoPlay, sensitive, blurhash } = this.props; + const { paused, muted, volume, currentTime, duration, buffer, dragging, revealed } = this.state; const progress = Math.min((currentTime / duration) * 100, 100); + let warning; + if (sensitive) { + warning = ; + } else { + warning = ; + } + return ( -
    -
    + + {(revealed || editable) && + />}
    @@ -514,6 +561,7 @@ class Audio extends React.PureComponent {
    + {!editable && } diff --git a/app/javascript/flavours/glitch/features/status/components/detailed_status.js b/app/javascript/flavours/glitch/features/status/components/detailed_status.js index 301a2add6fa..91dc5ba208d 100644 --- a/app/javascript/flavours/glitch/features/status/components/detailed_status.js +++ b/app/javascript/flavours/glitch/features/status/components/detailed_status.js @@ -165,7 +165,11 @@ class DetailedStatus extends ImmutablePureComponent { backgroundColor={attachment.getIn(['meta', 'colors', 'background'])} foregroundColor={attachment.getIn(['meta', 'colors', 'foreground'])} accentColor={attachment.getIn(['meta', 'colors', 'accent'])} + sensitive={status.get('sensitive')} + visible={this.props.showMedia} + blurhash={attachment.get('blurhash')} height={150} + onToggleVisibility={this.props.onToggleMediaVisibility} />, ); mediaIcons.push('music'); diff --git a/app/javascript/flavours/glitch/styles/components/media.scss b/app/javascript/flavours/glitch/styles/components/media.scss index 8a551be73e9..9776e226598 100644 --- a/app/javascript/flavours/glitch/styles/components/media.scss +++ b/app/javascript/flavours/glitch/styles/components/media.scss @@ -389,6 +389,13 @@ height: 100%; } + &.inactive { + audio, + .video-player__controls { + visibility: hidden; + } + } + .video-player__volume::before, .video-player__seek::before { background: currentColor; From 6aa83b13ba541b948d7d6927728bbdcf63a23950 Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Tue, 16 Aug 2022 03:32:21 +0900 Subject: [PATCH 178/646] Properly delete remote account's avatar/header when fetch/update (#18973) --- app/services/activitypub/process_account_service.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index 4449a542701..34750dba6bd 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -105,11 +105,13 @@ class ActivityPub::ProcessAccountService < BaseService def set_fetchable_attributes! begin @account.avatar_remote_url = image_url('icon') || '' unless skip_download? + @account.avatar = nil if @account.avatar_remote_url.blank? rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError RedownloadAvatarWorker.perform_in(rand(30..600).seconds, @account.id) end begin @account.header_remote_url = image_url('image') || '' unless skip_download? + @account.header = nil if @account.header_remote_url.blank? rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError RedownloadHeaderWorker.perform_in(rand(30..600).seconds, @account.id) end From d92ce31c92903c3ce24c3fcadb99af3c1ba1d585 Mon Sep 17 00:00:00 2001 From: Shlee Date: Tue, 16 Aug 2022 04:03:05 +0930 Subject: [PATCH 179/646] Update notifications.js (#18977) --- app/javascript/mastodon/reducers/notifications.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/javascript/mastodon/reducers/notifications.js b/app/javascript/mastodon/reducers/notifications.js index 4b460bc10cb..4563118eaa3 100644 --- a/app/javascript/mastodon/reducers/notifications.js +++ b/app/javascript/mastodon/reducers/notifications.js @@ -234,8 +234,6 @@ export default function notifications(state = initialState, action) { case FOLLOW_REQUEST_AUTHORIZE_SUCCESS: case FOLLOW_REQUEST_REJECT_SUCCESS: return filterNotifications(state, [action.id], 'follow_request'); - case ACCOUNT_MUTE_SUCCESS: - return action.relationship.muting_notifications ? filterNotifications(state, [action.relationship.id]) : state; case NOTIFICATIONS_CLEAR: return state.set('items', ImmutableList()).set('pendingItems', ImmutableList()).set('hasMore', false); case TIMELINE_DELETE: From 461239db5d87ac584b07b394f894384853e875af Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 17 Aug 2022 23:06:48 +0200 Subject: [PATCH 180/646] Fix backend compatibility with OpenSSL 3.0 (#18449) * Update webpush to fork with OpenSSL 3 compatibility * Fix tests with OpenSSL 3.0 * Update webauthn gem to latest release and update dependencies --- Gemfile | 4 +- Gemfile.lock | 44 +++++++++++-------- .../webauthn_credential_fabricator.rb | 2 +- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/Gemfile b/Gemfile index d21459fcccb..cd519111fb8 100644 --- a/Gemfile +++ b/Gemfile @@ -91,8 +91,8 @@ gem 'tty-prompt', '~> 0.23', require: false gem 'twitter-text', '~> 3.1.0' gem 'tzinfo-data', '~> 1.2022' gem 'webpacker', '~> 5.4' -gem 'webpush', '~> 0.3' -gem 'webauthn', '~> 3.0.0.alpha1' +gem 'webpush', git: 'https://github.com/ClearlyClaire/webpush.git', ref: 'f14a4d52e201128b1b00245d11b6de80d6cfdcd9' +gem 'webauthn', '~> 2.5' gem 'json-ld' gem 'json-ld-preloaded', '~> 3.2' diff --git a/Gemfile.lock b/Gemfile.lock index b08a7ce2e4f..72c58848e1c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,3 +1,12 @@ +GIT + remote: https://github.com/ClearlyClaire/webpush.git + revision: f14a4d52e201128b1b00245d11b6de80d6cfdcd9 + ref: f14a4d52e201128b1b00245d11b6de80d6cfdcd9 + specs: + webpush (0.3.8) + hkdf (~> 0.2) + jwt (~> 2.0) + GEM remote: https://rubygems.org/ specs: @@ -79,7 +88,7 @@ GEM attr_encrypted (3.1.0) encryptor (~> 3.0.0) attr_required (1.0.1) - awrence (1.1.1) + awrence (1.2.1) aws-eventstream (1.2.0) aws-partitions (1.587.0) aws-sdk-core (3.130.2) @@ -168,9 +177,9 @@ GEM color_diff (0.1) concurrent-ruby (1.1.10) connection_pool (2.2.5) - cose (1.0.0) + cose (1.2.1) cbor (~> 0.5.9) - openssl-signature_algorithm (~> 0.4.0) + openssl-signature_algorithm (~> 1.0) crack (0.4.5) rexml crass (1.0.6) @@ -338,7 +347,7 @@ GEM json-ld (~> 3.2) rdf (~> 3.2) jsonapi-renderer (0.2.2) - jwt (2.2.2) + jwt (2.4.1) kaminari (1.2.2) activesupport (>= 4.1.0) kaminari-actionview (= 1.2.2) @@ -437,8 +446,9 @@ GEM validate_email validate_url webfinger (>= 1.0.1) - openssl (2.2.0) - openssl-signature_algorithm (0.4.0) + openssl (3.0.0) + openssl-signature_algorithm (1.2.1) + openssl (> 2.0, < 3.1) orm_adapter (0.5.0) ox (2.14.11) parallel (1.22.1) @@ -599,7 +609,6 @@ GEM scenic (1.6.0) activerecord (>= 4.0.0) railties (>= 4.0.0) - securecompare (1.0.0) semantic_range (3.0.0) sidekiq (6.5.3) connection_pool (>= 2.2.2) @@ -655,9 +664,10 @@ GEM climate_control (>= 0.0.3, < 1.0) thor (1.2.1) tilt (2.0.10) - tpm-key_attestation (0.9.0) + tpm-key_attestation (0.11.0) bindata (~> 2.4) - openssl-signature_algorithm (~> 0.4.0) + openssl (> 2.0, < 3.1) + openssl-signature_algorithm (~> 1.0) tty-color (0.6.0) tty-cursor (0.7.1) tty-prompt (0.23.1) @@ -688,16 +698,15 @@ GEM public_suffix warden (1.2.9) rack (>= 2.0.9) - webauthn (3.0.0.alpha1) + webauthn (2.5.2) android_key_attestation (~> 0.3.0) awrence (~> 1.1) bindata (~> 2.4) cbor (~> 0.5.9) - cose (~> 1.0) - openssl (~> 2.0) + cose (~> 1.1) + openssl (>= 2.2, < 3.1) safety_net_attestation (~> 0.4.0) - securecompare (~> 1.0) - tpm-key_attestation (~> 0.9.0) + tpm-key_attestation (~> 0.11.0) webfinger (1.2.0) activesupport httpclient (>= 2.4) @@ -710,9 +719,6 @@ GEM rack-proxy (>= 0.6.1) railties (>= 5.2) semantic_range (>= 2.3.0) - webpush (0.3.8) - hkdf (~> 0.2) - jwt (~> 2.0) websocket-driver (0.7.5) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) @@ -843,8 +849,8 @@ DEPENDENCIES tty-prompt (~> 0.23) twitter-text (~> 3.1.0) tzinfo-data (~> 1.2022) - webauthn (~> 3.0.0.alpha1) + webauthn (~> 2.5) webmock (~> 3.17) webpacker (~> 5.4) - webpush (~> 0.3) + webpush! xorcist (~> 1.1) diff --git a/spec/fabricators/webauthn_credential_fabricator.rb b/spec/fabricators/webauthn_credential_fabricator.rb index 496a7a7351b..ba59ce96772 100644 --- a/spec/fabricators/webauthn_credential_fabricator.rb +++ b/spec/fabricators/webauthn_credential_fabricator.rb @@ -1,7 +1,7 @@ Fabricator(:webauthn_credential) do user_id { Fabricate(:user).id } external_id { Base64.urlsafe_encode64(SecureRandom.random_bytes(16)) } - public_key { OpenSSL::PKey::EC.new("prime256v1").generate_key.public_key } + public_key { OpenSSL::PKey::EC.generate('prime256v1').public_key } nickname 'USB key' sign_count 0 end From 656ac99ef04464b37d152b09f25facb8fd76c190 Mon Sep 17 00:00:00 2001 From: Mashiro Date: Thu, 18 Aug 2022 05:07:12 +0800 Subject: [PATCH 181/646] Fix ambiguous column names in `tootctl search deploy` (#18993) --- app/lib/importer/statuses_index_importer.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/importer/statuses_index_importer.rb b/app/lib/importer/statuses_index_importer.rb index 7c653256006..5b5153d5c86 100644 --- a/app/lib/importer/statuses_index_importer.rb +++ b/app/lib/importer/statuses_index_importer.rb @@ -84,6 +84,6 @@ class Importer::StatusesIndexImporter < Importer::BaseImporter end def local_statuses_scope - Status.local.select('id, coalesce(reblog_of_id, id) as status_id') + Status.local.select('"statuses"."id", COALESCE("statuses"."reblog_of_id", "statuses"."id") AS status_id') end end From d415f1116b4d992b7f33b6f0d2dcbf00934f61b1 Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Thu, 18 Aug 2022 06:07:30 +0900 Subject: [PATCH 182/646] Fix /admin/accounts/ order parameter (#18996) --- app/views/admin/accounts/index.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/accounts/index.html.haml b/app/views/admin/accounts/index.html.haml index 7560fac7af0..cb378f0edba 100644 --- a/app/views/admin/accounts/index.html.haml +++ b/app/views/admin/accounts/index.html.haml @@ -21,7 +21,7 @@ .filter-subset.filter-subset--with-select %strong= t 'generic.order_by' .input.select - = select_tag :order, options_for_select([[t('relationships.most_recent'), nil], [t('relationships.last_active'), 'active']], params[:order]) + = select_tag :order, options_for_select([[t('relationships.most_recent'), 'recent'], [t('relationships.last_active'), 'active']], params[:order]) .fields-group - %i(username by_domain display_name email ip).each do |key| From 86b364920491de74128d0fa538f31b225a750154 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Aug 2022 08:52:05 +0900 Subject: [PATCH 183/646] Bump tzinfo-data from 1.2022.1 to 1.2022.3 (#19003) Bumps [tzinfo-data](https://github.com/tzinfo/tzinfo-data) from 1.2022.1 to 1.2022.3. - [Release notes](https://github.com/tzinfo/tzinfo-data/releases) - [Commits](https://github.com/tzinfo/tzinfo-data/compare/v1.2022.1...v1.2022.3) --- updated-dependencies: - dependency-name: tzinfo-data dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 72c58848e1c..5f76ae58d78 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -683,7 +683,7 @@ GEM unf (~> 0.1.0) tzinfo (2.0.5) concurrent-ruby (~> 1.0) - tzinfo-data (1.2022.1) + tzinfo-data (1.2022.3) tzinfo (>= 1.0.0) unf (0.1.4) unf_ext From 1cadebfcc7d74a2d4ec23e4a2380bfec174395d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Aug 2022 08:52:57 +0900 Subject: [PATCH 184/646] Bump stylelint from 14.9.1 to 14.10.0 (#18983) Bumps [stylelint](https://github.com/stylelint/stylelint) from 14.9.1 to 14.10.0. - [Release notes](https://github.com/stylelint/stylelint/releases) - [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md) - [Commits](https://github.com/stylelint/stylelint/compare/14.9.1...14.10.0) --- updated-dependencies: - dependency-name: stylelint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 58 +++++++++++++++------------------------------------- 2 files changed, 17 insertions(+), 43 deletions(-) diff --git a/package.json b/package.json index 564b8b3f558..3557537cdd7 100644 --- a/package.json +++ b/package.json @@ -155,7 +155,7 @@ "raf": "^3.4.1", "react-intl-translations-manager": "^5.0.3", "react-test-renderer": "^16.14.0", - "stylelint": "^14.9.1", + "stylelint": "^14.10.0", "stylelint-config-standard-scss": "^4.0.0", "webpack-dev-server": "^3.11.3", "yargs": "^17.5.1" diff --git a/yarn.lock b/yarn.lock index d2c61b1122f..6399f802ff7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1115,10 +1115,10 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@csstools/selector-specificity@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.0.1.tgz#b6b8d81780b9a9f6459f4bfe9226ac6aefaefe87" - integrity sha512-aG20vknL4/YjQF9BSV7ts4EWm/yrjagAN7OWBNmlbEOUiu0llj4OGrFoOKK3g2vey4/p2omKCoHrWtPxSwV3HA== +"@csstools/selector-specificity@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz#1bfafe4b7ed0f3e4105837e056e0a89b108ebe36" + integrity sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg== "@emotion/babel-plugin@^11.7.1": version "11.9.2" @@ -3279,13 +3279,6 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clone-regexp@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-2.2.0.tgz#7d65e00885cd8796405c35a737e7a86b7429e36f" - integrity sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q== - dependencies: - is-regexp "^2.0.0" - cluster-key-slot@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz#30474b2a981fb12172695833052bc0d01336d10d" @@ -4762,13 +4755,6 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execall@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/execall/-/execall-2.0.0.tgz#16a06b5fe5099df7d00be5d9c06eecded1663b45" - integrity sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow== - dependencies: - clone-regexp "^2.1.0" - exif-js@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/exif-js/-/exif-js-2.3.0.tgz#9d10819bf571f873813e7640241255ab9ce1a814" @@ -4909,10 +4895,10 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fastest-levenshtein@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" - integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== +fastest-levenshtein@^1.0.16: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: version "1.13.0" @@ -5237,11 +5223,6 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stdin@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" - integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== - get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -6257,11 +6238,6 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-regexp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d" - integrity sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA== - is-resolvable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" @@ -8792,7 +8768,7 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.27, postcss@^7.0.32: source-map "^0.6.1" supports-color "^6.1.0" -postcss@^8.2.15, postcss@^8.4.14, postcss@^8.4.16: +postcss@^8.2.15, postcss@^8.4.16: version "8.4.16" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c" integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== @@ -10538,22 +10514,20 @@ stylelint-scss@^4.0.0: postcss-selector-parser "^6.0.6" postcss-value-parser "^4.1.0" -stylelint@^14.9.1: - version "14.9.1" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.9.1.tgz#6494ed38f148b1e75b402d678a3b6a8aae86dfda" - integrity sha512-RdAkJdPiLqHawCSnu21nE27MjNXaVd4WcOHA4vK5GtIGjScfhNnaOuWR2wWdfKFAvcWQPOYe311iveiVKSmwsA== +stylelint@^14.10.0: + version "14.10.0" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.10.0.tgz#c588f5cd47cd214cf1acee5bc165961b6a3ad836" + integrity sha512-VAmyKrEK+wNFh9R8mNqoxEFzaa4gsHGhcT4xgkQDuOA5cjF6CaNS8loYV7gpi4tIZBPUyXesotPXzJAMN8VLOQ== dependencies: - "@csstools/selector-specificity" "^2.0.1" + "@csstools/selector-specificity" "^2.0.2" balanced-match "^2.0.0" colord "^2.9.2" cosmiconfig "^7.0.1" css-functions-list "^3.1.0" debug "^4.3.4" - execall "^2.0.0" fast-glob "^3.2.11" - fastest-levenshtein "^1.0.12" + fastest-levenshtein "^1.0.16" file-entry-cache "^6.0.1" - get-stdin "^8.0.0" global-modules "^2.0.0" globby "^11.1.0" globjoin "^0.1.4" @@ -10568,7 +10542,7 @@ stylelint@^14.9.1: micromatch "^4.0.5" normalize-path "^3.0.0" picocolors "^1.0.0" - postcss "^8.4.14" + postcss "^8.4.16" postcss-media-query-parser "^0.2.3" postcss-resolve-nested-selector "^0.1.1" postcss-safe-parser "^6.0.0" From da2a5233bea340d3ff17fc3a156d99bd52b4494b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Aug 2022 08:53:14 +0900 Subject: [PATCH 185/646] Bump sass from 1.54.3 to 1.54.4 (#18989) Bumps [sass](https://github.com/sass/dart-sass) from 1.54.3 to 1.54.4. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.54.3...1.54.4) --- updated-dependencies: - dependency-name: sass dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 3557537cdd7..5054c818cfa 100644 --- a/package.json +++ b/package.json @@ -119,7 +119,7 @@ "requestidlecallback": "^0.3.0", "reselect": "^4.1.6", "rimraf": "^3.0.2", - "sass": "^1.54.3", + "sass": "^1.54.4", "sass-loader": "^10.2.0", "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", diff --git a/yarn.lock b/yarn.lock index 6399f802ff7..e916197dc8f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9745,10 +9745,10 @@ sass-loader@^10.2.0: schema-utils "^3.0.0" semver "^7.3.2" -sass@^1.54.3: - version "1.54.3" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.3.tgz#37baa2652f7f1fdadb73240ee9a2b9b81fabb5c4" - integrity sha512-fLodey5Qd41Pxp/Tk7Al97sViYwF/TazRc5t6E65O7JOk4XF8pzwIW7CvCxYVOfJFFI/1x5+elDyBIixrp+zrw== +sass@^1.54.4: + version "1.54.4" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.4.tgz#803ff2fef5525f1dd01670c3915b4b68b6cba72d" + integrity sha512-3tmF16yvnBwtlPrNBHw/H907j8MlOX8aTBnlNX1yrKx24RKcJGPyLhFUwkoKBKesR3unP93/2z14Ll8NicwQUA== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From 0a3c0cbff7968ed539ae50a3d803ae760c46f633 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Aug 2022 08:53:28 +0900 Subject: [PATCH 186/646] Bump bullet from 7.0.2 to 7.0.3 (#18984) Bumps [bullet](https://github.com/flyerhzm/bullet) from 7.0.2 to 7.0.3. - [Release notes](https://github.com/flyerhzm/bullet/releases) - [Changelog](https://github.com/flyerhzm/bullet/blob/master/CHANGELOG.md) - [Commits](https://github.com/flyerhzm/bullet/compare/7.0.2...7.0.3) --- updated-dependencies: - dependency-name: bullet dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 5f76ae58d78..e7157250431 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -131,7 +131,7 @@ GEM concurrent-ruby (~> 1.0, >= 1.0.5) redis (>= 1.0, <= 5.0) builder (3.2.4) - bullet (7.0.2) + bullet (7.0.3) activesupport (>= 3.0.0) uniform_notifier (~> 1.11) bundler-audit (0.9.1) From 96fdbdb0ad8d8b1e61ec0611b333395cf6855834 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Aug 2022 08:53:37 +0900 Subject: [PATCH 187/646] Bump webmock from 3.17.0 to 3.17.1 (#18988) Bumps [webmock](https://github.com/bblimke/webmock) from 3.17.0 to 3.17.1. - [Release notes](https://github.com/bblimke/webmock/releases) - [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md) - [Commits](https://github.com/bblimke/webmock/compare/v3.17.0...v3.17.1) --- updated-dependencies: - dependency-name: webmock dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index e7157250431..4ac70092883 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -710,7 +710,7 @@ GEM webfinger (1.2.0) activesupport httpclient (>= 2.4) - webmock (3.17.0) + webmock (3.17.1) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) From a220c84181f45b6104e711a931b6a2b72799aace Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Aug 2022 08:54:31 +0900 Subject: [PATCH 188/646] Bump sidekiq from 6.5.3 to 6.5.4 (#18982) Bumps [sidekiq](https://github.com/mperham/sidekiq) from 6.5.3 to 6.5.4. - [Release notes](https://github.com/mperham/sidekiq/releases) - [Changelog](https://github.com/mperham/sidekiq/blob/main/Changes.md) - [Commits](https://github.com/mperham/sidekiq/compare/v6.5.3...v6.5.4) --- updated-dependencies: - dependency-name: sidekiq dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 4ac70092883..81a36ccd251 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -610,7 +610,7 @@ GEM activerecord (>= 4.0.0) railties (>= 4.0.0) semantic_range (3.0.0) - sidekiq (6.5.3) + sidekiq (6.5.4) connection_pool (>= 2.2.2) rack (~> 2.0) redis (>= 4.5.0) From 71d403230e8cd9978bdd80092f155426ef4614a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Aug 2022 08:55:18 +0900 Subject: [PATCH 189/646] Bump brakeman from 5.2.3 to 5.3.1 (#18985) Bumps [brakeman](https://github.com/presidentbeef/brakeman) from 5.2.3 to 5.3.1. - [Release notes](https://github.com/presidentbeef/brakeman/releases) - [Changelog](https://github.com/presidentbeef/brakeman/blob/main/CHANGES.md) - [Commits](https://github.com/presidentbeef/brakeman/commits) --- updated-dependencies: - dependency-name: brakeman dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index cd519111fb8..addf923b40c 100644 --- a/Gemfile +++ b/Gemfile @@ -134,7 +134,7 @@ group :development do gem 'memory_profiler' gem 'rubocop', '~> 1.30', require: false gem 'rubocop-rails', '~> 2.15', require: false - gem 'brakeman', '~> 5.2', require: false + gem 'brakeman', '~> 5.3', require: false gem 'bundler-audit', '~> 0.9', require: false gem 'capistrano', '~> 3.17' diff --git a/Gemfile.lock b/Gemfile.lock index 81a36ccd251..c7ff3b65e7b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -125,7 +125,7 @@ GEM ffi (~> 1.14) bootsnap (1.13.0) msgpack (~> 1.2) - brakeman (5.2.3) + brakeman (5.3.1) browser (4.2.0) brpoplpush-redis_script (0.1.2) concurrent-ruby (~> 1.0, >= 1.0.5) @@ -741,7 +741,7 @@ DEPENDENCIES binding_of_caller (~> 1.0) blurhash (~> 0.1) bootsnap (~> 1.13.0) - brakeman (~> 5.2) + brakeman (~> 5.3) browser bullet (~> 7.0) bundler-audit (~> 0.9) From 5935e61306d546d621ca6a4dd02100659ef4428d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Aug 2022 08:58:16 +0900 Subject: [PATCH 190/646] Bump pry-byebug from 3.9.0 to 3.10.1 (#19002) Bumps [pry-byebug](https://github.com/deivid-rodriguez/pry-byebug) from 3.9.0 to 3.10.1. - [Release notes](https://github.com/deivid-rodriguez/pry-byebug/releases) - [Changelog](https://github.com/deivid-rodriguez/pry-byebug/blob/master/CHANGELOG.md) - [Commits](https://github.com/deivid-rodriguez/pry-byebug/compare/v3.9.0...v3.10.1) --- updated-dependencies: - dependency-name: pry-byebug dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index addf923b40c..38a4e631421 100644 --- a/Gemfile +++ b/Gemfile @@ -102,7 +102,7 @@ group :development, :test do gem 'fabrication', '~> 2.30' gem 'fuubar', '~> 2.5' gem 'i18n-tasks', '~> 1.0', require: false - gem 'pry-byebug', '~> 3.9' + gem 'pry-byebug', '~> 3.10' gem 'pry-rails', '~> 0.3' gem 'rspec-rails', '~> 5.1' end diff --git a/Gemfile.lock b/Gemfile.lock index c7ff3b65e7b..bd6150e53e0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -470,12 +470,12 @@ GEM actionmailer (>= 3) premailer (~> 1.7, >= 1.7.9) private_address_check (0.5.0) - pry (0.13.1) + pry (0.14.1) coderay (~> 1.1) method_source (~> 1.0) - pry-byebug (3.9.0) + pry-byebug (3.10.1) byebug (~> 11.0) - pry (~> 0.13.0) + pry (>= 0.13, < 0.15) pry-rails (0.3.9) pry (>= 0.10.4) public_suffix (4.0.7) @@ -809,7 +809,7 @@ DEPENDENCIES posix-spawn premailer-rails private_address_check (~> 0.5) - pry-byebug (~> 3.9) + pry-byebug (~> 3.10) pry-rails (~> 0.3) puma (~> 5.6) pundit (~> 2.2) From a7c280f93a22c1a711ca93b14282efece7fb16d9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Aug 2022 09:06:07 +0900 Subject: [PATCH 191/646] Bump redis-namespace from 1.8.2 to 1.9.0 (#18987) Bumps [redis-namespace](https://github.com/resque/redis-namespace) from 1.8.2 to 1.9.0. - [Release notes](https://github.com/resque/redis-namespace/releases) - [Changelog](https://github.com/resque/redis-namespace/blob/master/CHANGELOG.md) - [Commits](https://github.com/resque/redis-namespace/compare/v1.8.2...v1.9) --- updated-dependencies: - dependency-name: redis-namespace dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index 38a4e631421..5dfaf756be7 100644 --- a/Gemfile +++ b/Gemfile @@ -51,7 +51,7 @@ gem 'ed25519', '~> 1.3' gem 'fast_blank', '~> 1.0' gem 'fastimage' gem 'hiredis', '~> 0.6' -gem 'redis-namespace', '~> 1.8' +gem 'redis-namespace', '~> 1.9' gem 'htmlentities', '~> 4.3' gem 'http', '~> 5.1' gem 'http_accept_language', '~> 2.1' diff --git a/Gemfile.lock b/Gemfile.lock index bd6150e53e0..1ed77ed1241 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -542,8 +542,8 @@ GEM rdf-normalize (0.5.0) rdf (~> 3.2) redis (4.5.1) - redis-namespace (1.8.2) - redis (>= 3.0.4) + redis-namespace (1.9.0) + redis (>= 4) regexp_parser (2.5.0) request_store (1.5.1) rack (>= 1.4) @@ -822,7 +822,7 @@ DEPENDENCIES rails-settings-cached (~> 0.6) rdf-normalize (~> 0.5) redis (~> 4.5) - redis-namespace (~> 1.8) + redis-namespace (~> 1.9) rexml (~> 3.2) rqrcode (~> 2.1) rspec-rails (~> 5.1) From 99f6be3b601d643ec31e679d20f0d065f788455e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Aug 2022 09:06:15 +0900 Subject: [PATCH 192/646] Bump pg from 1.4.2 to 1.4.3 (#18986) Bumps [pg](https://github.com/ged/ruby-pg) from 1.4.2 to 1.4.3. - [Release notes](https://github.com/ged/ruby-pg/releases) - [Changelog](https://github.com/ged/ruby-pg/blob/master/History.rdoc) - [Commits](https://github.com/ged/ruby-pg/compare/v1.4.2...v1.4.3) --- updated-dependencies: - dependency-name: pg dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 1ed77ed1241..21d3b81cafe 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -457,7 +457,7 @@ GEM parslet (2.0.0) pastel (0.8.0) tty-color (~> 0.5) - pg (1.4.2) + pg (1.4.3) pghero (2.8.3) activerecord (>= 5) pkg-config (1.4.9) From 1254fa122fd04e5e3f2fce01649ce6c78a560209 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Aug 2022 09:24:46 +0900 Subject: [PATCH 193/646] Bump cocoon-js-vanilla from 1.2.0 to 1.3.0 (#18991) Bumps cocoon-js-vanilla from 1.2.0 to 1.3.0. --- updated-dependencies: - dependency-name: cocoon-js-vanilla dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5054c818cfa..6c7f9f53afc 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "babel-plugin-transform-react-remove-prop-types": "^0.4.24", "blurhash": "^1.1.5", "classnames": "^2.3.1", - "cocoon-js-vanilla": "^1.2.0", + "cocoon-js-vanilla": "^1.3.0", "color-blend": "^3.0.1", "compression-webpack-plugin": "^6.1.1", "cross-env": "^7.0.3", diff --git a/yarn.lock b/yarn.lock index e916197dc8f..d98905b0748 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3298,10 +3298,10 @@ coa@^2.0.2: chalk "^2.4.1" q "^1.1.2" -cocoon-js-vanilla@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/cocoon-js-vanilla/-/cocoon-js-vanilla-1.2.0.tgz#595348499d315d3b5828dd77a20974756cf59321" - integrity sha512-qLomIVL0Krfc983WLgaYPPktMjMtBN+F/CV15NPVDc9U9BCe2OL5WyAIYkPrVhDRphoYBmHCdIlZkq+vSBI4xg== +cocoon-js-vanilla@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/cocoon-js-vanilla/-/cocoon-js-vanilla-1.3.0.tgz#1e53663f5d314e5e9b315b63eaf8ae701df113c0" + integrity sha512-rMnbfW6oFhvELUg141vfqZKzsowfLJRxs5FksfmDr1ZBs6LTNVYE63NQyvgRqyYUOK54cKKbI+V83dQKeeRuPg== collect-v8-coverage@^1.0.0: version "1.0.1" From a6dc606d5209c5f61f8c19f5fbe5e33cb74d662a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Aug 2022 09:27:53 +0900 Subject: [PATCH 194/646] Bump webmock from 3.17.0 to 3.18.1 (#19007) Bumps [webmock](https://github.com/bblimke/webmock) from 3.17.0 to 3.18.1. - [Release notes](https://github.com/bblimke/webmock/releases) - [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md) - [Commits](https://github.com/bblimke/webmock/compare/v3.17.0...v3.18.1) --- updated-dependencies: - dependency-name: webmock dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 5dfaf756be7..75525b0ac59 100644 --- a/Gemfile +++ b/Gemfile @@ -119,7 +119,7 @@ group :test do gem 'rails-controller-testing', '~> 1.0' gem 'rspec-sidekiq', '~> 3.1' gem 'simplecov', '~> 0.21', require: false - gem 'webmock', '~> 3.17' + gem 'webmock', '~> 3.18' gem 'rspec_junit_formatter', '~> 0.5' end diff --git a/Gemfile.lock b/Gemfile.lock index 21d3b81cafe..35c2d511430 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -710,7 +710,7 @@ GEM webfinger (1.2.0) activesupport httpclient (>= 2.4) - webmock (3.17.1) + webmock (3.18.1) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) @@ -850,7 +850,7 @@ DEPENDENCIES twitter-text (~> 3.1.0) tzinfo-data (~> 1.2022) webauthn (~> 2.5) - webmock (~> 3.17) + webmock (~> 3.18) webpacker (~> 5.4) webpush! xorcist (~> 1.1) From 5920d8fe33d5ecb0c7ca20c3b255216bb8de4aa9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Aug 2022 18:53:42 +0900 Subject: [PATCH 195/646] Bump omniauth from 1.9.1 to 1.9.2 (#19006) Bumps [omniauth](https://github.com/omniauth/omniauth) from 1.9.1 to 1.9.2. - [Release notes](https://github.com/omniauth/omniauth/releases) - [Commits](https://github.com/omniauth/omniauth/compare/v1.9.1...v1.9.2) --- updated-dependencies: - dependency-name: omniauth dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 35c2d511430..840fe0a78ce 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -423,7 +423,7 @@ GEM sidekiq (>= 3.5) statsd-ruby (~> 1.4, >= 1.4.0) oj (3.13.20) - omniauth (1.9.1) + omniauth (1.9.2) hashie (>= 3.4.6) rack (>= 1.6.2, < 3) omniauth-cas (2.0.0) From 8a93dd3d83995a6821bfda88c28204dcee1461e8 Mon Sep 17 00:00:00 2001 From: Shlee Date: Tue, 16 Aug 2022 04:03:05 +0930 Subject: [PATCH 196/646] [Glitch] Update notifications.js Port d92ce31c92903c3ce24c3fcadb99af3c1ba1d585 to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/reducers/notifications.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/javascript/flavours/glitch/reducers/notifications.js b/app/javascript/flavours/glitch/reducers/notifications.js index f538af7fa5b..1e61526b1be 100644 --- a/app/javascript/flavours/glitch/reducers/notifications.js +++ b/app/javascript/flavours/glitch/reducers/notifications.js @@ -270,8 +270,6 @@ export default function notifications(state = initialState, action) { case FOLLOW_REQUEST_AUTHORIZE_SUCCESS: case FOLLOW_REQUEST_REJECT_SUCCESS: return filterNotifications(state, [action.id], 'follow_request'); - case ACCOUNT_MUTE_SUCCESS: - return action.relationship.muting_notifications ? filterNotifications(state, [action.relationship.id]) : state; case NOTIFICATIONS_CLEAR: return state.set('items', ImmutableList()).set('pendingItems', ImmutableList()).set('hasMore', false); case TIMELINE_DELETE: From d83faa1a8902c91a5dbd0bf3d9740e3e19c1d623 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 24 Aug 2022 19:00:37 +0200 Subject: [PATCH 197/646] Add ability to block sign-ups from IP (#19037) --- .../auth/registrations_controller.rb | 6 +- app/models/ip_block.rb | 1 + app/services/app_sign_up_service.rb | 66 +++++++++++++++---- config/locales/simple_form.en.yml | 2 + spec/services/app_sign_up_service_spec.rb | 2 +- 5 files changed, 64 insertions(+), 13 deletions(-) diff --git a/app/controllers/auth/registrations_controller.rb b/app/controllers/auth/registrations_controller.rb index 1c3adbd786b..7e86e01baa9 100644 --- a/app/controllers/auth/registrations_controller.rb +++ b/app/controllers/auth/registrations_controller.rb @@ -82,7 +82,7 @@ class Auth::RegistrationsController < Devise::RegistrationsController end def check_enabled_registrations - redirect_to root_path if single_user_mode? || omniauth_only? || !allowed_registrations? + redirect_to root_path if single_user_mode? || omniauth_only? || !allowed_registrations? || ip_blocked? end def allowed_registrations? @@ -93,6 +93,10 @@ class Auth::RegistrationsController < Devise::RegistrationsController ENV['OMNIAUTH_ONLY'] == 'true' end + def ip_blocked? + IpBlock.where(severity: :sign_up_block).where('ip >>= ?', request.remote_ip.to_s).exists? + end + def invite_code if params[:user] params[:user][:invite_code] diff --git a/app/models/ip_block.rb b/app/models/ip_block.rb index aedd3ca0d4d..e1ab59806e8 100644 --- a/app/models/ip_block.rb +++ b/app/models/ip_block.rb @@ -19,6 +19,7 @@ class IpBlock < ApplicationRecord enum severity: { sign_up_requires_approval: 5000, + sign_up_block: 5500, no_access: 9999, } diff --git a/app/services/app_sign_up_service.rb b/app/services/app_sign_up_service.rb index e0069415772..3833327bbce 100644 --- a/app/services/app_sign_up_service.rb +++ b/app/services/app_sign_up_service.rb @@ -2,23 +2,67 @@ class AppSignUpService < BaseService def call(app, remote_ip, params) - return unless allowed_registrations? + @app = app + @remote_ip = remote_ip + @params = params - user_params = params.slice(:email, :password, :agreement, :locale) - account_params = params.slice(:username) - invite_request_params = { text: params[:reason] } - user = User.create!(user_params.merge(created_by_application: app, sign_up_ip: remote_ip, password_confirmation: user_params[:password], account_attributes: account_params, invite_request_attributes: invite_request_params)) + raise Mastodon::NotPermittedError unless allowed_registrations? - Doorkeeper::AccessToken.create!(application: app, - resource_owner_id: user.id, - scopes: app.scopes, - expires_in: Doorkeeper.configuration.access_token_expires_in, - use_refresh_token: Doorkeeper.configuration.refresh_token_enabled?) + ApplicationRecord.transaction do + create_user! + create_access_token! + end + + @access_token end private + def create_user! + @user = User.create!( + user_params.merge(created_by_application: @app, sign_up_ip: @remote_ip, password_confirmation: user_params[:password], account_attributes: account_params, invite_request_attributes: invite_request_params) + ) + end + + def create_access_token! + @access_token = Doorkeeper::AccessToken.create!( + application: @app, + resource_owner_id: @user.id, + scopes: @app.scopes, + expires_in: Doorkeeper.configuration.access_token_expires_in, + use_refresh_token: Doorkeeper.configuration.refresh_token_enabled? + ) + end + + def user_params + @params.slice(:email, :password, :agreement, :locale) + end + + def account_params + @params.slice(:username) + end + + def invite_request_params + { text: @params[:reason] } + end + def allowed_registrations? - Setting.registrations_mode != 'none' && !Rails.configuration.x.single_user_mode + registrations_open? && !single_user_mode? && !omniauth_only? && !ip_blocked? + end + + def registrations_open? + Setting.registrations_mode != 'none' + end + + def single_user_mode? + Rails.configuration.x.single_user_mode + end + + def omniauth_only? + ENV['OMNIAUTH_ONLY'] == 'true' + end + + def ip_blocked? + IpBlock.where(severity: :sign_up_block).where('ip >>= ?', @remote_ip.to_s).exists? end end diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index c17a62cbea3..28f78d50003 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -85,6 +85,7 @@ en: ip: Enter an IPv4 or IPv6 address. You can block entire ranges using the CIDR syntax. Be careful not to lock yourself out! severities: no_access: Block access to all resources + sign_up_block: New sign-ups will not be possible sign_up_requires_approval: New sign-ups will require your approval severity: Choose what will happen with requests from this IP rule: @@ -219,6 +220,7 @@ en: ip: IP severities: no_access: Block access + sign_up_block: Block sign-ups sign_up_requires_approval: Limit sign-ups severity: Rule notification_emails: diff --git a/spec/services/app_sign_up_service_spec.rb b/spec/services/app_sign_up_service_spec.rb index e0c83b7041d..8ec4d4a7a63 100644 --- a/spec/services/app_sign_up_service_spec.rb +++ b/spec/services/app_sign_up_service_spec.rb @@ -11,7 +11,7 @@ RSpec.describe AppSignUpService, type: :service do it 'returns nil when registrations are closed' do tmp = Setting.registrations_mode Setting.registrations_mode = 'none' - expect(subject.call(app, remote_ip, good_params)).to be_nil + expect { subject.call(app, remote_ip, good_params) }.to raise_error Mastodon::NotPermittedError Setting.registrations_mode = tmp end From 0412a4d03e3e075b8b4090774ebe5db4f95412de Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 24 Aug 2022 19:00:55 +0200 Subject: [PATCH 198/646] Change e-mail domain blocks to match subdomains of blocked domains (#18979) --- app/models/email_domain_block.rb | 66 ++++++++++++++++++-------- spec/models/email_domain_block_spec.rb | 27 ++++++++--- 2 files changed, 65 insertions(+), 28 deletions(-) diff --git a/app/models/email_domain_block.rb b/app/models/email_domain_block.rb index 0e1e663c109..f9d74332b88 100644 --- a/app/models/email_domain_block.rb +++ b/app/models/email_domain_block.rb @@ -30,32 +30,56 @@ class EmailDomainBlock < ApplicationRecord @history ||= Trends::History.new('email_domain_blocks', id) end - def self.block?(domain_or_domains, attempt_ip: nil) - domains = Array(domain_or_domains).map do |str| - domain = begin - if str.include?('@') - str.split('@', 2).last - else - str - end + class Matcher + def initialize(domain_or_domains, attempt_ip: nil) + @uris = extract_uris(domain_or_domains) + @attempt_ip = attempt_ip + end + + def match? + blocking? || invalid_uri? + end + + private + + def invalid_uri? + @uris.any?(&:nil?) + end + + def blocking? + blocks = EmailDomainBlock.where(domain: domains_with_variants).order(Arel.sql('char_length(domain) desc')) + blocks.each { |block| block.history.add(@attempt_ip) } if @attempt_ip.present? + blocks.any? + end + + def domains_with_variants + @uris.flat_map do |uri| + next if uri.nil? + + segments = uri.normalized_host.split('.') + + segments.map.with_index { |_, i| segments[i..-1].join('.') } end - - TagManager.instance.normalize_domain(domain) if domain.present? - rescue Addressable::URI::InvalidURIError - nil end - # If some of the inputs passed in are invalid, we definitely want to - # block the attempt, but we also want to register hits against any - # other valid matches + def extract_uris(domain_or_domains) + Array(domain_or_domains).map do |str| + domain = begin + if str.include?('@') + str.split('@', 2).last + else + str + end + end - blocked = domains.any?(&:nil?) - - where(domain: domains).find_each do |block| - blocked = true - block.history.add(attempt_ip) if attempt_ip.present? + Addressable::URI.new.tap { |u| u.host = domain.strip } if domain.present? + rescue Addressable::URI::InvalidURIError, IDN::Idna::IdnaError + nil + end end + end - blocked + def self.block?(domain_or_domains, attempt_ip: nil) + Matcher.new(domain_or_domains, attempt_ip: attempt_ip).match? end end diff --git a/spec/models/email_domain_block_spec.rb b/spec/models/email_domain_block_spec.rb index 567a32c3280..e23116888c7 100644 --- a/spec/models/email_domain_block_spec.rb +++ b/spec/models/email_domain_block_spec.rb @@ -12,16 +12,29 @@ RSpec.describe EmailDomainBlock, type: :model do let(:input) { nil } context 'given an e-mail address' do - let(:input) { 'nyarn@example.com' } + let(:input) { "foo@#{domain}" } - it 'returns true if the domain is blocked' do - Fabricate(:email_domain_block, domain: 'example.com') - expect(EmailDomainBlock.block?(input)).to be true + context do + let(:domain) { 'example.com' } + + it 'returns true if the domain is blocked' do + Fabricate(:email_domain_block, domain: 'example.com') + expect(EmailDomainBlock.block?(input)).to be true + end + + it 'returns false if the domain is not blocked' do + Fabricate(:email_domain_block, domain: 'other-example.com') + expect(EmailDomainBlock.block?(input)).to be false + end end - it 'returns false if the domain is not blocked' do - Fabricate(:email_domain_block, domain: 'other-example.com') - expect(EmailDomainBlock.block?(input)).to be false + context do + let(:domain) { 'mail.example.com' } + + it 'returns true if it is a subdomain of a blocked domain' do + Fabricate(:email_domain_block, domain: 'example.com') + expect(described_class.block?(input)).to be true + end end end From b21aa828039610ef1750eff2291821b95da76896 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Aug 2022 09:54:36 +0900 Subject: [PATCH 199/646] Bump stackprof from 0.2.20 to 0.2.21 (#19027) Bumps [stackprof](https://github.com/tmm1/stackprof) from 0.2.20 to 0.2.21. - [Release notes](https://github.com/tmm1/stackprof/releases) - [Changelog](https://github.com/tmm1/stackprof/blob/master/CHANGELOG.md) - [Commits](https://github.com/tmm1/stackprof/compare/v0.2.20...v0.2.21) --- updated-dependencies: - dependency-name: stackprof dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 840fe0a78ce..266ddda1ad1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -648,7 +648,7 @@ GEM sshkit (1.21.2) net-scp (>= 1.1.2) net-ssh (>= 2.8.0) - stackprof (0.2.20) + stackprof (0.2.21) statsd-ruby (1.5.0) stoplight (3.0.0) strong_migrations (0.7.9) From ca5536167105e2bb690233d53cdfb05f4b0c33db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Aug 2022 09:55:01 +0900 Subject: [PATCH 200/646] Bump @babel/core from 7.18.10 to 7.18.13 (#19032) Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.18.10 to 7.18.13. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.13/packages/babel-core) --- updated-dependencies: - dependency-name: "@babel/core" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 56 ++++++++++++++++++++++++++-------------------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index 6c7f9f53afc..f116add2ebb 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ }, "private": true, "dependencies": { - "@babel/core": "^7.18.10", + "@babel/core": "^7.18.13", "@babel/plugin-proposal-decorators": "^7.18.10", "@babel/plugin-transform-react-inline-elements": "^7.18.6", "@babel/plugin-transform-runtime": "^7.18.10", diff --git a/yarn.lock b/yarn.lock index d98905b0748..a9b1cd757fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -33,21 +33,21 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.10", "@babel/core@^7.7.2": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" - integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.13", "@babel/core@^7.7.2": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.13.tgz#9be8c44512751b05094a4d3ab05fc53a47ce00ac" + integrity sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.10" + "@babel/generator" "^7.18.13" "@babel/helper-compilation-targets" "^7.18.9" "@babel/helper-module-transforms" "^7.18.9" "@babel/helpers" "^7.18.9" - "@babel/parser" "^7.18.10" + "@babel/parser" "^7.18.13" "@babel/template" "^7.18.10" - "@babel/traverse" "^7.18.10" - "@babel/types" "^7.18.10" + "@babel/traverse" "^7.18.13" + "@babel/types" "^7.18.13" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -63,12 +63,12 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.0" -"@babel/generator@^7.18.10", "@babel/generator@^7.7.2": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.10.tgz#794f328bfabdcbaf0ebf9bf91b5b57b61fa77a2a" - integrity sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA== +"@babel/generator@^7.18.13", "@babel/generator@^7.7.2": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.13.tgz#59550cbb9ae79b8def15587bdfbaa388c4abf212" + integrity sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ== dependencies: - "@babel/types" "^7.18.10" + "@babel/types" "^7.18.13" "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" @@ -337,10 +337,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.10.tgz#94b5f8522356e69e8277276adf67ed280c90ecc1" - integrity sha512-TYk3OA0HKL6qNryUayb5UUEhM/rkOQozIBEA5ITXh5DWrSp0TlUQXMyZmnWxG/DizSWBeeQ0Zbc5z8UGaaqoeg== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.13": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.13.tgz#5b2dd21cae4a2c5145f1fbd8ca103f9313d3b7e4" + integrity sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" @@ -1085,26 +1085,26 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.10.tgz#37ad97d1cb00efa869b91dd5d1950f8a6cf0cb08" - integrity sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g== +"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.13", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.13.tgz#5ab59ef51a997b3f10c4587d648b9696b6cb1a68" + integrity sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.10" + "@babel/generator" "^7.18.13" "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-function-name" "^7.18.9" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.18.10" - "@babel/types" "^7.18.10" + "@babel/parser" "^7.18.13" + "@babel/types" "^7.18.13" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" - integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.18.10", "@babel/types@^7.18.13", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.13.tgz#30aeb9e514f4100f7c1cb6e5ba472b30e48f519a" + integrity sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ== dependencies: "@babel/helper-string-parser" "^7.18.10" "@babel/helper-validator-identifier" "^7.18.6" From 37de05fdde75e32d6801e237545d4b67fd3d600e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Aug 2022 09:55:34 +0900 Subject: [PATCH 201/646] Bump sass from 1.54.4 to 1.54.5 (#19028) Bumps [sass](https://github.com/sass/dart-sass) from 1.54.4 to 1.54.5. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.54.4...1.54.5) --- updated-dependencies: - dependency-name: sass dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index f116add2ebb..6f6aa7b855e 100644 --- a/package.json +++ b/package.json @@ -119,7 +119,7 @@ "requestidlecallback": "^0.3.0", "reselect": "^4.1.6", "rimraf": "^3.0.2", - "sass": "^1.54.4", + "sass": "^1.54.5", "sass-loader": "^10.2.0", "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", diff --git a/yarn.lock b/yarn.lock index a9b1cd757fe..e78c4741bda 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9745,10 +9745,10 @@ sass-loader@^10.2.0: schema-utils "^3.0.0" semver "^7.3.2" -sass@^1.54.4: - version "1.54.4" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.4.tgz#803ff2fef5525f1dd01670c3915b4b68b6cba72d" - integrity sha512-3tmF16yvnBwtlPrNBHw/H907j8MlOX8aTBnlNX1yrKx24RKcJGPyLhFUwkoKBKesR3unP93/2z14Ll8NicwQUA== +sass@^1.54.5: + version "1.54.5" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.5.tgz#93708f5560784f6ff2eab8542ade021a4a947b3a" + integrity sha512-p7DTOzxkUPa/63FU0R3KApkRHwcVZYC0PLnLm5iyZACyp15qSi32x7zVUhRdABAATmkALqgGrjCJAcWvobmhHw== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From 26a1d1ac5f4e582296f813530be68c07cc85033a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Aug 2022 09:56:16 +0900 Subject: [PATCH 202/646] Bump webpack-bundle-analyzer from 4.5.0 to 4.6.1 (#19029) Bumps [webpack-bundle-analyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer) from 4.5.0 to 4.6.1. - [Release notes](https://github.com/webpack-contrib/webpack-bundle-analyzer/releases) - [Changelog](https://github.com/webpack-contrib/webpack-bundle-analyzer/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/webpack-bundle-analyzer/compare/v4.5.0...v4.6.1) --- updated-dependencies: - dependency-name: webpack-bundle-analyzer dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 15 +++++---------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 6f6aa7b855e..9ae7573d9c5 100644 --- a/package.json +++ b/package.json @@ -132,7 +132,7 @@ "uuid": "^8.3.1", "webpack": "^4.46.0", "webpack-assets-manifest": "^4.0.6", - "webpack-bundle-analyzer": "^4.5.0", + "webpack-bundle-analyzer": "^4.6.1", "webpack-cli": "^3.3.12", "webpack-merge": "^5.8.0", "wicg-inert": "^3.1.2", diff --git a/yarn.lock b/yarn.lock index e78c4741bda..0703b0a7ef9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2139,12 +2139,7 @@ acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4: - version "8.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.3.0.tgz#1193f9b96c4e8232f00b11a9edff81b2c8b98b88" - integrity sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw== - -acorn@^8.5.0, acorn@^8.7.1: +acorn@^8.0.4, acorn@^8.5.0, acorn@^8.7.1: version "8.7.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== @@ -11343,10 +11338,10 @@ webpack-assets-manifest@^4.0.6: tapable "^1.0" webpack-sources "^1.0" -webpack-bundle-analyzer@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz#1b0eea2947e73528754a6f9af3e91b2b6e0f79d5" - integrity sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ== +webpack-bundle-analyzer@^4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz#bee2ee05f4ba4ed430e4831a319126bb4ed9f5a6" + integrity sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw== dependencies: acorn "^8.0.4" acorn-walk "^8.0.0" From 115b8311c1f3e38fba5eb6bdbd272e8a925aa06c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Aug 2022 09:57:16 +0900 Subject: [PATCH 203/646] Bump sidekiq from 6.5.4 to 6.5.5 (#19030) Bumps [sidekiq](https://github.com/mperham/sidekiq) from 6.5.4 to 6.5.5. - [Release notes](https://github.com/mperham/sidekiq/releases) - [Changelog](https://github.com/mperham/sidekiq/blob/main/Changes.md) - [Commits](https://github.com/mperham/sidekiq/compare/v6.5.4...v6.5.5) --- updated-dependencies: - dependency-name: sidekiq dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 266ddda1ad1..8306efec2cd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -610,7 +610,7 @@ GEM activerecord (>= 4.0.0) railties (>= 4.0.0) semantic_range (3.0.0) - sidekiq (6.5.4) + sidekiq (6.5.5) connection_pool (>= 2.2.2) rack (~> 2.0) redis (>= 4.5.0) From d156e9b823e5be9e33de4a5d667b2cd32a94cbe4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Aug 2022 09:58:04 +0900 Subject: [PATCH 204/646] Bump stylelint from 14.10.0 to 14.11.0 (#19034) Bumps [stylelint](https://github.com/stylelint/stylelint) from 14.10.0 to 14.11.0. - [Release notes](https://github.com/stylelint/stylelint/releases) - [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md) - [Commits](https://github.com/stylelint/stylelint/compare/14.10.0...14.11.0) --- updated-dependencies: - dependency-name: stylelint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 9ae7573d9c5..b605fe114f0 100644 --- a/package.json +++ b/package.json @@ -155,7 +155,7 @@ "raf": "^3.4.1", "react-intl-translations-manager": "^5.0.3", "react-test-renderer": "^16.14.0", - "stylelint": "^14.10.0", + "stylelint": "^14.11.0", "stylelint-config-standard-scss": "^4.0.0", "webpack-dev-server": "^3.11.3", "yargs": "^17.5.1" diff --git a/yarn.lock b/yarn.lock index 0703b0a7ef9..ef957156df6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3361,10 +3361,10 @@ color@^3.0.0: color-convert "^1.9.1" color-string "^1.5.2" -colord@^2.9.2: - version "2.9.2" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.2.tgz#25e2bacbbaa65991422c07ea209e2089428effb1" - integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ== +colord@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== colorette@^1.2.2: version "1.2.2" @@ -10509,14 +10509,14 @@ stylelint-scss@^4.0.0: postcss-selector-parser "^6.0.6" postcss-value-parser "^4.1.0" -stylelint@^14.10.0: - version "14.10.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.10.0.tgz#c588f5cd47cd214cf1acee5bc165961b6a3ad836" - integrity sha512-VAmyKrEK+wNFh9R8mNqoxEFzaa4gsHGhcT4xgkQDuOA5cjF6CaNS8loYV7gpi4tIZBPUyXesotPXzJAMN8VLOQ== +stylelint@^14.11.0: + version "14.11.0" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.11.0.tgz#e2ecb28bbacab05e1fbeb84cbba23883b27499cc" + integrity sha512-OTLjLPxpvGtojEfpESWM8Ir64Z01E89xsisaBMUP/ngOx1+4VG2DPRcUyCCiin9Rd3kPXPsh/uwHd9eqnvhsYA== dependencies: "@csstools/selector-specificity" "^2.0.2" balanced-match "^2.0.0" - colord "^2.9.2" + colord "^2.9.3" cosmiconfig "^7.0.1" css-functions-list "^3.1.0" debug "^4.3.4" @@ -10551,7 +10551,7 @@ stylelint@^14.10.0: svg-tags "^1.0.0" table "^6.8.0" v8-compile-cache "^2.3.0" - write-file-atomic "^4.0.1" + write-file-atomic "^4.0.2" stylis@4.0.13: version "4.0.13" @@ -11614,10 +11614,10 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" - integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== +write-file-atomic@^4.0.1, write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" signal-exit "^3.0.7" From 50487db1224851a49ee523bbc013d5f8686a7a55 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 25 Aug 2022 04:27:47 +0200 Subject: [PATCH 205/646] Add ability to filter individual posts (#18945) * Add database table for status-specific filters * Add REST endpoints, entities and attributes * Show status filters in /filters interface * Perform server-side filtering for individual posts filters * Fix filtering on context mismatch * Refactor `toServerSideType` by moving it to its own module * Move loupe and delete icons to their own module * Add ability to filter individual posts from WebUI * Replace keyword list by warnings (expired, context mismatch) * Refactor server-side filtering code * Add tests --- .../api/v1/filters/statuses_controller.rb | 44 ++++ .../filters/statuses_controller.rb | 49 +++++ app/controllers/filters_controller.rb | 2 +- app/javascript/mastodon/actions/filters.js | 93 +++++++++ app/javascript/mastodon/actions/statuses.js | 4 +- app/javascript/mastodon/components/status.js | 1 + .../mastodon/components/status_action_bar.js | 16 +- .../mastodon/containers/status_container.js | 9 +- .../compose/components/language_dropdown.js | 19 +- .../features/filters/added_to_filter.js | 102 ++++++++++ .../features/filters/select_filter.js | 192 ++++++++++++++++++ .../features/ui/components/filter_modal.js | 134 ++++++++++++ .../features/ui/components/modal_root.js | 2 + .../features/ui/util/async-components.js | 4 + app/javascript/mastodon/reducers/filters.js | 11 +- app/javascript/mastodon/selectors/index.js | 19 +- app/javascript/mastodon/utils/filters.js | 16 ++ app/javascript/mastodon/utils/icons.js | 13 ++ .../styles/mastodon/components.scss | 18 ++ app/models/concerns/account_interactions.rb | 10 +- app/models/custom_filter.rb | 28 ++- app/models/custom_filter_status.rb | 37 ++++ app/models/form/status_filter_batch_action.rb | 34 ++++ app/presenters/filter_result_presenter.rb | 2 +- .../status_relationships_presenter.rb | 7 +- .../rest/filter_result_serializer.rb | 5 + app/serializers/rest/filter_serializer.rb | 1 + .../rest/filter_status_serializer.rb | 13 ++ app/views/filters/_filter.html.haml | 9 + app/views/filters/_filter_fields.html.haml | 7 + .../filters/statuses/_status_filter.html.haml | 37 ++++ app/views/filters/statuses/index.html.haml | 38 ++++ config/locales/en.yml | 15 ++ config/routes.rb | 11 +- ...808101323_create_custom_filter_statuses.rb | 12 ++ db/schema.rb | 13 +- .../v1/filters/statuses_controller_spec.rb | 116 +++++++++++ .../api/v1/statuses_controller_spec.rb | 27 +++ .../custom_filter_status_fabricator.rb | 4 + .../status_relationships_presenter_spec.rb | 27 +++ 40 files changed, 1138 insertions(+), 63 deletions(-) create mode 100644 app/controllers/api/v1/filters/statuses_controller.rb create mode 100644 app/controllers/filters/statuses_controller.rb create mode 100644 app/javascript/mastodon/actions/filters.js create mode 100644 app/javascript/mastodon/features/filters/added_to_filter.js create mode 100644 app/javascript/mastodon/features/filters/select_filter.js create mode 100644 app/javascript/mastodon/features/ui/components/filter_modal.js create mode 100644 app/javascript/mastodon/utils/filters.js create mode 100644 app/javascript/mastodon/utils/icons.js create mode 100644 app/models/custom_filter_status.rb create mode 100644 app/models/form/status_filter_batch_action.rb create mode 100644 app/serializers/rest/filter_status_serializer.rb create mode 100644 app/views/filters/statuses/_status_filter.html.haml create mode 100644 app/views/filters/statuses/index.html.haml create mode 100644 db/migrate/20220808101323_create_custom_filter_statuses.rb create mode 100644 spec/controllers/api/v1/filters/statuses_controller_spec.rb create mode 100644 spec/fabricators/custom_filter_status_fabricator.rb diff --git a/app/controllers/api/v1/filters/statuses_controller.rb b/app/controllers/api/v1/filters/statuses_controller.rb new file mode 100644 index 00000000000..b6bed306fca --- /dev/null +++ b/app/controllers/api/v1/filters/statuses_controller.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +class Api::V1::Filters::StatusesController < Api::BaseController + before_action -> { doorkeeper_authorize! :read, :'read:filters' }, only: [:index, :show] + before_action -> { doorkeeper_authorize! :write, :'write:filters' }, except: [:index, :show] + before_action :require_user! + + before_action :set_status_filters, only: :index + before_action :set_status_filter, only: [:show, :destroy] + + def index + render json: @status_filters, each_serializer: REST::FilterStatusSerializer + end + + def create + @status_filter = current_account.custom_filters.find(params[:filter_id]).statuses.create!(resource_params) + + render json: @status_filter, serializer: REST::FilterStatusSerializer + end + + def show + render json: @status_filter, serializer: REST::FilterStatusSerializer + end + + def destroy + @status_filter.destroy! + render_empty + end + + private + + def set_status_filters + filter = current_account.custom_filters.includes(:statuses).find(params[:filter_id]) + @status_filters = filter.statuses + end + + def set_status_filter + @status_filter = CustomFilterStatus.includes(:custom_filter).where(custom_filter: { account: current_account }).find(params[:id]) + end + + def resource_params + params.permit(:status_id) + end +end diff --git a/app/controllers/filters/statuses_controller.rb b/app/controllers/filters/statuses_controller.rb new file mode 100644 index 00000000000..cc493c22c64 --- /dev/null +++ b/app/controllers/filters/statuses_controller.rb @@ -0,0 +1,49 @@ +# frozen_string_literal: true + +class Filters::StatusesController < ApplicationController + layout 'admin' + + before_action :authenticate_user! + before_action :set_filter + before_action :set_status_filters + before_action :set_body_classes + + PER_PAGE = 20 + + def index + @status_filter_batch_action = Form::StatusFilterBatchAction.new + end + + def batch + @status_filter_batch_action = Form::StatusFilterBatchAction.new(status_filter_batch_action_params.merge(current_account: current_account, filter_id: params[:filter_id], type: action_from_button)) + @status_filter_batch_action.save! + rescue ActionController::ParameterMissing + flash[:alert] = I18n.t('admin.statuses.no_status_selected') + ensure + redirect_to edit_filter_path(@filter) + end + + private + + def set_filter + @filter = current_account.custom_filters.find(params[:filter_id]) + end + + def set_status_filters + @status_filters = @filter.statuses.preload(:status).page(params[:page]).per(PER_PAGE) + end + + def status_filter_batch_action_params + params.require(:form_status_filter_batch_action).permit(status_filter_ids: []) + end + + def action_from_button + if params[:remove] + 'remove' + end + end + + def set_body_classes + @body_classes = 'admin' + end +end diff --git a/app/controllers/filters_controller.rb b/app/controllers/filters_controller.rb index 5ed53bce1d2..cc5cb5d9f28 100644 --- a/app/controllers/filters_controller.rb +++ b/app/controllers/filters_controller.rb @@ -8,7 +8,7 @@ class FiltersController < ApplicationController before_action :set_body_classes def index - @filters = current_account.custom_filters.includes(:keywords).order(:phrase) + @filters = current_account.custom_filters.includes(:keywords, :statuses).order(:phrase) end def new diff --git a/app/javascript/mastodon/actions/filters.js b/app/javascript/mastodon/actions/filters.js new file mode 100644 index 00000000000..76326802eae --- /dev/null +++ b/app/javascript/mastodon/actions/filters.js @@ -0,0 +1,93 @@ +import api from '../api'; +import { openModal } from './modal'; + +export const FILTERS_FETCH_REQUEST = 'FILTERS_FETCH_REQUEST'; +export const FILTERS_FETCH_SUCCESS = 'FILTERS_FETCH_SUCCESS'; +export const FILTERS_FETCH_FAIL = 'FILTERS_FETCH_FAIL'; + +export const FILTERS_STATUS_CREATE_REQUEST = 'FILTERS_STATUS_CREATE_REQUEST'; +export const FILTERS_STATUS_CREATE_SUCCESS = 'FILTERS_STATUS_CREATE_SUCCESS'; +export const FILTERS_STATUS_CREATE_FAIL = 'FILTERS_STATUS_CREATE_FAIL'; + +export const FILTERS_CREATE_REQUEST = 'FILTERS_CREATE_REQUEST'; +export const FILTERS_CREATE_SUCCESS = 'FILTERS_CREATE_SUCCESS'; +export const FILTERS_CREATE_FAIL = 'FILTERS_CREATE_FAIL'; + +export const initAddFilter = (status, { contextType }) => dispatch => + dispatch(openModal('FILTER', { + statusId: status?.get('id'), + contextType: contextType, + })); + +export const fetchFilters = () => (dispatch, getState) => { + dispatch({ + type: FILTERS_FETCH_REQUEST, + skipLoading: true, + }); + + api(getState) + .get('/api/v2/filters') + .then(({ data }) => dispatch({ + type: FILTERS_FETCH_SUCCESS, + filters: data, + skipLoading: true, + })) + .catch(err => dispatch({ + type: FILTERS_FETCH_FAIL, + err, + skipLoading: true, + skipAlert: true, + })); +}; + +export const createFilterStatus = (params, onSuccess, onFail) => (dispatch, getState) => { + dispatch(createFilterStatusRequest()); + + api(getState).post(`/api/v1/filters/${params.filter_id}/statuses`, params).then(response => { + dispatch(createFilterStatusSuccess(response.data)); + if (onSuccess) onSuccess(); + }).catch(error => { + dispatch(createFilterStatusFail(error)); + if (onFail) onFail(); + }); +}; + +export const createFilterStatusRequest = () => ({ + type: FILTERS_STATUS_CREATE_REQUEST, +}); + +export const createFilterStatusSuccess = filter_status => ({ + type: FILTERS_STATUS_CREATE_SUCCESS, + filter_status, +}); + +export const createFilterStatusFail = error => ({ + type: FILTERS_STATUS_CREATE_FAIL, + error, +}); + +export const createFilter = (params, onSuccess, onFail) => (dispatch, getState) => { + dispatch(createFilterRequest()); + + api(getState).post('/api/v2/filters', params).then(response => { + dispatch(createFilterSuccess(response.data)); + if (onSuccess) onSuccess(response.data); + }).catch(error => { + dispatch(createFilterFail(error)); + if (onFail) onFail(); + }); +}; + +export const createFilterRequest = () => ({ + type: FILTERS_CREATE_REQUEST, +}); + +export const createFilterSuccess = filter => ({ + type: FILTERS_CREATE_SUCCESS, + filter, +}); + +export const createFilterFail = error => ({ + type: FILTERS_CREATE_FAIL, + error, +}); diff --git a/app/javascript/mastodon/actions/statuses.js b/app/javascript/mastodon/actions/statuses.js index adc24eabfbf..32a4f1f8575 100644 --- a/app/javascript/mastodon/actions/statuses.js +++ b/app/javascript/mastodon/actions/statuses.js @@ -42,9 +42,9 @@ export function fetchStatusRequest(id, skipLoading) { }; }; -export function fetchStatus(id) { +export function fetchStatus(id, forceFetch = false) { return (dispatch, getState) => { - const skipLoading = getState().getIn(['statuses', id], null) !== null; + const skipLoading = !forceFetch && getState().getIn(['statuses', id], null) !== null; dispatch(fetchContext(id)); diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js index dee935a6cda..d36311c6772 100644 --- a/app/javascript/mastodon/components/status.js +++ b/app/javascript/mastodon/components/status.js @@ -80,6 +80,7 @@ class Status extends ImmutablePureComponent { onOpenMedia: PropTypes.func, onOpenVideo: PropTypes.func, onBlock: PropTypes.func, + onAddFilter: PropTypes.func, onEmbed: PropTypes.func, onHeightChange: PropTypes.func, onToggleHidden: PropTypes.func, diff --git a/app/javascript/mastodon/components/status_action_bar.js b/app/javascript/mastodon/components/status_action_bar.js index d44da482dfd..4b384e6e542 100644 --- a/app/javascript/mastodon/components/status_action_bar.js +++ b/app/javascript/mastodon/components/status_action_bar.js @@ -44,6 +44,7 @@ const messages = defineMessages({ unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unblock domain {domain}' }, unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' }, unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' }, + filter: { id: 'status.filter', defaultMessage: 'Filter this post' }, }); const mapStateToProps = (state, { status }) => ({ @@ -80,6 +81,7 @@ class StatusActionBar extends ImmutablePureComponent { onPin: PropTypes.func, onBookmark: PropTypes.func, onFilter: PropTypes.func, + onAddFilter: PropTypes.func, withDismiss: PropTypes.bool, withCounters: PropTypes.bool, scrollKey: PropTypes.string, @@ -211,8 +213,8 @@ class StatusActionBar extends ImmutablePureComponent { this.props.onMuteConversation(this.props.status); } - handleFilter = () => { - this.props.onFilter(); + handleFilterClick = () => { + this.props.onAddFilter(this.props.status); } handleCopy = () => { @@ -235,7 +237,7 @@ class StatusActionBar extends ImmutablePureComponent { } - handleFilterClick = () => { + handleHideClick = () => { this.props.onFilter(); } @@ -294,6 +296,12 @@ class StatusActionBar extends ImmutablePureComponent { menu.push({ text: intl.formatMessage(messages.block, { name: account.get('username') }), action: this.handleBlockClick }); } + if (!this.props.onFilter) { + menu.push(null); + menu.push({ text: intl.formatMessage(messages.filter), action: this.handleFilterClick }); + menu.push(null); + } + menu.push({ text: intl.formatMessage(messages.report, { name: account.get('username') }), action: this.handleReport }); if (account.get('acct') !== account.get('username')) { @@ -343,7 +351,7 @@ class StatusActionBar extends ImmutablePureComponent { ); const filterButton = this.props.onFilter && ( - + ); return ( diff --git a/app/javascript/mastodon/containers/status_container.js b/app/javascript/mastodon/containers/status_container.js index ef0aca13a6d..28698b082d6 100644 --- a/app/javascript/mastodon/containers/status_container.js +++ b/app/javascript/mastodon/containers/status_container.js @@ -34,6 +34,9 @@ import { blockDomain, unblockDomain, } from '../actions/domain_blocks'; +import { + initAddFilter, +} from '../actions/filters'; import { initMuteModal } from '../actions/mutes'; import { initBlockModal } from '../actions/blocks'; import { initBoostModal } from '../actions/boosts'; @@ -66,7 +69,7 @@ const makeMapStateToProps = () => { return mapStateToProps; }; -const mapDispatchToProps = (dispatch, { intl }) => ({ +const mapDispatchToProps = (dispatch, { intl, contextType }) => ({ onReply (status, router) { dispatch((_, getState) => { @@ -176,6 +179,10 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ dispatch(initReport(status.get('account'), status)); }, + onAddFilter (status) { + dispatch(initAddFilter(status, { contextType })); + }, + onMute (account) { dispatch(initMuteModal(account)); }, diff --git a/app/javascript/mastodon/features/compose/components/language_dropdown.js b/app/javascript/mastodon/features/compose/components/language_dropdown.js index d76490c775f..0af3db7a461 100644 --- a/app/javascript/mastodon/features/compose/components/language_dropdown.js +++ b/app/javascript/mastodon/features/compose/components/language_dropdown.js @@ -8,6 +8,7 @@ import spring from 'react-motion/lib/spring'; import { supportsPassiveEvents } from 'detect-passive-events'; import classNames from 'classnames'; import { languages as preloadedLanguages } from 'mastodon/initial_state'; +import { loupeIcon, deleteIcon } from 'mastodon/utils/icons'; import fuzzysort from 'fuzzysort'; const messages = defineMessages({ @@ -16,22 +17,6 @@ const messages = defineMessages({ clear: { id: 'emoji_button.clear', defaultMessage: 'Clear' }, }); -// Copied from emoji-mart for consistency with emoji picker and since -// they don't export the icons in the package -const icons = { - loupe: ( - - - - ), - - delete: ( - - - - ), -}; - const listenerOptions = supportsPassiveEvents ? { passive: true } : false; class LanguageDropdownMenu extends React.PureComponent { @@ -242,7 +227,7 @@ class LanguageDropdownMenu extends React.PureComponent {
    - +
    diff --git a/app/javascript/mastodon/features/filters/added_to_filter.js b/app/javascript/mastodon/features/filters/added_to_filter.js new file mode 100644 index 00000000000..3785eb3c5aa --- /dev/null +++ b/app/javascript/mastodon/features/filters/added_to_filter.js @@ -0,0 +1,102 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import { FormattedMessage } from 'react-intl'; +import { toServerSideType } from 'mastodon/utils/filters'; +import Button from 'mastodon/components/button'; +import { connect } from 'react-redux'; + +const mapStateToProps = (state, { filterId }) => ({ + filter: state.getIn(['filters', filterId]), +}); + +export default @connect(mapStateToProps) +class AddedToFilter extends React.PureComponent { + + static propTypes = { + onClose: PropTypes.func.isRequired, + contextType: PropTypes.string, + filter: ImmutablePropTypes.map.isRequired, + dispatch: PropTypes.func.isRequired, + }; + + handleCloseClick = () => { + const { onClose } = this.props; + onClose(); + }; + + render () { + const { filter, contextType } = this.props; + + let expiredMessage = null; + if (filter.get('expires_at') && filter.get('expires_at') < new Date()) { + expiredMessage = ( + +

    +

    + +

    +
    + ); + } + + let contextMismatchMessage = null; + if (contextType && !filter.get('context').includes(toServerSideType(contextType))) { + contextMismatchMessage = ( + +

    +

    + +

    +
    + ); + } + + const settings_link = ( + + + + ); + + return ( + +

    +

    + +

    + + {expiredMessage} + {contextMismatchMessage} + +

    +

    + +

    + +
    + +
    + +
    + + ); + } + +} diff --git a/app/javascript/mastodon/features/filters/select_filter.js b/app/javascript/mastodon/features/filters/select_filter.js new file mode 100644 index 00000000000..b5b3545296a --- /dev/null +++ b/app/javascript/mastodon/features/filters/select_filter.js @@ -0,0 +1,192 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { connect } from 'react-redux'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; +import { toServerSideType } from 'mastodon/utils/filters'; +import { loupeIcon, deleteIcon } from 'mastodon/utils/icons'; +import Icon from 'mastodon/components/icon'; +import fuzzysort from 'fuzzysort'; + +const messages = defineMessages({ + search: { id: 'filter_modal.select_filter.search', defaultMessage: 'Search or create' }, + clear: { id: 'emoji_button.clear', defaultMessage: 'Clear' }, +}); + +const mapStateToProps = (state, { contextType }) => ({ + filters: Array.from(state.get('filters').values()).map((filter) => [ + filter.get('id'), + filter.get('title'), + filter.get('keywords')?.map((keyword) => keyword.get('keyword')).join('\n'), + filter.get('expires_at') && filter.get('expires_at') < new Date(), + contextType && !filter.get('context').includes(toServerSideType(contextType)), + ]), +}); + +export default @connect(mapStateToProps) +@injectIntl +class SelectFilter extends React.PureComponent { + + static propTypes = { + onSelectFilter: PropTypes.func.isRequired, + onNewFilter: PropTypes.func.isRequired, + filters: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.object)), + intl: PropTypes.object.isRequired, + }; + + state = { + searchValue: '', + }; + + search () { + const { filters } = this.props; + const { searchValue } = this.state; + + if (searchValue === '') { + return filters; + } + + return fuzzysort.go(searchValue, filters, { + keys: ['1', '2'], + limit: 5, + threshold: -10000, + }).map(result => result.obj); + } + + renderItem = filter => { + let warning = null; + if (filter[3] || filter[4]) { + warning = ( + + ( + {filter[3] && } + {filter[3] && filter[4] && ', '} + {filter[4] && } + ) + + ); + } + + return ( +
    + {filter[1]} {warning} +
    + ); + } + + renderCreateNew (name) { + return ( +
    + +
    + ); + } + + handleSearchChange = ({ target }) => { + this.setState({ searchValue: target.value }); + } + + setListRef = c => { + this.listNode = c; + } + + handleKeyDown = e => { + const index = Array.from(this.listNode.childNodes).findIndex(node => node === e.currentTarget); + + let element = null; + + switch(e.key) { + case ' ': + case 'Enter': + e.currentTarget.click(); + break; + case 'ArrowDown': + element = this.listNode.childNodes[index + 1] || this.listNode.firstChild; + break; + case 'ArrowUp': + element = this.listNode.childNodes[index - 1] || this.listNode.lastChild; + break; + case 'Tab': + if (e.shiftKey) { + element = this.listNode.childNodes[index - 1] || this.listNode.lastChild; + } else { + element = this.listNode.childNodes[index + 1] || this.listNode.firstChild; + } + break; + case 'Home': + element = this.listNode.firstChild; + break; + case 'End': + element = this.listNode.lastChild; + break; + } + + if (element) { + element.focus(); + e.preventDefault(); + e.stopPropagation(); + } + } + + handleSearchKeyDown = e => { + let element = null; + + switch(e.key) { + case 'Tab': + case 'ArrowDown': + element = this.listNode.firstChild; + + if (element) { + element.focus(); + e.preventDefault(); + e.stopPropagation(); + } + + break; + } + } + + handleClear = () => { + this.setState({ searchValue: '' }); + } + + handleItemClick = e => { + const value = e.currentTarget.getAttribute('data-index'); + + e.preventDefault(); + + this.props.onSelectFilter(value); + } + + handleNewFilterClick = e => { + e.preventDefault(); + + this.props.onNewFilter(this.state.searchValue); + }; + + render () { + const { intl } = this.props; + + const { searchValue } = this.state; + const isSearching = searchValue !== ''; + const results = this.search(); + + return ( + +

    +

    + +
    + + +
    + +
    + {results.map(this.renderItem)} + {isSearching && this.renderCreateNew(searchValue) } +
    + +
    + ); + } + +} diff --git a/app/javascript/mastodon/features/ui/components/filter_modal.js b/app/javascript/mastodon/features/ui/components/filter_modal.js new file mode 100644 index 00000000000..376db961d1e --- /dev/null +++ b/app/javascript/mastodon/features/ui/components/filter_modal.js @@ -0,0 +1,134 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import { fetchStatus } from 'mastodon/actions/statuses'; +import { fetchFilters, createFilter, createFilterStatus } from 'mastodon/actions/filters'; +import PropTypes from 'prop-types'; +import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import IconButton from 'mastodon/components/icon_button'; +import SelectFilter from 'mastodon/features/filters/select_filter'; +import AddedToFilter from 'mastodon/features/filters/added_to_filter'; + +const messages = defineMessages({ + close: { id: 'lightbox.close', defaultMessage: 'Close' }, +}); + +export default @connect(undefined) +@injectIntl +class FilterModal extends ImmutablePureComponent { + + static propTypes = { + statusId: PropTypes.string.isRequired, + contextType: PropTypes.string, + dispatch: PropTypes.func.isRequired, + intl: PropTypes.object.isRequired, + }; + + state = { + step: 'select', + filterId: null, + isSubmitting: false, + isSubmitted: false, + }; + + handleNewFilterSuccess = (result) => { + this.handleSelectFilter(result.id); + }; + + handleSuccess = () => { + const { dispatch, statusId } = this.props; + dispatch(fetchStatus(statusId, true)); + this.setState({ isSubmitting: false, isSubmitted: true, step: 'submitted' }); + }; + + handleFail = () => { + this.setState({ isSubmitting: false }); + }; + + handleNextStep = step => { + this.setState({ step }); + }; + + handleSelectFilter = (filterId) => { + const { dispatch, statusId } = this.props; + + this.setState({ isSubmitting: true, filterId }); + + dispatch(createFilterStatus({ + filter_id: filterId, + status_id: statusId, + }, this.handleSuccess, this.handleFail)); + }; + + handleNewFilter = (title) => { + const { dispatch } = this.props; + + this.setState({ isSubmitting: true }); + + dispatch(createFilter({ + title, + context: ['home', 'notifications', 'public', 'thread', 'account'], + action: 'warn', + }, this.handleNewFilterSuccess, this.handleFail)); + }; + + componentDidMount () { + const { dispatch } = this.props; + + dispatch(fetchFilters()); + } + + render () { + const { + intl, + statusId, + contextType, + onClose, + } = this.props; + + const { + step, + filterId, + } = this.state; + + let stepComponent; + + switch(step) { + case 'select': + stepComponent = ( + + ); + break; + case 'create': + stepComponent = null; + break; + case 'submitted': + stepComponent = ( + + ); + } + + return ( +
    +
    + + +
    + +
    + {stepComponent} +
    +
    + ); + } + +} diff --git a/app/javascript/mastodon/features/ui/components/modal_root.js b/app/javascript/mastodon/features/ui/components/modal_root.js index 3fc235849df..b2c30e07913 100644 --- a/app/javascript/mastodon/features/ui/components/modal_root.js +++ b/app/javascript/mastodon/features/ui/components/modal_root.js @@ -20,6 +20,7 @@ import { ListEditor, ListAdder, CompareHistoryModal, + FilterModal, } from 'mastodon/features/ui/util/async-components'; const MODAL_COMPONENTS = { @@ -37,6 +38,7 @@ const MODAL_COMPONENTS = { 'FOCAL_POINT': () => Promise.resolve({ default: FocalPointModal }), 'LIST_ADDER': ListAdder, 'COMPARE_HISTORY': CompareHistoryModal, + 'FILTER': FilterModal, }; export default class ModalRoot extends React.PureComponent { diff --git a/app/javascript/mastodon/features/ui/util/async-components.js b/app/javascript/mastodon/features/ui/util/async-components.js index 92c683e2f89..29b06206a15 100644 --- a/app/javascript/mastodon/features/ui/util/async-components.js +++ b/app/javascript/mastodon/features/ui/util/async-components.js @@ -161,3 +161,7 @@ export function CompareHistoryModal () { export function Explore () { return import(/* webpackChunkName: "features/explore" */'../../explore'); } + +export function FilterModal () { + return import(/*webpackChunkName: "modals/filter_modal" */'../components/filter_modal'); +} diff --git a/app/javascript/mastodon/reducers/filters.js b/app/javascript/mastodon/reducers/filters.js index 14b7040273e..cc1d3349c59 100644 --- a/app/javascript/mastodon/reducers/filters.js +++ b/app/javascript/mastodon/reducers/filters.js @@ -1,4 +1,5 @@ import { FILTERS_IMPORT } from '../actions/importer'; +import { FILTERS_FETCH_SUCCESS, FILTERS_CREATE_SUCCESS } from '../actions/filters'; import { Map as ImmutableMap, is, fromJS } from 'immutable'; const normalizeFilter = (state, filter) => { @@ -7,13 +8,17 @@ const normalizeFilter = (state, filter) => { title: filter.title, context: filter.context, filter_action: filter.filter_action, + keywords: filter.keywords, expires_at: filter.expires_at ? Date.parse(filter.expires_at) : null, }); if (is(state.get(filter.id), normalizedFilter)) { return state; } else { - return state.set(filter.id, normalizedFilter); + // Do not overwrite keywords when receiving a partial filter + return state.update(filter.id, ImmutableMap(), (old) => ( + old.mergeWith(((old_value, new_value) => (new_value === undefined ? old_value : new_value)), normalizedFilter) + )); } }; @@ -27,6 +32,10 @@ const normalizeFilters = (state, filters) => { export default function filters(state = ImmutableMap(), action) { switch(action.type) { + case FILTERS_CREATE_SUCCESS: + return normalizeFilter(state, action.filter); + case FILTERS_FETCH_SUCCESS: + //TODO: handle deleting obsolete filters case FILTERS_IMPORT: return normalizeFilters(state, action.filters); default: diff --git a/app/javascript/mastodon/selectors/index.js b/app/javascript/mastodon/selectors/index.js index 187e3306dd9..3dd7f489722 100644 --- a/app/javascript/mastodon/selectors/index.js +++ b/app/javascript/mastodon/selectors/index.js @@ -1,5 +1,6 @@ import { createSelector } from 'reselect'; import { List as ImmutableList, Map as ImmutableMap } from 'immutable'; +import { toServerSideType } from 'mastodon/utils/filters'; import { me } from '../initial_state'; const getAccountBase = (state, id) => state.getIn(['accounts', id], null); @@ -20,23 +21,6 @@ export const makeGetAccount = () => { }); }; -const toServerSideType = columnType => { - switch (columnType) { - case 'home': - case 'notifications': - case 'public': - case 'thread': - case 'account': - return columnType; - default: - if (columnType.indexOf('list:') > -1) { - return 'home'; - } else { - return 'public'; // community, account, hashtag - } - } -}; - const getFilters = (state, { contextType }) => { if (!contextType) return null; @@ -73,6 +57,7 @@ export const makeGetStatus = () => { if (filterResults.some((result) => filters.getIn([result.get('filter'), 'filter_action']) === 'hide')) { return null; } + filterResults = filterResults.filter(result => filters.has(result.get('filter'))); if (!filterResults.isEmpty()) { filtered = filterResults.map(result => filters.getIn([result.get('filter'), 'title'])); } diff --git a/app/javascript/mastodon/utils/filters.js b/app/javascript/mastodon/utils/filters.js new file mode 100644 index 00000000000..97b433a991f --- /dev/null +++ b/app/javascript/mastodon/utils/filters.js @@ -0,0 +1,16 @@ +export const toServerSideType = columnType => { + switch (columnType) { + case 'home': + case 'notifications': + case 'public': + case 'thread': + case 'account': + return columnType; + default: + if (columnType.indexOf('list:') > -1) { + return 'home'; + } else { + return 'public'; // community, account, hashtag + } + } +}; diff --git a/app/javascript/mastodon/utils/icons.js b/app/javascript/mastodon/utils/icons.js new file mode 100644 index 00000000000..be566032e06 --- /dev/null +++ b/app/javascript/mastodon/utils/icons.js @@ -0,0 +1,13 @@ +// Copied from emoji-mart for consistency with emoji picker and since +// they don't export the icons in the package +export const loupeIcon = ( + + + +); + +export const deleteIcon = ( + + + +); diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index a0a39812b0f..f5377a85896 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -5233,6 +5233,16 @@ a.status-card.compact:hover { line-height: 22px; color: lighten($inverted-text-color, 16%); margin-bottom: 30px; + + a { + text-decoration: none; + color: $inverted-text-color; + font-weight: 500; + + &:hover { + text-decoration: underline; + } + } } &__actions { @@ -5379,6 +5389,14 @@ a.status-card.compact:hover { background: transparent; margin: 15px 0; } + + .emoji-mart-search { + padding-right: 10px; + } + + .emoji-mart-search-icon { + right: 10px + 5px; + } } .report-modal__container { diff --git a/app/models/concerns/account_interactions.rb b/app/models/concerns/account_interactions.rb index a7401362f40..9b358d338e3 100644 --- a/app/models/concerns/account_interactions.rb +++ b/app/models/concerns/account_interactions.rb @@ -249,15 +249,7 @@ module AccountInteractions def status_matches_filters(status) active_filters = CustomFilter.cached_filters_for(id) - - filter_matches = active_filters.filter_map do |filter, rules| - next if rules[:keywords].blank? - - match = rules[:keywords].match(status.proper.searchable_text) - FilterResultPresenter.new(filter: filter, keyword_matches: [match.to_s]) unless match.nil? - end - - filter_matches + CustomFilter.apply_cached_filters(active_filters, status) end def followers_for_local_distribution diff --git a/app/models/custom_filter.rb b/app/models/custom_filter.rb index 985eab1254c..da2a914934c 100644 --- a/app/models/custom_filter.rb +++ b/app/models/custom_filter.rb @@ -34,6 +34,7 @@ class CustomFilter < ApplicationRecord belongs_to :account has_many :keywords, class_name: 'CustomFilterKeyword', foreign_key: :custom_filter_id, inverse_of: :custom_filter, dependent: :destroy + has_many :statuses, class_name: 'CustomFilterStatus', foreign_key: :custom_filter_id, inverse_of: :custom_filter, dependent: :destroy accepts_nested_attributes_for :keywords, reject_if: :all_blank, allow_destroy: true validates :title, :context, presence: true @@ -62,8 +63,10 @@ class CustomFilter < ApplicationRecord def self.cached_filters_for(account_id) active_filters = Rails.cache.fetch("filters:v3:#{account_id}") do + filters_hash = {} + scope = CustomFilterKeyword.includes(:custom_filter).where(custom_filter: { account_id: account_id }).where(Arel.sql('expires_at IS NULL OR expires_at > NOW()')) - scope.to_a.group_by(&:custom_filter).map do |filter, keywords| + scope.to_a.group_by(&:custom_filter).each do |filter, keywords| keywords.map! do |keyword| if keyword.whole_word sb = /\A[[:word:]]/.match?(keyword.keyword) ? '\b' : '' @@ -74,13 +77,34 @@ class CustomFilter < ApplicationRecord /#{Regexp.escape(keyword.keyword)}/i end end - [filter, { keywords: Regexp.union(keywords) }] + + filters_hash[filter.id] = { keywords: Regexp.union(keywords), filter: filter } + end.to_h + + scope = CustomFilterStatus.includes(:custom_filter).where(custom_filter: { account_id: account_id }).where(Arel.sql('expires_at IS NULL OR expires_at > NOW()')) + scope.to_a.group_by(&:custom_filter).each do |filter, statuses| + filters_hash[filter.id] ||= { filter: filter } + filters_hash[filter.id].merge!(status_ids: statuses.map(&:status_id)) end + + filters_hash.values.map { |cache| [cache.delete(:filter), cache] } end.to_a active_filters.select { |custom_filter, _| !custom_filter.expired? } end + def self.apply_cached_filters(cached_filters, status) + cached_filters.filter_map do |filter, rules| + match = rules[:keywords].match(status.proper.searchable_text) if rules[:keywords].present? + keyword_matches = [match.to_s] unless match.nil? + + status_matches = [status.id, status.reblog_of_id].compact & rules[:status_ids] if rules[:status_ids].present? + + next if keyword_matches.blank? && status_matches.blank? + FilterResultPresenter.new(filter: filter, keyword_matches: keyword_matches, status_matches: status_matches) + end + end + def prepare_cache_invalidation! @should_invalidate_cache = true end diff --git a/app/models/custom_filter_status.rb b/app/models/custom_filter_status.rb new file mode 100644 index 00000000000..b6bea139431 --- /dev/null +++ b/app/models/custom_filter_status.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true +# == Schema Information +# +# Table name: custom_filter_statuses +# +# id :bigint(8) not null, primary key +# custom_filter_id :bigint(8) not null +# status_id :bigint(8) default(""), not null +# created_at :datetime not null +# updated_at :datetime not null +# + +class CustomFilterStatus < ApplicationRecord + belongs_to :custom_filter + belongs_to :status + + validates :status, uniqueness: { scope: :custom_filter } + validate :validate_status_access + + before_save :prepare_cache_invalidation! + before_destroy :prepare_cache_invalidation! + after_commit :invalidate_cache! + + private + + def validate_status_access + errors.add(:status_id, :invalid) unless StatusPolicy.new(custom_filter.account, status).show? + end + + def prepare_cache_invalidation! + custom_filter.prepare_cache_invalidation! + end + + def invalidate_cache! + custom_filter.invalidate_cache! + end +end diff --git a/app/models/form/status_filter_batch_action.rb b/app/models/form/status_filter_batch_action.rb new file mode 100644 index 00000000000..d87bd5cc4d8 --- /dev/null +++ b/app/models/form/status_filter_batch_action.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +class Form::StatusFilterBatchAction + include ActiveModel::Model + include AccountableConcern + include Authorization + + attr_accessor :current_account, :type, + :status_filter_ids, :filter_id + + def save! + process_action! + end + + private + + def status_filters + filter = current_account.custom_filters.find(filter_id) + filter.statuses.where(id: status_filter_ids) + end + + def process_action! + return if status_filter_ids.empty? + + case type + when 'remove' + handle_remove! + end + end + + def handle_remove! + status_filters.destroy_all + end +end diff --git a/app/presenters/filter_result_presenter.rb b/app/presenters/filter_result_presenter.rb index 677225f5ec2..1e9e8f3c19a 100644 --- a/app/presenters/filter_result_presenter.rb +++ b/app/presenters/filter_result_presenter.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true class FilterResultPresenter < ActiveModelSerializers::Model - attributes :filter, :keyword_matches + attributes :filter, :keyword_matches, :status_matches end diff --git a/app/presenters/status_relationships_presenter.rb b/app/presenters/status_relationships_presenter.rb index d7ffb1954af..be818a2de79 100644 --- a/app/presenters/status_relationships_presenter.rb +++ b/app/presenters/status_relationships_presenter.rb @@ -33,12 +33,7 @@ class StatusRelationshipsPresenter active_filters = CustomFilter.cached_filters_for(current_account_id) @filters_map = statuses.each_with_object({}) do |status, h| - filter_matches = active_filters.filter_map do |filter, rules| - next if rules[:keywords].blank? - - match = rules[:keywords].match(status.proper.searchable_text) - FilterResultPresenter.new(filter: filter, keyword_matches: [match.to_s]) unless match.nil? - end + filter_matches = CustomFilter.apply_cached_filters(active_filters, status) unless filter_matches.empty? h[status.id] = filter_matches diff --git a/app/serializers/rest/filter_result_serializer.rb b/app/serializers/rest/filter_result_serializer.rb index 0ef4db79a87..54ead2f1f14 100644 --- a/app/serializers/rest/filter_result_serializer.rb +++ b/app/serializers/rest/filter_result_serializer.rb @@ -3,4 +3,9 @@ class REST::FilterResultSerializer < ActiveModel::Serializer belongs_to :filter, serializer: REST::FilterSerializer has_many :keyword_matches + has_many :status_matches + + def status_matches + object.status_matches&.map(&:to_s) + end end diff --git a/app/serializers/rest/filter_serializer.rb b/app/serializers/rest/filter_serializer.rb index 98d7edb175a..8816dd8076b 100644 --- a/app/serializers/rest/filter_serializer.rb +++ b/app/serializers/rest/filter_serializer.rb @@ -3,6 +3,7 @@ class REST::FilterSerializer < ActiveModel::Serializer attributes :id, :title, :context, :expires_at, :filter_action has_many :keywords, serializer: REST::FilterKeywordSerializer, if: :rules_requested? + has_many :statuses, serializer: REST::FilterStatusSerializer, if: :rules_requested? def id object.id.to_s diff --git a/app/serializers/rest/filter_status_serializer.rb b/app/serializers/rest/filter_status_serializer.rb new file mode 100644 index 00000000000..6bcbaa249c6 --- /dev/null +++ b/app/serializers/rest/filter_status_serializer.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class REST::FilterStatusSerializer < ActiveModel::Serializer + attributes :id, :status_id + + def id + object.id.to_s + end + + def status_id + object.status_id.to_s + end +end diff --git a/app/views/filters/_filter.html.haml b/app/views/filters/_filter.html.haml index 2ab014081c8..9993ad2ee8e 100644 --- a/app/views/filters/_filter.html.haml +++ b/app/views/filters/_filter.html.haml @@ -22,6 +22,15 @@ - keywords = filter.keywords.map(&:keyword) - keywords = keywords.take(5) + ['…'] if keywords.size > 5 # TODO = keywords.join(', ') + - unless filter.statuses.empty? + %li.permissions-list__item + .permissions-list__item__icon + = fa_icon('comment') + .permissions-list__item__text + .permissions-list__item__text__title + = t('filters.index.statuses', count: filter.statuses.size) + .permissions-list__item__text__type + = t('filters.index.statuses_long', count: filter.statuses.size) .announcements-list__item__action-bar .announcements-list__item__meta diff --git a/app/views/filters/_filter_fields.html.haml b/app/views/filters/_filter_fields.html.haml index 1a52faa7af5..c58978f5a35 100644 --- a/app/views/filters/_filter_fields.html.haml +++ b/app/views/filters/_filter_fields.html.haml @@ -14,6 +14,13 @@ %hr.spacer/ +- unless f.object.statuses.empty? + %h4= t('filters.edit.statuses') + + %p.muted-hint= t('filters.edit.statuses_hint_html', path: filter_statuses_path(f.object)) + + %hr.spacer/ + %h4= t('filters.edit.keywords') .table-wrapper diff --git a/app/views/filters/statuses/_status_filter.html.haml b/app/views/filters/statuses/_status_filter.html.haml new file mode 100644 index 00000000000..ba1170cf92a --- /dev/null +++ b/app/views/filters/statuses/_status_filter.html.haml @@ -0,0 +1,37 @@ +- status = status_filter.status.proper + +.batch-table__row + %label.batch-table__row__select.batch-checkbox + = f.check_box :status_filter_ids, { multiple: true, include_hidden: false }, status_filter.id + .batch-table__row__content + .status__content>< + - if status.spoiler_text.blank? + = prerender_custom_emojis(status_content_format(status), status.emojis) + - else + %details< + %summary>< + %strong> Content warning: #{prerender_custom_emojis(h(status.spoiler_text), status.emojis)} + = prerender_custom_emojis(status_content_format(status), status.emojis) + + - status.ordered_media_attachments.each do |media_attachment| + %abbr{ title: media_attachment.description } + = fa_icon 'link' + = media_attachment.file_file_name + + .detailed-status__meta + = link_to ActivityPub::TagManager.instance.url_for(status.account), class: 'name-tag', target: '_blank', rel: 'noopener noreferrer' do + = image_tag(status.account.avatar.url, width: 15, height: 15, alt: display_name(status.account), class: 'avatar') + .username= status.account.acct + · + = link_to ActivityPub::TagManager.instance.url_for(status), class: 'detailed-status__datetime', target: stream_link_target, rel: 'noopener noreferrer' do + %time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at) + - if status.edited? + · + = t('statuses.edited_at_html', date: content_tag(:time, l(status.edited_at), datetime: status.edited_at.iso8601, title: l(status.edited_at), class: 'formatted')) + · + = fa_visibility_icon(status) + = t("statuses.visibilities.#{status.visibility}") + - if status.sensitive? + · + = fa_icon('eye-slash fw') + = t('stream_entries.sensitive_content') diff --git a/app/views/filters/statuses/index.html.haml b/app/views/filters/statuses/index.html.haml new file mode 100644 index 00000000000..886de58fa06 --- /dev/null +++ b/app/views/filters/statuses/index.html.haml @@ -0,0 +1,38 @@ +- content_for :header_tags do + = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' + +- content_for :page_title do + = t('filters.statuses.index.title') + \- + = @filter.title + +.filters + .back-link + = link_to edit_filter_path(@filter) do + = fa_icon 'chevron-left fw' + = t('filters.statuses.back_to_filter') + +%p.hint= t('filters.statuses.index.hint') + +%hr.spacer/ + += form_for(@status_filter_batch_action, url: batch_filter_statuses_path(@filter.id)) do |f| + = hidden_field_tag :page, params[:page] || 1 + + - Admin::StatusFilter::KEYS.each do |key| + = hidden_field_tag key, params[key] if params[key].present? + + .batch-table + .batch-table__toolbar + %label.batch-table__toolbar__select.batch-checkbox-all + = check_box_tag :batch_checkbox_all, nil, false + .batch-table__toolbar__actions + - unless @status_filters.empty? + = f.button safe_join([fa_icon('times'), t('filters.statuses.batch.remove')]), name: :remove, class: 'table-action-link', type: :submit + .batch-table__body + - if @status_filters.empty? + = nothing_here 'nothing-here--under-tabs' + - else + = render partial: 'status_filter', collection: @status_filters, locals: { f: f } + += paginate @status_filters diff --git a/config/locales/en.yml b/config/locales/en.yml index 2cd4f45ac2f..596cc1a284c 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1181,6 +1181,8 @@ en: edit: add_keyword: Add keyword keywords: Keywords + statuses: Individual posts + statuses_hint_html: This filter applies to select individual posts regardless of whether they match the keywords below. You can review these posts and remove them from the filter by clicking here. title: Edit filter errors: deprecated_api_multiple_keywords: These parameters cannot be changed from this application because they apply to more than one filter keyword. Use a more recent application or the web interface. @@ -1194,10 +1196,23 @@ en: keywords: one: "%{count} keyword" other: "%{count} keywords" + statuses: + one: "%{count} post" + other: "%{count} posts" + statuses_long: + one: "%{count} individual post hidden" + other: "%{count} individual posts hidden" title: Filters new: save: Save new filter title: Add new filter + statuses: + back_to_filter: Back to filter + batch: + remove: Remove from filter + index: + hint: This filter applies to select individual posts regardless of other criteria. You can add more posts to this filter from the Web interface. + title: Filtered posts footer: developers: Developers more: More… diff --git a/config/routes.rb b/config/routes.rb index 7dc9f391db2..dff0add3ae0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -177,7 +177,14 @@ Rails.application.routes.draw do resources :tags, only: [:show] resources :emojis, only: [:show] resources :invites, only: [:index, :create, :destroy] - resources :filters, except: [:show] + resources :filters, except: [:show] do + resources :statuses, only: [:index], controller: 'filters/statuses' do + collection do + post :batch + end + end + end + resource :relationships, only: [:show, :update] resource :statuses_cleanup, controller: :statuses_cleanup, only: [:show, :update] @@ -448,12 +455,14 @@ Rails.application.routes.draw do resources :trends, only: [:index], controller: 'trends/tags' resources :filters, only: [:index, :create, :show, :update, :destroy] do resources :keywords, only: [:index, :create], controller: 'filters/keywords' + resources :statuses, only: [:index, :create], controller: 'filters/statuses' end resources :endorsements, only: [:index] resources :markers, only: [:index, :create] namespace :filters do resources :keywords, only: [:show, :update, :destroy] + resources :statuses, only: [:show, :destroy] end namespace :apps do diff --git a/db/migrate/20220808101323_create_custom_filter_statuses.rb b/db/migrate/20220808101323_create_custom_filter_statuses.rb new file mode 100644 index 00000000000..52f70374913 --- /dev/null +++ b/db/migrate/20220808101323_create_custom_filter_statuses.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +class CreateCustomFilterStatuses < ActiveRecord::Migration[6.1] + def change + create_table :custom_filter_statuses do |t| + t.belongs_to :custom_filter, foreign_key: { on_delete: :cascade }, null: false + t.belongs_to :status, foreign_key: { on_delete: :cascade }, null: false + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 2263dc7d7cd..15ab2e85e78 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2022_07_14_171049) do +ActiveRecord::Schema.define(version: 2022_08_08_101323) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -348,6 +348,15 @@ ActiveRecord::Schema.define(version: 2022_07_14_171049) do t.index ["custom_filter_id"], name: "index_custom_filter_keywords_on_custom_filter_id" end + create_table "custom_filter_statuses", force: :cascade do |t| + t.bigint "custom_filter_id", null: false + t.bigint "status_id", null: false + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["custom_filter_id"], name: "index_custom_filter_statuses_on_custom_filter_id" + t.index ["status_id"], name: "index_custom_filter_statuses_on_status_id" + end + create_table "custom_filters", force: :cascade do |t| t.bigint "account_id" t.datetime "expires_at" @@ -1113,6 +1122,8 @@ ActiveRecord::Schema.define(version: 2022_07_14_171049) do add_foreign_key "conversation_mutes", "accounts", name: "fk_225b4212bb", on_delete: :cascade add_foreign_key "conversation_mutes", "conversations", on_delete: :cascade add_foreign_key "custom_filter_keywords", "custom_filters", on_delete: :cascade + add_foreign_key "custom_filter_statuses", "custom_filters", on_delete: :cascade + add_foreign_key "custom_filter_statuses", "statuses", on_delete: :cascade add_foreign_key "custom_filters", "accounts", on_delete: :cascade add_foreign_key "devices", "accounts", on_delete: :cascade add_foreign_key "devices", "oauth_access_tokens", column: "access_token_id", on_delete: :cascade diff --git a/spec/controllers/api/v1/filters/statuses_controller_spec.rb b/spec/controllers/api/v1/filters/statuses_controller_spec.rb new file mode 100644 index 00000000000..3b2399dd898 --- /dev/null +++ b/spec/controllers/api/v1/filters/statuses_controller_spec.rb @@ -0,0 +1,116 @@ +require 'rails_helper' + +RSpec.describe Api::V1::Filters::StatusesController, type: :controller do + render_views + + let(:user) { Fabricate(:user) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:filter) { Fabricate(:custom_filter, account: user.account) } + let(:other_user) { Fabricate(:user) } + let(:other_filter) { Fabricate(:custom_filter, account: other_user.account) } + + before do + allow(controller).to receive(:doorkeeper_token) { token } + end + + describe 'GET #index' do + let(:scopes) { 'read:filters' } + let!(:status_filter) { Fabricate(:custom_filter_status, custom_filter: filter) } + + it 'returns http success' do + get :index, params: { filter_id: filter.id } + expect(response).to have_http_status(200) + end + + context "when trying to access another's user filters" do + it 'returns http not found' do + get :index, params: { filter_id: other_filter.id } + expect(response).to have_http_status(404) + end + end + end + + describe 'POST #create' do + let(:scopes) { 'write:filters' } + let(:filter_id) { filter.id } + let!(:status) { Fabricate(:status) } + + before do + post :create, params: { filter_id: filter_id, status_id: status.id } + end + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'returns a status filter' do + json = body_as_json + expect(json[:status_id]).to eq status.id.to_s + end + + it 'creates a status filter' do + filter = user.account.custom_filters.first + expect(filter).to_not be_nil + expect(filter.statuses.pluck(:status_id)).to eq [status.id] + end + + context "when trying to add to another another's user filters" do + let(:filter_id) { other_filter.id } + + it 'returns http not found' do + expect(response).to have_http_status(404) + end + end + end + + describe 'GET #show' do + let(:scopes) { 'read:filters' } + let!(:status_filter) { Fabricate(:custom_filter_status, custom_filter: filter) } + + before do + get :show, params: { id: status_filter.id } + end + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'returns expected data' do + json = body_as_json + expect(json[:status_id]).to eq status_filter.status_id.to_s + end + + context "when trying to access another user's filter keyword" do + let(:status_filter) { Fabricate(:custom_filter_status, custom_filter: other_filter) } + + it 'returns http not found' do + expect(response).to have_http_status(404) + end + end + end + + describe 'DELETE #destroy' do + let(:scopes) { 'write:filters' } + let(:status_filter) { Fabricate(:custom_filter_status, custom_filter: filter) } + + before do + delete :destroy, params: { id: status_filter.id } + end + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'removes the filter' do + expect { status_filter.reload }.to raise_error ActiveRecord::RecordNotFound + end + + context "when trying to update another user's filter keyword" do + let(:status_filter) { Fabricate(:custom_filter_status, custom_filter: other_filter) } + + it 'returns http not found' do + expect(response).to have_http_status(404) + end + end + end +end diff --git a/spec/controllers/api/v1/statuses_controller_spec.rb b/spec/controllers/api/v1/statuses_controller_spec.rb index 4d104a198db..24810a5d27c 100644 --- a/spec/controllers/api/v1/statuses_controller_spec.rb +++ b/spec/controllers/api/v1/statuses_controller_spec.rb @@ -47,6 +47,33 @@ RSpec.describe Api::V1::StatusesController, type: :controller do end end + context 'when post is explicitly filtered' do + let(:status) { Fabricate(:status, text: 'hello world') } + + before do + filter = user.account.custom_filters.create!(phrase: 'filter1', context: %w(home), action: :hide) + filter.statuses.create!(status_id: status.id) + end + + it 'returns http success' do + get :show, params: { id: status.id } + expect(response).to have_http_status(200) + end + + it 'returns filter information' do + get :show, params: { id: status.id } + json = body_as_json + expect(json[:filtered][0]).to include({ + filter: a_hash_including({ + id: user.account.custom_filters.first.id.to_s, + title: 'filter1', + filter_action: 'hide', + }), + status_matches: [status.id.to_s], + }) + end + end + context 'when reblog includes filtered terms' do let(:status) { Fabricate(:status, reblog: Fabricate(:status, text: 'this toot is about that banned word')) } diff --git a/spec/fabricators/custom_filter_status_fabricator.rb b/spec/fabricators/custom_filter_status_fabricator.rb new file mode 100644 index 00000000000..d082b81c5ee --- /dev/null +++ b/spec/fabricators/custom_filter_status_fabricator.rb @@ -0,0 +1,4 @@ +Fabricator(:custom_filter_status) do + custom_filter + status +end diff --git a/spec/presenters/status_relationships_presenter_spec.rb b/spec/presenters/status_relationships_presenter_spec.rb index 5cd4929a63c..eaab922fd97 100644 --- a/spec/presenters/status_relationships_presenter_spec.rb +++ b/spec/presenters/status_relationships_presenter_spec.rb @@ -94,5 +94,32 @@ RSpec.describe StatusRelationshipsPresenter do expect(matched_filters[0].keyword_matches).to eq ['irrelevant'] end end + + context 'when post includes filtered individual statuses' do + let(:statuses) { [Fabricate(:status, text: 'hello world'), Fabricate(:status, reblog: Fabricate(:status, text: 'this toot is about an irrelevant word'))] } + let(:options) { {} } + + before do + filter = Account.find(current_account_id).custom_filters.create!(phrase: 'filter1', context: %w(home), action: :hide) + filter.statuses.create!(status_id: statuses[0].id) + filter.statuses.create!(status_id: statuses[1].reblog_of_id) + end + + it 'sets @filters_map to filter top-level status' do + matched_filters = presenter.filters_map[statuses[0].id] + expect(matched_filters.size).to eq 1 + + expect(matched_filters[0].filter.title).to eq 'filter1' + expect(matched_filters[0].status_matches).to eq [statuses[0].id] + end + + it 'sets @filters_map to filter reblogged status' do + matched_filters = presenter.filters_map[statuses[1].reblog_of_id] + expect(matched_filters.size).to eq 1 + + expect(matched_filters[0].filter.title).to eq 'filter1' + expect(matched_filters[0].status_matches).to eq [statuses[1].reblog_of_id] + end + end end end From afb8bc97d08c2738da7873ca42fea68e4672d65b Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 25 Aug 2022 04:29:00 +0200 Subject: [PATCH 206/646] Fix quickly switching notification filters resulting in empty or incorrect list (#18960) --- app/javascript/mastodon/actions/notifications.js | 6 +++--- app/javascript/mastodon/reducers/notifications.js | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index 3c42f71da32..7f62e6c0420 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -141,13 +141,13 @@ const excludeTypesFromFilter = filter => { const noOp = () => {}; -export function expandNotifications({ maxId } = {}, done = noOp) { +export function expandNotifications({ maxId, forceLoad } = {}, done = noOp) { return (dispatch, getState) => { const activeFilter = getState().getIn(['settings', 'notifications', 'quickFilter', 'active']); const notifications = getState().get('notifications'); const isLoadingMore = !!maxId; - if (notifications.get('isLoading')) { + if (notifications.get('isLoading') && !forceLoad) { done(); return; } @@ -243,7 +243,7 @@ export function setFilter (filterType) { path: ['notifications', 'quickFilter', 'active'], value: filterType, }); - dispatch(expandNotifications()); + dispatch(expandNotifications({ forceLoad: true })); dispatch(saveSettings()); }; }; diff --git a/app/javascript/mastodon/reducers/notifications.js b/app/javascript/mastodon/reducers/notifications.js index 4563118eaa3..eb34edb6331 100644 --- a/app/javascript/mastodon/reducers/notifications.js +++ b/app/javascript/mastodon/reducers/notifications.js @@ -41,7 +41,7 @@ const initialState = ImmutableMap({ lastReadId: '0', readMarkerId: '0', isTabVisible: true, - isLoading: false, + isLoading: 0, browserSupport: false, browserPermission: 'default', }); @@ -115,7 +115,7 @@ const expandNormalizedNotifications = (state, notifications, next, isLoadingRece } } - mutable.set('isLoading', false); + mutable.update('isLoading', (nbLoading) => nbLoading - 1); }); }; @@ -214,9 +214,9 @@ export default function notifications(state = initialState, action) { case NOTIFICATIONS_LOAD_PENDING: return state.update('items', list => state.get('pendingItems').concat(list.take(40))).set('pendingItems', ImmutableList()).set('unread', 0); case NOTIFICATIONS_EXPAND_REQUEST: - return state.set('isLoading', true); + return state.update('isLoading', (nbLoading) => nbLoading + 1); case NOTIFICATIONS_EXPAND_FAIL: - return state.set('isLoading', false); + return state.update('isLoading', (nbLoading) => nbLoading - 1); case NOTIFICATIONS_FILTER_SET: return state.set('items', ImmutableList()).set('pendingItems', ImmutableList()).set('hasMore', true); case NOTIFICATIONS_SCROLL_TOP: From 19f2f35b33e4dacc43df2335ae89ec6af8bb8cb0 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 25 Aug 2022 04:29:20 +0200 Subject: [PATCH 207/646] Fix filtering on context mismatch (#18956) From ba745ca99a4ce4b953e11776827aabb68d621e79 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 25 Aug 2022 04:30:53 +0200 Subject: [PATCH 208/646] Fix media modal link button (#18877) Fixes regression from #18697 --- app/javascript/mastodon/components/icon_button.js | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/app/javascript/mastodon/components/icon_button.js b/app/javascript/mastodon/components/icon_button.js index 81743a1dbe1..47945c475f3 100644 --- a/app/javascript/mastodon/components/icon_button.js +++ b/app/javascript/mastodon/components/icon_button.js @@ -131,17 +131,9 @@ export default class IconButton extends React.PureComponent { ); - if (href) { - return ( - + if (href && !this.prop) { + contents = ( + {contents} ); From 03241d884eb93c59695b4bad98c1725bdc544824 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 25 Aug 2022 04:31:10 +0200 Subject: [PATCH 209/646] Add option for EMAIL_DOMAIN_DENYLIST/EMAIL_DOMAIN_ALLOWLIST to apply after confirmation (#18642) Fixes #18620 --- app/models/user.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/user.rb b/app/models/user.rb index 60abaf77e69..9833300cd0a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -94,7 +94,7 @@ class User < ApplicationRecord validates :invite_request, presence: true, on: :create, if: :invite_text_required? validates :locale, inclusion: I18n.available_locales.map(&:to_s), if: :locale? - validates_with BlacklistedEmailValidator, if: -> { !confirmed? } + validates_with BlacklistedEmailValidator, if: -> { ENV['EMAIL_DOMAIN_LISTS_APPLY_AFTER_CONFIRMATION'] == 'true' || !confirmed? } validates_with EmailMxValidator, if: :validate_email_dns? validates :agreement, acceptance: { allow_nil: false, accept: [true, 'true', '1'] }, on: :create From 8479a4b0c1079fc354164842c439f2f87e9eab92 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 25 Aug 2022 04:32:45 +0200 Subject: [PATCH 210/646] Fix tests with regards to upcoming immutable PKeys in OpenSSL 3 (#18464) From af9c9936dd8c87746c9afa128483a93ad21a8b7e Mon Sep 17 00:00:00 2001 From: Arya K <73596856+gi-yt@users.noreply.github.com> Date: Thu, 25 Aug 2022 08:07:09 +0530 Subject: [PATCH 211/646] Fix I2P HTTPS redirect (#18929) --- config/environments/production.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/environments/production.rb b/config/environments/production.rb index 514c08cff5b..f41a0f19716 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -47,7 +47,7 @@ Rails.application.configure do config.force_ssl = true config.ssl_options = { redirect: { - exclude: -> request { request.path.start_with?('/health') || request.headers["Host"].end_with?('.onion') } + exclude: -> request { request.path.start_with?('/health') || request.headers["Host"].end_with?('.onion') || request.headers["Host"].end_with?('.i2p') } } } From 66b8abf218a87e65fab8a7fae6fc6ea73c41d750 Mon Sep 17 00:00:00 2001 From: Takeshi Umeda Date: Thu, 25 Aug 2022 11:37:40 +0900 Subject: [PATCH 212/646] Fix case where boolean was passed to onFilter on StatusActionBar (#18923) --- app/javascript/mastodon/components/status.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js index d36311c6772..6fc132bf504 100644 --- a/app/javascript/mastodon/components/status.js +++ b/app/javascript/mastodon/components/status.js @@ -516,7 +516,7 @@ class Status extends ImmutablePureComponent { {media} - +
    From 5d70a16a1417e53b0c6cc97def9688fda21f337c Mon Sep 17 00:00:00 2001 From: Takeshi Umeda Date: Thu, 25 Aug 2022 11:38:01 +0900 Subject: [PATCH 213/646] Fix action type for unfollowHashtag (#18924) --- app/javascript/mastodon/actions/tags.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/actions/tags.js b/app/javascript/mastodon/actions/tags.js index 216e5b54133..37e79d4cbab 100644 --- a/app/javascript/mastodon/actions/tags.js +++ b/app/javascript/mastodon/actions/tags.js @@ -75,18 +75,18 @@ export const unfollowHashtag = name => (dispatch, getState) => { }; export const unfollowHashtagRequest = name => ({ - type: HASHTAG_FETCH_REQUEST, + type: HASHTAG_UNFOLLOW_REQUEST, name, }); export const unfollowHashtagSuccess = (name, tag) => ({ - type: HASHTAG_FETCH_SUCCESS, + type: HASHTAG_UNFOLLOW_SUCCESS, name, tag, }); export const unfollowHashtagFail = (name, error) => ({ - type: HASHTAG_FETCH_FAIL, + type: HASHTAG_UNFOLLOW_FAIL, name, error, }); From 42ff4dce412752a05c2e3b990c93b08cb46ffd88 Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Thu, 25 Aug 2022 11:38:34 +0900 Subject: [PATCH 214/646] Use type="color" on badge color input field (#18825) This informs browser to use interactive color picker --- app/views/admin/roles/_form.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/roles/_form.html.haml b/app/views/admin/roles/_form.html.haml index 9beaf619fa5..31f78f2405d 100644 --- a/app/views/admin/roles/_form.html.haml +++ b/app/views/admin/roles/_form.html.haml @@ -13,7 +13,7 @@ = f.input :position, wrapper: :with_label, input_html: { max: current_user.role.position - 1 } .fields-group - = f.input :color, wrapper: :with_label, input_html: { placeholder: '#000000' } + = f.input :color, wrapper: :with_label, input_html: { placeholder: '#000000', type: 'color' } %hr.spacer/ From 63a5514b29d44520058260cfb64c9fbf256e366a Mon Sep 17 00:00:00 2001 From: Alex Nordlund Date: Thu, 25 Aug 2022 04:39:11 +0200 Subject: [PATCH 215/646] Allow S3 to use an existing secret (#18997) --- chart/templates/deployment-web.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/chart/templates/deployment-web.yaml b/chart/templates/deployment-web.yaml index 5e22ca53932..ab722c77b1c 100644 --- a/chart/templates/deployment-web.yaml +++ b/chart/templates/deployment-web.yaml @@ -70,6 +70,18 @@ spec: key: redis-password - name: "PORT" value: {{ .Values.mastodon.web.port | quote }} + {{- if (and .Values.mastodon.s3.enabled .Values.mastodon.s3.existingSecret) }} + - name: "AWS_SECRET_ACCESS_KEY" + valueFrom: + secretKeyRef: + name: {{ .Values.mastodon.s3.existingSecret }} + key: AWS_SECRET_ACCESS_KEY + - name: "AWS_ACCESS_KEY_ID" + valueFrom: + secretKeyRef: + name: {{ .Values.mastodon.s3.existingSecret }} + key: AWS_ACCESS_KEY_ID + {{- end -}} {{- if (not .Values.mastodon.s3.enabled) }} volumeMounts: - name: assets From e682975afd9d476eaf938dfe753debfc20d4e603 Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Thu, 25 Aug 2022 11:40:17 +0900 Subject: [PATCH 216/646] Add '--days' option to tootctl media refresh (#18425) * Add '--days' option to tootctl media refresh * Fix undefined scope --- lib/mastodon/media_cli.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/mastodon/media_cli.rb b/lib/mastodon/media_cli.rb index 36ca71844f0..4904cc5eb99 100644 --- a/lib/mastodon/media_cli.rb +++ b/lib/mastodon/media_cli.rb @@ -187,6 +187,7 @@ module Mastodon option :account, type: :string option :domain, type: :string option :status, type: :numeric + option :days, type: :numeric option :concurrency, type: :numeric, default: 5, aliases: [:c] option :verbose, type: :boolean, default: false, aliases: [:v] option :dry_run, type: :boolean, default: false @@ -204,6 +205,8 @@ module Mastodon Use the --domain option to download attachments from a specific domain. + Use the --days option to limit attachments created within days. + By default, attachments that are believed to be already downloaded will not be re-downloaded. To force re-download of every URL, use --force. DESC @@ -224,10 +227,16 @@ module Mastodon scope = MediaAttachment.where(account_id: account.id) elsif options[:domain] scope = MediaAttachment.joins(:account).merge(Account.by_domain_and_subdomains(options[:domain])) + elsif options[:days].present? + scope = MediaAttachment.remote else exit(1) end + if options[:days].present? + scope = scope.where('id > ?', Mastodon::Snowflake.id_at(options[:days].days.ago, with_random: false)) + end + processed, aggregate = parallelize_with_progress(scope) do |media_attachment| next if media_attachment.remote_url.blank? || (!options[:force] && media_attachment.file_file_name.present?) next if DomainBlock.reject_media?(media_attachment.account.domain) From 1165943968f8c79cfaccf30c392b14b4930d68e6 Mon Sep 17 00:00:00 2001 From: James Smith <119005+jgsmith@users.noreply.github.com> Date: Wed, 24 Aug 2022 22:40:38 -0400 Subject: [PATCH 217/646] Mark job pods not to use Istio's envoy sidecar (#18415) * Mark job pods not to use Istio's envoy sidecar Istio injects sidecars into pods to implement mTLS between pods. Jobs usually don't know about this, so they don't signal the Envoy process to stop when the job finishes. Since at least one process is running in the pod, Kubernetes doesn't consider the job to be completed, so it lingers. By adding the `sidecar.istio.io/inject` annotation set to `"false"`, we let Istio know that it should not inject the sidecar. If Istio is not installed, then this has no impact. * Support arbitrary job annotations in the Helm chart Rather than focus on Istio, this allows arbitrary annotations for job pods. * Add in-line documentation for pod/job annotations --- chart/templates/cronjob-media-remove.yaml | 4 ++++ chart/templates/job-assets-precompile.yaml | 4 ++++ chart/templates/job-chewy-upgrade.yaml | 4 ++++ chart/templates/job-create-admin.yaml | 4 ++++ chart/templates/job-db-migrate.yaml | 4 ++++ chart/values.yaml | 6 ++++++ 6 files changed, 26 insertions(+) diff --git a/chart/templates/cronjob-media-remove.yaml b/chart/templates/cronjob-media-remove.yaml index 726e100cf8d..160aee20421 100644 --- a/chart/templates/cronjob-media-remove.yaml +++ b/chart/templates/cronjob-media-remove.yaml @@ -12,6 +12,10 @@ spec: template: metadata: name: {{ include "mastodon.fullname" . }}-media-remove + {{- with .Values.jobAnnotations }} + annotations: + {{- toYaml . | nindent 12 }} + {{- end }} spec: restartPolicy: OnFailure {{- if (not .Values.mastodon.s3.enabled) }} diff --git a/chart/templates/job-assets-precompile.yaml b/chart/templates/job-assets-precompile.yaml index 4aa8d1407c4..faa51a20d9d 100644 --- a/chart/templates/job-assets-precompile.yaml +++ b/chart/templates/job-assets-precompile.yaml @@ -12,6 +12,10 @@ spec: template: metadata: name: {{ include "mastodon.fullname" . }}-assets-precompile + {{- with .Values.jobAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} spec: restartPolicy: Never {{- if (not .Values.mastodon.s3.enabled) }} diff --git a/chart/templates/job-chewy-upgrade.yaml b/chart/templates/job-chewy-upgrade.yaml index 16b4f75a7db..ae6fb38e129 100644 --- a/chart/templates/job-chewy-upgrade.yaml +++ b/chart/templates/job-chewy-upgrade.yaml @@ -13,6 +13,10 @@ spec: template: metadata: name: {{ include "mastodon.fullname" . }}-chewy-upgrade + {{- with .Values.jobAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} spec: restartPolicy: Never {{- if (not .Values.mastodon.s3.enabled) }} diff --git a/chart/templates/job-create-admin.yaml b/chart/templates/job-create-admin.yaml index 486c0c35726..659c00671fc 100644 --- a/chart/templates/job-create-admin.yaml +++ b/chart/templates/job-create-admin.yaml @@ -13,6 +13,10 @@ spec: template: metadata: name: {{ include "mastodon.fullname" . }}-create-admin + {{- with .Values.jobAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} spec: restartPolicy: Never {{- if (not .Values.mastodon.s3.enabled) }} diff --git a/chart/templates/job-db-migrate.yaml b/chart/templates/job-db-migrate.yaml index 41ece64a2a1..8e4f70dfb1d 100644 --- a/chart/templates/job-db-migrate.yaml +++ b/chart/templates/job-db-migrate.yaml @@ -12,6 +12,10 @@ spec: template: metadata: name: {{ include "mastodon.fullname" . }}-db-migrate + {{- with .Values.jobAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} spec: restartPolicy: Never {{- if (not .Values.mastodon.s3.enabled) }} diff --git a/chart/values.yaml b/chart/values.yaml index bd723567f0f..4b18a9dfa5e 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -281,8 +281,14 @@ serviceAccount: # If not set and create is true, a name is generated using the fullname template name: "" +# Kubernetes manages pods for jobs and pods for deployments differently, so you might +# need to apply different annotations to the two different sets of pods. The annotations +# set with podAnnotations will be added to all deployment-managed pods. podAnnotations: {} +# The annotations set with jobAnnotations will be added to all job pods. +jobAnnotations: {} + resources: {} # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little From 861b35dd54d266bc0a40b3cacb28e5b82ff6faaa Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Thu, 25 Aug 2022 11:41:14 +0900 Subject: [PATCH 218/646] Support "http_hidden_proxy" ENV var for hidden service only proxy (#18427) * Support "http_hidden_proxy" ENV var for hidden service only proxy * Fallback to http_proxy if http_hidden_proxy is not set --- app/lib/request.rb | 18 +++++++++++++++--- config/initializers/http_client_proxy.rb | 17 +++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/app/lib/request.rb b/app/lib/request.rb index 4289da9333d..f5123d776ab 100644 --- a/app/lib/request.rb +++ b/app/lib/request.rb @@ -31,7 +31,7 @@ class Request @url = Addressable::URI.parse(url).normalize @http_client = options.delete(:http_client) @options = options.merge(socket_class: use_proxy? ? ProxySocket : Socket) - @options = @options.merge(Rails.configuration.x.http_client_proxy) if use_proxy? + @options = @options.merge(proxy_url) if use_proxy? @headers = {} raise Mastodon::HostValidationError, 'Instance does not support hidden service connections' if block_hidden_service? @@ -141,11 +141,23 @@ class Request end def use_proxy? - Rails.configuration.x.http_client_proxy.present? + proxy_url.present? + end + + def proxy_url + if hidden_service? && Rails.configuration.x.http_client_hidden_proxy.present? + Rails.configuration.x.http_client_hidden_proxy + else + Rails.configuration.x.http_client_proxy + end end def block_hidden_service? - !Rails.configuration.x.access_to_hidden_service && /\.(onion|i2p)$/.match?(@url.host) + !Rails.configuration.x.access_to_hidden_service && hidden_service? + end + + def hidden_service? + /\.(onion|i2p)$/.match?(@url.host) end module ClientLimit diff --git a/config/initializers/http_client_proxy.rb b/config/initializers/http_client_proxy.rb index 7a9b7b86d7d..b29e9edd750 100644 --- a/config/initializers/http_client_proxy.rb +++ b/config/initializers/http_client_proxy.rb @@ -18,5 +18,22 @@ Rails.application.configure do }.compact end + if ENV['http_hidden_proxy'].present? + proxy = URI.parse(ENV['http_hidden_proxy']) + + raise "Unsupported proxy type: #{proxy.scheme}" unless %w(http https).include? proxy.scheme + raise "No proxy host" unless proxy.host + + host = proxy.host + host = host[1...-1] if host[0] == '[' # for IPv6 address + + config.x.http_client_hidden_proxy[:proxy] = { + proxy_address: host, + proxy_port: proxy.port, + proxy_username: proxy.user, + proxy_password: proxy.password, + }.compact + end + config.x.access_to_hidden_service = ENV['ALLOW_ACCESS_TO_HIDDEN_SERVICE'] == 'true' end From 68564a622ca812f7ce512aaa02d8dccfb9c70a1e Mon Sep 17 00:00:00 2001 From: Takeshi Umeda Date: Thu, 25 Aug 2022 11:38:01 +0900 Subject: [PATCH 219/646] [Glitch] Fix action type for unfollowHashtag Port 5d70a16a1417e53b0c6cc97def9688fda21f337c to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/actions/tags.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/javascript/flavours/glitch/actions/tags.js b/app/javascript/flavours/glitch/actions/tags.js index 3933da8ba6b..4016cf96fc5 100644 --- a/app/javascript/flavours/glitch/actions/tags.js +++ b/app/javascript/flavours/glitch/actions/tags.js @@ -75,18 +75,18 @@ export const unfollowHashtag = name => (dispatch, getState) => { }; export const unfollowHashtagRequest = name => ({ - type: HASHTAG_FETCH_REQUEST, + type: HASHTAG_UNFOLLOW_REQUEST, name, }); export const unfollowHashtagSuccess = (name, tag) => ({ - type: HASHTAG_FETCH_SUCCESS, + type: HASHTAG_UNFOLLOW_SUCCESS, name, tag, }); export const unfollowHashtagFail = (name, error) => ({ - type: HASHTAG_FETCH_FAIL, + type: HASHTAG_UNFOLLOW_FAIL, name, error, }); From 3c80b62045b59f197ea5003357c03b16c1b1bac7 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 25 Aug 2022 04:30:53 +0200 Subject: [PATCH 220/646] [Glitch] Fix media modal link button Port ba745ca99a4ce4b953e11776827aabb68d621e79 to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/components/icon_button.js | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/app/javascript/flavours/glitch/components/icon_button.js b/app/javascript/flavours/glitch/components/icon_button.js index be2468d688e..9ff745355fc 100644 --- a/app/javascript/flavours/glitch/components/icon_button.js +++ b/app/javascript/flavours/glitch/components/icon_button.js @@ -139,17 +139,9 @@ export default class IconButton extends React.PureComponent { ); - if (href) { - return ( - + if (href && !this.prop) { + contents = ( + {contents} ); From 448ed92f76981f40d6faf48ed9d798ee716a04b2 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 25 Aug 2022 04:29:00 +0200 Subject: [PATCH 221/646] [Glitch] Fix quickly switching notification filters resulting in empty or incorrect list Port afb8bc97d08c2738da7873ca42fea68e4672d65b to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/actions/notifications.js | 6 +++--- .../flavours/glitch/reducers/notifications.js | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/javascript/flavours/glitch/actions/notifications.js b/app/javascript/flavours/glitch/actions/notifications.js index 3993b1ea5b9..63c1fe038a4 100644 --- a/app/javascript/flavours/glitch/actions/notifications.js +++ b/app/javascript/flavours/glitch/actions/notifications.js @@ -158,13 +158,13 @@ const excludeTypesFromFilter = filter => { const noOp = () => {}; -export function expandNotifications({ maxId } = {}, done = noOp) { +export function expandNotifications({ maxId, forceLoad } = {}, done = noOp) { return (dispatch, getState) => { const activeFilter = getState().getIn(['settings', 'notifications', 'quickFilter', 'active']); const notifications = getState().get('notifications'); const isLoadingMore = !!maxId; - if (notifications.get('isLoading')) { + if (notifications.get('isLoading') && !forceLoad) { done(); return; } @@ -343,7 +343,7 @@ export function setFilter (filterType) { path: ['notifications', 'quickFilter', 'active'], value: filterType, }); - dispatch(expandNotifications()); + dispatch(expandNotifications({ forceLoad: true })); dispatch(saveSettings()); }; }; diff --git a/app/javascript/flavours/glitch/reducers/notifications.js b/app/javascript/flavours/glitch/reducers/notifications.js index 1e61526b1be..51d7886d7a4 100644 --- a/app/javascript/flavours/glitch/reducers/notifications.js +++ b/app/javascript/flavours/glitch/reducers/notifications.js @@ -43,7 +43,7 @@ const initialState = ImmutableMap({ unread: 0, lastReadId: '0', readMarkerId: '0', - isLoading: false, + isLoading: 0, cleaningMode: false, isTabVisible: true, browserSupport: false, @@ -121,7 +121,7 @@ const expandNormalizedNotifications = (state, notifications, next, isLoadingRece } } - mutable.set('isLoading', false); + mutable.update('isLoading', (nbLoading) => nbLoading - 1); }); }; @@ -249,10 +249,10 @@ export default function notifications(state = initialState, action) { return state.update('items', list => state.get('pendingItems').concat(list.take(40))).set('pendingItems', ImmutableList()).set('unread', 0); case NOTIFICATIONS_EXPAND_REQUEST: case NOTIFICATIONS_DELETE_MARKED_REQUEST: - return state.set('isLoading', true); + return state.set('isLoading', (nbLoading) => nbLoading + 1); case NOTIFICATIONS_DELETE_MARKED_FAIL: case NOTIFICATIONS_EXPAND_FAIL: - return state.set('isLoading', false); + return state.set('isLoading', (nbLoading) => nbLoading - 1); case NOTIFICATIONS_FILTER_SET: return state.set('items', ImmutableList()).set('hasMore', true); case NOTIFICATIONS_SCROLL_TOP: @@ -287,7 +287,7 @@ export default function notifications(state = initialState, action) { return markForDelete(state, action.id, action.yes); case NOTIFICATIONS_DELETE_MARKED_SUCCESS: - return deleteMarkedNotifs(state).set('isLoading', false); + return deleteMarkedNotifs(state).set('isLoading', (nbLoading) => nbLoading - 1); case NOTIFICATIONS_ENTER_CLEARING_MODE: st = state.set('cleaningMode', action.yes); From a15fe32e61f75e5aad28568491e3d33b63b860f8 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 28 Jun 2022 09:42:13 +0200 Subject: [PATCH 222/646] [Glitch] Revamp post filtering system Port front-end changes from 02851848e964675bb59919fa5fd1bdee2c1c29db to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/actions/filters.js | 26 ------- .../flavours/glitch/actions/importer/index.js | 11 +++ .../glitch/actions/importer/normalizer.js | 12 +++ .../flavours/glitch/actions/notifications.js | 13 +--- .../flavours/glitch/actions/streaming.js | 4 - .../flavours/glitch/components/status.js | 24 +++--- .../glitch/components/status_action_bar.js | 9 ++- .../glitch/containers/status_container.js | 44 +---------- .../flavours/glitch/features/ui/index.js | 3 +- .../flavours/glitch/reducers/filters.js | 34 ++++++-- .../flavours/glitch/selectors/index.js | 78 +++++-------------- 11 files changed, 95 insertions(+), 163 deletions(-) delete mode 100644 app/javascript/flavours/glitch/actions/filters.js diff --git a/app/javascript/flavours/glitch/actions/filters.js b/app/javascript/flavours/glitch/actions/filters.js deleted file mode 100644 index 050b3032225..00000000000 --- a/app/javascript/flavours/glitch/actions/filters.js +++ /dev/null @@ -1,26 +0,0 @@ -import api from 'flavours/glitch/util/api'; - -export const FILTERS_FETCH_REQUEST = 'FILTERS_FETCH_REQUEST'; -export const FILTERS_FETCH_SUCCESS = 'FILTERS_FETCH_SUCCESS'; -export const FILTERS_FETCH_FAIL = 'FILTERS_FETCH_FAIL'; - -export const fetchFilters = () => (dispatch, getState) => { - dispatch({ - type: FILTERS_FETCH_REQUEST, - skipLoading: true, - }); - - api(getState) - .get('/api/v1/filters') - .then(({ data }) => dispatch({ - type: FILTERS_FETCH_SUCCESS, - filters: data, - skipLoading: true, - })) - .catch(err => dispatch({ - type: FILTERS_FETCH_FAIL, - err, - skipLoading: true, - skipAlert: true, - })); -}; diff --git a/app/javascript/flavours/glitch/actions/importer/index.js b/app/javascript/flavours/glitch/actions/importer/index.js index ec41fea6e2d..94d133b5f3e 100644 --- a/app/javascript/flavours/glitch/actions/importer/index.js +++ b/app/javascript/flavours/glitch/actions/importer/index.js @@ -5,6 +5,7 @@ export const ACCOUNTS_IMPORT = 'ACCOUNTS_IMPORT'; export const STATUS_IMPORT = 'STATUS_IMPORT'; export const STATUSES_IMPORT = 'STATUSES_IMPORT'; export const POLLS_IMPORT = 'POLLS_IMPORT'; +export const FILTERS_IMPORT = 'FILTERS_IMPORT'; function pushUnique(array, object) { if (array.every(element => element.id !== object.id)) { @@ -28,6 +29,10 @@ export function importStatuses(statuses) { return { type: STATUSES_IMPORT, statuses }; } +export function importFilters(filters) { + return { type: FILTERS_IMPORT, filters }; +} + export function importPolls(polls) { return { type: POLLS_IMPORT, polls }; } @@ -61,11 +66,16 @@ export function importFetchedStatuses(statuses) { const accounts = []; const normalStatuses = []; const polls = []; + const filters = []; function processStatus(status) { pushUnique(normalStatuses, normalizeStatus(status, getState().getIn(['statuses', status.id]), getState().get('local_settings'))); pushUnique(accounts, status.account); + if (status.filtered) { + status.filtered.forEach(result => pushUnique(filters, result.filter)); + } + if (status.reblog && status.reblog.id) { processStatus(status.reblog); } @@ -80,6 +90,7 @@ export function importFetchedStatuses(statuses) { dispatch(importPolls(polls)); dispatch(importFetchedAccounts(accounts)); dispatch(importStatuses(normalStatuses)); + dispatch(importFilters(filters)); }; } diff --git a/app/javascript/flavours/glitch/actions/importer/normalizer.js b/app/javascript/flavours/glitch/actions/importer/normalizer.js index c6acdbdbb3d..9950a720bd3 100644 --- a/app/javascript/flavours/glitch/actions/importer/normalizer.js +++ b/app/javascript/flavours/glitch/actions/importer/normalizer.js @@ -42,6 +42,14 @@ export function normalizeAccount(account) { return account; } +export function normalizeFilterResult(result) { + const normalResult = { ...result }; + + normalResult.filter = normalResult.filter.id; + + return normalResult; +} + export function normalizeStatus(status, normalOldStatus, settings) { const normalStatus = { ...status }; normalStatus.account = status.account.id; @@ -54,6 +62,10 @@ export function normalizeStatus(status, normalOldStatus, settings) { normalStatus.poll = status.poll.id; } + if (status.filtered) { + normalStatus.filtered = status.filtered.map(normalizeFilterResult); + } + // Only calculate these values when status first encountered and // when the underlying values change. Otherwise keep the ones // already in the reducer diff --git a/app/javascript/flavours/glitch/actions/notifications.js b/app/javascript/flavours/glitch/actions/notifications.js index 63c1fe038a4..ae3ee1a4c24 100644 --- a/app/javascript/flavours/glitch/actions/notifications.js +++ b/app/javascript/flavours/glitch/actions/notifications.js @@ -12,10 +12,8 @@ import { saveSettings } from './settings'; import { defineMessages } from 'react-intl'; import { List as ImmutableList } from 'immutable'; import { unescapeHTML } from 'flavours/glitch/util/html'; -import { getFiltersRegex } from 'flavours/glitch/selectors'; import { usePendingItems as preferPendingItems } from 'flavours/glitch/util/initial_state'; import compareId from 'flavours/glitch/util/compare_id'; -import { searchTextFromRawStatus } from 'flavours/glitch/actions/importer/normalizer'; import { requestNotificationPermission } from 'flavours/glitch/util/notifications'; export const NOTIFICATIONS_UPDATE = 'NOTIFICATIONS_UPDATE'; @@ -74,20 +72,17 @@ export function updateNotifications(notification, intlMessages, intlLocale) { const showInColumn = activeFilter === 'all' ? getState().getIn(['settings', 'notifications', 'shows', notification.type], true) : activeFilter === notification.type; const showAlert = getState().getIn(['settings', 'notifications', 'alerts', notification.type], true); const playSound = getState().getIn(['settings', 'notifications', 'sounds', notification.type], true); - const filters = getFiltersRegex(getState(), { contextType: 'notifications' }); let filtered = false; - if (['mention', 'status'].includes(notification.type)) { - const dropRegex = filters[0]; - const regex = filters[1]; - const searchIndex = searchTextFromRawStatus(notification.status); + if (['mention', 'status'].includes(notification.type) && notification.status.filtered) { + const filters = notification.status.filtered.filter(result => result.filter.context.includes('notifications')); - if (dropRegex && dropRegex.test(searchIndex)) { + if (filters.some(result => result.filter.filter_action === 'hide')) { return; } - filtered = regex && regex.test(searchIndex); + filtered = filters.length > 0; } if (['follow_request'].includes(notification.type)) { diff --git a/app/javascript/flavours/glitch/actions/streaming.js b/app/javascript/flavours/glitch/actions/streaming.js index 90d6a02313b..375728cb5a4 100644 --- a/app/javascript/flavours/glitch/actions/streaming.js +++ b/app/javascript/flavours/glitch/actions/streaming.js @@ -21,7 +21,6 @@ import { updateReaction as updateAnnouncementsReaction, deleteAnnouncement, } from './announcements'; -import { fetchFilters } from './filters'; import { getLocale } from 'mastodon/locales'; const { messages } = getLocale(); @@ -97,9 +96,6 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti case 'conversation': dispatch(updateConversations(JSON.parse(data.payload))); break; - case 'filters_changed': - dispatch(fetchFilters()); - break; case 'announcement': dispatch(updateAnnouncements(JSON.parse(data.payload))); break; diff --git a/app/javascript/flavours/glitch/components/status.js b/app/javascript/flavours/glitch/components/status.js index b2d9acebcdb..4ba602defcc 100644 --- a/app/javascript/flavours/glitch/components/status.js +++ b/app/javascript/flavours/glitch/components/status.js @@ -455,8 +455,8 @@ class Status extends ImmutablePureComponent { } handleUnfilterClick = e => { - const { onUnfilter, status } = this.props; - onUnfilter(status.get('reblog') ? status.get('reblog') : status, () => this.setState({ forceFilter: false })); + this.setState({ forceFilter: false }); + e.preventDefault(); } handleFilterClick = () => { @@ -557,8 +557,8 @@ class Status extends ImmutablePureComponent { ); } - const filtered = (status.get('filtered') || status.getIn(['reblog', 'filtered'])) && settings.get('filtering_behavior') !== 'content_warning'; - if (forceFilter === undefined ? filtered : forceFilter) { + const matchedFilters = status.get('filtered') || status.getIn(['reblog', 'filtered']); + if (this.state.forceFilter === undefined ? matchedFilters : this.state.forceFilter) { const minHandlers = this.props.muted ? {} : { moveUp: this.handleHotkeyMoveUp, moveDown: this.handleHotkeyMoveDown, @@ -567,13 +567,11 @@ class Status extends ImmutablePureComponent { return (
    - - {settings.get('filtering_behavior') !== 'upstream' && ' '} - {settings.get('filtering_behavior') !== 'upstream' && ( - - )} + : {matchedFilters.join(', ')}. + {' '} +
    ); @@ -789,11 +787,11 @@ class Status extends ImmutablePureComponent { {!isCollapsed || !(muted || !settings.getIn(['collapsed', 'show_action_bar'])) ? ( ) : null} {notification ? ( diff --git a/app/javascript/flavours/glitch/components/status_action_bar.js b/app/javascript/flavours/glitch/components/status_action_bar.js index 667afac5a88..6581bc9ea55 100644 --- a/app/javascript/flavours/glitch/components/status_action_bar.js +++ b/app/javascript/flavours/glitch/components/status_action_bar.js @@ -271,10 +271,6 @@ class StatusActionBar extends ImmutablePureComponent { ); - const filterButton = status.get('filtered') && ( - - ); - let replyButton = ( + ); + return (
    {replyButton} @@ -316,6 +316,7 @@ class StatusActionBar extends ImmutablePureComponent { {shareButton} + {filterButton}
    diff --git a/app/javascript/flavours/glitch/containers/status_container.js b/app/javascript/flavours/glitch/containers/status_container.js index 6c8f261e46f..19781745ba8 100644 --- a/app/javascript/flavours/glitch/containers/status_container.js +++ b/app/javascript/flavours/glitch/containers/status_container.js @@ -1,7 +1,7 @@ import { connect } from 'react-redux'; import Status from 'flavours/glitch/components/status'; import { List as ImmutableList } from 'immutable'; -import { makeGetStatus, regexFromFilters, toServerSideType } from 'flavours/glitch/selectors'; +import { makeGetStatus } from 'flavours/glitch/selectors'; import { replyCompose, mentionCompose, @@ -201,48 +201,6 @@ const mapDispatchToProps = (dispatch, { intl, contextType }) => ({ dispatch(initBlockModal(account)); }, - onUnfilter (status, onConfirm) { - dispatch((_, getState) => { - let state = getState(); - const serverSideType = toServerSideType(contextType); - const enabledFilters = state.get('filters', ImmutableList()).filter(filter => filter.get('context').includes(serverSideType) && (filter.get('expires_at') === null || Date.parse(filter.get('expires_at')) > (new Date()))).toArray(); - const searchIndex = status.get('search_index'); - const matchingFilters = enabledFilters.filter(filter => regexFromFilters([filter]).test(searchIndex)); - dispatch(openModal('CONFIRM', { - message: [ - , -
    - - - - -
      - {matchingFilters.map(filter => ( -
    • - {filter.get('phrase')} - {!!filterEditLink && ' '} - {!!filterEditLink && ( - - - - )} -
    • - ))} -
    -
    -
    - ], - confirm: intl.formatMessage(messages.unfilterConfirm), - onConfirm: onConfirm, - })); - }); - }, - onReport (status) { dispatch(initReport(status.get('account'), status)); }, diff --git a/app/javascript/flavours/glitch/features/ui/index.js b/app/javascript/flavours/glitch/features/ui/index.js index 099ffc69c70..2be6d94780c 100644 --- a/app/javascript/flavours/glitch/features/ui/index.js +++ b/app/javascript/flavours/glitch/features/ui/index.js @@ -10,7 +10,6 @@ import { debounce } from 'lodash'; import { uploadCompose, resetCompose, changeComposeSpoilerness } from 'flavours/glitch/actions/compose'; import { expandHomeTimeline } from 'flavours/glitch/actions/timelines'; import { expandNotifications, notificationsSetVisibility } from 'flavours/glitch/actions/notifications'; -import { fetchFilters } from 'flavours/glitch/actions/filters'; import { fetchRules } from 'flavours/glitch/actions/rules'; import { clearHeight } from 'flavours/glitch/actions/height_cache'; import { synchronouslySubmitMarkers, submitMarkers, fetchMarkers } from 'flavours/glitch/actions/markers'; @@ -402,7 +401,7 @@ class UI extends React.Component { this.props.dispatch(fetchMarkers()); this.props.dispatch(expandHomeTimeline()); this.props.dispatch(expandNotifications()); - setTimeout(() => this.props.dispatch(fetchFilters()), 500); + setTimeout(() => this.props.dispatch(fetchRules()), 3000); } diff --git a/app/javascript/flavours/glitch/reducers/filters.js b/app/javascript/flavours/glitch/reducers/filters.js index 33f0c673280..14b7040273e 100644 --- a/app/javascript/flavours/glitch/reducers/filters.js +++ b/app/javascript/flavours/glitch/reducers/filters.js @@ -1,10 +1,34 @@ -import { FILTERS_FETCH_SUCCESS } from '../actions/filters'; -import { List as ImmutableList, fromJS } from 'immutable'; +import { FILTERS_IMPORT } from '../actions/importer'; +import { Map as ImmutableMap, is, fromJS } from 'immutable'; -export default function filters(state = ImmutableList(), action) { +const normalizeFilter = (state, filter) => { + const normalizedFilter = fromJS({ + id: filter.id, + title: filter.title, + context: filter.context, + filter_action: filter.filter_action, + expires_at: filter.expires_at ? Date.parse(filter.expires_at) : null, + }); + + if (is(state.get(filter.id), normalizedFilter)) { + return state; + } else { + return state.set(filter.id, normalizedFilter); + } +}; + +const normalizeFilters = (state, filters) => { + filters.forEach(filter => { + state = normalizeFilter(state, filter); + }); + + return state; +}; + +export default function filters(state = ImmutableMap(), action) { switch(action.type) { - case FILTERS_FETCH_SUCCESS: - return fromJS(action.filters); + case FILTERS_IMPORT: + return normalizeFilters(state, action.filters); default: return state; } diff --git a/app/javascript/flavours/glitch/selectors/index.js b/app/javascript/flavours/glitch/selectors/index.js index d9aa8f14037..63b10167cb8 100644 --- a/app/javascript/flavours/glitch/selectors/index.js +++ b/app/javascript/flavours/glitch/selectors/index.js @@ -41,15 +41,15 @@ export const toServerSideType = columnType => { const escapeRegExp = string => string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string -export const regexFromFilters = filters => { - if (filters.size === 0) { +const regexFromKeywords = keywords => { + if (keywords.size === 0) { return null; } - return new RegExp(filters.map(filter => { - let expr = escapeRegExp(filter.get('phrase')); + return new RegExp(keywords.map(keyword_filter => { + let expr = escapeRegExp(keyword_filter.get('keyword')); - if (filter.get('whole_word')) { + if (keyword_filter.get('whole_word')) { if (/^[\w]/.test(expr)) { expr = `\\b${expr}`; } @@ -63,27 +63,15 @@ export const regexFromFilters = filters => { }).join('|'), 'i'); }; -// Memoize the filter regexps for each valid server contextType -const makeGetFiltersRegex = () => { - let memo = {}; +const getFilters = (state, { contextType }) => { + if (!contextType) return null; - return (state, { contextType }) => { - if (!contextType) return ImmutableList(); + const serverSideType = toServerSideType(contextType); + const now = new Date(); - const serverSideType = toServerSideType(contextType); - const filters = state.get('filters', ImmutableList()).filter(filter => filter.get('context').includes(serverSideType) && (filter.get('expires_at') === null || Date.parse(filter.get('expires_at')) > (new Date()))); - - if (!memo[serverSideType] || !is(memo[serverSideType].filters, filters)) { - const dropRegex = regexFromFilters(filters.filter(filter => filter.get('irreversible'))); - const regex = regexFromFilters(filters); - memo[serverSideType] = { filters: filters, results: [dropRegex, regex] }; - } - return memo[serverSideType].results; - }; + return state.get('filters').filter((filter) => filter.get('context').includes(serverSideType) && (filter.get('expires_at') === null || filter.get('expires_at') > now)); }; -export const getFiltersRegex = makeGetFiltersRegex(); - export const makeGetStatus = () => { return createSelector( [ @@ -91,56 +79,32 @@ export const makeGetStatus = () => { (state, { id }) => state.getIn(['statuses', state.getIn(['statuses', id, 'reblog'])]), (state, { id }) => state.getIn(['accounts', state.getIn(['statuses', id, 'account'])]), (state, { id }) => state.getIn(['accounts', state.getIn(['statuses', state.getIn(['statuses', id, 'reblog']), 'account'])]), - (state, _) => state.getIn(['local_settings', 'filtering_behavior']), - (state, _) => state.get('filters', ImmutableList()), - (_, { contextType }) => contextType, - getFiltersRegex, + getFilters, ], - (statusBase, statusReblog, accountBase, accountReblog, filteringBehavior, filters, contextType, filtersRegex) => { + (statusBase, statusReblog, accountBase, accountReblog, filters) => { if (!statusBase) { return null; } - const dropRegex = (accountReblog || accountBase).get('id') !== me && filtersRegex[0]; - - if (dropRegex && dropRegex.test(statusBase.get('reblog') ? statusReblog.get('search_index') : statusBase.get('search_index'))) { - return null; + let filtered = false; + if ((accountReblog || accountBase).get('id') !== me && filters) { + let filterResults = statusReblog?.get('filtered') || statusBase.get('filtered') || ImmutableList(); + if (filterResults.some((result) => filters.getIn([result.get('filter'), 'filter_action']) === 'hide')) { + return null; + } + if (!filterResults.isEmpty()) { + filtered = filterResults.map(result => filters.getIn([result.get('filter'), 'title'])); + } } - const regex = (accountReblog || accountBase).get('id') !== me && filtersRegex[1]; - let filtered = false; - if (statusReblog) { - filtered = regex && regex.test(statusReblog.get('search_index')); statusReblog = statusReblog.set('account', accountReblog); statusReblog = statusReblog.set('filtered', filtered); } else { statusReblog = null; } - filtered = filtered || regex && regex.test(statusBase.get('search_index')); - - if (filtered && filteringBehavior === 'drop') { - return null; - } else if (filtered && filteringBehavior === 'content_warning') { - let spoilerText = (statusReblog || statusBase).get('spoiler_text', ''); - const searchIndex = (statusReblog || statusBase).get('search_index'); - const serverSideType = toServerSideType(contextType); - const enabledFilters = filters.filter(filter => filter.get('context').includes(serverSideType) && (filter.get('expires_at') === null || Date.parse(filter.get('expires_at')) > (new Date()))).toArray(); - const matchingFilters = enabledFilters.filter(filter => { - const regexp = regexFromFilters([filter]); - return regexp.test(searchIndex) && !regexp.test(spoilerText); - }); - if (statusReblog) { - statusReblog = statusReblog.set('spoiler_text', matchingFilters.map(filter => filter.get('phrase')).concat([spoilerText]).filter(cw => !!cw).join(', ')); - statusReblog = statusReblog.update('spoilerHtml', '', spoilerText => matchingFilters.map(filter => escapeTextContentForBrowser(filter.get('phrase'))).concat([spoilerText]).filter(cw => !!cw).join(', ')); - } else { - statusBase = statusBase.set('spoiler_text', matchingFilters.map(filter => filter.get('phrase')).concat([spoilerText]).filter(cw => !!cw).join(', ')); - statusBase = statusBase.update('spoilerHtml', '', spoilerText => matchingFilters.map(filter => escapeTextContentForBrowser(filter.get('phrase'))).concat([spoilerText]).filter(cw => !!cw).join(', ')); - } - } - return statusBase.withMutations(map => { map.set('reblog', statusReblog); map.set('account', accountBase); From bbafe28fbc31f333d526103990b0c0b5d73f7eaf Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 30 Jun 2022 09:51:55 +0200 Subject: [PATCH 223/646] [Glitch] Fix reblogged statuses being erroneously shown as filtered Port 3c24f19afedc2169a7a343c5af4a8f892d863f0b to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/components/status.js | 2 +- app/javascript/flavours/glitch/selectors/index.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/javascript/flavours/glitch/components/status.js b/app/javascript/flavours/glitch/components/status.js index 4ba602defcc..501bcd300af 100644 --- a/app/javascript/flavours/glitch/components/status.js +++ b/app/javascript/flavours/glitch/components/status.js @@ -557,7 +557,7 @@ class Status extends ImmutablePureComponent { ); } - const matchedFilters = status.get('filtered') || status.getIn(['reblog', 'filtered']); + const matchedFilters = status.get('matched_filters'); if (this.state.forceFilter === undefined ? matchedFilters : this.state.forceFilter) { const minHandlers = this.props.muted ? {} : { moveUp: this.handleHotkeyMoveUp, diff --git a/app/javascript/flavours/glitch/selectors/index.js b/app/javascript/flavours/glitch/selectors/index.js index 63b10167cb8..91f9a81d967 100644 --- a/app/javascript/flavours/glitch/selectors/index.js +++ b/app/javascript/flavours/glitch/selectors/index.js @@ -100,7 +100,7 @@ export const makeGetStatus = () => { if (statusReblog) { statusReblog = statusReblog.set('account', accountReblog); - statusReblog = statusReblog.set('filtered', filtered); + statusReblog = statusReblog.set('matched_filters', filtered); } else { statusReblog = null; } @@ -108,7 +108,7 @@ export const makeGetStatus = () => { return statusBase.withMutations(map => { map.set('reblog', statusReblog); map.set('account', accountBase); - map.set('filtered', filtered); + map.set('matched_filters', filtered); }); }, ); From 93b6ad2c6c6d2b148d71bf3d4281313a331edb69 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 30 Jun 2022 10:39:29 +0200 Subject: [PATCH 224/646] [Glitch] Remove dead code in WebUI filtering code Port a233a9bfb5f384e89bdaef6e519fa20db2a99ae5 to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/selectors/index.js | 27 +------------------ 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/app/javascript/flavours/glitch/selectors/index.js b/app/javascript/flavours/glitch/selectors/index.js index 91f9a81d967..7caa5259fbb 100644 --- a/app/javascript/flavours/glitch/selectors/index.js +++ b/app/javascript/flavours/glitch/selectors/index.js @@ -1,6 +1,6 @@ import escapeTextContentForBrowser from 'escape-html'; import { createSelector } from 'reselect'; -import { List as ImmutableList, is } from 'immutable'; +import { List as ImmutableList } from 'immutable'; import { me } from 'flavours/glitch/util/initial_state'; const getAccountBase = (state, id) => state.getIn(['accounts', id], null); @@ -38,31 +38,6 @@ export const toServerSideType = columnType => { } }; -const escapeRegExp = string => - string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string - -const regexFromKeywords = keywords => { - if (keywords.size === 0) { - return null; - } - - return new RegExp(keywords.map(keyword_filter => { - let expr = escapeRegExp(keyword_filter.get('keyword')); - - if (keyword_filter.get('whole_word')) { - if (/^[\w]/.test(expr)) { - expr = `\\b${expr}`; - } - - if (/[\w]$/.test(expr)) { - expr = `${expr}\\b`; - } - } - - return expr; - }).join('|'), 'i'); -}; - const getFilters = (state, { contextType }) => { if (!contextType) return null; From 28f0dfc0b42cde1e9443df13cae471ee7bb9d988 Mon Sep 17 00:00:00 2001 From: Takeshi Umeda Date: Thu, 25 Aug 2022 11:37:40 +0900 Subject: [PATCH 225/646] [Glitch] Fix case where boolean was passed to onFilter on StatusActionBar Port 66b8abf218a87e65fab8a7fae6fc6ea73c41d750 to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/components/status.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/components/status.js b/app/javascript/flavours/glitch/components/status.js index 501bcd300af..1f1cca81301 100644 --- a/app/javascript/flavours/glitch/components/status.js +++ b/app/javascript/flavours/glitch/components/status.js @@ -790,7 +790,7 @@ class Status extends ImmutablePureComponent { status={status} account={status.get('account')} showReplyCount={settings.get('show_reply_count')} - onFilter={matchedFilters && this.handleFilterClick} + onFilter={matchedFilters ? this.handleFilterClick : null} {...other} /> ) : null} From 0b733ca7909bb96269613ca05df7a91eb083d042 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 25 Aug 2022 04:27:47 +0200 Subject: [PATCH 226/646] [Glitch] Add ability to filter individual posts Port 50487db1224851a49ee523bbc013d5f8686a7a55 to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/actions/filters.js | 93 +++++++++ .../flavours/glitch/actions/statuses.js | 4 +- .../flavours/glitch/components/status.js | 1 + .../glitch/components/status_action_bar.js | 16 +- .../glitch/containers/status_container.js | 7 + .../compose/components/language_dropdown.js | 19 +- .../features/filters/added_to_filter.js | 102 ++++++++++ .../glitch/features/filters/select_filter.js | 192 ++++++++++++++++++ .../features/ui/components/filter_modal.js | 134 ++++++++++++ .../features/ui/components/modal_root.js | 2 + .../flavours/glitch/reducers/filters.js | 11 +- .../flavours/glitch/selectors/index.js | 19 +- .../glitch/styles/components/modal.scss | 18 ++ .../flavours/glitch/util/async-components.js | 4 + .../flavours/glitch/util/filters.js | 16 ++ app/javascript/flavours/glitch/util/icons.js | 13 ++ 16 files changed, 612 insertions(+), 39 deletions(-) create mode 100644 app/javascript/flavours/glitch/actions/filters.js create mode 100644 app/javascript/flavours/glitch/features/filters/added_to_filter.js create mode 100644 app/javascript/flavours/glitch/features/filters/select_filter.js create mode 100644 app/javascript/flavours/glitch/features/ui/components/filter_modal.js create mode 100644 app/javascript/flavours/glitch/util/filters.js create mode 100644 app/javascript/flavours/glitch/util/icons.js diff --git a/app/javascript/flavours/glitch/actions/filters.js b/app/javascript/flavours/glitch/actions/filters.js new file mode 100644 index 00000000000..9aa31028ab5 --- /dev/null +++ b/app/javascript/flavours/glitch/actions/filters.js @@ -0,0 +1,93 @@ +import api from 'flavours/glitch/util/api'; +import { openModal } from './modal'; + +export const FILTERS_FETCH_REQUEST = 'FILTERS_FETCH_REQUEST'; +export const FILTERS_FETCH_SUCCESS = 'FILTERS_FETCH_SUCCESS'; +export const FILTERS_FETCH_FAIL = 'FILTERS_FETCH_FAIL'; + +export const FILTERS_STATUS_CREATE_REQUEST = 'FILTERS_STATUS_CREATE_REQUEST'; +export const FILTERS_STATUS_CREATE_SUCCESS = 'FILTERS_STATUS_CREATE_SUCCESS'; +export const FILTERS_STATUS_CREATE_FAIL = 'FILTERS_STATUS_CREATE_FAIL'; + +export const FILTERS_CREATE_REQUEST = 'FILTERS_CREATE_REQUEST'; +export const FILTERS_CREATE_SUCCESS = 'FILTERS_CREATE_SUCCESS'; +export const FILTERS_CREATE_FAIL = 'FILTERS_CREATE_FAIL'; + +export const initAddFilter = (status, { contextType }) => dispatch => + dispatch(openModal('FILTER', { + statusId: status?.get('id'), + contextType: contextType, + })); + +export const fetchFilters = () => (dispatch, getState) => { + dispatch({ + type: FILTERS_FETCH_REQUEST, + skipLoading: true, + }); + + api(getState) + .get('/api/v2/filters') + .then(({ data }) => dispatch({ + type: FILTERS_FETCH_SUCCESS, + filters: data, + skipLoading: true, + })) + .catch(err => dispatch({ + type: FILTERS_FETCH_FAIL, + err, + skipLoading: true, + skipAlert: true, + })); +}; + +export const createFilterStatus = (params, onSuccess, onFail) => (dispatch, getState) => { + dispatch(createFilterStatusRequest()); + + api(getState).post(`/api/v1/filters/${params.filter_id}/statuses`, params).then(response => { + dispatch(createFilterStatusSuccess(response.data)); + if (onSuccess) onSuccess(); + }).catch(error => { + dispatch(createFilterStatusFail(error)); + if (onFail) onFail(); + }); +}; + +export const createFilterStatusRequest = () => ({ + type: FILTERS_STATUS_CREATE_REQUEST, +}); + +export const createFilterStatusSuccess = filter_status => ({ + type: FILTERS_STATUS_CREATE_SUCCESS, + filter_status, +}); + +export const createFilterStatusFail = error => ({ + type: FILTERS_STATUS_CREATE_FAIL, + error, +}); + +export const createFilter = (params, onSuccess, onFail) => (dispatch, getState) => { + dispatch(createFilterRequest()); + + api(getState).post('/api/v2/filters', params).then(response => { + dispatch(createFilterSuccess(response.data)); + if (onSuccess) onSuccess(response.data); + }).catch(error => { + dispatch(createFilterFail(error)); + if (onFail) onFail(); + }); +}; + +export const createFilterRequest = () => ({ + type: FILTERS_CREATE_REQUEST, +}); + +export const createFilterSuccess = filter => ({ + type: FILTERS_CREATE_SUCCESS, + filter, +}); + +export const createFilterFail = error => ({ + type: FILTERS_CREATE_FAIL, + error, +}); diff --git a/app/javascript/flavours/glitch/actions/statuses.js b/app/javascript/flavours/glitch/actions/statuses.js index 1f223f22ef0..58c1d44a691 100644 --- a/app/javascript/flavours/glitch/actions/statuses.js +++ b/app/javascript/flavours/glitch/actions/statuses.js @@ -42,9 +42,9 @@ export function fetchStatusRequest(id, skipLoading) { }; }; -export function fetchStatus(id) { +export function fetchStatus(id, forceFetch = false) { return (dispatch, getState) => { - const skipLoading = getState().getIn(['statuses', id], null) !== null; + const skipLoading = !forceFetch && getState().getIn(['statuses', id], null) !== null; dispatch(fetchContext(id)); diff --git a/app/javascript/flavours/glitch/components/status.js b/app/javascript/flavours/glitch/components/status.js index 1f1cca81301..e238456c5bc 100644 --- a/app/javascript/flavours/glitch/components/status.js +++ b/app/javascript/flavours/glitch/components/status.js @@ -79,6 +79,7 @@ class Status extends ImmutablePureComponent { onOpenMedia: PropTypes.func, onOpenVideo: PropTypes.func, onBlock: PropTypes.func, + onAddFilter: PropTypes.func, onEmbed: PropTypes.func, onHeightChange: PropTypes.func, onToggleHidden: PropTypes.func, diff --git a/app/javascript/flavours/glitch/components/status_action_bar.js b/app/javascript/flavours/glitch/components/status_action_bar.js index 6581bc9ea55..c0cd496cef2 100644 --- a/app/javascript/flavours/glitch/components/status_action_bar.js +++ b/app/javascript/flavours/glitch/components/status_action_bar.js @@ -41,6 +41,7 @@ const messages = defineMessages({ copy: { id: 'status.copy', defaultMessage: 'Copy link to status' }, hide: { id: 'status.hide', defaultMessage: 'Hide toot' }, edited: { id: 'status.edited', defaultMessage: 'Edited {date}' }, + filter: { id: 'status.filter', defaultMessage: 'Filter this post' }, }); export default @injectIntl @@ -67,6 +68,7 @@ class StatusActionBar extends ImmutablePureComponent { onPin: PropTypes.func, onBookmark: PropTypes.func, onFilter: PropTypes.func, + onAddFilter: PropTypes.func, withDismiss: PropTypes.bool, showReplyCount: PropTypes.bool, scrollKey: PropTypes.string, @@ -193,10 +195,14 @@ class StatusActionBar extends ImmutablePureComponent { } } - handleFilterClick = () => { + handleHideClick = () => { this.props.onFilter(); } + handleFilterClick = () => { + this.props.onAddFilter(this.props.status); + } + render () { const { status, intl, withDismiss, showReplyCount, scrollKey } = this.props; @@ -238,6 +244,12 @@ class StatusActionBar extends ImmutablePureComponent { menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick }); menu.push({ text: intl.formatMessage(messages.direct, { name: status.getIn(['account', 'username']) }), action: this.handleDirectClick }); menu.push(null); + + if (!this.props.onFilter) { + menu.push({ text: intl.formatMessage(messages.filter), action: this.handleFilterClick }); + menu.push(null); + } + menu.push({ text: intl.formatMessage(messages.mute, { name: status.getIn(['account', 'username']) }), action: this.handleMuteClick }); menu.push({ text: intl.formatMessage(messages.block, { name: status.getIn(['account', 'username']) }), action: this.handleBlockClick }); menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport }); @@ -306,7 +318,7 @@ class StatusActionBar extends ImmutablePureComponent { } const filterButton = this.props.onFilter && ( - + ); return ( diff --git a/app/javascript/flavours/glitch/containers/status_container.js b/app/javascript/flavours/glitch/containers/status_container.js index 19781745ba8..0ba2e712c2f 100644 --- a/app/javascript/flavours/glitch/containers/status_container.js +++ b/app/javascript/flavours/glitch/containers/status_container.js @@ -25,6 +25,9 @@ import { revealStatus, editStatus } from 'flavours/glitch/actions/statuses'; +import { + initAddFilter, +} from 'flavours/glitch/actions/filters'; import { initMuteModal } from 'flavours/glitch/actions/mutes'; import { initBlockModal } from 'flavours/glitch/actions/blocks'; import { initReport } from 'flavours/glitch/actions/reports'; @@ -205,6 +208,10 @@ const mapDispatchToProps = (dispatch, { intl, contextType }) => ({ dispatch(initReport(status.get('account'), status)); }, + onAddFilter (status) { + dispatch(initAddFilter(status, { contextType })); + }, + onMute (account) { dispatch(initMuteModal(account)); }, diff --git a/app/javascript/flavours/glitch/features/compose/components/language_dropdown.js b/app/javascript/flavours/glitch/features/compose/components/language_dropdown.js index c8c503e582b..035b0c0c3ee 100644 --- a/app/javascript/flavours/glitch/features/compose/components/language_dropdown.js +++ b/app/javascript/flavours/glitch/features/compose/components/language_dropdown.js @@ -8,6 +8,7 @@ import spring from 'react-motion/lib/spring'; import { supportsPassiveEvents } from 'detect-passive-events'; import classNames from 'classnames'; import { languages as preloadedLanguages } from 'flavours/glitch/util/initial_state'; +import { loupeIcon, deleteIcon } from 'flavours/glitch/util/icons'; import fuzzysort from 'fuzzysort'; const messages = defineMessages({ @@ -16,22 +17,6 @@ const messages = defineMessages({ clear: { id: 'emoji_button.clear', defaultMessage: 'Clear' }, }); -// Copied from emoji-mart for consistency with emoji picker and since -// they don't export the icons in the package -const icons = { - loupe: ( - - - - ), - - delete: ( - - - - ), -}; - const listenerOptions = supportsPassiveEvents ? { passive: true } : false; class LanguageDropdownMenu extends React.PureComponent { @@ -242,7 +227,7 @@ class LanguageDropdownMenu extends React.PureComponent {
    - +
    diff --git a/app/javascript/flavours/glitch/features/filters/added_to_filter.js b/app/javascript/flavours/glitch/features/filters/added_to_filter.js new file mode 100644 index 00000000000..f777ca429e0 --- /dev/null +++ b/app/javascript/flavours/glitch/features/filters/added_to_filter.js @@ -0,0 +1,102 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import { FormattedMessage } from 'react-intl'; +import { toServerSideType } from 'flavours/glitch/util/filters'; +import Button from 'flavours/glitch/components/button'; +import { connect } from 'react-redux'; + +const mapStateToProps = (state, { filterId }) => ({ + filter: state.getIn(['filters', filterId]), +}); + +export default @connect(mapStateToProps) +class AddedToFilter extends React.PureComponent { + + static propTypes = { + onClose: PropTypes.func.isRequired, + contextType: PropTypes.string, + filter: ImmutablePropTypes.map.isRequired, + dispatch: PropTypes.func.isRequired, + }; + + handleCloseClick = () => { + const { onClose } = this.props; + onClose(); + }; + + render () { + const { filter, contextType } = this.props; + + let expiredMessage = null; + if (filter.get('expires_at') && filter.get('expires_at') < new Date()) { + expiredMessage = ( + +

    +

    + +

    +
    + ); + } + + let contextMismatchMessage = null; + if (contextType && !filter.get('context').includes(toServerSideType(contextType))) { + contextMismatchMessage = ( + +

    +

    + +

    +
    + ); + } + + const settings_link = ( + + + + ); + + return ( + +

    +

    + +

    + + {expiredMessage} + {contextMismatchMessage} + +

    +

    + +

    + +
    + +
    + +
    + + ); + } + +} diff --git a/app/javascript/flavours/glitch/features/filters/select_filter.js b/app/javascript/flavours/glitch/features/filters/select_filter.js new file mode 100644 index 00000000000..5321dbb9609 --- /dev/null +++ b/app/javascript/flavours/glitch/features/filters/select_filter.js @@ -0,0 +1,192 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { connect } from 'react-redux'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; +import { toServerSideType } from 'flavours/glitch/util/filters'; +import { loupeIcon, deleteIcon } from 'flavours/glitch/util/icons'; +import Icon from 'flavours/glitch/components/icon'; +import fuzzysort from 'fuzzysort'; + +const messages = defineMessages({ + search: { id: 'filter_modal.select_filter.search', defaultMessage: 'Search or create' }, + clear: { id: 'emoji_button.clear', defaultMessage: 'Clear' }, +}); + +const mapStateToProps = (state, { contextType }) => ({ + filters: Array.from(state.get('filters').values()).map((filter) => [ + filter.get('id'), + filter.get('title'), + filter.get('keywords')?.map((keyword) => keyword.get('keyword')).join('\n'), + filter.get('expires_at') && filter.get('expires_at') < new Date(), + contextType && !filter.get('context').includes(toServerSideType(contextType)), + ]), +}); + +export default @connect(mapStateToProps) +@injectIntl +class SelectFilter extends React.PureComponent { + + static propTypes = { + onSelectFilter: PropTypes.func.isRequired, + onNewFilter: PropTypes.func.isRequired, + filters: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.object)), + intl: PropTypes.object.isRequired, + }; + + state = { + searchValue: '', + }; + + search () { + const { filters } = this.props; + const { searchValue } = this.state; + + if (searchValue === '') { + return filters; + } + + return fuzzysort.go(searchValue, filters, { + keys: ['1', '2'], + limit: 5, + threshold: -10000, + }).map(result => result.obj); + } + + renderItem = filter => { + let warning = null; + if (filter[3] || filter[4]) { + warning = ( + + ( + {filter[3] && } + {filter[3] && filter[4] && ', '} + {filter[4] && } + ) + + ); + } + + return ( +
    + {filter[1]} {warning} +
    + ); + } + + renderCreateNew (name) { + return ( +
    + +
    + ); + } + + handleSearchChange = ({ target }) => { + this.setState({ searchValue: target.value }); + } + + setListRef = c => { + this.listNode = c; + } + + handleKeyDown = e => { + const index = Array.from(this.listNode.childNodes).findIndex(node => node === e.currentTarget); + + let element = null; + + switch(e.key) { + case ' ': + case 'Enter': + e.currentTarget.click(); + break; + case 'ArrowDown': + element = this.listNode.childNodes[index + 1] || this.listNode.firstChild; + break; + case 'ArrowUp': + element = this.listNode.childNodes[index - 1] || this.listNode.lastChild; + break; + case 'Tab': + if (e.shiftKey) { + element = this.listNode.childNodes[index - 1] || this.listNode.lastChild; + } else { + element = this.listNode.childNodes[index + 1] || this.listNode.firstChild; + } + break; + case 'Home': + element = this.listNode.firstChild; + break; + case 'End': + element = this.listNode.lastChild; + break; + } + + if (element) { + element.focus(); + e.preventDefault(); + e.stopPropagation(); + } + } + + handleSearchKeyDown = e => { + let element = null; + + switch(e.key) { + case 'Tab': + case 'ArrowDown': + element = this.listNode.firstChild; + + if (element) { + element.focus(); + e.preventDefault(); + e.stopPropagation(); + } + + break; + } + } + + handleClear = () => { + this.setState({ searchValue: '' }); + } + + handleItemClick = e => { + const value = e.currentTarget.getAttribute('data-index'); + + e.preventDefault(); + + this.props.onSelectFilter(value); + } + + handleNewFilterClick = e => { + e.preventDefault(); + + this.props.onNewFilter(this.state.searchValue); + }; + + render () { + const { intl } = this.props; + + const { searchValue } = this.state; + const isSearching = searchValue !== ''; + const results = this.search(); + + return ( + +

    +

    + +
    + + +
    + +
    + {results.map(this.renderItem)} + {isSearching && this.renderCreateNew(searchValue) } +
    + +
    + ); + } + +} diff --git a/app/javascript/flavours/glitch/features/ui/components/filter_modal.js b/app/javascript/flavours/glitch/features/ui/components/filter_modal.js new file mode 100644 index 00000000000..d2482e73349 --- /dev/null +++ b/app/javascript/flavours/glitch/features/ui/components/filter_modal.js @@ -0,0 +1,134 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import { fetchStatus } from 'flavours/glitch/actions/statuses'; +import { fetchFilters, createFilter, createFilterStatus } from 'flavours/glitch/actions/filters'; +import PropTypes from 'prop-types'; +import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import IconButton from 'flavours/glitch/components/icon_button'; +import SelectFilter from 'flavours/glitch/features/filters/select_filter'; +import AddedToFilter from 'flavours/glitch/features/filters/added_to_filter'; + +const messages = defineMessages({ + close: { id: 'lightbox.close', defaultMessage: 'Close' }, +}); + +export default @connect(undefined) +@injectIntl +class FilterModal extends ImmutablePureComponent { + + static propTypes = { + statusId: PropTypes.string.isRequired, + contextType: PropTypes.string, + dispatch: PropTypes.func.isRequired, + intl: PropTypes.object.isRequired, + }; + + state = { + step: 'select', + filterId: null, + isSubmitting: false, + isSubmitted: false, + }; + + handleNewFilterSuccess = (result) => { + this.handleSelectFilter(result.id); + }; + + handleSuccess = () => { + const { dispatch, statusId } = this.props; + dispatch(fetchStatus(statusId, true)); + this.setState({ isSubmitting: false, isSubmitted: true, step: 'submitted' }); + }; + + handleFail = () => { + this.setState({ isSubmitting: false }); + }; + + handleNextStep = step => { + this.setState({ step }); + }; + + handleSelectFilter = (filterId) => { + const { dispatch, statusId } = this.props; + + this.setState({ isSubmitting: true, filterId }); + + dispatch(createFilterStatus({ + filter_id: filterId, + status_id: statusId, + }, this.handleSuccess, this.handleFail)); + }; + + handleNewFilter = (title) => { + const { dispatch } = this.props; + + this.setState({ isSubmitting: true }); + + dispatch(createFilter({ + title, + context: ['home', 'notifications', 'public', 'thread', 'account'], + action: 'warn', + }, this.handleNewFilterSuccess, this.handleFail)); + }; + + componentDidMount () { + const { dispatch } = this.props; + + dispatch(fetchFilters()); + } + + render () { + const { + intl, + statusId, + contextType, + onClose, + } = this.props; + + const { + step, + filterId, + } = this.state; + + let stepComponent; + + switch(step) { + case 'select': + stepComponent = ( + + ); + break; + case 'create': + stepComponent = null; + break; + case 'submitted': + stepComponent = ( + + ); + } + + return ( +
    +
    + + +
    + +
    + {stepComponent} +
    +
    + ); + } + +} diff --git a/app/javascript/flavours/glitch/features/ui/components/modal_root.js b/app/javascript/flavours/glitch/features/ui/components/modal_root.js index 8f18d93b737..4df3a0dee7a 100644 --- a/app/javascript/flavours/glitch/features/ui/components/modal_root.js +++ b/app/javascript/flavours/glitch/features/ui/components/modal_root.js @@ -26,6 +26,7 @@ import { ListAdder, PinnedAccountsEditor, CompareHistoryModal, + FilterModal, } from 'flavours/glitch/util/async-components'; const MODAL_COMPONENTS = { @@ -49,6 +50,7 @@ const MODAL_COMPONENTS = { 'LIST_ADDER': ListAdder, 'PINNED_ACCOUNTS_EDITOR': PinnedAccountsEditor, 'COMPARE_HISTORY': CompareHistoryModal, + 'FILTER': FilterModal, }; export default class ModalRoot extends React.PureComponent { diff --git a/app/javascript/flavours/glitch/reducers/filters.js b/app/javascript/flavours/glitch/reducers/filters.js index 14b7040273e..cc1d3349c59 100644 --- a/app/javascript/flavours/glitch/reducers/filters.js +++ b/app/javascript/flavours/glitch/reducers/filters.js @@ -1,4 +1,5 @@ import { FILTERS_IMPORT } from '../actions/importer'; +import { FILTERS_FETCH_SUCCESS, FILTERS_CREATE_SUCCESS } from '../actions/filters'; import { Map as ImmutableMap, is, fromJS } from 'immutable'; const normalizeFilter = (state, filter) => { @@ -7,13 +8,17 @@ const normalizeFilter = (state, filter) => { title: filter.title, context: filter.context, filter_action: filter.filter_action, + keywords: filter.keywords, expires_at: filter.expires_at ? Date.parse(filter.expires_at) : null, }); if (is(state.get(filter.id), normalizedFilter)) { return state; } else { - return state.set(filter.id, normalizedFilter); + // Do not overwrite keywords when receiving a partial filter + return state.update(filter.id, ImmutableMap(), (old) => ( + old.mergeWith(((old_value, new_value) => (new_value === undefined ? old_value : new_value)), normalizedFilter) + )); } }; @@ -27,6 +32,10 @@ const normalizeFilters = (state, filters) => { export default function filters(state = ImmutableMap(), action) { switch(action.type) { + case FILTERS_CREATE_SUCCESS: + return normalizeFilter(state, action.filter); + case FILTERS_FETCH_SUCCESS: + //TODO: handle deleting obsolete filters case FILTERS_IMPORT: return normalizeFilters(state, action.filters); default: diff --git a/app/javascript/flavours/glitch/selectors/index.js b/app/javascript/flavours/glitch/selectors/index.js index 7caa5259fbb..377805f16c2 100644 --- a/app/javascript/flavours/glitch/selectors/index.js +++ b/app/javascript/flavours/glitch/selectors/index.js @@ -1,6 +1,7 @@ import escapeTextContentForBrowser from 'escape-html'; import { createSelector } from 'reselect'; import { List as ImmutableList } from 'immutable'; +import { toServerSideType } from 'flavours/glitch/util/filters'; import { me } from 'flavours/glitch/util/initial_state'; const getAccountBase = (state, id) => state.getIn(['accounts', id], null); @@ -21,23 +22,6 @@ export const makeGetAccount = () => { }); }; -export const toServerSideType = columnType => { - switch (columnType) { - case 'home': - case 'notifications': - case 'public': - case 'thread': - case 'account': - return columnType; - default: - if (columnType.indexOf('list:') > -1) { - return 'home'; - } else { - return 'public'; // community, account, hashtag - } - } -}; - const getFilters = (state, { contextType }) => { if (!contextType) return null; @@ -68,6 +52,7 @@ export const makeGetStatus = () => { if (filterResults.some((result) => filters.getIn([result.get('filter'), 'filter_action']) === 'hide')) { return null; } + filterResults = filterResults.filter(result => filters.has(result.get('filter'))); if (!filterResults.isEmpty()) { filtered = filterResults.map(result => filters.getIn([result.get('filter'), 'title'])); } diff --git a/app/javascript/flavours/glitch/styles/components/modal.scss b/app/javascript/flavours/glitch/styles/components/modal.scss index 90e0da02a9c..e95bea0d7f4 100644 --- a/app/javascript/flavours/glitch/styles/components/modal.scss +++ b/app/javascript/flavours/glitch/styles/components/modal.scss @@ -583,6 +583,16 @@ line-height: 22px; color: lighten($inverted-text-color, 16%); margin-bottom: 30px; + + a { + text-decoration: none; + color: $inverted-text-color; + font-weight: 500; + + &:hover { + text-decoration: underline; + } + } } &__actions { @@ -730,6 +740,14 @@ background: transparent; margin: 15px 0; } + + .emoji-mart-search { + padding-right: 10px; + } + + .emoji-mart-search-icon { + right: 10px + 5px; + } } .report-modal__container { diff --git a/app/javascript/flavours/glitch/util/async-components.js b/app/javascript/flavours/glitch/util/async-components.js index 8c9630eea0d..86bb7be3623 100644 --- a/app/javascript/flavours/glitch/util/async-components.js +++ b/app/javascript/flavours/glitch/util/async-components.js @@ -177,3 +177,7 @@ export function FollowRecommendations () { export function CompareHistoryModal () { return import(/*webpackChunkName: "flavours/glitch/async/compare_history_modal" */'flavours/glitch/features/ui/components/compare_history_modal'); } + +export function FilterModal () { + return import(/*webpackChunkName: "flavours/glitch/async/filter_modal" */'flavours/glitch/features/ui/components/filter_modal'); +} diff --git a/app/javascript/flavours/glitch/util/filters.js b/app/javascript/flavours/glitch/util/filters.js new file mode 100644 index 00000000000..97b433a991f --- /dev/null +++ b/app/javascript/flavours/glitch/util/filters.js @@ -0,0 +1,16 @@ +export const toServerSideType = columnType => { + switch (columnType) { + case 'home': + case 'notifications': + case 'public': + case 'thread': + case 'account': + return columnType; + default: + if (columnType.indexOf('list:') > -1) { + return 'home'; + } else { + return 'public'; // community, account, hashtag + } + } +}; diff --git a/app/javascript/flavours/glitch/util/icons.js b/app/javascript/flavours/glitch/util/icons.js new file mode 100644 index 00000000000..be566032e06 --- /dev/null +++ b/app/javascript/flavours/glitch/util/icons.js @@ -0,0 +1,13 @@ +// Copied from emoji-mart for consistency with emoji picker and since +// they don't export the icons in the package +export const loupeIcon = ( + + + +); + +export const deleteIcon = ( + + + +); From 3844f15da0a9b39b456e5b482e4db235dbff574b Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 25 Aug 2022 09:01:38 +0200 Subject: [PATCH 227/646] Remove obsolete filter local settings --- .../features/local_settings/page/index.js | 23 ------------------- .../glitch/reducers/local_settings.js | 1 - 2 files changed, 24 deletions(-) diff --git a/app/javascript/flavours/glitch/features/local_settings/page/index.js b/app/javascript/flavours/glitch/features/local_settings/page/index.js index ffa4e34091a..333b73b4538 100644 --- a/app/javascript/flavours/glitch/features/local_settings/page/index.js +++ b/app/javascript/flavours/glitch/features/local_settings/page/index.js @@ -24,10 +24,6 @@ const messages = defineMessages({ side_arm_copy: { id: 'settings.side_arm_reply_mode.copy', defaultMessage: 'Copy privacy setting of the toot being replied to' }, side_arm_restrict: { id: 'settings.side_arm_reply_mode.restrict', defaultMessage: 'Restrict privacy setting to that of the toot being replied to' }, regexp: { id: 'settings.content_warnings.regexp', defaultMessage: 'Regular expression' }, - filters_drop: { id: 'settings.filtering_behavior.drop', defaultMessage: 'Hide filtered toots completely' }, - filters_upstream: { id: 'settings.filtering_behavior.upstream', defaultMessage: 'Show "filtered" like vanilla Mastodon' }, - filters_hide: { id: 'settings.filtering_behavior.hide', defaultMessage: 'Show "filtered" and add a button to display why' }, - filters_cw: { id: 'settings.filtering_behavior.cw', defaultMessage: 'Still display the post, and add filtered words to content warning' }, rewrite_mentions_no: { id: 'settings.rewrite_mentions_no', defaultMessage: 'Do not rewrite mentions' }, rewrite_mentions_acct: { id: 'settings.rewrite_mentions_acct', defaultMessage: 'Rewrite with username and domain (when the account is remote)' }, rewrite_mentions_username: { id: 'settings.rewrite_mentions_username', defaultMessage: 'Rewrite with username' }, @@ -358,25 +354,6 @@ class LocalSettingsPage extends React.PureComponent {
    ), - ({ intl, onChange, settings }) => ( -
    -

    - - - -
    - ), ({ onChange, settings }) => (

    diff --git a/app/javascript/flavours/glitch/reducers/local_settings.js b/app/javascript/flavours/glitch/reducers/local_settings.js index 62ce29f0c76..81ab1cb0d8d 100644 --- a/app/javascript/flavours/glitch/reducers/local_settings.js +++ b/app/javascript/flavours/glitch/reducers/local_settings.js @@ -21,7 +21,6 @@ const initialState = ImmutableMap({ inline_preview_cards: true, hicolor_privacy_icons: false, show_content_type_choice: false, - filtering_behavior: 'hide', tag_misleading_links: true, rewrite_mentions: 'no', content_warnings : ImmutableMap({ From 2b03e21d36715705f41669580be8b810ecad644a Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 25 Aug 2022 10:49:39 +0200 Subject: [PATCH 228/646] Fix glitch-soc-specific timeline filtering logic --- .../flavours/glitch/actions/timelines.js | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/app/javascript/flavours/glitch/actions/timelines.js b/app/javascript/flavours/glitch/actions/timelines.js index 0b36d8ac3ab..0d6f844b3f1 100644 --- a/app/javascript/flavours/glitch/actions/timelines.js +++ b/app/javascript/flavours/glitch/actions/timelines.js @@ -4,8 +4,7 @@ import api, { getLinks } from 'flavours/glitch/util/api'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; import compareId from 'flavours/glitch/util/compare_id'; import { me, usePendingItems as preferPendingItems } from 'flavours/glitch/util/initial_state'; -import { getFiltersRegex } from 'flavours/glitch/selectors'; -import { searchTextFromRawStatus } from 'flavours/glitch/actions/importer/normalizer'; +import { toServerSideType } from 'flavours/glitch/util/filters'; export const TIMELINE_UPDATE = 'TIMELINE_UPDATE'; export const TIMELINE_DELETE = 'TIMELINE_DELETE'; @@ -40,14 +39,13 @@ export function updateTimeline(timeline, status, accept) { return; } - const filters = getFiltersRegex(getState(), { contextType: timeline }); - const dropRegex = filters[0]; - const regex = filters[1]; - const text = searchTextFromRawStatus(status); - let filtered = false; + let filtered = false; - if (status.account.id !== me) { - filtered = (dropRegex && dropRegex.test(text)) || (regex && regex.test(text)); + if (status.filtered) { + const contextType = toServerSideType(timeline); + const filters = status.filtered.filter(result => result.filter.context.includes(contextType)); + + filtered = filters.length > 0; } dispatch(importFetchedStatus(status)); From 3efa8da2d6867aeaeb96d5504afbbdf126f0bd2f Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 25 Aug 2022 12:40:19 +0200 Subject: [PATCH 229/646] New Crowdin updates (#18972) * New translations en.json (Hindi) * New translations en.json (Malay) * New translations en.json (Telugu) * New translations en.json (English, United Kingdom) * New translations en.json (Uyghur) * New translations en.json (Standard Moroccan Tamazight) * New translations en.json (Dutch) * New translations en.json (Portuguese) * New translations en.json (Ukrainian) * New translations en.json (Chinese Traditional) * New translations en.json (Chinese Simplified) * New translations en.json (Danish) * New translations en.json (Spanish, Argentina) * New translations en.json (Korean) * New translations en.json (Catalan) * New translations en.json (Hungarian) * New translations en.json (Slovenian) * New translations en.json (Galician) * New translations en.json (Greek) * New translations en.json (Polish) * New translations en.json (Turkish) * New translations devise.en.yml (Turkish) * New translations doorkeeper.en.yml (Turkish) * New translations en.json (Albanian) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Icelandic) * New translations en.json (Latvian) * New translations en.json (Spanish) * New translations en.json (German) * New translations en.json (Italian) * New translations en.json (Ido) * New translations en.json (Russian) * New translations en.json (Vietnamese) * New translations en.yml (Esperanto) * New translations en.json (Kurmanji (Kurdish)) * New translations en.yml (Kurmanji (Kurdish)) * New translations doorkeeper.en.yml (Kurmanji (Kurdish)) * New translations en.json (Kurmanji (Kurdish)) * New translations en.json (Kurmanji (Kurdish)) * New translations en.json (Kurmanji (Kurdish)) * New translations en.json (Kurmanji (Kurdish)) * New translations en.yml (Kurmanji (Kurdish)) * New translations en.json (Kurmanji (Kurdish)) * New translations en.json (Kurmanji (Kurdish)) * New translations en.json (Finnish) * New translations simple_form.en.yml (Finnish) * New translations simple_form.en.yml (Finnish) * New translations en.yml (Finnish) * New translations en.yml (Finnish) * New translations en.json (Thai) * New translations en.json (Russian) * New translations en.json (Chinese Simplified) * New translations simple_form.en.yml (Kurmanji (Kurdish)) * New translations en.yml (Kurmanji (Kurdish)) * New translations simple_form.en.yml (Kurmanji (Kurdish)) * New translations en.json (Kurmanji (Kurdish)) * New translations en.yml (Kurmanji (Kurdish)) * New translations en.yml (Kurmanji (Kurdish)) * New translations simple_form.en.yml (German) * New translations simple_form.en.yml (Turkish) * New translations simple_form.en.yml (Norwegian) * New translations simple_form.en.yml (Polish) * New translations simple_form.en.yml (Portuguese) * New translations simple_form.en.yml (Slovak) * New translations simple_form.en.yml (Slovenian) * New translations simple_form.en.yml (Albanian) * New translations simple_form.en.yml (Serbian (Cyrillic)) * New translations simple_form.en.yml (Swedish) * New translations simple_form.en.yml (Ukrainian) * New translations simple_form.en.yml (Chinese Simplified) * New translations simple_form.en.yml (Chinese Traditional) * New translations simple_form.en.yml (Vietnamese) * New translations simple_form.en.yml (Galician) * New translations simple_form.en.yml (Icelandic) * New translations simple_form.en.yml (Portuguese, Brazilian) * New translations simple_form.en.yml (Indonesian) * New translations simple_form.en.yml (Persian) * New translations simple_form.en.yml (Tamil) * New translations simple_form.en.yml (Dutch) * New translations simple_form.en.yml (Czech) * New translations simple_form.en.yml (Russian) * New translations simple_form.en.yml (Norwegian Nynorsk) * New translations simple_form.en.yml (Romanian) * New translations simple_form.en.yml (French) * New translations simple_form.en.yml (Spanish) * New translations simple_form.en.yml (Afrikaans) * New translations simple_form.en.yml (Arabic) * New translations simple_form.en.yml (Bulgarian) * New translations simple_form.en.yml (Catalan) * New translations simple_form.en.yml (Danish) * New translations simple_form.en.yml (Korean) * New translations simple_form.en.yml (Greek) * New translations simple_form.en.yml (Frisian) * New translations simple_form.en.yml (Basque) * New translations simple_form.en.yml (Hebrew) * New translations simple_form.en.yml (Hungarian) * New translations simple_form.en.yml (Armenian) * New translations simple_form.en.yml (Italian) * New translations simple_form.en.yml (Japanese) * New translations simple_form.en.yml (Georgian) * New translations simple_form.en.yml (Spanish, Argentina) * New translations simple_form.en.yml (Spanish, Mexico) * New translations simple_form.en.yml (Sorani (Kurdish)) * New translations simple_form.en.yml (Scottish Gaelic) * New translations simple_form.en.yml (Asturian) * New translations simple_form.en.yml (Occitan) * New translations simple_form.en.yml (Serbian (Latin)) * New translations simple_form.en.yml (Corsican) * New translations simple_form.en.yml (Breton) * New translations simple_form.en.yml (Sardinian) * New translations simple_form.en.yml (Kabyle) * New translations simple_form.en.yml (Ido) * New translations simple_form.en.yml (Sinhala) * New translations simple_form.en.yml (Malayalam) * New translations simple_form.en.yml (Bengali) * New translations simple_form.en.yml (Thai) * New translations simple_form.en.yml (Croatian) * New translations simple_form.en.yml (Kazakh) * New translations simple_form.en.yml (Estonian) * New translations simple_form.en.yml (Latvian) * New translations simple_form.en.yml (Tatar) * New translations simple_form.en.yml (Welsh) * New translations simple_form.en.yml (Esperanto) * New translations simple_form.en.yml (Chinese Traditional, Hong Kong) * New translations simple_form.en.yml (Standard Moroccan Tamazight) * New translations en.yml (Thai) * New translations simple_form.en.yml (Russian) * New translations simple_form.en.yml (Kurmanji (Kurdish)) * New translations simple_form.en.yml (Spanish) * New translations simple_form.en.yml (Catalan) * New translations simple_form.en.yml (Greek) * New translations simple_form.en.yml (Hungarian) * New translations simple_form.en.yml (Portuguese) * New translations simple_form.en.yml (Icelandic) * New translations simple_form.en.yml (Thai) * New translations simple_form.en.yml (Latvian) * New translations simple_form.en.yml (Danish) * New translations simple_form.en.yml (German) * New translations simple_form.en.yml (Catalan) * New translations simple_form.en.yml (Italian) * New translations simple_form.en.yml (Ukrainian) * New translations en.yml (Ukrainian) * New translations simple_form.en.yml (Russian) * New translations simple_form.en.yml (Spanish, Argentina) * New translations simple_form.en.yml (Korean) * New translations doorkeeper.en.yml (Kurmanji (Kurdish)) * New translations simple_form.en.yml (Chinese Traditional) * New translations en.yml (Albanian) * New translations en.yml (Korean) * New translations en.yml (Lithuanian) * New translations en.yml (Macedonian) * New translations en.yml (Dutch) * New translations en.yml (Norwegian) * New translations en.yml (Punjabi) * New translations en.yml (Polish) * New translations en.yml (Portuguese) * New translations en.yml (Slovenian) * New translations en.yml (Serbian (Cyrillic)) * New translations en.yml (Italian) * New translations en.yml (Swedish) * New translations en.yml (Turkish) * New translations en.yml (Chinese Simplified) * New translations en.yml (Chinese Traditional) * New translations en.yml (Urdu (Pakistan)) * New translations en.yml (Vietnamese) * New translations en.yml (Galician) * New translations en.yml (Icelandic) * New translations en.yml (Portuguese, Brazilian) * New translations en.yml (Indonesian) * New translations en.yml (Georgian) * New translations en.yml (Armenian) * New translations en.yml (Spanish) * New translations en.yml (Japanese) * New translations en.yml (German) * New translations en.yml (Russian) * New translations en.yml (Slovak) * New translations en.yml (Norwegian Nynorsk) * New translations en.yml (Romanian) * New translations en.yml (French) * New translations en.yml (Afrikaans) * New translations en.yml (Hungarian) * New translations en.yml (Arabic) * New translations en.yml (Bulgarian) * New translations en.yml (Catalan) * New translations en.yml (Czech) * New translations en.yml (Danish) * New translations en.yml (Greek) * New translations en.yml (Frisian) * New translations en.yml (Basque) * New translations en.yml (Irish) * New translations en.yml (Hebrew) * New translations en.yml (Persian) * New translations en.yml (Tamil) * New translations en.yml (Sorani (Kurdish)) * New translations en.yml (Cornish) * New translations en.yml (Kannada) * New translations en.yml (Scottish Gaelic) * New translations en.yml (Asturian) * New translations en.yml (Occitan) * New translations en.yml (Serbian (Latin)) * New translations en.yml (Corsican) * New translations en.yml (Breton) * New translations en.yml (Sardinian) * New translations en.yml (Sanskrit) * New translations en.yml (Kabyle) * New translations en.yml (Ido) * New translations en.yml (Taigi) * New translations en.yml (Silesian) * New translations en.yml (Sinhala) * New translations en.yml (Malayalam) * New translations en.yml (Spanish, Argentina) * New translations en.yml (Latvian) * New translations en.yml (Spanish, Mexico) * New translations en.yml (Bengali) * New translations en.yml (Marathi) * New translations en.yml (Croatian) * New translations en.yml (Kazakh) * New translations en.yml (Estonian) * New translations en.yml (Hindi) * New translations en.yml (Tatar) * New translations en.yml (Malay) * New translations en.yml (Telugu) * New translations en.yml (English, United Kingdom) * New translations en.yml (Welsh) * New translations en.yml (Uyghur) * New translations en.yml (Chinese Traditional, Hong Kong) * New translations en.yml (Standard Moroccan Tamazight) * New translations simple_form.en.yml (Chinese Simplified) * New translations simple_form.en.yml (Galician) * New translations en.yml (Chinese Simplified) * New translations en.yml (Galician) * New translations simple_form.en.yml (Swedish) * New translations en.yml (Chinese Traditional) * New translations simple_form.en.yml (Slovenian) * New translations en.yml (Polish) * New translations en.yml (Slovenian) * New translations en.yml (Chinese Simplified) * New translations simple_form.en.yml (Turkish) * New translations en.yml (Polish) * New translations en.yml (Turkish) * New translations simple_form.en.yml (Vietnamese) * New translations en.yml (Spanish) * New translations en.yml (Danish) * New translations en.yml (Korean) * New translations en.yml (Vietnamese) * New translations en.yml (Icelandic) * Run `yarn manage:translations` * Run `bundle exec i18n-tasks normalize` Co-authored-by: Yamagishi Kazutoshi --- app/javascript/mastodon/locales/af.json | 17 +++ app/javascript/mastodon/locales/ar.json | 17 +++ app/javascript/mastodon/locales/ast.json | 17 +++ app/javascript/mastodon/locales/bg.json | 17 +++ app/javascript/mastodon/locales/bn.json | 17 +++ app/javascript/mastodon/locales/br.json | 17 +++ app/javascript/mastodon/locales/ca.json | 19 ++- app/javascript/mastodon/locales/ckb.json | 17 +++ app/javascript/mastodon/locales/co.json | 17 +++ app/javascript/mastodon/locales/cs.json | 17 +++ app/javascript/mastodon/locales/cy.json | 17 +++ app/javascript/mastodon/locales/da.json | 19 ++- app/javascript/mastodon/locales/de.json | 19 ++- .../mastodon/locales/defaultMessages.json | 95 ++++++++++++++ app/javascript/mastodon/locales/el.json | 19 ++- app/javascript/mastodon/locales/en-GB.json | 17 +++ app/javascript/mastodon/locales/en.json | 17 +++ app/javascript/mastodon/locales/eo.json | 17 +++ app/javascript/mastodon/locales/es-AR.json | 19 ++- app/javascript/mastodon/locales/es-MX.json | 21 +++- app/javascript/mastodon/locales/es.json | 19 ++- app/javascript/mastodon/locales/et.json | 17 +++ app/javascript/mastodon/locales/eu.json | 17 +++ app/javascript/mastodon/locales/fa.json | 17 +++ app/javascript/mastodon/locales/fi.json | 19 ++- app/javascript/mastodon/locales/fr.json | 17 +++ app/javascript/mastodon/locales/fy.json | 17 +++ app/javascript/mastodon/locales/ga.json | 17 +++ app/javascript/mastodon/locales/gd.json | 17 +++ app/javascript/mastodon/locales/gl.json | 21 +++- app/javascript/mastodon/locales/he.json | 17 +++ app/javascript/mastodon/locales/hi.json | 17 +++ app/javascript/mastodon/locales/hr.json | 17 +++ app/javascript/mastodon/locales/hu.json | 19 ++- app/javascript/mastodon/locales/hy.json | 17 +++ app/javascript/mastodon/locales/id.json | 17 +++ app/javascript/mastodon/locales/io.json | 19 ++- app/javascript/mastodon/locales/is.json | 19 ++- app/javascript/mastodon/locales/it.json | 19 ++- app/javascript/mastodon/locales/ja.json | 17 +++ app/javascript/mastodon/locales/ka.json | 17 +++ app/javascript/mastodon/locales/kab.json | 17 +++ app/javascript/mastodon/locales/kk.json | 17 +++ app/javascript/mastodon/locales/kn.json | 17 +++ app/javascript/mastodon/locales/ko.json | 19 ++- app/javascript/mastodon/locales/ku.json | 65 ++++++---- app/javascript/mastodon/locales/kw.json | 17 +++ app/javascript/mastodon/locales/lt.json | 17 +++ app/javascript/mastodon/locales/lv.json | 19 ++- app/javascript/mastodon/locales/mk.json | 17 +++ app/javascript/mastodon/locales/ml.json | 17 +++ app/javascript/mastodon/locales/mr.json | 17 +++ app/javascript/mastodon/locales/ms.json | 17 +++ app/javascript/mastodon/locales/nl.json | 19 ++- app/javascript/mastodon/locales/nn.json | 17 +++ app/javascript/mastodon/locales/no.json | 17 +++ app/javascript/mastodon/locales/oc.json | 17 +++ app/javascript/mastodon/locales/pa.json | 17 +++ app/javascript/mastodon/locales/pl.json | 19 ++- app/javascript/mastodon/locales/pt-BR.json | 17 +++ app/javascript/mastodon/locales/pt-PT.json | 19 ++- app/javascript/mastodon/locales/ro.json | 17 +++ app/javascript/mastodon/locales/ru.json | 21 +++- app/javascript/mastodon/locales/sa.json | 17 +++ app/javascript/mastodon/locales/sc.json | 17 +++ app/javascript/mastodon/locales/si.json | 17 +++ app/javascript/mastodon/locales/sk.json | 17 +++ app/javascript/mastodon/locales/sl.json | 19 ++- app/javascript/mastodon/locales/sq.json | 19 ++- app/javascript/mastodon/locales/sr-Latn.json | 17 +++ app/javascript/mastodon/locales/sr.json | 17 +++ app/javascript/mastodon/locales/sv.json | 19 ++- app/javascript/mastodon/locales/szl.json | 17 +++ app/javascript/mastodon/locales/ta.json | 17 +++ app/javascript/mastodon/locales/tai.json | 17 +++ app/javascript/mastodon/locales/te.json | 17 +++ app/javascript/mastodon/locales/th.json | 19 ++- app/javascript/mastodon/locales/tr.json | 33 +++-- app/javascript/mastodon/locales/tt.json | 17 +++ app/javascript/mastodon/locales/ug.json | 17 +++ app/javascript/mastodon/locales/uk.json | 19 ++- app/javascript/mastodon/locales/ur.json | 17 +++ app/javascript/mastodon/locales/vi.json | 19 ++- app/javascript/mastodon/locales/zgh.json | 17 +++ app/javascript/mastodon/locales/zh-CN.json | 31 +++-- app/javascript/mastodon/locales/zh-HK.json | 17 +++ app/javascript/mastodon/locales/zh-TW.json | 19 ++- config/locales/da.yml | 15 +++ config/locales/devise.tr.yml | 10 +- config/locales/doorkeeper.ku.yml | 6 +- config/locales/doorkeeper.tr.yml | 2 +- config/locales/eo.yml | 2 +- config/locales/es-AR.yml | 15 +++ config/locales/es.yml | 15 +++ config/locales/fi.yml | 119 ++++++++++++++++++ config/locales/gl.yml | 15 +++ config/locales/is.yml | 15 +++ config/locales/ko.yml | 13 ++ config/locales/ku.yml | 72 +++++++---- config/locales/pl.yml | 9 ++ config/locales/simple_form.ca.yml | 2 + config/locales/simple_form.da.yml | 2 + config/locales/simple_form.de.yml | 2 + config/locales/simple_form.el.yml | 2 + config/locales/simple_form.es-AR.yml | 2 + config/locales/simple_form.es.yml | 2 + config/locales/simple_form.fi.yml | 14 +++ config/locales/simple_form.gl.yml | 2 + config/locales/simple_form.hu.yml | 2 + config/locales/simple_form.is.yml | 2 + config/locales/simple_form.it.yml | 2 + config/locales/simple_form.ko.yml | 2 + config/locales/simple_form.ku.yml | 19 +++ config/locales/simple_form.lv.yml | 2 + config/locales/simple_form.pt-PT.yml | 2 + config/locales/simple_form.ru.yml | 2 + config/locales/simple_form.sl.yml | 2 + config/locales/simple_form.sv.yml | 2 + config/locales/simple_form.th.yml | 2 + config/locales/simple_form.tr.yml | 2 + config/locales/simple_form.uk.yml | 2 + config/locales/simple_form.vi.yml | 2 + config/locales/simple_form.zh-CN.yml | 2 + config/locales/simple_form.zh-TW.yml | 2 + config/locales/sl.yml | 19 +++ config/locales/th.yml | 3 + config/locales/tr.yml | 17 ++- config/locales/uk.yml | 12 +- config/locales/vi.yml | 9 ++ config/locales/zh-CN.yml | 13 ++ config/locales/zh-TW.yml | 13 ++ 131 files changed, 2063 insertions(+), 101 deletions(-) diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json index cb5a70dd489..86d59065442 100644 --- a/app/javascript/mastodon/locales/af.json +++ b/app/javascript/mastodon/locales/af.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Embed", "status.favourite": "Favourite", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 45a5beede5a..220aa14ee54 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -197,6 +197,22 @@ "explore.trending_links": "الأخبار", "explore.trending_statuses": "المنشورات", "explore.trending_tags": "الوسوم", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "تم", "follow_recommendations.heading": "تابع الأشخاص الذين ترغب في رؤية منشوراتهم! إليك بعض الاقتراحات.", "follow_recommendations.lead": "ستظهر منشورات الأشخاص الذين تُتابعتهم بترتيب تسلسلي زمني على صفحتك الرئيسية. لا تخف إذا ارتكبت أي أخطاء، تستطيع إلغاء متابعة أي شخص في أي وقت تريد!", @@ -471,6 +487,7 @@ "status.edited_x_times": "عُدّل {count, plural, zero {} one {{count} مرة} two {{count} مرتين} few {{count} مرات} many {{count} مرات} other {{count} مرة}}", "status.embed": "إدماج", "status.favourite": "أضف إلى المفضلة", + "status.filter": "Filter this post", "status.filtered": "مُصفّى", "status.hide": "Hide toot", "status.history.created": "أنشأه {name} {date}", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 289e328f5ca..dba626299b2 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -197,6 +197,22 @@ "explore.trending_links": "Noticies", "explore.trending_statuses": "Posts", "explore.trending_tags": "Etiquetes", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Empotrar", "status.favourite": "Favourite", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 160219e0999..4ded919e043 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Следвайте хора, които харесвате, за да виждате техните съобщения! Ето някои предложения.", "follow_recommendations.lead": "Съобщения от хора, които следвате, ще се показват в хронологичен ред на вашата главна страница. Не се страхувайте, че ще сгрешите, по всяко време много лесно можете да спрете да ги следвате!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Вграждане", "status.favourite": "Предпочитани", + "status.filter": "Filter this post", "status.filtered": "Филтрирано", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index d4626e463e1..94b0477b5dd 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "সম্পন্ন", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "এমবেড করতে", "status.favourite": "পছন্দের করতে", + "status.filter": "Filter this post", "status.filtered": "ছাঁকনিদিত", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index c784c697ae8..50837691ff2 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -197,6 +197,22 @@ "explore.trending_links": "Keleier", "explore.trending_statuses": "Posts", "explore.trending_tags": "Gerioù-klik", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Graet", "follow_recommendations.heading": "Heuliit tud e plijfe deoc'h lenn toudoù! Setu un tamm alioù.", "follow_recommendations.lead": "Toudoù eus tud heuliet ganeoc'h a zeuio war wel en un urzh amzeroniezhel war ho red degemer. N'ho peus ket aon ober fazioù, gallout a rit paouez heuliañ tud ken aes n'eus forzh pegoulz!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Enframmañ", "status.favourite": "Muiañ-karet", + "status.filter": "Filter this post", "status.filtered": "Silet", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 5549b395215..f67a0f3fcc2 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Vaja!", "announcement.announcement": "Anunci", "attachments_list.unprocessed": "(sense processar)", - "audio.hide": "Hide audio", + "audio.hide": "Amaga l'àudio", "autosuggest_hashtag.per_week": "{count} per setmana", "boost_modal.combo": "Pots prémer {combo} per evitar-ho el pròxim cop", "bundle_column_error.body": "S'ha produït un error en carregar aquest component.", @@ -197,6 +197,22 @@ "explore.trending_links": "Notícies", "explore.trending_statuses": "Publicacions", "explore.trending_tags": "Etiquetes", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Fet", "follow_recommendations.heading": "Segueix a la gent de la que t'agradaria veure les seves publicacions! Aquí hi ha algunes recomanacions.", "follow_recommendations.lead": "Les publicacions del usuaris que segueixes es mostraran en ordre cronològic en la teva línia de temps Inici. No tinguis por en cometre errors, pots fàcilment deixar de seguir-los en qualsevol moment!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Editat {count, plural, one {{count} vegada} other {{count} vegades}}", "status.embed": "Incrusta", "status.favourite": "Favorit", + "status.filter": "Filter this post", "status.filtered": "Filtrat", "status.hide": "Amaga publicació", "status.history.created": "{name} ha creat {date}", diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json index 1addda37060..19d9550d0cb 100644 --- a/app/javascript/mastodon/locales/ckb.json +++ b/app/javascript/mastodon/locales/ckb.json @@ -197,6 +197,22 @@ "explore.trending_links": "هەواڵەکان", "explore.trending_statuses": "نووسراوەکان", "explore.trending_tags": "هاشتاگ", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "تەواو", "follow_recommendations.heading": "شوێن ئەو کەسانە بکەون کە دەتەوێت پۆستەکان ببینیت لە! لێرەدا چەند پێشنیارێک هەیە.", "follow_recommendations.lead": "بابەتەکانی ئەو کەسانەی کە بەدوایدا دەگەڕێیت بە فەرمانی کرۆنۆلۆجی لە خواردنەکانی ماڵەکەت دەردەکەون. مەترسە لە هەڵەکردن، دەتوانیت بە ئاسانی خەڵک هەڵبکەیت هەر کاتێک!", @@ -471,6 +487,7 @@ "status.edited_x_times": "دەستکاریکراوە {count, plural, one {{count} کات} other {{count} کات}}", "status.embed": "نیشتەجێ بکە", "status.favourite": "دڵخواز", + "status.filter": "Filter this post", "status.filtered": "پاڵاوتن", "status.hide": "Hide toot", "status.history.created": "{name} دروستکراوە لە{date}", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 63d21404623..5ca3f4a4b54 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Fatta", "follow_recommendations.heading": "Siguitate a ghjente da quelli vulete vede i missaghji! Eccu qualchì ricumandazione.", "follow_recommendations.lead": "I missaghji da a ghjente che voi siguitate figureranu in ordine crunulogicu nant'a vostra pagina d'accolta. Ùn timite micca di fà un sbagliu, pudete sempre disabbunavvi d'un contu à ogni mumentu!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Integrà", "status.favourite": "Aghjunghje à i favuriti", + "status.filter": "Filter this post", "status.filtered": "Filtratu", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 7ac077ae5ac..ef1a13d8f5a 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -197,6 +197,22 @@ "explore.trending_links": "Zprávy", "explore.trending_statuses": "Příspěvky", "explore.trending_tags": "Hashtagy", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Hotovo", "follow_recommendations.heading": "Sledujte lidi, jejichž příspěvky chcete vidět! Tady jsou nějaké návrhy.", "follow_recommendations.lead": "Příspěvky od lidí, které sledujete, se budou objevovat v chronologickém pořadí ve vaší domovské ose. Nebojte se, že uděláte chybu, můžete lidi stejně snadno kdykoliv přestat sledovat!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Upraven {count, plural, one {{count}krát} few {{count}krát} many {{count}krát} other {{count}krát}}", "status.embed": "Vložit na web", "status.favourite": "Oblíbit", + "status.filter": "Filter this post", "status.filtered": "Filtrováno", "status.hide": "Skrýt příspěvek", "status.history.created": "Uživatel {name} vytvořil {date}", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index f6440db72f5..cb1c90d6953 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -197,6 +197,22 @@ "explore.trending_links": "Newyddion", "explore.trending_statuses": "Postiadau", "explore.trending_tags": "Hashnodau", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Wedi gorffen", "follow_recommendations.heading": "Dilynwch y bobl yr hoffech chi weld eu postiadau! Dyma ambell i awgrymiad.", "follow_recommendations.lead": "Bydd postiadau gan bobl rydych chi'n eu dilyn yn ymddangos mewn trefn amser ar eich ffrwd cartref. Peidiwch â bod ofn gwneud camgymeriadau, gallwch chi ddad-ddilyn pobl yr un mor hawdd unrhyw bryd!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Golygwyd {count, plural, one {unwaith} two {dwywaith} other {{count} gwaith}}", "status.embed": "Plannu", "status.favourite": "Hoffi", + "status.filter": "Filter this post", "status.filtered": "Wedi'i hidlo", "status.hide": "Hide toot", "status.history.created": "{name} greuodd {date}", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index ef7f85a3b83..8f015b50d62 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Ups!", "announcement.announcement": "Bekendtgørelse", "attachments_list.unprocessed": "(ubehandlet)", - "audio.hide": "Hide audio", + "audio.hide": "Skjul lyd", "autosuggest_hashtag.per_week": "{count} pr. uge", "boost_modal.combo": "Du kan trykke på {combo} for at overspringe dette næste gang", "bundle_column_error.body": "Noget gik galt under indlæsningen af denne komponent.", @@ -197,6 +197,22 @@ "explore.trending_links": "Nyheder", "explore.trending_statuses": "Indlæg", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Udført", "follow_recommendations.heading": "Følg personer du gerne vil se indlæg fra! Her er nogle forslag.", "follow_recommendations.lead": "Indlæg, fra personer du følger, vil fremgå kronologisk ordnet i dit hjemmefeed. Vær ikke bange for at begå fejl, da du altid og meget nemt kan ændre dit valg!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Redigeret {count, plural, one {{count} gang} other {{count} gange}}", "status.embed": "Indlejr", "status.favourite": "Favorit", + "status.filter": "Filter this post", "status.filtered": "Filtreret", "status.hide": "Skjul indlæg", "status.history.created": "{name} oprettet {date}", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 8a9d0f06dc9..2df1dc0ea43 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Hoppla!", "announcement.announcement": "Ankündigung", "attachments_list.unprocessed": "(ausstehend)", - "audio.hide": "Hide audio", + "audio.hide": "Audio stummschalten", "autosuggest_hashtag.per_week": "{count} pro Woche", "boost_modal.combo": "Drücke {combo}, um dieses Fenster zu überspringen", "bundle_column_error.body": "Etwas ist beim Laden schiefgelaufen.", @@ -197,6 +197,22 @@ "explore.trending_links": "Nachrichten", "explore.trending_statuses": "Beiträge", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Fertig", "follow_recommendations.heading": "Folge Leuten, von denen du Beiträge sehen möchtest! Hier sind einige Vorschläge.", "follow_recommendations.lead": "Beiträge von Personen, denen du folgst, werden in chronologischer Reihenfolge auf deiner Startseite angezeigt. Hab keine Angst, Fehler zu machen, du kannst den Leuten jederzeit wieder entfolgen!", @@ -471,6 +487,7 @@ "status.edited_x_times": "{count, plural, one {{count} mal} other {{count} mal}} bearbeitet", "status.embed": "Einbetten", "status.favourite": "Favorisieren", + "status.filter": "Filter this post", "status.filtered": "Gefiltert", "status.hide": "Tröt verbergen", "status.history.created": "{name} erstellte {date}", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index 760602f6ef5..13ef5692215 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -635,6 +635,10 @@ { "defaultMessage": "Unblock @{name}", "id": "account.unblock" + }, + { + "defaultMessage": "Filter this post", + "id": "status.filter" } ], "path": "app/javascript/mastodon/components/status_action_bar.json" @@ -1880,6 +1884,84 @@ ], "path": "app/javascript/mastodon/features/favourites/index.json" }, + { + "descriptors": [ + { + "defaultMessage": "Expired filter!", + "id": "filter_modal.added.expired_title" + }, + { + "defaultMessage": "This filter category has expired, you will need to change the expiration date for it to apply.", + "id": "filter_modal.added.expired_explanation" + }, + { + "defaultMessage": "Context mismatch!", + "id": "filter_modal.added.context_mismatch_title" + }, + { + "defaultMessage": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "id": "filter_modal.added.context_mismatch_explanation" + }, + { + "defaultMessage": "settings page", + "id": "filter_modal.added.settings_link" + }, + { + "defaultMessage": "Filter added!", + "id": "filter_modal.added.title" + }, + { + "defaultMessage": "This post has been added to the following filter category: {title}.", + "id": "filter_modal.added.short_explanation" + }, + { + "defaultMessage": "Filter settings", + "id": "filter_modal.added.review_and_configure_title" + }, + { + "defaultMessage": "To review and further configure this filter category, go to the {settings_link}.", + "id": "filter_modal.added.review_and_configure" + }, + { + "defaultMessage": "Done", + "id": "report.close" + } + ], + "path": "app/javascript/mastodon/features/filters/added_to_filter.json" + }, + { + "descriptors": [ + { + "defaultMessage": "Search or create", + "id": "filter_modal.select_filter.search" + }, + { + "defaultMessage": "Clear", + "id": "emoji_button.clear" + }, + { + "defaultMessage": "expired", + "id": "filter_modal.select_filter.expired" + }, + { + "defaultMessage": "does not apply to this context", + "id": "filter_modal.select_filter.context_mismatch" + }, + { + "defaultMessage": "New category: {name}", + "id": "filter_modal.select_filter.prompt_new" + }, + { + "defaultMessage": "Filter this post", + "id": "filter_modal.select_filter.title" + }, + { + "defaultMessage": "Use an existing category or create a new one", + "id": "filter_modal.select_filter.subtitle" + } + ], + "path": "app/javascript/mastodon/features/filters/select_filter.json" + }, { "descriptors": [ { @@ -3408,6 +3490,19 @@ ], "path": "app/javascript/mastodon/features/ui/components/embed_modal.json" }, + { + "descriptors": [ + { + "defaultMessage": "Close", + "id": "lightbox.close" + }, + { + "defaultMessage": "Filter a post", + "id": "filter_modal.title.status" + } + ], + "path": "app/javascript/mastodon/features/ui/components/filter_modal.json" + }, { "descriptors": [ { diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index de96147cf2d..999f67c73f3 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Εεπ!", "announcement.announcement": "Ανακοίνωση", "attachments_list.unprocessed": "(μη επεξεργασμένο)", - "audio.hide": "Hide audio", + "audio.hide": "Απόκρυψη αρχείου ήχου", "autosuggest_hashtag.per_week": "{count} ανα εβδομάδα", "boost_modal.combo": "Μπορείς να πατήσεις {combo} για να το προσπεράσεις αυτό την επόμενη φορά", "bundle_column_error.body": "Κάτι πήγε στραβά ενώ φορτωνόταν αυτό το στοιχείο.", @@ -197,6 +197,22 @@ "explore.trending_links": "Νέα", "explore.trending_statuses": "Αναρτήσεις", "explore.trending_tags": "Ετικέτες", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Ολοκληρώθηκε", "follow_recommendations.heading": "Ακολουθήστε άτομα από τα οποία θα θέλατε να βλέπετε δημοσιεύσεις! Ορίστε μερικές προτάσεις.", "follow_recommendations.lead": "Οι αναρτήσεις των ατόμων που ακολουθείτε θα εμφανίζονται με χρονολογική σειρά στη ροή σας. Μη φοβάστε να κάνετε λάθη, καθώς μπορείτε πολύ εύκολα να σταματήσετε να ακολουθείτε άλλα άτομα οποιαδήποτε στιγμή!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Ενσωμάτωσε", "status.favourite": "Σημείωσε ως αγαπημένο", + "status.filter": "Filter this post", "status.filtered": "Φιλτραρισμένα", "status.hide": "Απόκρυψη toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 988793357a6..2287dcda5b0 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Embed", "status.favourite": "Favourite", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 22ecee8dfda..521bc44551a 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Embed", "status.favourite": "Favourite", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index a86842d087d..082c53de7eb 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -197,6 +197,22 @@ "explore.trending_links": "Novaĵoj", "explore.trending_statuses": "Afiŝoj", "explore.trending_tags": "Kradvortoj", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Farita", "follow_recommendations.heading": "Sekvi la personojn kies mesaĝojn vi volas vidi! Jen iom da sugestoj.", "follow_recommendations.lead": "La mesaĝoj de personoj kiujn vi sekvas, aperos laŭ kronologia ordo en via hejma templinio. Ne timu erari, vi povas ĉesi sekvi facile iam ajn!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Redactita {count, plural, one {{count} fojon} other {{count} fojojn}}", "status.embed": "Enkorpigi", "status.favourite": "Aldoni al viaj preferaĵoj", + "status.filter": "Filter this post", "status.filtered": "Filtrita", "status.hide": "Kaŝi la mesaĝon", "status.history.created": "{name} kreis {date}", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 9f2bbc2e4e3..8e4b906a2eb 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "¡Epa!", "announcement.announcement": "Anuncio", "attachments_list.unprocessed": "[sin procesar]", - "audio.hide": "Hide audio", + "audio.hide": "Ocultar audio", "autosuggest_hashtag.per_week": "{count} por semana", "boost_modal.combo": "Podés hacer clic en {combo} para saltar esto la próxima vez", "bundle_column_error.body": "Algo salió mal al cargar este componente.", @@ -197,6 +197,22 @@ "explore.trending_links": "Noticias", "explore.trending_statuses": "Mensajes", "explore.trending_tags": "Etiquetas", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Listo", "follow_recommendations.heading": "¡Seguí cuentas cuyos mensajes te gustaría ver! Acá tenés algunas sugerencias.", "follow_recommendations.lead": "Los mensajes de las cuentas que seguís aparecerán en orden cronológico en la columna \"Inicio\". No tengás miedo de meter la pata, ¡podés dejar de seguir cuentas fácilmente en cualquier momento!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}", "status.embed": "Insertar", "status.favourite": "Marcar como favorito", + "status.filter": "Filter this post", "status.filtered": "Filtrado", "status.hide": "Ocultar mensaje", "status.history.created": "Creado por {name} el {date}", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index d8854041b39..96f0a59dc48 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -197,6 +197,22 @@ "explore.trending_links": "Noticias", "explore.trending_statuses": "Publicaciones", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Hecho", "follow_recommendations.heading": "¡Sigue a gente que publique cosas que te gusten! Aquí tienes algunas sugerencias.", "follow_recommendations.lead": "Las publicaciones de la gente a la que sigas aparecerán ordenadas cronológicamente en Inicio. No tengas miedo de cometer errores, ¡puedes dejarles de seguir en cualquier momento con la misma facilidad!", @@ -221,9 +237,9 @@ "hashtag.column_settings.tag_mode.any": "Cualquiera de estos", "hashtag.column_settings.tag_mode.none": "Ninguno de estos", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Seguir etiqueta", "hashtag.total_volume": "Volumen total en los últimos {days, plural, one {día} other {{days} días}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Dejar de seguir etiqueta", "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar retoots", "home.column_settings.show_replies": "Mostrar respuestas", @@ -471,6 +487,7 @@ "status.edited_x_times": "Editado {count, plural, one {{count} time} other {{count} veces}}", "status.embed": "Incrustado", "status.favourite": "Favorito", + "status.filter": "Filter this post", "status.filtered": "Filtrado", "status.hide": "Ocultar publicación", "status.history.created": "{name} creó {date}", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 928b870e4f5..5de01d5fc17 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "¡Ups!", "announcement.announcement": "Anuncio", "attachments_list.unprocessed": "(sin procesar)", - "audio.hide": "Hide audio", + "audio.hide": "Ocultar audio", "autosuggest_hashtag.per_week": "{count} por semana", "boost_modal.combo": "Puedes hacer clic en {combo} para saltar este aviso la próxima vez", "bundle_column_error.body": "Algo salió mal al cargar este componente.", @@ -197,6 +197,22 @@ "explore.trending_links": "Noticias", "explore.trending_statuses": "Publicaciones", "explore.trending_tags": "Etiquetas", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Hecho", "follow_recommendations.heading": "¡Sigue a gente que publique cosas que te gusten! Aquí tienes algunas sugerencias.", "follow_recommendations.lead": "Las publicaciones de la gente a la que sigas aparecerán ordenadas cronológicamente en Inicio. No tengas miedo de cometer errores, ¡puedes dejarles de seguir en cualquier momento con la misma facilidad!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}", "status.embed": "Incrustado", "status.favourite": "Favorito", + "status.filter": "Filter this post", "status.filtered": "Filtrado", "status.hide": "Ocultar publicación", "status.history.created": "{name} creó {date}", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 0bac1f3d3f5..6737111fdff 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -197,6 +197,22 @@ "explore.trending_links": "Uudised", "explore.trending_statuses": "Postitused", "explore.trending_tags": "Sildid", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Sängita", "status.favourite": "Lemmik", + "status.filter": "Filter this post", "status.filtered": "Filtreeritud", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 76c520a590a..c8062f00403 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -197,6 +197,22 @@ "explore.trending_links": "Berriak", "explore.trending_statuses": "Bidalketak", "explore.trending_tags": "Traolak", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Egina", "follow_recommendations.heading": "Jarraitu jendea beren bidalketak ikusteko! Hemen dituzu iradokizun batzuk.", "follow_recommendations.lead": "Jarraitzen duzun jendearen bidalketak ordena kronologikoan agertuko dira zure hasierako jarioan. Ez izan akatsak egiteko beldurrik, jendea jarraitzeari uztea erraza da!", @@ -471,6 +487,7 @@ "status.edited_x_times": "{count, plural, one {behin} other {{count} aldiz}} editatua", "status.embed": "Txertatu", "status.favourite": "Gogokoa", + "status.filter": "Filter this post", "status.filtered": "Iragazita", "status.hide": "Hide toot", "status.history.created": "{name} erabiltzaileak sortua {date}", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index c3876e2e332..775f38475ec 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -197,6 +197,22 @@ "explore.trending_links": "اخبار", "explore.trending_statuses": "فرسته‌ها", "explore.trending_tags": "هشتگ‌ها", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "انجام شد", "follow_recommendations.heading": "افرادی را که می‌خواهید فرسته‌هایشان را ببینید پی‌گیری کنید! این‌ها تعدادی پیشنهاد هستند.", "follow_recommendations.lead": "فرسته‌های افرادی که دنبال می‌کنید به ترتیب زمانی در خوراک خانه‌تان نشان داده خواهد شد. از اشتباه کردن نترسید. می‌توانید به همین سادگی در هر زمانی از دنبال کردن افراد دست بکشید!", @@ -471,6 +487,7 @@ "status.edited_x_times": "{count, plural, one {{count} مرتبه} other {{count} مرتبه}} ویرایش شد", "status.embed": "جاسازی", "status.favourite": "پسندیدن", + "status.filter": "Filter this post", "status.filtered": "پالوده", "status.hide": "Hide toot", "status.history.created": "توسط {name} در {date} ایجاد شد", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 46316731a24..0dece0c51d6 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Hups!", "announcement.announcement": "Ilmoitus", "attachments_list.unprocessed": "(käsittelemätön)", - "audio.hide": "Hide audio", + "audio.hide": "Piilota ääni", "autosuggest_hashtag.per_week": "{count} viikossa", "boost_modal.combo": "Ensi kerralla voit ohittaa tämän painamalla {combo}", "bundle_column_error.body": "Jokin meni vikaan komponenttia ladattaessa.", @@ -197,6 +197,22 @@ "explore.trending_links": "Uutiset", "explore.trending_statuses": "Viestit", "explore.trending_tags": "Aihetunnisteet", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Valmis", "follow_recommendations.heading": "Seuraa ihmisiä, joilta haluaisit nähdä julkaisuja! Tässä on muutamia ehdotuksia.", "follow_recommendations.lead": "Seuraamiesi julkaisut näkyvät aikajärjestyksessä kotisyötteessä. Älä pelkää seurata vahingossa, voit lopettaa seuraamisen yhtä helposti!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Muokattu {count, plural, one {{count} aika} other {{count} kertaa}}", "status.embed": "Upota", "status.favourite": "Tykkää", + "status.filter": "Filter this post", "status.filtered": "Suodatettu", "status.hide": "Piilota toot", "status.history.created": "{name} luotu {date}", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index b6b8e5d6f4a..dcac5c880ae 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -197,6 +197,22 @@ "explore.trending_links": "Actualité", "explore.trending_statuses": "Messages", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Terminé", "follow_recommendations.heading": "Suivez les personnes dont vous aimeriez voir les messages ! Voici quelques suggestions.", "follow_recommendations.lead": "Les messages des personnes que vous suivez apparaîtront par ordre chronologique sur votre fil d'accueil. Ne craignez pas de faire des erreurs, vous pouvez arrêter de suivre les gens aussi facilement à tout moment !", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edité {count, plural, one {{count} fois} other {{count} fois}}", "status.embed": "Intégrer", "status.favourite": "Ajouter aux favoris", + "status.filter": "Filter this post", "status.filtered": "Filtré", "status.hide": "Cacher le pouet", "status.history.created": "créé par {name} {date}", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index 2ff93a6e3f2..a53a1cf529d 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -197,6 +197,22 @@ "explore.trending_links": "Nijs", "explore.trending_statuses": "Berjochten", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Klear", "follow_recommendations.heading": "Folgje minsken wer as jo graach berjochten fan sjen wolle! Hjir binne wat suggestjes.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "{count, plural, one {{count} kear} other {{count} kearen}} bewurke", "status.embed": "Ynslute", "status.favourite": "Favorite", + "status.filter": "Filter this post", "status.filtered": "Filtere", "status.hide": "Hide toot", "status.history.created": "{name} makke dit {date}", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 6a7aff2afe2..e05c4a41d08 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -197,6 +197,22 @@ "explore.trending_links": "Nuacht", "explore.trending_statuses": "Postálacha", "explore.trending_tags": "Haischlibeanna", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Déanta", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Curtha in eagar {count, plural, one {{count} uair amháin} two {{count} uair} few {{count} uair} many {{count} uair} other {{count} uair}}", "status.embed": "Embed", "status.favourite": "Rogha", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index cfaa429a7ba..c587292712b 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -197,6 +197,22 @@ "explore.trending_links": "Naidheachdan", "explore.trending_statuses": "Postaichean", "explore.trending_tags": "Tagaichean hais", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Deiseil", "follow_recommendations.heading": "Lean air daoine ma tha thu airson nam postaichean aca fhaicinn! Seo moladh no dà dhut.", "follow_recommendations.lead": "Nochdaidh na postaichean aig na daoine air a leanas tu a-rèir an ama air inbhir na dachaighe agad. Bi dàna on as urrainn dhut sgur de leantainn air daoine cuideachd uair sam bith!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Chaidh a dheasachadh {count, plural, one {{counter} turas} two {{counter} thuras} few {{counter} tursan} other {{counter} turas}}", "status.embed": "Leabaich", "status.favourite": "Cuir ris na h-annsachdan", + "status.filter": "Filter this post", "status.filtered": "Criathraichte", "status.hide": "Falaich am post", "status.history.created": "Chruthaich {name} {date} e", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index adef612c691..0c7baa332ba 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Vaites!", "announcement.announcement": "Anuncio", "attachments_list.unprocessed": "(sen procesar)", - "audio.hide": "Hide audio", + "audio.hide": "Agochar audio", "autosuggest_hashtag.per_week": "{count} por semana", "boost_modal.combo": "Preme {combo} para ignorar isto na seguinte vez", "bundle_column_error.body": "Ocorreu un erro ó cargar este compoñente.", @@ -197,6 +197,22 @@ "explore.trending_links": "Novas", "explore.trending_statuses": "Publicacións", "explore.trending_tags": "Cancelos", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Feito", "follow_recommendations.heading": "Segue a persoas das que queiras ler publicacións! Aqui tes unhas suxestións.", "follow_recommendations.lead": "As publicacións das persoas que segues aparecerán na túa cronoloxía de inicio ordenadas temporalmente. Non teñas medo a equivocarte, podes deixar de seguirlas igual de fácil en calquera momento!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}", "status.embed": "Incrustar", "status.favourite": "Favorito", + "status.filter": "Filter this post", "status.filtered": "Filtrado", "status.hide": "Agochar publicación", "status.history.created": "{name} creouno o {date}", @@ -521,7 +538,7 @@ "timeline_hint.resources.followers": "Seguidoras", "timeline_hint.resources.follows": "Seguindo", "timeline_hint.resources.statuses": "Publicacións antigas", - "trends.counter_by_accounts": "{count, plural, one {{counter} persoa} other {{counter} persoas}} nos últimos {days, plural, one {día} other {{days} días}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} persoa} other {{counter} persoas}} {days, plural, one {no último día} other {nos {days} últimos días}}", "trends.trending_now": "Tendencias actuais", "ui.beforeunload": "O borrador perderase se saes de Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index c0c0b57f144..281b91bc1b8 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -197,6 +197,22 @@ "explore.trending_links": "חדשות", "explore.trending_statuses": "פוסטים", "explore.trending_tags": "האשטאגים", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "בוצע", "follow_recommendations.heading": "עקב/י אחרי אנשים שתרצה/י לראות את חצרוציהם! הנה כמה הצעות.", "follow_recommendations.lead": "חצרוצים מאנשים במעקב יופיעו בסדר כרונולוגי בפיד הבית. אל תחששו מטעויות, אפשר להסיר מעקב באותה הקלות ובכל זמן!", @@ -471,6 +487,7 @@ "status.edited_x_times": "נערך {count, plural, one {פעם {count}} other {{count} פעמים}}", "status.embed": "הטמעה", "status.favourite": "חיבוב", + "status.filter": "Filter this post", "status.filtered": "סונן", "status.hide": "הסתר פוסט", "status.history.created": "{name} יצר/ה {date}", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index 9f35187f22c..d2403c1f586 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Embed", "status.favourite": "Favourite", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 9f2df3c7194..c66de9c0d13 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Učinjeno", "follow_recommendations.heading": "Zaprati osobe čije objave želiš vidjeti! Evo nekoliko prijedloga.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Embed", "status.favourite": "Označi favoritom", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 5b2b981725c..ce25cd103f2 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Hoppá!", "announcement.announcement": "Közlemény", "attachments_list.unprocessed": "(feldolgozatlan)", - "audio.hide": "Hide audio", + "audio.hide": "Hang elrejtése", "autosuggest_hashtag.per_week": "{count} hetente", "boost_modal.combo": "Hogy átugord ezt következő alkalommal, használd {combo}", "bundle_column_error.body": "Valami hiba történt a komponens betöltése közben.", @@ -197,6 +197,22 @@ "explore.trending_links": "Hírek", "explore.trending_statuses": "Bejegyzések", "explore.trending_tags": "Hashtagek", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Kész", "follow_recommendations.heading": "Kövesd azokat, akiknek a bejegyzéseit látni szeretnéd! Itt van néhány javaslat.", "follow_recommendations.lead": "Az általad követettek bejegyzései a saját idővonaladon fognak megjelenni időrendi sorrendben. Ne félj attól, hogy hibázol! A követést bármikor, ugyanilyen könnyen visszavonhatod!", @@ -471,6 +487,7 @@ "status.edited_x_times": "{count, plural, one {{count} alkalommal} other {{count} alkalommal}} szerkesztve", "status.embed": "Beágyazás", "status.favourite": "Kedvenc", + "status.filter": "Filter this post", "status.filtered": "Megszűrt", "status.hide": "Bejegyzés elrejtése", "status.history.created": "{name} létrehozta: {date}", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index f552e345c17..5a18eff04ba 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -197,6 +197,22 @@ "explore.trending_links": "Նորութիւններ", "explore.trending_statuses": "Գրառումներ", "explore.trending_tags": "Պիտակներ", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Աւարտուած է", "follow_recommendations.heading": "Հետեւիր այն մարդկանց, որոնց գրառումները կը ցանկանաս տեսնել։ Ահա մի քանի առաջարկ։", "follow_recommendations.lead": "Քո հոսքում, ժամանակագրական դասաւորութեամբ կը տեսնես այն մարդկանց գրառումները, որոնց հետեւում ես։ Մի վախեցիր սխալուել, դու միշտ կարող ես հեշտութեամբ ապահետեւել մարդկանց։", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Ներդնել", "status.favourite": "Հաւանել", + "status.filter": "Filter this post", "status.filtered": "Զտուած", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 2a081cfbbd8..9c387921287 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -197,6 +197,22 @@ "explore.trending_links": "Berita", "explore.trending_statuses": "Postingan", "explore.trending_tags": "Tagar", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Selesai", "follow_recommendations.heading": "Ikuti orang yang ingin Anda lihat kirimannya! Ini ada beberapa saran.", "follow_recommendations.lead": "Kiriman dari orang yang Anda ikuti akan tampil berdasar waktu di beranda Anda. Jangan takut membuat kesalahan, Anda dapat berhenti mengikuti mereka dengan mudah kapan saja!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Diedit {count, plural, other {{count} kali}}", "status.embed": "Tanam", "status.favourite": "Difavoritkan", + "status.filter": "Filter this post", "status.filtered": "Disaring", "status.hide": "Hide toot", "status.history.created": "{name} membuat pada {date}", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 1d0a909a234..f3bdb040cf1 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Problemo!", "announcement.announcement": "Anunco", "attachments_list.unprocessed": "(neprocedita)", - "audio.hide": "Hide audio", + "audio.hide": "Celez audio", "autosuggest_hashtag.per_week": "{count} dum singla semano", "boost_modal.combo": "Tu povas presar sur {combo} por omisar co en la venonta foyo", "bundle_column_error.body": "Nulo ne functionis dum chargar ca kompozaj.", @@ -197,6 +197,22 @@ "explore.trending_links": "Niuzi", "explore.trending_statuses": "Posti", "explore.trending_tags": "Hashtagi", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Fina", "follow_recommendations.heading": "Sequez personi quo igas posti quon vu volas vidar! Hike esas ula sugestati.", "follow_recommendations.lead": "Posti de personi quon vu sequas kronologiale montresos en vua hemniuzeto. Ne timas igar erori, vu povas desequar personi tam same facila irgatempe!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Modifikesis {count, plural, one {{count} foyo} other {{count} foyi}}", "status.embed": "Eninsertez", "status.favourite": "Favorizar", + "status.filter": "Filter this post", "status.filtered": "Filtrita", "status.hide": "Celez posto", "status.history.created": "{name} kreis ye {date}", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index d74d45a7647..7e3a40fa711 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Úbbs!", "announcement.announcement": "Auglýsing", "attachments_list.unprocessed": "(óunnið)", - "audio.hide": "Hide audio", + "audio.hide": "Fela hljóð", "autosuggest_hashtag.per_week": "{count} á viku", "boost_modal.combo": "Þú getur ýtt á {combo} til að sleppa þessu næst", "bundle_column_error.body": "Eitthvað fór úrskeiðis við að hlaða inn þessari einingu.", @@ -197,6 +197,22 @@ "explore.trending_links": "Fréttir", "explore.trending_statuses": "Færslur", "explore.trending_tags": "Myllumerki", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Lokið", "follow_recommendations.heading": "Fylgstu með fólki sem þú vilt sjá færslur frá! Hér eru nokkrar tillögur.", "follow_recommendations.lead": "Færslur frá fólki sem þú fylgist með eru birtar í tímaröð á heimastreyminu þínu. Þú þarft ekki að hræðast mistök, það er jafn auðvelt að hætta að fylgjast með fólki hvenær sem er!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Breytt {count, plural, one {{count} sinni} other {{count} sinnum}}", "status.embed": "Ívefja", "status.favourite": "Eftirlæti", + "status.filter": "Filter this post", "status.filtered": "Síað", "status.hide": "Fela færslu", "status.history.created": "{name} útbjó {date}", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 7a99d031ece..9f32a0685c5 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Oops!", "announcement.announcement": "Annuncio", "attachments_list.unprocessed": "(non elaborato)", - "audio.hide": "Hide audio", + "audio.hide": "Nascondi audio", "autosuggest_hashtag.per_week": "{count} per settimana", "boost_modal.combo": "Puoi premere {combo} per saltare questo passaggio la prossima volta", "bundle_column_error.body": "E' avvenuto un errore durante il caricamento di questo componente.", @@ -197,6 +197,22 @@ "explore.trending_links": "Novità", "explore.trending_statuses": "Post", "explore.trending_tags": "Hashtag", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Fatto", "follow_recommendations.heading": "Segui le persone da cui vuoi vedere i messaggi! Ecco alcuni suggerimenti.", "follow_recommendations.lead": "I messaggi da persone che segui verranno visualizzati in ordine cronologico nel tuo home feed. Non abbiate paura di commettere errori, potete smettere di seguire le persone altrettanto facilmente in qualsiasi momento!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Modificato {count, plural, one {{count} volta} other {{count} volte}}", "status.embed": "Incorpora", "status.favourite": "Apprezzato", + "status.filter": "Filter this post", "status.filtered": "Filtrato", "status.hide": "Nascondi toot", "status.history.created": "{name} ha creato {date}", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 070248d10f4..55cb2eb93d1 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -197,6 +197,22 @@ "explore.trending_links": "ニュース", "explore.trending_statuses": "投稿", "explore.trending_tags": "ハッシュタグ", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "完了", "follow_recommendations.heading": "投稿を見たい人をフォローしてください!ここにおすすめがあります。", "follow_recommendations.lead": "あなたがフォローしている人の投稿は、ホームフィードに時系列で表示されます。いつでも簡単に解除できるので、気軽にフォローしてみてください!", @@ -471,6 +487,7 @@ "status.edited_x_times": "{count}回編集", "status.embed": "埋め込み", "status.favourite": "お気に入り", + "status.filter": "Filter this post", "status.filtered": "フィルターされました", "status.hide": "トゥートを非表示", "status.history.created": "{name}さんが{date}に作成", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index bafaca65e66..c6c72b6ced8 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "ჩართვა", "status.favourite": "ფავორიტი", + "status.filter": "Filter this post", "status.filtered": "ფილტრირებული", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index ff93fc968c0..035ec7c841b 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Tisuffaɣ", "explore.trending_tags": "Ihacṭagen", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Immed", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Seddu", "status.favourite": "Rnu ɣer yismenyifen", + "status.filter": "Filter this post", "status.filtered": "Yettwasizdeg", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index f15dc88a0e8..edcf0650ce3 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Embеd", "status.favourite": "Таңдаулы", + "status.filter": "Filter this post", "status.filtered": "Фильтрленген", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json index 1e81ab32a19..3d2e0a68d1a 100644 --- a/app/javascript/mastodon/locales/kn.json +++ b/app/javascript/mastodon/locales/kn.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Embed", "status.favourite": "Favourite", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index d8eca4ee0b8..e5dfc76892e 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "앗!", "announcement.announcement": "공지사항", "attachments_list.unprocessed": "(처리 안 됨)", - "audio.hide": "Hide audio", + "audio.hide": "소리 숨기기", "autosuggest_hashtag.per_week": "주간 {count}회", "boost_modal.combo": "다음엔 {combo}를 눌러서 이 과정을 건너뛸 수 있습니다", "bundle_column_error.body": "컴포넌트를 불러오는 과정에서 문제가 발생했습니다.", @@ -197,6 +197,22 @@ "explore.trending_links": "소식", "explore.trending_statuses": "게시물", "explore.trending_tags": "해시태그", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "완료", "follow_recommendations.heading": "게시물을 받아 볼 사람들을 팔로우 하세요! 여기 몇몇의 추천이 있습니다.", "follow_recommendations.lead": "당신이 팔로우 하는 사람들의 게시물이 시간순으로 정렬되어 당신의 홈 피드에 표시될 것입니다. 실수를 두려워 하지 마세요, 언제든지 쉽게 팔로우 취소를 할 수 있습니다!", @@ -471,6 +487,7 @@ "status.edited_x_times": "{count}번 수정됨", "status.embed": "공유하기", "status.favourite": "좋아요", + "status.filter": "Filter this post", "status.filtered": "필터로 걸러짐", "status.hide": "툿 숨기기", "status.history.created": "{name} 님이 {date}에 생성함", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index 740bcd917c4..27033efbfa4 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -17,28 +17,28 @@ "account.follow": "Bişopîne", "account.followers": "Şopîner", "account.followers.empty": "Kesekî hin ev bikarhêner neşopandiye.", - "account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}", + "account.followers_counter": "{count, plural, one {{counter} Şopîner} other {{counter} Şopîner}}", "account.following": "Dişopîne", "account.following_counter": "{count, plural, one {{counter} Dişopîne} other {{counter} Dişopîne}}", "account.follows.empty": "Ev bikarhêner hin kesekî heya niha neşopandiye.", "account.follows_you": "Te dişopîne", "account.hide_reblogs": "Bilindkirinên ji @{name} veşêre", - "account.joined": "Tevlîbû di {date} de", + "account.joined": "Di {date} de tevlî bû", "account.link_verified_on": "Xwedaniya li vê girêdanê di {date} de hatiye kontrolkirin", "account.locked_info": "Rewşa vê ajimêrê wek kilît kirî hatiye saz kirin. Xwedî yê ajimêrê, kesên vê bişopîne bi dest vekolin dike.", "account.media": "Medya", "account.mention": "Qal @{name} bike", "account.moved_to": "{name} hate livandin bo:", - "account.mute": "@{name} Bêdeng bike", + "account.mute": "@{name} bêdeng bike", "account.mute_notifications": "Agahdariyan ji @{name} bêdeng bike", "account.muted": "Bêdengkirî", "account.posts": "Şandî", "account.posts_with_replies": "Şandî û bersiv", - "account.report": "@{name} Ragihîne", + "account.report": "@{name} ragihîne", "account.requested": "Li benda erêkirinê ye. Ji bo betal kirina daxwazê pêl bikin", "account.share": "Profîla @{name} parve bike", "account.show_reblogs": "Bilindkirinên ji @{name} nîşan bike", - "account.statuses_counter": "{count, plural,one {{counter} şandî}other {{counter} şandî}}", + "account.statuses_counter": "{count, plural,one {{counter} Şandî}other {{counter} Şandî}}", "account.unblock": "Astengê li ser @{name} rake", "account.unblock_domain": "Astengê li ser navperê {domain} rake", "account.unblock_short": "Astengiyê rake", @@ -59,7 +59,7 @@ "alert.unexpected.title": "Wey li min!", "announcement.announcement": "Daxuyanî", "attachments_list.unprocessed": "(bêpêvajo)", - "audio.hide": "Hide audio", + "audio.hide": "Dengê veşêre", "autosuggest_hashtag.per_week": "Her hefte {count}", "boost_modal.combo": "Ji bo derbas bî carekî din de pêlê {combo} bike", "bundle_column_error.body": "Di dema barkirina vê hêmanê de tiştek çewt çê bû.", @@ -76,12 +76,12 @@ "column.domain_blocks": "Navperên astengkirî", "column.favourites": "Bijarte", "column.follow_requests": "Daxwazên şopandinê", - "column.home": "Serrûpel", + "column.home": "Rûpela sereke", "column.lists": "Rêzok", "column.mutes": "Bikarhênerên bêdengkirî", "column.notifications": "Agahdarî", "column.pins": "Şandiya derzîkirî", - "column.public": "Demnameyê federalîkirî", + "column.public": "Demnameya giştî", "column_back_button.label": "Vegere", "column_header.hide_settings": "Sazkariyan veşêre", "column_header.moveLeft_settings": "Stûnê bilivîne bo çepê", @@ -168,12 +168,12 @@ "empty_column.account_timeline": "Li vir şandî tune!", "empty_column.account_unavailable": "Profîl nayê peydakirin", "empty_column.blocks": "Te tu bikarhêner asteng nekiriye.", - "empty_column.bookmarked_statuses": "Hîn tu peyamên şûnpelkirî tuneye. Gava ku hûn yek şûnpel bikin, ew ê li vir xûya bike.", + "empty_column.bookmarked_statuses": "Hîn tu peyamên te yên şûnpelkirî tune ne. Dema ku tu yekî şûnpel bikî, ew ê li vir xuya bibe.", "empty_column.community": "Demnameya herêmî vala ye. Tiştek ji raya giştî re binivsînin da ku rûpel biherike!", - "empty_column.direct": "Hêj peyameke te yê rasterast tuneye. Gava ku tu yekî bişeynî an jî bigirî, ew ê li vir xûya bike.", + "empty_column.direct": "Hîn peyamên te yên rasterast tune ne. Dema ku tu yekî bişînî an jî wergirî, ew ê li vir xuya bibe.", "empty_column.domain_blocks": "Hê jî navperên hatine asteng kirin tune ne.", "empty_column.explore_statuses": "Tiştek niha di rojevê de tune. Paşê vegere!", - "empty_column.favourited_statuses": "Hîn tu peyamên te yên bijare tunene. Gava ku te yekî bijart, ew ê li vir xûya bike.", + "empty_column.favourited_statuses": "Hîn tu peyamên te yên bijarte tune ne. Dema ku te yekî bijart, ew ê li vir xuya bibe.", "empty_column.favourites": "Hîn tu kes vê peyamê nebijartiye. Gava ku hin kes bijartin, ew ê li vir xûya bikin.", "empty_column.follow_recommendations": "Wusa dixuye ku ji bo we tu pêşniyar nehatine çêkirin. Hûn dikarin lêgerînê bikarbînin da ku li kesên ku hûn nas dikin bigerin an hashtagên trendî bigerin.", "empty_column.follow_requests": "Hê jî daxwaza şopandinê tunne ye. Dema daxwazek hat, yê li vir were nîşan kirin.", @@ -181,7 +181,7 @@ "empty_column.home": "Demnameya mala we vala ye! Ji bona tijîkirinê bêtir mirovan bişopînin. {suggestions}", "empty_column.home.suggestions": "Hinek pêşniyaran bibîne", "empty_column.list": "Di vê rêzokê de hîn tiştek tune ye. Gava ku endamên vê rêzokê peyamên nû biweşînin, ew ê li vir xuya bibin.", - "empty_column.lists": "Hêj qet rêzokê te tunne ye. Dema yek peyda bû, yê li vir were nîşan kirin.", + "empty_column.lists": "Hîn tu rêzokên te tune ne. Dema yekî çê bikî, ew ê li vir xuya bibe.", "empty_column.mutes": "Te tu bikarhêner bêdeng nekiriye.", "empty_column.notifications": "Hêj hişyariyên te tunene. Dema ku mirovên din bi we re têkilî danîn, hûn ê wê li vir bibînin.", "empty_column.public": "Li vir tiştekî tuneye! Ji raya giştî re tiştekî binivîsîne, an ji bo tijîkirinê ji rajekerên din bikarhêneran bi destan bişopînin", @@ -197,6 +197,22 @@ "explore.trending_links": "Nûçe", "explore.trending_statuses": "Şandî", "explore.trending_tags": "Hashtag", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Qediya", "follow_recommendations.heading": "Mirovên ku tu dixwazî ji wan peyaman bibînî bişopîne! Hin pêşnîyar li vir in.", "follow_recommendations.lead": "Li gorî rêza kronolojîkî peyamên mirovên ku tu dişopînî dê demnameya te de xûya bike. Ji xeletiyan netirse, bi awayekî hêsan her wextî tu dikarî dev ji şopandinê berdî!", @@ -243,10 +259,10 @@ "keyboard_shortcuts.enter": "Şandiyê veke", "keyboard_shortcuts.favourite": "Şandiya bijarte", "keyboard_shortcuts.favourites": "Rêzokên bijarte veke", - "keyboard_shortcuts.federated": "Demnameyê federalîkirî veke", + "keyboard_shortcuts.federated": "Demnameya giştî veke", "keyboard_shortcuts.heading": "Kurterêyên klavyeyê", "keyboard_shortcuts.home": "Demnameyê veke", - "keyboard_shortcuts.hotkey": "Bişkoka kurterê", + "keyboard_shortcuts.hotkey": "Kurte bişkok", "keyboard_shortcuts.legend": "Vê çîrokê nîşan bike", "keyboard_shortcuts.local": "Demnameya herêmî veke", "keyboard_shortcuts.mention": "Qala nivîskarî/ê bike", @@ -272,7 +288,7 @@ "lightbox.next": "Pêş", "lightbox.previous": "Paş", "limited_account_hint.action": "Bi heman awayî profîlê nîşan bide", - "limited_account_hint.title": "Ev profîl ji aliyê çavêriya li ser rajekarê te hatiye veşartin.", + "limited_account_hint.title": "Ev profîl ji aliyê çavdêriya li ser rajekarê te hatiye veşartin.", "lists.account.add": "Tevlî rêzokê bike", "lists.account.remove": "Ji rêzokê rake", "lists.delete": "Rêzokê jê bibe", @@ -294,7 +310,7 @@ "mute_modal.duration": "Dem", "mute_modal.hide_notifications": "Agahdariyan ji ev bikarhêner veşêre?", "mute_modal.indefinite": "Nediyar", - "navigation_bar.apps": "Sepana mobîl", + "navigation_bar.apps": "Sepana mobayil", "navigation_bar.blocks": "Bikarhênerên astengkirî", "navigation_bar.bookmarks": "Şûnpel", "navigation_bar.community_timeline": "Demnameya herêmî", @@ -309,14 +325,14 @@ "navigation_bar.follow_requests": "Daxwazên şopandinê", "navigation_bar.follows_and_followers": "Şopandin û şopîner", "navigation_bar.info": "Derbarê vî rajekarî", - "navigation_bar.keyboard_shortcuts": "Bişkoka kurterê", + "navigation_bar.keyboard_shortcuts": "Kurte bişkok", "navigation_bar.lists": "Rêzok", "navigation_bar.logout": "Derkeve", "navigation_bar.mutes": "Bikarhênerên bêdengkirî", "navigation_bar.personal": "Kesanî", "navigation_bar.pins": "Şandiya derzîkirî", "navigation_bar.preferences": "Sazkarî", - "navigation_bar.public_timeline": "Demnameyê federalîkirî", + "navigation_bar.public_timeline": "Demnameya giştî", "navigation_bar.security": "Ewlehî", "notification.admin.report": "{name} hate ragihandin {target}", "notification.admin.sign_up": "{name} tomar bû", @@ -387,7 +403,7 @@ "privacy.unlisted.short": "Nerêzok", "refresh": "Nû bike", "regeneration_indicator.label": "Tê barkirin…", - "regeneration_indicator.sublabel": "Mala te da tê amedekirin!", + "regeneration_indicator.sublabel": "Naveroka rûpela sereke ya te tê amedekirin!", "relative_time.days": "{number}r", "relative_time.full.days": "{number, plural, one {# roj} other {# roj}} berê", "relative_time.full.hours": "{number, plural, one {# demjimêr} other {# demjimêr}} berê", @@ -412,7 +428,7 @@ "report.close": "Qediya", "report.comment.title": "Tiştek din heye ku tu difikirî ku divê em zanibin?", "report.forward": "Biçe bo {target}", - "report.forward_hint": "Ajimêr ji rajekarek din da ne. Tu kopîyeka anonîm ya raporê bişînî li wur?", + "report.forward_hint": "Ajimêr ji rajekareke din e. Tu kopîyeka anonîm ya raporê bişînî wir jî?", "report.mute": "Bêdeng bike", "report.mute_explanation": "Tê yê şandiyên wan nebînî. Ew hin jî dikarin te bişopînin û şandiyên te bibînin û wê nizanibin ku ew hatine bêdengkirin.", "report.next": "Pêş", @@ -437,7 +453,7 @@ "report.thanks.title_actionable": "Spas ji bo ragihandina te, em ê binirxînin.", "report.unfollow": "@{name} neşopîne", "report.unfollow_explanation": "Tê vê ajimêrê dişopînî. Ji bo ku êdî şandiyên wan di rojeva xwe de nebînî, wan neşopîne.", - "report_notification.attached_statuses": "{count, plural,one {{count} şandî} other {{count} şandî }} pêvekirî", + "report_notification.attached_statuses": "{count, plural,one {{count} şandî} other {{count} şandî}} pêvekirî", "report_notification.categories.other": "Ên din", "report_notification.categories.spam": "Nexwestî (Spam)", "report_notification.categories.violation": "Binpêkirina rêzîkê", @@ -471,6 +487,7 @@ "status.edited_x_times": "{count, plural, one {{count} car} other {{count} car}} hate serrastkirin", "status.embed": "Hedimandî", "status.favourite": "Bijarte", + "status.filter": "Filter this post", "status.filtered": "Parzûnkirî", "status.hide": "Şandiyê veşêre", "status.history.created": "{name} {date} afirand", @@ -493,13 +510,13 @@ "status.remove_bookmark": "Şûnpêlê jê rake", "status.reply": "Bersivê bide", "status.replyAll": "Mijarê bibersivîne", - "status.report": "{name} gilî bike", + "status.report": "@{name} ragihîne", "status.sensitive_warning": "Naveroka hestiyarî", "status.share": "Parve bike", "status.show_filter_reason": "Bi her awayî nîşan bide", "status.show_less": "Kêmtir nîşan bide", "status.show_less_all": "Ji bo hemîyan kêmtir nîşan bide", - "status.show_more": "Hêj zehftir nîşan bide", + "status.show_more": "Bêtir nîşan bide", "status.show_more_all": "Bêtir nîşan bide bo hemûyan", "status.show_thread": "Mijarê nîşan bide", "status.uncached_media_warning": "Tune ye", @@ -508,7 +525,7 @@ "suggestions.dismiss": "Pêşniyarê paşguh bike", "suggestions.header": "Dibe ku bala te bikşîne…", "tabs_bar.federated_timeline": "Giştî", - "tabs_bar.home": "Serrûpel", + "tabs_bar.home": "Rûpela sereke", "tabs_bar.local_timeline": "Herêmî", "tabs_bar.notifications": "Agahdarî", "tabs_bar.search": "Bigere", diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json index ad0e1ae3162..f6a85a932ee 100644 --- a/app/javascript/mastodon/locales/kw.json +++ b/app/javascript/mastodon/locales/kw.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Gwrys", "follow_recommendations.heading": "Holyewgh tus a vynnowgh gweles postow anedha! Ottomma nebes profyansow.", "follow_recommendations.lead": "Postow a dus a holyewgh a wra omdhiskwedhes omma yn aray termynel yn agas lin dre. Na borthewgh own a gammwul, hwi a yll p'eurpynag anholya tus mar es poran!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Staga", "status.favourite": "Merkya vel drudh", + "status.filter": "Filter this post", "status.filtered": "Sidhlys", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index a3837423007..4e238273e0f 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Embed", "status.favourite": "Favourite", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 60b6e75da3b..1912dd7db13 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Ups!", "announcement.announcement": "Paziņojums", "attachments_list.unprocessed": "(neapstrādāti)", - "audio.hide": "Hide audio", + "audio.hide": "Slēpt audio", "autosuggest_hashtag.per_week": "{count} nedēļā", "boost_modal.combo": "Nospied {combo} lai izlaistu šo nākamreiz", "bundle_column_error.body": "Kaut kas nogāja greizi ielādējot šo komponenti.", @@ -197,6 +197,22 @@ "explore.trending_links": "Jaunumi", "explore.trending_statuses": "Ziņas", "explore.trending_tags": "Tēmturi", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Izpildīts", "follow_recommendations.heading": "Seko cilvēkiem, no kuriem vēlies redzēt ziņas! Šeit ir daži ieteikumi.", "follow_recommendations.lead": "Ziņas no cilvēkiem, kuriem seko, mājas plūsmā tiks parādītas hronoloģiskā secībā. Nebaidies kļūdīties, tu tikpat viegli vari pārtraukt sekot cilvēkiem jebkurā laikā!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Rediģēts {count, plural, one {{count} reize} other {{count} reizes}}", "status.embed": "Iestrādāt", "status.favourite": "Iecienītā", + "status.filter": "Filter this post", "status.filtered": "Filtrēts", "status.hide": "Slēpt", "status.history.created": "{name} izveidots {date}", diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json index a00e1762c0f..d782dff6496 100644 --- a/app/javascript/mastodon/locales/mk.json +++ b/app/javascript/mastodon/locales/mk.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Embed", "status.favourite": "Favourite", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 2e4aac762be..37969475d5d 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "പൂര്‍ത്തിയായീ", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "ഉൾച്ചേർക്കുക", "status.favourite": "പ്രിയപ്പെട്ടത്", + "status.filter": "Filter this post", "status.filtered": "ഫിൽട്ടർ ചെയ്‌തു", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index 3ce4fc0f973..09eaea3f9ef 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Embed", "status.favourite": "Favourite", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 70683ef42ad..6a1302329d4 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Selesai", "follow_recommendations.heading": "Ikuti orang yang anda ingin lihat hantarannya! Di sini ada beberapa cadangan.", "follow_recommendations.lead": "Hantaran daripada orang yang anda ikuti akan muncul dalam susunan kronologi di suapan rumah anda. Jangan takut melakukan kesilapan, anda boleh nyahikuti orang dengan mudah pada bila-bila masa!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Benaman", "status.favourite": "Kegemaran", + "status.filter": "Filter this post", "status.filtered": "Ditapis", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 64c747aa16a..b48ebbc1696 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Oeps!", "announcement.announcement": "Mededeling", "attachments_list.unprocessed": "(niet verwerkt)", - "audio.hide": "Hide audio", + "audio.hide": "Audio verbergen", "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "Je kunt {combo} klikken om dit de volgende keer over te slaan", "bundle_column_error.body": "Tijdens het laden van dit onderdeel is er iets fout gegaan.", @@ -197,6 +197,22 @@ "explore.trending_links": "Nieuws", "explore.trending_statuses": "Berichten", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Klaar", "follow_recommendations.heading": "Volg mensen waarvan je graag berichten wil zien! Hier zijn enkele aanbevelingen.", "follow_recommendations.lead": "Berichten van mensen die je volgt zullen in chronologische volgorde onder start verschijnen. Wees niet bang om hierin fouten te maken, want je kunt mensen op elk moment net zo eenvoudig ontvolgen!", @@ -471,6 +487,7 @@ "status.edited_x_times": "{count, plural, one {{count} keer} other {{count} keer}} bewerkt", "status.embed": "Insluiten", "status.favourite": "Favoriet", + "status.filter": "Filter this post", "status.filtered": "Gefilterd", "status.hide": "Bericht verbergen", "status.history.created": "{name} plaatste dit {date}", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 3f6a1747b66..33c06e11e9d 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -197,6 +197,22 @@ "explore.trending_links": "Nyheiter", "explore.trending_statuses": "Innlegg", "explore.trending_tags": "Emneknaggar", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Ferdig", "follow_recommendations.heading": "Fylg folk du ønsker å sjå innlegg frå! Her er nokre forslag.", "follow_recommendations.lead": "Innlegg fra mennesker du følger vil vises i kronologisk rekkefølge på hjemmefeed. Ikke vær redd for å gjøre feil, du kan slutte å følge folk like enkelt som alt!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Redigert {count, plural, one {{count} gong} other {{count} gonger}}", "status.embed": "Bygg inn", "status.favourite": "Favoritt", + "status.filter": "Filter this post", "status.filtered": "Filtrert", "status.hide": "Gøym innlegg", "status.history.created": "{name} oppretta {date}", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index b0b7f76bcda..6e2783713f3 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -197,6 +197,22 @@ "explore.trending_links": "Nyheter", "explore.trending_statuses": "Innlegg", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Utført", "follow_recommendations.heading": "Følg folk du ønsker å se innlegg fra! Her er noen forslag.", "follow_recommendations.lead": "Innlegg fra mennesker du følger vil vises i kronologisk rekkefølge på hjemmefeed. Ikke vær redd for å gjøre feil, du kan slutte å følge folk like enkelt som alt!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Bygge inn", "status.favourite": "Lik", + "status.filter": "Filter this post", "status.filtered": "Filtrert", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index d9d3b20a1bd..fa3ef396769 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -197,6 +197,22 @@ "explore.trending_links": "Novèlas", "explore.trending_statuses": "Publicacions", "explore.trending_tags": "Etiquetas", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Acabat", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Modificat {count, plural, un {{count} còp} other {{count} còps}}", "status.embed": "Embarcar", "status.favourite": "Apondre als favorits", + "status.filter": "Filter this post", "status.filtered": "Filtrat", "status.hide": "Hide toot", "status.history.created": "{name} o creèt lo {date}", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index bc5e9d91ca6..c77444bffc7 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Embed", "status.favourite": "Favourite", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 5ba83f01ffc..04b0868ee1b 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "O nie!", "announcement.announcement": "Ogłoszenie", "attachments_list.unprocessed": "(nieprzetworzone)", - "audio.hide": "Hide audio", + "audio.hide": "Ukryj dźwięk", "autosuggest_hashtag.per_week": "{count} co tydzień", "boost_modal.combo": "Naciśnij {combo}, aby pominąć to następnym razem", "bundle_column_error.body": "Coś poszło nie tak podczas ładowania tego składnika.", @@ -197,6 +197,22 @@ "explore.trending_links": "Aktualności", "explore.trending_statuses": "Posty", "explore.trending_tags": "Hasztagi", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Gotowe", "follow_recommendations.heading": "Śledź ludzi, których wpisy chcesz czytać. Oto kilka propozycji.", "follow_recommendations.lead": "Wpisy osób, które śledzisz będą pojawiać się w porządku chronologicznym na stronie głównej. Nie bój się popełniać błędów, możesz bez problemu przestać śledzić każdego w każdej chwili!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edytowano {count, plural, one {{count} raz} other {{count} razy}}", "status.embed": "Osadź", "status.favourite": "Dodaj do ulubionych", + "status.filter": "Filter this post", "status.filtered": "Filtrowany(-a)", "status.hide": "Schowaj toota", "status.history.created": "{name} utworzył(a) {date}", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 3fd4c822ee7..ab1443eceaa 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -197,6 +197,22 @@ "explore.trending_links": "Notícias", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Salvar", "follow_recommendations.heading": "Siga pessoas que você gostaria de acompanhar! Aqui estão algumas sugestões.", "follow_recommendations.lead": "Toots de pessoas que você segue aparecerão em ordem cronológica na página inicial. Não tenha medo de cometer erros, você pode facilmente deixar de seguir a qualquer momento!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Editado {count, plural, one {{count} hora} other {{count} vezes}}", "status.embed": "Incorporar", "status.favourite": "Favoritar", + "status.filter": "Filter this post", "status.filtered": "Filtrado", "status.hide": "Hide toot", "status.history.created": "{name} criou {date}", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 0764920e848..ef097b38039 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Bolas!", "announcement.announcement": "Anúncio", "attachments_list.unprocessed": "(não processado)", - "audio.hide": "Hide audio", + "audio.hide": "Ocultar áudio", "autosuggest_hashtag.per_week": "{count} por semana", "boost_modal.combo": "Pode clicar {combo} para não voltar a ver", "bundle_column_error.body": "Algo de errado aconteceu enquanto este componente era carregado.", @@ -197,6 +197,22 @@ "explore.trending_links": "Notícias", "explore.trending_statuses": "Publicações", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Concluído", "follow_recommendations.heading": "Siga pessoas das quais gostaria de ver publicações! Aqui estão algumas sugestões.", "follow_recommendations.lead": "As publicações das pessoas que segue serão exibidos em ordem cronológica na sua página inicial. Não tenha medo de cometer erros, você pode deixar de seguir as pessoas tão facilmente a qualquer momento!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Editado {count, plural,one {{count} vez} other {{count} vezes}}", "status.embed": "Incorporar", "status.favourite": "Adicionar aos favoritos", + "status.filter": "Filter this post", "status.filtered": "Filtrada", "status.hide": "Esconder publicação", "status.history.created": "{name} criado em {date}", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index e60ce2220e1..ff5ec9b2afd 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Terminat", "follow_recommendations.heading": "Urmărește persoanele ale căror postări te-ar interesa! Iată câteva sugestii.", "follow_recommendations.lead": "Postările de la persoanele la care te-ai abonat vor apărea în ordine cronologică în cronologia principală. Nu-ți fie teamă să faci greșeli, poți să te dezabonezi oricând de la ei la fel de ușor!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Înglobează", "status.favourite": "Favorite", + "status.filter": "Filter this post", "status.filtered": "Sortate", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index c0bfb8b7965..e53088e395f 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Упс!", "announcement.announcement": "Объявление", "attachments_list.unprocessed": "(не обработан)", - "audio.hide": "Hide audio", + "audio.hide": "Скрыть аудио", "autosuggest_hashtag.per_week": "{count} / неделю", "boost_modal.combo": "{combo}, чтобы пропустить это в следующий раз", "bundle_column_error.body": "Что-то пошло не так при загрузке этого компонента.", @@ -197,6 +197,22 @@ "explore.trending_links": "Новости", "explore.trending_statuses": "Посты", "explore.trending_tags": "Хэштеги", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Готово", "follow_recommendations.heading": "Подпишитесь на людей, чьи посты вы бы хотели видеть. Вот несколько предложений.", "follow_recommendations.lead": "Посты от людей, на которых вы подписаны, будут отображаться в вашей домашней ленте в хронологическом порядке. Не бойтесь ошибиться — вы так же легко сможете отписаться от них в любое время!", @@ -471,10 +487,11 @@ "status.edited_x_times": "{count, plural, one {{count} изменение} many {{count} изменений} other {{count} изменения}}", "status.embed": "Встроить на свой сайт", "status.favourite": "В избранное", + "status.filter": "Filter this post", "status.filtered": "Отфильтровано", "status.hide": "Скрыть пост", "status.history.created": "{name} создал {date}", - "status.history.edited": "{name} отредактировал {date}", + "status.history.edited": "{name} отредактировал(а) {date}", "status.load_more": "Загрузить остальное", "status.media_hidden": "Файл скрыт", "status.mention": "Упомянуть @{name}", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index 3a5faf272a3..2ebda63cde2 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Embed", "status.favourite": "Favourite", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 93a7ea76938..7482d15fe2e 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Fatu", "follow_recommendations.heading": "Sighi gente de chie boles bìdere is publicatziones! Càstia custos cussìgios.", "follow_recommendations.lead": "Is messàgios de gente a sa chi ses sighende ant a èssere ammustrados in òrdine cronològicu in sa lìnia de tempus printzipale tua. Non timas de fàghere errores, acabbare de sighire gente est fàtzile in cale si siat momentu!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Afissa", "status.favourite": "Preferidos", + "status.filter": "Filter this post", "status.filtered": "Filtradu", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 18342b7cec7..170c34b5779 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -197,6 +197,22 @@ "explore.trending_links": "පුවත්", "explore.trending_statuses": "තනතුරු", "explore.trending_tags": "හැෂ් ටැග්", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "කළා", "follow_recommendations.heading": "ඔබ පළ කිරීම් බැලීමට කැමති පුද්ගලයින් අනුගමනය කරන්න! මෙන්න යෝජනා කිහිපයක්.", "follow_recommendations.lead": "ඔබ අනුගමන කරන පුද්ගලයින්ගේ පළ කිරීම් ඔබගේ නිවසේ සංග්‍රහයේ කාලානුක්‍රමික අනුපිළිවෙලට පෙන්වනු ඇත. වැරදි කිරීමට බිය නොවන්න, ඔබට ඕනෑම වේලාවක පහසුවෙන් මිනිසුන් අනුගමනය කළ නොහැක!", @@ -471,6 +487,7 @@ "status.edited_x_times": "සංස්කරණය කළා {count, plural, one {{count} කාලය} other {{count} වාර}}", "status.embed": "එබ්බවූ", "status.favourite": "ප්‍රියතම", + "status.filter": "Filter this post", "status.filtered": "පෙරන ලද", "status.hide": "Hide toot", "status.history.created": "{name} නිර්මාණය {date}", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index aff5960d90b..8aeb2aec632 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -197,6 +197,22 @@ "explore.trending_links": "Novinky", "explore.trending_statuses": "Príspevky", "explore.trending_tags": "Haštagy", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Hotovo", "follow_recommendations.heading": "Následuj ľudí od ktorých by si chcel/a vidieť príspevky! Tu sú nejaké návrhy.", "follow_recommendations.lead": "Príspevky od ľudi ktorých sledujete sa zobrazia v chronologickom poradí na Vašej nástenke. Nebojte sa spraviť chyby, vždy môžete zrušiť sledovanie konkrétnych ľudí!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Vložiť", "status.favourite": "Páči sa mi", + "status.filter": "Filter this post", "status.filtered": "Filtrované", "status.hide": "Skry príspevok", "status.history.created": "{name} vytvoril/a {date}", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index af736ed5959..c793d9de805 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Uups!", "announcement.announcement": "Objava", "attachments_list.unprocessed": "(neobdelano)", - "audio.hide": "Hide audio", + "audio.hide": "Skrij zvok", "autosuggest_hashtag.per_week": "{count} na teden", "boost_modal.combo": "Če želite preskočiti to, lahko pritisnete {combo}", "bundle_column_error.body": "Med nalaganjem te komponente je prišlo do napake.", @@ -197,6 +197,22 @@ "explore.trending_links": "Novice", "explore.trending_statuses": "Objave", "explore.trending_tags": "Ključniki", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Opravljeno", "follow_recommendations.heading": "Sledite osebam, katerih objave želite videti! Tukaj je nekaj predlogov.", "follow_recommendations.lead": "Objave oseb, ki jim sledite, se bodo prikazale v kronološkem zaporedju v vašem domačem viru. Ne bojte se storiti napake, osebam enako enostavno nehate slediti kadar koli!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Urejeno {count, plural, one {#-krat} two {#-krat} few {#-krat} other {#-krat}}", "status.embed": "Vgradi", "status.favourite": "Priljubljen", + "status.filter": "Filter this post", "status.filtered": "Filtrirano", "status.hide": "Skrij tut", "status.history.created": "{name}: ustvarjeno {date}", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 4f43cec0bdb..0b7fabb453f 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Hëm!", "announcement.announcement": "Lajmërim", "attachments_list.unprocessed": "(e papërpunuar)", - "audio.hide": "Hide audio", + "audio.hide": "Fshihe audion", "autosuggest_hashtag.per_week": "{count} për javë", "boost_modal.combo": "Që kjo të anashkalohet herës tjetër, mund të shtypni {combo}", "bundle_column_error.body": "Diç shkoi ters teksa ngarkohej ky përbërës.", @@ -197,6 +197,22 @@ "explore.trending_links": "Lajme", "explore.trending_statuses": "Postime", "explore.trending_tags": "Hashtagë", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "U bë", "follow_recommendations.heading": "Ndiqni persona prej të cilëve doni të shihni postime! Ja ca sugjerime.", "follow_recommendations.lead": "Postimet prej personash që ndiqni do të shfaqen në rend kohor te prurja juaj kryesore. Mos kini frikë të bëni gabime, mund të ndalni po aq kollaj ndjekjen e dikujt, në çfarëdo kohe!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Përpunuar {count, plural, one {{count} herë} other {{count} herë}}", "status.embed": "Trupëzim", "status.favourite": "I parapëlqyer", + "status.filter": "Filter this post", "status.filtered": "I filtruar", "status.hide": "Fshihe mesazhin", "status.history.created": "{name} u krijua më {date}", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 2f35ba2c49c..8e955727d6d 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Ugradi na sajt", "status.favourite": "Omiljeno", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index d9d67edf045..442e7ee3d80 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Угради на сајт", "status.favourite": "Омиљено", + "status.filter": "Filter this post", "status.filtered": "Филтрирано", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 9e3b9cf376e..a150deadb63 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Hoppsan!", "announcement.announcement": "Meddelande", "attachments_list.unprocessed": "(obearbetad)", - "audio.hide": "Hide audio", + "audio.hide": "Dölj audio", "autosuggest_hashtag.per_week": "{count} per vecka", "boost_modal.combo": "Du kan trycka {combo} för att slippa detta nästa gång", "bundle_column_error.body": "Något gick fel medan denna komponent laddades.", @@ -197,6 +197,22 @@ "explore.trending_links": "Nyheter", "explore.trending_statuses": "Inlägg", "explore.trending_tags": "Hashtaggar", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Klar", "follow_recommendations.heading": "Följ personer som du skulle vilja se inlägg från! Här finns det några förslag.", "follow_recommendations.lead": "Inlägg från personer du följer kommer att dyka upp i kronologisk ordning i ditt hem-flöde. Var inte rädd för att göra misstag, du kan sluta följa människor lika enkelt när som helst!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Redigerad {count, plural, one {{count} gång} other {{count} gånger}}", "status.embed": "Bädda in", "status.favourite": "Favorit", + "status.filter": "Filter this post", "status.filtered": "Filtrerat", "status.hide": "Hide toot", "status.history.created": "{name} skapade {date}", diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json index bc5e9d91ca6..c77444bffc7 100644 --- a/app/javascript/mastodon/locales/szl.json +++ b/app/javascript/mastodon/locales/szl.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Embed", "status.favourite": "Favourite", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 021315b332a..728cfac114d 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "கிடத்து", "status.favourite": "விருப்பத்துக்குகந்த", + "status.filter": "Filter this post", "status.filtered": "வடிகட்டு", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index 77232ff5fb3..beba8e33325 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Embed", "status.favourite": "Favourite", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index be49846cb09..d5cc02b1045 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "ఎంబెడ్", "status.favourite": "ఇష్టపడు", + "status.filter": "Filter this post", "status.filtered": "వడకట్టబడిన", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index e901b96470b..38539d512c5 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "อุปส์!", "announcement.announcement": "ประกาศ", "attachments_list.unprocessed": "(ยังไม่ได้ประมวลผล)", - "audio.hide": "Hide audio", + "audio.hide": "ซ่อนเสียง", "autosuggest_hashtag.per_week": "{count} ต่อสัปดาห์", "boost_modal.combo": "คุณสามารถกด {combo} เพื่อข้ามสิ่งนี้ในครั้งถัดไป", "bundle_column_error.body": "มีบางอย่างผิดพลาดขณะโหลดส่วนประกอบนี้", @@ -197,6 +197,22 @@ "explore.trending_links": "ข่าว", "explore.trending_statuses": "โพสต์", "explore.trending_tags": "แฮชแท็ก", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "เสร็จสิ้น", "follow_recommendations.heading": "ติดตามผู้คนที่คุณต้องการเห็นโพสต์! นี่คือข้อเสนอแนะบางส่วน", "follow_recommendations.lead": "โพสต์จากผู้คนที่คุณติดตามจะแสดงตามลำดับเวลาในฟีดหน้าแรกของคุณ อย่ากลัวที่จะทำผิดพลาด คุณสามารถเลิกติดตามผู้คนได้อย่างง่ายดายเมื่อใดก็ตาม!", @@ -471,6 +487,7 @@ "status.edited_x_times": "แก้ไข {count, plural, other {{count} ครั้ง}}", "status.embed": "ฝัง", "status.favourite": "ชื่นชอบ", + "status.filter": "Filter this post", "status.filtered": "กรองอยู่", "status.hide": "ซ่อนโพสต์", "status.history.created": "{name} ได้สร้างเมื่อ {date}", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index b69153a62c6..35c888e477b 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -12,7 +12,7 @@ "account.disable_notifications": "@{name} kişisinin gönderi bildirimlerini kapat", "account.domain_blocked": "Alan adı engellendi", "account.edit_profile": "Profili düzenle", - "account.enable_notifications": "@{name} kişisinin gönderi bildirimlerini aç", + "account.enable_notifications": "@{name}'in gönderilerini bana bildir", "account.endorse": "Profilimde öne çıkar", "account.follow": "Takip et", "account.followers": "Takipçi", @@ -20,23 +20,23 @@ "account.followers_counter": "{count, plural, one {{counter} Takipçi} other {{counter} Takipçi}}", "account.following": "Takip Ediliyor", "account.following_counter": "{count, plural, one {{counter} Takip Edilen} other {{counter} Takip Edilen}}", - "account.follows.empty": "Bu kullanıcı henüz kimseyi takip etmiyor.", + "account.follows.empty": "Bu kullanıcı henüz hiçkimseyi takip etmiyor.", "account.follows_you": "Seni takip ediyor", "account.hide_reblogs": "@{name} kişisinin boostlarını gizle", "account.joined": "{date} tarihinde katıldı", "account.link_verified_on": "Bu bağlantının sahipliği {date} tarihinde kontrol edildi", "account.locked_info": "Bu hesabın gizlilik durumu gizli olarak ayarlanmış. Sahibi, onu kimin takip edebileceğini manuel olarak onaylıyor.", "account.media": "Medya", - "account.mention": "@{name} kişisinden bahset", + "account.mention": "@{name}'i an", "account.moved_to": "{name} şuraya taşındı:", - "account.mute": "@{name} adlı kişiyi sessize al", - "account.mute_notifications": "@{name} adlı kişinin bildirimlerini kapat", + "account.mute": "@{name}'i susstur", + "account.mute_notifications": "@{name}'in bildirimlerini sustur", "account.muted": "Susturuldu", "account.posts": "Gönderiler", "account.posts_with_replies": "Gönderiler ve yanıtlar", - "account.report": "@{name} adlı kişiyi bildir", + "account.report": "@{name}'i şikayet et", "account.requested": "Onay bekleniyor. Takip isteğini iptal etmek için tıklayın", - "account.share": "@{name} adlı kişinin profilini paylaş", + "account.share": "@{name}'in profilini paylaş", "account.show_reblogs": "@{name} kişisinin boostlarını göster", "account.statuses_counter": "{count, plural, one {{counter} Gönderi} other {{counter} Gönderi}}", "account.unblock": "@{name} adlı kişinin engelini kaldır", @@ -59,7 +59,7 @@ "alert.unexpected.title": "Hay aksi!", "announcement.announcement": "Duyuru", "attachments_list.unprocessed": "(işlenmemiş)", - "audio.hide": "Hide audio", + "audio.hide": "Sesi gizle", "autosuggest_hashtag.per_week": "Haftada {count}", "boost_modal.combo": "Bir daha ki sefere {combo} tuşuna basabilirsin", "bundle_column_error.body": "Bu bileşen yüklenirken bir şeyler ters gitti.", @@ -197,6 +197,22 @@ "explore.trending_links": "Haberler", "explore.trending_statuses": "Gönderiler", "explore.trending_tags": "Etiketler", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Tamam", "follow_recommendations.heading": "Gönderilerini görmek isteyeceğiniz kişileri takip edin! Burada bazı öneriler bulabilirsiniz.", "follow_recommendations.lead": "Takip ettiğiniz kişilerin gönderileri anasayfa akışınızda kronolojik sırada görünmeye devam edecek. Hata yapmaktan çekinmeyin, kişileri istediğiniz anda kolayca takipten çıkabilirsiniz!", @@ -471,6 +487,7 @@ "status.edited_x_times": "{count, plural, one {{count} kez} other {{count} kez}} düzenlendi", "status.embed": "Gömülü", "status.favourite": "Favorilerine ekle", + "status.filter": "Filter this post", "status.filtered": "Filtrelenmiş", "status.hide": "Gönderiyi sakla", "status.history.created": "{name} oluşturdu {date}", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index 9e72174d10d..c2739e18187 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Embed", "status.favourite": "Favourite", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index bc5e9d91ca6..c77444bffc7 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Embed", "status.favourite": "Favourite", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index e26a73f6274..e1b10445d43 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Ой!", "announcement.announcement": "Оголошення", "attachments_list.unprocessed": "(не оброблено)", - "audio.hide": "Hide audio", + "audio.hide": "Сховати аудіо", "autosuggest_hashtag.per_week": "{count} в тиждень", "boost_modal.combo": "Ви можете натиснути {combo}, щоб пропустити це наступного разу", "bundle_column_error.body": "Щось пішло не так під час завантаження цього компоненту.", @@ -197,6 +197,22 @@ "explore.trending_links": "Новини", "explore.trending_statuses": "Дописи", "explore.trending_tags": "Хештеґи", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Готово", "follow_recommendations.heading": "Підпишіться на людей, чиї дописи ви хочете бачити! Ось деякі пропозиції.", "follow_recommendations.lead": "Дописи від людей, за якими ви стежите, з'являться в хронологічному порядку у вашій домашній стрічці. Не бійся помилятися, ви можете відписатися від людей так само легко в будь-який час!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Відредаговано {count, plural, one {{count} раз} few {{count} рази} many {{counter} разів} other {{counter} разів}}", "status.embed": "Вбудувати", "status.favourite": "Подобається", + "status.filter": "Filter this post", "status.filtered": "Відфільтровано", "status.hide": "Сховати дмух", "status.history.created": "{name} створює {date}", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index be9b8b80d31..19cee9c2a0f 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Embed", "status.favourite": "Favourite", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 016fa6b765c..3dc6db11223 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Ốiii!", "announcement.announcement": "Có gì mới?", "attachments_list.unprocessed": "(chưa xử lí)", - "audio.hide": "Hide audio", + "audio.hide": "Ẩn âm thanh", "autosuggest_hashtag.per_week": "{count} mỗi tuần", "boost_modal.combo": "Nhấn {combo} để bỏ qua bước này", "bundle_column_error.body": "Đã có lỗi xảy ra trong khi tải nội dung này.", @@ -197,6 +197,22 @@ "explore.trending_links": "Tin tức", "explore.trending_statuses": "Tút", "explore.trending_tags": "Hashtag", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Xong", "follow_recommendations.heading": "Theo dõi những người bạn muốn đọc tút của họ! Dưới đây là vài gợi ý.", "follow_recommendations.lead": "Tút từ những người bạn theo dõi sẽ hiện theo thứ tự thời gian trên bảng tin. Đừng ngại, bạn có thể dễ dàng ngưng theo dõi họ bất cứ lúc nào!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Đã sửa {count, plural, other {{count} lần}}", "status.embed": "Nhúng", "status.favourite": "Thích", + "status.filter": "Filter this post", "status.filtered": "Bộ lọc", "status.hide": "Ẩn tút", "status.history.created": "{name} tạo lúc {date}", diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json index e96b64cc438..92201375dd7 100644 --- a/app/javascript/mastodon/locales/zgh.json +++ b/app/javascript/mastodon/locales/zgh.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Done", "follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.", "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Embed", "status.favourite": "Favourite", + "status.filter": "Filter this post", "status.filtered": "Filtered", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index f250aa1b754..9241eeec8a0 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "哎呀!", "announcement.announcement": "公告", "attachments_list.unprocessed": "(未处理)", - "audio.hide": "Hide audio", + "audio.hide": "隐藏音频", "autosuggest_hashtag.per_week": "每星期 {count} 条", "boost_modal.combo": "下次按住 {combo} 即可跳过此提示", "bundle_column_error.body": "载入这个组件时发生了错误。", @@ -110,8 +110,8 @@ "compose_form.publish": "发布", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "保存更改", - "compose_form.sensitive.hide": "{count, plural, one {将媒体标记为敏感内容} other {将媒体标记为敏感内容}}", - "compose_form.sensitive.marked": "{count, plural, one {媒体已被标记为敏感内容} other {媒体已被标记为敏感内容}}", + "compose_form.sensitive.hide": "标记媒体为敏感内容", + "compose_form.sensitive.marked": "媒体已被标记为敏感内容", "compose_form.sensitive.unmarked": "媒体未被标记为敏感内容", "compose_form.spoiler.marked": "移除内容警告", "compose_form.spoiler.unmarked": "添加内容警告", @@ -197,6 +197,22 @@ "explore.trending_links": "最新消息", "explore.trending_statuses": "嘟文", "explore.trending_tags": "话题标签", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "完成", "follow_recommendations.heading": "关注你感兴趣的用户!这里有一些推荐。", "follow_recommendations.lead": "你关注的人的嘟文将按时间顺序在你的主页上显示。 别担心,你可以随时取消关注!", @@ -204,8 +220,8 @@ "follow_request.reject": "拒绝", "follow_requests.unlocked_explanation": "尽管你没有锁嘟,但是 {domain} 的工作人员认为你也许会想手动审核审核这些账号的关注请求。", "generic.saved": "已保存", - "getting_started.developers": "开发", - "getting_started.directory": "用户目录", + "getting_started.developers": "开发者", + "getting_started.directory": "个人资料目录", "getting_started.documentation": "文档", "getting_started.heading": "开始使用", "getting_started.invite": "邀请用户", @@ -437,7 +453,7 @@ "report.thanks.title_actionable": "感谢提交举报,我们将会进行处理。", "report.unfollow": "取消关注 @{name}", "report.unfollow_explanation": "你正在关注此账户。如果要想在你的主页上不再看到他们的帖子,取消对他们的关注即可。", - "report_notification.attached_statuses": "{count, plural, one {{count} 嘟文} other {{count} 嘟文}} 附件", + "report_notification.attached_statuses": "附上 {count} 条嘟文", "report_notification.categories.other": "其他", "report_notification.categories.spam": "骚扰", "report_notification.categories.violation": "违反规则", @@ -471,6 +487,7 @@ "status.edited_x_times": "共编辑 {count, plural, one {{count} 次} other {{count} 次}}", "status.embed": "嵌入", "status.favourite": "喜欢", + "status.filter": "Filter this post", "status.filtered": "已过滤", "status.hide": "屏蔽嘟文", "status.history.created": "{name} 创建于 {date}", @@ -521,7 +538,7 @@ "timeline_hint.resources.followers": "关注者", "timeline_hint.resources.follows": "关注", "timeline_hint.resources.statuses": "更早的嘟文", - "trends.counter_by_accounts": "过去{day}天有{counter}人讨论", + "trends.counter_by_accounts": "过去 {day} 天有 {counter} 人讨论", "trends.trending_now": "现在流行", "ui.beforeunload": "如果你现在离开 Mastodon,你的草稿内容将会丢失。", "units.short.billion": "{count} B", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index f17df83c473..fdc2068008b 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -197,6 +197,22 @@ "explore.trending_links": "News", "explore.trending_statuses": "Posts", "explore.trending_tags": "Hashtags", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "完成", "follow_recommendations.heading": "跟隨人們以看到來自他們的嘟文!這裡有些建議。", "follow_recommendations.lead": "您跟隨對象知嘟文將會以時間順序顯示於您的 home feed 上。別擔心犯下錯誤,您隨時可以取消跟隨人們!", @@ -471,6 +487,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "嵌入", "status.favourite": "最愛", + "status.filter": "Filter this post", "status.filtered": "已過濾", "status.hide": "Hide toot", "status.history.created": "{name} created {date}", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index a18e920666a..13eee62de78 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "哎呀!", "announcement.announcement": "公告", "attachments_list.unprocessed": "(未經處理)", - "audio.hide": "Hide audio", + "audio.hide": "隱藏音訊", "autosuggest_hashtag.per_week": "{count} / 週", "boost_modal.combo": "下次您可以按 {combo} 跳過", "bundle_column_error.body": "載入此元件時發生錯誤。", @@ -197,6 +197,22 @@ "explore.trending_links": "最新消息", "explore.trending_statuses": "嘟文", "explore.trending_tags": "主題標籤", + "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", + "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.settings_link": "settings page", + "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.title": "Filter added!", + "filter_modal.select_filter.context_mismatch": "does not apply to this context", + "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.prompt_new": "New category: {name}", + "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", + "filter_modal.select_filter.title": "Filter this post", + "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "完成", "follow_recommendations.heading": "跟隨您想檢視其嘟文的人!這裡有一些建議。", "follow_recommendations.lead": "來自您跟隨的人之嘟文將會按時間順序顯示在您的首頁時間軸上。不要害怕犯錯,您隨時都可以取消跟隨其他人!", @@ -471,6 +487,7 @@ "status.edited_x_times": "已編輯 {count, plural, one {{count} 次} other {{count} 次}}", "status.embed": "內嵌", "status.favourite": "最愛", + "status.filter": "Filter this post", "status.filtered": "已過濾", "status.hide": "隱藏嘟文", "status.history.created": "{name} 於 {date} 建立", diff --git a/config/locales/da.yml b/config/locales/da.yml index a08748deb7e..9538186c4b7 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -1180,6 +1180,8 @@ da: edit: add_keyword: Tilføj nøgleord keywords: Nøgleord + statuses: Individuelle indlæg + statuses_hint_html: Dette filter gælder for udvalgte, individuelle indlæg, uanset om de matcher nøgleordene nedenfor. Disse indlæg kan gennemgås og fjernes fra filteret ved at klikke hér. title: Redigere filter errors: deprecated_api_multiple_keywords: Disse parametre kan ikke ændres fra denne applikation, da de gælder for flere end ét filternøgleord. Brug en nyere applikation eller webgrænsefladen. @@ -1193,10 +1195,23 @@ da: keywords: one: "%{count} nøgleord" other: "%{count} nøgleord" + statuses: + one: "%{count} indlæg" + other: "%{count} indlæg" + statuses_long: + one: "%{count} individuelt indlæg skjult" + other: "%{count} individuelle indlæg skjult" title: Filtre new: save: Gem nye filter title: Tilføj nyt filter + statuses: + back_to_filter: Returnér til filter + batch: + remove: Fjern fra filter + index: + hint: Dette filter gælder for udvalgte, individuelle indlæg uanset andre kriterier. Flere indlæg kan føjes til filteret via webgrænsefladen. + title: Filtrerede indlæg footer: developers: Udviklere more: Mere… diff --git a/config/locales/devise.tr.yml b/config/locales/devise.tr.yml index 98baf291612..86b1c951f7b 100644 --- a/config/locales/devise.tr.yml +++ b/config/locales/devise.tr.yml @@ -8,7 +8,7 @@ tr: failure: already_authenticated: Zaten oturum açtınız. inactive: Hesabınız henüz etkinleştirilmedi. - invalid: Geçersiz %{authentication_keys} ya da şifre. + invalid: Geçersiz %{authentication_keys} ya da parola. last_attempt: Hesabınız kilitlenmeden önce bir kez daha denemeniz gerekir. locked: Hesabınız kilitlendi. not_found_in_database: Geçersiz %{authentication_keys} ya da parola. @@ -31,7 +31,7 @@ tr: subject: 'Mastodon: E-posta adresi değişti' title: Yeni e-posta adresi password_change: - explanation: Hesabınızın şifresi değiştirildi. + explanation: Hesabınızın parolası değiştirildi. extra: Parolanızı değiştirmediyseniz, büyük olasılıkla birileri hesabınıza erişmiş olabilir. Lütfen derhal parolanızı değiştirin veya hesabınız kilitlendiyse sunucu yöneticisine başvurun. subject: 'Mastodon: Parola değiştirildi' title: Parola değiştirildi @@ -81,11 +81,11 @@ tr: failure: '%{kind}''den kimliğiniz doğrulanamadı çünkü "%{reason}".' success: "%{kind} hesabından başarıyla kimlik doğrulaması yapıldı." passwords: - no_token: Bu sayfaya şifre sıfırlama e-postasından gelmeden erişemezsiniz. Şifre sıfırlama e-postasından geliyorsanız lütfen sağlanan tam URL'yi kullandığınızdan emin olun. + no_token: Bu sayfaya parola sıfırlama e-postasından gelmeden erişemezsiniz. Parola sıfırlama e-postasından geliyorsanız lütfen sağlanan tam URL'yi kullandığınızdan emin olun. send_instructions: E-posta adresiniz veritabanımızda varsa, e-posta adresinize birkaç dakika içinde bir parola kurtarma bağlantısı gönderilir. Bu e-postayı almadıysanız, lütfen spam klasörünüzü kontrol edin. send_paranoid_instructions: E-posta adresiniz veritabanımızda varsa, e-posta adresinize birkaç dakika içinde bir parola kurtarma bağlantısı gönderilir. Bu e-postayı almadıysanız, lütfen spam klasörünüzü kontrol edin. - updated: Şifreniz başarılı bir şekilde değiştirildi. Şu an oturum açtınız. - updated_not_active: Şifreniz başarıyla değiştirildi. + updated: Parolanız başarılı bir şekilde değiştirildi. Şu an oturum açtınız. + updated_not_active: Parolanız başarıyla değiştirildi. registrations: destroyed: Görüşürüz! hesabın başarıyla iptal edildi. Umarız seni sonra tekrar görürüz. signed_up: Hoş geldiniz! Başarılı bir şekilde oturum açtınız. diff --git a/config/locales/doorkeeper.ku.yml b/config/locales/doorkeeper.ku.yml index f92a228d104..c4e66aef177 100644 --- a/config/locales/doorkeeper.ku.yml +++ b/config/locales/doorkeeper.ku.yml @@ -67,7 +67,7 @@ ku: title: Destûr hildana vê kodê jê bigire û ji sepanê re pêve bike. authorized_applications: buttons: - revoke: Betal bike + revoke: Rake confirmations: revoke: Ma tu bawerî? index: @@ -149,7 +149,7 @@ ku: scopes: admin:read: hemû daneyên li ser rajekar bixwîne admin:read:accounts: zanyariyên hestiyar yên hemû ajimêran li ser rajekar bixwîne - admin:read:reports: zanyariyên hestiyar yên hemû gilîyan û ajimêrên gilêkirî li ser rajekar bixwîne + admin:read:reports: zanyariyên hestiyar yên hemû ragihandinan û ajimêrên ragihandî li ser rajekar bixwîne admin:write: hemû daneyên li ser rajekar biguherîne admin:write:accounts: di ajimêrê de çalakiyên li hev kirî pêk bîne admin:write:reports: di ragihandinê de çalakiyên li hev kirî pêk bîne @@ -181,5 +181,5 @@ ku: write:media: pelên medya bar bike write:mutes: mirovan û axaftinan bêdeng bike write:notifications: agahdariyên xwe pak bike - write:reports: mirovên din gilî bike + write:reports: mirovên din ragihîne write:statuses: şandiyekê biweşîne diff --git a/config/locales/doorkeeper.tr.yml b/config/locales/doorkeeper.tr.yml index 351d271d06c..51d0dff0858 100644 --- a/config/locales/doorkeeper.tr.yml +++ b/config/locales/doorkeeper.tr.yml @@ -81,7 +81,7 @@ tr: errors: messages: access_denied: Kaynak sahibi veya yetkilendirme sunucusu isteği reddetti. - credential_flow_not_configured: Kaynak Sahibi Şifresi Kimlik Bilgileri akışı Doorkeeper.configure.resource_owner_from_credentials 'ın yapılandırılmamış olması nedeniyle başarısız oldu. + credential_flow_not_configured: Kaynak Sahibi Parolası Kimlik Bilgileri akışı Doorkeeper.configure.resource_owner_from_credentials 'ın yapılandırılmamış olması nedeniyle başarısız oldu. invalid_client: İstemcinin kimlik doğrulaması bilinmeyen istemci, istemci kimlik doğrulamasının dahil olmaması veya desteklenmeyen kimlik doğrulama yöntemi nedeniyle başarısız oldu. invalid_grant: Sağlanan yetkilendirme izni geçersiz, süresi dolmuş, iptal edilmiş, yetkilendirme isteğinde kullanılan yönlendirme URL'siyle eşleşmiyor veya başka bir istemciye verilmiş. invalid_redirect_uri: Dahil edilmiş yönlendirme URL'si geçersiz. diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 6ac1eb45d5d..3eabb665a7c 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -31,7 +31,7 @@ eo: privacy_policy: Politiko de privateco rules: Reguloj de la servilo see_whats_happening: Vidi kio okazas - server_stats: 'Statistiko de la servilo:' + server_stats: 'Statistikoj de la servilo:' source_code: Fontkodo status_count_after: one: mesaĝo diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index c4d9ee969b5..72c2ad3470a 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -1181,6 +1181,8 @@ es-AR: edit: add_keyword: Agregar palabra clave keywords: Palabras clave + statuses: Mensajes individuales + statuses_hint_html: Este filtro se aplica a los mensajes individuales seleccionados, independientemente de si coinciden con las palabras clave de abajo. Podés revisar estos mensajes y eliminarlos del filtro haciendo clic acá. title: Editar filtro errors: deprecated_api_multiple_keywords: Estos parámetros no se pueden cambiar de esta aplicación porque se aplican a más de una palabra clave de filtro. Usá una aplicación más reciente o la interface web. @@ -1194,10 +1196,23 @@ es-AR: keywords: one: "%{count} palabra clave" other: "%{count} palabras clave" + statuses: + one: "%{count} mensaje" + other: "%{count} mensajes" + statuses_long: + one: "%{count} mensaje individual oculto" + other: "%{count} mensajes individuales ocultos" title: Filtros new: save: Guardar nuevo filtro title: Agregar nuevo filtro + statuses: + back_to_filter: Volver al filtro + batch: + remove: Quitar del filtro + index: + hint: Este filtro se aplica a la selección de mensajes individuales independientemente de otros criterios. Podés agregar más mensajes a este filtro desde la interface web. + title: Mensajes filtrados footer: developers: Desarrolladores more: Más… diff --git a/config/locales/es.yml b/config/locales/es.yml index 568ad46d914..8d2ed1a3353 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1181,6 +1181,8 @@ es: edit: add_keyword: Añadir palabra clave keywords: Palabras clave + statuses: Publicaciones individuales + statuses_hint_html: Este filtro se aplica a las publicaciones individuales seleccionadas, independientemente de si coinciden con las palabras clave de abajo. Puedes revisar estos mensajes y eliminarlos del filtro pulsando aquí. title: Editar filtro errors: deprecated_api_multiple_keywords: Estos parámetros no se pueden cambiar desde esta aplicación porque se aplican a más de una palabra clave de filtro. Utilice una aplicación más reciente o la interfaz web. @@ -1194,10 +1196,23 @@ es: keywords: one: "%{count} palabra clave" other: "%{count} palabras clave" + statuses: + one: "%{count} publicación" + other: "%{count} publicaciones" + statuses_long: + one: "%{count} publicación individual oculta" + other: "%{count} publicaciones individuales ocultas" title: Filtros new: save: Guardar nuevo filtro title: Añadir nuevo filtro + statuses: + back_to_filter: Volver a filtrar + batch: + remove: Eliminar del filtro + index: + hint: Este filtro se aplica a la selección de publicaciones individuales independientemente de otros criterios. Puede añadir más mensajes a este filtro desde la interfaz Web. + title: Publicaciones filtradas footer: developers: Desarrolladores more: Mas… diff --git a/config/locales/fi.yml b/config/locales/fi.yml index bbc44d644f1..b48d8ab9fbd 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -38,6 +38,7 @@ fi: one: julkaisun other: julkaisua status_count_before: Julkaistu + tagline: Hajautettu sosiaalinen verkosto terms: Käyttöehdot unavailable_content: Moderoidut palvelimet unavailable_content_description: @@ -102,11 +103,17 @@ fi: avatar: Profiilikuva by_domain: Verkkotunnus change_email: + changed_msg: Sähköpostin vaihto onnistui! current_email: Nykyinen sähköposti label: Vaihda sähköposti new_email: Uusi sähköposti submit: Vaihda sähköposti title: Vaihda sähköposti käyttäjälle %{username} + change_role: + changed_msg: Rooli vaihdettu onnistuneesti! + label: Vaihda roolia + no_role: Ei roolia + title: Vaihda roolia käyttäjälle %{username} confirm: Vahvista confirmed: Vahvistettu confirming: Vahvistetaan @@ -150,6 +157,7 @@ fi: active: Aktiivinen all: Kaikki pending: Odottavat + silenced: Rajoitettu suspended: Jäähyllä title: Moderointi moderation_notes: Moderointimerkinnät @@ -157,10 +165,14 @@ fi: most_recent_ip: Viimeisin IP no_account_selected: Yhtään tiliä ei muutettu, koska mitään ei valittu no_limits_imposed: Rajoituksia ei ole asetettu + no_role_assigned: Roolia ei ole määritetty not_subscribed: Ei tilaaja pending: Odottaa tarkistusta perform_full_suspension: Siirrä kokonaan jäähylle previous_strikes: Aiemmat varoitukset + previous_strikes_description_html: + one: Tällä tilillä on yksi varoitus. + other: Tällä tilillä on %{count} varoitusta. promote: Ylennä protocol: Protokolla public: Julkinen @@ -180,6 +192,7 @@ fi: reset: Palauta reset_password: Palauta salasana resubscribe: Tilaa uudelleen + role: Rooli search: Hae search_same_email_domain: Muut käyttäjät, joilla on sama sähköpostiverkkotunnus search_same_ip: Muut käyttäjät samalla IP-osoitteella @@ -358,6 +371,7 @@ fi: enable: Ota käyttöön enabled: Käytössä enabled_msg: Emojin käyttöönotto onnistui + image_hint: PNG tai GIF enintään %{size} list: Listaa listed: Listassa new: @@ -414,6 +428,7 @@ fi: destroyed_msg: Verkkotunnuksen esto on peruttu domain: Verkkotunnus edit: Muokkaa verkkotunnuksen estoa + existing_domain_block: Olet jo asettanut tiukemmat rajoitukset %{name}. existing_domain_block_html: Olet jo asettanut %{name} tiukemmat rajat ja sinun täytyy poistaa se ensin. new: create: Luo esto @@ -464,14 +479,43 @@ fi: title: Noudata suosituksia unsuppress: Palauta seuraa suositus instances: + availability: + failure_threshold_reached: Epäonnistumisen kynnys saavutettu %{date}. + failures_recorded: + one: Epäonnistuneita yrityksiä %{count} päivässä. + other: Epäonnistuneita yrityksiä %{count} päivää. + no_failures_recorded: Ei epäonnistumisia kirjattu. + title: Saatavuus + warning: Viimeisin yritys yhdistää yhteys tähän palvelimeen on epäonnistunut back_to_all: Kaikki back_to_limited: Rajoitettu back_to_warning: Varoitus by_domain: Verkkotunnus confirm_purge: Oletko varma, että haluat pysyvästi poistaa tiedot tältä verkkotunnukselta? + content_policies: + comment: Sisäinen huomautus + description_html: Voit määrittää sisältökäytännöt, joita sovelletaan kaikkiin tämän verkkotunnuksen ja sen aliverkkotunnuksien tileihin. + policies: + reject_media: Hylkää media + reject_reports: Hylkää raportit + silence: Rajoitus + suspend: Jäädytä + policy: Käytännöt + reason: Julkinen syy + title: Sisällön toimintatavat + dashboard: + instance_accounts_dimension: Seuratuimmat tilit + instance_accounts_measure: tallennetut tilit + instance_followers_measure: seuraajamme siellä + instance_follows_measure: heidän seuraajansa täällä + instance_languages_dimension: Suosituimmat kielet + instance_media_attachments_measure: tallennetut median liitteet + instance_reports_measure: niitä koskevat raportit + instance_statuses_measure: tallennetut viestit delivery: all: Kaikki clear: Tyhjennä toimitusvirheet + failing: Epäonnistuminen restart: Käynnistä toimitus uudelleen stop: Lopeta toimitus unavailable: Ei saatavilla @@ -480,6 +524,9 @@ fi: delivery_error_hint: Jos toimitus ei ole mahdollista %{count} päivän aikana, se merkitään automaattisesti toimittamattomaksi. destroyed_msg: Tiedot %{domain} on nyt jonossa välitöntä poistoa varten. empty: Verkkotunnuksia ei löytynyt. + known_accounts: + one: "%{count} tunnettu tili" + other: "%{count} tunnettua tiliä" moderation: all: Kaikki limited: Rajoitettu @@ -487,12 +534,14 @@ fi: private_comment: Yksityinen kommentti public_comment: Julkinen kommentti purge: Tyhjennä + purge_description_html: Jos uskot tämän verkkotunnuksen olevan offline-tilassa, voit poistaa kaikki tilitietueet ja niihin liittyvät tiedot sinun tallennustilasta. Tämä voi kestää jonkin aikaa. title: Tiedossa olevat instanssit total_blocked_by_us: Estetty meidän toimesta total_followed_by_them: Heidän seuraama total_followed_by_us: Meidän seuraama total_reported: Niitä koskevat raportit total_storage: Medialiitteet + totals_time_period_hint_html: Alla näkyvät yhteenlasketut tiedot sisältävät koko ajan. invites: deactivate_all: Poista kaikki käytöstä filter: @@ -547,6 +596,7 @@ fi: action_taken_by: Toimenpiteen tekijä actions: delete_description_html: Ilmoitetut viestit poistetaan ja kirjataan varoitus, joka auttaa sinua saman tilin tulevista rikkomuksista. + mark_as_sensitive_description_html: Ilmoitettujen viestien media merkitään arkaluonteisiksi ja varoitus tallennetaan, jotta voit kärjistää saman tilin tulevia rikkomuksia. other_description_html: Katso lisää vaihtoehtoja tilin käytöksen hallitsemiseksi ja ilmoitetun tilin viestinnän mukauttamiseksi. resolve_description_html: Ilmoitettua tiliä vastaan ei ryhdytä toimenpiteisiin, varoitusta ei kirjata ja raportti suljetaan. silence_description_html: Profiili näkyy vain niille, jotka jo seuraavat sitä tai etsivät sen manuaalisesti, mikä rajoittaa merkittävästi kattavuutta. Se voidaan aina palauttaa. @@ -596,6 +646,20 @@ fi: unresolved: Ratkaisemattomat updated_at: Päivitetty view_profile: Näytä profiili + roles: + add_new: Lisää rooli + assigned_users: + one: "%{count} käyttäjä" + other: "%{count} käyttäjää" + categories: + administration: Ylläpito + devops: Operaattorit + invites: Kutsut + moderation: Moderointi + special: Erikois + delete: Poista + description_html: Käyttäjän roolit, voit muokata toimintoja ja alueita mitä sinun Mastodon käyttäjät voivat käyttää. + edit: Muokkaa "%{name}" roolia rules: add_new: Lisää sääntö delete: Poista @@ -773,13 +837,36 @@ fi: trending_rank: 'Nousussa #%{rank}' usable: Voidaan käyttää usage_comparison: Käytetty %{today} kertaa tänään, verrattuna %{yesterday} eiliseen + used_by_over_week: + one: Yhden henkilön käyttämä viime viikon aikana + other: Käyttänyt %{count} henkilöä viimeisen viikon aikana title: Trendit + trending: Nousussa warning_presets: add_new: Lisää uusi delete: Poista edit_preset: Muokkaa varoituksen esiasetusta empty: Et ole vielä määrittänyt yhtään varoitusesiasetusta. title: Hallinnoi varoitusesiasetuksia + webhooks: + add_new: Lisää päätepiste + delete: Poista + disable: Poista käytöstä + disabled: Ei käytössä + edit: Muokkaa päätepistettä + empty: Sinulla ei ole vielä määritetty webhook-päätepisteitä. + enable: Ota käyttöön + enabled: Aktiivinen + enabled_events: + one: 1 aktivoitu tapahtuma + other: "%{count} aktivoitua tapahtumaa" + events: Tapahtumat + new: Uusi webhook + rotate_secret: Vaihda salaus + secret: Salainen tunnus + status: Tila + title: Webhookit + webhook: Webhook admin_mailer: new_appeal: actions: @@ -964,10 +1051,12 @@ fi: appealed_msg: Valituksesi on lähetetty. Jos se hyväksytään, sinulle ilmoitetaan. appeals: submit: Lähetä valitus + approve_appeal: Hyväksy valitus associated_report: Liittyvä raportti created_at: Päivätty description_html: Nämä ovat tiliäsi koskevia toimia ja varoituksia, jotka %{instance} henkilökunta on lähettänyt sinulle. recipient: Osoitettu + reject_appeal: Hylkää valitus status: 'Viesti #%{id}' status_removed: Viesti on jo poistettu järjestelmästä title: "%{action} alkaen %{date}" @@ -1030,14 +1119,23 @@ fi: public: Julkiset aikajanat thread: Keskustelut edit: + add_keyword: Lisää avainsana + keywords: Avainsanat title: Muokkaa suodatinta errors: invalid_context: Ei sisältöä tai se on virheellinen index: + contexts: Suodattimet %{contexts} delete: Poista empty: Sinulla ei ole suodattimia. + expires_in: Vanhenee %{distance} + expires_on: Vanhenee %{date} + keywords: + one: "%{count} avainsana" + other: "%{count} avainsanaa" title: Suodattimet new: + save: Tallenna uusi suodatin title: Lisää uusi suodatin footer: developers: Kehittäjille @@ -1156,6 +1254,8 @@ fi: copy_account_note_text: 'Tämä käyttäjä siirtyi paikasta %{acct}, tässä olivat aiemmat muistiinpanosi niistä:' notification_mailer: admin: + report: + subject: "%{name} lähetti raportin" sign_up: subject: "%{name} kirjautunut" digest: @@ -1165,6 +1265,9 @@ fi: new_followers_summary: one: Olet myös saanut yhden uuden seuraajan! Juhuu! other: Olet myös saanut %{count} uutta seuraajaa! Aivan mahtavaa! + subject: + one: "1 uusi ilmoitus viime käyntisi jälkeen 🐘" + other: "%{count} uutta ilmoitusta viime käyntisi jälkeen 🐘" title: Poissaollessasi… favourite: body: "%{name} tykkäsi tilastasi:" @@ -1278,6 +1381,11 @@ fi: reports: errors: invalid_rules: ei viittaa voimassa oleviin sääntöihin + rss: + content_warning: 'Sisällön varoitus:' + descriptions: + account: Julkiset viestit lähettäjältä @%{acct} + tag: 'Julkiset viestit merkitty #%{hashtag}' scheduled_statuses: over_daily_limit: Olet ylittänyt %{limit} ajoitetun viestin rajan tälle päivälle over_total_limit: Olet ylittänyt %{limit} ajoitetun viestin rajan @@ -1365,6 +1473,7 @@ fi: disallowed_hashtags: one: 'sisälsi aihetunnisteen jota ei sallita: %{tags}' other: 'sisälsi aihetunnisteet joita ei sallita: %{tags}' + edited_at_html: Muokattu %{date} errors: in_reply_not_found: Viesti, johon yrität vastata, ei näytä olevan olemassa. open_in_web: Avaa selaimessa @@ -1435,6 +1544,9 @@ fi: pinned: Kiinnitetty tuuttaus reblogged: buustasi sensitive_content: Arkaluontoista sisältöä + strikes: + errors: + too_late: On liian myöhäistä vedota tähän varoitukseen tags: does_not_match_previous_name: ei vastaa edellistä nimeä terms: @@ -1477,6 +1589,13 @@ fi: explanation: Pyysit täydellistä varmuuskopiota Mastodon-tilistäsi. Voit nyt ladata sen! subject: Arkisto on valmiina ladattavaksi title: Arkiston tallennus + suspicious_sign_in: + change_password: vaihda salasanasi + details: 'Tässä on tiedot kirjautumisesta:' + explanation: Olemme havainneet kirjautumisen tilillesi uudesta IP-osoitteesta. + further_actions_html: Jos et ollut sinä, suosittelemme, että %{action} teet välittömästi ja otat kaksivaiheisen todennuksen käyttöön tilisi turvallisuuden varmistamiseksi. + subject: Tiliäsi on käytetty uudesta IP-osoitteesta + title: Uusi kirjautuminen warning: appeal: Lähetä valitus appeal_description: Jos uskot, että tämä on virhe, voit hakea muutosta henkilökunnalta %{instance}. diff --git a/config/locales/gl.yml b/config/locales/gl.yml index a5baa17f28c..5610272b7bc 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -1181,6 +1181,8 @@ gl: edit: add_keyword: Engadir palabra chave keywords: Palabras chave + statuses: Publicacións individuais + statuses_hint_html: Este filtro aplícase para seleccionar publicacións individuais independentemente de se concordan coas palabras chave aquí indicadas. Podes revisar estas publicacións e eliminalas do filtro premendo aquí. title: Editar filtro errors: deprecated_api_multiple_keywords: Estes parámetros non se poden cambiar desde esta aplicación porque son de aplicación a máis dun filtro de palabras chave. Usa unha aplicación máis recente ou a interface web. @@ -1194,10 +1196,23 @@ gl: keywords: one: "%{count} palabra chave" other: "%{count} palabras chave" + statuses: + one: "%{count} publicación" + other: "%{count} publicacións" + statuses_long: + one: "%{count} publicación individual agochada" + other: "%{count} publicacións individuais agochadas" title: Filtros new: save: Gardar o novo filtro title: Engadir novo filtro + statuses: + back_to_filter: Volver ao filtro + batch: + remove: Eliminar do filtro + index: + hint: Este filtro aplícase para seleccionar publicacións individuais independentemente de outros criterios. Podes engadir máis publicacións a este filtro desde a interface Web. + title: Publicacións filtradas footer: developers: Desenvolvedoras more: Máis… diff --git a/config/locales/is.yml b/config/locales/is.yml index 943fff632cf..db856011bde 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -1181,6 +1181,8 @@ is: edit: add_keyword: Bæta við stikkorði keywords: Stikkorð + statuses: Einstakar færslur + statuses_hint_html: Þessi sía virkar til að velja stakar færslur burtséð frá því hvort þær samsvari stikkorðunum hér fyrir neðan. Þú getur yfirfarið þessar færslur og fjarlægt þær úr síunni með því að smella hér. title: Breyta síu errors: deprecated_api_multiple_keywords: Þessum viðföngum er ekki hægt að breyta úr þessu forriti, þar sem þau eiga við fleiri en eitt stikkorð síu. Notaðu nýrra forrit eða farðu í vefviðmótið. @@ -1194,10 +1196,23 @@ is: keywords: one: "%{count} stikkorð" other: "%{count} stikkorð" + statuses: + one: "%{count} færsla" + other: "%{count} færslur" + statuses_long: + one: "%{count} stök færsla falin" + other: "%{count} stakar færslur faldar" title: Síur new: save: Vista nýja síu title: Bæta við nýrri síu + statuses: + back_to_filter: Til baka í síu + batch: + remove: Fjarlægja úr síu + index: + hint: Þessi sía virkar til að velja stakar færslur án tillits til annarra skilyrða. Þú getur bætt fleiri færslum í þessa síu í vefviðmótinu. + title: Síaðar færslur footer: developers: Forritarar more: Meira… diff --git a/config/locales/ko.yml b/config/locales/ko.yml index f290318a64f..4788365c277 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1163,6 +1163,8 @@ ko: edit: add_keyword: 키워드 추가 keywords: 키워드 + statuses: 개별 게시물 + statuses_hint_html: 이 필터는 아래 키워드들의 매치 여부와는 관계 없이 선택된 개별적인 게시물들에 적용됩니다. 다음 게시물들을 검토하고 여기를 클릭해 필터에서 제거할 수 있습니다. title: 필터 편집 errors: deprecated_api_multiple_keywords: 이 파라미터들은 하나를 초과하는 필터 키워드에 적용되기 때문에 이 응용프로그램에서 수정될 수 없습니다. 더 최신의 응용프로그램이나 웹 인터페이스를 사용하세요. @@ -1175,10 +1177,21 @@ ko: expires_on: "%{date}에 만료됨" keywords: other: "%{count}개의 키워드" + statuses: + other: "%{count}개의 게시물" + statuses_long: + other: "%{count}개의 개별적인 게시물 숨겨짐" title: 필터 new: save: 새 필터 저장 title: 필터 추가 + statuses: + back_to_filter: 필터로 돌아가기 + batch: + remove: 필터에서 제거 + index: + hint: 이 필터는 다른 기준에 관계 없이 선택된 개별적인 게시물들에 적용됩니다. 웹 인터페이스에서 더 많은 게시물들을 이 필터에 추가할 수 있습니다. + title: 필터링된 게시물 footer: developers: 개발자 more: 더 보기… diff --git a/config/locales/ku.yml b/config/locales/ku.yml index b6b6636629a..497876c6c18 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -19,10 +19,10 @@ ku: continue_to_web: Bo malpera sepanê bidomîne discover_users: Bikarhêneran keşf bike documentation: Pelbend - federation_hint_html: Bi ajimêrê xwe %{instance} re tu dikarî kesên rajekar û li derveyî mastodonê bişopînî. + federation_hint_html: Bi ajimêrê xwe %{instance} re tu dikarî kesên ji her kîjan rajekarê mastodonê bişopînî. get_apps: Sepaneke mobîl bicerbîne hosted_on: Mastodon li ser %{domain} tê pêşkêşkirin - instance_actor_flash: 'Ev ajimêr aktorekî aşopî ye ji bo rajekar were temsîl kirin tê bikaranîn ne ajimêra kesî ye. Ji bo armanca federasyonê dixebite û divê ney asteng kirin heta ku te xwest hemû nimûneyan asteng bikî, di vir de ger tu blogek navper bikarbînî. + instance_actor_flash: 'Ev ajimêr şanogereke aşopî ye ji bo rajekar were naskirin tê bikaranîn ne ajimêra kesî ye. Ji bo armanca giştî dixebite û divê neye astengkirin heya ku te xwest hemû mînakan asteng bikî, di vir de ku tu navpereke astengiyê bi kar bînî. ' learn_more: Bêtir fêr bibe @@ -58,14 +58,14 @@ ku: what_is_mastodon: Mastodon çi ye? accounts: choices_html: 'Hilbijartina %{name}:' - endorsements_hint: Tu dikarî kesên ku di navrûyê wep de dişopînî bipejirînî û ew li vir were nîşan kirin. - featured_tags_hint: Tu dikarî hashtagên teybetî li vir tê nîşan kirin di pê de derxî. + endorsements_hint: Tu dikarî kesên ku di navrûya tevnê de dişopînî bipejirînî û ew ê li vir were nîşankirin. + featured_tags_hint: Tu dikarî hashtagên taybet ên ku wê li vir werin nîşandan bibînî. follow: Bişopîne followers: one: Şopîner other: Şopîner following: Dişopîne - instance_actor_flash: Ev ajimêr listikvaneke rastkî ye ku ji bo wek nûnerê rajekar bixwe tê bikaranîn û ne bikarhênerek kesane. Ew ji bo mebestên yekbûyî tê bikaranîn û divê neyê rawestandin. + instance_actor_flash: Ev ajimêr listikvaneke rastkî ye ku ji bo wek nûnerê rajekar bixwe tê bikaranîn û ne bikarhênerek kesane. Ew ji bo mebestên giştî tê bikaranîn û divê neyê rawestandin. joined: Di %{date} de tevlî bû last_active: çalakiya dawî link_verified_on: Xwedaniya li vê girêdanê di %{date} de hatiye kontrolkirin @@ -73,7 +73,7 @@ ku: moved_html: "%{name} bar kire %{new_profile_link}:" network_hidden: Ev zanyarî berdest nîne nothing_here: Li vir tiştek tune ye! - people_followed_by: Kesên ku%{name} wan dişopîne + people_followed_by: Kesên ku %{name} wan dişopîne people_who_follow: Kesên%{name} dişopîne pin_errors: following: Kesê ku tu dixwazî bipejirînî jixwe tu vê dişopînî @@ -228,7 +228,7 @@ ku: view_domain: Kurte ji bo navperê bide nîşan warn: Hişyarî web: Tevn - whitelisted: Ji bona yekbûyînê maf tê dayîn + whitelisted: Ji bo demnameya giştî maf hate dayin action_logs: action_types: approve_appeal: Îtîrazê bipejirîne @@ -290,7 +290,7 @@ ku: create_account_warning_html: "%{name} ji bo %{target} hişyariyek şand" create_announcement_html: "%{name} agahdarkirineke nû çêkir %{target}" create_custom_emoji_html: "%{name} emojîyeke nû ya %{target} bar kir" - create_domain_allow_html: "%{name} bi navperê %{target} re maf da federeyê" + create_domain_allow_html: "%{name} bi navperê %{target} re maf da demnameya giştî" create_domain_block_html: "%{name} navpera %{target} asteng kir" create_email_domain_block_html: "%{name} e-nameya navperê %{target} asteng kir" create_ip_block_html: "%{name} ji bo IPya %{target} rêzikname saz kir" @@ -298,7 +298,7 @@ ku: demote_user_html: "%{name} bikarhênerê %{target} kaşê jêr kir" destroy_announcement_html: "%{name} daxûyaniyeke %{target} jê bir" destroy_custom_emoji_html: "%{name} emojiya %{target} tune kir" - destroy_domain_allow_html: "%{name} bi navperê %{target} re maf neda federeyê" + destroy_domain_allow_html: "%{name} bi navperê %{target} re maf neda demnameya giştî" destroy_domain_block_html: "%{name} navpera %{target} asteng kir" destroy_email_domain_block_html: "%{name} astengiya li ser navpera e-nameyê %{target} rakir" destroy_instance_html: "%{name} navpera %{target} asteng kir" @@ -418,10 +418,10 @@ ku: empty: Îtîraz nehatin dîtin. title: Îtîraz domain_allows: - add_new: Maf bide navpera federasyonê - created_msg: Ji bo federasyonê maf dayîna navperê bi serkeftî hate dayîn - destroyed_msg: Ji bo federasyonê maf dayîna navperê nehat dayîn - undo: Maf nede navpera federasyonê + add_new: Mafê bide navpera demnameya giştî + created_msg: Ji bo demnameya giştî mafdayîna navperê bi serkeftî hate dayîn + destroyed_msg: Ji bo demnameya giştî mafdayîna navperê nehat dayîn + undo: Mafê nede navpera demnameya giştî domain_blocks: add_new: Astengkirina navpera nû created_msg: Navpera asteng kirinê nû hat şixulandin @@ -515,7 +515,7 @@ ku: instance_follows_measure: şopînerên wan li vir instance_languages_dimension: Zimanên pir tên bikaranîn instance_media_attachments_measure: pêvekên medyayê tomarkirî - instance_reports_measure: giliyên derbarê wan de + instance_reports_measure: ragehandinên di derbarê wan de instance_statuses_measure: şandiyên tomarkirî delivery: all: Hemû @@ -544,7 +544,7 @@ ku: total_blocked_by_us: Ji aliyê me ve hatiye astengkirin total_followed_by_them: Ji aliyê wan ve hatiye şopandin total_followed_by_us: Ji aliyê me ve hatiye şopandin - total_reported: Giliyên derheqê wan de + total_reported: Ragehandinên di derbarê wan de total_storage: Pêvekên medyayê totals_time_period_hint_html: Tevahiyên ku li jêr têne xuyakirin daneyên hemû deman dihewîne. invites: @@ -575,7 +575,7 @@ ku: relays: add_new: Guhêrkerê nû tevlê bike delete: Jê bibe - description_html: "Guhêrkerê giştî rajekareke navberkar e ku hejmareke mezin ji şandiyan di navbera rajekaran ku jê re dibin endam û weşanê dikin diguherîne. Ew dikare ji rajekarên piçûk û navîn re bibe alîkar ku naveroka ji fendiverse ê bibîne, ku bi rengeke din pêdivî dike ku bikarhênerên herêmî bi desta li dû kesên din ên li rajekarên ji dûr be bişopînin." + description_html: "Guhêrkerê giştî rajekareke navberkar e ku hejmareke mezin ji şandiyan di navbera rajekaran ku jê re dibin endam û weşanê dikin diguherîne. Ew dikare ji rajekarên piçûk û navîn re bibe alîkar ku naveroka ji fediverse ê bibîne, ku bi rengeke din pêdivî dike ku bikarhênerên herêmî bi desta li dû kesên din ên li rajekarên ji dûr be bişopînin." disable: Neçalak bike disabled: Neçalakkirî enable: Çalak bike @@ -585,7 +585,7 @@ ku: pending: Li benda pêjirandina guhêrker e save_and_enable: Tomar û çalak bike setup: Girêdanekê guhêrker saz bike - signatures_not_enabled: Dema ku moda ewle ya jî moda rêzoka spî çalak be guhêrker wê birêkûpêk nexebite + signatures_not_enabled: Dema ku moda ewle yan jî moda demnameya giştî çalak be guhêrker wê birêkûpêk nexebite status: Rewş title: Guhêrker report_notes: @@ -685,11 +685,32 @@ ku: manage_blocks_description: Mafê dide bikarhêneran ku peydakarê e-nameyê û navnîşanên IP asteng bike manage_custom_emojis: Emojiyên kesane bi rêve bibe manage_custom_emojis_description: Mafê dide bikarhêneran ku îmojî kesane bikin li ser vê rajekarê + manage_federation: Demnameya giştî bi rê ve bibe + manage_federation_description: Mafê dide bikarhêneran ku demnameya giştî bi navparên din re asteng bikin û radestkirinê kontrol bikin manage_invites: Vexwendinan bi rêve bibe + manage_invites_description: Mafê dide bikarhêneran ku li girêdanên vexwendinê bigerin û neçalak bikin + manage_reports: Ragihandinan bi rê ve bibe + manage_reports_description: Mafê dide bikarhêneran ku ragihandinan binirxînin û li dijî wan kiryarên çavdêriyê çalakiyan pêk bînin manage_roles: Rolan bi rêve bibe + manage_roles_description: Mafê dide bikarhêneran ku rolên li jêr ên xwe birêve bibin û nîşan bikin manage_rules: Rolan bi rêve bibe + manage_rules_description: Mafê dide bikarhêneran ku rêzikên rajekarê biguherînin manage_settings: Sazkariyan bi rê ve bibe + manage_settings_description: Mafê dide bikarhêneran ku sazkariyên malperê biguherînin + manage_taxonomies: Beşan bi rê ve bibe + manage_taxonomies_description: Mafê dide bikarhêneran ku naveroka rojevê binirxînin û sazkariyên hashtagê rojane bikin + manage_user_access: Gihiştinê bikarhêner bi rê ve bibe + manage_user_access_description: Mafê dide bikarhêneran ku piştrastkirina du-gavî ya bikarhênerên din neçalak bikin, navnîşana e-nameya xwe biguherînin û borînpeyva xwe ji nû ve bikin manage_users: Bikarhêneran bi rêve bibe + manage_users_description: Mafê dide bikarhêneran ku hûrguliyên bikarhênerên din bibînin û li dijî wan kiryarên çavdêriyê çalakiyan pêk bînin + manage_webhooks: Webhook bi rê ve bibe + manage_webhooks_description: Mafê dide bikarhêneran ku ji bo bûyerên rêveberî yên webhook saz bikin + view_audit_log: Têketinên kontrolê nîşan bide + view_audit_log_description: Mafê dide bikarhêneran ku dîroka çalakiyên rêveberî yên li ser rajekarê bibînin + view_dashboard: Destgehê nîşan bide + view_dashboard_description: Mafê dide bikarhêneran ku bigihîjin destgehê û pîvanên cuda + view_devops: Pêşdebir + view_devops_description: Mafê dide bikarhêneran ku bigihîjin destgehên Sidekiq û pgHero title: Rol rules: add_new: Rêbazekê tevlî bike @@ -952,7 +973,7 @@ ku: remove: Girêdana nûçikê rake appearance: advanced_web_interface: Navrûya tevnê yê pêşketî - advanced_web_interface_hint: 'Heke tu bixwazin tevahiya ferehiya dîmendera xwe bi kar bînî, navrûya pêşketî ya tevnê dihêle ku tu gelek stûnên cihêreng saz bikî da ku di heman demê de bi qasî ku tu dixwazî zanyariyan bibînî: Serrûpel, agahdarî, demnameya giştî, her hejmarek ji rêzik û hashtagan.' + advanced_web_interface_hint: 'Ku tu bixwazî tevahiya ferehiya dîmendera xwe bi kar bînî, navrûya pêşketî ya tevnê dihêle ku tu gelek stûnên cihêreng saz bikî da ku di heman demê de bi qasî ku tu dixwazî zanyariyan bibînî: Serrûpel, agahdarî, demnameya giştî, her hejmarek ji rêzik û hashtagan.' animations_and_accessibility: Anîmasyon û gihînî confirmation_dialogs: Gotûbêjên piştrastkirî discovery: Vedîtin @@ -1160,15 +1181,24 @@ ku: public: Demnameya gelemperî thread: Axaftin edit: + add_keyword: Kilîtpeyv tevî bike keywords: Peyvkilît title: Parzûnê serrast bike errors: + deprecated_api_multiple_keywords: Van parameteran ji vê sepanê nayên guhertin ji ber ku ew li ser bêtirî yek kilîtpeyvên parzûnkirî têne sepandin. Sepaneke nûtir an navrûya bikarhêneriyê ya malperê bi kar bîne. invalid_context: Naverok tune ye yan jî nederbasdar tê peydakirin index: + contexts: Parzûnên di %{contexts} de delete: Jê bibe empty: Parzûnên te tune ne. + expires_in: Di %{distance} de diqede + expires_on: Di %{date} de diqede + keywords: + one: "%{count} kilîtpeyv" + other: "%{count} kilîtpeyv" title: Parzûn new: + save: Parzûna nû tomar bike title: Parzûnek nû li zêde bike footer: developers: Pêşdebir @@ -1238,7 +1268,7 @@ ku: password: borînpeyv sign_in_token: koda ewlehiyê bo e-nameyê webauthn: kilîtên ewlehiyê - description_html: Heke çalakiya ku nas nakî dibînî, çêtir dibe ku borînpeyva xwe biguherînî û rastandina du-gavî çalak bikî. + description_html: Çalakiya ku nas nakî dibînî, çêtir dibe ku borînpeyva xwe biguherînî û rastandina du-gavî çalak bikî. empty: Dîroka piştrastkirinê tune ye failed_sign_in_html: Hewldana têketinê ser neket bi%{method} ji %{ip} (%{browser}) de successful_sign_in_html: Bi serkeftî têketin bi %{method} ji %{ip}(%{browser}) çêbû @@ -1707,7 +1737,7 @@ ku: change_password: borînpeyva xwe biguherîne details: 'Li vir hûrgiliyên hewldanên têketinê hene:' explanation: Me têketineke nû ji ajimêra te ji navnîşaneke IP ya nû dît. - further_actions_html: Ku ev ne tu bû, em ji te re pêşniyar dikin ku tu di tavilê de %{action} bikî û piştrastkirina du-gavî çalak bikî da ku ajimêra te di ewlehiyê de bimîne. + further_actions_html: Ku ev ne tu ye, em pêşniyar dikin ku tu di tavilê de %{action} û piştrastkirina du-gavî çalak bikî da ku ajimêra te di ewlehiyê de bimîne. subject: Ajimêra te ji navnîşaneke IP ya nû ve hatiye gihîştin title: Têketineke nû warning: @@ -1753,7 +1783,7 @@ ku: review_preferences_step: Pê bawer be ku vebijêrkên xwe saz bikî, wek mînak kîjan e-nameyên ku tu dixwaziî wergirîne, an tu dixwazî weşanên te ji kîjan astê nehêniyê de kesanekirî bin. Heke nexweşiya te ya tevgerê tune be, tu dikarî hilbijêrî ku GIF ya xweser çalak bibe. subject: Tu bi xêr hatî Mastodon tip_federated_timeline: Demnameya giştî dimenêke gelemperî a Mastodon e. Lê tenê kesên ku ciranên te endamên wê ne dihewîne, ji ber vê yekê ew hemû nîne. - tip_following: Tu rêvebir (ên) rajeker wek berdest dişopînî. Ji bo mirovên balkêştir bibînî, demnameya herêmî û federasyonî kontrol bike. + tip_following: Tu rêvebir (ên) rajeker wek berdest dişopînî. Ji bo mirovên balkêştir bibînî, demnameya herêmî û giştî kontrol bike. tip_local_timeline: Demnameya herêmî, dimenêke bi giştî ye li ser %{instance} e. Ev ciranên te yên herî nêzik in! tip_mobile_webapp: Ger geroka te ya desta pêşkêşî te bike ku tu Mastodon li ser ekrana xwe ya malê lê zêde bikî, tu dikarî agahdariyên push bistînî. Ew bi gelek awayan mîna serîlêdanek xwemalî tevdigere! tips: Serbend diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 9c20a8f8af4..f51c231a6c2 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1221,6 +1221,8 @@ pl: edit: add_keyword: Dodaj słowo kluczowe keywords: Słowa kluczowe + statuses: Pojedyncze wpisy + statuses_hint_html: Ten filtr ma zastosowanie do wybierania poszczególnych postów niezależnie od tego, czy pasują one do słów kluczowych poniżej. Możesz przejrzeć te posty i usunąć je z filtra klikając tutaj. title: Edytuj filtr errors: deprecated_api_multiple_keywords: Te parametry nie mogą zostać zmienione z tej aplikacji, ponieważ dotyczą więcej niż jednego słowa kluczowego. Użyj nowszej wersji aplikacji lub interfejsu internetowego. @@ -1240,6 +1242,13 @@ pl: new: save: Zapisz jako nowy filtr title: Dodaj nowy filtr + statuses: + back_to_filter: Powrót do filtra + batch: + remove: Usuń z filtra + index: + hint: Ten filtr ma zastosowanie do wybierania poszczególnych postów niezależnie od innych kryteriów. Możesz dodać więcej postów do tego filtra z interfejsu WWW. + title: Filtrowane posty footer: developers: Dla programistów more: Więcej… diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index f136244030a..cf450f8256b 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -85,6 +85,7 @@ ca: ip: Introdueix una adreça IPv4 o IPv6. Pots bloquejar rangs complets amb la sintaxi CIDR. Ves a compte no et bloquegis a tu mateix! severities: no_access: Bloqueja l’accés a tots els recursos + sign_up_block: Els nous registres no seran possibles sign_up_requires_approval: Els nous registres requeriran la teva aprovació severity: Tria què passarà amb les sol·licituds des d’aquesta IP rule: @@ -219,6 +220,7 @@ ca: ip: IP severities: no_access: Bloquejar l’accés + sign_up_block: Bloqueja registres sign_up_requires_approval: Limitar els registres severity: Regla notification_emails: diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index 0c190f1b3a0..5077e16ff92 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -85,6 +85,7 @@ da: ip: Angiv en IPv4- eller IPv6-adresse. Hele intervaller kan blokeres vha. CIDR-syntaksen. Pas på med ikke selv at blive låst ude! severities: no_access: Blokér adgang til alle ressourcer + sign_up_block: Nye tilmeldinger vil ikke være mulige sign_up_requires_approval: Nye tilmeldinger kræver din godkendelse severity: Afgør, hvordan forespørgsler fra denne IP behandles rule: @@ -219,6 +220,7 @@ da: ip: IP severities: no_access: Blokér adgang + sign_up_block: Blokér tilmeldinger sign_up_requires_approval: Begræns tilmeldinger severity: Regel notification_emails: diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index 4d0cc511880..bbeb610ecca 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -85,6 +85,7 @@ de: ip: Gebe eine IPv4- oder IPv6-Adresse an. Du kannst ganze Bereiche mit der CIDR-Syntax blockieren. Achte darauf, dass du dich nicht aussperrst! severities: no_access: Zugriff auf alle Ressourcen blockieren + sign_up_block: Neue Anmeldungen werden nicht möglich sein sign_up_requires_approval: Neue Anmeldungen erfordern deine Zustimmung severity: Wähle aus, was mit Anfragen aus dieser IP passiert rule: @@ -219,6 +220,7 @@ de: ip: IP-Adresse severities: no_access: Zugriff sperren + sign_up_block: Anmeldungen blockieren sign_up_requires_approval: Anmeldungen begrenzen severity: Regel notification_emails: diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml index 63a68c1c025..9e1464a4ff6 100644 --- a/config/locales/simple_form.el.yml +++ b/config/locales/simple_form.el.yml @@ -76,6 +76,7 @@ el: ip: Εισάγετε μια διεύθυνση IPv4 ή IPv6. Μπορείτε να αποκλείσετε ολόκληρο το εύρος χρησιμοποιώντας τη σύνταξη CIDR. Προσέξτε να μην κλειδώσετε τον εαυτό σας! severities: no_access: Αποκλεισμός πρόσβασης σε όλους τους πόρους + sign_up_block: Νέες εγγραφές δεν θα είναι δυνατές sign_up_requires_approval: Νέες εγγραφές θα απαιτούν την έγκριση σας severity: Επιλέξτε τι θα γίνεται με αιτήσεις από αυτήν την διεύθυνση IP rule: @@ -198,6 +199,7 @@ el: ip: Διεύθυνση IP severities: no_access: Αποκλεισμός πρόσβασης + sign_up_block: Αποκλεισμός εγγραφών sign_up_requires_approval: Περιορισμός εγγραφών severity: Κανόνας notification_emails: diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml index d61666834a1..53b25da8e57 100644 --- a/config/locales/simple_form.es-AR.yml +++ b/config/locales/simple_form.es-AR.yml @@ -85,6 +85,7 @@ es-AR: ip: Ingresá una dirección IPv4 ó IPv6. Podés bloquear rangos completos usando la sintaxis CIDR. ¡Tené cuidado de no bloquearte vos mismo! severities: no_access: Bloquear acceso a todos los recursos + sign_up_block: Los nuevos registros se deshabilitarán sign_up_requires_approval: Los nuevos registros requerirán tu aprobación severity: Elegí lo que pasará con las solicitudes desde esta dirección IP rule: @@ -219,6 +220,7 @@ es-AR: ip: Dirección IP severities: no_access: Bloquear acceso + sign_up_block: Bloquear registros sign_up_requires_approval: Limitar registros severity: Regla notification_emails: diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml index cd390493c98..25efe37cd68 100644 --- a/config/locales/simple_form.es.yml +++ b/config/locales/simple_form.es.yml @@ -85,6 +85,7 @@ es: ip: Introduzca una dirección IPv4 o IPv6. Puede bloquear rangos completos usando la sintaxis CIDR. ¡Tenga cuidado de no quedarse fuera! severities: no_access: Bloquear acceso a todos los recursos + sign_up_block: Los nuevos registros se deshabilitarán sign_up_requires_approval: Nuevos registros requerirán su aprobación severity: Elegir lo que pasará con las peticiones desde esta IP rule: @@ -219,6 +220,7 @@ es: ip: IP severities: no_access: Bloquear acceso + sign_up_block: Bloquear registros sign_up_requires_approval: Limitar registros severity: Regla notification_emails: diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index 8962f0b5d5a..189f51ab65f 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -37,6 +37,7 @@ fi: current_password: Turvallisuussyistä kirjoita nykyisen tilin salasana current_username: Vahvista kirjoittamalla nykyisen tilin käyttäjätunnus digest: Lähetetään vain pitkän poissaolon jälkeen ja vain, jos olet saanut suoria viestejä poissaolosi aikana + discoverable: Salli tuntemattomien löytää tilisi suositusten, trendien ja muiden ominaisuuksien kautta email: Sinulle lähetetään vahvistussähköposti fields: Sinulla voi olla korkeintaan 4 asiaa profiilissasi taulukossa header: PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px @@ -48,6 +49,7 @@ fi: phrase: Täytetään riippumatta julkaisun kirjainkoon tai sisällön varoituksesta scopes: Mihin sovellusliittymiin sovellus pääsee käsiksi. Jos valitset ylätason laajuuden, sinun ei tarvitse valita yksittäisiä. setting_aggregate_reblogs: Älä näytä uusia tehosteita viesteille, joita on äskettäin tehostettu (koskee vain äskettäin saatuja tehosteita) + setting_always_send_emails: Yleensä sähköposti-ilmoituksia ei lähetetä, kun käytät aktiivisesti Mastodonia setting_default_sensitive: Arkaluontoinen media on oletuksena piilotettu ja se voidaan näyttää yhdellä napsautuksella setting_display_media_default: Piilota arkaluonteiseksi merkitty media setting_display_media_hide_all: Piilota aina kaikki media @@ -66,6 +68,11 @@ fi: with_dns_records: Annetun verkkotunnuksen DNS-tietueet yritetään ratkaista ja tulokset myös estetään featured_tag: name: 'Voit halutessasi käyttää jotakin näistä:' + filters: + action: Valitse, mikä toiminto suoritetaan, kun viesti vastaa suodatinta + actions: + hide: Piilota suodatettu sisältö kokonaan ja käyttäydy ikään kuin sitä ei olisi olemassa + warn: Piilota suodatettu sisältö varoituksen taakse, jossa mainitaan suodattimen otsikko form_challenge: current_password: Olet menossa suojatulle alueelle imports: @@ -89,6 +96,13 @@ fi: name: Voit muuttaa esimerkiksi kirjaimia paremmin luettavaksi user: chosen_languages: Kun valittu, vain valituilla kielillä julkaistut viestit näkyvät julkisilla aikajanoilla + role: Rooli määrää, mitkä käyttöoikeudet käyttäjällä on + user_role: + color: Väri, jota käytetään roolin koko käyttöliittymässä, RGB heksamuodossa + highlighted: Tämä tekee roolista julkisesti näkyvän + name: Roolin julkinen nimi, jos rooli on asetettu näytettäväksi mekkinä + permissions_as_keys: Käyttäjillä, joilla on tämä rooli, on käyttöoikeus... + position: Korkeampi rooli ratkaisee konfliktit tietyissä tilanteissa. Tiettyjä toimintoja voidaan suorittaa vain rooleille, joiden prioriteetti on pienempi webhook: events: Valitse lähetettävät tapahtumat url: Mihin tapahtumat lähetetään diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index 0727fb97f46..a9d80140997 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -85,6 +85,7 @@ gl: ip: Escribe un enderezo IPv4 ou IPv6. Podes bloquear rangos completos usando a sintaxe CIDR. Ten coidado e non te bloquees a ti mesma! severities: no_access: Bloquear acceso a tódolos recursos + sign_up_block: Non se poderán rexistrar novas contas sign_up_requires_approval: Os novos rexistros requerirán a túa aprobación severity: Escolle que acontecerá coas peticións desde este IP rule: @@ -219,6 +220,7 @@ gl: ip: IP severities: no_access: Bloquear acceso + sign_up_block: Bloquear novos rexistros sign_up_requires_approval: Limitar o rexistro severity: Regra notification_emails: diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index d0ae814e6d6..df19f4aa7a5 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -85,6 +85,7 @@ hu: ip: Írj be egy IPv4 vagy IPv6 címet. A CIDR formátum használatával teljes tartományokat tilthatsz ki. Légy óvatos, hogy magadat véletlenül se zárd ki! severities: no_access: Elérés tiltása minden erőforráshoz + sign_up_block: Új feliratkozások nem lesznek lehetségesek sign_up_requires_approval: Új regisztrációk csak a jóváhagyásoddal történhetnek majd meg severity: Válaszd ki, mi történjen a kérésekkel erről az IP-ről rule: @@ -219,6 +220,7 @@ hu: ip: IP severities: no_access: Elérés letiltása + sign_up_block: Feliratkozások letiltása sign_up_requires_approval: Regisztrációk korlátozása severity: Szabály notification_emails: diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml index facef6f18b8..60cbb334199 100644 --- a/config/locales/simple_form.is.yml +++ b/config/locales/simple_form.is.yml @@ -85,6 +85,7 @@ is: ip: Settu inn IPv4 eða IPv6 vistfang. Þú getur lokað á svið vistfanga með því að nota CIDR-framsetningu. Gættu þess að loka ekki sjálfa/n þig úti! severities: no_access: Loka á aðgang að öllum tilföngum + sign_up_block: Nýskráningar verða ekki mögulegar sign_up_requires_approval: Nýskráningar munu þurfa samþykki þitt severity: Veldu hvað munir gerast við beiðnir frá þessu IP-vistfangi rule: @@ -219,6 +220,7 @@ is: ip: IP-vistfang severities: no_access: Loka á aðgang + sign_up_block: Loka á nýskráningar sign_up_requires_approval: Takmarka nýskráningar severity: Regla notification_emails: diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index d2ffda88863..50a4caae9ac 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -85,6 +85,7 @@ it: ip: Inserisci un indirizzo IPv4 o IPv6. Puoi bloccare interi intervalli usando la sintassi CIDR. Fai attenzione a non bloccare te stesso! severities: no_access: Blocca l'accesso a tutte le risorse + sign_up_block: Le nuove iscrizioni non saranno possibili sign_up_requires_approval: Le nuove iscrizioni richiederanno la tua approvazione severity: Scegli cosa accadrà con le richieste da questo IP rule: @@ -219,6 +220,7 @@ it: ip: IP severities: no_access: Blocca accesso + sign_up_block: Blocca iscrizioni sign_up_requires_approval: Limita iscrizioni severity: Regola notification_emails: diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index 79c28b4fc17..5469a7c04ac 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -85,6 +85,7 @@ ko: ip: IPv4 또는 IPv6 주소를 입력하세요. CIDR 문법을 사용해서 모든 범위를 차단할 수도 있습니다. 자기 자신을 잠가버리지 않도록 주의하세요! severities: no_access: 모든 자원에 대한 접근 차단 + sign_up_block: 새 가입이 불가능하게 됩니다 sign_up_requires_approval: 새 가입이 승인을 필요로 하도록 합니다 severity: 해당 IP로부터의 요청에 대해 무엇이 일어나게 할 지 고르세요 rule: @@ -219,6 +220,7 @@ ko: ip: IP severities: no_access: 접근 차단 + sign_up_block: 가입 차단 sign_up_requires_approval: 가입 제한 severity: 규칙 notification_emails: diff --git a/config/locales/simple_form.ku.yml b/config/locales/simple_form.ku.yml index ea6db0972c6..d08b4bf051a 100644 --- a/config/locales/simple_form.ku.yml +++ b/config/locales/simple_form.ku.yml @@ -70,6 +70,11 @@ ku: with_dns_records: Hewl tê dayîn ku tomarên DNSê yên li qada jê re hatine dayîn were çareserkirin û encamên wê jî were astengkirin featured_tag: name: 'Belkî tu yekê bi kar bînî çi van:' + filters: + action: Hilbijêre ku dema şandiyek bi parzûnê re lihevhatî be bila kîjan çalakî were pêkanîn + actions: + hide: Naveroka parzûnkirî bi tevahî veşêre, mîna ku ew tune be tevbigere + warn: Naveroka parzûnkirî li pişt hişyariyek ku sernavê parzûnê qal dike veşêre form_challenge: current_password: Tu dikevî qadeke ewledar imports: @@ -82,6 +87,7 @@ ku: ip: Têkeve navnîşana IPv4 an jî IPv6'yek. Tu dikarî bi hevoksazî ya CIDR re hemî valahîyan asteng bikî. Hay ji xwe hebe ku xwe derve nehêle! severities: no_access: Gihîştina hemî çavkaniyan asteng bike + sign_up_block: Tomarkirinên nû wê ne pêkan bin sign_up_requires_approval: Tomarkirinên nû de pejirandina te pêwîste severity: Daxwazên ku ji vê IPyê tên dê çi bibe hilbijêre rule: @@ -93,7 +99,12 @@ ku: name: Tîpan, mînak ji bo ku bêhtir paknivîs bibe, tenê rewşa tîpên girdek/hûrdek dikarî biguherînî user: chosen_languages: Dema were nîşankirin, tenê parvekirinên bi zimanên hilbijartî dê di rêzikên giştî de werin nîşandan + role: Rola kîjan mafdayînên bikarhêner heye kontrol dike user_role: + color: Renga ku were bikaranîn ji bo rola li seranserê navrûya bikarhêneriyê, wekî RGB di forma hex + highlighted: Ev rola xwe ji raya giştî re xuya dike + name: Navê giştî yê rolê, ku rol wekî nîşanekê were nîşankirin + permissions_as_keys: Bikarhênerên bi vê rolê wê bigihîjin... position: Rola bilind di hinek rewşan de biryara çareserkirina nakokiyan dide. Hinej çalakî tenê dikarin li ser rolên bi pêşanînek kêmtir bêne kirin webhook: events: Bûyeran hilbijêre bo şandinê @@ -185,6 +196,7 @@ ku: setting_use_pending_items: Awayê hêdî severity: Asta girîngiyê sign_in_token_attempt: Koda ewlehiyê + title: Sernav type: Cureya têxistinê username: Navê bikarhêneriyê username_or_email: Navê bikarhêner an jî e-name @@ -193,6 +205,10 @@ ku: with_dns_records: Tomarên MX û IP yên hundirê navper lê zêde bike featured_tag: name: Hashtag + filters: + actions: + hide: Bi tevahî veşêre + warn: Bi hişyariyekê veşêre interactions: must_be_follower: Danezanên ji kesên ku ne şopînerên min tên asteng bike must_be_following: Agahdariyan asteng bike ji kesên ku tu wan naşopînî @@ -206,6 +222,7 @@ ku: ip: IP severities: no_access: Gihîştinê asteng bike + sign_up_block: Tomarkirinan asteng bike sign_up_requires_approval: Tomaran sînordar bike severity: Rêbaz notification_emails: @@ -229,6 +246,8 @@ ku: user: role: Rol user_role: + color: Rengê nîşanê + highlighted: Li ser profîlên bikarhêner rola wekî nîşan bide nîşankirin name: Nav permissions_as_keys: Maf position: Pêşikî diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index ad8f3bd4d0a..d73da1c2a7c 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -85,6 +85,7 @@ lv: ip: Ievadi IPv4 vai IPv6 adresi. Izmantojot CIDR sintaksi, tu vari bloķēt visus diapazonus. Esi piesardzīgs un neizslēdz pats sevi! severities: no_access: Bloķēt piekļuvi visiem resursiem + sign_up_block: Jaunas pieteikšanās nebūs iespējamas sign_up_requires_approval: Jaunām reģistrācijām būs nepieciešams tavs apstiprinājums severity: Izvēlies, kas notiks ar pieprasījumiem no šīs IP adreses rule: @@ -219,6 +220,7 @@ lv: ip: IP severities: no_access: Bloķēt piekļuvi + sign_up_block: Bloķēt pieteikšanās sign_up_requires_approval: Ierobežot reģistrēšanos severity: Noteikumi notification_emails: diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml index e77457f94e6..ab6c2e3ff21 100644 --- a/config/locales/simple_form.pt-PT.yml +++ b/config/locales/simple_form.pt-PT.yml @@ -85,6 +85,7 @@ pt-PT: ip: Introduza um endereço IPv4 ou IPv6. Pode bloquear intervalos inteiros usando a sintaxe CIDR. Tenha cuidado para não se bloquear a sí mesmo! severities: no_access: Bloquear o acesso a todos os recursos + sign_up_block: Não serão possíveis novas inscrições sign_up_requires_approval: Novas inscrições requererão a sua aprovação severity: Escolha o que acontecerá com as solicitações deste IP rule: @@ -219,6 +220,7 @@ pt-PT: ip: IP severities: no_access: Bloquear acesso + sign_up_block: Bloquear inscrições sign_up_requires_approval: Limitar inscrições severity: Regra notification_emails: diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index b144b29d5c9..8f897c91745 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -85,6 +85,7 @@ ru: ip: Введите IPv4 или IPv6 адрес. Вы можете блокировать целые диапазоны, используя синтаксис CIDR. Будьте осторожны, не заблокируйте самого себя! severities: no_access: Заблокировать доступ ко всем ресурсам + sign_up_block: Новые регистрации будут невозможны sign_up_requires_approval: Новые регистрации потребуют вашего одобрения severity: Выберите, что будет происходить с запросами с этого IP rule: @@ -219,6 +220,7 @@ ru: ip: IP severities: no_access: Блокировать доступ + sign_up_block: Заблокировать регистрацию sign_up_requires_approval: Ограничить регистрации severity: Правило notification_emails: diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml index 640d2c27ecc..854670fe504 100644 --- a/config/locales/simple_form.sl.yml +++ b/config/locales/simple_form.sl.yml @@ -85,6 +85,7 @@ sl: ip: Vnesite naslov IPv4 oz. IPv6. S skladnjo CIDR lahko blokirate celotne obsege. Pazite, da se ne zaklenete ven! severities: no_access: Blokiraj dostop do vseh virov + sign_up_block: Nove registracije ne bodo možne sign_up_requires_approval: Za nove registracije bo potrebna vaša odobritev severity: Izberite, kaj se bo zgodilo z zahtevami iz tega IP-naslova rule: @@ -219,6 +220,7 @@ sl: ip: IP severities: no_access: Blokiraj dostop + sign_up_block: Blokiraj registracije sign_up_requires_approval: Omeji število prijav severity: Pravilo notification_emails: diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index c311eb18937..a90c3bce9be 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -60,6 +60,7 @@ sv: ip: Ange en IPv4 eller IPv6-adress. Du kan blockera hela intervall med hjälp av CIDR-syntax. Var försiktig så att du inte låser ut dig själv! severities: no_access: Blockera åtkomst till alla resurser + sign_up_block: Nya registreringar inte möjligt sign_up_requires_approval: Nya registreringar kräver ditt godkännande severity: Välj vad som ska hända med förfrågningar från denna IP rule: @@ -176,6 +177,7 @@ sv: ip: IP severities: no_access: Blockera åtkomst + sign_up_block: Blockera registreringar sign_up_requires_approval: Begränsa registreringar severity: Regel notification_emails: diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index 2a31ea9c2bd..8a23d1f6b74 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -85,6 +85,7 @@ th: ip: ป้อนที่อยู่ IPv4 หรือ IPv6 คุณสามารถปิดกั้นทั้งช่วงได้โดยใช้ไวยากรณ์ CIDR ระวังอย่าล็อคตัวคุณเองออก! severities: no_access: ปิดกั้นการเข้าถึงทรัพยากรทั้งหมด + sign_up_block: จะไม่สามารถทำการลงทะเบียนใหม่ sign_up_requires_approval: การลงทะเบียนใหม่จะต้องมีการอนุมัติของคุณ severity: เลือกสิ่งที่จะเกิดขึ้นกับคำขอจาก IP นี้ rule: @@ -219,6 +220,7 @@ th: ip: IP severities: no_access: ปิดกั้นการเข้าถึง + sign_up_block: ปิดกั้นการลงทะเบียน sign_up_requires_approval: จำกัดการลงทะเบียน severity: กฎ notification_emails: diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index f2e728d2a19..f63ad13aa63 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -85,6 +85,7 @@ tr: ip: Bir IPv4 veya IPv6 adresi girin. CIDR sözdizimini kullanarak tüm aralıkları engelleyebilirsiniz. Kendinizi dışarıda bırakmamaya dikkat edin! severities: no_access: Tüm kaynaklara erişimi engelle + sign_up_block: Yeni kayıtlar mümkün olmayacaktır sign_up_requires_approval: Yeni kayıt onayınızı gerektirir severity: Bu IP'den gelen isteklere ne olacağını seçin rule: @@ -219,6 +220,7 @@ tr: ip: IP severities: no_access: Erişimi engelle + sign_up_block: Kayıt olmayı engelle sign_up_requires_approval: Kayıtları sınırla severity: Kural notification_emails: diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml index ec43655e448..df9f1fb4dfd 100644 --- a/config/locales/simple_form.uk.yml +++ b/config/locales/simple_form.uk.yml @@ -85,6 +85,7 @@ uk: ip: Введіть адресу IPv4 або IPv6. Ви можете блокувати цілі діапазони, використовуючи синтаксис CIDR. Будьте обережні, щоб не заблокувати себе! severities: no_access: Заблокувати доступ до всіх ресурсів + sign_up_block: Нові реєстрації будуть неможливі sign_up_requires_approval: Нові реєстрації потребуватимуть затвердження вами severity: Виберіть, що буде відбуватися з запитами з цієї IP rule: @@ -219,6 +220,7 @@ uk: ip: IP severities: no_access: Заборонити доступ + sign_up_block: Блокувати реєстрацію sign_up_requires_approval: Обмеження реєстрації severity: Правило notification_emails: diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index 7bc43a0b068..143064c5d65 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -85,6 +85,7 @@ vi: ip: Nhập một địa chỉ IPv4 hoặc IPv6. Bạn cũng có thể chặn toàn bộ dãy IP bằng cú pháp CIDR. Hãy cẩn thận đừng chặn nhầm toàn bộ! severities: no_access: Chặn truy cập từ tất cả IP này + sign_up_block: Không chấp nhận đăng ký mới sign_up_requires_approval: Bạn sẽ phê duyệt những đăng ký mới từ IP này severity: Chọn hành động nếu nhận được yêu cầu từ IP này rule: @@ -219,6 +220,7 @@ vi: ip: IP severities: no_access: Chặn truy cập + sign_up_block: Chặn đăng ký sign_up_requires_approval: Giới hạn đăng ký severity: Mức độ notification_emails: diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index 703c200c9a9..0c3c28c67a7 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -85,6 +85,7 @@ zh-CN: ip: 输入 IPv4 或 IPv6 地址。你可以使用 CIDR 语法屏蔽 IP 段。小心不要屏蔽自己! severities: no_access: 阻止访问所有资源 + sign_up_block: 无法进行新的账号注册 sign_up_requires_approval: 新注册需要你的批准 severity: 选择如何处理来自此 IP 的请求。 rule: @@ -219,6 +220,7 @@ zh-CN: ip: IP 地址 severities: no_access: 阻止访问 + sign_up_block: 阻止账号注册 sign_up_requires_approval: 限制注册 severity: 规则 notification_emails: diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml index a3e29b3748f..3691af8926e 100644 --- a/config/locales/simple_form.zh-TW.yml +++ b/config/locales/simple_form.zh-TW.yml @@ -85,6 +85,7 @@ zh-TW: ip: 請輸入 IPv4 或 IPv6 位址,亦可以用 CIDR 語法以封鎖整個 IP 區段。小心不要把自己給一併封鎖掉囉! severities: no_access: 封鎖對所有資源存取 + sign_up_block: 無法註冊新帳號 sign_up_requires_approval: 新註冊申請需要先經過您的審核 severity: 請選擇將如何處理來自這個 IP 位址的請求 rule: @@ -219,6 +220,7 @@ zh-TW: ip: IP 位址 severities: no_access: 封鎖 + sign_up_block: 禁止註冊新帳號 sign_up_requires_approval: 限制註冊 severity: 規則 notification_emails: diff --git a/config/locales/sl.yml b/config/locales/sl.yml index e4c510308fd..ea7b8e6ba3b 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -1221,6 +1221,8 @@ sl: edit: add_keyword: Dodaj ključno besedo keywords: Ključne besede + statuses: Posamezne objave + statuses_hint_html: Ta filter se nanaša na posamezne objave ne glede na to, ali se ujemajo s spodnjimi ključnimi besedami. Te objave lahko pregledate in jih odstranite iz filtra, če kliknete tukaj. title: Uredite filter errors: deprecated_api_multiple_keywords: Teh parametrov ni mogoče spremeniti iz tega programa, ker veljajo za več kot eno ključno besedo filtra. Uporabite novejšo izdaj programa ali spletni vmesnik. @@ -1236,10 +1238,27 @@ sl: one: "%{count} ključna beseda" other: "%{count} ključnih besed" two: "%{count} ključni besedi" + statuses: + few: "%{count} objave" + one: "%{count} objava" + other: "%{count} objav" + two: "%{count} objavi" + statuses_long: + few: "%{count} posamezne objave skrite" + one: "%{count} posamezna objava skrita" + other: "%{count} posameznih objav skritih" + two: "%{count} posamezni objavi skriti" title: Filtri new: save: Shrani nov filter title: Dodaj nov filter + statuses: + back_to_filter: Nazaj na filter + batch: + remove: Odstrani iz filtra + index: + hint: Ta filter se nanaša na posamezne objave ne glede na druge pogoje. Filtru lahko dodate več objav prek spletnega vmesnika. + title: Filtrirane objave footer: developers: Razvijalci more: Več… diff --git a/config/locales/th.yml b/config/locales/th.yml index ef5e5e38e00..7f3c25ff125 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -653,6 +653,7 @@ th: manage_announcements: จัดการประกาศ manage_announcements_description: อนุญาตให้ผู้ใช้จัดการประกาศในเซิร์ฟเวอร์ manage_appeals: จัดการการอุทธรณ์ + manage_appeals_description: อนุญาตให้ผู้ใช้ตรวจทานการอุทธรณ์ต่อการกระทำการควบคุม manage_blocks: จัดการการปิดกั้น manage_blocks_description: อนุญาตให้ผู้ใช้ปิดกั้นผู้ให้บริการอีเมลและที่อยู่ IP manage_custom_emojis: จัดการอีโมจิที่กำหนดเอง @@ -827,6 +828,7 @@ th: allow_account: อนุญาตผู้สร้าง disallow: ไม่อนุญาตโพสต์ disallow_account: ไม่อนุญาตผู้สร้าง + not_discoverable: ผู้สร้างไม่ได้เลือกรับให้สามารถค้นพบได้ shared_by: other: แบ่งปันและชื่นชอบ %{friendly_count} ครั้ง title: โพสต์ที่กำลังนิยม @@ -992,6 +994,7 @@ th: title: ติดตาม %{acct} challenge: confirm: ดำเนินการต่อ + hint_html: "เคล็ดลับ: เราจะไม่ถามรหัสผ่านของคุณกับคุณสำหรับชั่วโมงถัดไป" invalid_password: รหัสผ่านไม่ถูกต้อง prompt: ยืนยันรหัสผ่านเพื่อดำเนินการต่อ crypto: diff --git a/config/locales/tr.yml b/config/locales/tr.yml index bc2b730f846..2706070a351 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -79,7 +79,7 @@ tr: following: Onaylamak istediğiniz kişiyi zaten takip ediyor olmalısınız posts: one: Gönderi - other: Toot + other: Gönderiler posts_tab_heading: Tootlar posts_with_replies: Tootlar ve yanıtlar roles: @@ -1181,6 +1181,8 @@ tr: edit: add_keyword: Anahtar sözcük ekle keywords: Anahtar Sözcükler + statuses: Tekil gönderiler + statuses_hint_html: Bu filtre aşağıdaki anahtar kelimelere eşlenip eşlenmediklerinden bağımsız olarak tekil gönderileri seçmek için uygulanıyor. Bu gönderileri gözden geçirip, buraya tıklayarak filtreden kaldırabilirsiniz. title: Filtreyi düzenle errors: deprecated_api_multiple_keywords: Bu parametreler, birden fazla filtre anahtar sözcüğü için geçerli olduğundan dolayı bu uygulama içerisinden değiştirilemezler. Daha yeni bir uygulama veya web arayüzünü kullanın. @@ -1194,10 +1196,23 @@ tr: keywords: one: "%{count} anahtar sözcük" other: "%{count} anahtar sözcük" + statuses: + one: "%{count} gönderi" + other: "%{count} gönderi" + statuses_long: + one: "%{count} tekil gönderi gizli" + other: "%{count} tekil gönderi gizli" title: Filtreler new: save: Yeni filtre kaydet title: Yeni filtre ekle + statuses: + back_to_filter: Filtreye dön + batch: + remove: Filtreden kaldır + index: + hint: Bu filtre diğer ölçütlerden bağımsız olarak tekil gönderileri seçmek için uygulanıyor. Web arayüzünü kullanarak bu filtreye daha fazla gönderi ekleyebilirsiniz. + title: Filtrelenmiş gönderiler footer: developers: Geliştiriciler more: Daha Fazla… diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 708ce998e4e..c1ca26c52a6 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -513,6 +513,7 @@ uk: confirm_purge: Ви впевнені, що хочете видалити ці дані з цього домену? content_policies: comment: Внутрішня примітка + description_html: Ви можете визначити правила вмісту що буде застосовано до всіх облікових записів із цього домену та будь-якого з його піддоменів. policies: reject_media: Відхилити медіа reject_reports: Відхилити скарги @@ -617,7 +618,10 @@ uk: action_log: Журнал подій action_taken_by: Дія виконана actions: + delete_description_html: Дописи, на які скаржилися будуть видалені, а попередження буде записано, щоб допомогти вам підвищити рівень майбутніх порушень того самого облікового запису. + mark_as_sensitive_description_html: Медіа у дописах, на які скаржилися будуть позначені делікатними, а попередження буде записано, щоб допомогти вам підвищити рівень майбутніх порушень того самого облікового запису. other_description_html: Більше опцій керування поведінкою облікового запису і налаштування комунікації з обліковим записом, на який поскаржилися. + resolve_description_html: Не буде застосовано жодних дій проти облікового запису, на який скаржилися, не буде записано попередження, а скаргу буде закрито. silence_description_html: Профіль буде видимий лише тим, хто вже стежить за ним або знайде його самостійно, сильно обмежуючи його знаходження. Можна потім скасувати. suspend_description_html: Профіль і весь його вміст буде недоступним, поки його не буде видалено. Взаємодія з обліковим записом буде неможливою. add_to_report: Додати ще подробиць до скарги @@ -892,6 +896,7 @@ uk: allow_account: Дозволити автора disallow: Заборонити допис disallow_account: Заборонити автора + not_discoverable: Автор не вирішив бути видимим title: Популярні дописи tags: current_score: Поточний результат %{score} @@ -967,14 +972,18 @@ uk: body_remote: Хтось з домену %{domain} поскаржився(-лася) на %{target} subject: Нова скарга до %{instance} (#%{id}) new_trends: + body: 'Ці елементи потребують розгляду перед оприлюдненням:' new_trending_links: no_approved_links: На цей час немає схвалених популярних посилань. + requirements: 'Кожен з цих кандидатів може перевершити #%{rank} затвердженого популярного посилання, яке зараз на «%{lowest_link_title}» з рейтингом %{lowest_link_score}.' title: Популярні посилання new_trending_statuses: no_approved_statuses: На цей час немає схвалених популярних дописів. + requirements: 'Кожен з цих кандидатів може перевершити #%{rank} затвердженого популярного допису, який зараз на %{lowest_status_url} з рейтингом %{lowest_status_score}.' title: Популярні дописи new_trending_tags: no_approved_tags: На цей час немає схвалених популярних хештегів. + requirements: 'Кожен з цих кандидатів може перевершити #%{rank} затвердженого популярного хештеґу, який зараз на #%{lowest_tag_name} з рейтингом %{lowest_tag_score}.' title: Популярні хештеги subject: Нове популярне до розгляду на %{instance} aliases: @@ -1129,6 +1138,7 @@ uk: approve_appeal: Схвалити апеляцію associated_report: Пов'язана скарга created_at: Застарілі + description_html: Це дії, виконані проти вашого облікового запису та попереджень, які були відправлені вам персоналом %{instance}. recipient: Адресант reject_appeal: Відхилити апеляцію status: 'Допис #%{id}' @@ -1356,7 +1366,7 @@ uk: title: Поки ви були відсутні... favourite: body: 'Ваш статус подобається %{name}:' - subject: Користувачу %{name} сподобався ваш статус + subject: Ваш статус сподобався %{name} title: Нове вподобання follow: body: "%{name} тепер підписаний(-а) на вас!" diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 743d9b608ff..625d3a07efc 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1159,6 +1159,7 @@ vi: edit: add_keyword: Thêm từ khoá keywords: Từ khóa + statuses: Những tút riêng lẻ title: Chỉnh sửa bộ lọc errors: deprecated_api_multiple_keywords: Không thể thay đổi các tham số này từ ứng dụng này vì chúng áp dụng cho nhiều hơn một từ khóa bộ lọc. Sử dụng ứng dụng mới hơn hoặc giao diện web. @@ -1171,10 +1172,18 @@ vi: expires_on: Hết hạn vào %{date} keywords: other: "%{count} từ khóa" + statuses: + other: "%{count} tút" title: Bộ lọc new: save: Lưu thành bộ lọc mới title: Thêm bộ lọc mới + statuses: + back_to_filter: Quay về bộ lọc + batch: + remove: Xóa khỏi bộ lọc + index: + title: Những tút đã lọc footer: developers: Phát triển more: Nhiều hơn diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 0bf1833f2b8..1a71554bb7a 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1161,6 +1161,8 @@ zh-CN: edit: add_keyword: 添加关键词 keywords: 关键词 + statuses: 个别嘟文 + statuses_hint_html: 无论是否匹配下列关键词,此过滤器适用于选用个别嘟文。你可以点击此处来审核这些嘟文,并从过滤器中移除。 title: 编辑过滤器 errors: deprecated_api_multiple_keywords: 这些参数不能从此应用程序更改,因为它们应用于一个以上的过滤关键字。 使用较新的应用程序或网页界面。 @@ -1173,10 +1175,21 @@ zh-CN: expires_on: "%{date} 后到期" keywords: other: "%{count} 关键词" + statuses: + other: "%{count} 条嘟文" + statuses_long: + other: "%{count} 条个别嘟文已隐藏" title: 过滤器 new: save: 保存新过滤器 title: 添加新的过滤器 + statuses: + back_to_filter: 返回至过滤器 + batch: + remove: 从过滤器中移除 + index: + hint: 无论其他条件如何,此过滤器适用于选用个别嘟文。你可以从网页界面中向此过滤器加入更多嘟文。 + title: 过滤的嘟文 footer: developers: 开发者 more: 更多… diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 1490aeef131..c055ba69f52 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -1163,6 +1163,8 @@ zh-TW: edit: add_keyword: 新增關鍵字 keywords: 關鍵字 + statuses: 各別嘟文 + statuses_hint_html: 此過濾器會套用至所選之各別嘟文,不管它們有無匹配到以下的關鍵字。您可以檢視這些嘟文而按此將它們從過濾器中移除。 title: 編輯篩選條件 errors: deprecated_api_multiple_keywords: 這些參數無法從此應用程式中更改,因為它們適用於一或多個過濾器關鍵字。請使用較新的應用程式或是網頁介面。 @@ -1175,10 +1177,21 @@ zh-TW: expires_on: 於 %{date} 過期 keywords: other: "%{count} 個關鍵字" + statuses: + other: "%{count} 則嘟文" + statuses_long: + other: "%{count} 則各別嘟文被隱藏" title: 過濾器 new: save: 儲存新過濾器 title: 新增篩選器 + statuses: + back_to_filter: 回到過濾器 + batch: + remove: 從過濾器中移除 + index: + hint: 此過濾器會套用至所選之各別嘟文,不管它們有無符合其他條件。您可以從網頁介面中將更多嘟文加入至此過濾器。 + title: 已過濾之嘟文 footer: developers: 開發者 more: 更多...... From 63adef2021b05f282c5a0c6ba25f99e093620e88 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 25 Aug 2022 17:36:01 +0200 Subject: [PATCH 230/646] Change wording of a few filter-related strings (#19050) Follow-up on #18945 addressing review comments --- config/locales/en.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 596cc1a284c..e495ef841cc 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1182,7 +1182,7 @@ en: add_keyword: Add keyword keywords: Keywords statuses: Individual posts - statuses_hint_html: This filter applies to select individual posts regardless of whether they match the keywords below. You can review these posts and remove them from the filter by clicking here. + statuses_hint_html: This filter applies to select individual posts regardless of whether they match the keywords below. Review or remove posts from the filter. title: Edit filter errors: deprecated_api_multiple_keywords: These parameters cannot be changed from this application because they apply to more than one filter keyword. Use a more recent application or the web interface. @@ -1211,7 +1211,7 @@ en: batch: remove: Remove from filter index: - hint: This filter applies to select individual posts regardless of other criteria. You can add more posts to this filter from the Web interface. + hint: This filter applies to select individual posts regardless of other criteria. You can add more posts to this filter from the web interface. title: Filtered posts footer: developers: Developers From 2cae5f5b8d4d0702fe9835a0ce2782f238755d0c Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 25 Aug 2022 17:36:35 +0200 Subject: [PATCH 231/646] =?UTF-8?q?Fix=20=E2=80=9CFilter=20this=20post?= =?UTF-8?q?=E2=80=9D=20potentially=20listing=20deleted=20filters=20(#19051?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/javascript/mastodon/reducers/filters.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/reducers/filters.js b/app/javascript/mastodon/reducers/filters.js index cc1d3349c59..f4f97cd3a8a 100644 --- a/app/javascript/mastodon/reducers/filters.js +++ b/app/javascript/mastodon/reducers/filters.js @@ -35,7 +35,7 @@ export default function filters(state = ImmutableMap(), action) { case FILTERS_CREATE_SUCCESS: return normalizeFilter(state, action.filter); case FILTERS_FETCH_SUCCESS: - //TODO: handle deleting obsolete filters + return normalizeFilters(ImmutableMap(), action.filters); case FILTERS_IMPORT: return normalizeFilters(state, action.filters); default: From 55bef1e34fc3b07ed7f762d565a161e74e128016 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 25 Aug 2022 17:36:54 +0200 Subject: [PATCH 232/646] Fix quickly switching notification filters resulting in empty or incorrect list (#19052) Follow-up to #18960 The aforementioned PR fixed an issue in which switching notification filters while notifications were loading prevented the query for the new filter from running, but another issue remained: if the first query completed after the second one, its results would override the second one, thus leading to the same issue. This commit cancels the first request if it is still running, before issuing the second one. --- .../mastodon/actions/notifications.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index 7f62e6c0420..d4588db2c94 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -141,15 +141,22 @@ const excludeTypesFromFilter = filter => { const noOp = () => {}; +let expandNotificationsController = new AbortController(); + export function expandNotifications({ maxId, forceLoad } = {}, done = noOp) { return (dispatch, getState) => { const activeFilter = getState().getIn(['settings', 'notifications', 'quickFilter', 'active']); const notifications = getState().get('notifications'); const isLoadingMore = !!maxId; - if (notifications.get('isLoading') && !forceLoad) { - done(); - return; + if (notifications.get('isLoading')) { + if (forceLoad) { + expandNotificationsController.abort(); + expandNotificationsController = new AbortController(); + } else { + done(); + return; + } } const params = { @@ -174,7 +181,7 @@ export function expandNotifications({ maxId, forceLoad } = {}, done = noOp) { dispatch(expandNotificationsRequest(isLoadingMore)); - api(getState).get('/api/v1/notifications', { params }).then(response => { + api(getState).get('/api/v1/notifications', { params, signal: expandNotificationsController.signal }).then(response => { const next = getLinks(response).refs.find(link => link.rel === 'next'); dispatch(importFetchedAccounts(response.data.map(item => item.account))); @@ -215,7 +222,7 @@ export function expandNotificationsFail(error, isLoadingMore) { type: NOTIFICATIONS_EXPAND_FAIL, error, skipLoading: !isLoadingMore, - skipAlert: !isLoadingMore, + skipAlert: !isLoadingMore || error.name === 'AbortError', }; }; From 43a1bfd05d105cd371af846f06cdf5b75a1b44d3 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 25 Aug 2022 17:36:35 +0200 Subject: [PATCH 233/646] =?UTF-8?q?[Glitch]=20Fix=20=E2=80=9CFilter=20this?= =?UTF-8?q?=20post=E2=80=9D=20potentially=20listing=20deleted=20filters?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Port 2cae5f5b8d4d0702fe9835a0ce2782f238755d0c to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/reducers/filters.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/reducers/filters.js b/app/javascript/flavours/glitch/reducers/filters.js index cc1d3349c59..f4f97cd3a8a 100644 --- a/app/javascript/flavours/glitch/reducers/filters.js +++ b/app/javascript/flavours/glitch/reducers/filters.js @@ -35,7 +35,7 @@ export default function filters(state = ImmutableMap(), action) { case FILTERS_CREATE_SUCCESS: return normalizeFilter(state, action.filter); case FILTERS_FETCH_SUCCESS: - //TODO: handle deleting obsolete filters + return normalizeFilters(ImmutableMap(), action.filters); case FILTERS_IMPORT: return normalizeFilters(state, action.filters); default: From d99f91bceb01b8d7bd48a3872d894226512cc09f Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 25 Aug 2022 17:36:54 +0200 Subject: [PATCH 234/646] [Glitch] Fix quickly switching notification filters resulting in empty or incorrect list Port 55bef1e34fc3b07ed7f762d565a161e74e128016 to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/actions/notifications.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/app/javascript/flavours/glitch/actions/notifications.js b/app/javascript/flavours/glitch/actions/notifications.js index ae3ee1a4c24..4581ebc36f3 100644 --- a/app/javascript/flavours/glitch/actions/notifications.js +++ b/app/javascript/flavours/glitch/actions/notifications.js @@ -153,15 +153,22 @@ const excludeTypesFromFilter = filter => { const noOp = () => {}; +let expandNotificationsController = new AbortController(); + export function expandNotifications({ maxId, forceLoad } = {}, done = noOp) { return (dispatch, getState) => { const activeFilter = getState().getIn(['settings', 'notifications', 'quickFilter', 'active']); const notifications = getState().get('notifications'); const isLoadingMore = !!maxId; - if (notifications.get('isLoading') && !forceLoad) { - done(); - return; + if (notifications.get('isLoading')) { + if (forceLoad) { + expandNotificationsController.abort(); + expandNotificationsController = new AbortController(); + } else { + done(); + return; + } } const params = { @@ -186,7 +193,7 @@ export function expandNotifications({ maxId, forceLoad } = {}, done = noOp) { dispatch(expandNotificationsRequest(isLoadingMore)); - api(getState).get('/api/v1/notifications', { params }).then(response => { + api(getState).get('/api/v1/notifications', { params, signal: expandNotificationsController.signal }).then(response => { const next = getLinks(response).refs.find(link => link.rel === 'next'); dispatch(importFetchedAccounts(response.data.map(item => item.account))); @@ -227,7 +234,7 @@ export function expandNotificationsFail(error, isLoadingMore) { type: NOTIFICATIONS_EXPAND_FAIL, error, skipLoading: !isLoadingMore, - skipAlert: !isLoadingMore, + skipAlert: !isLoadingMore || error.name === 'AbortError', }; }; From 81e1cc5fece9a431c28ca648c2dd4b1b5f643f13 Mon Sep 17 00:00:00 2001 From: Yamagishi Kazutoshi Date: Fri, 26 Aug 2022 03:10:01 +0900 Subject: [PATCH 235/646] Replace to `workbox-webpack-plugin` from `offline-plugin` (#18409) --- app/javascript/mastodon/main.js | 26 +- .../mastodon/service_worker/entry.js | 81 +- .../service_worker/web_push_notifications.js | 7 +- app/javascript/mastodon/storage/db.js | 27 - app/javascript/mastodon/storage/modifier.js | 211 ---- config/webpack/production.js | 84 +- package.json | 7 +- public/sw.js | 2 +- public/sw.js.map | 1 + yarn.lock | 1058 +++++++++++++++-- 10 files changed, 1059 insertions(+), 445 deletions(-) delete mode 100644 app/javascript/mastodon/storage/db.js delete mode 100644 app/javascript/mastodon/storage/modifier.js create mode 120000 public/sw.js.map diff --git a/app/javascript/mastodon/main.js b/app/javascript/mastodon/main.js index bda51f692b7..a66975bfd6a 100644 --- a/app/javascript/mastodon/main.js +++ b/app/javascript/mastodon/main.js @@ -1,9 +1,9 @@ -import * as registerPushNotifications from './actions/push_notifications'; -import { setupBrowserNotifications } from './actions/notifications'; -import { default as Mastodon, store } from './containers/mastodon'; import React from 'react'; import ReactDOM from 'react-dom'; -import ready from './ready'; +import * as registerPushNotifications from 'mastodon/actions/push_notifications'; +import { setupBrowserNotifications } from 'mastodon/actions/notifications'; +import Mastodon, { store } from 'mastodon/containers/mastodon'; +import ready from 'mastodon/ready'; const perf = require('./performance'); @@ -24,10 +24,20 @@ function main() { ReactDOM.render(, mountNode); store.dispatch(setupBrowserNotifications()); - if (process.env.NODE_ENV === 'production') { - // avoid offline in dev mode because it's harder to debug - require('offline-plugin/runtime').install(); - store.dispatch(registerPushNotifications.register()); + + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + import('workbox-window') + .then(({ Workbox }) => { + const wb = new Workbox('/sw.js'); + + return wb.register(); + }) + .then(() => { + store.dispatch(registerPushNotifications.register()); + }) + .catch(err => { + console.error(err); + }); } perf.stop('main()'); }); diff --git a/app/javascript/mastodon/service_worker/entry.js b/app/javascript/mastodon/service_worker/entry.js index b354f3b3321..e4c66cc0001 100644 --- a/app/javascript/mastodon/service_worker/entry.js +++ b/app/javascript/mastodon/service_worker/entry.js @@ -1,20 +1,59 @@ -// import { freeStorage, storageFreeable } from '../storage/modifier'; -import './web_push_notifications'; +import { ExpirationPlugin } from 'workbox-expiration'; +import { precacheAndRoute } from 'workbox-precaching'; +import { registerRoute } from 'workbox-routing'; +import { CacheFirst } from 'workbox-strategies'; +import { handleNotificationClick, handlePush } from './web_push_notifications'; -// function openSystemCache() { -// return caches.open('mastodon-system'); -// } +const CACHE_NAME_PREFIX = 'mastodon-'; function openWebCache() { - return caches.open('mastodon-web'); + return caches.open(`${CACHE_NAME_PREFIX}web`); } function fetchRoot() { return fetch('/', { credentials: 'include', redirect: 'manual' }); } -// const firefox = navigator.userAgent.match(/Firefox\/(\d+)/); -// const invalidOnlyIfCached = firefox && firefox[1] < 60; +precacheAndRoute(self.__WB_MANIFEST); + +registerRoute( + /locale_.*\.js$/, + new CacheFirst({ + cacheName: `${CACHE_NAME_PREFIX}locales`, + plugins: [ + new ExpirationPlugin({ + maxAgeSeconds: 30 * 24 * 60 * 60, // 1 month + maxEntries: 5, + }), + ], + }), +); + +registerRoute( + ({ request }) => request.destination === 'font', + new CacheFirst({ + cacheName: `${CACHE_NAME_PREFIX}fonts`, + plugins: [ + new ExpirationPlugin({ + maxAgeSeconds: 30 * 24 * 60 * 60, // 1 month + maxEntries: 5, + }), + ], + }), +); + +registerRoute( + ({ request }) => ['audio', 'image', 'track', 'video'].includes(request.destination), + new CacheFirst({ + cacheName: `m${CACHE_NAME_PREFIX}media`, + plugins: [ + new ExpirationPlugin({ + maxAgeSeconds: 7 * 24 * 60 * 60, // 1 week + maxEntries: 256, + }), + ], + }), +); // Cause a new version of a registered Service Worker to replace an existing one // that is already installed, and replace the currently active worker on open pages. @@ -52,26 +91,8 @@ self.addEventListener('fetch', function(event) { return response; })); - } /* else if (storageFreeable && (ATTACHMENT_HOST ? url.host === ATTACHMENT_HOST : url.pathname.startsWith('/system/'))) { - event.respondWith(openSystemCache().then(cache => { - return cache.match(event.request.url).then(cached => { - if (cached === undefined) { - const asyncResponse = invalidOnlyIfCached && event.request.cache === 'only-if-cached' ? - fetch(event.request, { cache: 'no-cache' }) : fetch(event.request); - - return asyncResponse.then(response => { - if (response.ok) { - cache - .put(event.request.url, response.clone()) - .catch(()=>{}).then(freeStorage()).catch(); - } - - return response; - }); - } - - return cached; - }); - })); - } */ + } }); + +self.addEventListener('push', handlePush); +self.addEventListener('notificationclick', handleNotificationClick); diff --git a/app/javascript/mastodon/service_worker/web_push_notifications.js b/app/javascript/mastodon/service_worker/web_push_notifications.js index 48a2be7e702..9b75e9b9dc7 100644 --- a/app/javascript/mastodon/service_worker/web_push_notifications.js +++ b/app/javascript/mastodon/service_worker/web_push_notifications.js @@ -75,7 +75,7 @@ const formatMessage = (messageId, locale, values = {}) => const htmlToPlainText = html => unescape(html.replace(//g, '\n').replace(/<\/p>

    /g, '\n\n').replace(/<[^>]*>/g, '')); -const handlePush = (event) => { +export const handlePush = (event) => { const { access_token, notification_id, preferred_locale, title, body, icon } = event.data.json(); // Placeholder until more information can be loaded @@ -189,7 +189,7 @@ const openUrl = url => return self.clients.openWindow(url); }); -const handleNotificationClick = (event) => { +export const handleNotificationClick = (event) => { const reactToNotificationClick = new Promise((resolve, reject) => { if (event.action) { if (event.action === 'expand') { @@ -211,6 +211,3 @@ const handleNotificationClick = (event) => { event.waitUntil(reactToNotificationClick); }; - -self.addEventListener('push', handlePush); -self.addEventListener('notificationclick', handleNotificationClick); diff --git a/app/javascript/mastodon/storage/db.js b/app/javascript/mastodon/storage/db.js deleted file mode 100644 index 377a792a7de..00000000000 --- a/app/javascript/mastodon/storage/db.js +++ /dev/null @@ -1,27 +0,0 @@ -export default () => new Promise((resolve, reject) => { - // ServiceWorker is required to synchronize the login state. - // Microsoft Edge 17 does not support getAll according to: - // Catalog of standard and vendor APIs across browsers - Microsoft Edge Development - // https://developer.microsoft.com/en-us/microsoft-edge/platform/catalog/?q=specName%3Aindexeddb - if (!('caches' in self && 'getAll' in IDBObjectStore.prototype)) { - reject(); - return; - } - - const request = indexedDB.open('mastodon'); - - request.onerror = reject; - request.onsuccess = ({ target }) => resolve(target.result); - - request.onupgradeneeded = ({ target }) => { - const accounts = target.result.createObjectStore('accounts', { autoIncrement: true }); - const statuses = target.result.createObjectStore('statuses', { autoIncrement: true }); - - accounts.createIndex('id', 'id', { unique: true }); - accounts.createIndex('moved', 'moved'); - - statuses.createIndex('id', 'id', { unique: true }); - statuses.createIndex('account', 'account'); - statuses.createIndex('reblog', 'reblog'); - }; -}); diff --git a/app/javascript/mastodon/storage/modifier.js b/app/javascript/mastodon/storage/modifier.js deleted file mode 100644 index 9fadabef44c..00000000000 --- a/app/javascript/mastodon/storage/modifier.js +++ /dev/null @@ -1,211 +0,0 @@ -import openDB from './db'; - -const accountAssetKeys = ['avatar', 'avatar_static', 'header', 'header_static']; -const storageMargin = 8388608; -const storeLimit = 1024; - -// navigator.storage is not present on: -// Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.100 Safari/537.36 Edge/16.16299 -// estimate method is not present on Chrome 57.0.2987.98 on Linux. -export const storageFreeable = 'storage' in navigator && 'estimate' in navigator.storage; - -function openCache() { - // ServiceWorker and Cache API is not available on iOS 11 - // https://webkit.org/status/#specification-service-workers - return self.caches ? caches.open('mastodon-system') : Promise.reject(); -} - -function printErrorIfAvailable(error) { - if (error) { - console.warn(error); - } -} - -function put(name, objects, onupdate, oncreate) { - return openDB().then(db => (new Promise((resolve, reject) => { - const putTransaction = db.transaction(name, 'readwrite'); - const putStore = putTransaction.objectStore(name); - const putIndex = putStore.index('id'); - - objects.forEach(object => { - putIndex.getKey(object.id).onsuccess = retrieval => { - function addObject() { - putStore.add(object); - } - - function deleteObject() { - putStore.delete(retrieval.target.result).onsuccess = addObject; - } - - if (retrieval.target.result) { - if (onupdate) { - onupdate(object, retrieval.target.result, putStore, deleteObject); - } else { - deleteObject(); - } - } else { - if (oncreate) { - oncreate(object, addObject); - } else { - addObject(); - } - } - }; - }); - - putTransaction.oncomplete = () => { - const readTransaction = db.transaction(name, 'readonly'); - const readStore = readTransaction.objectStore(name); - const count = readStore.count(); - - count.onsuccess = () => { - const excess = count.result - storeLimit; - - if (excess > 0) { - const retrieval = readStore.getAll(null, excess); - - retrieval.onsuccess = () => resolve(retrieval.result); - retrieval.onerror = reject; - } else { - resolve([]); - } - }; - - count.onerror = reject; - }; - - putTransaction.onerror = reject; - })).then(resolved => { - db.close(); - return resolved; - }, error => { - db.close(); - throw error; - })); -} - -function evictAccountsByRecords(records) { - return openDB().then(db => { - const transaction = db.transaction(['accounts', 'statuses'], 'readwrite'); - const accounts = transaction.objectStore('accounts'); - const accountsIdIndex = accounts.index('id'); - const accountsMovedIndex = accounts.index('moved'); - const statuses = transaction.objectStore('statuses'); - const statusesIndex = statuses.index('account'); - - function evict(toEvict) { - toEvict.forEach(record => { - openCache() - .then(cache => accountAssetKeys.forEach(key => cache.delete(records[key]))) - .catch(printErrorIfAvailable); - - accountsMovedIndex.getAll(record.id).onsuccess = ({ target }) => evict(target.result); - - statusesIndex.getAll(record.id).onsuccess = - ({ target }) => evictStatusesByRecords(target.result); - - accountsIdIndex.getKey(record.id).onsuccess = - ({ target }) => target.result && accounts.delete(target.result); - }); - } - - evict(records); - - db.close(); - }).catch(printErrorIfAvailable); -} - -export function evictStatus(id) { - evictStatuses([id]); -} - -export function evictStatuses(ids) { - return openDB().then(db => { - const transaction = db.transaction('statuses', 'readwrite'); - const store = transaction.objectStore('statuses'); - const idIndex = store.index('id'); - const reblogIndex = store.index('reblog'); - - ids.forEach(id => { - reblogIndex.getAllKeys(id).onsuccess = - ({ target }) => target.result.forEach(reblogKey => store.delete(reblogKey)); - - idIndex.getKey(id).onsuccess = - ({ target }) => target.result && store.delete(target.result); - }); - - db.close(); - }).catch(printErrorIfAvailable); -} - -function evictStatusesByRecords(records) { - return evictStatuses(records.map(({ id }) => id)); -} - -export function putAccounts(records, avatarStatic) { - const avatarKey = avatarStatic ? 'avatar_static' : 'avatar'; - const newURLs = []; - - put('accounts', records, (newRecord, oldKey, store, oncomplete) => { - store.get(oldKey).onsuccess = ({ target }) => { - accountAssetKeys.forEach(key => { - const newURL = newRecord[key]; - const oldURL = target.result[key]; - - if (newURL !== oldURL) { - openCache() - .then(cache => cache.delete(oldURL)) - .catch(printErrorIfAvailable); - } - }); - - const newURL = newRecord[avatarKey]; - const oldURL = target.result[avatarKey]; - - if (newURL !== oldURL) { - newURLs.push(newURL); - } - - oncomplete(); - }; - }, (newRecord, oncomplete) => { - newURLs.push(newRecord[avatarKey]); - oncomplete(); - }).then(records => Promise.all([ - evictAccountsByRecords(records), - openCache().then(cache => cache.addAll(newURLs)), - ])).then(freeStorage, error => { - freeStorage(); - throw error; - }).catch(printErrorIfAvailable); -} - -export function putStatuses(records) { - put('statuses', records) - .then(evictStatusesByRecords) - .catch(printErrorIfAvailable); -} - -export function freeStorage() { - return storageFreeable && navigator.storage.estimate().then(({ quota, usage }) => { - if (usage + storageMargin < quota) { - return null; - } - - return openDB().then(db => new Promise((resolve, reject) => { - const retrieval = db.transaction('accounts', 'readonly').objectStore('accounts').getAll(null, 1); - - retrieval.onsuccess = () => { - if (retrieval.result.length > 0) { - resolve(evictAccountsByRecords(retrieval.result).then(freeStorage)); - } else { - resolve(caches.delete('mastodon-system')); - } - }; - - retrieval.onerror = reject; - - db.close(); - })); - }); -} diff --git a/config/webpack/production.js b/config/webpack/production.js index cd3d01035cc..79dcebc7c40 100644 --- a/config/webpack/production.js +++ b/config/webpack/production.js @@ -1,29 +1,16 @@ // Note: You must restart bin/webpack-dev-server for changes to take effect -const path = require('path'); -const { URL } = require('url'); +const { createHash } = require('crypto'); +const { readFileSync } = require('fs'); +const { resolve } = require('path'); const { merge } = require('webpack-merge'); const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); -const OfflinePlugin = require('offline-plugin'); const TerserPlugin = require('terser-webpack-plugin'); const CompressionPlugin = require('compression-webpack-plugin'); -const { output } = require('./configuration'); +const { InjectManifest } = require('workbox-webpack-plugin'); const sharedConfig = require('./shared'); -let attachmentHost; - -if (process.env.S3_ENABLED === 'true') { - if (process.env.S3_ALIAS_HOST || process.env.S3_CLOUDFRONT_HOST) { - attachmentHost = process.env.S3_ALIAS_HOST || process.env.S3_CLOUDFRONT_HOST; - } else { - attachmentHost = process.env.S3_HOSTNAME || `s3-${process.env.S3_REGION || 'us-east-1'}.amazonaws.com`; - } -} else if (process.env.SWIFT_ENABLED === 'true') { - const { host } = new URL(process.env.SWIFT_OBJECT_URL); - attachmentHost = host; -} else { - attachmentHost = null; -} +const root = resolve(__dirname, '..', '..'); module.exports = merge(sharedConfig, { mode: 'production', @@ -52,47 +39,28 @@ module.exports = merge(sharedConfig, { openAnalyzer: false, logLevel: 'silent', // do not bother Webpacker, who runs with --json and parses stdout }), - new OfflinePlugin({ - publicPath: output.publicPath, // sw.js must be served from the root to avoid scope issues - safeToUseOptionalCaches: true, - caches: { - main: [':rest:'], - additional: [':externals:'], - optional: [ - '**/locale_*.js', // don't fetch every locale; the user only needs one - '**/*_polyfills-*.js', // the user may not need polyfills - '**/*.woff2', // the user may have system-fonts enabled - // images/audio can be cached on-demand - '**/*.png', - '**/*.jpg', - '**/*.jpeg', - '**/*.svg', - '**/*.mp3', - '**/*.ogg', - ], - }, - externals: [ - '/emoji/1f602.svg', // used for emoji picker dropdown - '/emoji/sheet_10.png', // used in emoji-mart + new InjectManifest({ + additionalManifestEntries: ['1f602.svg', 'sheet_13.png'].map((filename) => { + const path = resolve(root, 'public', 'emoji', filename); + const body = readFileSync(path); + const md5 = createHash('md5'); + + md5.update(body); + + return { + revision: md5.digest('hex'), + url: `/emoji/${filename}`, + }; + }), + exclude: [ + /(?:base|extra)_polyfills-.*\.js$/, + /locale_.*\.js$/, + /mailer-.*\.(?:css|js)$/, ], - excludes: [ - '**/*.gz', - '**/*.map', - 'stats.json', - 'report.html', - // any browser that supports ServiceWorker will support woff2 - '**/*.eot', - '**/*.ttf', - '**/*-webfont-*.svg', - '**/*.woff', - ], - ServiceWorker: { - entry: `imports-loader?additionalCode=${encodeURIComponent(`var ATTACHMENT_HOST=${JSON.stringify(attachmentHost)};`)}!${encodeURI(path.join(__dirname, '../../app/javascript/mastodon/service_worker/entry.js'))}`, - cacheName: 'mastodon', - output: '../assets/sw.js', - publicPath: '/sw.js', - minify: true, - }, + include: [/\.js$/, /\.css$/], + maximumFileSizeToCacheInBytes: 2 * 1_024 * 1_024, // 2 MiB + swDest: resolve(root, 'public', 'packs', 'sw.js'), + swSrc: resolve(root, 'app', 'javascript', 'mastodon', 'service_worker', 'entry.js'), }), ], }); diff --git a/package.json b/package.json index b605fe114f0..6973afeaab2 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,6 @@ "object-assign": "^4.1.1", "object-fit-images": "^3.2.3", "object.values": "^1.1.5", - "offline-plugin": "^5.0.7", "path-complete-extname": "^1.0.0", "pg": "^8.5.0", "postcss": "^8.4.16", @@ -136,6 +135,12 @@ "webpack-cli": "^3.3.12", "webpack-merge": "^5.8.0", "wicg-inert": "^3.1.2", + "workbox-expiration": "^6.5.3", + "workbox-precaching": "^6.5.3", + "workbox-routing": "^6.5.3", + "workbox-strategies": "^6.5.3", + "workbox-webpack-plugin": "^6.5.3", + "workbox-window": "^6.5.3", "ws": "^8.8.1" }, "devDependencies": { diff --git a/public/sw.js b/public/sw.js index 1471a9e6404..debb9af9dc6 120000 --- a/public/sw.js +++ b/public/sw.js @@ -1 +1 @@ -assets/sw.js \ No newline at end of file +packs/sw.js \ No newline at end of file diff --git a/public/sw.js.map b/public/sw.js.map new file mode 120000 index 00000000000..0734c819935 --- /dev/null +++ b/public/sw.js.map @@ -0,0 +1 @@ +packs/sw.js.map \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index ef957156df6..be3db7a96c9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14,6 +14,15 @@ dependencies: "@jridgewell/trace-mapping" "^0.3.0" +"@apideck/better-ajv-errors@^0.3.1": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.3.tgz#ab0b1e981e1749bf59736cf7ebe25cfc9f949c15" + integrity sha512-9o+HO2MbJhJHjDYZaDxJmSDckvDpiuItEsrIShV0DXeCshXWRHhqYyU/PKHMkuClOmFnZhRd6wzv4vpDu/dRKg== + dependencies: + json-schema "^0.4.0" + jsonpointer "^5.0.0" + leven "^3.1.0" + "@babel/code-frame@7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" @@ -21,19 +30,45 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: "@babel/highlight" "^7.18.6" +"@babel/compat-data@^7.17.10": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.6.tgz#8b37d24e88e8e21c499d4328db80577d8882fa53" + integrity sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ== + "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8": version "7.18.8" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.13", "@babel/core@^7.7.2": +"@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.7.2": + version "7.17.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.10.tgz#74ef0fbf56b7dfc3f198fc2d927f4f03e12f4b05" + integrity sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.10" + "@babel/helper-compilation-targets" "^7.17.10" + "@babel/helper-module-transforms" "^7.17.7" + "@babel/helpers" "^7.17.9" + "@babel/parser" "^7.17.10" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.10" + "@babel/types" "^7.17.10" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/core@^7.18.13": version "7.18.13" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.13.tgz#9be8c44512751b05094a4d3ab05fc53a47ce00ac" integrity sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A== @@ -63,7 +98,16 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.0" -"@babel/generator@^7.18.13", "@babel/generator@^7.7.2": +"@babel/generator@^7.17.10", "@babel/generator@^7.7.2": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.6.tgz#9ab2d46d3cbf631f0e80f72e72874a04c3fc12a9" + integrity sha512-AIwwoOS8axIC5MZbhNHRLKi3D+DMpvDf9XUcu3pIVAfOHFT45f4AoDAltRbHIQomCipkCZxrNkfpOEHhJz/VKw== + dependencies: + "@babel/types" "^7.18.6" + "@jridgewell/gen-mapping" "^0.3.0" + jsesc "^2.5.1" + +"@babel/generator@^7.18.13": version "7.18.13" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.13.tgz#59550cbb9ae79b8def15587bdfbaa388c4abf212" integrity sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ== @@ -95,6 +139,16 @@ "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/types" "^7.18.6" +"@babel/helper-compilation-targets@^7.17.10": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz#18d35bfb9f83b1293c22c55b3d576c1315b6ed96" + integrity sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg== + dependencies: + "@babel/compat-data" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.20.2" + semver "^6.3.0" + "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" @@ -185,14 +239,35 @@ dependencies: "@babel/types" "^7.18.9" -"@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.18.6": +"@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-imports@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9": +"@babel/helper-module-transforms@^7.17.7", "@babel/helper-module-transforms@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz#57e3ca669e273d55c3cda55e6ebf552f37f483c8" + integrity sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw== + dependencies: + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== @@ -285,7 +360,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== -"@babel/helper-validator-option@^7.18.6": +"@babel/helper-validator-option@^7.16.7", "@babel/helper-validator-option@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== @@ -310,6 +385,15 @@ "@babel/traverse" "^7.18.10" "@babel/types" "^7.18.10" +"@babel/helpers@^7.17.9": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.6.tgz#4c966140eaa1fcaa3d5a8c09d7db61077d4debfd" + integrity sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ== + dependencies: + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" + "@babel/helpers@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" @@ -337,18 +421,32 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.13": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.17.10": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.6.tgz#845338edecad65ebffef058d3be851f1d28a63bc" + integrity sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw== + +"@babel/parser@^7.18.10", "@babel/parser@^7.18.13": version "7.18.13" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.13.tgz#5b2dd21cae4a2c5145f1fbd8ca103f9313d3b7e4" integrity sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.6.tgz#b4e4dbc2cd1acd0133479918f7c6412961c9adb8" + integrity sha512-Udgu8ZRgrBrttVz6A0EVL0SJ1z+RLbIeqsu632SA1hf0awEppD6TvdznoH+orIF8wtFFAV/Enmw9Y+9oV8TQcw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" @@ -358,6 +456,16 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" "@babel/plugin-proposal-optional-chaining" "^7.18.9" +"@babel/plugin-proposal-async-generator-functions@^7.16.8": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz#aedac81e6fc12bb643374656dd5f2605bf743d17" + integrity sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w== + dependencies: + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-proposal-async-generator-functions@^7.18.10": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz#85ea478c98b0095c3e4102bff3b67d306ed24952" @@ -368,7 +476,7 @@ "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.18.6": +"@babel/plugin-proposal-class-properties@^7.16.7", "@babel/plugin-proposal-class-properties@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== @@ -376,7 +484,7 @@ "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-class-static-block@^7.18.6": +"@babel/plugin-proposal-class-static-block@^7.17.6", "@babel/plugin-proposal-class-static-block@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== @@ -396,7 +504,7 @@ "@babel/helper-split-export-declaration" "^7.18.6" "@babel/plugin-syntax-decorators" "^7.18.6" -"@babel/plugin-proposal-dynamic-import@^7.18.6": +"@babel/plugin-proposal-dynamic-import@^7.16.7", "@babel/plugin-proposal-dynamic-import@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== @@ -404,6 +512,14 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-dynamic-import" "^7.8.3" +"@babel/plugin-proposal-export-namespace-from@^7.16.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.6.tgz#1016f0aa5ab383bbf8b3a85a2dcaedf6c8ee7491" + integrity sha512-zr/QcUlUo7GPo6+X1wC98NJADqmy5QTFWWhqeQWiki4XHafJtLl/YMGkmRB2szDD2IYJCCdBTd4ElwhId9T7Xw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-proposal-export-namespace-from@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" @@ -412,7 +528,7 @@ "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.18.6": +"@babel/plugin-proposal-json-strings@^7.16.7", "@babel/plugin-proposal-json-strings@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== @@ -420,6 +536,14 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" +"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.6.tgz#3b9cac6f1ffc2aa459d111df80c12020dfc6b665" + integrity sha512-zMo66azZth/0tVd7gmkxOkOjs2rpHyhpcFo565PUP37hSp6hSd9uUKIfTDFMz58BwqgQKhJ9YxtM5XddjXVn+Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-proposal-logical-assignment-operators@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" @@ -428,7 +552,7 @@ "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== @@ -436,7 +560,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.18.6": +"@babel/plugin-proposal-numeric-separator@^7.16.7", "@babel/plugin-proposal-numeric-separator@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== @@ -444,6 +568,17 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" +"@babel/plugin-proposal-object-rest-spread@^7.17.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.6.tgz#ec93bba06bfb3e15ebd7da73e953d84b094d5daf" + integrity sha512-9yuM6wr4rIsKa1wlUAbZEazkCrgw2sMPEXCr4Rnwetu7cEW1NydkCWytLuYletbf8vFxdJxFhwEZqMpOx2eZyw== + dependencies: + "@babel/compat-data" "^7.18.6" + "@babel/helper-compilation-targets" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz#f9434f6beb2c8cae9dfcf97d2a5941bbbf9ad4e7" @@ -455,7 +590,7 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.18.8" -"@babel/plugin-proposal-optional-catch-binding@^7.18.6": +"@babel/plugin-proposal-optional-catch-binding@^7.16.7", "@babel/plugin-proposal-optional-catch-binding@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== @@ -463,6 +598,15 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" +"@babel/plugin-proposal-optional-chaining@^7.16.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.6.tgz#46d4f2ffc20e87fad1d98bc4fa5d466366f6aa0b" + integrity sha512-PatI6elL5eMzoypFAiYDpYQyMtXTn+iMhuxxQt5mAXD4fEmKorpSI3PHd+i3JXBJN3xyA6MvJv7at23HffFHwA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-optional-chaining@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" @@ -472,7 +616,7 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.18.6": +"@babel/plugin-proposal-private-methods@^7.16.11", "@babel/plugin-proposal-private-methods@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== @@ -480,7 +624,7 @@ "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-private-property-in-object@^7.18.6": +"@babel/plugin-proposal-private-property-in-object@^7.16.7", "@babel/plugin-proposal-private-property-in-object@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== @@ -490,7 +634,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": +"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== @@ -645,14 +789,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.18.6": +"@babel/plugin-transform-arrow-functions@^7.16.7", "@babel/plugin-transform-arrow-functions@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-async-to-generator@^7.18.6": +"@babel/plugin-transform-async-to-generator@^7.16.8", "@babel/plugin-transform-async-to-generator@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== @@ -661,13 +805,20 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-remap-async-to-generator" "^7.18.6" -"@babel/plugin-transform-block-scoped-functions@^7.18.6": +"@babel/plugin-transform-block-scoped-functions@^7.16.7", "@babel/plugin-transform-block-scoped-functions@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-block-scoping@^7.16.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.6.tgz#b5f78318914615397d86a731ef2cc668796a726c" + integrity sha512-pRqwb91C42vs1ahSAWJkxOxU1RHWDn16XAa6ggQ72wjLlWyYeAcLvTtE0aM8ph3KNydy9CQF2nLYcjq1WysgxQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-block-scoping@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz#f9b7e018ac3f373c81452d6ada8bd5a18928926d" @@ -675,6 +826,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.9" +"@babel/plugin-transform-classes@^7.16.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.6.tgz#3501a8f3f4c7d5697c27a3eedbee71d68312669f" + integrity sha512-XTg8XW/mKpzAF3actL554Jl/dOYoJtv3l8fxaEczpgz84IeeVf+T1u2CSvPHuZbt0w3JkIx4rdn/MRQI7mo0HQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + globals "^11.1.0" + "@babel/plugin-transform-classes@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz#90818efc5b9746879b869d5ce83eb2aa48bbc3da" @@ -689,6 +854,13 @@ "@babel/helper-split-export-declaration" "^7.18.6" globals "^11.1.0" +"@babel/plugin-transform-computed-properties@^7.16.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.6.tgz#5d15eb90e22e69604f3348344c91165c5395d032" + integrity sha512-9repI4BhNrR0KenoR9vm3/cIc1tSBIo+u1WVjKCAynahj25O8zfbiE6JtAtHPGQSs4yZ+bA8mRasRP+qc+2R5A== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-computed-properties@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e" @@ -696,6 +868,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.9" +"@babel/plugin-transform-destructuring@^7.17.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.6.tgz#a98b0e42c7ffbf5eefcbcf33280430f230895c6f" + integrity sha512-tgy3u6lRp17ilY8r1kP4i2+HDUwxlVqq3RTc943eAWSzGgpU1qhiKpqZ5CMyHReIYPHdo3Kg8v8edKtDqSVEyQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-destructuring@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz#68906549c021cb231bee1db21d3b5b095f8ee292" @@ -703,7 +882,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": +"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== @@ -711,6 +890,13 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-duplicate-keys@^7.16.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.6.tgz#e6c94e8cd3c9dd8a88144f7b78ae22975a7ff473" + integrity sha512-NJU26U/208+sxYszf82nmGYqVF9QN8py2HFTblPT9hbawi8+1C5a9JubODLTGFuT0qlkqVinmkwOD13s0sZktg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-duplicate-keys@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" @@ -718,7 +904,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-exponentiation-operator@^7.18.6": +"@babel/plugin-transform-exponentiation-operator@^7.16.7", "@babel/plugin-transform-exponentiation-operator@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== @@ -726,6 +912,13 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-for-of@^7.16.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.6.tgz#e0fdb813be908e91ccc9ec87b30cc2eabf046f7c" + integrity sha512-WAjoMf4wIiSsy88KmG7tgj2nFdEK7E46tArVtcgED7Bkj6Fg/tG5SbvNIOKxbFS2VFgNh6+iaPswBeQZm4ox8w== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-for-of@^7.18.8": version "7.18.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" @@ -733,6 +926,15 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-function-name@^7.16.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.6.tgz#6a7e4ae2893d336fd1b8f64c9f92276391d0f1b4" + integrity sha512-kJha/Gbs5RjzIu0CxZwf5e3aTTSlhZnHMT8zPWnJMjNpLOUgqevg+PN5oMH68nMCXnfiMo4Bhgxqj59KHTlAnA== + dependencies: + "@babel/helper-compilation-targets" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-function-name@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" @@ -742,6 +944,13 @@ "@babel/helper-function-name" "^7.18.9" "@babel/helper-plugin-utils" "^7.18.9" +"@babel/plugin-transform-literals@^7.16.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.6.tgz#9d6af353b5209df72960baf4492722d56f39a205" + integrity sha512-x3HEw0cJZVDoENXOp20HlypIHfl0zMIhMVZEBVTfmqbObIpsMxMbmU5nOEO8R7LYT+z5RORKPlTI5Hj4OsO9/Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-literals@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" @@ -749,14 +958,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-member-expression-literals@^7.18.6": +"@babel/plugin-transform-member-expression-literals@^7.16.7", "@babel/plugin-transform-member-expression-literals@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-modules-amd@^7.18.6": +"@babel/plugin-transform-modules-amd@^7.16.7", "@babel/plugin-transform-modules-amd@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz#8c91f8c5115d2202f277549848874027d7172d21" integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== @@ -765,7 +974,7 @@ "@babel/helper-plugin-utils" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.18.6": +"@babel/plugin-transform-modules-commonjs@^7.17.9", "@babel/plugin-transform-modules-commonjs@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz#afd243afba166cca69892e24a8fd8c9f2ca87883" integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== @@ -775,6 +984,17 @@ "@babel/helper-simple-access" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-systemjs@^7.17.8": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.6.tgz#026511b7657d63bf5d4cf2fd4aeb963139914a54" + integrity sha512-UbPYpXxLjTw6w6yXX2BYNxF3p6QY225wcTkfQCy3OMnSlS/C3xGtwUjEzGkldb/sy6PWLiCQ3NbYfjWUTI3t4g== + dependencies: + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-systemjs@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz#545df284a7ac6a05125e3e405e536c5853099a06" @@ -786,7 +1006,7 @@ "@babel/helper-validator-identifier" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.18.6": +"@babel/plugin-transform-modules-umd@^7.16.7", "@babel/plugin-transform-modules-umd@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== @@ -794,7 +1014,7 @@ "@babel/helper-module-transforms" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": +"@babel/plugin-transform-named-capturing-groups-regex@^7.17.10", "@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz#c89bfbc7cc6805d692f3a49bc5fc1b630007246d" integrity sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg== @@ -802,14 +1022,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-new-target@^7.18.6": +"@babel/plugin-transform-new-target@^7.16.7", "@babel/plugin-transform-new-target@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-object-super@^7.18.6": +"@babel/plugin-transform-object-super@^7.16.7", "@babel/plugin-transform-object-super@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== @@ -817,6 +1037,13 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-replace-supers" "^7.18.6" +"@babel/plugin-transform-parameters@^7.16.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.6.tgz#cbe03d5a4c6385dd756034ac1baa63c04beab8dc" + integrity sha512-FjdqgMv37yVl/gwvzkcB+wfjRI8HQmc5EgOG9iGNvUY1ok+TjsoaMP7IqCDZBhkFcM5f3OPVMs6Dmp03C5k4/A== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-parameters@^7.18.8": version "7.18.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a" @@ -824,7 +1051,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-property-literals@^7.18.6": +"@babel/plugin-transform-property-literals@^7.16.7", "@babel/plugin-transform-property-literals@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== @@ -872,7 +1099,7 @@ "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.18.6": +"@babel/plugin-transform-regenerator@^7.17.9", "@babel/plugin-transform-regenerator@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== @@ -880,7 +1107,7 @@ "@babel/helper-plugin-utils" "^7.18.6" regenerator-transform "^0.15.0" -"@babel/plugin-transform-reserved-words@^7.18.6": +"@babel/plugin-transform-reserved-words@^7.16.7", "@babel/plugin-transform-reserved-words@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== @@ -899,13 +1126,21 @@ babel-plugin-polyfill-regenerator "^0.4.0" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.18.6": +"@babel/plugin-transform-shorthand-properties@^7.16.7", "@babel/plugin-transform-shorthand-properties@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-spread@^7.16.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.6.tgz#82b080241965f1689f0a60ecc6f1f6575dbdb9d6" + integrity sha512-ayT53rT/ENF8WWexIRg9AiV9h0aIteyWn5ptfZTZQrjk/+f3WdrJGCY4c9wcgl2+MKkKPhzbYp97FTsquZpDCw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" + "@babel/plugin-transform-spread@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz#6ea7a6297740f381c540ac56caf75b05b74fb664" @@ -914,13 +1149,20 @@ "@babel/helper-plugin-utils" "^7.18.9" "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" -"@babel/plugin-transform-sticky-regex@^7.18.6": +"@babel/plugin-transform-sticky-regex@^7.16.7", "@babel/plugin-transform-sticky-regex@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== dependencies: "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-template-literals@^7.16.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.6.tgz#b763f4dc9d11a7cce58cf9a490d82e80547db9c2" + integrity sha512-UuqlRrQmT2SWRvahW46cGSany0uTlcj8NYOS5sRGYi8FxPYPoLd5DDmMd32ZXEj2Jq+06uGVQKHxa/hJx2EzKw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-template-literals@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" @@ -928,6 +1170,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.9" +"@babel/plugin-transform-typeof-symbol@^7.16.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.6.tgz#486bb39d5a18047358e0d04dc0d2f322f0b92e92" + integrity sha512-7m71iS/QhsPk85xSjFPovHPcH3H9qeyzsujhTc+vcdnsXavoWYJ74zx0lP5RhpC5+iDnVLO+PPMHzC11qels1g== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-typeof-symbol@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" @@ -935,6 +1184,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.9" +"@babel/plugin-transform-unicode-escapes@^7.16.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz#0d01fb7fb2243ae1c033f65f6e3b4be78db75f27" + integrity sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-unicode-escapes@^7.18.10": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" @@ -942,7 +1198,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-unicode-regex@^7.18.6": +"@babel/plugin-transform-unicode-regex@^7.16.7", "@babel/plugin-transform-unicode-regex@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== @@ -950,6 +1206,86 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" +"@babel/preset-env@^7.11.0": + version "7.17.10" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.17.10.tgz#a81b093669e3eb6541bb81a23173c5963c5de69c" + integrity sha512-YNgyBHZQpeoBSRBg0xixsZzfT58Ze1iZrajvv0lJc70qDDGuGfonEnMGfWeSY0mQ3JTuCWFbMkzFRVafOyJx4g== + dependencies: + "@babel/compat-data" "^7.17.10" + "@babel/helper-compilation-targets" "^7.17.10" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-async-generator-functions" "^7.16.8" + "@babel/plugin-proposal-class-properties" "^7.16.7" + "@babel/plugin-proposal-class-static-block" "^7.17.6" + "@babel/plugin-proposal-dynamic-import" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.16.7" + "@babel/plugin-proposal-json-strings" "^7.16.7" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" + "@babel/plugin-proposal-numeric-separator" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread" "^7.17.3" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-private-methods" "^7.16.11" + "@babel/plugin-proposal-private-property-in-object" "^7.16.7" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.16.7" + "@babel/plugin-transform-async-to-generator" "^7.16.8" + "@babel/plugin-transform-block-scoped-functions" "^7.16.7" + "@babel/plugin-transform-block-scoping" "^7.16.7" + "@babel/plugin-transform-classes" "^7.16.7" + "@babel/plugin-transform-computed-properties" "^7.16.7" + "@babel/plugin-transform-destructuring" "^7.17.7" + "@babel/plugin-transform-dotall-regex" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.16.7" + "@babel/plugin-transform-exponentiation-operator" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.16.7" + "@babel/plugin-transform-function-name" "^7.16.7" + "@babel/plugin-transform-literals" "^7.16.7" + "@babel/plugin-transform-member-expression-literals" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.16.7" + "@babel/plugin-transform-modules-commonjs" "^7.17.9" + "@babel/plugin-transform-modules-systemjs" "^7.17.8" + "@babel/plugin-transform-modules-umd" "^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.17.10" + "@babel/plugin-transform-new-target" "^7.16.7" + "@babel/plugin-transform-object-super" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-property-literals" "^7.16.7" + "@babel/plugin-transform-regenerator" "^7.17.9" + "@babel/plugin-transform-reserved-words" "^7.16.7" + "@babel/plugin-transform-shorthand-properties" "^7.16.7" + "@babel/plugin-transform-spread" "^7.16.7" + "@babel/plugin-transform-sticky-regex" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.16.7" + "@babel/plugin-transform-typeof-symbol" "^7.16.7" + "@babel/plugin-transform-unicode-escapes" "^7.16.7" + "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.17.10" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.5.0" + babel-plugin-polyfill-regenerator "^0.3.0" + core-js-compat "^3.22.1" + semver "^6.3.0" + "@babel/preset-env@^7.18.10": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.10.tgz#83b8dfe70d7eea1aae5a10635ab0a5fe60dfc0f4" @@ -1069,14 +1405,30 @@ dependencies: regenerator-runtime "^0.12.0" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.9", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" + integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.3.3": +"@babel/template@^7.16.7", "@babel/template@^7.18.6", "@babel/template@^7.3.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" + integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/template@^7.18.10": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== @@ -1085,7 +1437,23 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.13", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": +"@babel/traverse@^7.17.10", "@babel/traverse@^7.18.6", "@babel/traverse@^7.7.2": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.6.tgz#a228562d2f46e89258efa4ddd0416942e2fd671d" + integrity sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.13", "@babel/traverse@^7.18.9": version "7.18.13" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.13.tgz#5ab59ef51a997b3f10c4587d648b9696b6cb1a68" integrity sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA== @@ -1101,7 +1469,15 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.18.10", "@babel/types@^7.18.13", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.16.7", "@babel/types@^7.17.10", "@babel/types@^7.18.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.6.tgz#5d781dd10a3f0c9f1f931bd19de5eb26ec31acf0" + integrity sha512-NdBNzPDwed30fZdDQtVR7ZgaO4UKjuaQFH9VArS+HMnurlOY0JWN+4ROlu/iapMFwjRQU4pOG4StZfDmulEwGA== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + +"@babel/types@^7.18.10", "@babel/types@^7.18.13", "@babel/types@^7.18.9": version "7.18.13" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.13.tgz#30aeb9e514f4100f7c1cb6e5ba472b30e48f519a" integrity sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ== @@ -1610,6 +1986,43 @@ resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-6.1.6.tgz#de486ae0a663e1bed637a012cbb2739bfcfa2031" integrity sha512-2M4zlthYmOC6X/tcPcFd//sIL26a7JbCpGNl8uIrQf+pR1Z47uhYt9cOwVqJTJZPurdy2k+YY3Pn64pqruAPEA== +"@rollup/plugin-babel@^5.2.0": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" + integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@rollup/pluginutils" "^3.1.0" + +"@rollup/plugin-node-resolve@^11.2.1": + version "11.2.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" + integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.19.0" + +"@rollup/plugin-replace@^2.4.1": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" + integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + magic-string "^0.25.7" + +"@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + "@sinclair/typebox@^0.24.1": version "0.24.20" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.20.tgz#11a657875de6008622d53f56e063a6347c51a6dd" @@ -1629,6 +2042,16 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@surma/rollup-plugin-off-main-thread@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" + integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== + dependencies: + ejs "^3.1.6" + json5 "^2.2.0" + magic-string "^0.25.0" + string.prototype.matchall "^4.0.6" + "@testing-library/dom@^8.0.0": version "8.1.0" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.1.0.tgz#f8358b1883844ea569ba76b7e94582168df5370d" @@ -1715,6 +2138,11 @@ resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + "@types/events@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" @@ -1885,6 +2313,13 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" + "@types/scheduler@*": version "0.16.1" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" @@ -1912,6 +2347,11 @@ resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397" integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw== +"@types/trusted-types@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756" + integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg== + "@types/yargs-parser@*": version "15.0.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" @@ -2189,6 +2629,16 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" +ajv@^8.6.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -2457,11 +2907,21 @@ async@^2.6.2: dependencies: lodash "^4.17.14" +async@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9" + integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -2578,6 +3038,15 @@ babel-plugin-macros@^3.0.1: cosmiconfig "^7.0.0" resolve "^1.19.0" +babel-plugin-polyfill-corejs2@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" + integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.3.1" + semver "^6.1.1" + babel-plugin-polyfill-corejs2@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz#e4c31d4c89b56f3cf85b92558954c66b54bd972d" @@ -2587,6 +3056,14 @@ babel-plugin-polyfill-corejs2@^0.3.2: "@babel/helper-define-polyfill-provider" "^0.3.2" semver "^6.1.1" +babel-plugin-polyfill-corejs3@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" + integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + core-js-compat "^3.21.0" + babel-plugin-polyfill-corejs3@^0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7" @@ -2595,6 +3072,13 @@ babel-plugin-polyfill-corejs3@^0.5.3: "@babel/helper-define-polyfill-provider" "^0.3.2" core-js-compat "^3.21.0" +babel-plugin-polyfill-regenerator@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" + integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + babel-plugin-polyfill-regenerator@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz#8f51809b6d5883e07e71548d75966ff7635527fe" @@ -2689,11 +3173,6 @@ batch@0.6.1: resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== - big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -2967,6 +3446,11 @@ bufferutil@^4.0.6: dependencies: node-gyp-build "^4.3.0" +builtin-modules@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" @@ -3153,6 +3637,14 @@ chalk@^4.0, chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + char-regex@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" @@ -3388,6 +3880,11 @@ commander@^7.2.0: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +common-tags@^1.8.0: + version "1.8.2" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -3640,6 +4137,11 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + css-color-names@0.0.4, css-color-names@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" @@ -3947,11 +4449,6 @@ deep-equal@^1.0.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-extend@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" - integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== - deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -4223,10 +4720,12 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -ejs@^2.3.4: - version "2.7.4" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" - integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== +ejs@^3.1.6: + version "3.1.8" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" + integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== + dependencies: + jake "^10.8.5" electron-to-chromium@^1.3.723: version "1.3.736" @@ -4285,11 +4784,6 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -4687,6 +5181,11 @@ estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -4880,7 +5379,7 @@ fast-glob@^3.2.11, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -4946,6 +5445,13 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +filelist@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -5110,6 +5616,16 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -5140,7 +5656,7 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@^2.3.2, fsevents@~2.3.1: +fsevents@^2.3.2, fsevents@~2.3.1, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -5213,6 +5729,11 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.1" +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" @@ -5258,7 +5779,7 @@ glob-parent@^5.1.2, glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -5716,6 +6237,11 @@ idb-keyval@^3.2.0: resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-3.2.0.tgz#cbbf354deb5684b6cdc84376294fc05932845bd6" integrity sha512-slx8Q6oywCCSfKgPgL0sEsXtPVnSbTLWpyiDcu6msHOyKOLari1TD1qocXVCft80umnkk3/Qqh3lwoFt8T/BPQ== +idb@^6.1.4: + version "6.1.5" + resolved "https://registry.yarnpkg.com/idb/-/idb-6.1.5.tgz#dbc53e7adf1ac7c59f9b2bf56e00b4ea4fce8c7b" + integrity sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw== + ieee754@^1.1.4: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" @@ -6142,6 +6668,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + is-nan@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" @@ -6172,6 +6703,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + is-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" @@ -6233,6 +6769,11 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + is-resolvable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" @@ -6372,6 +6913,16 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +jake@^10.8.5: + version "10.8.5" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" + integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.1" + minimatch "^3.0.4" + jest-changed-files@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-28.1.3.tgz#d9aeee6792be3686c47cb988a8eaf82ff4238831" @@ -6740,6 +7291,15 @@ jest-watcher@^28.1.3: jest-util "^28.1.3" string-length "^4.0.1" +jest-worker@^26.2.1: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + jest-worker@^26.5.0: version "26.5.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.5.0.tgz#87deee86dbbc5f98d9919e0dadf2c40e3152fa30" @@ -6889,6 +7449,11 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== +json-schema@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -6906,11 +7471,6 @@ json3@^3.3.3: resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== -json5@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -6918,7 +7478,7 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.2, json5@^2.2.1: +json5@^2.1.2, json5@^2.2.0, json5@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== @@ -6930,12 +7490,34 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: +jsonpointer@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.0.tgz#f802669a524ec4805fa7389eadbc9921d5dc8072" + integrity sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg== + +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b" + integrity sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA== + dependencies: + array-includes "^3.1.3" + object.assign "^4.1.2" + +jsx-ast-utils@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz#afe5efe4332cd3515c065072bd4d6b0aa22152bd" integrity sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q== @@ -7021,16 +7603,6 @@ loader-runner@^2.4.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@0.2.x: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" @@ -7124,6 +7696,11 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" @@ -7170,6 +7747,13 @@ lz-string@^1.4.4: resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= +magic-string@^0.25.0, magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + make-dir@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -7427,7 +8011,7 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -7897,17 +8481,6 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -offline-plugin@^5.0.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/offline-plugin/-/offline-plugin-5.0.7.tgz#26936ad1a7699f4d67e0a095a258972a4ccf1788" - integrity sha512-ArMFt4QFjK0wg8B5+R/6tt65u6Dk+Pkx4PAcW5O7mgIF3ywMepaQqFOQgfZD4ybanuGwuJihxUwMRgkzd+YGYw== - dependencies: - deep-extend "^0.5.1" - ejs "^2.3.4" - loader-utils "0.2.x" - minimatch "^3.0.3" - slash "^1.0.0" - on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -8331,16 +8904,16 @@ picomatch@^2.0.4, picomatch@^2.2.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +picomatch@^2.2.2, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + picomatch@^2.2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== -picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -8809,6 +9382,11 @@ prettier@^2.7.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== +pretty-bytes@^5.3.0, pretty-bytes@^5.4.1: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + pretty-format@^25.2.1, pretty-format@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" @@ -9693,6 +10271,23 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rollup-plugin-terser@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" + integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== + dependencies: + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" + serialize-javascript "^4.0.0" + terser "^5.0.0" + +rollup@^2.43.1: + version "2.72.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.72.1.tgz#861c94790537b10008f0ca0fbc60e631aabdd045" + integrity sha512-NTc5UGy/NWFGpSqF1lFY8z9Adri6uhyMLI6LvPAXdBKoPRFhIIiBUpt+Qg2awixqO3xvzSijjhnb4+QEZwJmxA== + optionalDependencies: + fsevents "~2.3.2" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -9869,6 +10464,13 @@ serialize-javascript@^2.1.2: resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + serialize-javascript@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" @@ -10013,11 +10615,6 @@ sisteransi@^1.0.4: resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -10112,7 +10709,7 @@ source-map-support@0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@~0.5.12, source-map-support@~0.5.19: +source-map-support@~0.5.12, source-map-support@~0.5.19, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -10140,11 +10737,23 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.8.0-beta.0, source-map@~0.8.0-beta.0: + version "0.8.0-beta.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" + integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== + dependencies: + whatwg-url "^7.0.0" + source-map@~0.7.2: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -10344,7 +10953,7 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string.prototype.matchall@^4.0.7: +string.prototype.matchall@^4.0.6, string.prototype.matchall@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== @@ -10390,6 +10999,15 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + stringz@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/stringz/-/stringz-2.1.0.tgz#5896b4713eac31157556040fb90258fb02c1630c" @@ -10678,6 +11296,21 @@ tcomb@^2.5.0: resolved "https://registry.yarnpkg.com/tcomb/-/tcomb-2.7.0.tgz#10d62958041669a5d53567b9a4ee8cde22b1c2b0" integrity sha1-ENYpWAQWaaXVNWe5pO6M3iKxwrA= +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + +tempy@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3" + integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== + dependencies: + is-stream "^2.0.0" + temp-dir "^2.0.0" + type-fest "^0.16.0" + unique-string "^2.0.0" + terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -10725,6 +11358,16 @@ terser@^4.1.2: source-map "~0.6.1" source-map-support "~0.5.12" +terser@^5.0.0: + version "5.13.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.13.1.tgz#66332cdc5a01b04a224c9fad449fc1a18eaa1799" + integrity sha512-hn4WKOfwnwbYfe48NgrQjqNOH9jzLqRcIfbYytOXCOv46LBfWr9bDS17MQqOi+BWGD0sJK3Sj5NC/gJjiojaoA== + dependencies: + acorn "^8.5.0" + commander "^2.20.0" + source-map "~0.8.0-beta.0" + source-map-support "~0.5.20" + terser@^5.3.4: version "5.3.4" resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.4.tgz#e510e05f86e0bd87f01835c3238839193f77a60c" @@ -10883,6 +11526,13 @@ tough-cookie@^4.0.0: punycode "^2.1.1" universalify "^0.1.2" +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + tr46@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" @@ -10959,6 +11609,11 @@ type-fest@^0.11.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== +type-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + type-fest@^0.18.0: version "0.18.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" @@ -11069,11 +11724,23 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + universalify@^0.1.0, universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -11092,7 +11759,7 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -upath@^1.1.1: +upath@^1.1.1, upath@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== @@ -11318,6 +11985,11 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + webidl-conversions@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" @@ -11532,6 +12204,15 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -11584,6 +12265,175 @@ word-wrap@^1.2.3, word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +workbox-background-sync@6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.5.3.tgz#7c66c1836aeca6f3762dc48d17a1852a33b3168c" + integrity sha512-0DD/V05FAcek6tWv9XYj2w5T/plxhDSpclIcAGjA/b7t/6PdaRkQ7ZgtAX6Q/L7kV7wZ8uYRJUoH11VjNipMZw== + dependencies: + idb "^6.1.4" + workbox-core "6.5.3" + +workbox-broadcast-update@6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.5.3.tgz#fc2ad79cf507e22950cda9baf1e9a0ccc43f31bc" + integrity sha512-4AwCIA5DiDrYhlN+Miv/fp5T3/whNmSL+KqhTwRBTZIL6pvTgE4lVuRzAt1JltmqyMcQ3SEfCdfxczuI4kwFQg== + dependencies: + workbox-core "6.5.3" + +workbox-build@6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.5.3.tgz#38e3f286d63d2745bff4d1478bb3a6ab5c8b1170" + integrity sha512-8JNHHS7u13nhwIYCDea9MNXBNPHXCs5KDZPKI/ZNTr3f4sMGoD7hgFGecbyjX1gw4z6e9bMpMsOEJNyH5htA/w== + dependencies: + "@apideck/better-ajv-errors" "^0.3.1" + "@babel/core" "^7.11.1" + "@babel/preset-env" "^7.11.0" + "@babel/runtime" "^7.11.2" + "@rollup/plugin-babel" "^5.2.0" + "@rollup/plugin-node-resolve" "^11.2.1" + "@rollup/plugin-replace" "^2.4.1" + "@surma/rollup-plugin-off-main-thread" "^2.2.3" + ajv "^8.6.0" + common-tags "^1.8.0" + fast-json-stable-stringify "^2.1.0" + fs-extra "^9.0.1" + glob "^7.1.6" + lodash "^4.17.20" + pretty-bytes "^5.3.0" + rollup "^2.43.1" + rollup-plugin-terser "^7.0.0" + source-map "^0.8.0-beta.0" + stringify-object "^3.3.0" + strip-comments "^2.0.1" + tempy "^0.6.0" + upath "^1.2.0" + workbox-background-sync "6.5.3" + workbox-broadcast-update "6.5.3" + workbox-cacheable-response "6.5.3" + workbox-core "6.5.3" + workbox-expiration "6.5.3" + workbox-google-analytics "6.5.3" + workbox-navigation-preload "6.5.3" + workbox-precaching "6.5.3" + workbox-range-requests "6.5.3" + workbox-recipes "6.5.3" + workbox-routing "6.5.3" + workbox-strategies "6.5.3" + workbox-streams "6.5.3" + workbox-sw "6.5.3" + workbox-window "6.5.3" + +workbox-cacheable-response@6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.5.3.tgz#b1f8c2bc599a7be8f7e3c262535629c558738e47" + integrity sha512-6JE/Zm05hNasHzzAGKDkqqgYtZZL2H06ic2GxuRLStA4S/rHUfm2mnLFFXuHAaGR1XuuYyVCEey1M6H3PdZ7SQ== + dependencies: + workbox-core "6.5.3" + +workbox-core@6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.3.tgz#bca038a9ef0d7a634a6db2a60f45313ed22ac249" + integrity sha512-Bb9ey5n/M9x+l3fBTlLpHt9ASTzgSGj6vxni7pY72ilB/Pb3XtN+cZ9yueboVhD5+9cNQrC9n/E1fSrqWsUz7Q== + +workbox-expiration@6.5.3, workbox-expiration@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.5.3.tgz#efc0811f371a2ede1052b9de1c4f072b71d50503" + integrity sha512-jzYopYR1zD04ZMdlbn/R2Ik6ixiXbi15c9iX5H8CTi6RPDz7uhvMLZPKEndZTpfgmUk8mdmT9Vx/AhbuCl5Sqw== + dependencies: + idb "^6.1.4" + workbox-core "6.5.3" + +workbox-google-analytics@6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.5.3.tgz#cc8c3a61f449131660a4ed2f5362d9a3599b18fe" + integrity sha512-3GLCHotz5umoRSb4aNQeTbILETcrTVEozSfLhHSBaegHs1PnqCmN0zbIy2TjTpph2AGXiNwDrWGF0AN+UgDNTw== + dependencies: + workbox-background-sync "6.5.3" + workbox-core "6.5.3" + workbox-routing "6.5.3" + workbox-strategies "6.5.3" + +workbox-navigation-preload@6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.5.3.tgz#81b74f598b11aa07e2cf1c21af7a826a4f0f70b3" + integrity sha512-bK1gDFTc5iu6lH3UQ07QVo+0ovErhRNGvJJO/1ngknT0UQ702nmOUhoN9qE5mhuQSrnK+cqu7O7xeaJ+Rd9Tmg== + dependencies: + workbox-core "6.5.3" + +workbox-precaching@6.5.3, workbox-precaching@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.3.tgz#c870312b2ef901d790ab9e48da084e776c62af47" + integrity sha512-sjNfgNLSsRX5zcc63H/ar/hCf+T19fRtTqvWh795gdpghWb5xsfEkecXEvZ8biEi1QD7X/ljtHphdaPvXDygMQ== + dependencies: + workbox-core "6.5.3" + workbox-routing "6.5.3" + workbox-strategies "6.5.3" + +workbox-range-requests@6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.5.3.tgz#e624ac82ff266a5e4f236d055797def07949d941" + integrity sha512-pGCP80Bpn/0Q0MQsfETSfmtXsQcu3M2QCJwSFuJ6cDp8s2XmbUXkzbuQhCUzKR86ZH2Vex/VUjb2UaZBGamijA== + dependencies: + workbox-core "6.5.3" + +workbox-recipes@6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.5.3.tgz#15beac9d8ae7a3a1c100218094a824b4dd3fd59a" + integrity sha512-IcgiKYmbGiDvvf3PMSEtmwqxwfQ5zwI7OZPio3GWu4PfehA8jI8JHI3KZj+PCfRiUPZhjQHJ3v1HbNs+SiSkig== + dependencies: + workbox-cacheable-response "6.5.3" + workbox-core "6.5.3" + workbox-expiration "6.5.3" + workbox-precaching "6.5.3" + workbox-routing "6.5.3" + workbox-strategies "6.5.3" + +workbox-routing@6.5.3, workbox-routing@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.3.tgz#a0a699d8cc90b5692bd3df24679acbbda3913777" + integrity sha512-DFjxcuRAJjjt4T34RbMm3MCn+xnd36UT/2RfPRfa8VWJGItGJIn7tG+GwVTdHmvE54i/QmVTJepyAGWtoLPTmg== + dependencies: + workbox-core "6.5.3" + +workbox-strategies@6.5.3, workbox-strategies@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.3.tgz#4bea9a48fee16cf43766e0d8138296773c8a9783" + integrity sha512-MgmGRrDVXs7rtSCcetZgkSZyMpRGw8HqL2aguszOc3nUmzGZsT238z/NN9ZouCxSzDu3PQ3ZSKmovAacaIhu1w== + dependencies: + workbox-core "6.5.3" + +workbox-streams@6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.5.3.tgz#b6860290031caa7d0e46ad7142315c94359c780b" + integrity sha512-vN4Qi8o+b7zj1FDVNZ+PlmAcy1sBoV7SC956uhqYvZ9Sg1fViSbOpydULOssVJ4tOyKRifH/eoi6h99d+sJ33w== + dependencies: + workbox-core "6.5.3" + workbox-routing "6.5.3" + +workbox-sw@6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.5.3.tgz#cd2f0c086f4496acd25774ed02c48504189bebdd" + integrity sha512-BQBzm092w+NqdIEF2yhl32dERt9j9MDGUTa2Eaa+o3YKL4Qqw55W9yQC6f44FdAHdAJrJvp0t+HVrfh8AiGj8A== + +workbox-webpack-plugin@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.3.tgz#c37bb323be4952311565c07db51054fe59c87d73" + integrity sha512-Es8Xr02Gi6Kc3zaUwR691ZLy61hz3vhhs5GztcklQ7kl5k2qAusPh0s6LF3wEtlpfs9ZDErnmy5SErwoll7jBA== + dependencies: + fast-json-stable-stringify "^2.1.0" + pretty-bytes "^5.4.1" + upath "^1.2.0" + webpack-sources "^1.4.3" + workbox-build "6.5.3" + +workbox-window@6.5.3, workbox-window@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.5.3.tgz#4ade70056cb73477ef1cd8fea7cfd0ecbd825c7f" + integrity sha512-GnJbx1kcKXDtoJBVZs/P7ddP0Yt52NNy4nocjBpYPiRhMqTpJCNrSL+fGHZ/i/oP6p/vhE8II0sA6AZGKGnssw== + dependencies: + "@types/trusted-types" "^2.0.2" + workbox-core "6.5.3" + worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" From 99aed9069d4319d53779c483142e6649f3fef17b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Aug 2022 20:10:43 +0200 Subject: [PATCH 236/646] Bump puma from 5.6.4 to 5.6.5 (#19042) Bumps [puma](https://github.com/puma/puma) from 5.6.4 to 5.6.5. - [Release notes](https://github.com/puma/puma/releases) - [Changelog](https://github.com/puma/puma/blob/master/History.md) - [Commits](https://github.com/puma/puma/compare/v5.6.4...v5.6.5) --- updated-dependencies: - dependency-name: puma dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 8306efec2cd..076cc2a0d27 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -479,7 +479,7 @@ GEM pry-rails (0.3.9) pry (>= 0.10.4) public_suffix (4.0.7) - puma (5.6.4) + puma (5.6.5) nio4r (~> 2.0) pundit (2.2.0) activesupport (>= 3.0.0) From 0396acf39ea902688374fac65fa7ef5dc4c05512 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 25 Aug 2022 20:39:40 +0200 Subject: [PATCH 237/646] Add audit log entries for user roles (#19040) * Refactor audit log schema * Add audit log entries for user roles --- app/controllers/admin/roles_controller.rb | 3 + .../admin/users/roles_controller.rb | 1 + .../concerns/accountable_concern.rb | 8 ++- app/helpers/admin/action_logs_helper.rb | 61 +++++-------------- app/models/account.rb | 4 ++ app/models/account_warning.rb | 4 ++ app/models/admin/action_log.rb | 36 ++++++----- app/models/admin/action_log_filter.rb | 4 ++ app/models/announcement.rb | 4 ++ app/models/appeal.rb | 8 +++ app/models/custom_emoji.rb | 6 +- app/models/domain_allow.rb | 4 ++ app/models/domain_block.rb | 4 ++ app/models/email_domain_block.rb | 4 ++ app/models/form/account_batch.rb | 2 +- app/models/instance.rb | 2 + app/models/ip_block.rb | 4 ++ app/models/report.rb | 6 ++ app/models/status.rb | 8 +++ app/models/unavailable_domain.rb | 4 ++ app/models/user.rb | 8 +++ app/models/user_role.rb | 4 ++ config/locales/en.yml | 11 +++- ...d_human_identifier_to_admin_action_logs.rb | 7 +++ ...recorded_changes_from_admin_action_logs.rb | 9 +++ db/schema.rb | 6 +- spec/helpers/admin/action_log_helper_spec.rb | 28 --------- 27 files changed, 151 insertions(+), 99 deletions(-) create mode 100644 db/migrate/20220824164433_add_human_identifier_to_admin_action_logs.rb create mode 100644 db/post_migrate/20220824164532_remove_recorded_changes_from_admin_action_logs.rb diff --git a/app/controllers/admin/roles_controller.rb b/app/controllers/admin/roles_controller.rb index 3e502ccc4d3..d76aa745bdc 100644 --- a/app/controllers/admin/roles_controller.rb +++ b/app/controllers/admin/roles_controller.rb @@ -23,6 +23,7 @@ module Admin @role.current_account = current_account if @role.save + log_action :create, @role redirect_to admin_roles_path else render :new @@ -39,6 +40,7 @@ module Admin @role.current_account = current_account if @role.update(resource_params) + log_action :update, @role redirect_to admin_roles_path else render :edit @@ -48,6 +50,7 @@ module Admin def destroy authorize @role, :destroy? @role.destroy! + log_action :destroy, @role redirect_to admin_roles_path end diff --git a/app/controllers/admin/users/roles_controller.rb b/app/controllers/admin/users/roles_controller.rb index 0db50cee929..f5dfc643d47 100644 --- a/app/controllers/admin/users/roles_controller.rb +++ b/app/controllers/admin/users/roles_controller.rb @@ -14,6 +14,7 @@ module Admin @user.current_account = current_account if @user.update(resource_params) + log_action :change_role, @user redirect_to admin_account_path(@user.account_id), notice: I18n.t('admin.accounts.change_role.changed_msg') else render :show diff --git a/app/controllers/concerns/accountable_concern.rb b/app/controllers/concerns/accountable_concern.rb index 87d62478da2..c1349915f84 100644 --- a/app/controllers/concerns/accountable_concern.rb +++ b/app/controllers/concerns/accountable_concern.rb @@ -3,7 +3,11 @@ module AccountableConcern extend ActiveSupport::Concern - def log_action(action, target, options = {}) - Admin::ActionLog.create(account: current_account, action: action, target: target, recorded_changes: options.stringify_keys) + def log_action(action, target) + Admin::ActionLog.create( + account: current_account, + action: action, + target: target + ) end end diff --git a/app/helpers/admin/action_logs_helper.rb b/app/helpers/admin/action_logs_helper.rb index 47eeeaac3a8..3e9fe17f460 100644 --- a/app/helpers/admin/action_logs_helper.rb +++ b/app/helpers/admin/action_logs_helper.rb @@ -2,64 +2,31 @@ module Admin::ActionLogsHelper def log_target(log) - if log.target - linkable_log_target(log.target) - else - log_target_from_history(log.target_type, log.recorded_changes) - end - end - - private - - def linkable_log_target(record) - case record.class.name + case log.target_type when 'Account' - link_to record.acct, admin_account_path(record.id) + link_to log.human_identifier, admin_account_path(log.target_id) when 'User' - link_to record.account.acct, admin_account_path(record.account_id) + link_to log.human_identifier, admin_account_path(log.route_param) + when 'UserRole' + link_to log.human_identifier, admin_roles_path(log.target_id) when 'CustomEmoji' - record.shortcode + log.human_identifier when 'Report' - link_to "##{record.id}", admin_report_path(record) + link_to "##{log.human_identifier}", admin_report_path(log.target_id) when 'DomainBlock', 'DomainAllow', 'EmailDomainBlock', 'UnavailableDomain' - link_to record.domain, "https://#{record.domain}" + link_to log.human_identifier, "https://#{log.human_identifier}" when 'Status' - link_to record.account.acct, ActivityPub::TagManager.instance.url_for(record) + link_to log.human_identifier, log.permalink when 'AccountWarning' - link_to record.target_account.acct, admin_account_path(record.target_account_id) + link_to log.human_identifier, admin_account_path(log.target_id) when 'Announcement' - link_to truncate(record.text), edit_admin_announcement_path(record.id) + link_to truncate(log.human_identifier), edit_admin_announcement_path(log.target_id) when 'IpBlock' - "#{record.ip}/#{record.ip.prefix} (#{I18n.t("simple_form.labels.ip_block.severities.#{record.severity}")})" + log.human_identifier when 'Instance' - record.domain + log.human_identifier when 'Appeal' - link_to record.account.acct, disputes_strike_path(record.strike) - end - end - - def log_target_from_history(type, attributes) - case type - when 'User' - attributes['username'] - when 'CustomEmoji' - attributes['shortcode'] - when 'DomainBlock', 'DomainAllow', 'EmailDomainBlock', 'UnavailableDomain' - link_to attributes['domain'], "https://#{attributes['domain']}" - when 'Status' - tmp_status = Status.new(attributes.except('reblogs_count', 'favourites_count')) - - if tmp_status.account - link_to tmp_status.account&.acct || "##{tmp_status.account_id}", admin_account_path(tmp_status.account_id) - else - I18n.t('admin.action_logs.deleted_status') - end - when 'Announcement' - truncate(attributes['text'].is_a?(Array) ? attributes['text'].last : attributes['text']) - when 'IpBlock' - "#{attributes['ip']}/#{attributes['ip'].prefix} (#{I18n.t("simple_form.labels.ip_block.severities.#{attributes['severity']}")})" - when 'Instance' - attributes['domain'] + link_to log.human_identifier, disputes_strike_path(log.route_param) end end end diff --git a/app/models/account.rb b/app/models/account.rb index 628692d22e3..d25afeb892c 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -362,6 +362,10 @@ class Account < ApplicationRecord username end + def to_log_human_identifier + acct + end + def excluded_from_timeline_account_ids Rails.cache.fetch("exclude_account_ids_for:#{id}") { block_relationships.pluck(:target_account_id) + blocked_by_relationships.pluck(:account_id) + mute_relationships.pluck(:target_account_id) } end diff --git a/app/models/account_warning.rb b/app/models/account_warning.rb index 6067b54b784..961a078b993 100644 --- a/app/models/account_warning.rb +++ b/app/models/account_warning.rb @@ -43,4 +43,8 @@ class AccountWarning < ApplicationRecord def overruled? overruled_at.present? end + + def to_log_human_identifier + target_account.acct + end end diff --git a/app/models/admin/action_log.rb b/app/models/admin/action_log.rb index 401bfd9accc..4fa8008f5c0 100644 --- a/app/models/admin/action_log.rb +++ b/app/models/admin/action_log.rb @@ -9,38 +9,42 @@ # action :string default(""), not null # target_type :string # target_id :bigint(8) -# recorded_changes :text default(""), not null # created_at :datetime not null # updated_at :datetime not null +# human_identifier :string +# route_param :string +# permalink :string # class Admin::ActionLog < ApplicationRecord - serialize :recorded_changes + self.ignored_columns = %w( + recorded_changes + ) belongs_to :account belongs_to :target, polymorphic: true, optional: true default_scope -> { order('id desc') } + before_validation :set_human_identifier + before_validation :set_route_param + before_validation :set_permalink + def action super.to_sym end - before_validation :set_changes - private - def set_changes - case action - when :destroy, :create - self.recorded_changes = target.attributes - when :update, :promote, :demote - self.recorded_changes = target.previous_changes - when :change_email - self.recorded_changes = ActiveSupport::HashWithIndifferentAccess.new( - email: [target.email, nil], - unconfirmed_email: [nil, target.unconfirmed_email] - ) - end + def set_human_identifier + self.human_identifier = target.to_log_human_identifier if target.respond_to?(:to_log_human_identifier) + end + + def set_route_param + self.route_param = target.to_log_route_param if target.respond_to?(:to_log_route_param) + end + + def set_permalink + self.permalink = target.to_log_permalink if target.respond_to?(:to_log_permalink) end end diff --git a/app/models/admin/action_log_filter.rb b/app/models/admin/action_log_filter.rb index 0f2f712a255..6382cd782b6 100644 --- a/app/models/admin/action_log_filter.rb +++ b/app/models/admin/action_log_filter.rb @@ -12,6 +12,7 @@ class Admin::ActionLogFilter reject_appeal: { target_type: 'Appeal', action: 'reject' }.freeze, assigned_to_self_report: { target_type: 'Report', action: 'assigned_to_self' }.freeze, change_email_user: { target_type: 'User', action: 'change_email' }.freeze, + change_role_user: { target_type: 'User', action: 'change_role' }.freeze, confirm_user: { target_type: 'User', action: 'confirm' }.freeze, approve_user: { target_type: 'User', action: 'approve' }.freeze, reject_user: { target_type: 'User', action: 'reject' }.freeze, @@ -22,6 +23,7 @@ class Admin::ActionLogFilter create_domain_block: { target_type: 'DomainBlock', action: 'create' }.freeze, create_email_domain_block: { target_type: 'EmailDomainBlock', action: 'create' }.freeze, create_unavailable_domain: { target_type: 'UnavailableDomain', action: 'create' }.freeze, + create_user_role: { target_type: 'UserRole', action: 'create' }.freeze, demote_user: { target_type: 'User', action: 'demote' }.freeze, destroy_announcement: { target_type: 'Announcement', action: 'destroy' }.freeze, destroy_custom_emoji: { target_type: 'CustomEmoji', action: 'destroy' }.freeze, @@ -31,6 +33,7 @@ class Admin::ActionLogFilter destroy_instance: { target_type: 'Instance', action: 'destroy' }.freeze, destroy_unavailable_domain: { target_type: 'UnavailableDomain', action: 'destroy' }.freeze, destroy_status: { target_type: 'Status', action: 'destroy' }.freeze, + destroy_user_role: { target_type: 'UserRole', action: 'destroy' }.freeze, disable_2fa_user: { target_type: 'User', action: 'disable' }.freeze, disable_custom_emoji: { target_type: 'CustomEmoji', action: 'disable' }.freeze, disable_user: { target_type: 'User', action: 'disable' }.freeze, @@ -52,6 +55,7 @@ class Admin::ActionLogFilter update_announcement: { target_type: 'Announcement', action: 'update' }.freeze, update_custom_emoji: { target_type: 'CustomEmoji', action: 'update' }.freeze, update_status: { target_type: 'Status', action: 'update' }.freeze, + update_user_role: { target_type: 'UserRole', action: 'update' }.freeze, unblock_email_account: { target_type: 'Account', action: 'unblock_email' }.freeze, }.freeze diff --git a/app/models/announcement.rb b/app/models/announcement.rb index f8183aabce4..bedced9ded5 100644 --- a/app/models/announcement.rb +++ b/app/models/announcement.rb @@ -34,6 +34,10 @@ class Announcement < ApplicationRecord before_validation :set_all_day before_validation :set_published, on: :create + def to_log_human_identifier + text + end + def publish! update!(published: true, published_at: Time.now.utc, scheduled_at: nil) end diff --git a/app/models/appeal.rb b/app/models/appeal.rb index 1f32cfa8b23..6fbf60b39e1 100644 --- a/app/models/appeal.rb +++ b/app/models/appeal.rb @@ -52,6 +52,14 @@ class Appeal < ApplicationRecord update!(rejected_at: Time.now.utc, rejected_by_account: current_account) end + def to_log_human_identifier + account.acct + end + + def to_log_route_param + account_warning_id + end + private def validate_time_frame diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb index 289e3b66f98..077ce559af8 100644 --- a/app/models/custom_emoji.rb +++ b/app/models/custom_emoji.rb @@ -46,7 +46,7 @@ class CustomEmoji < ApplicationRecord scope :local, -> { where(domain: nil) } scope :remote, -> { where.not(domain: nil) } scope :alphabetic, -> { order(domain: :asc, shortcode: :asc) } - scope :by_domain_and_subdomains, ->(domain) { where(domain: domain).or(where(arel_table[:domain].matches('%.' + domain))) } + scope :by_domain_and_subdomains, ->(domain) { where(domain: domain).or(where(arel_table[:domain].matches("%.#{domain}"))) } scope :listed, -> { local.where(disabled: false).where(visible_in_picker: true) } remotable_attachment :image, LIMIT @@ -67,6 +67,10 @@ class CustomEmoji < ApplicationRecord copy.tap(&:save!) end + def to_log_human_identifier + shortcode + end + class << self def from_text(text, domain = nil) return [] if text.blank? diff --git a/app/models/domain_allow.rb b/app/models/domain_allow.rb index 6aa9267fe2b..65f494fed45 100644 --- a/app/models/domain_allow.rb +++ b/app/models/domain_allow.rb @@ -19,6 +19,10 @@ class DomainAllow < ApplicationRecord scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) } + def to_log_human_identifier + domain + end + class << self def allowed?(domain) !rule_for(domain).nil? diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index a15206b5eff..b08687787ca 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -31,6 +31,10 @@ class DomainBlock < ApplicationRecord scope :with_user_facing_limitations, -> { where(severity: [:silence, :suspend]).or(where(reject_media: true)) } scope :by_severity, -> { order(Arel.sql('(CASE severity WHEN 0 THEN 1 WHEN 1 THEN 2 WHEN 2 THEN 0 END), reject_media, domain')) } + def to_log_human_identifier + domain + end + def policies if suspend? [:suspend] diff --git a/app/models/email_domain_block.rb b/app/models/email_domain_block.rb index f9d74332b88..661f6727d1d 100644 --- a/app/models/email_domain_block.rb +++ b/app/models/email_domain_block.rb @@ -26,6 +26,10 @@ class EmailDomainBlock < ApplicationRecord # Used for adding multiple blocks at once attr_accessor :other_domains + def to_log_human_identifier + domain + end + def history @history ||= Trends::History.new('email_domain_blocks', id) end diff --git a/app/models/form/account_batch.rb b/app/models/form/account_batch.rb index dcf15584038..98f2cad3efd 100644 --- a/app/models/form/account_batch.rb +++ b/app/models/form/account_batch.rb @@ -101,7 +101,7 @@ class Form::AccountBatch def reject_account(account) authorize(account.user, :reject?) - log_action(:reject, account.user, username: account.username) + log_action(:reject, account.user) account.suspend!(origin: :local) AccountDeletionWorker.perform_async(account.id, { 'reserve_username' => false }) end diff --git a/app/models/instance.rb b/app/models/instance.rb index 36110ee4001..edbf02a6d1f 100644 --- a/app/models/instance.rb +++ b/app/models/instance.rb @@ -48,6 +48,8 @@ class Instance < ApplicationRecord domain end + alias to_log_human_identifier to_param + delegate :exhausted_deliveries_days, to: :delivery_failure_tracker def availability_over_days(num_days, end_date = Time.now.utc.to_date) diff --git a/app/models/ip_block.rb b/app/models/ip_block.rb index e1ab59806e8..f40c8a0b1d1 100644 --- a/app/models/ip_block.rb +++ b/app/models/ip_block.rb @@ -27,6 +27,10 @@ class IpBlock < ApplicationRecord after_commit :reset_cache + def to_log_human_identifier + "#{record.ip}/#{record.ip.prefix}" + end + class << self def blocked?(remote_ip) blocked_ips_map = Rails.cache.fetch(CACHE_KEY) { FastIpMap.new(IpBlock.where(severity: :no_access).pluck(:ip)) } diff --git a/app/models/report.rb b/app/models/report.rb index 2efb6d4a776..42c869dd447 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -115,6 +115,10 @@ class Report < ApplicationRecord Report.where.not(id: id).where(target_account_id: target_account_id).unresolved.exists? end + def to_log_human_identifier + id + end + def history subquery = [ Admin::ActionLog.where( @@ -136,6 +140,8 @@ class Report < ApplicationRecord Admin::ActionLog.from(Arel::Nodes::As.new(subquery, Admin::ActionLog.arel_table)) end + private + def set_uri self.uri = ActivityPub::TagManager.instance.generate_uri_for(self) if uri.nil? && account.local? end diff --git a/app/models/status.rb b/app/models/status.rb index 4828d63404b..7eff990aab5 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -166,6 +166,14 @@ class Status < ApplicationRecord ].compact.join("\n\n") end + def to_log_human_identifier + account.acct + end + + def to_log_permalink + ActivityPub::TagManager.instance.uri_for(self) + end + def reply? !in_reply_to_id.nil? || attributes['reply'] end diff --git a/app/models/unavailable_domain.rb b/app/models/unavailable_domain.rb index 5e8870bde03..dfc0ef14ef9 100644 --- a/app/models/unavailable_domain.rb +++ b/app/models/unavailable_domain.rb @@ -16,6 +16,10 @@ class UnavailableDomain < ApplicationRecord after_commit :reset_cache! + def to_log_human_identifier + domain + end + private def reset_cache! diff --git a/app/models/user.rb b/app/models/user.rb index 9833300cd0a..18b9d592823 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -181,6 +181,14 @@ class User < ApplicationRecord update!(disabled: false) end + def to_log_human_identifier + account.acct + end + + def to_log_route_param + account_id + end + def confirm new_user = !confirmed? self.approved = true if open_registrations? && !sign_up_from_ip_requires_approval? diff --git a/app/models/user_role.rb b/app/models/user_role.rb index 57a56c0b085..74dfdc22053 100644 --- a/app/models/user_role.rb +++ b/app/models/user_role.rb @@ -155,6 +155,10 @@ class UserRole < ApplicationRecord end end + def to_log_human_identifier + name + end + private def in_permissions?(privilege) diff --git a/config/locales/en.yml b/config/locales/en.yml index e495ef841cc..5c309ab119b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -235,6 +235,7 @@ en: approve_user: Approve User assigned_to_self_report: Assign Report change_email_user: Change E-mail for User + change_role_user: Change Role of User confirm_user: Confirm User create_account_warning: Create Warning create_announcement: Create Announcement @@ -244,6 +245,7 @@ en: create_email_domain_block: Create E-mail Domain Block create_ip_block: Create IP rule create_unavailable_domain: Create Unavailable Domain + create_user_role: Create Role demote_user: Demote User destroy_announcement: Delete Announcement destroy_custom_emoji: Delete Custom Emoji @@ -254,6 +256,7 @@ en: destroy_ip_block: Delete IP rule destroy_status: Delete Post destroy_unavailable_domain: Delete Unavailable Domain + destroy_user_role: Destroy Role disable_2fa_user: Disable 2FA disable_custom_emoji: Disable Custom Emoji disable_sign_in_token_auth_user: Disable E-mail Token Authentication for User @@ -281,11 +284,13 @@ en: update_custom_emoji: Update Custom Emoji update_domain_block: Update Domain Block update_status: Update Post + update_user_role: Update Role actions: approve_appeal_html: "%{name} approved moderation decision appeal from %{target}" approve_user_html: "%{name} approved sign-up from %{target}" assigned_to_self_report_html: "%{name} assigned report %{target} to themselves" change_email_user_html: "%{name} changed the e-mail address of user %{target}" + change_role_user_html: "%{name} changed role of %{target}" confirm_user_html: "%{name} confirmed e-mail address of user %{target}" create_account_warning_html: "%{name} sent a warning to %{target}" create_announcement_html: "%{name} created new announcement %{target}" @@ -295,9 +300,10 @@ en: create_email_domain_block_html: "%{name} blocked e-mail domain %{target}" create_ip_block_html: "%{name} created rule for IP %{target}" create_unavailable_domain_html: "%{name} stopped delivery to domain %{target}" + create_user_role_html: "%{name} created %{target} role" demote_user_html: "%{name} demoted user %{target}" destroy_announcement_html: "%{name} deleted announcement %{target}" - destroy_custom_emoji_html: "%{name} destroyed emoji %{target}" + destroy_custom_emoji_html: "%{name} deleted emoji %{target}" destroy_domain_allow_html: "%{name} disallowed federation with domain %{target}" destroy_domain_block_html: "%{name} unblocked domain %{target}" destroy_email_domain_block_html: "%{name} unblocked e-mail domain %{target}" @@ -305,6 +311,7 @@ en: destroy_ip_block_html: "%{name} deleted rule for IP %{target}" destroy_status_html: "%{name} removed post by %{target}" destroy_unavailable_domain_html: "%{name} resumed delivery to domain %{target}" + destroy_user_role_html: "%{name} deleted %{target} role" disable_2fa_user_html: "%{name} disabled two factor requirement for user %{target}" disable_custom_emoji_html: "%{name} disabled emoji %{target}" disable_sign_in_token_auth_user_html: "%{name} disabled e-mail token authentication for %{target}" @@ -332,7 +339,7 @@ en: update_custom_emoji_html: "%{name} updated emoji %{target}" update_domain_block_html: "%{name} updated domain block for %{target}" update_status_html: "%{name} updated post by %{target}" - deleted_status: "(deleted post)" + update_user_role_html: "%{name} changed %{target} role" empty: No logs found. filter_by_action: Filter by action filter_by_user: Filter by user diff --git a/db/migrate/20220824164433_add_human_identifier_to_admin_action_logs.rb b/db/migrate/20220824164433_add_human_identifier_to_admin_action_logs.rb new file mode 100644 index 00000000000..2cb8cddf19b --- /dev/null +++ b/db/migrate/20220824164433_add_human_identifier_to_admin_action_logs.rb @@ -0,0 +1,7 @@ +class AddHumanIdentifierToAdminActionLogs < ActiveRecord::Migration[6.1] + def change + add_column :admin_action_logs, :human_identifier, :string + add_column :admin_action_logs, :route_param, :string + add_column :admin_action_logs, :permalink, :string + end +end diff --git a/db/post_migrate/20220824164532_remove_recorded_changes_from_admin_action_logs.rb b/db/post_migrate/20220824164532_remove_recorded_changes_from_admin_action_logs.rb new file mode 100644 index 00000000000..c42d5df8fba --- /dev/null +++ b/db/post_migrate/20220824164532_remove_recorded_changes_from_admin_action_logs.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class RemoveRecordedChangesFromAdminActionLogs < ActiveRecord::Migration[5.2] + disable_ddl_transaction! + + def change + safety_assured { remove_column :admin_action_logs, :recorded_changes, :text } + end +end diff --git a/db/schema.rb b/db/schema.rb index 15ab2e85e78..83fd9549c4b 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2022_08_08_101323) do +ActiveRecord::Schema.define(version: 2022_08_24_164532) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -205,9 +205,11 @@ ActiveRecord::Schema.define(version: 2022_08_08_101323) do t.string "action", default: "", null: false t.string "target_type" t.bigint "target_id" - t.text "recorded_changes", default: "", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.string "human_identifier" + t.string "route_param" + t.string "permalink" t.index ["account_id"], name: "index_admin_action_logs_on_account_id" t.index ["target_type", "target_id"], name: "index_admin_action_logs_on_target_type_and_target_id" end diff --git a/spec/helpers/admin/action_log_helper_spec.rb b/spec/helpers/admin/action_log_helper_spec.rb index 60f5ecdcca5..9d7ed4ab765 100644 --- a/spec/helpers/admin/action_log_helper_spec.rb +++ b/spec/helpers/admin/action_log_helper_spec.rb @@ -3,32 +3,4 @@ require 'rails_helper' RSpec.describe Admin::ActionLogsHelper, type: :helper do - klass = Class.new do - include ActionView::Helpers - include Admin::ActionLogsHelper - end - - let(:hoge) { klass.new } - - describe '#log_target' do - after do - hoge.log_target(log) - end - - context 'log.target' do - let(:log) { double(target: true) } - - it 'calls linkable_log_target' do - expect(hoge).to receive(:linkable_log_target).with(log.target) - end - end - - context '!log.target' do - let(:log) { double(target: false, target_type: :type, recorded_changes: :change) } - - it 'calls log_target_from_history' do - expect(hoge).to receive(:log_target_from_history).with(log.target_type, log.recorded_changes) - end - end - end end From c36262c914ba28a9d65511e8e438f8cc85e59dc2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 03:57:01 +0900 Subject: [PATCH 238/646] Bump oj from 3.13.20 to 3.13.21 (#19031) Bumps [oj](https://github.com/ohler55/oj) from 3.13.20 to 3.13.21. - [Release notes](https://github.com/ohler55/oj/releases) - [Changelog](https://github.com/ohler55/oj/blob/develop/CHANGELOG.md) - [Commits](https://github.com/ohler55/oj/compare/v3.13.20...v3.13.21) --- updated-dependencies: - dependency-name: oj dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 076cc2a0d27..7843c0c04f4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -422,7 +422,7 @@ GEM concurrent-ruby (~> 1.0, >= 1.0.2) sidekiq (>= 3.5) statsd-ruby (~> 1.4, >= 1.4.0) - oj (3.13.20) + oj (3.13.21) omniauth (1.9.2) hashie (>= 3.4.6) rack (>= 1.6.2, < 3) From 3c79ccb7e36f2a1f291374a0a57e4c24af4ef0bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Aug 2022 03:57:41 +0900 Subject: [PATCH 239/646] Bump addressable from 2.8.0 to 2.8.1 (#19033) Bumps [addressable](https://github.com/sporkmonger/addressable) from 2.8.0 to 2.8.1. - [Release notes](https://github.com/sporkmonger/addressable/releases) - [Changelog](https://github.com/sporkmonger/addressable/blob/main/CHANGELOG.md) - [Commits](https://github.com/sporkmonger/addressable/compare/addressable-2.8.0...addressable-2.8.1) --- updated-dependencies: - dependency-name: addressable dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 7843c0c04f4..13357f600f3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -75,8 +75,8 @@ GEM minitest (>= 5.1) tzinfo (~> 2.0) zeitwerk (~> 2.3) - addressable (2.8.0) - public_suffix (>= 2.0.2, < 5.0) + addressable (2.8.1) + public_suffix (>= 2.0.2, < 6.0) aes_key_wrap (1.1.0) airbrussh (1.4.1) sshkit (>= 1.6.1, != 1.7.0) @@ -478,7 +478,7 @@ GEM pry (>= 0.13, < 0.15) pry-rails (0.3.9) pry (>= 0.10.4) - public_suffix (4.0.7) + public_suffix (5.0.0) puma (5.6.5) nio4r (~> 2.0) pundit (2.2.0) From d696f729f1dc27c9d92b896c651e1ea73bf93d75 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 25 Aug 2022 23:27:10 +0200 Subject: [PATCH 240/646] Add meta tag for official iOS app (#16599) --- app/views/layouts/application.html.haml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index bf164223c25..3e50de3fbf7 100755 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -23,6 +23,7 @@ %link{ rel: 'manifest', href: manifest_path(format: :json) }/ %meta{ name: 'theme-color', content: '#6364FF' }/ %meta{ name: 'apple-mobile-web-app-capable', content: 'yes' }/ + %meta{ name: 'apple-itunes-app', content: 'app-id=1571998974' }/ %title= content_for?(:page_title) ? safe_join([yield(:page_title).chomp.html_safe, title], ' - ') : title From 5b0e8cc92b9ca0ab0dc24366d95f67a88c470173 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 25 Aug 2022 23:33:34 +0200 Subject: [PATCH 241/646] Add ability to select all accounts matching search for batch actions (#19053) --- app/controllers/admin/accounts_controller.rb | 6 ++- app/javascript/packs/admin.js | 53 ++++++++++++++++++++ app/javascript/styles/mastodon/tables.scss | 49 ++++++++++++++++++ app/models/custom_filter_status.rb | 2 +- app/models/form/account_batch.rb | 13 ++++- app/views/admin/accounts/index.html.haml | 9 ++++ config/locales/en.yml | 10 ++++ 7 files changed, 138 insertions(+), 4 deletions(-) diff --git a/app/controllers/admin/accounts_controller.rb b/app/controllers/admin/accounts_controller.rb index 46c9aba9173..40bf685c53a 100644 --- a/app/controllers/admin/accounts_controller.rb +++ b/app/controllers/admin/accounts_controller.rb @@ -16,7 +16,11 @@ module Admin def batch authorize :account, :index? - @form = Form::AccountBatch.new(form_account_batch_params.merge(current_account: current_account, action: action_from_button)) + @form = Form::AccountBatch.new(form_account_batch_params) + @form.current_account = current_account + @form.action = action_from_button + @form.select_all_matching = params[:select_all_matching] + @form.query = filtered_accounts @form.save rescue ActionController::ParameterMissing flash[:alert] = I18n.t('admin.accounts.no_account_selected') diff --git a/app/javascript/packs/admin.js b/app/javascript/packs/admin.js index a3ed1ffedd8..b733d6b1865 100644 --- a/app/javascript/packs/admin.js +++ b/app/javascript/packs/admin.js @@ -4,18 +4,71 @@ import ready from '../mastodon/ready'; const batchCheckboxClassName = '.batch-checkbox input[type="checkbox"]'; +const showSelectAll = () => { + const selectAllMatchingElement = document.querySelector('.batch-table__select-all'); + selectAllMatchingElement.classList.add('active'); +}; + +const hideSelectAll = () => { + const selectAllMatchingElement = document.querySelector('.batch-table__select-all'); + const hiddenField = document.querySelector('#select_all_matching'); + const selectedMsg = document.querySelector('.batch-table__select-all .selected'); + const notSelectedMsg = document.querySelector('.batch-table__select-all .not-selected'); + + selectAllMatchingElement.classList.remove('active'); + selectedMsg.classList.remove('active'); + notSelectedMsg.classList.add('active'); + hiddenField.value = '0'; +}; + delegate(document, '#batch_checkbox_all', 'change', ({ target }) => { + const selectAllMatchingElement = document.querySelector('.batch-table__select-all'); + [].forEach.call(document.querySelectorAll(batchCheckboxClassName), (content) => { content.checked = target.checked; }); + + if (selectAllMatchingElement) { + if (target.checked) { + showSelectAll(); + } else { + hideSelectAll(); + } + } +}); + +delegate(document, '.batch-table__select-all button', 'click', () => { + const hiddenField = document.querySelector('#select_all_matching'); + const active = hiddenField.value === '1'; + const selectedMsg = document.querySelector('.batch-table__select-all .selected'); + const notSelectedMsg = document.querySelector('.batch-table__select-all .not-selected'); + + if (active) { + hiddenField.value = '0'; + selectedMsg.classList.remove('active'); + notSelectedMsg.classList.add('active'); + } else { + hiddenField.value = '1'; + notSelectedMsg.classList.remove('active'); + selectedMsg.classList.add('active'); + } }); delegate(document, batchCheckboxClassName, 'change', () => { const checkAllElement = document.querySelector('#batch_checkbox_all'); + const selectAllMatchingElement = document.querySelector('.batch-table__select-all'); if (checkAllElement) { checkAllElement.checked = [].every.call(document.querySelectorAll(batchCheckboxClassName), (content) => content.checked); checkAllElement.indeterminate = !checkAllElement.checked && [].some.call(document.querySelectorAll(batchCheckboxClassName), (content) => content.checked); + + if (selectAllMatchingElement) { + if (checkAllElement.checked) { + showSelectAll(); + } else { + hideSelectAll(); + } + } } }); diff --git a/app/javascript/styles/mastodon/tables.scss b/app/javascript/styles/mastodon/tables.scss index 431b8a73a47..39211910fb0 100644 --- a/app/javascript/styles/mastodon/tables.scss +++ b/app/javascript/styles/mastodon/tables.scss @@ -190,6 +190,55 @@ a.table-action-link { } } + &__select-all { + background: $ui-base-color; + height: 47px; + align-items: center; + justify-content: center; + border: 1px solid darken($ui-base-color, 8%); + border-top: 0; + color: $secondary-text-color; + display: none; + + &.active { + display: flex; + } + + .selected, + .not-selected { + display: none; + + &.active { + display: block; + } + } + + strong { + font-weight: 700; + } + + span { + padding: 8px; + display: inline-block; + } + + button { + background: transparent; + border: 0; + font: inherit; + color: $highlight-text-color; + border-radius: 4px; + font-weight: 700; + padding: 8px; + + &:hover, + &:focus, + &:active { + background: lighten($ui-base-color, 8%); + } + } + } + &__form { padding: 16px; border: 1px solid darken($ui-base-color, 8%); diff --git a/app/models/custom_filter_status.rb b/app/models/custom_filter_status.rb index b6bea139431..e748d696335 100644 --- a/app/models/custom_filter_status.rb +++ b/app/models/custom_filter_status.rb @@ -5,7 +5,7 @@ # # id :bigint(8) not null, primary key # custom_filter_id :bigint(8) not null -# status_id :bigint(8) default(""), not null +# status_id :bigint(8) not null # created_at :datetime not null # updated_at :datetime not null # diff --git a/app/models/form/account_batch.rb b/app/models/form/account_batch.rb index 98f2cad3efd..5cfcf7205b0 100644 --- a/app/models/form/account_batch.rb +++ b/app/models/form/account_batch.rb @@ -6,7 +6,8 @@ class Form::AccountBatch include AccountableConcern include Payloadable - attr_accessor :account_ids, :action, :current_account + attr_accessor :account_ids, :action, :current_account, + :select_all_matching, :query def save case action @@ -60,7 +61,11 @@ class Form::AccountBatch end def accounts - Account.where(id: account_ids) + if select_all_matching? + query + else + Account.where(id: account_ids) + end end def approve! @@ -118,4 +123,8 @@ class Form::AccountBatch log_action(:approve, account.user) account.user.approve! end + + def select_all_matching? + select_all_matching == '1' + end end diff --git a/app/views/admin/accounts/index.html.haml b/app/views/admin/accounts/index.html.haml index cb378f0edba..670a09a2d6a 100644 --- a/app/views/admin/accounts/index.html.haml +++ b/app/views/admin/accounts/index.html.haml @@ -37,6 +37,7 @@ = form_for(@form, url: batch_admin_accounts_path) do |f| = hidden_field_tag :page, params[:page] || 1 + = hidden_field_tag :select_all_matching, '0' - AccountFilter::KEYS.each do |key| = hidden_field_tag key, params[key] if params[key].present? @@ -52,6 +53,14 @@ = f.button safe_join([fa_icon('times'), t('admin.accounts.reject')]), name: :reject, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } = f.button safe_join([fa_icon('lock'), t('admin.accounts.perform_full_suspension')]), name: :suspend, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } + - if true || @accounts.total_count > @accounts.size + .batch-table__select-all + .not-selected.active + %span= t('generic.all_items_on_page_selected_html', count: @accounts.size) + %button{ type: 'button' }= t('generic.select_all_matching_items', count: @accounts.total_count) + .selected + %span= t('generic.all_matching_items_selected_html', count: @accounts.total_count) + %button{ type: 'button' }= t('generic.deselect') .batch-table__body - if @accounts.empty? = nothing_here 'nothing-here--under-tabs' diff --git a/config/locales/en.yml b/config/locales/en.yml index 5c309ab119b..6aa87e4a09f 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1227,12 +1227,22 @@ en: trending_now: Trending now generic: all: All + all_items_on_page_selected_html: + one: "%{count} item on this page is selected." + other: All %{count} items on this page are selected. + all_matching_items_selected_html: + one: "%{count} item matching your search is selected." + other: All %{count} items matching your search are selected. changes_saved_msg: Changes successfully saved! copy: Copy delete: Delete + deselect: Deselect all none: None order_by: Order by save_changes: Save changes + select_all_matching_items: + one: Select %{count} item matching your search. + other: Select all %{count} items matching your search. today: today validation_errors: one: Something isn't quite right yet! Please review the error below From 0b3e4fd5de392969b624719b2eb3f86277b6ac1f Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 25 Aug 2022 23:38:22 +0200 Subject: [PATCH 242/646] Remove digest e-mails (#17985) * Remove digest e-mails * Remove digest-related code --- .../settings/preferences_controller.rb | 2 +- app/mailers/notification_mailer.rb | 18 -------- app/models/user.rb | 4 -- .../notification_mailer/digest.html.haml | 44 ------------------- app/views/notification_mailer/digest.text.erb | 15 ------- .../preferences/notifications/show.html.haml | 4 -- app/workers/digest_mailer_worker.rb | 21 --------- app/workers/scheduler/email_scheduler.rb | 25 ----------- config/locales/en.yml | 11 ----- config/sidekiq.yml | 4 -- spec/mailers/notification_mailer_spec.rb | 31 ------------- spec/workers/digest_mailer_worker_spec.rb | 36 --------------- 12 files changed, 1 insertion(+), 214 deletions(-) delete mode 100644 app/views/notification_mailer/digest.html.haml delete mode 100644 app/views/notification_mailer/digest.text.erb delete mode 100644 app/workers/digest_mailer_worker.rb delete mode 100644 app/workers/scheduler/email_scheduler.rb delete mode 100644 spec/workers/digest_mailer_worker_spec.rb diff --git a/app/controllers/settings/preferences_controller.rb b/app/controllers/settings/preferences_controller.rb index bfe651bc667..f5d5c12449b 100644 --- a/app/controllers/settings/preferences_controller.rb +++ b/app/controllers/settings/preferences_controller.rb @@ -55,7 +55,7 @@ class Settings::PreferencesController < Settings::BaseController :setting_trends, :setting_crop_images, :setting_always_send_emails, - notification_emails: %i(follow follow_request reblog favourite mention digest report pending_account trending_tag appeal), + notification_emails: %i(follow follow_request reblog favourite mention report pending_account trending_tag appeal), interactions: %i(must_be_follower must_be_following must_be_following_dm) ) end diff --git a/app/mailers/notification_mailer.rb b/app/mailers/notification_mailer.rb index 9e683b6a161..ab73826ab3a 100644 --- a/app/mailers/notification_mailer.rb +++ b/app/mailers/notification_mailer.rb @@ -66,24 +66,6 @@ class NotificationMailer < ApplicationMailer end end - def digest(recipient, **opts) - return unless recipient.user.functional? - - @me = recipient - @since = opts[:since] || [@me.user.last_emailed_at, (@me.user.current_sign_in_at + 1.day)].compact.max - @notifications_count = Notification.where(account: @me, activity_type: 'Mention').where('created_at > ?', @since).count - - return if @notifications_count.zero? - - @notifications = Notification.where(account: @me, activity_type: 'Mention').where('created_at > ?', @since).limit(40) - @follows_since = Notification.where(account: @me, activity_type: 'Follow').where('created_at > ?', @since).count - - locale_for_account(@me) do - mail to: @me.user.email, - subject: I18n.t(:subject, scope: [:notification_mailer, :digest], count: @notifications_count) - end - end - private def thread_by_conversation(conversation) diff --git a/app/models/user.rb b/app/models/user.rb index 18b9d592823..342f5e6ccd0 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -289,10 +289,6 @@ class User < ApplicationRecord settings.default_privacy || (account.locked? ? 'private' : 'public') end - def allows_digest_emails? - settings.notification_emails['digest'] - end - def allows_report_emails? settings.notification_emails['report'] end diff --git a/app/views/notification_mailer/digest.html.haml b/app/views/notification_mailer/digest.html.haml deleted file mode 100644 index a94ace228d8..00000000000 --- a/app/views/notification_mailer/digest.html.haml +++ /dev/null @@ -1,44 +0,0 @@ -%table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.darker.hero-with-button - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center.padded - %h1= t 'notification_mailer.digest.title' - %p.lead= t('notification_mailer.digest.body', since: l((@me.user_current_sign_in_at || @since).to_date, format: :short), instance: site_hostname) - %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.button-primary - = link_to web_url do - %span= t 'notification_mailer.digest.action' - -- @notifications.each_with_index do |n, i| - = render 'status', status: n.target_status, i: i - -- unless @follows_since.zero? - %table.email-table{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.email-body - .email-container - %table.content-section{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.content-cell.content-start.border-top - .email-row - .col-6 - %table.column{ cellspacing: 0, cellpadding: 0 } - %tbody - %tr - %td.column-cell.text-center - %p= t('notification_mailer.digest.new_followers_summary', count: @follows_since) diff --git a/app/views/notification_mailer/digest.text.erb b/app/views/notification_mailer/digest.text.erb deleted file mode 100644 index 0f84a4ef05a..00000000000 --- a/app/views/notification_mailer/digest.text.erb +++ /dev/null @@ -1,15 +0,0 @@ -<%= raw t('application_mailer.salutation', name: display_name(@me)) %> - -<%= raw t('notification_mailer.digest.body', since: l(@me.user_current_sign_in_at || @since), instance: root_url) %> -<% @notifications.each do |notification| %> - -* <%= raw t('notification_mailer.digest.mention', name: notification.from_account.pretty_acct) %> - - <%= raw extract_status_plain_text(notification.target_status) %> - - <%= raw t('application_mailer.view')%> <%= web_url("statuses/#{notification.target_status.id}") %> -<% end %> -<% if @follows_since > 0 %> - -<%= raw t('notification_mailer.digest.new_followers_summary', count: @follows_since) %> -<% end %> diff --git a/app/views/settings/preferences/notifications/show.html.haml b/app/views/settings/preferences/notifications/show.html.haml index bc7afb993ab..f00dbadd495 100644 --- a/app/views/settings/preferences/notifications/show.html.haml +++ b/app/views/settings/preferences/notifications/show.html.haml @@ -26,10 +26,6 @@ .fields-group = f.input :setting_always_send_emails, as: :boolean, wrapper: :with_label - .fields-group - = f.simple_fields_for :notification_emails, hash_to_object(current_user.settings.notification_emails) do |ff| - = ff.input :digest, as: :boolean, wrapper: :with_label - %h4= t 'notifications.other_settings' .fields-group diff --git a/app/workers/digest_mailer_worker.rb b/app/workers/digest_mailer_worker.rb deleted file mode 100644 index 21f1c357a0e..00000000000 --- a/app/workers/digest_mailer_worker.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -class DigestMailerWorker - include Sidekiq::Worker - - sidekiq_options queue: 'mailers' - - attr_reader :user - - def perform(user_id) - @user = User.find(user_id) - deliver_digest if @user.allows_digest_emails? - end - - private - - def deliver_digest - NotificationMailer.digest(user.account).deliver_now! - user.touch(:last_emailed_at) - end -end diff --git a/app/workers/scheduler/email_scheduler.rb b/app/workers/scheduler/email_scheduler.rb deleted file mode 100644 index c052f2fce08..00000000000 --- a/app/workers/scheduler/email_scheduler.rb +++ /dev/null @@ -1,25 +0,0 @@ -# frozen_string_literal: true - -class Scheduler::EmailScheduler - include Sidekiq::Worker - - sidekiq_options retry: 0 - - FREQUENCY = 7.days.freeze - SIGN_IN_OFFSET = 1.day.freeze - - def perform - eligible_users.reorder(nil).find_each do |user| - next unless user.allows_digest_emails? - DigestMailerWorker.perform_async(user.id) - end - end - - private - - def eligible_users - User.emailable - .where('current_sign_in_at < ?', (FREQUENCY + SIGN_IN_OFFSET).ago) - .where('last_emailed_at IS NULL OR last_emailed_at < ?', FREQUENCY.ago) - end -end diff --git a/config/locales/en.yml b/config/locales/en.yml index 6aa87e4a09f..72ebfafba2a 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1351,17 +1351,6 @@ en: subject: "%{name} submitted a report" sign_up: subject: "%{name} signed up" - digest: - action: View all notifications - body: Here is a brief summary of the messages you missed since your last visit on %{since} - mention: "%{name} mentioned you in:" - new_followers_summary: - one: Also, you have acquired one new follower while being away! Yay! - other: Also, you have acquired %{count} new followers while being away! Amazing! - subject: - one: "1 new notification since your last visit 🐘" - other: "%{count} new notifications since your last visit 🐘" - title: In your absence... favourite: body: 'Your post was favourited by %{name}:' subject: "%{name} favourited your post" diff --git a/config/sidekiq.yml b/config/sidekiq.yml index 2a387146846..9ec6eb5eca7 100644 --- a/config/sidekiq.yml +++ b/config/sidekiq.yml @@ -49,10 +49,6 @@ cron: '<%= Random.rand(0..59) %> <%= Random.rand(3..5) %> * * *' class: Scheduler::IpCleanupScheduler queue: scheduler - email_scheduler: - cron: '0 10 * * 2' - class: Scheduler::EmailScheduler - queue: scheduler backup_cleanup_scheduler: cron: '<%= Random.rand(0..59) %> <%= Random.rand(3..5) %> * * *' class: Scheduler::BackupCleanupScheduler diff --git a/spec/mailers/notification_mailer_spec.rb b/spec/mailers/notification_mailer_spec.rb index 2ca4e26fa8b..29bdc349b84 100644 --- a/spec/mailers/notification_mailer_spec.rb +++ b/spec/mailers/notification_mailer_spec.rb @@ -101,35 +101,4 @@ RSpec.describe NotificationMailer, type: :mailer do expect(mail.body.encoded).to match("bob has requested to follow you") end end - - describe 'digest' do - before do - mention = Fabricate(:mention, account: receiver.account, status: foreign_status) - Fabricate(:notification, account: receiver.account, activity: mention) - sender.follow!(receiver.account) - end - - context do - let!(:mail) { NotificationMailer.digest(receiver.account, since: 5.days.ago) } - - include_examples 'localized subject', 'notification_mailer.digest.subject', count: 1, name: 'bob' - - it 'renders the headers' do - expect(mail.subject).to match('notification since your last') - expect(mail.to).to eq([receiver.email]) - end - - it 'renders the body' do - expect(mail.body.encoded).to match('brief summary') - expect(mail.body.encoded).to include 'The body of the foreign status' - expect(mail.body.encoded).to include sender.username - end - end - - it 'includes activities since the receiver last signed in' do - receiver.update!(last_emailed_at: nil, current_sign_in_at: '2000-03-01T00:00:00Z') - mail = NotificationMailer.digest(receiver.account) - expect(mail.body.encoded).to include 'Mar 01, 2000, 00:00' - end - end end diff --git a/spec/workers/digest_mailer_worker_spec.rb b/spec/workers/digest_mailer_worker_spec.rb deleted file mode 100644 index db3b1390d57..00000000000 --- a/spec/workers/digest_mailer_worker_spec.rb +++ /dev/null @@ -1,36 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -describe DigestMailerWorker do - describe 'perform' do - let(:user) { Fabricate(:user, last_emailed_at: 3.days.ago) } - - context 'for a user who receives digests' do - it 'sends the email' do - service = double(deliver_now!: nil) - allow(NotificationMailer).to receive(:digest).and_return(service) - update_user_digest_setting(true) - described_class.perform_async(user.id) - - expect(NotificationMailer).to have_received(:digest) - expect(user.reload.last_emailed_at).to be_within(1).of(Time.now.utc) - end - end - - context 'for a user who does not receive digests' do - it 'does not send the email' do - allow(NotificationMailer).to receive(:digest) - update_user_digest_setting(false) - described_class.perform_async(user.id) - - expect(NotificationMailer).not_to have_received(:digest) - expect(user.last_emailed_at).to be_within(1).of(3.days.ago) - end - end - - def update_user_digest_setting(value) - user.settings['notification_emails'] = user.settings['notification_emails'].merge('digest' => value) - end - end -end From af396fa35f589e1f759c7a3a0dad7932f1862309 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 25 Aug 2022 23:38:36 +0200 Subject: [PATCH 243/646] Remove preference to aggregate reblogs in home/list feeds (#18112) --- app/lib/feed_manager.rb | 18 +++++++++--------- .../settings/preferences/other/show.html.haml | 3 --- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index 145352fe8e8..ccff2667b6b 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -58,7 +58,7 @@ class FeedManager # @param [Boolean] update # @return [Boolean] def push_to_home(account, status, update: false) - return false unless add_to_feed(:home, account.id, status, aggregate_reblogs: account.user&.aggregates_reblogs?) + return false unless add_to_feed(:home, account.id, status, aggregate_reblogs: true) trim(:home, account.id) PushUpdateWorker.perform_async(account.id, status.id, "timeline:#{account.id}", { 'update' => update }) if push_update_required?("timeline:#{account.id}") @@ -71,7 +71,7 @@ class FeedManager # @param [Boolean] update # @return [Boolean] def unpush_from_home(account, status, update: false) - return false unless remove_from_feed(:home, account.id, status, aggregate_reblogs: account.user&.aggregates_reblogs?) + return false unless remove_from_feed(:home, account.id, status, aggregate_reblogs: true) redis.publish("timeline:#{account.id}", Oj.dump(event: :delete, payload: status.id.to_s)) unless update true @@ -83,7 +83,7 @@ class FeedManager # @param [Boolean] update # @return [Boolean] def push_to_list(list, status, update: false) - return false if filter_from_list?(status, list) || !add_to_feed(:list, list.id, status, aggregate_reblogs: list.account.user&.aggregates_reblogs?) + return false if filter_from_list?(status, list) || !add_to_feed(:list, list.id, status, aggregate_reblogs: true) trim(:list, list.id) PushUpdateWorker.perform_async(list.account_id, status.id, "timeline:list:#{list.id}", { 'update' => update }) if push_update_required?("timeline:list:#{list.id}") @@ -96,7 +96,7 @@ class FeedManager # @param [Boolean] update # @return [Boolean] def unpush_from_list(list, status, update: false) - return false unless remove_from_feed(:list, list.id, status, aggregate_reblogs: list.account.user&.aggregates_reblogs?) + return false unless remove_from_feed(:list, list.id, status, aggregate_reblogs: true) redis.publish("timeline:list:#{list.id}", Oj.dump(event: :delete, payload: status.id.to_s)) unless update true @@ -108,7 +108,7 @@ class FeedManager # @return [void] def merge_into_home(from_account, into_account) timeline_key = key(:home, into_account.id) - aggregate = into_account.user&.aggregates_reblogs? + aggregate = true query = from_account.statuses.where(visibility: [:public, :unlisted, :private]).includes(:preloadable_poll, :media_attachments, reblog: :account).limit(FeedManager::MAX_ITEMS / 4) if redis.zcard(timeline_key) >= FeedManager::MAX_ITEMS / 4 @@ -134,7 +134,7 @@ class FeedManager # @return [void] def merge_into_list(from_account, list) timeline_key = key(:list, list.id) - aggregate = list.account.user&.aggregates_reblogs? + aggregate = true query = from_account.statuses.where(visibility: [:public, :unlisted, :private]).includes(:preloadable_poll, :media_attachments, reblog: :account).limit(FeedManager::MAX_ITEMS / 4) if redis.zcard(timeline_key) >= FeedManager::MAX_ITEMS / 4 @@ -163,7 +163,7 @@ class FeedManager timeline_status_ids = redis.zrange(timeline_key, 0, -1) from_account.statuses.select('id, reblog_of_id').where(id: timeline_status_ids).reorder(nil).find_each do |status| - remove_from_feed(:home, into_account.id, status, aggregate_reblogs: into_account.user&.aggregates_reblogs?) + remove_from_feed(:home, into_account.id, status, aggregate_reblogs: true) end end @@ -176,7 +176,7 @@ class FeedManager timeline_status_ids = redis.zrange(timeline_key, 0, -1) from_account.statuses.select('id, reblog_of_id').where(id: timeline_status_ids).reorder(nil).find_each do |status| - remove_from_feed(:list, list.id, status, aggregate_reblogs: list.account.user&.aggregates_reblogs?) + remove_from_feed(:list, list.id, status, aggregate_reblogs: true) end end @@ -235,7 +235,7 @@ class FeedManager # @return [void] def populate_home(account) limit = FeedManager::MAX_ITEMS / 2 - aggregate = account.user&.aggregates_reblogs? + aggregate = true timeline_key = key(:home, account.id) account.statuses.limit(limit).each do |status| diff --git a/app/views/settings/preferences/other/show.html.haml b/app/views/settings/preferences/other/show.html.haml index 44f4af2eba8..379678703e4 100644 --- a/app/views/settings/preferences/other/show.html.haml +++ b/app/views/settings/preferences/other/show.html.haml @@ -10,9 +10,6 @@ .fields-group = f.input :setting_noindex, as: :boolean, wrapper: :with_label - .fields-group - = f.input :setting_aggregate_reblogs, as: :boolean, wrapper: :with_label, recommended: true - %h4= t 'preferences.posting_defaults' .fields-row From 1d84cbeaab7cecdfef10f53afe1e708b8a363603 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 26 Aug 2022 02:11:23 +0200 Subject: [PATCH 244/646] Fix "select all matching items" being offered when all items are on the page (#19054) --- app/views/admin/accounts/index.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/accounts/index.html.haml b/app/views/admin/accounts/index.html.haml index 670a09a2d6a..f33f788ed27 100644 --- a/app/views/admin/accounts/index.html.haml +++ b/app/views/admin/accounts/index.html.haml @@ -53,7 +53,7 @@ = f.button safe_join([fa_icon('times'), t('admin.accounts.reject')]), name: :reject, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } = f.button safe_join([fa_icon('lock'), t('admin.accounts.perform_full_suspension')]), name: :suspend, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } - - if true || @accounts.total_count > @accounts.size + - if @accounts.total_count > @accounts.size .batch-table__select-all .not-selected.active %span= t('generic.all_items_on_page_selected_html', count: @accounts.size) From 1fac99e842c99e8f6aef9429ee1f19c7e63f7b07 Mon Sep 17 00:00:00 2001 From: Shlee Date: Fri, 26 Aug 2022 09:42:46 +0930 Subject: [PATCH 245/646] Add rel="noopener" to links to remote profiles (#19014) * Update timeline_hint.js * Update timeline_hint.js --- app/javascript/mastodon/components/timeline_hint.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/timeline_hint.js b/app/javascript/mastodon/components/timeline_hint.js index fb55a62ccae..ac9a79dcc0d 100644 --- a/app/javascript/mastodon/components/timeline_hint.js +++ b/app/javascript/mastodon/components/timeline_hint.js @@ -6,7 +6,7 @@ const TimelineHint = ({ resource, url }) => (


    - +
    ); From c7147bab908aca4cefd17d527e7cbfe3b6e5d3a6 Mon Sep 17 00:00:00 2001 From: Claire Date: Sat, 27 Aug 2022 00:45:54 +0200 Subject: [PATCH 246/646] Fix incorrect and slow cache invalidation in ClearDomainMediaService (#19062) Fixes #19060 --- app/services/clear_domain_media_service.rb | 32 +++++++++++----------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/app/services/clear_domain_media_service.rb b/app/services/clear_domain_media_service.rb index 704cfb71a6e..9e70ebe51c7 100644 --- a/app/services/clear_domain_media_service.rb +++ b/app/services/clear_domain_media_service.rb @@ -10,24 +10,18 @@ class ClearDomainMediaService < BaseService private - def invalidate_association_caches! + def invalidate_association_caches!(status_ids) # Normally, associated models of a status are immutable (except for accounts) # so they are aggressively cached. After updating the media attachments to no # longer point to a local file, we need to clear the cache to make those # changes appear in the API and UI - @affected_status_ids.each { |id| Rails.cache.delete_matched("statuses/#{id}-*") } + Rails.cache.delete_multi(status_ids.map { |id| "statuses/#{id}" }) end def clear_media! - @affected_status_ids = [] - - begin - clear_account_images! - clear_account_attachments! - clear_emojos! - ensure - invalidate_association_caches! - end + clear_account_images! + clear_account_attachments! + clear_emojos! end def clear_account_images! @@ -39,12 +33,18 @@ class ClearDomainMediaService < BaseService end def clear_account_attachments! - media_from_blocked_domain.reorder(nil).find_each do |attachment| - @affected_status_ids << attachment.status_id if attachment.status_id.present? + media_from_blocked_domain.reorder(nil).find_in_batches do |attachments| + affected_status_ids = [] - attachment.file.destroy if attachment.file&.exists? - attachment.type = :unknown - attachment.save + attachments.each do |attachment| + affected_status_ids << attachment.status_id if attachment.status_id.present? + + attachment.file.destroy if attachment.file&.exists? + attachment.type = :unknown + attachment.save + end + + invalidate_association_caches!(affected_status_ids) unless affected_status_ids.empty? end end From 54d9a9c18a74a1ec766d8f611ad3ee11ab4c5422 Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Sat, 27 Aug 2022 22:17:27 +0900 Subject: [PATCH 247/646] Fix react warning on notifications column (#1832) --- .../glitch/features/notifications/index.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/app/javascript/flavours/glitch/features/notifications/index.js b/app/javascript/flavours/glitch/features/notifications/index.js index 075e729b18b..2682dd29b5b 100644 --- a/app/javascript/flavours/glitch/features/notifications/index.js +++ b/app/javascript/flavours/glitch/features/notifications/index.js @@ -283,13 +283,14 @@ class Notifications extends React.PureComponent { if (canMarkAsRead) { extraButtons.push( + , ); } @@ -306,13 +307,14 @@ class Notifications extends React.PureComponent { extraButtons.push( + , ); const notifCleaningDrawer = ( @@ -323,6 +325,12 @@ class Notifications extends React.PureComponent {
    ); + const extraButton = ( + <> + {extraButtons} + + ); + return ( From 159b4edeef1ebdb70cc8d7d1316184252aef00a3 Mon Sep 17 00:00:00 2001 From: Shlee Date: Sun, 28 Aug 2022 01:10:46 +0930 Subject: [PATCH 248/646] Update docker-compose.yml (#19063) --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index d86cb55d21f..c534286c76d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -15,7 +15,7 @@ services: redis: restart: always - image: redis:6-alpine + image: redis:7-alpine networks: - internal_network healthcheck: From ff19dad5a05dba689122b0427886c8375491571a Mon Sep 17 00:00:00 2001 From: Claire Date: Sat, 27 Aug 2022 17:41:20 +0200 Subject: [PATCH 249/646] Fix crash when adding a new filter (#18894) Fixes #18742 --- ...71123_fix_custom_filter_keywords_id_seq.rb | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 db/post_migrate/20220729171123_fix_custom_filter_keywords_id_seq.rb diff --git a/db/post_migrate/20220729171123_fix_custom_filter_keywords_id_seq.rb b/db/post_migrate/20220729171123_fix_custom_filter_keywords_id_seq.rb new file mode 100644 index 00000000000..7ed34a3efc2 --- /dev/null +++ b/db/post_migrate/20220729171123_fix_custom_filter_keywords_id_seq.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class FixCustomFilterKeywordsIdSeq < ActiveRecord::Migration[6.1] + disable_ddl_transaction! + + def up + # 20220613110711 manually inserts items with set `id` in the database, but + # we also need to bump the sequence number, otherwise + safety_assured do + execute <<-SQL.squish + BEGIN; + LOCK TABLE custom_filter_keywords IN EXCLUSIVE MODE; + SELECT setval('custom_filter_keywords_id_seq'::regclass, id) FROM custom_filter_keywords ORDER BY id DESC LIMIT 1; + COMMIT; + SQL + end + end + + def down; end +end From b399d79545e5e5430cb9d6a2c936efc244b69a75 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 27 Aug 2022 20:56:47 +0200 Subject: [PATCH 250/646] Add admin API for managing IP blocks (#19065) --- .../api/v1/admin/ip_blocks_controller.rb | 99 +++++++++++++++++++ app/models/ip_block.rb | 3 +- app/policies/ip_block_policy.rb | 4 + .../rest/admin/ip_block_serializer.rb | 14 +++ config/routes.rb | 1 + 5 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 app/controllers/api/v1/admin/ip_blocks_controller.rb create mode 100644 app/serializers/rest/admin/ip_block_serializer.rb diff --git a/app/controllers/api/v1/admin/ip_blocks_controller.rb b/app/controllers/api/v1/admin/ip_blocks_controller.rb new file mode 100644 index 00000000000..f13d6326711 --- /dev/null +++ b/app/controllers/api/v1/admin/ip_blocks_controller.rb @@ -0,0 +1,99 @@ +# frozen_string_literal: true + +class Api::V1::Admin::IpBlocksController < Api::BaseController + include Authorization + include AccountableConcern + + LIMIT = 100 + + before_action -> { authorize_if_got_token! :'admin:read', :'admin:read:ip_blocks' }, only: [:index, :show] + before_action -> { authorize_if_got_token! :'admin:write', :'admin:write:ip_blocks' }, except: [:index, :show] + before_action :set_ip_blocks, only: :index + before_action :set_ip_block, only: [:show, :update, :destroy] + + after_action :verify_authorized + after_action :insert_pagination_headers, only: :index + + PAGINATION_PARAMS = %i( + limit + ).freeze + + def create + authorize :ip_block, :create? + + @ip_block = IpBlock.create!(resource_params) + log_action :create, @ip_block + + render json: @ip_block, serializer: REST::Admin::IpBlockSerializer + end + + def index + authorize :ip_block, :index? + render json: @ip_blocks, each_serializer: REST::Admin::IpBlockSerializer + end + + def show + authorize @ip_block, :show? + render json: @ip_block, serializer: REST::Admin::IpBlockSerializer + end + + def update + authorize @ip_block, :update? + + @ip_block.update(resource_params) + log_action :update, @ip_block + + render json: @ip_block, serializer: REST::Admin::IpBlockSerializer + end + + def destroy + authorize @ip_block, :destroy? + + @ip_block.destroy! + log_action :destroy, @ip_block + + render json: @ip_block, serializer: REST::Admin::IpBlockSerializer + end + + private + + def set_ip_blocks + @ip_blocks = IpBlock.order(id: :desc).to_a_paginated_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id)) + end + + def set_ip_block + @ip_block = IpBlock.find(params[:id]) + end + + def resource_params + params.permit(:ip, :severity, :comment, :expires_in) + end + + def insert_pagination_headers + set_pagination_headers(next_path, prev_path) + end + + def next_path + api_v1_admin_ip_blocks_url(pagination_params(max_id: pagination_max_id)) if records_continue? + end + + def prev_path + api_v1_admin_ip_blocks_url(pagination_params(min_id: pagination_since_id)) unless @ip_blocks.empty? + end + + def pagination_max_id + @ip_blocks.last.id + end + + def pagination_since_id + @ip_blocks.first.id + end + + def records_continue? + @ip_blocks.size == limit_param(LIMIT) + end + + def pagination_params(core_params) + params.slice(*PAGINATION_PARAMS).permit(*PAGINATION_PARAMS).merge(core_params) + end +end diff --git a/app/models/ip_block.rb b/app/models/ip_block.rb index f40c8a0b1d1..8666f4248e1 100644 --- a/app/models/ip_block.rb +++ b/app/models/ip_block.rb @@ -16,6 +16,7 @@ class IpBlock < ApplicationRecord CACHE_KEY = 'blocked_ips' include Expireable + include Paginable enum severity: { sign_up_requires_approval: 5000, @@ -28,7 +29,7 @@ class IpBlock < ApplicationRecord after_commit :reset_cache def to_log_human_identifier - "#{record.ip}/#{record.ip.prefix}" + "#{ip}/#{ip.prefix}" end class << self diff --git a/app/policies/ip_block_policy.rb b/app/policies/ip_block_policy.rb index 1abc97ad8b7..2986a4fdb39 100644 --- a/app/policies/ip_block_policy.rb +++ b/app/policies/ip_block_policy.rb @@ -9,6 +9,10 @@ class IpBlockPolicy < ApplicationPolicy role.can?(:manage_blocks) end + def update? + role.can?(:manage_blocks) + end + def destroy? role.can?(:manage_blocks) end diff --git a/app/serializers/rest/admin/ip_block_serializer.rb b/app/serializers/rest/admin/ip_block_serializer.rb new file mode 100644 index 00000000000..6a38f8b566f --- /dev/null +++ b/app/serializers/rest/admin/ip_block_serializer.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +class REST::Admin::IpBlockSerializer < ActiveModel::Serializer + attributes :id, :ip, :severity, :comment, + :created_at, :expires_at + + def id + object.id.to_s + end + + def ip + "#{object.ip}/#{object.ip.prefix}" + end +end diff --git a/config/routes.rb b/config/routes.rb index dff0add3ae0..1168c9aee49 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -591,6 +591,7 @@ Rails.application.routes.draw do resources :domain_allows, only: [:index, :show, :create, :destroy] resources :domain_blocks, only: [:index, :show, :update, :create, :destroy] + resources :ip_blocks, only: [:index, :show, :update, :create, :destroy] namespace :trends do resources :tags, only: [:index] From c556c3a0d1e54a6b07bbdd8f76cbb43672a91fd1 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 28 Aug 2022 03:31:54 +0200 Subject: [PATCH 251/646] Add admin API for managing canonical e-mail blocks (#19067) --- .../canonical_email_blocks_controller.rb | 99 +++++++++++++++++++ app/helpers/admin/action_logs_helper.rb | 8 +- app/models/admin/action_log_filter.rb | 5 + app/models/canonical_email_block.rb | 17 ++-- app/policies/canonical_email_block_policy.rb | 23 +++++ .../admin/canonical_email_block_serializer.rb | 9 ++ config/locales/en.yml | 6 ++ config/routes.rb | 6 ++ ..._change_canonical_email_blocks_nullable.rb | 5 + db/schema.rb | 4 +- lib/mastodon/canonical_email_blocks_cli.rb | 31 ++---- 11 files changed, 177 insertions(+), 36 deletions(-) create mode 100644 app/controllers/api/v1/admin/canonical_email_blocks_controller.rb create mode 100644 app/policies/canonical_email_block_policy.rb create mode 100644 app/serializers/rest/admin/canonical_email_block_serializer.rb create mode 100644 db/migrate/20220827195229_change_canonical_email_blocks_nullable.rb diff --git a/app/controllers/api/v1/admin/canonical_email_blocks_controller.rb b/app/controllers/api/v1/admin/canonical_email_blocks_controller.rb new file mode 100644 index 00000000000..bf8a6a1311e --- /dev/null +++ b/app/controllers/api/v1/admin/canonical_email_blocks_controller.rb @@ -0,0 +1,99 @@ +# frozen_string_literal: true + +class Api::V1::Admin::CanonicalEmailBlocksController < Api::BaseController + include Authorization + include AccountableConcern + + LIMIT = 100 + + before_action -> { authorize_if_got_token! :'admin:read', :'admin:read:canonical_email_blocks' }, only: [:index, :show, :test] + before_action -> { authorize_if_got_token! :'admin:write', :'admin:write:canonical_email_blocks' }, except: [:index, :show, :test] + + before_action :set_canonical_email_blocks, only: :index + before_action :set_canonical_email_blocks_from_test, only: [:test] + before_action :set_canonical_email_block, only: [:show, :destroy] + + after_action :verify_authorized + after_action :insert_pagination_headers, only: :index + + PAGINATION_PARAMS = %i(limit).freeze + + def index + authorize :canonical_email_block, :index? + render json: @canonical_email_blocks, each_serializer: REST::Admin::CanonicalEmailBlockSerializer + end + + def show + authorize @canonical_email_block, :show? + render json: @canonical_email_block, serializer: REST::Admin::CanonicalEmailBlockSerializer + end + + def test + authorize :canonical_email_block, :test? + render json: @canonical_email_blocks, each_serializer: REST::Admin::CanonicalEmailBlockSerializer + end + + def create + authorize :canonical_email_block, :create? + + @canonical_email_block = CanonicalEmailBlock.create!(resource_params) + log_action :create, @canonical_email_block + + render json: @canonical_email_block, serializer: REST::Admin::CanonicalEmailBlockSerializer + end + + def destroy + authorize @canonical_email_block, :destroy? + + @canonical_email_block.destroy! + log_action :destroy, @canonical_email_block + + render json: @canonical_email_block, serializer: REST::Admin::CanonicalEmailBlockSerializer + end + + private + + def resource_params + params.permit(:canonical_email_hash, :email) + end + + def set_canonical_email_blocks + @canonical_email_blocks = CanonicalEmailBlock.order(id: :desc).to_a_paginated_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id)) + end + + def set_canonical_email_blocks_from_test + @canonical_email_blocks = CanonicalEmailBlock.matching_email(params[:email]) + end + + def set_canonical_email_block + @canonical_email_block = CanonicalEmailBlock.find(params[:id]) + end + + def insert_pagination_headers + set_pagination_headers(next_path, prev_path) + end + + def next_path + api_v1_admin_canonical_email_blocks_url(pagination_params(max_id: pagination_max_id)) if records_continue? + end + + def prev_path + api_v1_admin_canonical_email_blocks_url(pagination_params(min_id: pagination_since_id)) unless @canonical_email_blocks.empty? + end + + def pagination_max_id + @canonical_email_blocks.last.id + end + + def pagination_since_id + @canonical_email_blocks.first.id + end + + def records_continue? + @canonical_email_blocks.size == limit_param(LIMIT) + end + + def pagination_params(core_params) + params.slice(*PAGINATION_PARAMS).permit(*PAGINATION_PARAMS).merge(core_params) + end +end diff --git a/app/helpers/admin/action_logs_helper.rb b/app/helpers/admin/action_logs_helper.rb index 3e9fe17f460..fd1977ac53f 100644 --- a/app/helpers/admin/action_logs_helper.rb +++ b/app/helpers/admin/action_logs_helper.rb @@ -9,8 +9,6 @@ module Admin::ActionLogsHelper link_to log.human_identifier, admin_account_path(log.route_param) when 'UserRole' link_to log.human_identifier, admin_roles_path(log.target_id) - when 'CustomEmoji' - log.human_identifier when 'Report' link_to "##{log.human_identifier}", admin_report_path(log.target_id) when 'DomainBlock', 'DomainAllow', 'EmailDomainBlock', 'UnavailableDomain' @@ -21,10 +19,10 @@ module Admin::ActionLogsHelper link_to log.human_identifier, admin_account_path(log.target_id) when 'Announcement' link_to truncate(log.human_identifier), edit_admin_announcement_path(log.target_id) - when 'IpBlock' - log.human_identifier - when 'Instance' + when 'IpBlock', 'Instance', 'CustomEmoji' log.human_identifier + when 'CanonicalEmailBlock' + content_tag(:samp, log.human_identifier[0...7], title: log.human_identifier) when 'Appeal' link_to log.human_identifier, disputes_strike_path(log.route_param) end diff --git a/app/models/admin/action_log_filter.rb b/app/models/admin/action_log_filter.rb index 6382cd782b6..c7a7e1a4c34 100644 --- a/app/models/admin/action_log_filter.rb +++ b/app/models/admin/action_log_filter.rb @@ -22,18 +22,22 @@ class Admin::ActionLogFilter create_domain_allow: { target_type: 'DomainAllow', action: 'create' }.freeze, create_domain_block: { target_type: 'DomainBlock', action: 'create' }.freeze, create_email_domain_block: { target_type: 'EmailDomainBlock', action: 'create' }.freeze, + create_ip_block: { target_type: 'IpBlock', action: 'create' }.freeze, create_unavailable_domain: { target_type: 'UnavailableDomain', action: 'create' }.freeze, create_user_role: { target_type: 'UserRole', action: 'create' }.freeze, + create_canonical_email_block: { target_type: 'CanonicalEmailBlock', action: 'create' }.freeze, demote_user: { target_type: 'User', action: 'demote' }.freeze, destroy_announcement: { target_type: 'Announcement', action: 'destroy' }.freeze, destroy_custom_emoji: { target_type: 'CustomEmoji', action: 'destroy' }.freeze, destroy_domain_allow: { target_type: 'DomainAllow', action: 'destroy' }.freeze, destroy_domain_block: { target_type: 'DomainBlock', action: 'destroy' }.freeze, + destroy_ip_block: { target_type: 'IpBlock', action: 'destroy' }.freeze, destroy_email_domain_block: { target_type: 'EmailDomainBlock', action: 'destroy' }.freeze, destroy_instance: { target_type: 'Instance', action: 'destroy' }.freeze, destroy_unavailable_domain: { target_type: 'UnavailableDomain', action: 'destroy' }.freeze, destroy_status: { target_type: 'Status', action: 'destroy' }.freeze, destroy_user_role: { target_type: 'UserRole', action: 'destroy' }.freeze, + destroy_canonical_email_block: { target_type: 'CanonicalEmailBlock', action: 'destroy' }.freeze, disable_2fa_user: { target_type: 'User', action: 'disable' }.freeze, disable_custom_emoji: { target_type: 'CustomEmoji', action: 'disable' }.freeze, disable_user: { target_type: 'User', action: 'disable' }.freeze, @@ -56,6 +60,7 @@ class Admin::ActionLogFilter update_custom_emoji: { target_type: 'CustomEmoji', action: 'update' }.freeze, update_status: { target_type: 'Status', action: 'update' }.freeze, update_user_role: { target_type: 'UserRole', action: 'update' }.freeze, + update_ip_block: { target_type: 'IpBlock', action: 'update' }.freeze, unblock_email_account: { target_type: 'Account', action: 'unblock_email' }.freeze, }.freeze diff --git a/app/models/canonical_email_block.rb b/app/models/canonical_email_block.rb index 94781386c96..1eb69ac67a5 100644 --- a/app/models/canonical_email_block.rb +++ b/app/models/canonical_email_block.rb @@ -5,27 +5,30 @@ # # id :bigint(8) not null, primary key # canonical_email_hash :string default(""), not null -# reference_account_id :bigint(8) not null +# reference_account_id :bigint(8) # created_at :datetime not null # updated_at :datetime not null # class CanonicalEmailBlock < ApplicationRecord include EmailHelper + include Paginable - belongs_to :reference_account, class_name: 'Account' + belongs_to :reference_account, class_name: 'Account', optional: true validates :canonical_email_hash, presence: true, uniqueness: true + scope :matching_email, ->(email) { where(canonical_email_hash: email_to_canonical_email_hash(email)) } + + def to_log_human_identifier + canonical_email_hash + end + def email=(email) self.canonical_email_hash = email_to_canonical_email_hash(email) end def self.block?(email) - where(canonical_email_hash: email_to_canonical_email_hash(email)).exists? - end - - def self.find_blocks(email) - where(canonical_email_hash: email_to_canonical_email_hash(email)) + matching_email(email).exists? end end diff --git a/app/policies/canonical_email_block_policy.rb b/app/policies/canonical_email_block_policy.rb new file mode 100644 index 00000000000..8d76075c936 --- /dev/null +++ b/app/policies/canonical_email_block_policy.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class CanonicalEmailBlockPolicy < ApplicationPolicy + def index? + role.can?(:manage_blocks) + end + + def show? + role.can?(:manage_blocks) + end + + def test? + role.can?(:manage_blocks) + end + + def create? + role.can?(:manage_blocks) + end + + def destroy? + role.can?(:manage_blocks) + end +end diff --git a/app/serializers/rest/admin/canonical_email_block_serializer.rb b/app/serializers/rest/admin/canonical_email_block_serializer.rb new file mode 100644 index 00000000000..fe385940a73 --- /dev/null +++ b/app/serializers/rest/admin/canonical_email_block_serializer.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class REST::Admin::CanonicalEmailBlockSerializer < ActiveModel::Serializer + attributes :id, :canonical_email_hash + + def id + object.id.to_s + end +end diff --git a/config/locales/en.yml b/config/locales/en.yml index 72ebfafba2a..0b721c163d1 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -239,6 +239,7 @@ en: confirm_user: Confirm User create_account_warning: Create Warning create_announcement: Create Announcement + create_canonical_email_block: Create E-mail Block create_custom_emoji: Create Custom Emoji create_domain_allow: Create Domain Allow create_domain_block: Create Domain Block @@ -248,6 +249,7 @@ en: create_user_role: Create Role demote_user: Demote User destroy_announcement: Delete Announcement + destroy_canonical_email_block: Delete E-mail Block destroy_custom_emoji: Delete Custom Emoji destroy_domain_allow: Delete Domain Allow destroy_domain_block: Delete Domain Block @@ -283,6 +285,7 @@ en: update_announcement: Update Announcement update_custom_emoji: Update Custom Emoji update_domain_block: Update Domain Block + update_ip_block: Update IP rule update_status: Update Post update_user_role: Update Role actions: @@ -294,6 +297,7 @@ en: confirm_user_html: "%{name} confirmed e-mail address of user %{target}" create_account_warning_html: "%{name} sent a warning to %{target}" create_announcement_html: "%{name} created new announcement %{target}" + create_canonical_email_block_html: "%{name} blocked e-mail with the hash %{target}" create_custom_emoji_html: "%{name} uploaded new emoji %{target}" create_domain_allow_html: "%{name} allowed federation with domain %{target}" create_domain_block_html: "%{name} blocked domain %{target}" @@ -303,6 +307,7 @@ en: create_user_role_html: "%{name} created %{target} role" demote_user_html: "%{name} demoted user %{target}" destroy_announcement_html: "%{name} deleted announcement %{target}" + destroy_canonical_email_block_html: "%{name} unblocked e-mail with the hash %{target}" destroy_custom_emoji_html: "%{name} deleted emoji %{target}" destroy_domain_allow_html: "%{name} disallowed federation with domain %{target}" destroy_domain_block_html: "%{name} unblocked domain %{target}" @@ -338,6 +343,7 @@ en: update_announcement_html: "%{name} updated announcement %{target}" update_custom_emoji_html: "%{name} updated emoji %{target}" update_domain_block_html: "%{name} updated domain block for %{target}" + update_ip_block_html: "%{name} changed rule for IP %{target}" update_status_html: "%{name} updated post by %{target}" update_user_role_html: "%{name} changed %{target} role" empty: No logs found. diff --git a/config/routes.rb b/config/routes.rb index 1168c9aee49..8694a643642 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -602,6 +602,12 @@ Rails.application.routes.draw do post :measures, to: 'measures#create' post :dimensions, to: 'dimensions#create' post :retention, to: 'retention#create' + + resources :canonical_email_blocks, only: [:index, :create, :show, :destroy] do + collection do + post :test + end + end end end diff --git a/db/migrate/20220827195229_change_canonical_email_blocks_nullable.rb b/db/migrate/20220827195229_change_canonical_email_blocks_nullable.rb new file mode 100644 index 00000000000..5b3ec472751 --- /dev/null +++ b/db/migrate/20220827195229_change_canonical_email_blocks_nullable.rb @@ -0,0 +1,5 @@ +class ChangeCanonicalEmailBlocksNullable < ActiveRecord::Migration[6.1] + def change + safety_assured { change_column :canonical_email_blocks, :reference_account_id, :bigint, null: true, default: nil } + end +end diff --git a/db/schema.rb b/db/schema.rb index 83fd9549c4b..db22f538a76 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2022_08_24_164532) do +ActiveRecord::Schema.define(version: 2022_08_27_195229) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -296,7 +296,7 @@ ActiveRecord::Schema.define(version: 2022_08_24_164532) do create_table "canonical_email_blocks", force: :cascade do |t| t.string "canonical_email_hash", default: "", null: false - t.bigint "reference_account_id", null: false + t.bigint "reference_account_id" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.index ["canonical_email_hash"], name: "index_canonical_email_blocks_on_canonical_email_hash", unique: true diff --git a/lib/mastodon/canonical_email_blocks_cli.rb b/lib/mastodon/canonical_email_blocks_cli.rb index 64b72e60310..ec228d466a1 100644 --- a/lib/mastodon/canonical_email_blocks_cli.rb +++ b/lib/mastodon/canonical_email_blocks_cli.rb @@ -18,17 +18,15 @@ module Mastodon When suspending a local user, a hash of a "canonical" version of their e-mail address is stored to prevent them from signing up again. - This command can be used to find whether a known email address is blocked, - and if so, which account it was attached to. + This command can be used to find whether a known email address is blocked. LONG_DESC def find(email) - accts = CanonicalEmailBlock.find_blocks(email).map(&:reference_account).map(&:acct).to_a + accts = CanonicalEmailBlock.matching_email(email) + if accts.empty? - say("#{email} is not blocked", :yellow) + say("#{email} is not blocked", :green) else - accts.each do |acct| - say(acct, :white) - end + say("#{email} is blocked", :red) end end @@ -40,24 +38,13 @@ module Mastodon This command allows removing a canonical email block. LONG_DESC def remove(email) - blocks = CanonicalEmailBlock.find_blocks(email) + blocks = CanonicalEmailBlock.matching_email(email) + if blocks.empty? - say("#{email} is not blocked", :yellow) + say("#{email} is not blocked", :green) else blocks.destroy_all - say("Removed canonical email block for #{email}", :green) - end - end - - private - - def color(processed, failed) - if !processed.zero? && failed.zero? - :green - elsif failed.zero? - :yellow - else - :red + say("Unblocked #{email}", :green) end end end From 2a7766dcc958ad18df761de50f9da5164f1a2e8f Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 28 Aug 2022 03:37:55 +0200 Subject: [PATCH 252/646] Add admin API for managing e-mail domain blocks (#19066) --- .../admin/email_domain_blocks_controller.rb | 90 +++++++++++++++++++ app/models/email_domain_block.rb | 1 + .../admin/email_domain_block_serializer.rb | 9 ++ config/routes.rb | 1 + 4 files changed, 101 insertions(+) create mode 100644 app/controllers/api/v1/admin/email_domain_blocks_controller.rb create mode 100644 app/serializers/rest/admin/email_domain_block_serializer.rb diff --git a/app/controllers/api/v1/admin/email_domain_blocks_controller.rb b/app/controllers/api/v1/admin/email_domain_blocks_controller.rb new file mode 100644 index 00000000000..ac16f70b05f --- /dev/null +++ b/app/controllers/api/v1/admin/email_domain_blocks_controller.rb @@ -0,0 +1,90 @@ +# frozen_string_literal: true + +class Api::V1::Admin::EmailDomainBlocksController < Api::BaseController + include Authorization + include AccountableConcern + + LIMIT = 100 + + before_action -> { authorize_if_got_token! :'admin:read', :'admin:read:email_domain_blocks' }, only: [:index, :show] + before_action -> { authorize_if_got_token! :'admin:write', :'admin:write:email_domain_blocks' }, except: [:index, :show] + before_action :set_email_domain_blocks, only: :index + before_action :set_email_domain_block, only: [:show, :destroy] + + after_action :verify_authorized + after_action :insert_pagination_headers, only: :index + + PAGINATION_PARAMS = %i( + limit + ).freeze + + def create + authorize :email_domain_block, :create? + + @email_domain_block = EmailDomainBlock.create!(resource_params) + log_action :create, @email_domain_block + + render json: @email_domain_block, serializer: REST::Admin::EmailDomainBlockSerializer + end + + def index + authorize :email_domain_block, :index? + render json: @email_domain_blocks, each_serializer: REST::Admin::EmailDomainBlockSerializer + end + + def show + authorize @email_domain_block, :show? + render json: @email_domain_block, serializer: REST::Admin::EmailDomainBlockSerializer + end + + def destroy + authorize @email_domain_block, :destroy? + + @email_domain_block.destroy! + log_action :destroy, @email_domain_block + + render json: @email_domain_block, serializer: REST::Admin::EmailDomainBlockSerializer + end + + private + + def set_email_domain_blocks + @email_domain_blocks = EmailDomainBlock.order(id: :desc).to_a_paginated_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id)) + end + + def set_email_domain_block + @email_domain_block = EmailDomainBlock.find(params[:id]) + end + + def resource_params + params.permit(:domain) + end + + def insert_pagination_headers + set_pagination_headers(next_path, prev_path) + end + + def next_path + api_v1_admin_email_domain_blocks_url(pagination_params(max_id: pagination_max_id)) if records_continue? + end + + def prev_path + api_v1_admin_email_domain_blocks_url(pagination_params(min_id: pagination_since_id)) unless @email_domain_blocks.empty? + end + + def pagination_max_id + @email_domain_blocks.last.id + end + + def pagination_since_id + @email_domain_blocks.first.id + end + + def records_continue? + @email_domain_blocks.size == limit_param(LIMIT) + end + + def pagination_params(core_params) + params.slice(*PAGINATION_PARAMS).permit(*PAGINATION_PARAMS).merge(core_params) + end +end diff --git a/app/models/email_domain_block.rb b/app/models/email_domain_block.rb index 661f6727d1d..10a0e51020e 100644 --- a/app/models/email_domain_block.rb +++ b/app/models/email_domain_block.rb @@ -17,6 +17,7 @@ class EmailDomainBlock < ApplicationRecord ) include DomainNormalizable + include Paginable belongs_to :parent, class_name: 'EmailDomainBlock', optional: true has_many :children, class_name: 'EmailDomainBlock', foreign_key: :parent_id, inverse_of: :parent, dependent: :destroy diff --git a/app/serializers/rest/admin/email_domain_block_serializer.rb b/app/serializers/rest/admin/email_domain_block_serializer.rb new file mode 100644 index 00000000000..a026ff680e7 --- /dev/null +++ b/app/serializers/rest/admin/email_domain_block_serializer.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class REST::Admin::EmailDomainBlockSerializer < ActiveModel::Serializer + attributes :id, :domain, :created_at, :history + + def id + object.id.to_s + end +end diff --git a/config/routes.rb b/config/routes.rb index 8694a643642..13a4a1618d0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -591,6 +591,7 @@ Rails.application.routes.draw do resources :domain_allows, only: [:index, :show, :create, :destroy] resources :domain_blocks, only: [:index, :show, :update, :create, :destroy] + resources :email_domain_blocks, only: [:index, :show, :create, :destroy] resources :ip_blocks, only: [:index, :show, :update, :create, :destroy] namespace :trends do From c99c106ef08d44591d6b7802ea6f9914ea2842bd Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 28 Aug 2022 03:45:07 +0200 Subject: [PATCH 253/646] Change following and followers API to be accessible without being logged in (#18964) --- app/controllers/api/v1/accounts/follower_accounts_controller.rb | 2 +- .../api/v1/accounts/following_accounts_controller.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/v1/accounts/follower_accounts_controller.rb b/app/controllers/api/v1/accounts/follower_accounts_controller.rb index a665863ebf4..b61de13b913 100644 --- a/app/controllers/api/v1/accounts/follower_accounts_controller.rb +++ b/app/controllers/api/v1/accounts/follower_accounts_controller.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class Api::V1::Accounts::FollowerAccountsController < Api::BaseController - before_action -> { doorkeeper_authorize! :read, :'read:accounts' } + before_action -> { authorize_if_got_token! :read, :'read:accounts' } before_action :set_account after_action :insert_pagination_headers diff --git a/app/controllers/api/v1/accounts/following_accounts_controller.rb b/app/controllers/api/v1/accounts/following_accounts_controller.rb index 7d885a212f2..37d3c2d7834 100644 --- a/app/controllers/api/v1/accounts/following_accounts_controller.rb +++ b/app/controllers/api/v1/accounts/following_accounts_controller.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class Api::V1::Accounts::FollowingAccountsController < Api::BaseController - before_action -> { doorkeeper_authorize! :read, :'read:accounts' } + before_action -> { authorize_if_got_token! :read, :'read:accounts' } before_action :set_account after_action :insert_pagination_headers From c57907737a35d05d4bb936acd662df6ce725456f Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 28 Aug 2022 03:45:19 +0200 Subject: [PATCH 254/646] Change search API to be accessible without being logged in (#18963) But with the resolve option turned off --- app/controllers/api/v2/search_controller.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/controllers/api/v2/search_controller.rb b/app/controllers/api/v2/search_controller.rb index a3056013338..e384ecbaf13 100644 --- a/app/controllers/api/v2/search_controller.rb +++ b/app/controllers/api/v2/search_controller.rb @@ -5,8 +5,7 @@ class Api::V2::SearchController < Api::BaseController RESULTS_LIMIT = 20 - before_action -> { doorkeeper_authorize! :read, :'read:search' } - before_action :require_user! + before_action -> { authorize_if_got_token! :read, :'read:search' } def index @search = Search.new(search_results) @@ -24,7 +23,7 @@ class Api::V2::SearchController < Api::BaseController params[:q], current_account, limit_param(RESULTS_LIMIT), - search_params.merge(resolve: truthy_param?(:resolve), exclude_unreviewed: truthy_param?(:exclude_unreviewed)) + search_params.merge(resolve: user_signed_in? ? truthy_param?(:resolve) : false, exclude_unreviewed: truthy_param?(:exclude_unreviewed)) ) end From 546672e292dc3218e996048464c4c52e5d00f766 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 28 Aug 2022 04:00:39 +0200 Subject: [PATCH 255/646] Change "Allow trends without prior review" setting to include statuses (#17977) * Change "Allow trends without prior review" setting to include posts * Fix i18n-tasks --- app/javascript/styles/mastodon/accounts.scss | 9 ++++++++- app/javascript/styles/mastodon/forms.scss | 3 ++- app/models/account.rb | 4 ++++ app/views/admin/settings/edit.html.haml | 2 +- config/i18n-tasks.yml | 2 +- config/initializers/simple_form.rb | 5 ++++- config/locales/en.yml | 4 ++-- config/locales/simple_form.en.yml | 1 + 8 files changed, 23 insertions(+), 7 deletions(-) diff --git a/app/javascript/styles/mastodon/accounts.scss b/app/javascript/styles/mastodon/accounts.scss index 54b65bfc8c2..c007eb4b57e 100644 --- a/app/javascript/styles/mastodon/accounts.scss +++ b/app/javascript/styles/mastodon/accounts.scss @@ -202,7 +202,8 @@ } .account-role, -.simple_form .recommended { +.simple_form .recommended, +.simple_form .not_recommended { display: inline-block; padding: 4px 6px; cursor: default; @@ -227,6 +228,12 @@ } } +.simple_form .not_recommended { + color: lighten($error-red, 12%); + background-color: rgba(lighten($error-red, 12%), 0.1); + border-color: rgba(lighten($error-red, 12%), 0.5); +} + .account__header__fields { max-width: 100vw; padding: 0; diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 99090385901..a6419821f4c 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -102,7 +102,8 @@ code { } } - .recommended { + .recommended, + .not_recommended { position: absolute; margin: 0 4px; margin-top: -2px; diff --git a/app/models/account.rb b/app/models/account.rb index d25afeb892c..1be7b4d12cb 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -258,6 +258,10 @@ class Account < ApplicationRecord update!(memorial: true) end + def trendable + boolean_with_default('trendable', Setting.trendable_by_default) + end + def sign? true end diff --git a/app/views/admin/settings/edit.html.haml b/app/views/admin/settings/edit.html.haml index d7896bbc0e7..64687b7a60f 100644 --- a/app/views/admin/settings/edit.html.haml +++ b/app/views/admin/settings/edit.html.haml @@ -81,7 +81,7 @@ = f.input :trends, as: :boolean, wrapper: :with_label, label: t('admin.settings.trends.title'), hint: t('admin.settings.trends.desc_html') .fields-group - = f.input :trendable_by_default, as: :boolean, wrapper: :with_label, label: t('admin.settings.trendable_by_default.title'), hint: t('admin.settings.trendable_by_default.desc_html') + = f.input :trendable_by_default, as: :boolean, wrapper: :with_label, label: t('admin.settings.trendable_by_default.title'), hint: t('admin.settings.trendable_by_default.desc_html'), recommended: :not_recommended .fields-group = f.input :noindex, as: :boolean, wrapper: :with_label, label: t('admin.settings.default_noindex.title'), hint: t('admin.settings.default_noindex.desc_html') diff --git a/config/i18n-tasks.yml b/config/i18n-tasks.yml index 42a7afb33ce..1bebae5e933 100644 --- a/config/i18n-tasks.yml +++ b/config/i18n-tasks.yml @@ -51,7 +51,7 @@ ignore_unused: - 'activerecord.errors.*' - '{devise,pagination,doorkeeper}.*' - '{date,datetime,time,number}.*' - - 'simple_form.{yes,no,recommended}' + - 'simple_form.{yes,no,recommended,not_recommended}' - 'simple_form.{placeholders,hints,labels}.*' - 'simple_form.{error_notification,required}.:' - 'errors.messages.*' diff --git a/config/initializers/simple_form.rb b/config/initializers/simple_form.rb index 3a2097d2fb9..92cffc5a2a4 100644 --- a/config/initializers/simple_form.rb +++ b/config/initializers/simple_form.rb @@ -11,7 +11,10 @@ end module RecommendedComponent def recommended(_wrapper_options = nil) return unless options[:recommended] - options[:label_text] = ->(raw_label_text, _required_label_text, _label_present) { safe_join([raw_label_text, ' ', content_tag(:span, I18n.t('simple_form.recommended'), class: 'recommended')]) } + + key = options[:recommended].is_a?(Symbol) ? options[:recommended] : :recommended + options[:label_text] = ->(raw_label_text, _required_label_text, _label_present) { safe_join([raw_label_text, ' ', content_tag(:span, I18n.t(key, scope: 'simple_form'), class: key)]) } + nil end end diff --git a/config/locales/en.yml b/config/locales/en.yml index 0b721c163d1..9f047f523a2 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -808,8 +808,8 @@ en: title: Allow unauthenticated access to public timeline title: Site settings trendable_by_default: - desc_html: Affects hashtags that have not been previously disallowed - title: Allow hashtags to trend without prior review + desc_html: Specific trending content can still be explicitly disallowed + title: Allow trends without prior review trends: desc_html: Publicly display previously reviewed content that is currently trending title: Trends diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 28f78d50003..ddc83e8965c 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -253,6 +253,7 @@ en: events: Enabled events url: Endpoint URL 'no': 'No' + not_recommended: Not recommended recommended: Recommended required: mark: "*" From 6c7bb926d86f74ad2de48164434262bcab643664 Mon Sep 17 00:00:00 2001 From: Claire Date: Sun, 28 Aug 2022 11:31:39 +0200 Subject: [PATCH 256/646] Revert "Remove preference to aggregate reblogs in home/list feeds (#18112)" This reverts commit af396fa35f589e1f759c7a3a0dad7932f1862309. --- app/lib/feed_manager.rb | 18 +++++++++--------- .../settings/preferences/other/show.html.haml | 3 +++ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index be1edb08cbf..c607223fc79 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -60,7 +60,7 @@ class FeedManager # @param [Boolean] update # @return [Boolean] def push_to_home(account, status, update: false) - return false unless add_to_feed(:home, account.id, status, aggregate_reblogs: true) + return false unless add_to_feed(:home, account.id, status, aggregate_reblogs: account.user&.aggregates_reblogs?) trim(:home, account.id) PushUpdateWorker.perform_async(account.id, status.id, "timeline:#{account.id}", { 'update' => update }) if push_update_required?("timeline:#{account.id}") @@ -73,7 +73,7 @@ class FeedManager # @param [Boolean] update # @return [Boolean] def unpush_from_home(account, status, update: false) - return false unless remove_from_feed(:home, account.id, status, aggregate_reblogs: true) + return false unless remove_from_feed(:home, account.id, status, aggregate_reblogs: account.user&.aggregates_reblogs?) redis.publish("timeline:#{account.id}", Oj.dump(event: :delete, payload: status.id.to_s)) unless update true @@ -85,7 +85,7 @@ class FeedManager # @param [Boolean] update # @return [Boolean] def push_to_list(list, status, update: false) - return false if filter_from_list?(status, list) || !add_to_feed(:list, list.id, status, aggregate_reblogs: true) + return false if filter_from_list?(status, list) || !add_to_feed(:list, list.id, status, aggregate_reblogs: list.account.user&.aggregates_reblogs?) trim(:list, list.id) PushUpdateWorker.perform_async(list.account_id, status.id, "timeline:list:#{list.id}", { 'update' => update }) if push_update_required?("timeline:list:#{list.id}") @@ -98,7 +98,7 @@ class FeedManager # @param [Boolean] update # @return [Boolean] def unpush_from_list(list, status, update: false) - return false unless remove_from_feed(:list, list.id, status, aggregate_reblogs: true) + return false unless remove_from_feed(:list, list.id, status, aggregate_reblogs: list.account.user&.aggregates_reblogs?) redis.publish("timeline:list:#{list.id}", Oj.dump(event: :delete, payload: status.id.to_s)) unless update true @@ -133,7 +133,7 @@ class FeedManager # @return [void] def merge_into_home(from_account, into_account) timeline_key = key(:home, into_account.id) - aggregate = true + aggregate = into_account.user&.aggregates_reblogs? query = from_account.statuses.where(visibility: [:public, :unlisted, :private]).includes(:preloadable_poll, :media_attachments, reblog: :account).limit(FeedManager::MAX_ITEMS / 4) if redis.zcard(timeline_key) >= FeedManager::MAX_ITEMS / 4 @@ -159,7 +159,7 @@ class FeedManager # @return [void] def merge_into_list(from_account, list) timeline_key = key(:list, list.id) - aggregate = true + aggregate = list.account.user&.aggregates_reblogs? query = from_account.statuses.where(visibility: [:public, :unlisted, :private]).includes(:preloadable_poll, :media_attachments, reblog: :account).limit(FeedManager::MAX_ITEMS / 4) if redis.zcard(timeline_key) >= FeedManager::MAX_ITEMS / 4 @@ -188,7 +188,7 @@ class FeedManager timeline_status_ids = redis.zrange(timeline_key, 0, -1) from_account.statuses.select('id, reblog_of_id').where(id: timeline_status_ids).reorder(nil).find_each do |status| - remove_from_feed(:home, into_account.id, status, aggregate_reblogs: true) + remove_from_feed(:home, into_account.id, status, aggregate_reblogs: into_account.user&.aggregates_reblogs?) end end @@ -201,7 +201,7 @@ class FeedManager timeline_status_ids = redis.zrange(timeline_key, 0, -1) from_account.statuses.select('id, reblog_of_id').where(id: timeline_status_ids).reorder(nil).find_each do |status| - remove_from_feed(:list, list.id, status, aggregate_reblogs: true) + remove_from_feed(:list, list.id, status, aggregate_reblogs: list.account.user&.aggregates_reblogs?) end end @@ -260,7 +260,7 @@ class FeedManager # @return [void] def populate_home(account) limit = FeedManager::MAX_ITEMS / 2 - aggregate = true + aggregate = account.user&.aggregates_reblogs? timeline_key = key(:home, account.id) account.statuses.limit(limit).each do |status| diff --git a/app/views/settings/preferences/other/show.html.haml b/app/views/settings/preferences/other/show.html.haml index 21859875858..cf604d04321 100644 --- a/app/views/settings/preferences/other/show.html.haml +++ b/app/views/settings/preferences/other/show.html.haml @@ -10,6 +10,9 @@ .fields-group = f.input :setting_noindex, as: :boolean, wrapper: :with_label + .fields-group + = f.input :setting_aggregate_reblogs, as: :boolean, wrapper: :with_label, recommended: true + - unless Setting.hide_followers_count .fields-group = f.input :setting_hide_followers_count, as: :boolean, wrapper: :with_label From 54ae7a221e862990550850500d70997c70187b70 Mon Sep 17 00:00:00 2001 From: Yamagishi Kazutoshi Date: Fri, 26 Aug 2022 03:10:01 +0900 Subject: [PATCH 257/646] [Glitch] Replace to `workbox-webpack-plugin` from `offline-plugin` Port 81e1cc5fece9a431c28ca648c2dd4b1b5f643f13 to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/util/main.js | 26 ++++++++++++++------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/app/javascript/flavours/glitch/util/main.js b/app/javascript/flavours/glitch/util/main.js index 6577b70c222..9e76774b605 100644 --- a/app/javascript/flavours/glitch/util/main.js +++ b/app/javascript/flavours/glitch/util/main.js @@ -1,9 +1,9 @@ -import * as registerPushNotifications from 'flavours/glitch/actions/push_notifications'; -import { setupBrowserNotifications } from 'flavours/glitch/actions/notifications'; -import { default as Mastodon, store } from 'flavours/glitch/containers/mastodon'; import React from 'react'; import ReactDOM from 'react-dom'; -import ready from './ready'; +import * as registerPushNotifications from 'flavours/glitch/actions/push_notifications'; +import { setupBrowserNotifications } from 'flavours/glitch/actions/notifications'; +import Mastodon, { store } from 'flavours/glitch/containers/mastodon'; +import ready from 'flavours/glitch/util/ready'; const perf = require('./performance'); @@ -24,10 +24,20 @@ function main() { ReactDOM.render(, mountNode); store.dispatch(setupBrowserNotifications()); - if (process.env.NODE_ENV === 'production') { - // avoid offline in dev mode because it's harder to debug - require('offline-plugin/runtime').install(); - store.dispatch(registerPushNotifications.register()); + + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + import('workbox-window') + .then(({ Workbox }) => { + const wb = new Workbox('/sw.js'); + + return wb.register(); + }) + .then(() => { + store.dispatch(registerPushNotifications.register()); + }) + .catch(err => { + console.error(err); + }); } perf.stop('main()'); }); From 4aa3b9bd016ef5d9ce9bb63f260b7f6e35b649ff Mon Sep 17 00:00:00 2001 From: luzpaz Date: Sun, 28 Aug 2022 11:44:34 -0400 Subject: [PATCH 258/646] Fix typos (#18604) * Fix typos Found via `codespell -q 3 -S ./CHANGELOG.md,./AUTHORS.md,./config/locales,./app/javascript/mastodon/locales -L ba,keypair,medias,pixelx,ro` * Follow-up typo fix --- .github/workflows/linter.yml | 2 +- lib/mastodon/search_cli.rb | 2 +- lib/tasks/mastodon.rake | 2 +- spec/lib/request_spec.rb | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index f77a9720e08..cd8cb12c457 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -55,7 +55,7 @@ jobs: with: node-version: 16.x cache: yarn - - name: Intall dependencies + - name: Install dependencies run: yarn install --frozen-lockfile - name: Set-up RuboCop Problem Mathcher uses: r7kamura/rubocop-problem-matchers-action@v1 diff --git a/lib/mastodon/search_cli.rb b/lib/mastodon/search_cli.rb index b579ebc1434..b206854ab32 100644 --- a/lib/mastodon/search_cli.rb +++ b/lib/mastodon/search_cli.rb @@ -30,7 +30,7 @@ module Mastodon changed since the last run. Index upgrades erase index data. Even if creating or upgrading indices is not necessary, data from the - database will be imported into the indices, unless overriden with --no-import. + database will be imported into the indices, unless overridden with --no-import. LONG_DESC def deploy if options[:concurrency] < 1 diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake index d652468b37f..0ccfc9f29f2 100644 --- a/lib/tasks/mastodon.rake +++ b/lib/tasks/mastodon.rake @@ -11,7 +11,7 @@ namespace :mastodon do # When the application code gets loaded, it runs `lib/mastodon/redis_configuration.rb`. # This happens before application environment configuration and sets REDIS_URL etc. # These variables are then used even when REDIS_HOST etc. are changed, so clear them - # out so they don't interfer with our new configuration. + # out so they don't interfere with our new configuration. ENV.delete('REDIS_URL') ENV.delete('CACHE_REDIS_URL') ENV.delete('SIDEKIQ_REDIS_URL') diff --git a/spec/lib/request_spec.rb b/spec/lib/request_spec.rb index 2d300f18d6c..5eccf320143 100644 --- a/spec/lib/request_spec.rb +++ b/spec/lib/request_spec.rb @@ -63,7 +63,7 @@ describe Request do expect(a_request(:get, 'http://example.com').with(headers: subject.headers)).to have_been_made end - it 'closes underlaying connection' do + it 'closes underlying connection' do expect_any_instance_of(HTTP::Client).to receive(:close) expect { |block| subject.perform &block }.to yield_control end From 7a02c1d9bab8ba004eea54a907782a949ecb3493 Mon Sep 17 00:00:00 2001 From: Claire Date: Sun, 28 Aug 2022 22:21:55 +0200 Subject: [PATCH 259/646] Add regexp filter field to public timeline column settings (#1834) * Add regexp filter field to public timeline column settings This has accidentally been removed while porting an upstream change years ago. * Remove dead code * Fix regexp filter not working for local and public TLs when using non-default settings --- .../components/column_settings.js | 17 ++++++++++++++--- .../ui/containers/status_list_container.js | 18 ++++++++++++++---- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/app/javascript/flavours/glitch/features/public_timeline/components/column_settings.js b/app/javascript/flavours/glitch/features/public_timeline/components/column_settings.js index e926810657d..cfe821cfc19 100644 --- a/app/javascript/flavours/glitch/features/public_timeline/components/column_settings.js +++ b/app/javascript/flavours/glitch/features/public_timeline/components/column_settings.js @@ -1,8 +1,13 @@ import React from 'react'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; -import { injectIntl, FormattedMessage } from 'react-intl'; -import SettingToggle from '../../notifications/components/setting_toggle'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; +import SettingText from 'flavours/glitch/components/setting_text'; +import SettingToggle from 'flavours/glitch/features/notifications/components/setting_toggle'; + +const messages = defineMessages({ + filter_regex: { id: 'home.column_settings.filter_regex', defaultMessage: 'Filter out by regular expressions' }, +}); export default @injectIntl class ColumnSettings extends React.PureComponent { @@ -15,7 +20,7 @@ class ColumnSettings extends React.PureComponent { }; render () { - const { settings, onChange } = this.props; + const { settings, onChange, intl } = this.props; return (
    @@ -24,6 +29,12 @@ class ColumnSettings extends React.PureComponent { } /> {!settings.getIn(['other', 'onlyRemote']) && } />}
    + + + +
    + +
    ); } diff --git a/app/javascript/flavours/glitch/features/ui/containers/status_list_container.js b/app/javascript/flavours/glitch/features/ui/containers/status_list_container.js index bd2d2eb4e55..0828e3cb034 100644 --- a/app/javascript/flavours/glitch/features/ui/containers/status_list_container.js +++ b/app/javascript/flavours/glitch/features/ui/containers/status_list_container.js @@ -6,8 +6,20 @@ import { createSelector } from 'reselect'; import { debounce } from 'lodash'; import { me } from 'flavours/glitch/util/initial_state'; +const normalizeTimelineId = timelineId => { + if (timelineId.startsWith('public:')) { + return 'public'; + } + + if (timelineId.startsWith('community:')) { + return 'community'; + } + + return timelineId; +}; + const getRegex = createSelector([ - (state, { type }) => state.getIn(['settings', type, 'regex', 'body']), + (state, { type }) => state.getIn(['settings', normalizeTimelineId(type), 'regex', 'body']), ], (rawRegex) => { let regex = null; @@ -20,13 +32,11 @@ const getRegex = createSelector([ }); const makeGetStatusIds = (pending = false) => createSelector([ - (state, { type }) => state.getIn(['settings', type], ImmutableMap()), + (state, { type }) => state.getIn(['settings', normalizeTimelineId(type)], ImmutableMap()), (state, { type }) => state.getIn(['timelines', type, pending ? 'pendingItems' : 'items'], ImmutableList()), (state) => state.get('statuses'), getRegex, ], (columnSettings, statusIds, statuses, regex) => { - const rawRegex = columnSettings.getIn(['regex', 'body'], '').trim(); - return statusIds.filter(id => { if (id === null) return true; From bbb45568adb4ac3b3bc6cb4c81da70b0fe605c2e Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 29 Aug 2022 08:23:05 +0200 Subject: [PATCH 260/646] Fix WebUI error in development mode (#1835) Caused by using JSX features without importing React Signed-off-by: Claire --- app/javascript/flavours/glitch/util/icons.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/javascript/flavours/glitch/util/icons.js b/app/javascript/flavours/glitch/util/icons.js index be566032e06..c3e362e39ad 100644 --- a/app/javascript/flavours/glitch/util/icons.js +++ b/app/javascript/flavours/glitch/util/icons.js @@ -1,3 +1,5 @@ +import React from 'react'; + // Copied from emoji-mart for consistency with emoji picker and since // they don't export the icons in the package export const loupeIcon = ( From 90917b305a0389f7c851059331852006a4233094 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 29 Aug 2022 10:02:40 +0200 Subject: [PATCH 261/646] Fix WebUI error in development mode (#19078) Caused by using JSX features without importing React --- app/javascript/mastodon/utils/icons.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/javascript/mastodon/utils/icons.js b/app/javascript/mastodon/utils/icons.js index be566032e06..c3e362e39ad 100644 --- a/app/javascript/mastodon/utils/icons.js +++ b/app/javascript/mastodon/utils/icons.js @@ -1,3 +1,5 @@ +import React from 'react'; + // Copied from emoji-mart for consistency with emoji picker and since // they don't export the icons in the package export const loupeIcon = ( From 0495302f1ca811e5ed48ed49b2d291fc119e9dc6 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 30 Aug 2022 10:57:27 +0200 Subject: [PATCH 262/646] Fix local settings navigation (#1836) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The “filters” page was removed, but not from the navigation, which would offset everything. --- .../local_settings/navigation/index.js | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/app/javascript/flavours/glitch/features/local_settings/navigation/index.js b/app/javascript/flavours/glitch/features/local_settings/navigation/index.js index ab3a554bf36..d085a606c37 100644 --- a/app/javascript/flavours/glitch/features/local_settings/navigation/index.js +++ b/app/javascript/flavours/glitch/features/local_settings/navigation/index.js @@ -61,34 +61,27 @@ class LocalSettingsNavigation extends React.PureComponent { active={index === 3} index={3} onNavigate={onNavigate} - icon='filter' - title={intl.formatMessage(messages.filters)} + icon='angle-double-up' + title={intl.formatMessage(messages.collapsed)} /> - Date: Wed, 31 Aug 2022 11:55:27 +0200 Subject: [PATCH 263/646] Fix error when accessing /filters/:id/statuses on glitch-soc (#1837) I failed to account for glitch-soc's theming system when merging from upstream. --- app/controllers/filters/statuses_controller.rb | 5 +++++ app/views/filters/statuses/index.html.haml | 3 --- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/controllers/filters/statuses_controller.rb b/app/controllers/filters/statuses_controller.rb index cc493c22c64..4f63de7b698 100644 --- a/app/controllers/filters/statuses_controller.rb +++ b/app/controllers/filters/statuses_controller.rb @@ -6,6 +6,7 @@ class Filters::StatusesController < ApplicationController before_action :authenticate_user! before_action :set_filter before_action :set_status_filters + before_action :set_pack before_action :set_body_classes PER_PAGE = 20 @@ -25,6 +26,10 @@ class Filters::StatusesController < ApplicationController private + def set_pack + use_pack 'admin' + end + def set_filter @filter = current_account.custom_filters.find(params[:filter_id]) end diff --git a/app/views/filters/statuses/index.html.haml b/app/views/filters/statuses/index.html.haml index 886de58fa06..eaa39e170ff 100644 --- a/app/views/filters/statuses/index.html.haml +++ b/app/views/filters/statuses/index.html.haml @@ -1,6 +1,3 @@ -- content_for :header_tags do - = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' - - content_for :page_title do = t('filters.statuses.index.title') \- From 156c6ea36ceb080ca4be007bcfdda52e907937aa Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 31 Aug 2022 16:23:10 +0200 Subject: [PATCH 264/646] =?UTF-8?q?Fix=20position=20of=20=E2=80=9Cexpand?= =?UTF-8?q?=E2=80=9D=20icon=20in=20media=20modal=20on=20glitch-soc=20(#183?= =?UTF-8?q?8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flavours/glitch/components/icon_button.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/javascript/flavours/glitch/components/icon_button.js b/app/javascript/flavours/glitch/components/icon_button.js index 9ff745355fc..c0664ec890f 100644 --- a/app/javascript/flavours/glitch/components/icon_button.js +++ b/app/javascript/flavours/glitch/components/icon_button.js @@ -84,15 +84,21 @@ export default class IconButton extends React.PureComponent { } render () { + // Hack required for some icons which have an overriden size + let containerSize = '1.28571429em'; + if (this.props.style?.fontSize) { + containerSize = `${this.props.size * 1.28571429}px`; + } + let style = { fontSize: `${this.props.size}px`, - height: '1.28571429em', + height: containerSize, lineHeight: `${this.props.size}px`, ...this.props.style, ...(this.props.active ? this.props.activeStyle : {}), }; if (!this.props.label) { - style.width = '1.28571429em'; + style.width = containerSize; } else { style.textAlign = 'left'; } From 06b64f2e19fc3749fe7b1bc24632821ad6b4961c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Sep 2022 01:12:53 +0900 Subject: [PATCH 265/646] Bump workbox-webpack-plugin from 6.5.3 to 6.5.4 (#19093) Bumps [workbox-webpack-plugin](https://github.com/googlechrome/workbox) from 6.5.3 to 6.5.4. - [Release notes](https://github.com/googlechrome/workbox/releases) - [Commits](https://github.com/googlechrome/workbox/compare/v6.5.3...v6.5.4) --- updated-dependencies: - dependency-name: workbox-webpack-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 234 +++++++++++++++++++++++++++++++-------------------- 2 files changed, 145 insertions(+), 91 deletions(-) diff --git a/package.json b/package.json index 6973afeaab2..d24051c99f1 100644 --- a/package.json +++ b/package.json @@ -139,7 +139,7 @@ "workbox-precaching": "^6.5.3", "workbox-routing": "^6.5.3", "workbox-strategies": "^6.5.3", - "workbox-webpack-plugin": "^6.5.3", + "workbox-webpack-plugin": "^6.5.4", "workbox-window": "^6.5.3", "ws": "^8.8.1" }, diff --git a/yarn.lock b/yarn.lock index be3db7a96c9..90e56811dcd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -37,6 +37,11 @@ dependencies: "@babel/highlight" "^7.18.6" +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.18.6": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.13.tgz#6aff7b350a1e8c3e40b029e46cbe78e24a913483" + integrity sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw== + "@babel/compat-data@^7.17.10": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.6.tgz#8b37d24e88e8e21c499d4328db80577d8882fa53" @@ -107,7 +112,7 @@ "@jridgewell/gen-mapping" "^0.3.0" jsesc "^2.5.1" -"@babel/generator@^7.18.13": +"@babel/generator@^7.18.13", "@babel/generator@^7.18.6": version "7.18.13" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.13.tgz#59550cbb9ae79b8def15587bdfbaa388c4abf212" integrity sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ== @@ -149,7 +154,7 @@ browserslist "^4.20.2" semver "^6.3.0" -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9": +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.6", "@babel/helper-compilation-targets@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== @@ -180,7 +185,7 @@ "@babel/helper-annotate-as-pure" "^7.18.6" regexpu-core "^5.1.0" -"@babel/helper-define-polyfill-provider@^0.3.2": +"@babel/helper-define-polyfill-provider@^0.3.1", "@babel/helper-define-polyfill-provider@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz#bd10d0aca18e8ce012755395b05a79f45eca5073" integrity sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg== @@ -331,7 +336,7 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": +"@babel/helper-skip-transparent-expression-wrappers@^7.18.6", "@babel/helper-skip-transparent-expression-wrappers@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818" integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== @@ -426,7 +431,7 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.6.tgz#845338edecad65ebffef058d3be851f1d28a63bc" integrity sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw== -"@babel/parser@^7.18.10", "@babel/parser@^7.18.13": +"@babel/parser@^7.18.10", "@babel/parser@^7.18.13", "@babel/parser@^7.18.6": version "7.18.13" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.13.tgz#5b2dd21cae4a2c5145f1fbd8ca103f9313d3b7e4" integrity sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg== @@ -607,7 +612,7 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.18.9": +"@babel/plugin-proposal-optional-chaining@^7.18.6", "@babel/plugin-proposal-optional-chaining@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== @@ -1044,7 +1049,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-parameters@^7.18.8": +"@babel/plugin-transform-parameters@^7.18.6", "@babel/plugin-transform-parameters@^7.18.8": version "7.18.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a" integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== @@ -1865,7 +1870,7 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.2": +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== @@ -2795,7 +2800,7 @@ array-flatten@^2.1.0: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.1.4, array-includes@^3.1.5: +array-includes@^3.1.3, array-includes@^3.1.4, array-includes@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== @@ -6242,6 +6247,11 @@ idb@^6.1.4: resolved "https://registry.yarnpkg.com/idb/-/idb-6.1.5.tgz#dbc53e7adf1ac7c59f9b2bf56e00b4ea4fce8c7b" integrity sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw== +idb@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/idb/-/idb-7.0.2.tgz#7a067e20dd16539938e456814b7d714ba8db3892" + integrity sha512-jjKrT1EnyZewQ/gCBb/eyiYrhGzws2FeY92Yx8qT9S9GeQAmo4JFVIiWRIfKW/6Ob9A+UDAOW9j9jn58fy2HIg== + ieee754@^1.1.4: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" @@ -12265,25 +12275,25 @@ word-wrap@^1.2.3, word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -workbox-background-sync@6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.5.3.tgz#7c66c1836aeca6f3762dc48d17a1852a33b3168c" - integrity sha512-0DD/V05FAcek6tWv9XYj2w5T/plxhDSpclIcAGjA/b7t/6PdaRkQ7ZgtAX6Q/L7kV7wZ8uYRJUoH11VjNipMZw== +workbox-background-sync@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz#3141afba3cc8aa2ae14c24d0f6811374ba8ff6a9" + integrity sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g== dependencies: - idb "^6.1.4" - workbox-core "6.5.3" + idb "^7.0.1" + workbox-core "6.5.4" -workbox-broadcast-update@6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.5.3.tgz#fc2ad79cf507e22950cda9baf1e9a0ccc43f31bc" - integrity sha512-4AwCIA5DiDrYhlN+Miv/fp5T3/whNmSL+KqhTwRBTZIL6pvTgE4lVuRzAt1JltmqyMcQ3SEfCdfxczuI4kwFQg== +workbox-broadcast-update@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz#8441cff5417cd41f384ba7633ca960a7ffe40f66" + integrity sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw== dependencies: - workbox-core "6.5.3" + workbox-core "6.5.4" -workbox-build@6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.5.3.tgz#38e3f286d63d2745bff4d1478bb3a6ab5c8b1170" - integrity sha512-8JNHHS7u13nhwIYCDea9MNXBNPHXCs5KDZPKI/ZNTr3f4sMGoD7hgFGecbyjX1gw4z6e9bMpMsOEJNyH5htA/w== +workbox-build@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.5.4.tgz#7d06d31eb28a878817e1c991c05c5b93409f0389" + integrity sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA== dependencies: "@apideck/better-ajv-errors" "^0.3.1" "@babel/core" "^7.11.1" @@ -12307,35 +12317,48 @@ workbox-build@6.5.3: strip-comments "^2.0.1" tempy "^0.6.0" upath "^1.2.0" - workbox-background-sync "6.5.3" - workbox-broadcast-update "6.5.3" - workbox-cacheable-response "6.5.3" - workbox-core "6.5.3" - workbox-expiration "6.5.3" - workbox-google-analytics "6.5.3" - workbox-navigation-preload "6.5.3" - workbox-precaching "6.5.3" - workbox-range-requests "6.5.3" - workbox-recipes "6.5.3" - workbox-routing "6.5.3" - workbox-strategies "6.5.3" - workbox-streams "6.5.3" - workbox-sw "6.5.3" - workbox-window "6.5.3" + workbox-background-sync "6.5.4" + workbox-broadcast-update "6.5.4" + workbox-cacheable-response "6.5.4" + workbox-core "6.5.4" + workbox-expiration "6.5.4" + workbox-google-analytics "6.5.4" + workbox-navigation-preload "6.5.4" + workbox-precaching "6.5.4" + workbox-range-requests "6.5.4" + workbox-recipes "6.5.4" + workbox-routing "6.5.4" + workbox-strategies "6.5.4" + workbox-streams "6.5.4" + workbox-sw "6.5.4" + workbox-window "6.5.4" -workbox-cacheable-response@6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.5.3.tgz#b1f8c2bc599a7be8f7e3c262535629c558738e47" - integrity sha512-6JE/Zm05hNasHzzAGKDkqqgYtZZL2H06ic2GxuRLStA4S/rHUfm2mnLFFXuHAaGR1XuuYyVCEey1M6H3PdZ7SQ== +workbox-cacheable-response@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz#a5c6ec0c6e2b6f037379198d4ef07d098f7cf137" + integrity sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug== dependencies: - workbox-core "6.5.3" + workbox-core "6.5.4" workbox-core@6.5.3: version "6.5.3" resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.3.tgz#bca038a9ef0d7a634a6db2a60f45313ed22ac249" integrity sha512-Bb9ey5n/M9x+l3fBTlLpHt9ASTzgSGj6vxni7pY72ilB/Pb3XtN+cZ9yueboVhD5+9cNQrC9n/E1fSrqWsUz7Q== -workbox-expiration@6.5.3, workbox-expiration@^6.5.3: +workbox-core@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.4.tgz#df48bf44cd58bb1d1726c49b883fb1dffa24c9ba" + integrity sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q== + +workbox-expiration@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.5.4.tgz#501056f81e87e1d296c76570bb483ce5e29b4539" + integrity sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ== + dependencies: + idb "^7.0.1" + workbox-core "6.5.4" + +workbox-expiration@^6.5.3: version "6.5.3" resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.5.3.tgz#efc0811f371a2ede1052b9de1c4f072b71d50503" integrity sha512-jzYopYR1zD04ZMdlbn/R2Ik6ixiXbi15c9iX5H8CTi6RPDz7uhvMLZPKEndZTpfgmUk8mdmT9Vx/AhbuCl5Sqw== @@ -12343,24 +12366,33 @@ workbox-expiration@6.5.3, workbox-expiration@^6.5.3: idb "^6.1.4" workbox-core "6.5.3" -workbox-google-analytics@6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.5.3.tgz#cc8c3a61f449131660a4ed2f5362d9a3599b18fe" - integrity sha512-3GLCHotz5umoRSb4aNQeTbILETcrTVEozSfLhHSBaegHs1PnqCmN0zbIy2TjTpph2AGXiNwDrWGF0AN+UgDNTw== +workbox-google-analytics@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz#c74327f80dfa4c1954cbba93cd7ea640fe7ece7d" + integrity sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg== dependencies: - workbox-background-sync "6.5.3" - workbox-core "6.5.3" - workbox-routing "6.5.3" - workbox-strategies "6.5.3" + workbox-background-sync "6.5.4" + workbox-core "6.5.4" + workbox-routing "6.5.4" + workbox-strategies "6.5.4" -workbox-navigation-preload@6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.5.3.tgz#81b74f598b11aa07e2cf1c21af7a826a4f0f70b3" - integrity sha512-bK1gDFTc5iu6lH3UQ07QVo+0ovErhRNGvJJO/1ngknT0UQ702nmOUhoN9qE5mhuQSrnK+cqu7O7xeaJ+Rd9Tmg== +workbox-navigation-preload@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz#ede56dd5f6fc9e860a7e45b2c1a8f87c1c793212" + integrity sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng== dependencies: - workbox-core "6.5.3" + workbox-core "6.5.4" -workbox-precaching@6.5.3, workbox-precaching@^6.5.3: +workbox-precaching@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.4.tgz#740e3561df92c6726ab5f7471e6aac89582cab72" + integrity sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg== + dependencies: + workbox-core "6.5.4" + workbox-routing "6.5.4" + workbox-strategies "6.5.4" + +workbox-precaching@^6.5.3: version "6.5.3" resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.3.tgz#c870312b2ef901d790ab9e48da084e776c62af47" integrity sha512-sjNfgNLSsRX5zcc63H/ar/hCf+T19fRtTqvWh795gdpghWb5xsfEkecXEvZ8biEi1QD7X/ljtHphdaPvXDygMQ== @@ -12369,24 +12401,24 @@ workbox-precaching@6.5.3, workbox-precaching@^6.5.3: workbox-routing "6.5.3" workbox-strategies "6.5.3" -workbox-range-requests@6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.5.3.tgz#e624ac82ff266a5e4f236d055797def07949d941" - integrity sha512-pGCP80Bpn/0Q0MQsfETSfmtXsQcu3M2QCJwSFuJ6cDp8s2XmbUXkzbuQhCUzKR86ZH2Vex/VUjb2UaZBGamijA== +workbox-range-requests@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz#86b3d482e090433dab38d36ae031b2bb0bd74399" + integrity sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg== dependencies: - workbox-core "6.5.3" + workbox-core "6.5.4" -workbox-recipes@6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.5.3.tgz#15beac9d8ae7a3a1c100218094a824b4dd3fd59a" - integrity sha512-IcgiKYmbGiDvvf3PMSEtmwqxwfQ5zwI7OZPio3GWu4PfehA8jI8JHI3KZj+PCfRiUPZhjQHJ3v1HbNs+SiSkig== +workbox-recipes@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.5.4.tgz#cca809ee63b98b158b2702dcfb741b5cc3e24acb" + integrity sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA== dependencies: - workbox-cacheable-response "6.5.3" - workbox-core "6.5.3" - workbox-expiration "6.5.3" - workbox-precaching "6.5.3" - workbox-routing "6.5.3" - workbox-strategies "6.5.3" + workbox-cacheable-response "6.5.4" + workbox-core "6.5.4" + workbox-expiration "6.5.4" + workbox-precaching "6.5.4" + workbox-routing "6.5.4" + workbox-strategies "6.5.4" workbox-routing@6.5.3, workbox-routing@^6.5.3: version "6.5.3" @@ -12395,6 +12427,13 @@ workbox-routing@6.5.3, workbox-routing@^6.5.3: dependencies: workbox-core "6.5.3" +workbox-routing@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.4.tgz#6a7fbbd23f4ac801038d9a0298bc907ee26fe3da" + integrity sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg== + dependencies: + workbox-core "6.5.4" + workbox-strategies@6.5.3, workbox-strategies@^6.5.3: version "6.5.3" resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.3.tgz#4bea9a48fee16cf43766e0d8138296773c8a9783" @@ -12402,31 +12441,46 @@ workbox-strategies@6.5.3, workbox-strategies@^6.5.3: dependencies: workbox-core "6.5.3" -workbox-streams@6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.5.3.tgz#b6860290031caa7d0e46ad7142315c94359c780b" - integrity sha512-vN4Qi8o+b7zj1FDVNZ+PlmAcy1sBoV7SC956uhqYvZ9Sg1fViSbOpydULOssVJ4tOyKRifH/eoi6h99d+sJ33w== +workbox-strategies@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.4.tgz#4edda035b3c010fc7f6152918370699334cd204d" + integrity sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw== dependencies: - workbox-core "6.5.3" - workbox-routing "6.5.3" + workbox-core "6.5.4" -workbox-sw@6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.5.3.tgz#cd2f0c086f4496acd25774ed02c48504189bebdd" - integrity sha512-BQBzm092w+NqdIEF2yhl32dERt9j9MDGUTa2Eaa+o3YKL4Qqw55W9yQC6f44FdAHdAJrJvp0t+HVrfh8AiGj8A== +workbox-streams@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.5.4.tgz#1cb3c168a6101df7b5269d0353c19e36668d7d69" + integrity sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg== + dependencies: + workbox-core "6.5.4" + workbox-routing "6.5.4" -workbox-webpack-plugin@^6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.3.tgz#c37bb323be4952311565c07db51054fe59c87d73" - integrity sha512-Es8Xr02Gi6Kc3zaUwR691ZLy61hz3vhhs5GztcklQ7kl5k2qAusPh0s6LF3wEtlpfs9ZDErnmy5SErwoll7jBA== +workbox-sw@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.5.4.tgz#d93e9c67924dd153a61367a4656ff4d2ae2ed736" + integrity sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA== + +workbox-webpack-plugin@^6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.4.tgz#baf2d3f4b8f435f3469887cf4fba2b7fac3d0fd7" + integrity sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg== dependencies: fast-json-stable-stringify "^2.1.0" pretty-bytes "^5.4.1" upath "^1.2.0" webpack-sources "^1.4.3" - workbox-build "6.5.3" + workbox-build "6.5.4" -workbox-window@6.5.3, workbox-window@^6.5.3: +workbox-window@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.5.4.tgz#d991bc0a94dff3c2dbb6b84558cff155ca878e91" + integrity sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug== + dependencies: + "@types/trusted-types" "^2.0.2" + workbox-core "6.5.4" + +workbox-window@^6.5.3: version "6.5.3" resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.5.3.tgz#4ade70056cb73477ef1cd8fea7cfd0ecbd825c7f" integrity sha512-GnJbx1kcKXDtoJBVZs/P7ddP0Yt52NNy4nocjBpYPiRhMqTpJCNrSL+fGHZ/i/oP6p/vhE8II0sA6AZGKGnssw== From 59b53c6869caeff1571f04fe277f6db73f2c73b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Sep 2022 01:14:28 +0900 Subject: [PATCH 266/646] Bump eslint-plugin-react from 7.30.1 to 7.31.1 (#19082) Bumps [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) from 7.30.1 to 7.31.1. - [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases) - [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/CHANGELOG.md) - [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.30.1...v7.31.1) --- updated-dependencies: - dependency-name: eslint-plugin-react dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 18 +++++------------- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index d24051c99f1..1f28fd57712 100644 --- a/package.json +++ b/package.json @@ -152,7 +152,7 @@ "eslint-plugin-import": "~2.26.0", "eslint-plugin-jsx-a11y": "~6.6.1", "eslint-plugin-promise": "~6.0.0", - "eslint-plugin-react": "~7.30.1", + "eslint-plugin-react": "~7.31.1", "jest": "^28.1.3", "jest-environment-jsdom": "^28.1.3", "postcss-scss": "^4.0.4", diff --git a/yarn.lock b/yarn.lock index 90e56811dcd..0ac565e75e6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5049,10 +5049,10 @@ eslint-plugin-promise@~6.0.0: resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.0.0.tgz#017652c07c9816413a41e11c30adc42c3d55ff18" integrity sha512-7GPezalm5Bfi/E22PnQxDWH2iW9GTvAlUNTztemeHb6c1BniSyoeTrM87JkC0wYdi6aQrZX9p2qEiAno8aTcbw== -eslint-plugin-react@~7.30.1: - version "7.30.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz#2be4ab23ce09b5949c6631413ba64b2810fd3e22" - integrity sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg== +eslint-plugin-react@~7.31.1: + version "7.31.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.1.tgz#d29793ed27743f3ed8a473c347b1bf5a0a8fb9af" + integrity sha512-j4/2xWqt/R7AZzG8CakGHA6Xa/u7iR8Q3xCxY+AUghdT92bnIDOBEefV456OeH0QvBcroVc0eyvrrLSyQGYIfg== dependencies: array-includes "^3.1.5" array.prototype.flatmap "^1.3.0" @@ -7519,15 +7519,7 @@ jsonpointer@^5.0.0: resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.0.tgz#f802669a524ec4805fa7389eadbc9921d5dc8072" integrity sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg== -"jsx-ast-utils@^2.4.1 || ^3.0.0": - version "3.2.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b" - integrity sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA== - dependencies: - array-includes "^3.1.3" - object.assign "^4.1.2" - -jsx-ast-utils@^3.3.2: +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz#afe5efe4332cd3515c065072bd4d6b0aa22152bd" integrity sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q== From dcd81f05bcf5bc6a395a09ef79cff8380c397297 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Sep 2022 01:15:32 +0900 Subject: [PATCH 267/646] Bump sidekiq from 6.5.5 to 6.5.6 (#19081) Bumps [sidekiq](https://github.com/mperham/sidekiq) from 6.5.5 to 6.5.6. - [Release notes](https://github.com/mperham/sidekiq/releases) - [Changelog](https://github.com/mperham/sidekiq/blob/main/Changes.md) - [Commits](https://github.com/mperham/sidekiq/compare/v6.5.5...v6.5.6) --- updated-dependencies: - dependency-name: sidekiq dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 13357f600f3..e4a19ec30de 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -610,10 +610,10 @@ GEM activerecord (>= 4.0.0) railties (>= 4.0.0) semantic_range (3.0.0) - sidekiq (6.5.5) - connection_pool (>= 2.2.2) + sidekiq (6.5.6) + connection_pool (>= 2.2.5) rack (~> 2.0) - redis (>= 4.5.0) + redis (>= 4.5.0, < 5) sidekiq-bulk (0.2.0) sidekiq sidekiq-scheduler (4.0.2) From 5073a755d7f1f9060ea6e4cf39846df89d771a65 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Sep 2022 01:16:06 +0900 Subject: [PATCH 268/646] Bump rails from 6.1.6 to 6.1.6.1 (#18831) Bumps [rails](https://github.com/rails/rails) from 6.1.6 to 6.1.6.1. - [Release notes](https://github.com/rails/rails/releases) - [Commits](https://github.com/rails/rails/compare/v6.1.6...v6.1.6.1) --- updated-dependencies: - dependency-name: rails dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 110 +++++++++++++++++++++++++-------------------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index e4a19ec30de..6cb9c7ba22e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,40 +10,40 @@ GIT GEM remote: https://rubygems.org/ specs: - actioncable (6.1.6) - actionpack (= 6.1.6) - activesupport (= 6.1.6) + actioncable (6.1.6.1) + actionpack (= 6.1.6.1) + activesupport (= 6.1.6.1) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (6.1.6) - actionpack (= 6.1.6) - activejob (= 6.1.6) - activerecord (= 6.1.6) - activestorage (= 6.1.6) - activesupport (= 6.1.6) + actionmailbox (6.1.6.1) + actionpack (= 6.1.6.1) + activejob (= 6.1.6.1) + activerecord (= 6.1.6.1) + activestorage (= 6.1.6.1) + activesupport (= 6.1.6.1) mail (>= 2.7.1) - actionmailer (6.1.6) - actionpack (= 6.1.6) - actionview (= 6.1.6) - activejob (= 6.1.6) - activesupport (= 6.1.6) + actionmailer (6.1.6.1) + actionpack (= 6.1.6.1) + actionview (= 6.1.6.1) + activejob (= 6.1.6.1) + activesupport (= 6.1.6.1) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (6.1.6) - actionview (= 6.1.6) - activesupport (= 6.1.6) + actionpack (6.1.6.1) + actionview (= 6.1.6.1) + activesupport (= 6.1.6.1) rack (~> 2.0, >= 2.0.9) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (6.1.6) - actionpack (= 6.1.6) - activerecord (= 6.1.6) - activestorage (= 6.1.6) - activesupport (= 6.1.6) + actiontext (6.1.6.1) + actionpack (= 6.1.6.1) + activerecord (= 6.1.6.1) + activestorage (= 6.1.6.1) + activesupport (= 6.1.6.1) nokogiri (>= 1.8.5) - actionview (6.1.6) - activesupport (= 6.1.6) + actionview (6.1.6.1) + activesupport (= 6.1.6.1) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) @@ -54,22 +54,22 @@ GEM case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) active_record_query_trace (1.8) - activejob (6.1.6) - activesupport (= 6.1.6) + activejob (6.1.6.1) + activesupport (= 6.1.6.1) globalid (>= 0.3.6) - activemodel (6.1.6) - activesupport (= 6.1.6) - activerecord (6.1.6) - activemodel (= 6.1.6) - activesupport (= 6.1.6) - activestorage (6.1.6) - actionpack (= 6.1.6) - activejob (= 6.1.6) - activerecord (= 6.1.6) - activesupport (= 6.1.6) + activemodel (6.1.6.1) + activesupport (= 6.1.6.1) + activerecord (6.1.6.1) + activemodel (= 6.1.6.1) + activesupport (= 6.1.6.1) + activestorage (6.1.6.1) + actionpack (= 6.1.6.1) + activejob (= 6.1.6.1) + activerecord (= 6.1.6.1) + activesupport (= 6.1.6.1) marcel (~> 1.0) mini_mime (>= 1.1.0) - activesupport (6.1.6) + activesupport (6.1.6.1) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) @@ -224,7 +224,7 @@ GEM faraday (~> 1) multi_json encryptor (3.0.0) - erubi (1.10.0) + erubi (1.11.0) et-orbi (1.2.7) tzinfo excon (0.76.0) @@ -405,7 +405,7 @@ GEM mime-types-data (3.2022.0105) mini_mime (1.1.2) mini_portile2 (2.8.0) - minitest (5.16.2) + minitest (5.16.3) msgpack (1.5.4) multi_json (1.15.0) multipart-post (2.1.1) @@ -500,20 +500,20 @@ GEM rack rack-test (2.0.2) rack (>= 1.3) - rails (6.1.6) - actioncable (= 6.1.6) - actionmailbox (= 6.1.6) - actionmailer (= 6.1.6) - actionpack (= 6.1.6) - actiontext (= 6.1.6) - actionview (= 6.1.6) - activejob (= 6.1.6) - activemodel (= 6.1.6) - activerecord (= 6.1.6) - activestorage (= 6.1.6) - activesupport (= 6.1.6) + rails (6.1.6.1) + actioncable (= 6.1.6.1) + actionmailbox (= 6.1.6.1) + actionmailer (= 6.1.6.1) + actionpack (= 6.1.6.1) + actiontext (= 6.1.6.1) + actionview (= 6.1.6.1) + activejob (= 6.1.6.1) + activemodel (= 6.1.6.1) + activerecord (= 6.1.6.1) + activestorage (= 6.1.6.1) + activesupport (= 6.1.6.1) bundler (>= 1.15.0) - railties (= 6.1.6) + railties (= 6.1.6.1) sprockets-rails (>= 2.0.0) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) @@ -529,9 +529,9 @@ GEM railties (>= 6.0.0, < 7) rails-settings-cached (0.6.6) rails (>= 4.2.0) - railties (6.1.6) - actionpack (= 6.1.6) - activesupport (= 6.1.6) + railties (6.1.6.1) + actionpack (= 6.1.6.1) + activesupport (= 6.1.6.1) method_source rake (>= 12.2) thor (~> 1.0) From e97cdd47bda688a00d21b241ac77909cbbfff6f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Sep 2022 01:32:17 +0900 Subject: [PATCH 269/646] Bump workbox-routing from 6.5.3 to 6.5.4 (#19092) Bumps [workbox-routing](https://github.com/googlechrome/workbox) from 6.5.3 to 6.5.4. - [Release notes](https://github.com/googlechrome/workbox/releases) - [Commits](https://github.com/googlechrome/workbox/compare/v6.5.3...v6.5.4) --- updated-dependencies: - dependency-name: workbox-routing dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 1f28fd57712..e3d8b9f6ab9 100644 --- a/package.json +++ b/package.json @@ -137,7 +137,7 @@ "wicg-inert": "^3.1.2", "workbox-expiration": "^6.5.3", "workbox-precaching": "^6.5.3", - "workbox-routing": "^6.5.3", + "workbox-routing": "^6.5.4", "workbox-strategies": "^6.5.3", "workbox-webpack-plugin": "^6.5.4", "workbox-window": "^6.5.3", diff --git a/yarn.lock b/yarn.lock index 0ac565e75e6..95029d91e45 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2800,7 +2800,7 @@ array-flatten@^2.1.0: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.1.3, array-includes@^3.1.4, array-includes@^3.1.5: +array-includes@^3.1.4, array-includes@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== @@ -12412,14 +12412,14 @@ workbox-recipes@6.5.4: workbox-routing "6.5.4" workbox-strategies "6.5.4" -workbox-routing@6.5.3, workbox-routing@^6.5.3: +workbox-routing@6.5.3: version "6.5.3" resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.3.tgz#a0a699d8cc90b5692bd3df24679acbbda3913777" integrity sha512-DFjxcuRAJjjt4T34RbMm3MCn+xnd36UT/2RfPRfa8VWJGItGJIn7tG+GwVTdHmvE54i/QmVTJepyAGWtoLPTmg== dependencies: workbox-core "6.5.3" -workbox-routing@6.5.4: +workbox-routing@6.5.4, workbox-routing@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.4.tgz#6a7fbbd23f4ac801038d9a0298bc907ee26fe3da" integrity sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg== From bf725837d5f5e972e8490b28e5f4439a5e9b8522 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Sep 2022 01:32:58 +0900 Subject: [PATCH 270/646] Bump workbox-expiration from 6.5.3 to 6.5.4 (#19091) Bumps [workbox-expiration](https://github.com/googlechrome/workbox) from 6.5.3 to 6.5.4. - [Release notes](https://github.com/googlechrome/workbox/releases) - [Commits](https://github.com/googlechrome/workbox/compare/v6.5.3...v6.5.4) --- updated-dependencies: - dependency-name: workbox-expiration dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 15 +-------------- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index e3d8b9f6ab9..b4229d6d0a0 100644 --- a/package.json +++ b/package.json @@ -135,7 +135,7 @@ "webpack-cli": "^3.3.12", "webpack-merge": "^5.8.0", "wicg-inert": "^3.1.2", - "workbox-expiration": "^6.5.3", + "workbox-expiration": "^6.5.4", "workbox-precaching": "^6.5.3", "workbox-routing": "^6.5.4", "workbox-strategies": "^6.5.3", diff --git a/yarn.lock b/yarn.lock index 95029d91e45..3d0076a812e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6242,11 +6242,6 @@ idb-keyval@^3.2.0: resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-3.2.0.tgz#cbbf354deb5684b6cdc84376294fc05932845bd6" integrity sha512-slx8Q6oywCCSfKgPgL0sEsXtPVnSbTLWpyiDcu6msHOyKOLari1TD1qocXVCft80umnkk3/Qqh3lwoFt8T/BPQ== -idb@^6.1.4: - version "6.1.5" - resolved "https://registry.yarnpkg.com/idb/-/idb-6.1.5.tgz#dbc53e7adf1ac7c59f9b2bf56e00b4ea4fce8c7b" - integrity sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw== - idb@^7.0.1: version "7.0.2" resolved "https://registry.yarnpkg.com/idb/-/idb-7.0.2.tgz#7a067e20dd16539938e456814b7d714ba8db3892" @@ -12342,7 +12337,7 @@ workbox-core@6.5.4: resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.4.tgz#df48bf44cd58bb1d1726c49b883fb1dffa24c9ba" integrity sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q== -workbox-expiration@6.5.4: +workbox-expiration@6.5.4, workbox-expiration@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.5.4.tgz#501056f81e87e1d296c76570bb483ce5e29b4539" integrity sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ== @@ -12350,14 +12345,6 @@ workbox-expiration@6.5.4: idb "^7.0.1" workbox-core "6.5.4" -workbox-expiration@^6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.5.3.tgz#efc0811f371a2ede1052b9de1c4f072b71d50503" - integrity sha512-jzYopYR1zD04ZMdlbn/R2Ik6ixiXbi15c9iX5H8CTi6RPDz7uhvMLZPKEndZTpfgmUk8mdmT9Vx/AhbuCl5Sqw== - dependencies: - idb "^6.1.4" - workbox-core "6.5.3" - workbox-google-analytics@6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz#c74327f80dfa4c1954cbba93cd7ea640fe7ece7d" From 77e17a22f79aaea705e5e53e3f5354c43c6361ca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Sep 2022 01:33:26 +0900 Subject: [PATCH 271/646] Bump eslint-plugin-promise from 6.0.0 to 6.0.1 (#19087) Bumps [eslint-plugin-promise](https://github.com/xjamundx/eslint-plugin-promise) from 6.0.0 to 6.0.1. - [Release notes](https://github.com/xjamundx/eslint-plugin-promise/releases) - [Changelog](https://github.com/xjamundx/eslint-plugin-promise/blob/development/CHANGELOG.md) - [Commits](https://github.com/xjamundx/eslint-plugin-promise/commits) --- updated-dependencies: - dependency-name: eslint-plugin-promise dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index b4229d6d0a0..c0f49719094 100644 --- a/package.json +++ b/package.json @@ -151,7 +151,7 @@ "eslint": "^7.32.0", "eslint-plugin-import": "~2.26.0", "eslint-plugin-jsx-a11y": "~6.6.1", - "eslint-plugin-promise": "~6.0.0", + "eslint-plugin-promise": "~6.0.1", "eslint-plugin-react": "~7.31.1", "jest": "^28.1.3", "jest-environment-jsdom": "^28.1.3", diff --git a/yarn.lock b/yarn.lock index 3d0076a812e..d404f944af1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5044,10 +5044,10 @@ eslint-plugin-jsx-a11y@~6.6.1: minimatch "^3.1.2" semver "^6.3.0" -eslint-plugin-promise@~6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.0.0.tgz#017652c07c9816413a41e11c30adc42c3d55ff18" - integrity sha512-7GPezalm5Bfi/E22PnQxDWH2iW9GTvAlUNTztemeHb6c1BniSyoeTrM87JkC0wYdi6aQrZX9p2qEiAno8aTcbw== +eslint-plugin-promise@~6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.0.1.tgz#a8cddf96a67c4059bdabf4d724a29572188ae423" + integrity sha512-uM4Tgo5u3UWQiroOyDEsYcVMOo7re3zmno0IZmB5auxoaQNIceAbXEkSt8RNrKtaYehARHG06pYK6K1JhtP0Zw== eslint-plugin-react@~7.31.1: version "7.31.1" From e7ed2283fa90f769c1105bd05c47423d13c0f608 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Sep 2022 06:28:31 +0900 Subject: [PATCH 272/646] Bump workbox-strategies from 6.5.3 to 6.5.4 (#19089) Bumps [workbox-strategies](https://github.com/googlechrome/workbox) from 6.5.3 to 6.5.4. - [Release notes](https://github.com/googlechrome/workbox/releases) - [Commits](https://github.com/googlechrome/workbox/compare/v6.5.3...v6.5.4) --- updated-dependencies: - dependency-name: workbox-strategies dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index c0f49719094..8eed4589822 100644 --- a/package.json +++ b/package.json @@ -138,7 +138,7 @@ "workbox-expiration": "^6.5.4", "workbox-precaching": "^6.5.3", "workbox-routing": "^6.5.4", - "workbox-strategies": "^6.5.3", + "workbox-strategies": "^6.5.4", "workbox-webpack-plugin": "^6.5.4", "workbox-window": "^6.5.3", "ws": "^8.8.1" diff --git a/yarn.lock b/yarn.lock index d404f944af1..fb62e42afe0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12413,14 +12413,14 @@ workbox-routing@6.5.4, workbox-routing@^6.5.4: dependencies: workbox-core "6.5.4" -workbox-strategies@6.5.3, workbox-strategies@^6.5.3: +workbox-strategies@6.5.3: version "6.5.3" resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.3.tgz#4bea9a48fee16cf43766e0d8138296773c8a9783" integrity sha512-MgmGRrDVXs7rtSCcetZgkSZyMpRGw8HqL2aguszOc3nUmzGZsT238z/NN9ZouCxSzDu3PQ3ZSKmovAacaIhu1w== dependencies: workbox-core "6.5.3" -workbox-strategies@6.5.4: +workbox-strategies@6.5.4, workbox-strategies@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.4.tgz#4edda035b3c010fc7f6152918370699334cd204d" integrity sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw== From 6ad807f86001b99f305ccd1ab5115fc1e73c9555 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Sep 2022 06:29:39 +0900 Subject: [PATCH 273/646] Bump workbox-window from 6.5.3 to 6.5.4 (#19088) Bumps [workbox-window](https://github.com/googlechrome/workbox) from 6.5.3 to 6.5.4. - [Release notes](https://github.com/googlechrome/workbox/releases) - [Commits](https://github.com/googlechrome/workbox/compare/v6.5.3...v6.5.4) --- updated-dependencies: - dependency-name: workbox-window dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 10 +--------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 8eed4589822..6809afdbb53 100644 --- a/package.json +++ b/package.json @@ -140,7 +140,7 @@ "workbox-routing": "^6.5.4", "workbox-strategies": "^6.5.4", "workbox-webpack-plugin": "^6.5.4", - "workbox-window": "^6.5.3", + "workbox-window": "^6.5.4", "ws": "^8.8.1" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index fb62e42afe0..5cbc157e0a5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12451,7 +12451,7 @@ workbox-webpack-plugin@^6.5.4: webpack-sources "^1.4.3" workbox-build "6.5.4" -workbox-window@6.5.4: +workbox-window@6.5.4, workbox-window@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.5.4.tgz#d991bc0a94dff3c2dbb6b84558cff155ca878e91" integrity sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug== @@ -12459,14 +12459,6 @@ workbox-window@6.5.4: "@types/trusted-types" "^2.0.2" workbox-core "6.5.4" -workbox-window@^6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.5.3.tgz#4ade70056cb73477ef1cd8fea7cfd0ecbd825c7f" - integrity sha512-GnJbx1kcKXDtoJBVZs/P7ddP0Yt52NNy4nocjBpYPiRhMqTpJCNrSL+fGHZ/i/oP6p/vhE8II0sA6AZGKGnssw== - dependencies: - "@types/trusted-types" "^2.0.2" - workbox-core "6.5.3" - worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" From 95a149d7c12666d15257ac88687b3193a74179c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Sep 2022 11:41:31 +0900 Subject: [PATCH 274/646] Bump workbox-precaching from 6.5.3 to 6.5.4 (#19083) Bumps [workbox-precaching](https://github.com/googlechrome/workbox) from 6.5.3 to 6.5.4. - [Release notes](https://github.com/googlechrome/workbox/releases) - [Commits](https://github.com/googlechrome/workbox/compare/v6.5.3...v6.5.4) --- updated-dependencies: - dependency-name: workbox-precaching dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 30 +----------------------------- 2 files changed, 2 insertions(+), 30 deletions(-) diff --git a/package.json b/package.json index 6809afdbb53..6ab81402940 100644 --- a/package.json +++ b/package.json @@ -136,7 +136,7 @@ "webpack-merge": "^5.8.0", "wicg-inert": "^3.1.2", "workbox-expiration": "^6.5.4", - "workbox-precaching": "^6.5.3", + "workbox-precaching": "^6.5.4", "workbox-routing": "^6.5.4", "workbox-strategies": "^6.5.4", "workbox-webpack-plugin": "^6.5.4", diff --git a/yarn.lock b/yarn.lock index 5cbc157e0a5..8418aa3010d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12327,11 +12327,6 @@ workbox-cacheable-response@6.5.4: dependencies: workbox-core "6.5.4" -workbox-core@6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.3.tgz#bca038a9ef0d7a634a6db2a60f45313ed22ac249" - integrity sha512-Bb9ey5n/M9x+l3fBTlLpHt9ASTzgSGj6vxni7pY72ilB/Pb3XtN+cZ9yueboVhD5+9cNQrC9n/E1fSrqWsUz7Q== - workbox-core@6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.4.tgz#df48bf44cd58bb1d1726c49b883fb1dffa24c9ba" @@ -12362,7 +12357,7 @@ workbox-navigation-preload@6.5.4: dependencies: workbox-core "6.5.4" -workbox-precaching@6.5.4: +workbox-precaching@6.5.4, workbox-precaching@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.4.tgz#740e3561df92c6726ab5f7471e6aac89582cab72" integrity sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg== @@ -12371,15 +12366,6 @@ workbox-precaching@6.5.4: workbox-routing "6.5.4" workbox-strategies "6.5.4" -workbox-precaching@^6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.3.tgz#c870312b2ef901d790ab9e48da084e776c62af47" - integrity sha512-sjNfgNLSsRX5zcc63H/ar/hCf+T19fRtTqvWh795gdpghWb5xsfEkecXEvZ8biEi1QD7X/ljtHphdaPvXDygMQ== - dependencies: - workbox-core "6.5.3" - workbox-routing "6.5.3" - workbox-strategies "6.5.3" - workbox-range-requests@6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz#86b3d482e090433dab38d36ae031b2bb0bd74399" @@ -12399,13 +12385,6 @@ workbox-recipes@6.5.4: workbox-routing "6.5.4" workbox-strategies "6.5.4" -workbox-routing@6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.3.tgz#a0a699d8cc90b5692bd3df24679acbbda3913777" - integrity sha512-DFjxcuRAJjjt4T34RbMm3MCn+xnd36UT/2RfPRfa8VWJGItGJIn7tG+GwVTdHmvE54i/QmVTJepyAGWtoLPTmg== - dependencies: - workbox-core "6.5.3" - workbox-routing@6.5.4, workbox-routing@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.4.tgz#6a7fbbd23f4ac801038d9a0298bc907ee26fe3da" @@ -12413,13 +12392,6 @@ workbox-routing@6.5.4, workbox-routing@^6.5.4: dependencies: workbox-core "6.5.4" -workbox-strategies@6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.3.tgz#4bea9a48fee16cf43766e0d8138296773c8a9783" - integrity sha512-MgmGRrDVXs7rtSCcetZgkSZyMpRGw8HqL2aguszOc3nUmzGZsT238z/NN9ZouCxSzDu3PQ3ZSKmovAacaIhu1w== - dependencies: - workbox-core "6.5.3" - workbox-strategies@6.5.4, workbox-strategies@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.4.tgz#4edda035b3c010fc7f6152918370699334cd204d" From d4e63cd980a87b7bdbde57124d230e7e60ec38f1 Mon Sep 17 00:00:00 2001 From: Una Date: Fri, 2 Sep 2022 00:29:31 -0700 Subject: [PATCH 275/646] Fix audio always being re-encoded even for passthrough-eligible media (#1839) --- lib/paperclip/transcoder.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/paperclip/transcoder.rb b/lib/paperclip/transcoder.rb index afd9f58ff69..b3b55f82fb8 100644 --- a/lib/paperclip/transcoder.rb +++ b/lib/paperclip/transcoder.rb @@ -40,8 +40,10 @@ module Paperclip @output_options['f'] = 'image2' @output_options['vframes'] = 1 when 'mp4' - @output_options['acodec'] = 'aac' - @output_options['strict'] = 'experimental' + unless eligible_to_passthrough?(metadata) + @output_options['acodec'] = 'aac' + @output_options['strict'] = 'experimental' + end if high_vfr?(metadata) && !eligible_to_passthrough?(metadata) @output_options['vsync'] = 'vfr' From 2a46fcc3ed6b9c013c549d7bcd3f1827ec8c306c Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 2 Sep 2022 11:57:06 +0200 Subject: [PATCH 276/646] Fix regexp filtering in pinned community/public TLs (#1840) --- .../flavours/glitch/components/status_list.js | 1 + .../features/community_timeline/index.js | 4 ++++ .../glitch/features/home_timeline/index.js | 3 +++ .../glitch/features/public_timeline/index.js | 4 ++++ .../ui/containers/status_list_container.js | 20 ++++--------------- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/app/javascript/flavours/glitch/components/status_list.js b/app/javascript/flavours/glitch/components/status_list.js index 9095e087ee9..ac255f4ac43 100644 --- a/app/javascript/flavours/glitch/components/status_list.js +++ b/app/javascript/flavours/glitch/components/status_list.js @@ -25,6 +25,7 @@ export default class StatusList extends ImmutablePureComponent { alwaysPrepend: PropTypes.bool, emptyMessage: PropTypes.node, timelineId: PropTypes.string.isRequired, + regex: PropTypes.string, }; static defaultProps = { diff --git a/app/javascript/flavours/glitch/features/community_timeline/index.js b/app/javascript/flavours/glitch/features/community_timeline/index.js index 7341f9702eb..64030e19566 100644 --- a/app/javascript/flavours/glitch/features/community_timeline/index.js +++ b/app/javascript/flavours/glitch/features/community_timeline/index.js @@ -19,11 +19,13 @@ const mapStateToProps = (state, { columnId }) => { const columns = state.getIn(['settings', 'columns']); const index = columns.findIndex(c => c.get('uuid') === uuid); const onlyMedia = (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'community', 'other', 'onlyMedia']); + const regex = (columnId && index >= 0) ? columns.get(index).getIn(['params', 'regex', 'body']) : state.getIn(['settings', 'community', 'regex', 'body']); const timelineState = state.getIn(['timelines', `community${onlyMedia ? ':media' : ''}`]); return { hasUnread: !!timelineState && timelineState.get('unread') > 0, onlyMedia, + regex, }; }; @@ -46,6 +48,7 @@ class CommunityTimeline extends React.PureComponent { hasUnread: PropTypes.bool, multiColumn: PropTypes.bool, onlyMedia: PropTypes.bool, + regex: PropTypes.string, }; handlePin = () => { @@ -127,6 +130,7 @@ class CommunityTimeline extends React.PureComponent { onLoadMore={this.handleLoadMore} emptyMessage={} bindToDocument={!multiColumn} + regex={this.props.regex} /> ); diff --git a/app/javascript/flavours/glitch/features/home_timeline/index.js b/app/javascript/flavours/glitch/features/home_timeline/index.js index 19551d6b898..51e93230776 100644 --- a/app/javascript/flavours/glitch/features/home_timeline/index.js +++ b/app/javascript/flavours/glitch/features/home_timeline/index.js @@ -26,6 +26,7 @@ const mapStateToProps = state => ({ hasAnnouncements: !state.getIn(['announcements', 'items']).isEmpty(), unreadAnnouncements: state.getIn(['announcements', 'items']).count(item => !item.get('read')), showAnnouncements: state.getIn(['announcements', 'show']), + regex: state.getIn(['settings', 'home', 'regex', 'body']), }); export default @connect(mapStateToProps) @@ -42,6 +43,7 @@ class HomeTimeline extends React.PureComponent { hasAnnouncements: PropTypes.bool, unreadAnnouncements: PropTypes.number, showAnnouncements: PropTypes.bool, + regex: PropTypes.string, }; handlePin = () => { @@ -154,6 +156,7 @@ class HomeTimeline extends React.PureComponent { timelineId='home' emptyMessage={ }} />} bindToDocument={!multiColumn} + regex={this.props.regex} /> ); diff --git a/app/javascript/flavours/glitch/features/public_timeline/index.js b/app/javascript/flavours/glitch/features/public_timeline/index.js index 8480499656e..9f31cf9223c 100644 --- a/app/javascript/flavours/glitch/features/public_timeline/index.js +++ b/app/javascript/flavours/glitch/features/public_timeline/index.js @@ -21,6 +21,7 @@ const mapStateToProps = (state, { columnId }) => { const onlyMedia = (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'public', 'other', 'onlyMedia']); const onlyRemote = (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyRemote']) : state.getIn(['settings', 'public', 'other', 'onlyRemote']); const allowLocalOnly = (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'allowLocalOnly']) : state.getIn(['settings', 'public', 'other', 'allowLocalOnly']); + const regex = (columnId && index >= 0) ? columns.get(index).getIn(['params', 'regex', 'body']) : state.getIn(['settings', 'public', 'regex', 'body']); const timelineState = state.getIn(['timelines', `public${onlyMedia ? ':media' : ''}`]); return { @@ -28,6 +29,7 @@ const mapStateToProps = (state, { columnId }) => { onlyMedia, onlyRemote, allowLocalOnly, + regex, }; }; @@ -52,6 +54,7 @@ class PublicTimeline extends React.PureComponent { onlyMedia: PropTypes.bool, onlyRemote: PropTypes.bool, allowLocalOnly: PropTypes.bool, + regex: PropTypes.string, }; handlePin = () => { @@ -133,6 +136,7 @@ class PublicTimeline extends React.PureComponent { scrollKey={`public_timeline-${columnId}`} emptyMessage={} bindToDocument={!multiColumn} + regex={this.props.regex} /> ); diff --git a/app/javascript/flavours/glitch/features/ui/containers/status_list_container.js b/app/javascript/flavours/glitch/features/ui/containers/status_list_container.js index 0828e3cb034..53c3b8f3920 100644 --- a/app/javascript/flavours/glitch/features/ui/containers/status_list_container.js +++ b/app/javascript/flavours/glitch/features/ui/containers/status_list_container.js @@ -6,20 +6,8 @@ import { createSelector } from 'reselect'; import { debounce } from 'lodash'; import { me } from 'flavours/glitch/util/initial_state'; -const normalizeTimelineId = timelineId => { - if (timelineId.startsWith('public:')) { - return 'public'; - } - - if (timelineId.startsWith('community:')) { - return 'community'; - } - - return timelineId; -}; - const getRegex = createSelector([ - (state, { type }) => state.getIn(['settings', normalizeTimelineId(type), 'regex', 'body']), + (state, { regex }) => regex, ], (rawRegex) => { let regex = null; @@ -32,7 +20,7 @@ const getRegex = createSelector([ }); const makeGetStatusIds = (pending = false) => createSelector([ - (state, { type }) => state.getIn(['settings', normalizeTimelineId(type)], ImmutableMap()), + (state, { type }) => state.getIn(['settings', type], ImmutableMap()), (state, { type }) => state.getIn(['timelines', type, pending ? 'pendingItems' : 'items'], ImmutableList()), (state) => state.get('statuses'), getRegex, @@ -70,8 +58,8 @@ const makeMapStateToProps = () => { const getStatusIds = makeGetStatusIds(); const getPendingStatusIds = makeGetStatusIds(true); - const mapStateToProps = (state, { timelineId }) => ({ - statusIds: getStatusIds(state, { type: timelineId }), + const mapStateToProps = (state, { timelineId, regex }) => ({ + statusIds: getStatusIds(state, { type: timelineId, regex }), isLoading: state.getIn(['timelines', timelineId, 'isLoading'], true), isPartial: state.getIn(['timelines', timelineId, 'isPartial'], false), hasMore: state.getIn(['timelines', timelineId, 'hasMore']), From 9d7c323abdda66423751f3a25faf960674af8a49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lanie=20Chauvel?= Date: Wed, 7 Sep 2022 19:37:46 +0200 Subject: [PATCH 277/646] Make composers button all aligned and the same size (#1843) --- app/javascript/flavours/glitch/styles/components/composer.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/styles/components/composer.scss b/app/javascript/flavours/glitch/styles/components/composer.scss index 1468bd4f58e..da086833c56 100644 --- a/app/javascript/flavours/glitch/styles/components/composer.scss +++ b/app/javascript/flavours/glitch/styles/components/composer.scss @@ -528,7 +528,8 @@ display: flex; flex: 0 0 auto; - & > * { + & .icon-button, + & .text-icon-button { display: inline-block; box-sizing: content-box; padding: 0 3px; From af46584f826165687611d97c08dbecb8f1a0416b Mon Sep 17 00:00:00 2001 From: Ashish Kurmi <100655670+boahc077@users.noreply.github.com> Date: Thu, 8 Sep 2022 00:44:24 -0700 Subject: [PATCH 278/646] ci: add minimum GitHub token permissions for workflows (#19138) Signed-off-by: Ashish Kurmi Signed-off-by: Ashish Kurmi --- .github/workflows/build-image.yml | 3 +++ .github/workflows/check-i18n.yml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index 157c2fcde17..624aabbe7a0 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -10,6 +10,9 @@ on: paths: - .github/workflows/build-image.yml - Dockerfile +permissions: + contents: read + jobs: build-image: runs-on: ubuntu-latest diff --git a/.github/workflows/check-i18n.yml b/.github/workflows/check-i18n.yml index 1c60515f8c9..a9d8ea2eae3 100644 --- a/.github/workflows/check-i18n.yml +++ b/.github/workflows/check-i18n.yml @@ -9,6 +9,9 @@ on: env: RAILS_ENV: test +permissions: + contents: read + jobs: check-i18n: runs-on: ubuntu-latest From 2750a7a0e6baac8753f7fceb1c747f56718cd93f Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 8 Sep 2022 09:44:36 +0200 Subject: [PATCH 279/646] Fix REST API sometimes returning HTML on error (#19135) Fixes #19115 --- app/controllers/api/base_controller.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/controllers/api/base_controller.rb b/app/controllers/api/base_controller.rb index 2e393fbb6f4..7ce6599c525 100644 --- a/app/controllers/api/base_controller.rb +++ b/app/controllers/api/base_controller.rb @@ -131,4 +131,10 @@ class Api::BaseController < ApplicationController def disallow_unauthenticated_api_access? authorized_fetch_mode? end + + private + + def respond_with_error(code) + render json: { error: Rack::Utils::HTTP_STATUS_CODES[code] }, status: code + end end From 9ff24772e27982c090018a84532aef78fbf39606 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Sep 2022 21:53:06 +0900 Subject: [PATCH 280/646] Bump dotenv from 16.0.1 to 16.0.2 (#19128) Bumps [dotenv](https://github.com/motdotla/dotenv) from 16.0.1 to 16.0.2. - [Release notes](https://github.com/motdotla/dotenv/releases) - [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md) - [Commits](https://github.com/motdotla/dotenv/compare/v16.0.1...v16.0.2) --- updated-dependencies: - dependency-name: dotenv dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 6ab81402940..f435c4ff974 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "css-loader": "^5.2.7", "cssnano": "^4.1.11", "detect-passive-events": "^2.0.3", - "dotenv": "^16.0.1", + "dotenv": "^16.0.2", "emoji-mart": "npm:emoji-mart-lazyload", "es6-symbol": "^3.1.3", "escape-html": "^1.0.3", diff --git a/yarn.lock b/yarn.lock index 8418aa3010d..32a7242561c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4700,10 +4700,10 @@ dot-prop@^5.2.0: dependencies: is-obj "^2.0.0" -dotenv@^16.0.1: - version "16.0.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d" - integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ== +dotenv@^16.0.2: + version "16.0.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.2.tgz#0b0f8652c016a3858ef795024508cddc4bffc5bf" + integrity sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA== duplexer@^0.1.2: version "0.1.2" From 103cec2302b16c9dd394004242124ef26d287e29 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Sep 2022 21:53:33 +0900 Subject: [PATCH 281/646] Bump faker from 2.22.0 to 2.23.0 (#19123) Bumps [faker](https://github.com/faker-ruby/faker) from 2.22.0 to 2.23.0. - [Release notes](https://github.com/faker-ruby/faker/releases) - [Changelog](https://github.com/faker-ruby/faker/blob/master/CHANGELOG.md) - [Commits](https://github.com/faker-ruby/faker/compare/v2.22.0...v2.23.0) --- updated-dependencies: - dependency-name: faker dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 75525b0ac59..92b69782ea9 100644 --- a/Gemfile +++ b/Gemfile @@ -114,7 +114,7 @@ end group :test do gem 'capybara', '~> 3.37' gem 'climate_control', '~> 0.2' - gem 'faker', '~> 2.22' + gem 'faker', '~> 2.23' gem 'microformats', '~> 4.4' gem 'rails-controller-testing', '~> 1.0' gem 'rspec-sidekiq', '~> 3.1' diff --git a/Gemfile.lock b/Gemfile.lock index 6cb9c7ba22e..0c6aea49bbb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -229,7 +229,7 @@ GEM tzinfo excon (0.76.0) fabrication (2.30.0) - faker (2.22.0) + faker (2.23.0) i18n (>= 1.8.11, < 2) faraday (1.9.3) faraday-em_http (~> 1.0) @@ -765,7 +765,7 @@ DEPENDENCIES dotenv-rails (~> 2.8) ed25519 (~> 1.3) fabrication (~> 2.30) - faker (~> 2.22) + faker (~> 2.23) fast_blank (~> 1.0) fastimage fog-core (<= 2.1.0) From 56dd2dc6b9e81e483b2b224c2cf94223c494847b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Sep 2022 21:54:05 +0900 Subject: [PATCH 282/646] Bump @babel/runtime from 7.18.9 to 7.19.0 (#19122) Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.18.9 to 7.19.0. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.19.0/packages/babel-runtime) --- updated-dependencies: - dependency-name: "@babel/runtime" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 15 ++++----------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index f435c4ff974..3c474546c82 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "@babel/plugin-transform-runtime": "^7.18.10", "@babel/preset-env": "^7.18.10", "@babel/preset-react": "^7.18.6", - "@babel/runtime": "^7.18.9", + "@babel/runtime": "^7.19.0", "@gamestdio/websocket": "^0.3.2", "@github/webauthn-json": "^0.5.7", "@rails/ujs": "^6.1.6", diff --git a/yarn.lock b/yarn.lock index 32a7242561c..f7c4e8aadb9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1410,17 +1410,10 @@ dependencies: regenerator-runtime "^0.12.0" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" - integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" - integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.9", "@babel/runtime@^7.19.0", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259" + integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA== dependencies: regenerator-runtime "^0.13.4" From aa94c3355f98af79df63ca93141d0bed570f04fe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Sep 2022 21:54:28 +0900 Subject: [PATCH 283/646] Bump @babel/plugin-proposal-decorators from 7.18.10 to 7.19.0 (#19121) Bumps [@babel/plugin-proposal-decorators](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-proposal-decorators) from 7.18.10 to 7.19.0. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.19.0/packages/babel-plugin-proposal-decorators) --- updated-dependencies: - dependency-name: "@babel/plugin-proposal-decorators" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 59 +++++++++++++++++++++++++++++++++------------------- 2 files changed, 39 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 3c474546c82..32f82c37969 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "private": true, "dependencies": { "@babel/core": "^7.18.13", - "@babel/plugin-proposal-decorators": "^7.18.10", + "@babel/plugin-proposal-decorators": "^7.19.0", "@babel/plugin-transform-react-inline-elements": "^7.18.6", "@babel/plugin-transform-runtime": "^7.18.10", "@babel/preset-env": "^7.18.10", diff --git a/yarn.lock b/yarn.lock index f7c4e8aadb9..e1cff994bd6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,14 +164,14 @@ browserslist "^4.20.2" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz#d802ee16a64a9e824fcbf0a2ffc92f19d58550ce" - integrity sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz#bfd6904620df4e46470bae4850d66be1054c404b" + integrity sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" "@babel/helper-member-expression-to-functions" "^7.18.9" "@babel/helper-optimise-call-expression" "^7.18.6" "@babel/helper-replace-supers" "^7.18.9" @@ -230,6 +230,14 @@ "@babel/template" "^7.18.6" "@babel/types" "^7.18.9" +"@babel/helper-function-name@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== + dependencies: + "@babel/template" "^7.18.10" + "@babel/types" "^7.19.0" + "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" @@ -293,10 +301,10 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" - integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz#4796bb14961521f0f8715990bee2fb6e51ce21bf" + integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== "@babel/helper-remap-async-to-generator@^7.18.6": version "7.18.6" @@ -498,16 +506,16 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-decorators@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.10.tgz#788650d01e518a8a722eb8b3055dd9d73ecb7a35" - integrity sha512-wdGTwWF5QtpTY/gbBtQLAiCnoxfD4qMbN87NYZle1dOZ9Os8Y6zXcKrIaOU8W+TIvFUWVGG9tUgNww3CjXRVVw== +"@babel/plugin-proposal-decorators@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.19.0.tgz#5a3bc0699ee34117c73c960a5396ffce104c4eaa" + integrity sha512-Bo5nOSjiJccjv00+BrDkmfeBLBi2B0qe8ygj24KdL8VdwtZz+710NCwehF+x/Ng+0mkHx5za2eAofmvVFLF4Fg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-create-class-features-plugin" "^7.19.0" + "@babel/helper-plugin-utils" "^7.19.0" "@babel/helper-replace-supers" "^7.18.9" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/plugin-syntax-decorators" "^7.18.6" + "@babel/plugin-syntax-decorators" "^7.19.0" "@babel/plugin-proposal-dynamic-import@^7.16.7", "@babel/plugin-proposal-dynamic-import@^7.18.6": version "7.18.6" @@ -675,12 +683,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.18.6.tgz#2e45af22835d0b0f8665da2bfd4463649ce5dbc1" - integrity sha512-fqyLgjcxf/1yhyZ6A+yo1u9gJ7eleFQod2lkaUsF9DQ7sbbY3Ligym3L0+I2c0WmqNKDpoD9UTb1AKP3qRMOAQ== +"@babel/plugin-syntax-decorators@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz#5f13d1d8fce96951bea01a10424463c9a5b3a599" + integrity sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" @@ -1484,6 +1492,15 @@ "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" +"@babel/types@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.0.tgz#75f21d73d73dc0351f3368d28db73465f4814600" + integrity sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA== + dependencies: + "@babel/helper-string-parser" "^7.18.10" + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" From 3edf32b5a590a6d2894ede78244670639b4474a8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Sep 2022 21:54:50 +0900 Subject: [PATCH 284/646] Bump @babel/preset-env from 7.18.10 to 7.19.0 (#19127) Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.18.10 to 7.19.0. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.19.0/packages/babel-preset-env) --- updated-dependencies: - dependency-name: "@babel/preset-env" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 532 ++++++++++++++------------------------------------- 2 files changed, 144 insertions(+), 390 deletions(-) diff --git a/package.json b/package.json index 32f82c37969..47826e54c60 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@babel/plugin-proposal-decorators": "^7.19.0", "@babel/plugin-transform-react-inline-elements": "^7.18.6", "@babel/plugin-transform-runtime": "^7.18.10", - "@babel/preset-env": "^7.18.10", + "@babel/preset-env": "^7.19.0", "@babel/preset-react": "^7.18.6", "@babel/runtime": "^7.19.0", "@gamestdio/websocket": "^0.3.2", diff --git a/yarn.lock b/yarn.lock index e1cff994bd6..9cdeb288de3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -37,20 +37,10 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.18.6": - version "7.18.13" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.13.tgz#6aff7b350a1e8c3e40b029e46cbe78e24a913483" - integrity sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw== - -"@babel/compat-data@^7.17.10": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.6.tgz#8b37d24e88e8e21c499d4328db80577d8882fa53" - integrity sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ== - -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" - integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8", "@babel/compat-data@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.0.tgz#2a592fd89bacb1fcde68de31bee4f2f2dacb0e86" + integrity sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw== "@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.7.2": version "7.17.10" @@ -121,6 +111,15 @@ "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" +"@babel/generator@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.0.tgz#785596c06425e59334df2ccee63ab166b738419a" + integrity sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg== + dependencies: + "@babel/types" "^7.19.0" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" @@ -144,22 +143,12 @@ "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-compilation-targets@^7.17.10": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz#18d35bfb9f83b1293c22c55b3d576c1315b6ed96" - integrity sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg== +"@babel/helper-compilation-targets@^7.17.10", "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz#537ec8339d53e806ed422f1e06c8f17d55b96bb0" + integrity sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA== dependencies: - "@babel/compat-data" "^7.18.6" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.20.2" - semver "^6.3.0" - -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.6", "@babel/helper-compilation-targets@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" - integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== - dependencies: - "@babel/compat-data" "^7.18.8" + "@babel/compat-data" "^7.19.0" "@babel/helper-validator-option" "^7.18.6" browserslist "^4.20.2" semver "^6.3.0" @@ -185,7 +174,15 @@ "@babel/helper-annotate-as-pure" "^7.18.6" regexpu-core "^5.1.0" -"@babel/helper-define-polyfill-provider@^0.3.1", "@babel/helper-define-polyfill-provider@^0.3.2": +"@babel/helper-create-regexp-features-plugin@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz#7976aca61c0984202baca73d84e2337a5424a41b" + integrity sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.1.0" + +"@babel/helper-define-polyfill-provider@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz#bd10d0aca18e8ce012755395b05a79f45eca5073" integrity sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg== @@ -294,6 +291,20 @@ "@babel/traverse" "^7.18.9" "@babel/types" "^7.18.9" +"@babel/helper-module-transforms@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz#309b230f04e22c58c6a2c0c0c7e50b216d350c30" + integrity sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.0" + "@babel/types" "^7.19.0" + "@babel/helper-optimise-call-expression@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" @@ -344,7 +355,7 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-skip-transparent-expression-wrappers@^7.18.6", "@babel/helper-skip-transparent-expression-wrappers@^7.18.9": +"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818" integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== @@ -373,7 +384,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== -"@babel/helper-validator-option@^7.16.7", "@babel/helper-validator-option@^7.18.6": +"@babel/helper-validator-option@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== @@ -444,22 +455,18 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.13.tgz#5b2dd21cae4a2c5145f1fbd8ca103f9313d3b7e4" integrity sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": +"@babel/parser@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.0.tgz#497fcafb1d5b61376959c1c338745ef0577aa02c" + integrity sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.6.tgz#b4e4dbc2cd1acd0133479918f7c6412961c9adb8" - integrity sha512-Udgu8ZRgrBrttVz6A0EVL0SJ1z+RLbIeqsu632SA1hf0awEppD6TvdznoH+orIF8wtFFAV/Enmw9Y+9oV8TQcw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" @@ -469,27 +476,17 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" "@babel/plugin-proposal-optional-chaining" "^7.18.9" -"@babel/plugin-proposal-async-generator-functions@^7.16.8": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz#aedac81e6fc12bb643374656dd5f2605bf743d17" - integrity sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w== - dependencies: - "@babel/helper-environment-visitor" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-remap-async-to-generator" "^7.18.6" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-async-generator-functions@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz#85ea478c98b0095c3e4102bff3b67d306ed24952" - integrity sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew== +"@babel/plugin-proposal-async-generator-functions@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.0.tgz#cf5740194f170467df20581712400487efc79ff1" + integrity sha512-nhEByMUTx3uZueJ/QkJuSlCfN4FGg+xy+vRsfGQGzSauq5ks2Deid2+05Q3KhfaUjvec1IGhw/Zm3cFm8JigTQ== dependencies: "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.19.0" "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.16.7", "@babel/plugin-proposal-class-properties@^7.18.6": +"@babel/plugin-proposal-class-properties@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== @@ -497,7 +494,7 @@ "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-class-static-block@^7.17.6", "@babel/plugin-proposal-class-static-block@^7.18.6": +"@babel/plugin-proposal-class-static-block@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== @@ -517,7 +514,7 @@ "@babel/helper-split-export-declaration" "^7.18.6" "@babel/plugin-syntax-decorators" "^7.19.0" -"@babel/plugin-proposal-dynamic-import@^7.16.7", "@babel/plugin-proposal-dynamic-import@^7.18.6": +"@babel/plugin-proposal-dynamic-import@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== @@ -525,14 +522,6 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.16.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.6.tgz#1016f0aa5ab383bbf8b3a85a2dcaedf6c8ee7491" - integrity sha512-zr/QcUlUo7GPo6+X1wC98NJADqmy5QTFWWhqeQWiki4XHafJtLl/YMGkmRB2szDD2IYJCCdBTd4ElwhId9T7Xw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-proposal-export-namespace-from@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" @@ -541,7 +530,7 @@ "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.16.7", "@babel/plugin-proposal-json-strings@^7.18.6": +"@babel/plugin-proposal-json-strings@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== @@ -549,14 +538,6 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.6.tgz#3b9cac6f1ffc2aa459d111df80c12020dfc6b665" - integrity sha512-zMo66azZth/0tVd7gmkxOkOjs2rpHyhpcFo565PUP37hSp6hSd9uUKIfTDFMz58BwqgQKhJ9YxtM5XddjXVn+Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-proposal-logical-assignment-operators@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" @@ -565,7 +546,7 @@ "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== @@ -573,7 +554,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.16.7", "@babel/plugin-proposal-numeric-separator@^7.18.6": +"@babel/plugin-proposal-numeric-separator@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== @@ -581,17 +562,6 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.17.3": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.6.tgz#ec93bba06bfb3e15ebd7da73e953d84b094d5daf" - integrity sha512-9yuM6wr4rIsKa1wlUAbZEazkCrgw2sMPEXCr4Rnwetu7cEW1NydkCWytLuYletbf8vFxdJxFhwEZqMpOx2eZyw== - dependencies: - "@babel/compat-data" "^7.18.6" - "@babel/helper-compilation-targets" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz#f9434f6beb2c8cae9dfcf97d2a5941bbbf9ad4e7" @@ -603,7 +573,7 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.18.8" -"@babel/plugin-proposal-optional-catch-binding@^7.16.7", "@babel/plugin-proposal-optional-catch-binding@^7.18.6": +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== @@ -611,16 +581,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.16.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.6.tgz#46d4f2ffc20e87fad1d98bc4fa5d466366f6aa0b" - integrity sha512-PatI6elL5eMzoypFAiYDpYQyMtXTn+iMhuxxQt5mAXD4fEmKorpSI3PHd+i3JXBJN3xyA6MvJv7at23HffFHwA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.18.6", "@babel/plugin-proposal-optional-chaining@^7.18.9": +"@babel/plugin-proposal-optional-chaining@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== @@ -629,7 +590,7 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.16.11", "@babel/plugin-proposal-private-methods@^7.18.6": +"@babel/plugin-proposal-private-methods@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== @@ -637,7 +598,7 @@ "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-private-property-in-object@^7.16.7", "@babel/plugin-proposal-private-property-in-object@^7.18.6": +"@babel/plugin-proposal-private-property-in-object@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== @@ -647,7 +608,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== @@ -802,14 +763,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.16.7", "@babel/plugin-transform-arrow-functions@^7.18.6": +"@babel/plugin-transform-arrow-functions@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-async-to-generator@^7.16.8", "@babel/plugin-transform-async-to-generator@^7.18.6": +"@babel/plugin-transform-async-to-generator@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== @@ -818,20 +779,13 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-remap-async-to-generator" "^7.18.6" -"@babel/plugin-transform-block-scoped-functions@^7.16.7", "@babel/plugin-transform-block-scoped-functions@^7.18.6": +"@babel/plugin-transform-block-scoped-functions@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-block-scoping@^7.16.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.6.tgz#b5f78318914615397d86a731ef2cc668796a726c" - integrity sha512-pRqwb91C42vs1ahSAWJkxOxU1RHWDn16XAa6ggQ72wjLlWyYeAcLvTtE0aM8ph3KNydy9CQF2nLYcjq1WysgxQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-transform-block-scoping@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz#f9b7e018ac3f373c81452d6ada8bd5a18928926d" @@ -839,41 +793,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-classes@^7.16.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.6.tgz#3501a8f3f4c7d5697c27a3eedbee71d68312669f" - integrity sha512-XTg8XW/mKpzAF3actL554Jl/dOYoJtv3l8fxaEczpgz84IeeVf+T1u2CSvPHuZbt0w3JkIx4rdn/MRQI7mo0HQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.6" - "@babel/helper-function-name" "^7.18.6" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - globals "^11.1.0" - -"@babel/plugin-transform-classes@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz#90818efc5b9746879b869d5ce83eb2aa48bbc3da" - integrity sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g== +"@babel/plugin-transform-classes@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz#0e61ec257fba409c41372175e7c1e606dc79bb20" + integrity sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-compilation-targets" "^7.19.0" "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.19.0" "@babel/helper-replace-supers" "^7.18.9" "@babel/helper-split-export-declaration" "^7.18.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.16.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.6.tgz#5d15eb90e22e69604f3348344c91165c5395d032" - integrity sha512-9repI4BhNrR0KenoR9vm3/cIc1tSBIo+u1WVjKCAynahj25O8zfbiE6JtAtHPGQSs4yZ+bA8mRasRP+qc+2R5A== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-transform-computed-properties@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e" @@ -881,21 +815,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-destructuring@^7.17.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.6.tgz#a98b0e42c7ffbf5eefcbcf33280430f230895c6f" - integrity sha512-tgy3u6lRp17ilY8r1kP4i2+HDUwxlVqq3RTc943eAWSzGgpU1qhiKpqZ5CMyHReIYPHdo3Kg8v8edKtDqSVEyQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-destructuring@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz#68906549c021cb231bee1db21d3b5b095f8ee292" - integrity sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA== +"@babel/plugin-transform-destructuring@^7.18.13": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz#9e03bc4a94475d62b7f4114938e6c5c33372cbf5" + integrity sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow== dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== @@ -903,13 +830,6 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-duplicate-keys@^7.16.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.6.tgz#e6c94e8cd3c9dd8a88144f7b78ae22975a7ff473" - integrity sha512-NJU26U/208+sxYszf82nmGYqVF9QN8py2HFTblPT9hbawi8+1C5a9JubODLTGFuT0qlkqVinmkwOD13s0sZktg== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-transform-duplicate-keys@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" @@ -917,7 +837,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-exponentiation-operator@^7.16.7", "@babel/plugin-transform-exponentiation-operator@^7.18.6": +"@babel/plugin-transform-exponentiation-operator@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== @@ -925,13 +845,6 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-for-of@^7.16.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.6.tgz#e0fdb813be908e91ccc9ec87b30cc2eabf046f7c" - integrity sha512-WAjoMf4wIiSsy88KmG7tgj2nFdEK7E46tArVtcgED7Bkj6Fg/tG5SbvNIOKxbFS2VFgNh6+iaPswBeQZm4ox8w== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-transform-for-of@^7.18.8": version "7.18.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" @@ -939,15 +852,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-function-name@^7.16.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.6.tgz#6a7e4ae2893d336fd1b8f64c9f92276391d0f1b4" - integrity sha512-kJha/Gbs5RjzIu0CxZwf5e3aTTSlhZnHMT8zPWnJMjNpLOUgqevg+PN5oMH68nMCXnfiMo4Bhgxqj59KHTlAnA== - dependencies: - "@babel/helper-compilation-targets" "^7.18.6" - "@babel/helper-function-name" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-transform-function-name@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" @@ -957,13 +861,6 @@ "@babel/helper-function-name" "^7.18.9" "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-literals@^7.16.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.6.tgz#9d6af353b5209df72960baf4492722d56f39a205" - integrity sha512-x3HEw0cJZVDoENXOp20HlypIHfl0zMIhMVZEBVTfmqbObIpsMxMbmU5nOEO8R7LYT+z5RORKPlTI5Hj4OsO9/Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-transform-literals@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" @@ -971,14 +868,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-member-expression-literals@^7.16.7", "@babel/plugin-transform-member-expression-literals@^7.18.6": +"@babel/plugin-transform-member-expression-literals@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-modules-amd@^7.16.7", "@babel/plugin-transform-modules-amd@^7.18.6": +"@babel/plugin-transform-modules-amd@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz#8c91f8c5115d2202f277549848874027d7172d21" integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== @@ -987,7 +884,7 @@ "@babel/helper-plugin-utils" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.17.9", "@babel/plugin-transform-modules-commonjs@^7.18.6": +"@babel/plugin-transform-modules-commonjs@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz#afd243afba166cca69892e24a8fd8c9f2ca87883" integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== @@ -997,29 +894,18 @@ "@babel/helper-simple-access" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.17.8": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.6.tgz#026511b7657d63bf5d4cf2fd4aeb963139914a54" - integrity sha512-UbPYpXxLjTw6w6yXX2BYNxF3p6QY225wcTkfQCy3OMnSlS/C3xGtwUjEzGkldb/sy6PWLiCQ3NbYfjWUTI3t4g== +"@babel/plugin-transform-modules-systemjs@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz#5f20b471284430f02d9c5059d9b9a16d4b085a1f" + integrity sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A== dependencies: "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-module-transforms" "^7.19.0" + "@babel/helper-plugin-utils" "^7.19.0" "@babel/helper-validator-identifier" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz#545df284a7ac6a05125e3e405e536c5853099a06" - integrity sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A== - dependencies: - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-validator-identifier" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.16.7", "@babel/plugin-transform-modules-umd@^7.18.6": +"@babel/plugin-transform-modules-umd@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== @@ -1027,22 +913,22 @@ "@babel/helper-module-transforms" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-named-capturing-groups-regex@^7.17.10", "@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz#c89bfbc7cc6805d692f3a49bc5fc1b630007246d" - integrity sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg== +"@babel/plugin-transform-named-capturing-groups-regex@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.0.tgz#58c52422e4f91a381727faed7d513c89d7f41ada" + integrity sha512-HDSuqOQzkU//kfGdiHBt71/hkDTApw4U/cMVgKgX7PqfB3LOaK+2GtCEsBu1dL9CkswDm0Gwehht1dCr421ULQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-regexp-features-plugin" "^7.19.0" + "@babel/helper-plugin-utils" "^7.19.0" -"@babel/plugin-transform-new-target@^7.16.7", "@babel/plugin-transform-new-target@^7.18.6": +"@babel/plugin-transform-new-target@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-object-super@^7.16.7", "@babel/plugin-transform-object-super@^7.18.6": +"@babel/plugin-transform-object-super@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== @@ -1050,21 +936,14 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-parameters@^7.16.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.6.tgz#cbe03d5a4c6385dd756034ac1baa63c04beab8dc" - integrity sha512-FjdqgMv37yVl/gwvzkcB+wfjRI8HQmc5EgOG9iGNvUY1ok+TjsoaMP7IqCDZBhkFcM5f3OPVMs6Dmp03C5k4/A== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-parameters@^7.18.6", "@babel/plugin-transform-parameters@^7.18.8": +"@babel/plugin-transform-parameters@^7.18.8": version "7.18.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a" integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-property-literals@^7.16.7", "@babel/plugin-transform-property-literals@^7.18.6": +"@babel/plugin-transform-property-literals@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== @@ -1112,7 +991,7 @@ "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.17.9", "@babel/plugin-transform-regenerator@^7.18.6": +"@babel/plugin-transform-regenerator@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== @@ -1120,7 +999,7 @@ "@babel/helper-plugin-utils" "^7.18.6" regenerator-transform "^0.15.0" -"@babel/plugin-transform-reserved-words@^7.16.7", "@babel/plugin-transform-reserved-words@^7.18.6": +"@babel/plugin-transform-reserved-words@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== @@ -1139,43 +1018,28 @@ babel-plugin-polyfill-regenerator "^0.4.0" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.16.7", "@babel/plugin-transform-shorthand-properties@^7.18.6": +"@babel/plugin-transform-shorthand-properties@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-spread@^7.16.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.6.tgz#82b080241965f1689f0a60ecc6f1f6575dbdb9d6" - integrity sha512-ayT53rT/ENF8WWexIRg9AiV9h0aIteyWn5ptfZTZQrjk/+f3WdrJGCY4c9wcgl2+MKkKPhzbYp97FTsquZpDCw== +"@babel/plugin-transform-spread@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz#dd60b4620c2fec806d60cfaae364ec2188d593b6" + integrity sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" - -"@babel/plugin-transform-spread@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz#6ea7a6297740f381c540ac56caf75b05b74fb664" - integrity sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.19.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" -"@babel/plugin-transform-sticky-regex@^7.16.7", "@babel/plugin-transform-sticky-regex@^7.18.6": +"@babel/plugin-transform-sticky-regex@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-template-literals@^7.16.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.6.tgz#b763f4dc9d11a7cce58cf9a490d82e80547db9c2" - integrity sha512-UuqlRrQmT2SWRvahW46cGSany0uTlcj8NYOS5sRGYi8FxPYPoLd5DDmMd32ZXEj2Jq+06uGVQKHxa/hJx2EzKw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-transform-template-literals@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" @@ -1183,13 +1047,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-typeof-symbol@^7.16.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.6.tgz#486bb39d5a18047358e0d04dc0d2f322f0b92e92" - integrity sha512-7m71iS/QhsPk85xSjFPovHPcH3H9qeyzsujhTc+vcdnsXavoWYJ74zx0lP5RhpC5+iDnVLO+PPMHzC11qels1g== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-transform-typeof-symbol@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" @@ -1197,13 +1054,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-unicode-escapes@^7.16.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz#0d01fb7fb2243ae1c033f65f6e3b4be78db75f27" - integrity sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-transform-unicode-escapes@^7.18.10": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" @@ -1211,7 +1061,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-unicode-regex@^7.16.7", "@babel/plugin-transform-unicode-regex@^7.18.6": +"@babel/plugin-transform-unicode-regex@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== @@ -1219,98 +1069,18 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/preset-env@^7.11.0": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.17.10.tgz#a81b093669e3eb6541bb81a23173c5963c5de69c" - integrity sha512-YNgyBHZQpeoBSRBg0xixsZzfT58Ze1iZrajvv0lJc70qDDGuGfonEnMGfWeSY0mQ3JTuCWFbMkzFRVafOyJx4g== +"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.19.0.tgz#fd18caf499a67d6411b9ded68dc70d01ed1e5da7" + integrity sha512-1YUju1TAFuzjIQqNM9WsF4U6VbD/8t3wEAlw3LFYuuEr+ywqLRcSXxFKz4DCEj+sN94l/XTDiUXYRrsvMpz9WQ== dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-compilation-targets" "^7.17.10" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-async-generator-functions" "^7.16.8" - "@babel/plugin-proposal-class-properties" "^7.16.7" - "@babel/plugin-proposal-class-static-block" "^7.17.6" - "@babel/plugin-proposal-dynamic-import" "^7.16.7" - "@babel/plugin-proposal-export-namespace-from" "^7.16.7" - "@babel/plugin-proposal-json-strings" "^7.16.7" - "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" - "@babel/plugin-proposal-numeric-separator" "^7.16.7" - "@babel/plugin-proposal-object-rest-spread" "^7.17.3" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-private-methods" "^7.16.11" - "@babel/plugin-proposal-private-property-in-object" "^7.16.7" - "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.16.7" - "@babel/plugin-transform-async-to-generator" "^7.16.8" - "@babel/plugin-transform-block-scoped-functions" "^7.16.7" - "@babel/plugin-transform-block-scoping" "^7.16.7" - "@babel/plugin-transform-classes" "^7.16.7" - "@babel/plugin-transform-computed-properties" "^7.16.7" - "@babel/plugin-transform-destructuring" "^7.17.7" - "@babel/plugin-transform-dotall-regex" "^7.16.7" - "@babel/plugin-transform-duplicate-keys" "^7.16.7" - "@babel/plugin-transform-exponentiation-operator" "^7.16.7" - "@babel/plugin-transform-for-of" "^7.16.7" - "@babel/plugin-transform-function-name" "^7.16.7" - "@babel/plugin-transform-literals" "^7.16.7" - "@babel/plugin-transform-member-expression-literals" "^7.16.7" - "@babel/plugin-transform-modules-amd" "^7.16.7" - "@babel/plugin-transform-modules-commonjs" "^7.17.9" - "@babel/plugin-transform-modules-systemjs" "^7.17.8" - "@babel/plugin-transform-modules-umd" "^7.16.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.17.10" - "@babel/plugin-transform-new-target" "^7.16.7" - "@babel/plugin-transform-object-super" "^7.16.7" - "@babel/plugin-transform-parameters" "^7.16.7" - "@babel/plugin-transform-property-literals" "^7.16.7" - "@babel/plugin-transform-regenerator" "^7.17.9" - "@babel/plugin-transform-reserved-words" "^7.16.7" - "@babel/plugin-transform-shorthand-properties" "^7.16.7" - "@babel/plugin-transform-spread" "^7.16.7" - "@babel/plugin-transform-sticky-regex" "^7.16.7" - "@babel/plugin-transform-template-literals" "^7.16.7" - "@babel/plugin-transform-typeof-symbol" "^7.16.7" - "@babel/plugin-transform-unicode-escapes" "^7.16.7" - "@babel/plugin-transform-unicode-regex" "^7.16.7" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.17.10" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" - core-js-compat "^3.22.1" - semver "^6.3.0" - -"@babel/preset-env@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.10.tgz#83b8dfe70d7eea1aae5a10635ab0a5fe60dfc0f4" - integrity sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA== - dependencies: - "@babel/compat-data" "^7.18.8" - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/compat-data" "^7.19.0" + "@babel/helper-compilation-targets" "^7.19.0" + "@babel/helper-plugin-utils" "^7.19.0" "@babel/helper-validator-option" "^7.18.6" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-async-generator-functions" "^7.18.10" + "@babel/plugin-proposal-async-generator-functions" "^7.19.0" "@babel/plugin-proposal-class-properties" "^7.18.6" "@babel/plugin-proposal-class-static-block" "^7.18.6" "@babel/plugin-proposal-dynamic-import" "^7.18.6" @@ -1344,9 +1114,9 @@ "@babel/plugin-transform-async-to-generator" "^7.18.6" "@babel/plugin-transform-block-scoped-functions" "^7.18.6" "@babel/plugin-transform-block-scoping" "^7.18.9" - "@babel/plugin-transform-classes" "^7.18.9" + "@babel/plugin-transform-classes" "^7.19.0" "@babel/plugin-transform-computed-properties" "^7.18.9" - "@babel/plugin-transform-destructuring" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.18.13" "@babel/plugin-transform-dotall-regex" "^7.18.6" "@babel/plugin-transform-duplicate-keys" "^7.18.9" "@babel/plugin-transform-exponentiation-operator" "^7.18.6" @@ -1356,9 +1126,9 @@ "@babel/plugin-transform-member-expression-literals" "^7.18.6" "@babel/plugin-transform-modules-amd" "^7.18.6" "@babel/plugin-transform-modules-commonjs" "^7.18.6" - "@babel/plugin-transform-modules-systemjs" "^7.18.9" + "@babel/plugin-transform-modules-systemjs" "^7.19.0" "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.0" "@babel/plugin-transform-new-target" "^7.18.6" "@babel/plugin-transform-object-super" "^7.18.6" "@babel/plugin-transform-parameters" "^7.18.8" @@ -1366,14 +1136,14 @@ "@babel/plugin-transform-regenerator" "^7.18.6" "@babel/plugin-transform-reserved-words" "^7.18.6" "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.18.9" + "@babel/plugin-transform-spread" "^7.19.0" "@babel/plugin-transform-sticky-regex" "^7.18.6" "@babel/plugin-transform-template-literals" "^7.18.9" "@babel/plugin-transform-typeof-symbol" "^7.18.9" "@babel/plugin-transform-unicode-escapes" "^7.18.10" "@babel/plugin-transform-unicode-regex" "^7.18.6" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.18.10" + "@babel/types" "^7.19.0" babel-plugin-polyfill-corejs2 "^0.3.2" babel-plugin-polyfill-corejs3 "^0.5.3" babel-plugin-polyfill-regenerator "^0.4.0" @@ -1475,18 +1245,26 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.16.7", "@babel/types@^7.17.10", "@babel/types@^7.18.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.6.tgz#5d781dd10a3f0c9f1f931bd19de5eb26ec31acf0" - integrity sha512-NdBNzPDwed30fZdDQtVR7ZgaO4UKjuaQFH9VArS+HMnurlOY0JWN+4ROlu/iapMFwjRQU4pOG4StZfDmulEwGA== +"@babel/traverse@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.0.tgz#eb9c561c7360005c592cc645abafe0c3c4548eed" + integrity sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA== dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - to-fast-properties "^2.0.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.0" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.19.0" + "@babel/types" "^7.19.0" + debug "^4.1.0" + globals "^11.1.0" -"@babel/types@^7.18.10", "@babel/types@^7.18.13", "@babel/types@^7.18.9": - version "7.18.13" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.13.tgz#30aeb9e514f4100f7c1cb6e5ba472b30e48f519a" - integrity sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ== +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.16.7", "@babel/types@^7.17.10", "@babel/types@^7.18.10", "@babel/types@^7.18.13", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.0.tgz#75f21d73d73dc0351f3368d28db73465f4814600" + integrity sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA== dependencies: "@babel/helper-string-parser" "^7.18.10" "@babel/helper-validator-identifier" "^7.18.6" @@ -3053,15 +2831,6 @@ babel-plugin-macros@^3.0.1: cosmiconfig "^7.0.0" resolve "^1.19.0" -babel-plugin-polyfill-corejs2@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" - integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.1" - semver "^6.1.1" - babel-plugin-polyfill-corejs2@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz#e4c31d4c89b56f3cf85b92558954c66b54bd972d" @@ -3071,14 +2840,6 @@ babel-plugin-polyfill-corejs2@^0.3.2: "@babel/helper-define-polyfill-provider" "^0.3.2" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" - integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - core-js-compat "^3.21.0" - babel-plugin-polyfill-corejs3@^0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7" @@ -3087,13 +2848,6 @@ babel-plugin-polyfill-corejs3@^0.5.3: "@babel/helper-define-polyfill-provider" "^0.3.2" core-js-compat "^3.21.0" -babel-plugin-polyfill-regenerator@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" - integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - babel-plugin-polyfill-regenerator@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz#8f51809b6d5883e07e71548d75966ff7635527fe" From bc58833bba222810893d9b0601508a40233275c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Sep 2022 21:55:47 +0900 Subject: [PATCH 285/646] Bump eslint-plugin-react from 7.31.1 to 7.31.6 (#19125) Bumps [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) from 7.31.1 to 7.31.6. - [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases) - [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/CHANGELOG.md) - [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.31.1...v7.31.6) --- updated-dependencies: - dependency-name: eslint-plugin-react dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 47826e54c60..5a75ec6386a 100644 --- a/package.json +++ b/package.json @@ -152,7 +152,7 @@ "eslint-plugin-import": "~2.26.0", "eslint-plugin-jsx-a11y": "~6.6.1", "eslint-plugin-promise": "~6.0.1", - "eslint-plugin-react": "~7.31.1", + "eslint-plugin-react": "~7.31.6", "jest": "^28.1.3", "jest-environment-jsdom": "^28.1.3", "postcss-scss": "^4.0.4", diff --git a/yarn.lock b/yarn.lock index 9cdeb288de3..49aac48038d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4813,10 +4813,10 @@ eslint-plugin-promise@~6.0.1: resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.0.1.tgz#a8cddf96a67c4059bdabf4d724a29572188ae423" integrity sha512-uM4Tgo5u3UWQiroOyDEsYcVMOo7re3zmno0IZmB5auxoaQNIceAbXEkSt8RNrKtaYehARHG06pYK6K1JhtP0Zw== -eslint-plugin-react@~7.31.1: - version "7.31.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.1.tgz#d29793ed27743f3ed8a473c347b1bf5a0a8fb9af" - integrity sha512-j4/2xWqt/R7AZzG8CakGHA6Xa/u7iR8Q3xCxY+AUghdT92bnIDOBEefV456OeH0QvBcroVc0eyvrrLSyQGYIfg== +eslint-plugin-react@~7.31.6: + version "7.31.6" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.6.tgz#55ec176be94917ecde3f3ca0e1363073193e241a" + integrity sha512-CXu4eu28sb8Sd2+cyUYsJVyDvpTlaXPG+bOzzpS9IzZKtye96AYX3ZmHQ6ayn/OAIQ/ufDJP8ElPWd63Pepn9w== dependencies: array-includes "^3.1.5" array.prototype.flatmap "^1.3.0" From 0b9167494b25328bff037a2f3e56c0dbddcf6ddc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Sep 2022 21:59:06 +0900 Subject: [PATCH 286/646] Bump sass from 1.54.5 to 1.54.8 (#19118) Bumps [sass](https://github.com/sass/dart-sass) from 1.54.5 to 1.54.8. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.54.5...1.54.8) --- updated-dependencies: - dependency-name: sass dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5a75ec6386a..4cefb4d00b5 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "requestidlecallback": "^0.3.0", "reselect": "^4.1.6", "rimraf": "^3.0.2", - "sass": "^1.54.5", + "sass": "^1.54.8", "sass-loader": "^10.2.0", "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", diff --git a/yarn.lock b/yarn.lock index 49aac48038d..75f5e86bccd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10096,10 +10096,10 @@ sass-loader@^10.2.0: schema-utils "^3.0.0" semver "^7.3.2" -sass@^1.54.5: - version "1.54.5" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.5.tgz#93708f5560784f6ff2eab8542ade021a4a947b3a" - integrity sha512-p7DTOzxkUPa/63FU0R3KApkRHwcVZYC0PLnLm5iyZACyp15qSi32x7zVUhRdABAATmkALqgGrjCJAcWvobmhHw== +sass@^1.54.8: + version "1.54.8" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.8.tgz#4adef0dd86ea2b1e4074f551eeda4fc5f812a996" + integrity sha512-ib4JhLRRgbg6QVy6bsv5uJxnJMTS2soVcCp9Y88Extyy13A8vV0G1fAwujOzmNkFQbR3LvedudAMbtuNRPbQww== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From 7ceab5bc040118f7283ddfac1ce99d817429ca95 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Sep 2022 22:00:06 +0900 Subject: [PATCH 287/646] Bump stylelint-config-standard-scss from 4.0.0 to 5.0.0 (#18829) Bumps [stylelint-config-standard-scss](https://github.com/stylelint-scss/stylelint-config-standard-scss) from 4.0.0 to 5.0.0. - [Release notes](https://github.com/stylelint-scss/stylelint-config-standard-scss/releases) - [Changelog](https://github.com/stylelint-scss/stylelint-config-standard-scss/blob/main/CHANGELOG.md) - [Commits](https://github.com/stylelint-scss/stylelint-config-standard-scss/compare/v4.0.0...v5.0.0) --- updated-dependencies: - dependency-name: stylelint-config-standard-scss dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 40 ++++++++++++++++++++-------------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index 4cefb4d00b5..db0c0a05daa 100644 --- a/package.json +++ b/package.json @@ -161,7 +161,7 @@ "react-intl-translations-manager": "^5.0.3", "react-test-renderer": "^16.14.0", "stylelint": "^14.11.0", - "stylelint-config-standard-scss": "^4.0.0", + "stylelint-config-standard-scss": "^5.0.0", "webpack-dev-server": "^3.11.3", "yargs": "^17.5.1" }, diff --git a/yarn.lock b/yarn.lock index 75f5e86bccd..d0e249e350f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10848,34 +10848,34 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" -stylelint-config-recommended-scss@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-6.0.0.tgz#02baeace2b7f30f80369b6ee2da77aae5a01bff6" - integrity sha512-6QOe2/OzXV2AP5FE12A7+qtKdZik7Saf42SMMl84ksVBBPpTdrV+9HaCbPYiRMiwELY9hXCVdH4wlJ+YJb5eig== +stylelint-config-recommended-scss@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-7.0.0.tgz#db16b6ae6055e72e3398916c0f13d6eb685902a2" + integrity sha512-rGz1J4rMAyJkvoJW4hZasuQBB7y9KIrShb20l9DVEKKZSEi1HAy0vuNlR8HyCKy/jveb/BdaQFcoiYnmx4HoiA== dependencies: postcss-scss "^4.0.2" - stylelint-config-recommended "^7.0.0" + stylelint-config-recommended "^8.0.0" stylelint-scss "^4.0.0" -stylelint-config-recommended@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz#7497372ae83ab7a6fffc18d7d7b424c6480ae15e" - integrity sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q== +stylelint-config-recommended@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-8.0.0.tgz#7736be9984246177f017c39ec7b1cd0f19ae9117" + integrity sha512-IK6dWvE000+xBv9jbnHOnBq01gt6HGVB2ZTsot+QsMpe82doDQ9hvplxfv4YnpEuUwVGGd9y6nbaAnhrjcxhZQ== -stylelint-config-standard-scss@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/stylelint-config-standard-scss/-/stylelint-config-standard-scss-4.0.0.tgz#9c1dc99eea73394bf22ad15648a5b1d9b74ff649" - integrity sha512-xizu8PTEyB6zYXBiVg6VtvUYn9m57x+6ZtaOdaxsfpbe5eagLPGNlbYnKfm/CfN69ArUpnwR6LjgsTHzlGbtXQ== +stylelint-config-standard-scss@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-standard-scss/-/stylelint-config-standard-scss-5.0.0.tgz#afc5e43c73e7a15875b8f30f54204b01a2634743" + integrity sha512-zoXLibojHZYPFjtkc4STZtAJ2yGTq3Bb4MYO0oiyO6f/vNxDKRcSDZYoqN260Gv2eD5niQIr1/kr5SXlFj9kcQ== dependencies: - stylelint-config-recommended-scss "^6.0.0" - stylelint-config-standard "^25.0.0" + stylelint-config-recommended-scss "^7.0.0" + stylelint-config-standard "^26.0.0" -stylelint-config-standard@^25.0.0: - version "25.0.0" - resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-25.0.0.tgz#2c916984e6655d40d6e8748b19baa8603b680bff" - integrity sha512-21HnP3VSpaT1wFjFvv9VjvOGDtAviv47uTp3uFmzcN+3Lt+RYRv6oAplLaV51Kf792JSxJ6svCJh/G18E9VnCA== +stylelint-config-standard@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-26.0.0.tgz#4701b8d582d34120eec7d260ba779e4c2d953635" + integrity sha512-hUuB7LaaqM8abvkOO84wh5oYSkpXgTzHu2Zza6e7mY+aOmpNTjoFBRxSLlzY0uAOMWEFx0OMKzr+reG1BUtcqQ== dependencies: - stylelint-config-recommended "^7.0.0" + stylelint-config-recommended "^8.0.0" stylelint-scss@^4.0.0: version "4.2.0" From b312f35d245fad54bd0321eef740c6a30a5b1ce4 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 11 Sep 2022 15:19:58 +0200 Subject: [PATCH 288/646] New Crowdin updates (#19049) * New translations en.yml (Spanish, Argentina) * New translations en.yml (Croatian) * New translations en.yml (Kazakh) * New translations en.yml (Estonian) * New translations en.yml (Latvian) * New translations en.yml (Malay) * New translations en.yml (Corsican) * New translations en.yml (Sardinian) * New translations en.yml (Kabyle) * New translations en.yml (Ido) * New translations simple_form.en.yml (Ido) * New translations en.yml (Ukrainian) * New translations en.yml (Spanish) * New translations en.yml (Ido) * New translations simple_form.en.yml (Ido) * New translations en.yml (Portuguese) * New translations en.yml (Spanish, Argentina) * New translations en.json (Chinese Traditional) * New translations en.yml (Danish) * New translations en.yml (Chinese Traditional) * New translations en.yml (Chinese Simplified) * New translations en.yml (Chinese Simplified) * New translations en.yml (Latvian) * New translations en.yml (Latvian) * New translations en.yml (Hungarian) * New translations en.yml (Polish) * New translations en.yml (Turkish) * New translations en.yml (Italian) * New translations en.yml (Slovenian) * New translations en.yml (German) * New translations en.yml (Icelandic) * New translations en.json (Galician) * New translations en.json (Galician) * New translations en.yml (Galician) * New translations en.yml (Portuguese, Brazilian) * New translations en.yml (Portuguese, Brazilian) * New translations en.yml (Portuguese, Brazilian) * New translations en.yml (Portuguese, Brazilian) * New translations activerecord.en.yml (Portuguese, Brazilian) * New translations en.yml (Spanish) * New translations en.yml (Spanish) * New translations en.json (Scottish Gaelic) * New translations en.yml (Scottish Gaelic) * New translations en.yml (Spanish, Argentina) * New translations en.yml (Spanish, Mexico) * New translations en.yml (Thai) * New translations simple_form.en.yml (Norwegian) * New translations simple_form.en.yml (Hungarian) * New translations simple_form.en.yml (Armenian) * New translations simple_form.en.yml (Italian) * New translations simple_form.en.yml (Japanese) * New translations simple_form.en.yml (Georgian) * New translations simple_form.en.yml (Korean) * New translations simple_form.en.yml (Dutch) * New translations simple_form.en.yml (Polish) * New translations simple_form.en.yml (Portuguese) * New translations simple_form.en.yml (Slovak) * New translations simple_form.en.yml (Slovenian) * New translations simple_form.en.yml (Albanian) * New translations simple_form.en.yml (Serbian (Cyrillic)) * New translations simple_form.en.yml (Swedish) * New translations simple_form.en.yml (Turkish) * New translations simple_form.en.yml (Ukrainian) * New translations simple_form.en.yml (Basque) * New translations en.yml (Finnish) * New translations en.yml (Japanese) * New translations en.yml (German) * New translations simple_form.en.yml (German) * New translations en.yml (Russian) * New translations simple_form.en.yml (Russian) * New translations en.yml (Slovak) * New translations en.yml (Norwegian Nynorsk) * New translations simple_form.en.yml (Norwegian Nynorsk) * New translations en.yml (Kurmanji (Kurdish)) * New translations simple_form.en.yml (Kurmanji (Kurdish)) * New translations simple_form.en.yml (Frisian) * New translations simple_form.en.yml (Romanian) * New translations simple_form.en.yml (French) * New translations simple_form.en.yml (Spanish) * New translations simple_form.en.yml (Afrikaans) * New translations simple_form.en.yml (Arabic) * New translations simple_form.en.yml (Bulgarian) * New translations simple_form.en.yml (Catalan) * New translations simple_form.en.yml (Czech) * New translations simple_form.en.yml (Danish) * New translations simple_form.en.yml (Greek) * New translations simple_form.en.yml (Chinese Traditional) * New translations simple_form.en.yml (Sardinian) * New translations simple_form.en.yml (Sinhala) * New translations simple_form.en.yml (Scottish Gaelic) * New translations simple_form.en.yml (Asturian) * New translations simple_form.en.yml (Occitan) * New translations simple_form.en.yml (Serbian (Latin)) * New translations simple_form.en.yml (Sorani (Kurdish)) * New translations simple_form.en.yml (Corsican) * New translations simple_form.en.yml (Malayalam) * New translations simple_form.en.yml (Kabyle) * New translations simple_form.en.yml (Standard Moroccan Tamazight) * New translations en.yml (Ukrainian) * New translations en.yml (French) * New translations en.yml (Spanish) * New translations simple_form.en.yml (Breton) * New translations simple_form.en.yml (Tatar) * New translations simple_form.en.yml (Vietnamese) * New translations simple_form.en.yml (Thai) * New translations simple_form.en.yml (Galician) * New translations simple_form.en.yml (Icelandic) * New translations simple_form.en.yml (Portuguese, Brazilian) * New translations simple_form.en.yml (Indonesian) * New translations simple_form.en.yml (Persian) * New translations simple_form.en.yml (Tamil) * New translations simple_form.en.yml (Spanish, Argentina) * New translations simple_form.en.yml (Spanish, Mexico) * New translations simple_form.en.yml (Bengali) * New translations simple_form.en.yml (Croatian) * New translations simple_form.en.yml (Chinese Traditional, Hong Kong) * New translations simple_form.en.yml (Kazakh) * New translations simple_form.en.yml (Estonian) * New translations simple_form.en.yml (Latvian) * New translations simple_form.en.yml (Welsh) * New translations simple_form.en.yml (Esperanto) * New translations en.yml (Arabic) * New translations en.yml (Spanish, Mexico) * New translations en.yml (Vietnamese) * New translations en.yml (Galician) * New translations en.yml (Icelandic) * New translations en.yml (Portuguese, Brazilian) * New translations en.yml (Indonesian) * New translations en.yml (Persian) * New translations en.yml (Spanish, Argentina) * New translations en.yml (Chinese Simplified) * New translations en.yml (Kazakh) * New translations en.yml (Estonian) * New translations en.yml (Latvian) * New translations en.yml (Welsh) * New translations en.yml (Chinese Traditional) * New translations en.yml (Turkish) * New translations en.yml (Catalan) * New translations en.yml (Czech) * New translations en.yml (Danish) * New translations en.yml (Greek) * New translations en.yml (Basque) * New translations en.yml (Hebrew) * New translations en.yml (Hungarian) * New translations en.yml (Italian) * New translations en.yml (Korean) * New translations en.yml (Dutch) * New translations en.yml (Norwegian) * New translations en.yml (Polish) * New translations en.yml (Portuguese) * New translations en.yml (Slovenian) * New translations en.yml (Albanian) * New translations en.yml (Chinese Traditional, Hong Kong) * New translations en.yml (Sorani (Kurdish)) * New translations en.yml (Ido) * New translations en.yml (Sardinian) * New translations en.yml (Corsican) * New translations en.yml (Scottish Gaelic) * New translations en.yml (Sinhala) * New translations en.json (Vietnamese) * New translations en.yml (Vietnamese) * New translations simple_form.en.yml (Vietnamese) * New translations simple_form.en.yml (Spanish, Argentina) * New translations en.yml (Vietnamese) * New translations en.yml (Spanish, Argentina) * New translations simple_form.en.yml (Latvian) * New translations en.yml (Latvian) * New translations en.json (Asturian) * New translations en.json (Russian) * New translations en.yml (Russian) * New translations simple_form.en.yml (Russian) * New translations simple_form.en.yml (Catalan) * New translations en.yml (Catalan) * New translations activerecord.en.yml (Russian) * New translations en.json (Russian) * New translations en.yml (Russian) * New translations simple_form.en.yml (Spanish) * New translations simple_form.en.yml (Hungarian) * New translations en.yml (Spanish) * New translations en.yml (Hungarian) * New translations doorkeeper.en.yml (Russian) * New translations simple_form.en.yml (Portuguese) * New translations simple_form.en.yml (Turkish) * New translations en.yml (Portuguese) * New translations en.yml (Turkish) * New translations simple_form.en.yml (Polish) * New translations en.yml (Polish) * New translations en.yml (Kurmanji (Kurdish)) * New translations simple_form.en.yml (Kurmanji (Kurdish)) * New translations en.yml (Czech) * New translations en.json (Russian) * New translations en.yml (Kurmanji (Kurdish)) * New translations simple_form.en.yml (Kurmanji (Kurdish)) * New translations simple_form.en.yml (Danish) * New translations simple_form.en.yml (Ukrainian) * New translations en.yml (Ukrainian) * New translations en.yml (Danish) * New translations simple_form.en.yml (Czech) * New translations simple_form.en.yml (Chinese Traditional) * New translations en.yml (Czech) * New translations en.yml (Chinese Traditional) * New translations en.yml (Czech) * New translations simple_form.en.yml (Slovenian) * New translations en.yml (Slovenian) * New translations en.yml (Russian) * New translations simple_form.en.yml (Italian) * New translations en.yml (Italian) * New translations simple_form.en.yml (Korean) * New translations en.yml (Korean) * New translations en.yml (Korean) * New translations en.yml (German) * New translations en.yml (Catalan) * New translations en.yml (German) * New translations simple_form.en.yml (German) * New translations simple_form.en.yml (Galician) * New translations en.yml (Galician) * New translations en.yml (Thai) * New translations en.json (Thai) * New translations simple_form.en.yml (Thai) * New translations simple_form.en.yml (Polish) * New translations en.yml (Polish) * New translations en.json (Icelandic) * New translations simple_form.en.yml (Icelandic) * New translations en.yml (Icelandic) * New translations en.yml (Czech) * New translations en.yml (German) * New translations en.json (Hebrew) * New translations simple_form.en.yml (Hebrew) * New translations en.yml (Chinese Simplified) * New translations en.json (Bulgarian) * New translations en.json (Bulgarian) * New translations en.yml (Thai) * New translations en.json (Thai) * New translations en.yml (Ido) * New translations simple_form.en.yml (Ido) * New translations en.yml (Ido) * New translations en.json (Ido) * New translations en.yml (German) * New translations en.yml (German) * New translations en.json (German) * New translations en.yml (German) * New translations simple_form.en.yml (German) * New translations en.json (German) * New translations devise.en.yml (German) * New translations doorkeeper.en.yml (German) * New translations en.json (Tamil) * New translations en.json (Tamil) * Run `yarn manage:translations` * Run `bundle exec i18n-tasks normalize` Co-authored-by: Yamagishi Kazutoshi --- app/javascript/mastodon/locales/ast.json | 8 +- app/javascript/mastodon/locales/bg.json | 38 +-- app/javascript/mastodon/locales/ca.json | 38 +-- app/javascript/mastodon/locales/da.json | 34 +-- app/javascript/mastodon/locales/de.json | 60 ++--- app/javascript/mastodon/locales/es-AR.json | 34 +-- app/javascript/mastodon/locales/es-MX.json | 2 +- app/javascript/mastodon/locales/es.json | 34 +-- app/javascript/mastodon/locales/fi.json | 34 +-- app/javascript/mastodon/locales/gd.json | 2 +- app/javascript/mastodon/locales/gl.json | 34 +-- app/javascript/mastodon/locales/he.json | 50 ++-- app/javascript/mastodon/locales/hu.json | 34 +-- app/javascript/mastodon/locales/io.json | 34 +-- app/javascript/mastodon/locales/is.json | 36 +-- app/javascript/mastodon/locales/it.json | 34 +-- app/javascript/mastodon/locales/ko.json | 34 +-- app/javascript/mastodon/locales/ku.json | 34 +-- app/javascript/mastodon/locales/lv.json | 34 +-- app/javascript/mastodon/locales/pl.json | 34 +-- app/javascript/mastodon/locales/pt-PT.json | 34 +-- app/javascript/mastodon/locales/ru.json | 50 ++-- app/javascript/mastodon/locales/sk.json | 10 +- app/javascript/mastodon/locales/sl.json | 34 +-- app/javascript/mastodon/locales/ta.json | 48 ++-- app/javascript/mastodon/locales/th.json | 24 +- app/javascript/mastodon/locales/tr.json | 34 +-- app/javascript/mastodon/locales/uk.json | 34 +-- app/javascript/mastodon/locales/vi.json | 34 +-- app/javascript/mastodon/locales/zh-CN.json | 34 +-- app/javascript/mastodon/locales/zh-TW.json | 34 +-- config/locales/activerecord.pt-BR.yml | 10 + config/locales/activerecord.ru.yml | 4 + config/locales/ar.yml | 17 -- config/locales/ast.yml | 3 - config/locales/bg.yml | 6 - config/locales/br.yml | 1 - config/locales/ca.yml | 57 +++-- config/locales/ckb.yml | 12 - config/locales/co.yml | 13 - config/locales/cs.yml | 33 +-- config/locales/cy.yml | 16 -- config/locales/da.yml | 46 ++-- config/locales/de.yml | 281 +++++++++++---------- config/locales/devise.de.yml | 18 +- config/locales/devise.hu.yml | 2 +- config/locales/doorkeeper.de.yml | 6 +- config/locales/doorkeeper.ru.yml | 7 +- config/locales/el.yml | 15 -- config/locales/eo.yml | 13 - config/locales/es-AR.yml | 46 ++-- config/locales/es-MX.yml | 50 ++-- config/locales/es.yml | 46 ++-- config/locales/et.yml | 12 - config/locales/eu.yml | 13 - config/locales/fa.yml | 13 - config/locales/fi.yml | 99 ++++++-- config/locales/fr.yml | 16 -- config/locales/fy.yml | 2 - config/locales/gd.yml | 22 +- config/locales/gl.yml | 46 ++-- config/locales/he.yml | 38 ++- config/locales/hr.yml | 4 - config/locales/hu.yml | 65 +++-- config/locales/hy.yml | 5 - config/locales/id.yml | 14 - config/locales/io.yml | 55 +++- config/locales/is.yml | 46 ++-- config/locales/it.yml | 57 +++-- config/locales/ja.yml | 14 - config/locales/ka.yml | 9 - config/locales/kab.yml | 5 - config/locales/kk.yml | 12 - config/locales/ko.yml | 39 ++- config/locales/ku.yml | 57 +++-- config/locales/lt.yml | 6 - config/locales/lv.yml | 68 +++-- config/locales/ml.yml | 2 - config/locales/ms.yml | 5 - config/locales/nl.yml | 13 - config/locales/nn.yml | 12 - config/locales/no.yml | 12 - config/locales/oc.yml | 9 - config/locales/pl.yml | 36 ++- config/locales/pt-BR.yml | 85 +++++-- config/locales/pt-PT.yml | 57 +++-- config/locales/ru.yml | 41 ++- config/locales/sc.yml | 13 - config/locales/si.yml | 16 -- config/locales/simple_form.ca.yml | 1 + config/locales/simple_form.cs.yml | 10 + config/locales/simple_form.da.yml | 1 + config/locales/simple_form.de.yml | 29 ++- config/locales/simple_form.es-AR.yml | 1 + config/locales/simple_form.es-MX.yml | 2 + config/locales/simple_form.es.yml | 1 + config/locales/simple_form.fi.yml | 2 + config/locales/simple_form.gl.yml | 1 + config/locales/simple_form.he.yml | 3 + config/locales/simple_form.hu.yml | 3 +- config/locales/simple_form.io.yml | 3 + config/locales/simple_form.is.yml | 5 +- config/locales/simple_form.it.yml | 1 + config/locales/simple_form.ko.yml | 1 + config/locales/simple_form.ku.yml | 3 +- config/locales/simple_form.lv.yml | 1 + config/locales/simple_form.pl.yml | 2 + config/locales/simple_form.pt-PT.yml | 1 + config/locales/simple_form.ru.yml | 1 + config/locales/simple_form.sl.yml | 1 + config/locales/simple_form.th.yml | 1 + config/locales/simple_form.tr.yml | 1 + config/locales/simple_form.uk.yml | 1 + config/locales/simple_form.vi.yml | 1 + config/locales/simple_form.zh-CN.yml | 4 +- config/locales/simple_form.zh-TW.yml | 1 + config/locales/sk.yml | 14 - config/locales/sl.yml | 54 ++-- config/locales/sq.yml | 16 -- config/locales/sr-Latn.yml | 7 - config/locales/sr.yml | 10 - config/locales/sv.yml | 10 - config/locales/th.yml | 35 ++- config/locales/tr.yml | 44 ++-- config/locales/uk.yml | 72 ++++-- config/locales/vi.yml | 39 ++- config/locales/zh-CN.yml | 42 +-- config/locales/zh-HK.yml | 12 - config/locales/zh-TW.yml | 39 ++- 129 files changed, 1692 insertions(+), 1516 deletions(-) diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index dba626299b2..50fc3f25ce1 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -93,8 +93,8 @@ "community.column_settings.local_only": "Local only", "community.column_settings.media_only": "Namái multimedia", "community.column_settings.remote_only": "Remote only", - "compose.language.change": "Change language", - "compose.language.search": "Search languages...", + "compose.language.change": "Camudar la llingua", + "compose.language.search": "Buscar llingües…", "compose_form.direct_message_warning_learn_more": "Saber más", "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.", @@ -149,7 +149,7 @@ "directory.recently_active": "Actividá recién", "embed.instructions": "Empotra esti estáu nun sitiu web copiando'l códigu d'embaxo.", "embed.preview": "Asina ye cómo va vese:", - "emoji_button.activity": "Actividaes", + "emoji_button.activity": "Actividá", "emoji_button.clear": "Clear", "emoji_button.custom": "Custom", "emoji_button.flags": "Banderes", @@ -170,7 +170,7 @@ "empty_column.blocks": "Entá nun bloquiesti a nengún usuariu.", "empty_column.bookmarked_statuses": "Entá nun tienes nengún barritu en Marcadores. Cuando amiestes unu, va amosase equí.", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", - "empty_column.direct": "Entá nun tienes nengún mensaxe direutu. Cuando unvies o recibas dalgún, apaez equí.", + "empty_column.direct": "Entá nun tienes nengún mensaxe direutu. Cuando unvies o recibas dalgún, apaecen equí.", "empty_column.domain_blocks": "Entá nun hai dominios anubríos.", "empty_column.explore_statuses": "Nothing is trending right now. Check back later!", "empty_column.favourited_statuses": "Entá nun tienes nengún barritu en Favoritos. Cuando amiestes unu, va amosase equí.", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 4ded919e043..ebe79503922 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -18,12 +18,12 @@ "account.followers": "Последователи", "account.followers.empty": "Все още никой не следва този потребител.", "account.followers_counter": "{count, plural, one {{counter} Последовател} other {{counter} Последователи}}", - "account.following": "Following", + "account.following": "Последвани", "account.following_counter": "{count, plural, one {{counter} Последван} other {{counter} Последвани}}", "account.follows.empty": "Този потребител все още не следва никого.", "account.follows_you": "Твой последовател", "account.hide_reblogs": "Скриване на споделяния от @{name}", - "account.joined": "Joined {date}", + "account.joined": "Присъединил се на {date}", "account.link_verified_on": "Собствеността върху тази връзка е проверена на {date}", "account.locked_info": "Този акаунт е поверително заключен. Собственикът преглежда ръчно кой може да го следва.", "account.media": "Мултимедия", @@ -50,9 +50,9 @@ "account_note.placeholder": "Click to add a note", "admin.dashboard.daily_retention": "User retention rate by day after sign-up", "admin.dashboard.monthly_retention": "User retention rate by month after sign-up", - "admin.dashboard.retention.average": "Average", + "admin.dashboard.retention.average": "Средно", "admin.dashboard.retention.cohort": "Sign-up month", - "admin.dashboard.retention.cohort_size": "New users", + "admin.dashboard.retention.cohort_size": "Нови потребители", "alert.rate_limited.message": "Моля, опитайте отново след {retry_time, time, medium}.", "alert.rate_limited.title": "Скоростта е ограничена", "alert.unexpected.message": "Възникна неочаквана грешка.", @@ -71,7 +71,7 @@ "column.blocks": "Блокирани потребители", "column.bookmarks": "Отметки", "column.community": "Локална емисия", - "column.direct": "Direct messages", + "column.direct": "Лични съобщения", "column.directory": "Преглед на профили", "column.domain_blocks": "Hidden domains", "column.favourites": "Любими", @@ -124,8 +124,8 @@ "confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete_list.confirm": "Изтриване", "confirmations.delete_list.message": "Сигурни ли сте, че искате да изтриете окончателно този списък?", - "confirmations.discard_edit_media.confirm": "Discard", - "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", + "confirmations.discard_edit_media.confirm": "Отмени", + "confirmations.discard_edit_media.message": "Имате незапазени промени на описанието или прегледа на медията, отмяна въпреки това?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.", "confirmations.logout.confirm": "Излизане", @@ -143,14 +143,14 @@ "conversation.mark_as_read": "Маркиране като прочетено", "conversation.open": "Преглед на разговор", "conversation.with": "С {names}", - "directory.federated": "From known fediverse", + "directory.federated": "От познат федивърс", "directory.local": "Само от {domain}", "directory.new_arrivals": "Новодошли", "directory.recently_active": "Наскоро активни", "embed.instructions": "Embed this status on your website by copying the code below.", "embed.preview": "Ето как ще изглежда:", "emoji_button.activity": "Дейност", - "emoji_button.clear": "Clear", + "emoji_button.clear": "Изчисти", "emoji_button.custom": "Персонализирано", "emoji_button.flags": "Знамена", "emoji_button.food": "Храна и напитки", @@ -170,12 +170,12 @@ "empty_column.blocks": "Не сте блокирали потребители все още.", "empty_column.bookmarked_statuses": "Все още нямате отметнати публикации. Когато отметнете някоя, тя ще се покаже тук.", "empty_column.community": "Локалната емисия е празна. Напишете нещо публично, за да започнете!", - "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.direct": "Все още нямате лични съобщения. Когато изпратите или получите ще се покаже тук.", "empty_column.domain_blocks": "There are no hidden domains yet.", - "empty_column.explore_statuses": "Nothing is trending right now. Check back later!", + "empty_column.explore_statuses": "Няма нищо популярно в момента. Проверете пак по-късно!", "empty_column.favourited_statuses": "Все още нямате любими публикации. Когато поставите някоя в любими, тя ще се покаже тук.", "empty_column.favourites": "Все още никой не е поставил тази публикация в любими. Когато някой го направи, ще се покаже тук.", - "empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.", + "empty_column.follow_recommendations": "Изглежда, че няма генерирани предложения за вас. Можете да опитате да търсите за хора, които знаете или да разгледате популярните тагове.", "empty_column.follow_requests": "Все още нямате заявки за последване. Когато получите такава, тя ще се покаже тук.", "empty_column.hashtag": "В този хаштаг няма нищо все още.", "empty_column.home": "Вашата начална емисия е празна! Посетете {public} или използвайте търсене, за да започнете и да се запознаете с други потребители.", @@ -191,12 +191,12 @@ "error.unexpected_crash.next_steps_addons": "Опитайте да ги деактивирате и да опресните страницата. Ако това не помогне, може все още да използвате Mastodon чрез различен браузър или приложение.", "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", "errors.unexpected_crash.report_issue": "Сигнал за проблем", - "explore.search_results": "Search results", - "explore.suggested_follows": "For you", - "explore.title": "Explore", - "explore.trending_links": "News", - "explore.trending_statuses": "Posts", - "explore.trending_tags": "Hashtags", + "explore.search_results": "Резултати от търсенето", + "explore.suggested_follows": "За вас", + "explore.title": "Разглеждане", + "explore.trending_links": "Новини", + "explore.trending_statuses": "Публикации", + "explore.trending_tags": "Тагове", "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", "filter_modal.added.context_mismatch_title": "Context mismatch!", "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", @@ -213,7 +213,7 @@ "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", "filter_modal.select_filter.title": "Filter this post", "filter_modal.title.status": "Filter a post", - "follow_recommendations.done": "Done", + "follow_recommendations.done": "Готово", "follow_recommendations.heading": "Следвайте хора, които харесвате, за да виждате техните съобщения! Ето някои предложения.", "follow_recommendations.lead": "Съобщения от хора, които следвате, ще се показват в хронологичен ред на вашата главна страница. Не се страхувайте, че ще сгрешите, по всяко време много лесно можете да спрете да ги следвате!", "follow_request.authorize": "Упълномощаване", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index f67a0f3fcc2..c3fe88121c5 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -197,22 +197,22 @@ "explore.trending_links": "Notícies", "explore.trending_statuses": "Publicacions", "explore.trending_tags": "Etiquetes", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Aquesta categoria del filtr no aplica al context en el que has accedit a aquest apunt. Si vols que l'apunt sigui filtrat també en aquest context, hauràs d'editar el filtre.", + "filter_modal.added.context_mismatch_title": "El context no coincideix!", + "filter_modal.added.expired_explanation": "La categoria d'aquest filtre ha caducat, necesitaràs canviar la seva data de caducitat per a aplicar-la.", + "filter_modal.added.expired_title": "Filtre caducat!", + "filter_modal.added.review_and_configure": "Per a revisar i configurar aquesta categoria de filtre, ves a {settings_link}.", + "filter_modal.added.review_and_configure_title": "Configuració del filtre", + "filter_modal.added.settings_link": "pàgina de configuració", + "filter_modal.added.short_explanation": "Aquest apunt s'ha afegit a la següent categoria de filtre: {title}.", + "filter_modal.added.title": "Filtre afegit!", + "filter_modal.select_filter.context_mismatch": "no aplica en aquest context", + "filter_modal.select_filter.expired": "caducat", + "filter_modal.select_filter.prompt_new": "Nova categoria: {name}", + "filter_modal.select_filter.search": "Cerca o crea", + "filter_modal.select_filter.subtitle": "Usa una categoria existent o crea una nova", + "filter_modal.select_filter.title": "Filtra aquest apunt", + "filter_modal.title.status": "Filtre un apunt", "follow_recommendations.done": "Fet", "follow_recommendations.heading": "Segueix a la gent de la que t'agradaria veure les seves publicacions! Aquí hi ha algunes recomanacions.", "follow_recommendations.lead": "Les publicacions del usuaris que segueixes es mostraran en ordre cronològic en la teva línia de temps Inici. No tinguis por en cometre errors, pots fàcilment deixar de seguir-los en qualsevol moment!", @@ -238,7 +238,7 @@ "hashtag.column_settings.tag_mode.none": "Cap d’aquests", "hashtag.column_settings.tag_toggle": "Inclou etiquetes addicionals per a aquesta columna", "hashtag.follow": "Segueix etiqueta", - "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.total_volume": "Volumen total en els darrers {days, plural, one {day} other {{days} dies}}", "hashtag.unfollow": "Deixa de seguir etiqueta", "home.column_settings.basic": "Bàsic", "home.column_settings.show_reblogs": "Mostra els impulsos", @@ -487,7 +487,7 @@ "status.edited_x_times": "Editat {count, plural, one {{count} vegada} other {{count} vegades}}", "status.embed": "Incrusta", "status.favourite": "Favorit", - "status.filter": "Filter this post", + "status.filter": "Filtre aquest apunt", "status.filtered": "Filtrat", "status.hide": "Amaga publicació", "status.history.created": "{name} ha creat {date}", @@ -538,7 +538,7 @@ "timeline_hint.resources.followers": "Seguidors", "timeline_hint.resources.follows": "Seguiments", "timeline_hint.resources.statuses": "Publicacions més antigues", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} persones}} en els passats {days, plural, one {day} other {{days} dies}}", "trends.trending_now": "En tendència", "ui.beforeunload": "El teu esborrany es perdrà si surts de Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 8f015b50d62..80cb8e6c689 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -197,22 +197,22 @@ "explore.trending_links": "Nyheder", "explore.trending_statuses": "Indlæg", "explore.trending_tags": "Hashtags", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Denne filterkategori omfatter ikke konteksten, hvorunder dette indlæg er tilgået. Redigér filteret, hvis indlægget også ønskes filtreret i denne kontekst.", + "filter_modal.added.context_mismatch_title": "Kontekstmisforhold!", + "filter_modal.added.expired_explanation": "Denne filterkategori er udløbet. Ændr dens udløbsdato, for at anvende den.", + "filter_modal.added.expired_title": "Udløbet filter!", + "filter_modal.added.review_and_configure": "Gå til {settings_link} for at gennemse og yderligere opsætte denne filterkategori.", + "filter_modal.added.review_and_configure_title": "Filterindstillinger", + "filter_modal.added.settings_link": "indstillingsside", + "filter_modal.added.short_explanation": "Dette indlæg er nu føjet til flg. filterkategori: {title}.", + "filter_modal.added.title": "Filter tilføjet!", + "filter_modal.select_filter.context_mismatch": "gælder ikke for denne kontekst", + "filter_modal.select_filter.expired": "udløbet", + "filter_modal.select_filter.prompt_new": "Ny kategori: {name}", + "filter_modal.select_filter.search": "Søg eller opret", + "filter_modal.select_filter.subtitle": "Vælg en eksisterende kategori eller opret en ny", + "filter_modal.select_filter.title": "Filtrér dette indlæg", + "filter_modal.title.status": "Filtrér et indlæg", "follow_recommendations.done": "Udført", "follow_recommendations.heading": "Følg personer du gerne vil se indlæg fra! Her er nogle forslag.", "follow_recommendations.lead": "Indlæg, fra personer du følger, vil fremgå kronologisk ordnet i dit hjemmefeed. Vær ikke bange for at begå fejl, da du altid og meget nemt kan ændre dit valg!", @@ -487,7 +487,7 @@ "status.edited_x_times": "Redigeret {count, plural, one {{count} gang} other {{count} gange}}", "status.embed": "Indlejr", "status.favourite": "Favorit", - "status.filter": "Filter this post", + "status.filter": "Filtrér dette indlæg", "status.filtered": "Filtreret", "status.hide": "Skjul indlæg", "status.history.created": "{name} oprettet {date}", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 2df1dc0ea43..9bed255268e 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -106,7 +106,7 @@ "compose_form.poll.option_placeholder": "Wahl {number}", "compose_form.poll.remove_option": "Wahl entfernen", "compose_form.poll.switch_to_multiple": "Umfrage ändern, um mehrere Optionen zu erlauben", - "compose_form.poll.switch_to_single": "Umfrage ändern, um eine einzige Wahl zu erlauben", + "compose_form.poll.switch_to_single": "Umfrage ändern, sodass nur eine einzige Auswahl erlaubt ist", "compose_form.publish": "Veröffentlichen", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Änderungen speichern", @@ -175,20 +175,20 @@ "empty_column.explore_statuses": "Momentan ist nichts im Trend. Schau später wieder vorbei!", "empty_column.favourited_statuses": "Du hast noch keine favorisierten Tröts. Wenn du einen favorisierst, wird er hier erscheinen.", "empty_column.favourites": "Noch niemand hat diesen Beitrag favorisiert. Sobald es jemand tut, wird das hier angezeigt.", - "empty_column.follow_recommendations": "Es sieht so aus, als könnten keine Vorschläge für dich generiert werden. Du kannst versuchen nach Leuten zu suchen, die du vielleicht kennst oder du kannst angesagte Hashtags erkunden.", + "empty_column.follow_recommendations": "Es sieht so aus, als könnten keine Vorschläge für dich generiert werden. Du kannst versuchen, nach Leuten zu suchen, die du vielleicht kennst, oder du kannst angesagte Hashtags erkunden.", "empty_column.follow_requests": "Du hast noch keine Folge-Anfragen. Sobald du eine erhältst, wird sie hier angezeigt.", "empty_column.hashtag": "Unter diesem Hashtag gibt es noch nichts.", "empty_column.home": "Deine Startseite ist leer! Folge mehr Leuten, um sie zu füllen. {suggestions}", "empty_column.home.suggestions": "Ein paar Vorschläge ansehen", "empty_column.list": "Diese Liste ist derzeit leer. Wenn Konten auf dieser Liste neue Beiträge veröffentlichen werden sie hier erscheinen.", - "empty_column.lists": "Du hast noch keine Listen. Wenn du eine anlegst, wird sie hier angezeigt.", + "empty_column.lists": "Du hast noch keine Listen. Wenn du eine anlegst, wird sie hier angezeigt werden.", "empty_column.mutes": "Du hast keine Profile stummgeschaltet.", "empty_column.notifications": "Du hast noch keine Mitteilungen. Interagiere mit anderen, um ins Gespräch zu kommen.", "empty_column.public": "Hier ist nichts zu sehen! Schreibe etwas öffentlich oder folge Profilen von anderen Servern, um die Zeitleiste aufzufüllen", - "error.unexpected_crash.explanation": "Aufgrund eines Fehlers in unserem Code oder einer Browsereinkompatibilität konnte diese Seite nicht korrekt angezeigt werden.", + "error.unexpected_crash.explanation": "Aufgrund eines Fehlers in unserem Code oder einer Browser-Inkompatibilität konnte diese Seite nicht korrekt angezeigt werden.", "error.unexpected_crash.explanation_addons": "Diese Seite konnte nicht korrekt angezeigt werden. Dieser Fehler wird wahrscheinlich durch ein Browser-Add-on oder automatische Übersetzungswerkzeuge verursacht.", - "error.unexpected_crash.next_steps": "Versuche die Seite zu aktualisieren. Wenn das nicht hilft, kannst du Mastodon über einen anderen Browser oder eine native App verwenden.", - "error.unexpected_crash.next_steps_addons": "Versuche sie zu deaktivieren und lade dann die Seite neu. Wenn das Problem weiterhin besteht, solltest du Mastodon über einen anderen Browser oder eine native App nutzen.", + "error.unexpected_crash.next_steps": "Versuche, die Seite zu aktualisieren. Wenn das nicht hilft, kannst du Mastodon über einen anderen Browser oder eine native App verwenden.", + "error.unexpected_crash.next_steps_addons": "Versuche, sie zu deaktivieren, und lade dann die Seite neu. Wenn das Problem weiterhin besteht, solltest du Mastodon über einen anderen Browser oder eine native App nutzen.", "errors.unexpected_crash.copy_stacktrace": "Fehlerlog in die Zwischenablage kopieren", "errors.unexpected_crash.report_issue": "Problem melden", "explore.search_results": "Suchergebnisse", @@ -197,22 +197,22 @@ "explore.trending_links": "Nachrichten", "explore.trending_statuses": "Beiträge", "explore.trending_tags": "Hashtags", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Diese Filterkategorie gilt nicht für den Kontext, in welchem du auf diesen Beitrag zugegriffen hast. Wenn der Beitrag auch in diesem Kontext gefiltert werden soll, musst du den Filter bearbeiten.", + "filter_modal.added.context_mismatch_title": "Kontext stimmt nicht überein!", + "filter_modal.added.expired_explanation": "Diese Filterkategrie ist abgelaufen, du musst das Ablaufdatum für diese Kategorie ändern.", + "filter_modal.added.expired_title": "Abgelaufener Filter!", + "filter_modal.added.review_and_configure": "Um diese Filterkategorie zu überprüfen und weiter zu konfigurieren, gehe zu {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filtereinstellungen", + "filter_modal.added.settings_link": "Einstellungsseite", + "filter_modal.added.short_explanation": "Dieser Post wurde zu folgender Filterkategorie hinzugefügt: {title}.", + "filter_modal.added.title": "Filter hinzugefügt!", + "filter_modal.select_filter.context_mismatch": "gilt nicht für diesen Kontext", + "filter_modal.select_filter.expired": "abgelaufen", + "filter_modal.select_filter.prompt_new": "Neue Kategorie: {name}", + "filter_modal.select_filter.search": "Suchen oder Erstellen", + "filter_modal.select_filter.subtitle": "Eine existierende Kategorie benutzen oder eine erstellen", + "filter_modal.select_filter.title": "Diesen Beitrag filtern", + "filter_modal.title.status": "Einen Beitrag filtern", "follow_recommendations.done": "Fertig", "follow_recommendations.heading": "Folge Leuten, von denen du Beiträge sehen möchtest! Hier sind einige Vorschläge.", "follow_recommendations.lead": "Beiträge von Personen, denen du folgst, werden in chronologischer Reihenfolge auf deiner Startseite angezeigt. Hab keine Angst, Fehler zu machen, du kannst den Leuten jederzeit wieder entfolgen!", @@ -234,8 +234,8 @@ "hashtag.column_settings.select.no_options_message": "Keine Vorschläge gefunden", "hashtag.column_settings.select.placeholder": "Hashtags eintragen…", "hashtag.column_settings.tag_mode.all": "All diese", - "hashtag.column_settings.tag_mode.any": "Eins von diesen", - "hashtag.column_settings.tag_mode.none": "Keins von diesen", + "hashtag.column_settings.tag_mode.any": "Eines von diesen", + "hashtag.column_settings.tag_mode.none": "Keines von diesen", "hashtag.column_settings.tag_toggle": "Zusätzliche Hashtags für diese Spalte einfügen", "hashtag.follow": "Hashtag folgen", "hashtag.total_volume": "Gesamtes Aufkommen {days, plural, one {am letzten Tag} other {in den letzten {days} Tagen}}", @@ -300,7 +300,7 @@ "lists.replies_policy.list": "Mitglieder der Liste", "lists.replies_policy.none": "Niemand", "lists.replies_policy.title": "Antworten anzeigen für:", - "lists.search": "Suche nach Leuten denen du folgst", + "lists.search": "Suche nach Leuten, denen du folgst", "lists.subheading": "Deine Listen", "load_pending": "{count, plural, one {# neuer Beitrag} other {# neue Beiträge}}", "loading_indicator.label": "Wird geladen …", @@ -341,7 +341,7 @@ "notification.follow_request": "{name} möchte dir folgen", "notification.mention": "{name} hat dich erwähnt", "notification.own_poll": "Deine Umfrage ist beendet", - "notification.poll": "Eine Umfrage in der du abgestimmt hast ist vorbei", + "notification.poll": "Eine Umfrage, an der du teilgenommen hast, ist vorbei", "notification.reblog": "{name} hat deinen Beitrag geteilt", "notification.status": "{name} hat gerade etwas gepostet", "notification.update": "{name} bearbeitete einen Beitrag", @@ -430,7 +430,7 @@ "report.forward": "An {target} weiterleiten", "report.forward_hint": "Dieses Konto gehört zu einem anderen Server. Soll eine anonymisierte Kopie der Meldung auch dorthin geschickt werden?", "report.mute": "Stummschalten", - "report.mute_explanation": "Du wirst die Beiträge vom Konto nicht mehr sehen. Das Konto kann dir immernoch folgen und die Person hinter dem Konto wird deine Beiträge sehen können und nicht wissen, dass du sie stumm geschaltet hast.", + "report.mute_explanation": "Du wirst die Beiträge vom Konto nicht mehr sehen. Das Konto kann dir immer noch folgen, und die Person hinter dem Konto wird deine Beiträge sehen können und nicht wissen, dass du sie stummgeschaltet hast.", "report.next": "Weiter", "report.placeholder": "Zusätzliche Kommentare", "report.reasons.dislike": "Das gefällt mir nicht", @@ -447,7 +447,7 @@ "report.statuses.title": "Gibt es Beiträge, die diesen Bericht unterstützen?", "report.submit": "Absenden", "report.target": "{target} melden", - "report.thanks.take_action": "Das sind deine Möglichkeiten, zu bestimmen, was du auf Mastodon sehen möchtest:", + "report.thanks.take_action": "Das sind deine Möglichkeiten zu bestimmen, was du auf Mastodon sehen möchtest:", "report.thanks.take_action_actionable": "Während wir dies überprüfen, kannst du gegen @{name} vorgehen:", "report.thanks.title": "Möchtest du das nicht sehen?", "report.thanks.title_actionable": "Vielen Dank für die Meldung, wir werden uns das ansehen.", @@ -460,7 +460,7 @@ "report_notification.open": "Meldung öffnen", "search.placeholder": "Suche", "search_popout.search_format": "Fortgeschrittenes Suchformat", - "search_popout.tips.full_text": "Einfache Texteingabe gibt Beiträge, die du geschrieben, favorisiert und geteilt hast zurück. Außerdem auch Beiträge in denen du erwähnt wurdest, aber auch passende Nutzernamen, Anzeigenamen oder Hashtags.", + "search_popout.tips.full_text": "Einfache Texteingabe gibt Beiträge, die du geschrieben, favorisiert und geteilt hast, zurück; außerdem auch Beiträge, in denen du erwähnt wurdest, aber auch passende Nutzernamen, Anzeigenamen oder Hashtags.", "search_popout.tips.hashtag": "Hashtag", "search_popout.tips.status": "Tröt", "search_popout.tips.text": "Einfache Texteingabe gibt Anzeigenamen, Benutzernamen und Hashtags zurück", @@ -487,7 +487,7 @@ "status.edited_x_times": "{count, plural, one {{count} mal} other {{count} mal}} bearbeitet", "status.embed": "Einbetten", "status.favourite": "Favorisieren", - "status.filter": "Filter this post", + "status.filter": "Diesen Beitrag filtern", "status.filtered": "Gefiltert", "status.hide": "Tröt verbergen", "status.history.created": "{name} erstellte {date}", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 8e4b906a2eb..27ebd749d48 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -197,22 +197,22 @@ "explore.trending_links": "Noticias", "explore.trending_statuses": "Mensajes", "explore.trending_tags": "Etiquetas", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Esta categoría de filtro no se aplica al contexto en el que accediste a este mensaje. Si querés que el mensaje sea filtrado también en este contexto, vas a tener que editar el filtro.", + "filter_modal.added.context_mismatch_title": "¡El contexto no coincide!", + "filter_modal.added.expired_explanation": "Esta categoría de filtro caducó; vas a necesitar cambiar la fecha de caducidad para que se aplique.", + "filter_modal.added.expired_title": "¡Filtro caducado!", + "filter_modal.added.review_and_configure": "Para revisar y configurar esta categoría de filtros, visitá a la {settings_link}.", + "filter_modal.added.review_and_configure_title": "Configuración de filtro", + "filter_modal.added.settings_link": "página de configuración", + "filter_modal.added.short_explanation": "Este mensaje fue agregado a la siguiente categoría de filtros: {title}.", + "filter_modal.added.title": "¡Filtro agregado!", + "filter_modal.select_filter.context_mismatch": "no aplica a este contexto", + "filter_modal.select_filter.expired": "expirado", + "filter_modal.select_filter.prompt_new": "Nueva categoría: {name}", + "filter_modal.select_filter.search": "Buscar o crear", + "filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva", + "filter_modal.select_filter.title": "Filtrar este mensaje", + "filter_modal.title.status": "Filtrar un mensaje", "follow_recommendations.done": "Listo", "follow_recommendations.heading": "¡Seguí cuentas cuyos mensajes te gustaría ver! Acá tenés algunas sugerencias.", "follow_recommendations.lead": "Los mensajes de las cuentas que seguís aparecerán en orden cronológico en la columna \"Inicio\". No tengás miedo de meter la pata, ¡podés dejar de seguir cuentas fácilmente en cualquier momento!", @@ -487,7 +487,7 @@ "status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}", "status.embed": "Insertar", "status.favourite": "Marcar como favorito", - "status.filter": "Filter this post", + "status.filter": "Filtrar este mensaje", "status.filtered": "Filtrado", "status.hide": "Ocultar mensaje", "status.history.created": "Creado por {name} el {date}", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 96f0a59dc48..bb03a297537 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "¡Ups!", "announcement.announcement": "Anuncio", "attachments_list.unprocessed": "(sin procesar)", - "audio.hide": "Hide audio", + "audio.hide": "Ocultar audio", "autosuggest_hashtag.per_week": "{count} por semana", "boost_modal.combo": "Puedes hacer clic en {combo} para saltar este aviso la próxima vez", "bundle_column_error.body": "Algo salió mal al cargar este componente.", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 5de01d5fc17..7c9700ecbb8 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -197,22 +197,22 @@ "explore.trending_links": "Noticias", "explore.trending_statuses": "Publicaciones", "explore.trending_tags": "Etiquetas", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Esta categoría de filtro no se aplica al contexto en el que ha accedido a esta publlicación. Si quieres que la publicación sea filtrada también en este contexto, tendrás que editar el filtro.", + "filter_modal.added.context_mismatch_title": "¡El contexto no coincide!", + "filter_modal.added.expired_explanation": "Esta categoría de filtro ha caducado, necesitará cambiar la fecha de caducidad para que se aplique.", + "filter_modal.added.expired_title": "¡Filtro caducado!", + "filter_modal.added.review_and_configure": "Para revisar y configurar esta categoría de filtros, vaya a {settings_link}.", + "filter_modal.added.review_and_configure_title": "Ajustes de filtro", + "filter_modal.added.settings_link": "página de ajustes", + "filter_modal.added.short_explanation": "Esta publicación ha sido añadida a la siguiente categoría de filtros: {title}.", + "filter_modal.added.title": "¡Filtro añadido!", + "filter_modal.select_filter.context_mismatch": "no se aplica a este contexto", + "filter_modal.select_filter.expired": "expirado", + "filter_modal.select_filter.prompt_new": "Nueva categoría: {name}", + "filter_modal.select_filter.search": "Buscar o crear", + "filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva", + "filter_modal.select_filter.title": "Filtrar esta publicación", + "filter_modal.title.status": "Filtrar una publicación", "follow_recommendations.done": "Hecho", "follow_recommendations.heading": "¡Sigue a gente que publique cosas que te gusten! Aquí tienes algunas sugerencias.", "follow_recommendations.lead": "Las publicaciones de la gente a la que sigas aparecerán ordenadas cronológicamente en Inicio. No tengas miedo de cometer errores, ¡puedes dejarles de seguir en cualquier momento con la misma facilidad!", @@ -487,7 +487,7 @@ "status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}", "status.embed": "Incrustado", "status.favourite": "Favorito", - "status.filter": "Filter this post", + "status.filter": "Filtrar esta publicación", "status.filtered": "Filtrado", "status.hide": "Ocultar publicación", "status.history.created": "{name} creó {date}", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 0dece0c51d6..52afeaa5d30 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -197,22 +197,22 @@ "explore.trending_links": "Uutiset", "explore.trending_statuses": "Viestit", "explore.trending_tags": "Aihetunnisteet", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Tämä suodatinluokka ei koske asiayhteyttä, jossa olet käyttänyt tätä viestiä. Jos haluat, että viesti suodatetaan myös tässä yhteydessä, sinun on muokattava suodatinta.", + "filter_modal.added.context_mismatch_title": "Asiayhteys ei täsmää!", + "filter_modal.added.expired_explanation": "Tämä suodatinluokka on vanhentunut ja sinun on muutettava viimeistä voimassaolon päivää, jotta sitä voidaan käyttää.", + "filter_modal.added.expired_title": "Vanhentunut suodatin!", + "filter_modal.added.review_and_configure": "Voit tarkastella tätä suodatinluokkaa ja määrittää sen tarkemmin siirtymällä {settings_link}.", + "filter_modal.added.review_and_configure_title": "Suodattimen asetukset", + "filter_modal.added.settings_link": "asetukset sivu", + "filter_modal.added.short_explanation": "Tämä viesti on lisätty seuraavaan suodatinluokkaan: {title}.", + "filter_modal.added.title": "Suodatin lisätty!", + "filter_modal.select_filter.context_mismatch": "ei sovellu tähän asiayhteyteen", + "filter_modal.select_filter.expired": "vanhentunut", + "filter_modal.select_filter.prompt_new": "Uusi luokka: {name}", + "filter_modal.select_filter.search": "Etsi tai luo", + "filter_modal.select_filter.subtitle": "Käytä olemassa olevaa luokkaa tai luo uusi luokka", + "filter_modal.select_filter.title": "Suodata tämä viesti", + "filter_modal.title.status": "Suodata viesti", "follow_recommendations.done": "Valmis", "follow_recommendations.heading": "Seuraa ihmisiä, joilta haluaisit nähdä julkaisuja! Tässä on muutamia ehdotuksia.", "follow_recommendations.lead": "Seuraamiesi julkaisut näkyvät aikajärjestyksessä kotisyötteessä. Älä pelkää seurata vahingossa, voit lopettaa seuraamisen yhtä helposti!", @@ -487,7 +487,7 @@ "status.edited_x_times": "Muokattu {count, plural, one {{count} aika} other {{count} kertaa}}", "status.embed": "Upota", "status.favourite": "Tykkää", - "status.filter": "Filter this post", + "status.filter": "Suodata tämä viesti", "status.filtered": "Suodatettu", "status.hide": "Piilota toot", "status.history.created": "{name} luotu {date}", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index c587292712b..f874637fa9d 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Oich!", "announcement.announcement": "Brath-fios", "attachments_list.unprocessed": "(gun phròiseasadh)", - "audio.hide": "Hide audio", + "audio.hide": "Falaich an fhuaim", "autosuggest_hashtag.per_week": "{count} san t-seachdain", "boost_modal.combo": "Brùth air {combo} nam b’ fheàrr leat leum a ghearradh thar seo an ath-thuras", "bundle_column_error.body": "Chaidh rudeigin cearr nuair a dh’fheuch sinn ris a’ cho-phàirt seo a luchdadh.", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 0c7baa332ba..c584dd5517d 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -197,22 +197,22 @@ "explore.trending_links": "Novas", "explore.trending_statuses": "Publicacións", "explore.trending_tags": "Cancelos", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Esta categoría de filtro non se aplica ao contexto no que accedeches a esta publicación. Se queres que a publicación se filtre nese contexto tamén, terás que editar o filtro.", + "filter_modal.added.context_mismatch_title": "Non concorda o contexto!", + "filter_modal.added.expired_explanation": "Esta categoría de filtro caducou, terás que cambiar a data de caducidade para que se aplique.", + "filter_modal.added.expired_title": "Filtro caducado!", + "filter_modal.added.review_and_configure": "Para revisar e despois configurar esta categoría de filtro, vaite a {settings_link}.", + "filter_modal.added.review_and_configure_title": "Axustes do filtro", + "filter_modal.added.settings_link": "páxina de axustes", + "filter_modal.added.short_explanation": "Engadiuse esta publicación á seguinte categoría de filtro: {title}.", + "filter_modal.added.title": "Filtro engadido!", + "filter_modal.select_filter.context_mismatch": "non se aplica neste contexto", + "filter_modal.select_filter.expired": "caducado", + "filter_modal.select_filter.prompt_new": "Nova categoría: {name}", + "filter_modal.select_filter.search": "Buscar ou crear", + "filter_modal.select_filter.subtitle": "Usar unha categoría existente ou crear unha nova", + "filter_modal.select_filter.title": "Filtrar esta publicación", + "filter_modal.title.status": "Filtrar unha publicación", "follow_recommendations.done": "Feito", "follow_recommendations.heading": "Segue a persoas das que queiras ler publicacións! Aqui tes unhas suxestións.", "follow_recommendations.lead": "As publicacións das persoas que segues aparecerán na túa cronoloxía de inicio ordenadas temporalmente. Non teñas medo a equivocarte, podes deixar de seguirlas igual de fácil en calquera momento!", @@ -487,7 +487,7 @@ "status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}", "status.embed": "Incrustar", "status.favourite": "Favorito", - "status.filter": "Filter this post", + "status.filter": "Filtrar esta publicación", "status.filtered": "Filtrado", "status.hide": "Agochar publicación", "status.history.created": "{name} creouno o {date}", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 281b91bc1b8..81253fd1f80 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "אופס!", "announcement.announcement": "הכרזה", "attachments_list.unprocessed": "(לא מעובד)", - "audio.hide": "Hide audio", + "audio.hide": "השתק", "autosuggest_hashtag.per_week": "{count} לשבוע", "boost_modal.combo": "ניתן להקיש {combo} כדי לדלג בפעם הבאה", "bundle_column_error.body": "משהו השתבש בעת טעינת הרכיב הזה.", @@ -197,22 +197,22 @@ "explore.trending_links": "חדשות", "explore.trending_statuses": "פוסטים", "explore.trending_tags": "האשטאגים", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "קטגוריית הפילטר הזאת לא חלה על ההקשר שממנו הגעת אל הפוסט הזה. אם תרצה/י שהפוסט יסונן גם בהקשר זה, תצטרך/י לערוך את הפילטר.", + "filter_modal.added.context_mismatch_title": "אין התאמה להקשר!", + "filter_modal.added.expired_explanation": "פג תוקפה של קטגוריית הסינון הזו, יש צורך לשנות את תאריך התפוגה כדי שהסינון יוחל.", + "filter_modal.added.expired_title": "פג תוקף הפילטר!", + "filter_modal.added.review_and_configure": "לסקירה והתאמה מתקדמת של קטגוריית הסינון הזו, לכו ל{settings_link}.", + "filter_modal.added.review_and_configure_title": "אפשרויות סינון", + "filter_modal.added.settings_link": "דף הגדרות", + "filter_modal.added.short_explanation": "הפוסט הזה הוסף לקטגוריית הסינון הזו: {title}.", + "filter_modal.added.title": "הפילטר הוסף!", + "filter_modal.select_filter.context_mismatch": "לא חל בהקשר זה", + "filter_modal.select_filter.expired": "פג התוקף", + "filter_modal.select_filter.prompt_new": "קטגוריה חדשה {name}", + "filter_modal.select_filter.search": "חיפוש או יצירה", + "filter_modal.select_filter.subtitle": "שימוש בקטגורייה קיימת או יצירת אחת חדשה", + "filter_modal.select_filter.title": "סינון הפוסט הזה", + "filter_modal.title.status": "סנן פוסט", "follow_recommendations.done": "בוצע", "follow_recommendations.heading": "עקב/י אחרי אנשים שתרצה/י לראות את חצרוציהם! הנה כמה הצעות.", "follow_recommendations.lead": "חצרוצים מאנשים במעקב יופיעו בסדר כרונולוגי בפיד הבית. אל תחששו מטעויות, אפשר להסיר מעקב באותה הקלות ובכל זמן!", @@ -256,7 +256,7 @@ "keyboard_shortcuts.description": "תיאור", "keyboard_shortcuts.direct": "לפתיחת טור הודעות ישירות", "keyboard_shortcuts.down": "לנוע במורד הרשימה", - "keyboard_shortcuts.enter": "פתח חצרוץ", + "keyboard_shortcuts.enter": "פתח פוסט", "keyboard_shortcuts.favourite": "לחבב", "keyboard_shortcuts.favourites": "פתיחת רשימת מועדפים", "keyboard_shortcuts.federated": "פתיחת ציר זמן בין-קהילתי", @@ -270,7 +270,7 @@ "keyboard_shortcuts.my_profile": "פתיחת הפרופיל שלך", "keyboard_shortcuts.notifications": "פתיחת טור התראות", "keyboard_shortcuts.open_media": "פתיחת מדיה", - "keyboard_shortcuts.pinned": "פתיחת רשימת חצרותים מוצמדים", + "keyboard_shortcuts.pinned": "פתיחת פוסטים נעוצים", "keyboard_shortcuts.profile": "פתח את פרופיל המשתמש", "keyboard_shortcuts.reply": "תגובה לפוסט", "keyboard_shortcuts.requests": "פתיחת רשימת בקשות מעקב", @@ -362,7 +362,7 @@ "notifications.column_settings.reblog": "הדהודים:", "notifications.column_settings.show": "הצגה בטור", "notifications.column_settings.sound": "שמע מופעל", - "notifications.column_settings.status": "New toots:", + "notifications.column_settings.status": "פוסטים חדשים:", "notifications.column_settings.unread_notifications.category": "התראות שלא נקראו", "notifications.column_settings.unread_notifications.highlight": "הבלט התראות שלא נקראו", "notifications.column_settings.update": "שינויים:", @@ -424,13 +424,13 @@ "report.category.subtitle": "בחר/י את המתאים ביותר", "report.category.title": "ספר/י לנו מה קורה עם ה-{type} הזה", "report.category.title_account": "פרופיל", - "report.category.title_status": "חצרוץ", + "report.category.title_status": "פוסט", "report.close": "בוצע", "report.comment.title": "האם יש דבר נוסף שלדעתך חשוב שנדע?", "report.forward": "קדם ל-{target}", "report.forward_hint": "חשבון זה הוא משרת אחר. האם לשלוח בנוסף עותק אנונימי לשם?", "report.mute": "להשתיק", - "report.mute_explanation": "לא ניתן יהיה לראות את חצרוציהם. הם עדיין יוכלו לעקוב אחריך ולראות את חצרוציך ולא ידעו שהם מושתקים.", + "report.mute_explanation": "לא ניתן יהיה לראות את הפוסטים. הם עדיין יוכלו לעקוב אחריך ולראות את הפוסטים שלך ולא ידעו שהם מושתקים.", "report.next": "הבא", "report.placeholder": "הערות נוספות", "report.reasons.dislike": "אני לא אוהב את זה", @@ -444,7 +444,7 @@ "report.rules.subtitle": "בחר/י את כל המתאימים", "report.rules.title": "אילו חוקים מופרים?", "report.statuses.subtitle": "בחר/י את כל המתאימים", - "report.statuses.title": "האם ישנם חצרוצים התומכים בדיווח זה?", + "report.statuses.title": "האם ישנם פוסטים התומכים בדיווח זה?", "report.submit": "שליחה", "report.target": "דיווח על {target}", "report.thanks.take_action": "הנה כמה אפשרויות לשליטה בתצוגת מסטודון:", @@ -487,7 +487,7 @@ "status.edited_x_times": "נערך {count, plural, one {פעם {count}} other {{count} פעמים}}", "status.embed": "הטמעה", "status.favourite": "חיבוב", - "status.filter": "Filter this post", + "status.filter": "סנן פוסט זה", "status.filtered": "סונן", "status.hide": "הסתר פוסט", "status.history.created": "{name} יצר/ה {date}", @@ -505,7 +505,7 @@ "status.reblog": "הדהוד", "status.reblog_private": "להדהד ברמת הנראות המקורית", "status.reblogged_by": "{name} הידהד/ה:", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.reblogs.empty": "עוד לא הידהדו את הפוסט הזה. כאשר זה יקרה, ההדהודים יופיעו כאן.", "status.redraft": "מחיקה ועריכה מחדש", "status.remove_bookmark": "הסרת סימניה", "status.reply": "תגובה", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index ce25cd103f2..08cb01dc3d6 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -197,22 +197,22 @@ "explore.trending_links": "Hírek", "explore.trending_statuses": "Bejegyzések", "explore.trending_tags": "Hashtagek", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Ez a szűrőkategória nem érvényes abban a környezetben, amelyből elérted ezt a bejegyzést. Ha ebben a környezetben is szűrni szeretnéd a bejegyzést, akkor szerkesztened kell a szűrőt.", + "filter_modal.added.context_mismatch_title": "Környezeti eltérés.", + "filter_modal.added.expired_explanation": "Ez a szűrőkategória elévült, a használatához módosítanod kell az elévülési dátumot.", + "filter_modal.added.expired_title": "Elévült szűrő.", + "filter_modal.added.review_and_configure": "A szűrőkategória felülvizsgálatához és további beállításához ugorjon a {settings_link} oldalra.", + "filter_modal.added.review_and_configure_title": "Szűrőbeállítások", + "filter_modal.added.settings_link": "beállítások oldal", + "filter_modal.added.short_explanation": "A következő bejegyzés hozzá lett adva a következő szűrőkategóriához: {title}.", + "filter_modal.added.title": "Szűrő hozzáadva.", + "filter_modal.select_filter.context_mismatch": "nem érvényes erre a környezetre", + "filter_modal.select_filter.expired": "elévült", + "filter_modal.select_filter.prompt_new": "Új kategória: {name}", + "filter_modal.select_filter.search": "Keresés vagy létrehozás", + "filter_modal.select_filter.subtitle": "Válassz egy meglévő kategóriát, vagy hozz létre egy újat", + "filter_modal.select_filter.title": "E bejegyzés szűrése", + "filter_modal.title.status": "Egy bejegyzés szűrése", "follow_recommendations.done": "Kész", "follow_recommendations.heading": "Kövesd azokat, akiknek a bejegyzéseit látni szeretnéd! Itt van néhány javaslat.", "follow_recommendations.lead": "Az általad követettek bejegyzései a saját idővonaladon fognak megjelenni időrendi sorrendben. Ne félj attól, hogy hibázol! A követést bármikor, ugyanilyen könnyen visszavonhatod!", @@ -487,7 +487,7 @@ "status.edited_x_times": "{count, plural, one {{count} alkalommal} other {{count} alkalommal}} szerkesztve", "status.embed": "Beágyazás", "status.favourite": "Kedvenc", - "status.filter": "Filter this post", + "status.filter": "E bejegyzés szűrése", "status.filtered": "Megszűrt", "status.hide": "Bejegyzés elrejtése", "status.history.created": "{name} létrehozta: {date}", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index f3bdb040cf1..28edbc7a30e 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -197,22 +197,22 @@ "explore.trending_links": "Niuzi", "explore.trending_statuses": "Posti", "explore.trending_tags": "Hashtagi", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Ca filtrilgrupo ne relatesas kun informo de ca acesesita posto. Se vu volas posto filtresar kun ca informo anke, vu bezonas modifikar filtrilo.", + "filter_modal.added.context_mismatch_title": "Kontenajneparigeso!", + "filter_modal.added.expired_explanation": "Ca filtrilgrupo expiris, vu bezonas chanjar expirtempo por apliko.", + "filter_modal.added.expired_title": "Expirinta filtrilo!", + "filter_modal.added.review_and_configure": "Por kontrolar e plue ajustar ca filtrilgrupo, irez a {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filtrilopcioni", + "filter_modal.added.settings_link": "opcionpagino", + "filter_modal.added.short_explanation": "Ca posto adjuntesas a ca filtrilgrupo: {title}.", + "filter_modal.added.title": "Filtrilo adjuntesas!", + "filter_modal.select_filter.context_mismatch": "ne relatesas kun ca informo", + "filter_modal.select_filter.expired": "expiris", + "filter_modal.select_filter.prompt_new": "Nova grupo: {name}", + "filter_modal.select_filter.search": "Trovez o kreez", + "filter_modal.select_filter.subtitle": "Usez disponebla grupo o kreez novajo", + "filter_modal.select_filter.title": "Filtragez ca posto", + "filter_modal.title.status": "Filtragez posto", "follow_recommendations.done": "Fina", "follow_recommendations.heading": "Sequez personi quo igas posti quon vu volas vidar! Hike esas ula sugestati.", "follow_recommendations.lead": "Posti de personi quon vu sequas kronologiale montresos en vua hemniuzeto. Ne timas igar erori, vu povas desequar personi tam same facila irgatempe!", @@ -487,7 +487,7 @@ "status.edited_x_times": "Modifikesis {count, plural, one {{count} foyo} other {{count} foyi}}", "status.embed": "Eninsertez", "status.favourite": "Favorizar", - "status.filter": "Filter this post", + "status.filter": "Filtragez ca posto", "status.filtered": "Filtrita", "status.hide": "Celez posto", "status.history.created": "{name} kreis ye {date}", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 7e3a40fa711..e15656a50a3 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -197,22 +197,22 @@ "explore.trending_links": "Fréttir", "explore.trending_statuses": "Færslur", "explore.trending_tags": "Myllumerki", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Þessi síuflokkur á ekki við í því samhengi sem aðgangur þinn að þessari færslu felur í sér. Ef þú vilt að færslan sé einnig síuð í þessu samhengi, þá þarftu að breyta síunni.", + "filter_modal.added.context_mismatch_title": "Misræmi í samhengi!", + "filter_modal.added.expired_explanation": "Þessi síuflokkur er útrunninn, þú þarft að breyta gidistímanum svo hann geti átt við.", + "filter_modal.added.expired_title": "Útrunnin sía!", + "filter_modal.added.review_and_configure": "Til að yfirfara og stilla frekar þennan síuflokk, ættirðu að fara í {settings_link}.", + "filter_modal.added.review_and_configure_title": "Síustillingar", + "filter_modal.added.settings_link": "stillingasíða", + "filter_modal.added.short_explanation": "Þessari færslu hefur verið bætt í eftirfarandi síuflokk: {title}.", + "filter_modal.added.title": "Síu bætt við!", + "filter_modal.select_filter.context_mismatch": "á ekki við í þessu samhengi", + "filter_modal.select_filter.expired": "útrunnið", + "filter_modal.select_filter.prompt_new": "Nýr flokkur: {name}", + "filter_modal.select_filter.search": "Leita eða búa til", + "filter_modal.select_filter.subtitle": "Notaðu fyrirliggjandi flokk eða útbúðu nýjan", + "filter_modal.select_filter.title": "Sía þessa færslu", + "filter_modal.title.status": "Sía færslu", "follow_recommendations.done": "Lokið", "follow_recommendations.heading": "Fylgstu með fólki sem þú vilt sjá færslur frá! Hér eru nokkrar tillögur.", "follow_recommendations.lead": "Færslur frá fólki sem þú fylgist með eru birtar í tímaröð á heimastreyminu þínu. Þú þarft ekki að hræðast mistök, það er jafn auðvelt að hætta að fylgjast með fólki hvenær sem er!", @@ -487,7 +487,7 @@ "status.edited_x_times": "Breytt {count, plural, one {{count} sinni} other {{count} sinnum}}", "status.embed": "Ívefja", "status.favourite": "Eftirlæti", - "status.filter": "Filter this post", + "status.filter": "Sía þessa færslu", "status.filtered": "Síað", "status.hide": "Fela færslu", "status.history.created": "{name} útbjó {date}", @@ -539,7 +539,7 @@ "timeline_hint.resources.follows": "Fylgist með", "timeline_hint.resources.statuses": "Eldri færslur", "trends.counter_by_accounts": "{count, plural, one {{counter} aðili} other {{counter} manns}} {days, plural, one {síðasta sólarhringinn} other {síðustu {days} daga}}", - "trends.trending_now": "Í umræðunni núna", + "trends.trending_now": "Vinsælt núna", "ui.beforeunload": "Drögin tapast ef þú ferð út úr Mastodon.", "units.short.billion": "{count}B", "units.short.million": "{count}M", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 9f32a0685c5..3e59c2782c8 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -197,22 +197,22 @@ "explore.trending_links": "Novità", "explore.trending_statuses": "Post", "explore.trending_tags": "Hashtag", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "La categoria di questo filtro non si applica al contesto in cui hai acceduto a questo post. Se desideri che il post sia filtrato anche in questo contesto, dovrai modificare il filtro.", + "filter_modal.added.context_mismatch_title": "Contesto non corrispondente!", + "filter_modal.added.expired_explanation": "La categoria di questo filtro è scaduta, dovrai modificarne la data di scadenza per applicarlo.", + "filter_modal.added.expired_title": "Filtro scaduto!", + "filter_modal.added.review_and_configure": "Per revisionare e configurare ulteriormente la categoria di questo filtro, vai alle {settings_link}.", + "filter_modal.added.review_and_configure_title": "Impostazioni del filtro", + "filter_modal.added.settings_link": "pagina delle impostazioni", + "filter_modal.added.short_explanation": "Questo post è stato aggiunto alla categoria del filtro seguente: {title}.", + "filter_modal.added.title": "Filtro aggiunto!", + "filter_modal.select_filter.context_mismatch": "non si applica a questo contesto", + "filter_modal.select_filter.expired": "scaduto", + "filter_modal.select_filter.prompt_new": "Nuova categoria: {name}", + "filter_modal.select_filter.search": "Cerca o crea", + "filter_modal.select_filter.subtitle": "Usa una categoria esistente o creane una nuova", + "filter_modal.select_filter.title": "Filtra questo post", + "filter_modal.title.status": "Filtra un post", "follow_recommendations.done": "Fatto", "follow_recommendations.heading": "Segui le persone da cui vuoi vedere i messaggi! Ecco alcuni suggerimenti.", "follow_recommendations.lead": "I messaggi da persone che segui verranno visualizzati in ordine cronologico nel tuo home feed. Non abbiate paura di commettere errori, potete smettere di seguire le persone altrettanto facilmente in qualsiasi momento!", @@ -487,7 +487,7 @@ "status.edited_x_times": "Modificato {count, plural, one {{count} volta} other {{count} volte}}", "status.embed": "Incorpora", "status.favourite": "Apprezzato", - "status.filter": "Filter this post", + "status.filter": "Filtra questo post", "status.filtered": "Filtrato", "status.hide": "Nascondi toot", "status.history.created": "{name} ha creato {date}", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index e5dfc76892e..300b2d7c1ec 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -197,22 +197,22 @@ "explore.trending_links": "소식", "explore.trending_statuses": "게시물", "explore.trending_tags": "해시태그", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "이 필터 카테고리는 당신이 이 게시물에 접근한 문맥에 적용되지 않습니다. 만약 이 문맥에서도 필터되길 원한다면, 필터를 수정해야 합니다.", + "filter_modal.added.context_mismatch_title": "문맥 불일치!", + "filter_modal.added.expired_explanation": "이 필터 카테고리는 만료되었습니다, 적용하려면 만료 일자를 변경할 필요가 있습니다.", + "filter_modal.added.expired_title": "만료된 필터!", + "filter_modal.added.review_and_configure": "이 필터 카테고리를 검토하거나 나중에 더 설정하려면, {settings_link}로 가십시오.", + "filter_modal.added.review_and_configure_title": "필터 설정", + "filter_modal.added.settings_link": "설정 페이지", + "filter_modal.added.short_explanation": "이 게시물을 다음 필터 카테고리에 추가되었습니다: {title}.", + "filter_modal.added.title": "필터 추가됨!", + "filter_modal.select_filter.context_mismatch": "이 문맥에 적용되지 않습니다", + "filter_modal.select_filter.expired": "만료됨", + "filter_modal.select_filter.prompt_new": "새 카테고리: {name}", + "filter_modal.select_filter.search": "검색 또는 생성", + "filter_modal.select_filter.subtitle": "기존의 카테고리를 사용하거나 새로 하나를 만듧니다", + "filter_modal.select_filter.title": "이 게시물을 필터", + "filter_modal.title.status": "게시물 필터", "follow_recommendations.done": "완료", "follow_recommendations.heading": "게시물을 받아 볼 사람들을 팔로우 하세요! 여기 몇몇의 추천이 있습니다.", "follow_recommendations.lead": "당신이 팔로우 하는 사람들의 게시물이 시간순으로 정렬되어 당신의 홈 피드에 표시될 것입니다. 실수를 두려워 하지 마세요, 언제든지 쉽게 팔로우 취소를 할 수 있습니다!", @@ -487,7 +487,7 @@ "status.edited_x_times": "{count}번 수정됨", "status.embed": "공유하기", "status.favourite": "좋아요", - "status.filter": "Filter this post", + "status.filter": "이 게시물을 필터", "status.filtered": "필터로 걸러짐", "status.hide": "툿 숨기기", "status.history.created": "{name} 님이 {date}에 생성함", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index 27033efbfa4..06c0e6f7a0c 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -197,22 +197,22 @@ "explore.trending_links": "Nûçe", "explore.trending_statuses": "Şandî", "explore.trending_tags": "Hashtag", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Ev beşa parzûnê ji bo naveroka ku te tê de xwe gihandiye vê şandiyê nayê sepandin. Ku tu dixwazî şandî di vê naverokê de jî werê parzûnkirin, divê tu parzûnê biguherînî.", + "filter_modal.added.context_mismatch_title": "Naverok li hev nagire!", + "filter_modal.added.expired_explanation": "Ev beşa parzûnê qediya ye, ji bo ku tu bikaribe wê biguherîne divê tu dema qedandinê biguherînî.", + "filter_modal.added.expired_title": "Dema parzûnê qediya!", + "filter_modal.added.review_and_configure": "Ji bo nîrxandin û bêtir sazkirina vê beşa parzûnê, biçe {settings_link}.", + "filter_modal.added.review_and_configure_title": "Sazkariyên parzûnê", + "filter_modal.added.settings_link": "rûpela sazkariyan", + "filter_modal.added.short_explanation": "Ev şandî li beşa parzûna jêrîn hate tevlîkirin: {title}.", + "filter_modal.added.title": "Parzûn tevlî bû!", + "filter_modal.select_filter.context_mismatch": "di vê naverokê de nayê sepandin", + "filter_modal.select_filter.expired": "dema wê qediya", + "filter_modal.select_filter.prompt_new": "Beşa nû: {name}", + "filter_modal.select_filter.search": "Lê bigere an jî biafirîne", + "filter_modal.select_filter.subtitle": "Beşeke nû ya heyî bi kar bîne an jî yekî nû biafirîne", + "filter_modal.select_filter.title": "Vê şandiyê parzûn bike", + "filter_modal.title.status": "Şandiyekê parzûn bike", "follow_recommendations.done": "Qediya", "follow_recommendations.heading": "Mirovên ku tu dixwazî ji wan peyaman bibînî bişopîne! Hin pêşnîyar li vir in.", "follow_recommendations.lead": "Li gorî rêza kronolojîkî peyamên mirovên ku tu dişopînî dê demnameya te de xûya bike. Ji xeletiyan netirse, bi awayekî hêsan her wextî tu dikarî dev ji şopandinê berdî!", @@ -487,7 +487,7 @@ "status.edited_x_times": "{count, plural, one {{count} car} other {{count} car}} hate serrastkirin", "status.embed": "Hedimandî", "status.favourite": "Bijarte", - "status.filter": "Filter this post", + "status.filter": "Vê şandiyê parzûn bike", "status.filtered": "Parzûnkirî", "status.hide": "Şandiyê veşêre", "status.history.created": "{name} {date} afirand", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 1912dd7db13..33f6832bfd4 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -197,22 +197,22 @@ "explore.trending_links": "Jaunumi", "explore.trending_statuses": "Ziņas", "explore.trending_tags": "Tēmturi", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Šī filtra kategorija neattiecas uz kontekstu, kurā esi piekļuvis šai ziņai. Ja vēlies, lai ziņa tiktu filtrēta arī šajā kontekstā, tev būs jārediģē filtrs.", + "filter_modal.added.context_mismatch_title": "Konteksta neatbilstība!", + "filter_modal.added.expired_explanation": "Šai filtra kategorijai ir beidzies derīguma termiņš. Lai to lietotu, tev būs jāmaina derīguma termiņš.", + "filter_modal.added.expired_title": "Filtrs beidzies!", + "filter_modal.added.review_and_configure": "Lai pārskatītu un tālāk konfigurētu šo filtru kategoriju, dodies uz {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filtra iestatījumi", + "filter_modal.added.settings_link": "iestatījumu lapa", + "filter_modal.added.short_explanation": "Šī ziņa ir pievienota šai filtra kategorijai: {title}.", + "filter_modal.added.title": "Filtrs pievienots!", + "filter_modal.select_filter.context_mismatch": "neattiecas uz šo kontekstu", + "filter_modal.select_filter.expired": "beidzies", + "filter_modal.select_filter.prompt_new": "Jauna kategorija: {name}", + "filter_modal.select_filter.search": "Meklē vai izveido", + "filter_modal.select_filter.subtitle": "Izmanto esošu kategoriju vai izveido jaunu", + "filter_modal.select_filter.title": "Filtrēt šo ziņu", + "filter_modal.title.status": "Filtrēt ziņu", "follow_recommendations.done": "Izpildīts", "follow_recommendations.heading": "Seko cilvēkiem, no kuriem vēlies redzēt ziņas! Šeit ir daži ieteikumi.", "follow_recommendations.lead": "Ziņas no cilvēkiem, kuriem seko, mājas plūsmā tiks parādītas hronoloģiskā secībā. Nebaidies kļūdīties, tu tikpat viegli vari pārtraukt sekot cilvēkiem jebkurā laikā!", @@ -487,7 +487,7 @@ "status.edited_x_times": "Rediģēts {count, plural, one {{count} reize} other {{count} reizes}}", "status.embed": "Iestrādāt", "status.favourite": "Iecienītā", - "status.filter": "Filter this post", + "status.filter": "Filtrē šo ziņu", "status.filtered": "Filtrēts", "status.hide": "Slēpt", "status.history.created": "{name} izveidots {date}", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 04b0868ee1b..e264f80550a 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -197,22 +197,22 @@ "explore.trending_links": "Aktualności", "explore.trending_statuses": "Posty", "explore.trending_tags": "Hasztagi", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Ta kategoria filtrów nie ma zastosowania do kontekstu, w którym uzyskałeś dostęp do tego wpisu. Jeśli chcesz, aby wpis został przefiltrowany również w tym kontekście, będziesz musiał edytować filtr.", + "filter_modal.added.context_mismatch_title": "Niezgodność kontekstów!", + "filter_modal.added.expired_explanation": "Ta kategoria filtra wygasła, będziesz musiał zmienić datę wygaśnięcia, aby ją zastosować.", + "filter_modal.added.expired_title": "Wygasły filtr!", + "filter_modal.added.review_and_configure": "Aby przejrzeć i skonfigurować tę kategorię filtrów, przejdź do {settings_link}.", + "filter_modal.added.review_and_configure_title": "Ustawienia filtra", + "filter_modal.added.settings_link": "strona ustawień", + "filter_modal.added.short_explanation": "Ten wpis został dodany do następującej kategorii filtrów: {title}.", + "filter_modal.added.title": "Filtr dodany!", + "filter_modal.select_filter.context_mismatch": "nie dotyczy tego kontekstu", + "filter_modal.select_filter.expired": "wygasły", + "filter_modal.select_filter.prompt_new": "Nowa kategoria: {name}", + "filter_modal.select_filter.search": "Szukaj lub utwórz", + "filter_modal.select_filter.subtitle": "Użyj istniejącej kategorii lub utwórz nową", + "filter_modal.select_filter.title": "Filtruj ten wpis", + "filter_modal.title.status": "Filtruj wpis", "follow_recommendations.done": "Gotowe", "follow_recommendations.heading": "Śledź ludzi, których wpisy chcesz czytać. Oto kilka propozycji.", "follow_recommendations.lead": "Wpisy osób, które śledzisz będą pojawiać się w porządku chronologicznym na stronie głównej. Nie bój się popełniać błędów, możesz bez problemu przestać śledzić każdego w każdej chwili!", @@ -487,7 +487,7 @@ "status.edited_x_times": "Edytowano {count, plural, one {{count} raz} other {{count} razy}}", "status.embed": "Osadź", "status.favourite": "Dodaj do ulubionych", - "status.filter": "Filter this post", + "status.filter": "Filtruj ten wpis", "status.filtered": "Filtrowany(-a)", "status.hide": "Schowaj toota", "status.history.created": "{name} utworzył(a) {date}", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index ef097b38039..15fb991bdd2 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -197,22 +197,22 @@ "explore.trending_links": "Notícias", "explore.trending_statuses": "Publicações", "explore.trending_tags": "Hashtags", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Esta categoria de filtro não se aplica ao contexto em que acedeu a esta publicação. Se pretender que esta publicação seja filtrada também neste contexto, terá que editar o filtro.", + "filter_modal.added.context_mismatch_title": "Contexto incoerente!", + "filter_modal.added.expired_explanation": "Esta categoria de filtro expirou, necessita alterar a data de validade para que ele seja aplicado.", + "filter_modal.added.expired_title": "Filtro expirado!", + "filter_modal.added.review_and_configure": "Para rever e configurar mais detalhadamente esta categoria de filtro, vá a {settings_link}.", + "filter_modal.added.review_and_configure_title": "Definições do filtro", + "filter_modal.added.settings_link": "página de definições", + "filter_modal.added.short_explanation": "Esta publicação foi adicionada à seguinte categoria de filtro: {title}.", + "filter_modal.added.title": "Filtro adicionado!", + "filter_modal.select_filter.context_mismatch": "não se aplica a este contexto", + "filter_modal.select_filter.expired": "expirado", + "filter_modal.select_filter.prompt_new": "Nova categoria: {name}", + "filter_modal.select_filter.search": "Pesquisar ou criar", + "filter_modal.select_filter.subtitle": "Utilize uma categoria existente ou crie uma nova", + "filter_modal.select_filter.title": "Filtrar esta publicação", + "filter_modal.title.status": "Filtrar uma publicação", "follow_recommendations.done": "Concluído", "follow_recommendations.heading": "Siga pessoas das quais gostaria de ver publicações! Aqui estão algumas sugestões.", "follow_recommendations.lead": "As publicações das pessoas que segue serão exibidos em ordem cronológica na sua página inicial. Não tenha medo de cometer erros, você pode deixar de seguir as pessoas tão facilmente a qualquer momento!", @@ -487,7 +487,7 @@ "status.edited_x_times": "Editado {count, plural,one {{count} vez} other {{count} vezes}}", "status.embed": "Incorporar", "status.favourite": "Adicionar aos favoritos", - "status.filter": "Filter this post", + "status.filter": "Filtrar esta publicação", "status.filtered": "Filtrada", "status.hide": "Esconder publicação", "status.history.created": "{name} criado em {date}", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index e53088e395f..4c277544b10 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -7,12 +7,12 @@ "account.block_domain": "Заблокировать {domain}", "account.blocked": "Заблокирован(а)", "account.browse_more_on_origin_server": "Посмотреть в оригинальном профиле", - "account.cancel_follow_request": "Отменить запрос", + "account.cancel_follow_request": "Отменить подписку", "account.direct": "Написать @{name}", - "account.disable_notifications": "Отключить уведомления от @{name}", + "account.disable_notifications": "Не уведомлять о постах от @{name}", "account.domain_blocked": "Домен заблокирован", "account.edit_profile": "Редактировать профиль", - "account.enable_notifications": "Включить уведомления для @{name}", + "account.enable_notifications": "Уведомлять о постах от @{name}", "account.endorse": "Рекомендовать в профиле", "account.follow": "Подписаться", "account.followers": "Подписчики", @@ -30,7 +30,7 @@ "account.mention": "Упомянуть @{name}", "account.moved_to": "Ищите {name} здесь:", "account.mute": "Игнорировать @{name}", - "account.mute_notifications": "Скрыть уведомления от @{name}", + "account.mute_notifications": "Игнорировать уведомления от @{name}", "account.muted": "Игнорируется", "account.posts": "Посты", "account.posts_with_replies": "Посты и ответы", @@ -44,7 +44,7 @@ "account.unblock_short": "Разблокировать", "account.unendorse": "Не рекомендовать в профиле", "account.unfollow": "Отписаться", - "account.unmute": "Не игнорировать @{name}", + "account.unmute": "Убрать {name} из игнорируемых", "account.unmute_notifications": "Показывать уведомления от @{name}", "account.unmute_short": "Не игнорировать", "account_note.placeholder": "Текст заметки", @@ -127,7 +127,7 @@ "confirmations.discard_edit_media.confirm": "Отменить", "confirmations.discard_edit_media.message": "У вас есть несохранённые изменения описания мультимедиа или предпросмотра, отменить их?", "confirmations.domain_block.confirm": "Да, заблокировать узел", - "confirmations.domain_block.message": "Вы точно уверены, что хотите скрыть все посты с узла {domain}? В большинстве случаев пары блокировок и скрытий вполне достаточно.\n\nПри блокировке узла, вы перестанете получать уведомления оттуда, все посты будут скрыты из публичных лент, а подписчики убраны.", + "confirmations.domain_block.message": "Вы точно уверены, что хотите заблокировать {domain} полностью? В большинстве случаев нескольких блокировок и игнорирований вполне достаточно. Вы перестанете видеть публичную ленту и уведомления оттуда. Ваши подписчики из этого домена будут удалены.", "confirmations.logout.confirm": "Выйти", "confirmations.logout.message": "Вы уверены, что хотите выйти?", "confirmations.mute.confirm": "Игнорировать", @@ -197,22 +197,22 @@ "explore.trending_links": "Новости", "explore.trending_statuses": "Посты", "explore.trending_tags": "Хэштеги", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Эта категория не применяется к контексту, в котором вы получили доступ к этому посту. Если вы хотите, чтобы пост был отфильтрован в этом контексте, вам придётся отредактировать фильтр.", + "filter_modal.added.context_mismatch_title": "Несоответствие контекста!", + "filter_modal.added.expired_explanation": "Эта категория фильтра устарела, вам нужно изменить дату окончания фильтра, чтобы применить его.", + "filter_modal.added.expired_title": "Истёкший фильтр!", + "filter_modal.added.review_and_configure": "Для просмотра и настройки этой категории фильтра, перейдите в {settings_link}.", + "filter_modal.added.review_and_configure_title": "Настройки фильтра", + "filter_modal.added.settings_link": "страница настроек", + "filter_modal.added.short_explanation": "Этот пост был добавлен в следующую категорию фильтра: {title}.", + "filter_modal.added.title": "Фильтр добавлен!", + "filter_modal.select_filter.context_mismatch": "не применяется к этому контексту", + "filter_modal.select_filter.expired": "истекло", + "filter_modal.select_filter.prompt_new": "Новая категория: {name}", + "filter_modal.select_filter.search": "Поиск или создание", + "filter_modal.select_filter.subtitle": "Используйте существующую категорию или создайте новую", + "filter_modal.select_filter.title": "Фильтровать этот пост", + "filter_modal.title.status": "Фильтровать пост", "follow_recommendations.done": "Готово", "follow_recommendations.heading": "Подпишитесь на людей, чьи посты вы бы хотели видеть. Вот несколько предложений.", "follow_recommendations.lead": "Посты от людей, на которых вы подписаны, будут отображаться в вашей домашней ленте в хронологическом порядке. Не бойтесь ошибиться — вы так же легко сможете отписаться от них в любое время!", @@ -266,7 +266,7 @@ "keyboard_shortcuts.legend": "показать это окно", "keyboard_shortcuts.local": "перейти к локальной ленте", "keyboard_shortcuts.mention": "упомянуть автора поста", - "keyboard_shortcuts.muted": "открыть список игнорируемых", + "keyboard_shortcuts.muted": "Открыть список игнорируемых", "keyboard_shortcuts.my_profile": "перейти к своему профилю", "keyboard_shortcuts.notifications": "перейти к уведомлениям", "keyboard_shortcuts.open_media": "открыть вложение", @@ -328,7 +328,7 @@ "navigation_bar.keyboard_shortcuts": "Сочетания клавиш", "navigation_bar.lists": "Списки", "navigation_bar.logout": "Выйти", - "navigation_bar.mutes": "Список игнорируемых пользователей", + "navigation_bar.mutes": "Игнорируемые пользователи", "navigation_bar.personal": "Личное", "navigation_bar.pins": "Закреплённые посты", "navigation_bar.preferences": "Настройки", @@ -487,7 +487,7 @@ "status.edited_x_times": "{count, plural, one {{count} изменение} many {{count} изменений} other {{count} изменения}}", "status.embed": "Встроить на свой сайт", "status.favourite": "В избранное", - "status.filter": "Filter this post", + "status.filter": "Фильтровать этот пост", "status.filtered": "Отфильтровано", "status.hide": "Скрыть пост", "status.history.created": "{name} создал {date}", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 8aeb2aec632..12885864697 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -59,7 +59,7 @@ "alert.unexpected.title": "Ups!", "announcement.announcement": "Oboznámenie", "attachments_list.unprocessed": "(nespracované)", - "audio.hide": "Hide audio", + "audio.hide": "Skry zvuk", "autosuggest_hashtag.per_week": "{count} týždenne", "boost_modal.combo": "Nabudúce môžeš kliknúť {combo} pre preskočenie", "bundle_column_error.body": "Pri načítaní tohto prvku nastala nejaká chyba.", @@ -202,12 +202,12 @@ "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", "filter_modal.added.expired_title": "Expired filter!", "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", + "filter_modal.added.review_and_configure_title": "Nastavenie triedenia", "filter_modal.added.settings_link": "settings page", "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", + "filter_modal.added.title": "Triedenie pridané!", "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", + "filter_modal.select_filter.expired": "vypršalo", "filter_modal.select_filter.prompt_new": "New category: {name}", "filter_modal.select_filter.search": "Search or create", "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", @@ -403,7 +403,7 @@ "privacy.unlisted.short": "Verejne, ale nezobraziť v osi", "refresh": "Obnoviť", "regeneration_indicator.label": "Načítava sa…", - "regeneration_indicator.sublabel": "Vaša nástenka sa pripravuje!", + "regeneration_indicator.sublabel": "Tvoja domovská nástenka sa pripravuje!", "relative_time.days": "{number}dní", "relative_time.full.days": "{number, plural, one {# day} other {# days}} ago", "relative_time.full.hours": "{number, plural, one {# hour} other {# hours}} ago", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index c793d9de805..89894acf8a6 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -197,22 +197,22 @@ "explore.trending_links": "Novice", "explore.trending_statuses": "Objave", "explore.trending_tags": "Ključniki", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Ta kategorija filtra ne velja za kontekst, v katerem ste dostopali do te objave. Če želite, da je objava filtrirana tudi v tem kontekstu, morate urediti filter.", + "filter_modal.added.context_mismatch_title": "Neujamanje konteksta!", + "filter_modal.added.expired_explanation": "Ta kategorija filtra je pretekla, morali boste spremeniti datum veljavnosti, da bo veljal še naprej.", + "filter_modal.added.expired_title": "Filter je pretekel!", + "filter_modal.added.review_and_configure": "Če želite pregledati in nadalje prilagoditi kategorijo filtra, obiščite {settings_link}.", + "filter_modal.added.review_and_configure_title": "Nastavitve filtra", + "filter_modal.added.settings_link": "stran nastavitev", + "filter_modal.added.short_explanation": "Ta objava je bila dodana v naslednjo kategorijo filtra: {title}.", + "filter_modal.added.title": "Filter dodan!", + "filter_modal.select_filter.context_mismatch": "ne velja za ta kontekst", + "filter_modal.select_filter.expired": "poteklo", + "filter_modal.select_filter.prompt_new": "Nova kategorija: {name}", + "filter_modal.select_filter.search": "Išči ali ustvari", + "filter_modal.select_filter.subtitle": "Uporabite obstoječo kategorijo ali ustvarite novo", + "filter_modal.select_filter.title": "Filtriraj to objavo", + "filter_modal.title.status": "Filtrirajte objave", "follow_recommendations.done": "Opravljeno", "follow_recommendations.heading": "Sledite osebam, katerih objave želite videti! Tukaj je nekaj predlogov.", "follow_recommendations.lead": "Objave oseb, ki jim sledite, se bodo prikazale v kronološkem zaporedju v vašem domačem viru. Ne bojte se storiti napake, osebam enako enostavno nehate slediti kadar koli!", @@ -487,7 +487,7 @@ "status.edited_x_times": "Urejeno {count, plural, one {#-krat} two {#-krat} few {#-krat} other {#-krat}}", "status.embed": "Vgradi", "status.favourite": "Priljubljen", - "status.filter": "Filter this post", + "status.filter": "Filtriraj to objavo", "status.filtered": "Filtrirano", "status.hide": "Skrij tut", "status.history.created": "{name}: ustvarjeno {date}", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 728cfac114d..6c9529a32e8 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -9,21 +9,21 @@ "account.browse_more_on_origin_server": "மேலும் உலாவ சுயவிவரத்திற்குச் செல்க", "account.cancel_follow_request": "பின்தொடரும் கோரிக்கையை நிராகரி", "account.direct": "நேரடி செய்தி @{name}", - "account.disable_notifications": "Stop notifying me when @{name} posts", + "account.disable_notifications": "@{name} பதிவிட்டல் எனக்கு தெரியபடுத்த வேண்டாம்", "account.domain_blocked": "மறைக்கப்பட்டத் தளங்கள்", "account.edit_profile": "சுயவிவரத்தை மாற்று", - "account.enable_notifications": "Notify me when @{name} posts", + "account.enable_notifications": "@{name} பதிவிட்டல் எனக்குத் தெரியப்படுத்தவும்", "account.endorse": "சுயவிவரத்தில் வெளிப்படுத்து", "account.follow": "பின்தொடர்", "account.followers": "பின்தொடர்பவர்கள்", "account.followers.empty": "இதுவரை யாரும் இந்த பயனரைப் பின்தொடரவில்லை.", "account.followers_counter": "{count, plural, one {{counter} வாசகர்} other {{counter} வாசகர்கள்}}", - "account.following": "Following", + "account.following": "பின்தொடரும்", "account.following_counter": "{count, plural,one {{counter} சந்தா} other {{counter} சந்தாக்கள்}}", "account.follows.empty": "இந்த பயனர் இதுவரை யாரையும் பின்தொடரவில்லை.", "account.follows_you": "உங்களைப் பின்தொடர்கிறார்", "account.hide_reblogs": "இருந்து ஊக்கியாக மறை @{name}", - "account.joined": "Joined {date}", + "account.joined": "சேர்ந்த நாள் {date}", "account.link_verified_on": "இந்த இணைப்பை உரிமையாளர் சரிபார்க்கப்பட்டது {date}", "account.locked_info": "இந்தக் கணக்கு தனியுரிமை நிலை பூட்டப்பட்டுள்ளது. அவர்களைப் பின்தொடர்பவர் யார் என்பதை உரிமையாளர் கைமுறையாக மதிப்பாய்வு செய்கிறார்.", "account.media": "ஊடகங்கள்", @@ -41,25 +41,25 @@ "account.statuses_counter": "{count, plural, one {{counter} டூட்} other {{counter} டூட்டுகள்}}", "account.unblock": "@{name} மீது தடை நீக்குக", "account.unblock_domain": "{domain} ஐ காண்பி", - "account.unblock_short": "Unblock", + "account.unblock_short": "தடையை நீக்கு", "account.unendorse": "சுயவிவரத்தில் இடம்பெற வேண்டாம்", "account.unfollow": "பின்தொடர்வதை நிறுத்துக", "account.unmute": "@{name} இன் மீது மௌனத் தடையை நீக்குக", "account.unmute_notifications": "@{name} இலிருந்து அறிவிப்புகளின் மீது மௌனத் தடையை நீக்குக", - "account.unmute_short": "Unmute", + "account.unmute_short": "அமைதியை நீக்கு", "account_note.placeholder": "குறிப்பு ஒன்றை சேர்க்க சொடுக்கவும்", - "admin.dashboard.daily_retention": "User retention rate by day after sign-up", - "admin.dashboard.monthly_retention": "User retention rate by month after sign-up", - "admin.dashboard.retention.average": "Average", - "admin.dashboard.retention.cohort": "Sign-up month", - "admin.dashboard.retention.cohort_size": "New users", + "admin.dashboard.daily_retention": "பதிவுசெய்த பிறகு நாள்தோறும் பயனர் தக்கவைப்பு விகிதம்", + "admin.dashboard.monthly_retention": "பதிவுசெய்த பிறகு மாதந்தோறும் பயனர் தக்கவைப்பு விகிதம்", + "admin.dashboard.retention.average": "சராசரி", + "admin.dashboard.retention.cohort": "பதிவுசெய்த மாதம்", + "admin.dashboard.retention.cohort_size": "புதிய பயனர்கள்", "alert.rate_limited.message": "{retry_time, time, medium} க்கு பிறகு மீண்டும் முயற்சிக்கவும்.", "alert.rate_limited.title": "பயன்பாடு கட்டுப்படுத்தப்பட்டுள்ளது", "alert.unexpected.message": "எதிர்பாராத பிழை ஏற்பட்டுவிட்டது.", "alert.unexpected.title": "அச்சச்சோ!", "announcement.announcement": "அறிவிப்பு", - "attachments_list.unprocessed": "(unprocessed)", - "audio.hide": "Hide audio", + "attachments_list.unprocessed": "(செயலாக்கப்படாதது)", + "audio.hide": "ஆடியோவை மறை", "autosuggest_hashtag.per_week": "ஒவ்வொரு வாரம் {count}", "boost_modal.combo": "நீங்கள் இதை அடுத்தமுறை தவிர்க்க {combo} வை அழுத்தவும்", "bundle_column_error.body": "இக்கூற்றை ஏற்றம் செய்யும்பொழுது ஏதோ தவறு ஏற்பட்டுள்ளது.", @@ -71,7 +71,7 @@ "column.blocks": "தடுக்கப்பட்ட பயனர்கள்", "column.bookmarks": "அடையாளக்குறிகள்", "column.community": "சுய நிகழ்வு காலவரிசை", - "column.direct": "Direct messages", + "column.direct": "நேரடி செய்திகள்", "column.directory": "சுயவிவரங்களை உலாவு", "column.domain_blocks": "மறைந்திருக்கும் திரளங்கள்", "column.favourites": "பிடித்தவைகள்", @@ -93,10 +93,10 @@ "community.column_settings.local_only": "அருகிலிருந்து மட்டுமே", "community.column_settings.media_only": "படங்கள் மட்டுமே", "community.column_settings.remote_only": "தொலைவிலிருந்து மட்டுமே", - "compose.language.change": "Change language", - "compose.language.search": "Search languages...", + "compose.language.change": "மொழியை மாற்று", + "compose.language.search": "தேடல் மொழிகள்...", "compose_form.direct_message_warning_learn_more": "மேலும் அறிய", - "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", + "compose_form.encryption_warning": "Mastodonல் உள்ள பதிவுகள் முறையாக என்க்ரிப்ட்(encrypt) செய்யபடவில்லை. அதனால் முக்கிய தகவல்களை இங்கே பகிர வேண்டாம்.", "compose_form.hashtag_warning": "இது ஒரு பட்டியலிடப்படாத டூட் என்பதால் எந்த ஹேஷ்டேகின் கீழும் வராது. ஹேஷ்டேகின் மூலம் பொதுவில் உள்ள டூட்டுகளை மட்டுமே தேட முடியும்.", "compose_form.lock_disclaimer": "உங்கள் கணக்கு {locked} செய்யப்படவில்லை. உங்கள் பதிவுகளை யார் வேண்டுமானாலும் பின்தொடர்ந்து காணலாம்.", "compose_form.lock_disclaimer.lock": "பூட்டப்பட்டது", @@ -107,9 +107,9 @@ "compose_form.poll.remove_option": "இந்தத் தேர்வை அகற்று", "compose_form.poll.switch_to_multiple": "பல தேர்வுகளை அனுமதிக்குமாறு மாற்று", "compose_form.poll.switch_to_single": "ஒரே ஒரு தேர்வை மட்டும் அனுமதிக்குமாறு மாற்று", - "compose_form.publish": "Publish", + "compose_form.publish": "வெளியிடு", "compose_form.publish_loud": "{publish}!", - "compose_form.save_changes": "Save changes", + "compose_form.save_changes": "மாற்றங்களை சேமி", "compose_form.sensitive.hide": "அனைவருக்கும் ஏற்றப் படம் இல்லை எனக் குறியிடு", "compose_form.sensitive.marked": "இப்படம் அனைவருக்கும் ஏற்றதல்ல எனக் குறியிடப்பட்டுள்ளது", "compose_form.sensitive.unmarked": "இப்படம் அனைவருக்கும் ஏற்றதல்ல எனக் குறியிடப்படவில்லை", @@ -124,8 +124,8 @@ "confirmations.delete.message": "இப்பதிவை நிச்சயமாக நீக்க விரும்புகிறீர்களா?", "confirmations.delete_list.confirm": "நீக்கு", "confirmations.delete_list.message": "இப்பட்டியலை நிரந்தரமாக நீக்க நிச்சயம் விரும்புகிறீர்களா?", - "confirmations.discard_edit_media.confirm": "Discard", - "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", + "confirmations.discard_edit_media.confirm": "நிராகரி", + "confirmations.discard_edit_media.message": "சேமிக்கப்படாத மாற்றங்கள் ஊடக விளக்கம் அல்லது முன்னோட்டத்தில் உள்ளது. அவற்றை நிராகரிக்கவா?", "confirmations.domain_block.confirm": "முழு களத்தையும் மறை", "confirmations.domain_block.message": "நீங்கள் முழு {domain} களத்தையும் நிச்சயமாக, நிச்சயமாகத் தடுக்க விரும்புகிறீர்களா? பெரும்பாலும் சில குறிப்பிட்ட பயனர்களைத் தடுப்பதே போதுமானது. முழு களத்தையும் தடுத்தால், அதிலிருந்து வரும் எந்தப் பதிவையும் உங்களால் காண முடியாது, மேலும் அப்பதிவுகள் குறித்த அறிவிப்புகளும் உங்களுக்கு வராது. அந்தக் களத்தில் இருக்கும் பின்தொடர்பவர்கள் உங்கள் பக்கத்திலிருந்து நீக்கப்படுவார்கள்.", "confirmations.logout.confirm": "வெளியேறு", @@ -150,7 +150,7 @@ "embed.instructions": "இந்தப் பதிவை உங்கள் வலைதளத்தில் பொதிக்கக் கீழே உள்ள வரிகளை காப்பி செய்யவும்.", "embed.preview": "பார்க்க இப்படி இருக்கும்:", "emoji_button.activity": "செயல்பாடு", - "emoji_button.clear": "Clear", + "emoji_button.clear": "அழி", "emoji_button.custom": "தனிப்பயன்", "emoji_button.flags": "கொடிகள்", "emoji_button.food": "உணவு மற்றும் பானம்", @@ -164,13 +164,13 @@ "emoji_button.search_results": "தேடல் முடிவுகள்", "emoji_button.symbols": "குறியீடுகள்", "emoji_button.travel": "சுற்றுலா மற்றும் இடங்கள்", - "empty_column.account_suspended": "Account suspended", + "empty_column.account_suspended": "கணக்கு இடைநீக்கப்பட்டது", "empty_column.account_timeline": "டூட்டுகள் ஏதும் இல்லை!", "empty_column.account_unavailable": "சுயவிவரம் கிடைக்கவில்லை", "empty_column.blocks": "நீங்கள் இதுவரை எந்தப் பயனர்களையும் முடக்கியிருக்கவில்லை.", "empty_column.bookmarked_statuses": "உங்களிடம் அடையாளக்குறியிட்ட டூட்டுகள் எவையும் இல்லை. அடையாளக்குறியிட்ட பிறகு அவை இங்கே காட்டப்படும்.", "empty_column.community": "உங்கள் மாஸ்டடான் முச்சந்தியில் யாரும் இல்லை. எதையேனும் எழுதி ஆட்டத்தைத் துவக்குங்கள்!", - "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.direct": "உங்களுக்குத் தனிப்பட்ட செய்திகள் ஏதும் இல்லை. செய்தியை நீங்கள் அனுப்பும்போதோ அல்லது பெறும்போதோ, அது இங்கே காண்பிக்கப்படும்.", "empty_column.domain_blocks": "தடுக்கப்பட்டக் களங்கள் இதுவரை இல்லை.", "empty_column.explore_statuses": "Nothing is trending right now. Check back later!", "empty_column.favourited_statuses": "உங்களுக்குப் பிடித்த டூட்டுகள் இதுவரை இல்லை. ஒரு டூட்டில் நீங்கள் விருப்பக்குறி இட்டால், அது இங்கே காண்பிக்கப்படும்.", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 38539d512c5..9fcb877d33e 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -198,21 +198,21 @@ "explore.trending_statuses": "โพสต์", "explore.trending_tags": "แฮชแท็ก", "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.context_mismatch_title": "บริบทไม่ตรงกัน!", "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", "filter_modal.added.expired_title": "Expired filter!", "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", + "filter_modal.added.review_and_configure_title": "การตั้งค่าตัวกรอง", + "filter_modal.added.settings_link": "หน้าการตั้งค่า", "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.title": "เพิ่มตัวกรองแล้ว!", + "filter_modal.select_filter.context_mismatch": "ไม่นำไปใช้กับบริบทนี้", + "filter_modal.select_filter.expired": "หมดอายุแล้ว", + "filter_modal.select_filter.prompt_new": "หมวดหมู่ใหม่: {name}", + "filter_modal.select_filter.search": "ค้นหาหรือสร้าง", + "filter_modal.select_filter.subtitle": "ใช้หมวดหมู่ที่มีอยู่หรือสร้างหมวดหมู่ใหม่", + "filter_modal.select_filter.title": "กรองโพสต์นี้", + "filter_modal.title.status": "กรองโพสต์", "follow_recommendations.done": "เสร็จสิ้น", "follow_recommendations.heading": "ติดตามผู้คนที่คุณต้องการเห็นโพสต์! นี่คือข้อเสนอแนะบางส่วน", "follow_recommendations.lead": "โพสต์จากผู้คนที่คุณติดตามจะแสดงตามลำดับเวลาในฟีดหน้าแรกของคุณ อย่ากลัวที่จะทำผิดพลาด คุณสามารถเลิกติดตามผู้คนได้อย่างง่ายดายเมื่อใดก็ตาม!", @@ -487,7 +487,7 @@ "status.edited_x_times": "แก้ไข {count, plural, other {{count} ครั้ง}}", "status.embed": "ฝัง", "status.favourite": "ชื่นชอบ", - "status.filter": "Filter this post", + "status.filter": "กรองโพสต์นี้", "status.filtered": "กรองอยู่", "status.hide": "ซ่อนโพสต์", "status.history.created": "{name} ได้สร้างเมื่อ {date}", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 35c888e477b..bb67ef2f6f3 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -197,22 +197,22 @@ "explore.trending_links": "Haberler", "explore.trending_statuses": "Gönderiler", "explore.trending_tags": "Etiketler", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Bu filtre kategorisi, bu gönderide eriştiğin bağlama uymuyor. Eğer gönderinin bu bağlamda da filtrelenmesini istiyorsanız, filtreyi düzenlemeniz gerekiyor.", + "filter_modal.added.context_mismatch_title": "Bağlam uyumsuzluğu!", + "filter_modal.added.expired_explanation": "Bu filtre kategorisinin süresi dolmuş, filtreyi uygulamak için bitiş tarihini değiştirmeniz gerekiyor.", + "filter_modal.added.expired_title": "Süresi dolmuş filtre!", + "filter_modal.added.review_and_configure": "Bu filtre kategorisini gözden geçirmek ve daha ayrıntılı bir şekilde yapılandırmak için {settings_link} adresine gidin.", + "filter_modal.added.review_and_configure_title": "Filtre ayarları", + "filter_modal.added.settings_link": "ayarlar sayfası", + "filter_modal.added.short_explanation": "Bu gönderi şu filtre kategorisine eklendi: {title}.", + "filter_modal.added.title": "Filtre eklendi!", + "filter_modal.select_filter.context_mismatch": "bu bağlama uymuyor", + "filter_modal.select_filter.expired": "süresi dolmuş", + "filter_modal.select_filter.prompt_new": "Yeni kategori: {name}", + "filter_modal.select_filter.search": "Ara veya oluştur", + "filter_modal.select_filter.subtitle": "Mevcut bir kategoriyi kullan veya yeni bir tane oluştur", + "filter_modal.select_filter.title": "Bu gönderiyi filtrele", + "filter_modal.title.status": "Bir gönderi filtrele", "follow_recommendations.done": "Tamam", "follow_recommendations.heading": "Gönderilerini görmek isteyeceğiniz kişileri takip edin! Burada bazı öneriler bulabilirsiniz.", "follow_recommendations.lead": "Takip ettiğiniz kişilerin gönderileri anasayfa akışınızda kronolojik sırada görünmeye devam edecek. Hata yapmaktan çekinmeyin, kişileri istediğiniz anda kolayca takipten çıkabilirsiniz!", @@ -487,7 +487,7 @@ "status.edited_x_times": "{count, plural, one {{count} kez} other {{count} kez}} düzenlendi", "status.embed": "Gömülü", "status.favourite": "Favorilerine ekle", - "status.filter": "Filter this post", + "status.filter": "Bu gönderiyi filtrele", "status.filtered": "Filtrelenmiş", "status.hide": "Gönderiyi sakla", "status.history.created": "{name} oluşturdu {date}", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index e1b10445d43..a14e2125b77 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -197,22 +197,22 @@ "explore.trending_links": "Новини", "explore.trending_statuses": "Дописи", "explore.trending_tags": "Хештеґи", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Ця категорія фільтра не застосовується до контексту, в якому ви отримали доступ до цього допису. Якщо ви хочете, щоб дописи також фільтрувалися за цим контекстом, вам доведеться редагувати фільтр.", + "filter_modal.added.context_mismatch_title": "Невідповідність контексту!", + "filter_modal.added.expired_explanation": "Категорія цього фільтра застаріла, Вам потрібно змінити дату закінчення терміну дії, щоб застосувати її.", + "filter_modal.added.expired_title": "Застарілий фільтр!", + "filter_modal.added.review_and_configure": "Щоб розглянути та далі налаштувати цю категорію фільтрів, перейдіть на {settings_link}.", + "filter_modal.added.review_and_configure_title": "Налаштування фільтра", + "filter_modal.added.settings_link": "сторінка налаштувань", + "filter_modal.added.short_explanation": "Цей допис було додано до такої категорії фільтра: {title}.", + "filter_modal.added.title": "Фільтр додано!", + "filter_modal.select_filter.context_mismatch": "не застосовується до цього контексту", + "filter_modal.select_filter.expired": "застарілий", + "filter_modal.select_filter.prompt_new": "Нова категорія: {name}", + "filter_modal.select_filter.search": "Пошук або створення", + "filter_modal.select_filter.subtitle": "Використати наявну категорію або створити нову", + "filter_modal.select_filter.title": "Фільтрувати цей допис", + "filter_modal.title.status": "Фільтрувати допис", "follow_recommendations.done": "Готово", "follow_recommendations.heading": "Підпишіться на людей, чиї дописи ви хочете бачити! Ось деякі пропозиції.", "follow_recommendations.lead": "Дописи від людей, за якими ви стежите, з'являться в хронологічному порядку у вашій домашній стрічці. Не бійся помилятися, ви можете відписатися від людей так само легко в будь-який час!", @@ -487,7 +487,7 @@ "status.edited_x_times": "Відредаговано {count, plural, one {{count} раз} few {{count} рази} many {{counter} разів} other {{counter} разів}}", "status.embed": "Вбудувати", "status.favourite": "Подобається", - "status.filter": "Filter this post", + "status.filter": "Фільтрувати цей допис", "status.filtered": "Відфільтровано", "status.hide": "Сховати дмух", "status.history.created": "{name} створює {date}", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 3dc6db11223..d1b5684afcc 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -197,22 +197,22 @@ "explore.trending_links": "Tin tức", "explore.trending_statuses": "Tút", "explore.trending_tags": "Hashtag", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Danh mục bộ lọc này không áp dụng cho ngữ cảnh mà bạn đã truy cập tút này. Nếu bạn muốn tút cũng được lọc trong ngữ cảnh này, bạn sẽ phải chỉnh sửa bộ lọc.", + "filter_modal.added.context_mismatch_title": "Bối cảnh không phù hợp!", + "filter_modal.added.expired_explanation": "Danh mục bộ lọc này đã hết hạn, bạn sẽ cần thay đổi ngày hết hạn để áp dụng.", + "filter_modal.added.expired_title": "Bộ lọc đã hết hạn!", + "filter_modal.added.review_and_configure": "Để xem lại và định cấu hình thêm danh mục bộ lọc này, hãy xem {settings_link}.", + "filter_modal.added.review_and_configure_title": "Thiết lập bộ lọc", + "filter_modal.added.settings_link": "trang cài đặt", + "filter_modal.added.short_explanation": "Tút này đã được thêm vào danh mục bộ lọc sau: {title}.", + "filter_modal.added.title": "Đã thêm bộ lọc!", + "filter_modal.select_filter.context_mismatch": "không áp dụng cho bối cảnh này", + "filter_modal.select_filter.expired": "hết hạn", + "filter_modal.select_filter.prompt_new": "Danh mục mới: {name}", + "filter_modal.select_filter.search": "Tìm kiếm hoặc tạo mới", + "filter_modal.select_filter.subtitle": "Sử dụng một danh mục hiện có hoặc tạo một danh mục mới", + "filter_modal.select_filter.title": "Lọc tút này", + "filter_modal.title.status": "Lọc một tút", "follow_recommendations.done": "Xong", "follow_recommendations.heading": "Theo dõi những người bạn muốn đọc tút của họ! Dưới đây là vài gợi ý.", "follow_recommendations.lead": "Tút từ những người bạn theo dõi sẽ hiện theo thứ tự thời gian trên bảng tin. Đừng ngại, bạn có thể dễ dàng ngưng theo dõi họ bất cứ lúc nào!", @@ -487,7 +487,7 @@ "status.edited_x_times": "Đã sửa {count, plural, other {{count} lần}}", "status.embed": "Nhúng", "status.favourite": "Thích", - "status.filter": "Filter this post", + "status.filter": "Lọc tút này", "status.filtered": "Bộ lọc", "status.hide": "Ẩn tút", "status.history.created": "{name} tạo lúc {date}", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 9241eeec8a0..5d0dfa2029e 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -197,22 +197,22 @@ "explore.trending_links": "最新消息", "explore.trending_statuses": "嘟文", "explore.trending_tags": "话题标签", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "此过滤器分类不适用访问过嘟文的环境中。如果你想要在环境中过滤嘟文,你必须编辑此过滤器。", + "filter_modal.added.context_mismatch_title": "环境不匹配!", + "filter_modal.added.expired_explanation": "此过滤器分类已过期,你需要修改到期日期才能应用。", + "filter_modal.added.expired_title": "过滤器已过期!", + "filter_modal.added.review_and_configure": "要审核并进一步配置此过滤器分类,请前往{settings_link}。", + "filter_modal.added.review_and_configure_title": "过滤器设置", + "filter_modal.added.settings_link": "设置页面", + "filter_modal.added.short_explanation": "此嘟文已添加到以下过滤器分类:{title}。", + "filter_modal.added.title": "过滤器已添加 !", + "filter_modal.select_filter.context_mismatch": "不适用于此环境", + "filter_modal.select_filter.expired": "已过期", + "filter_modal.select_filter.prompt_new": "新分类:{name}", + "filter_modal.select_filter.search": "搜索或创建", + "filter_modal.select_filter.subtitle": "使用一个已存在分类,或创建一个新分类", + "filter_modal.select_filter.title": "过滤此嘟文", + "filter_modal.title.status": "过滤一条嘟文", "follow_recommendations.done": "完成", "follow_recommendations.heading": "关注你感兴趣的用户!这里有一些推荐。", "follow_recommendations.lead": "你关注的人的嘟文将按时间顺序在你的主页上显示。 别担心,你可以随时取消关注!", @@ -487,7 +487,7 @@ "status.edited_x_times": "共编辑 {count, plural, one {{count} 次} other {{count} 次}}", "status.embed": "嵌入", "status.favourite": "喜欢", - "status.filter": "Filter this post", + "status.filter": "过滤此嘟文", "status.filtered": "已过滤", "status.hide": "屏蔽嘟文", "status.history.created": "{name} 创建于 {date}", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 13eee62de78..337cad60b6b 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -197,22 +197,22 @@ "explore.trending_links": "最新消息", "explore.trending_statuses": "嘟文", "explore.trending_tags": "主題標籤", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "此過濾器類別不是用您所存取嘟文的情境。若您想要此嘟文被於此情境被過濾,您必須編輯過濾器。", + "filter_modal.added.context_mismatch_title": "不符合情境!", + "filter_modal.added.expired_explanation": "此過濾器類別已失效,您需要更新過期日期以套用。", + "filter_modal.added.expired_title": "過期的過濾器!", + "filter_modal.added.review_and_configure": "若欲檢視和進一步設定此過濾器類別,請至 {settings_link}。", + "filter_modal.added.review_and_configure_title": "過濾器設定", + "filter_modal.added.settings_link": "設定頁面", + "filter_modal.added.short_explanation": "此嘟文已被新增至以下過濾器類別:{title}。", + "filter_modal.added.title": "已新增過濾器!", + "filter_modal.select_filter.context_mismatch": "不是用目前情境", + "filter_modal.select_filter.expired": "已過期", + "filter_modal.select_filter.prompt_new": "新類別:{name}", + "filter_modal.select_filter.search": "搜尋或新增", + "filter_modal.select_filter.subtitle": "使用既有的類別或是新增", + "filter_modal.select_filter.title": "過濾此嘟文", + "filter_modal.title.status": "過濾一則嘟文", "follow_recommendations.done": "完成", "follow_recommendations.heading": "跟隨您想檢視其嘟文的人!這裡有一些建議。", "follow_recommendations.lead": "來自您跟隨的人之嘟文將會按時間順序顯示在您的首頁時間軸上。不要害怕犯錯,您隨時都可以取消跟隨其他人!", @@ -487,7 +487,7 @@ "status.edited_x_times": "已編輯 {count, plural, one {{count} 次} other {{count} 次}}", "status.embed": "內嵌", "status.favourite": "最愛", - "status.filter": "Filter this post", + "status.filter": "過濾此嘟文", "status.filtered": "已過濾", "status.hide": "隱藏嘟文", "status.history.created": "{name} 於 {date} 建立", diff --git a/config/locales/activerecord.pt-BR.yml b/config/locales/activerecord.pt-BR.yml index ad034fdbcc6..105f5a550cf 100644 --- a/config/locales/activerecord.pt-BR.yml +++ b/config/locales/activerecord.pt-BR.yml @@ -38,3 +38,13 @@ pt-BR: email: blocked: usa provedor de e-mail não permitido unreachable: parece não existir + role_id: + elevated: não pode ser maior do que sua função atual + user_role: + attributes: + permissions_as_keys: + elevated: não pode incluir permissões que a sua função atual não possui + own_role: não pode ser alterado com sua função atual + position: + elevated: não pode ser maior do que sua função atual + own_role: não pode ser alterado com sua função atual diff --git a/config/locales/activerecord.ru.yml b/config/locales/activerecord.ru.yml index 2a267cfd2b7..fb8c6dde510 100644 --- a/config/locales/activerecord.ru.yml +++ b/config/locales/activerecord.ru.yml @@ -44,4 +44,8 @@ ru: attributes: permissions_as_keys: dangerous: включить разрешения, небезопасные для базовой роли + elevated: не может включать разрешения, которыми не обладает ваша текущая роль + own_role: невозможно изменить с вашей текущей ролью + position: + elevated: не может быть выше, чем ваша текущая роль own_role: невозможно изменить с вашей текущей ролью diff --git a/config/locales/ar.yml b/config/locales/ar.yml index bac1e661dab..432c10ce0a9 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -299,7 +299,6 @@ ar: create_unavailable_domain_html: قام %{name} بتوقيف التوصيل للنطاق %{target} demote_user_html: قام %{name} بخفض الرتبة الوظيفية لـ%{target} destroy_announcement_html: قام %{name} بحذف الإعلان %{target} - destroy_custom_emoji_html: قام %{name} بحذف الإيموجي %{target} destroy_domain_allow_html: قام %{name} بمنع الاتحاد مع النطاق %{target} destroy_domain_block_html: قام %{name} برفع الحظر عن النطاق %{target} destroy_email_domain_block_html: قام %{name} برفع الحظر عن نطاق البريد الإلكتروني %{target} @@ -331,7 +330,6 @@ ar: update_custom_emoji_html: قام %{name} بتحديث الإيموجي %{target} update_domain_block_html: قام %{name} بتحديث كتلة النطاق %{target} update_status_html: قام %{name} بتحديث منشور من %{target} - deleted_status: "(منشور محذوف)" empty: لم يتم العثور على سجلات. filter_by_action: تصفية بحسب الإجراء filter_by_user: تصفية حسب المستخدم @@ -688,9 +686,6 @@ ar: desc_html: عرض الخيط العمومي على صفحة الاستقبال title: مُعاينة الخيط العام title: إعدادات الموقع - trendable_by_default: - desc_html: يؤثر على علامات الوسوم التي لم يكن مسموح بها مسبقاً - title: السماح للوسوم بالظهور على المتداوَلة بدون مراجعة مسبقة trends: desc_html: عرض علني للوسوم المستعرضة سابقاً التي هي رائجة الآن title: الوسوم المتداولة @@ -1144,18 +1139,6 @@ ar: admin: sign_up: subject: أنشأ %{name} حسابًا - digest: - action: معاينة كافة الإشعارات - body: هذا هو مُلَخَّص الرسائل التي فاتتك وذلك منذ آخر زيارة لك في %{since} - mention: "%{name} أشار إليك في:" - new_followers_summary: - few: رائع، لقد قام بمتابَعتك %{count} مُتابِعون جُدد أثناء فترة غيابك عن ماستدون! - many: رائع، لقد قام بمتابَعتك %{count} مُتابِعون جُدد أثناء فترة غيابك عن ماستدون! - one: و لقد تحصّلتَ كذلك على مُتابِع آخَر بينما كنتَ غائبًا! هذا شيء رائع! - other: رائع، لقد قام بمتابَعتك %{count} مُتابِعون جُدد أثناء فترة غيابك عن ماستدون! - two: رائع، لقد قام بمتابَعتك %{count} مُتابِعون جُدد أثناء فترة غيابك عن ماستدون! - zero: رائع، لقد قام بمتابَعتك %{count} مُتابِعون جُدد أثناء فترة غيابك عن ماستدون! - title: أثناء فترة غيابك... favourite: body: 'أُعجب %{name} بمنشورك:' subject: أُعجِب %{name} بمنشورك diff --git a/config/locales/ast.yml b/config/locales/ast.yml index f4765360e61..2d175592bbe 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -314,9 +314,6 @@ ast: warning: followers: Esta aición va mover tolos siguidores de la cuenta actual a la nueva notification_mailer: - digest: - body: Equí hai un resume de los mensaxes que nun viesti dende la última visita'l %{since} - mention: "%{name} mentóte en:" favourite: title: Favoritu nuevu follow: diff --git a/config/locales/bg.yml b/config/locales/bg.yml index a7b8ffc2366..43b8a13baf8 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -230,12 +230,6 @@ bg: images_and_video: Не мога да прикача видеоклип към публикация, която вече съдържа изображения too_many: Не мога да прикача повече от 4 файла notification_mailer: - digest: - body: Ето кратко резюме на нещата, които се случиха от последното ти посещение на %{since} - mention: "%{name} те спомена в:" - new_followers_summary: - one: Имаш един нов последовател! Ура! - other: Имаш %{count} нови последователи! Изумително! favourite: body: 'Публикацията ти беше харесана от %{name}:' subject: "%{name} хареса твоята публикация" diff --git a/config/locales/br.yml b/config/locales/br.yml index 61e85d163f1..4d34f338846 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -89,7 +89,6 @@ br: action_logs: action_types: destroy_status: Dilemel ar statud - deleted_status: "(statud dilemet)" announcements: new: create: Sevel ur gemenn diff --git a/config/locales/ca.yml b/config/locales/ca.yml index dfc1c1e27b2..a03e37cc674 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -235,17 +235,21 @@ ca: approve_user: Aprova l'usuari assigned_to_self_report: Assigna l'informe change_email_user: Canvia l'adreça electrònica per l'usuari + change_role_user: Canvia el Rol del Usuari confirm_user: Confirma l'usuari create_account_warning: Crea un avís create_announcement: Crea un anunci + create_canonical_email_block: Crea un bloqueig de correu electrònic create_custom_emoji: Crea un emoji personalitzat create_domain_allow: Crea un domini permès create_domain_block: Crea un bloqueig de domini create_email_domain_block: Crea un bloqueig de domini d'adreça de correu create_ip_block: Crear regla IP create_unavailable_domain: Crea un domini no disponible + create_user_role: Crea Rol demote_user: Degrada l'usuari destroy_announcement: Esborra l'anunci + destroy_canonical_email_block: Esborra el bloqueig de correu electrònic destroy_custom_emoji: Esborra l'emoji personalitzat destroy_domain_allow: Esborra el domini permès destroy_domain_block: Esborra el bloqueig de domini @@ -254,6 +258,7 @@ ca: destroy_ip_block: Eliminar regla IP destroy_status: Esborrar la publicació destroy_unavailable_domain: Esborra domini no disponible + destroy_user_role: Destrueix Rol disable_2fa_user: Desactiva 2FA disable_custom_emoji: Desactiva l'emoji personalitzat disable_sign_in_token_auth_user: Desactivar l'autenticació de token per correu per l'usuari @@ -280,24 +285,30 @@ ca: update_announcement: Actualitza l'anunci update_custom_emoji: Actualitza l'emoji personalitzat update_domain_block: Actualitza el Bloqueig de Domini + update_ip_block: Actualitza norma IP update_status: Actualitza l'estat + update_user_role: Actualitza Rol actions: approve_appeal_html: "%{name} ha aprovat l'apel·lació a la decisió de moderació de %{target}" approve_user_html: "%{name} ha aprovat el registre de %{target}" assigned_to_self_report_html: "%{name} han assignat l'informe %{target} a ells mateixos" change_email_user_html: "%{name} ha canviat l'adreça de correu electrònic del usuari %{target}" + change_role_user_html: "%{name} ha canviat el rol de %{target}" confirm_user_html: "%{name} ha confirmat l'adreça de correu electrònic de l'usuari %{target}" create_account_warning_html: "%{name} ha enviat un avís a %{target}" create_announcement_html: "%{name} ha creat un nou anunci %{target}" + create_canonical_email_block_html: "%{name} ha bloquejat l'adreça de correu electrònic amb el hash %{target}" create_custom_emoji_html: "%{name} ha pujat un emoji nou %{target}" create_domain_allow_html: "%{name} ha permès la federació amb el domini %{target}" create_domain_block_html: "%{name} ha bloquejat el domini %{target}" create_email_domain_block_html: "%{name} ha bloquejat el domini de correu electrònic %{target}" create_ip_block_html: "%{name} ha creat una regla per a l'IP %{target}" create_unavailable_domain_html: "%{name} ha aturat el lliurament al domini %{target}" + create_user_role_html: "%{name} ha creat el rol %{target}" demote_user_html: "%{name} ha degradat l'usuari %{target}" destroy_announcement_html: "%{name} ha eliminat l'anunci %{target}" - destroy_custom_emoji_html: "%{name} ha destruït l'emoji %{target}" + destroy_canonical_email_block_html: "%{name} ha desbloquejat el correu electrònic amb el hash %{target}" + destroy_custom_emoji_html: "%{name} ha esborrat l'emoji %{target}" destroy_domain_allow_html: "%{name} no permet la federació amb el domini %{target}" destroy_domain_block_html: "%{name} ha desbloquejat el domini %{target}" destroy_email_domain_block_html: "%{name} ha desbloquejat el domini de correu electrònic %{target}" @@ -305,6 +316,7 @@ ca: destroy_ip_block_html: "%{name} ha esborrat la regla per a l'IP %{target}" destroy_status_html: "%{name} ha eliminat la publicació de %{target}" destroy_unavailable_domain_html: "%{name} ha représ el lliurament delivery al domini %{target}" + destroy_user_role_html: "%{name} ha esborrat el rol %{target}" disable_2fa_user_html: "%{name} ha desactivat el requisit de dos factors per a l'usuari %{target}" disable_custom_emoji_html: "%{name} ha desactivat l'emoji %{target}" disable_sign_in_token_auth_user_html: "%{name} ha desactivat l'autenticació de token per correu per a %{target}" @@ -331,8 +343,9 @@ ca: update_announcement_html: "%{name} ha actualitzat l'anunci %{target}" update_custom_emoji_html: "%{name} ha actualitzat l'emoji %{target}" update_domain_block_html: "%{name} ha actualitzat el bloqueig de domini per a %{target}" + update_ip_block_html: "%{name} ha canviat la norma per la IP %{target}" update_status_html: "%{name} ha actualitzat l'estat de %{target}" - deleted_status: "(publicació esborrada)" + update_user_role_html: "%{name} ha canviat el rol %{target}" empty: No s’han trobat registres. filter_by_action: Filtra per acció filter_by_user: Filtra per usuari @@ -795,8 +808,8 @@ ca: title: Permet l'accés no autenticat a la línia de temps pública title: Configuració del lloc trendable_by_default: - desc_html: Afecta a les etiquetes que no s'havien rebutjat prèviament - title: Permet que les etiquetes passin a la tendència sense revisió prèvia + desc_html: El contingut específic de la tendència encara pot explícitament no estar permès + title: Permet tendències sense revisió prèvia trends: desc_html: Mostra públicament les etiquetes revisades anteriorment que actualment estan en tendència title: Etiquetes tendència @@ -1181,6 +1194,8 @@ ca: edit: add_keyword: Afegeix paraula clau keywords: Paraules clau + statuses: Apunts individuals + statuses_hint_html: Aquest filtre aplica als apunts individuals seleccionats independentment de si coincideixen amb les paraules clau de sota. Revisa o elimina els apunts des d'el filtre. title: Editar filtre errors: deprecated_api_multiple_keywords: Aquests paràmetres no poden ser canviats des d'aquesta aplicació perquè apliquen a més d'un filtre per paraula clau. Utilitza una aplicació més recent o la interfície web. @@ -1194,10 +1209,23 @@ ca: keywords: one: "%{count} paraula clau" other: "%{count} paraules clau" + statuses: + one: "%{count} apunt" + other: "%{count} apunts" + statuses_long: + one: "%{count} apunt individual oculta" + other: "%{count} apunts individuals ocultats" title: Filtres new: save: Desa el nou filtre title: Afegir un nou filtre + statuses: + back_to_filter: Tornar al filtre + batch: + remove: Eliminar del filtre + index: + hint: Aquest filtre aplica als apunts seleccionats independentment d'altres criteris. Pots afegir més apunts a aquest filtre des de l'interfície Web. + title: Apunts filtrats footer: developers: Desenvolupadors more: Més… @@ -1205,12 +1233,22 @@ ca: trending_now: En tendència generic: all: Tot + all_items_on_page_selected_html: + one: "%{count} article d'aquesta s'ha seleccionat." + other: Tots %{count} articles d'aquesta pàgina estan seleccionats. + all_matching_items_selected_html: + one: "%{count} article coincident amb la teva cerca està seleccionat." + other: Tots %{count} articles coincidents amb la teva cerca estan seleccionats. changes_saved_msg: Els canvis s'han desat correctament! copy: Copiar delete: Esborra + deselect: Desfer selecció none: Cap order_by: Ordena per save_changes: Desa els canvis + select_all_matching_items: + one: Selecciona %{count} article coincident amb la teva cerca. + other: Selecciona tots %{count} articles coincidents amb la teva cerca. today: avui validation_errors: one: Alguna cosa no va bé! Si us plau, revisa l'error @@ -1319,17 +1357,6 @@ ca: subject: "%{name} ha presentat un informe" sign_up: subject: "%{name} s'ha registrat" - digest: - action: Mostra totes les notificacions - body: Un resum del que et vas perdre des de la darrera visita el %{since} - mention: "%{name} t'ha mencionat en:" - new_followers_summary: - one: A més, has adquirit un nou seguidor durant la teva absència! Visca! - other: A més, has adquirit %{count} nous seguidors mentre estaves fora! Increïble! - subject: - one: "1 notificació nova des de la teva darrera visita 🐘" - other: "%{count} notificacions noves des de la teva darrera visita 🐘" - title: Durant la teva absència… favourite: body: "%{name} ha marcat com a favorit el teu estat:" subject: "%{name} ha marcat com a favorit el teu estat" diff --git a/config/locales/ckb.yml b/config/locales/ckb.yml index 3e9f414dfdd..6c91b571a32 100644 --- a/config/locales/ckb.yml +++ b/config/locales/ckb.yml @@ -265,7 +265,6 @@ ckb: update_status: بەڕۆژکردنی دۆخ actions: update_status_html: "%{name} پۆستی نوێکراوە لەلایەن %{target}" - deleted_status: "(نووسراوە سڕاوە)" empty: هیچ لاگی کارنەدۆزرایەوە. filter_by_action: فلتەر کردن بە کردار filter_by_user: فلتەر کردن بە کردار @@ -643,9 +642,6 @@ ckb: desc_html: لینکەکە نیشان بدە بۆ هێڵی کاتی گشتی لەسەر پەڕەی نیشتنەوە و ڕێگە بە API بدە دەستگەیشتنی هەبێت بۆ هێڵی کاتی گشتی بەبێ سەلماندنی ڕەسەنایەتی title: ڕێگەبدە بە چوونە ژورەوەی نەسەلمێنراو بۆ هێڵی کاتی گشتی title: ڕێکخستنەکانی ماڵپەڕ - trendable_by_default: - desc_html: کاریگەری لەسەر هاشتاگی پێشوو کە پێشتر ڕێگە پێنەدراوە - title: ڕێگە بدە بە هاشتاگی بەرچاوکراوە بەبێ پێداچوونەوەی پێشوو trends: desc_html: بە ئاشکرا هاشتاگی پێداچوونەوەی پێشوو پیشان بدە کە ئێستا بەرچاوکراوەن title: هاشتاگی بەرچاوکراوە @@ -976,14 +972,6 @@ ckb: carry_mutes_over_text: ئەم بەکارهێنەرە گواسترایەوە بۆ %{acct}، تۆ بێدەنگت کردووە. copy_account_note_text: 'ئەم بەکارهێنەرە لە %{acct} ەوە گواستیەوە، تێبینیەکانی پێشووت دەربارەیان بوون:' notification_mailer: - digest: - action: پیشاندانی هەموو ئاگانامەکان - body: ئەمە کورتەی ئەو نامانەی لە دەستت دا لە دوا سەردانیت لە %{since} - mention: "%{name} ئاماژەی بە تۆ کرد لە:" - new_followers_summary: - one: لەکاتێک کە نەبوو ،شوێنکەوتوویێکی نوێت پەیداکرد،ئافەرم! - other: کاتیک کە نەبووی %{count} شوێنکەوتوویێکی نوێت پەیدا کرد! چ باشە! - title: لە غیابی تۆدا... favourite: body: 'دۆخت پەسەندکراوە لەلایەن %{name}:' subject: "%{name} دۆخی تۆی پەسەند کرد" diff --git a/config/locales/co.yml b/config/locales/co.yml index a71c187fca9..9844cb8c188 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -269,7 +269,6 @@ co: create_unavailable_domain_html: "%{name} hà firmatu a distribuzione à u duminiu %{target}" demote_user_html: "%{name} hà ritrugradatu l’utilizatore %{target}" destroy_announcement_html: "%{name} hà sguassatu u novu annunziu %{target}" - destroy_custom_emoji_html: "%{name} hà sguassatu l'emoji %{target}" destroy_domain_allow_html: "%{name} hà sguassatu u duminiu %{target} da a lista bianca" destroy_domain_block_html: "%{name} hà sbluccatu u duminiu %{target}" destroy_email_domain_block_html: "%{name} hà messu u duminiu e-mail %{target} nant’a lista bianca" @@ -298,7 +297,6 @@ co: update_custom_emoji_html: "%{name} hà messu à ghjornu l’emoji %{target}" update_domain_block_html: "%{name} hà messu à ghjornu u blucchime di duminiu per %{target}" update_status_html: "%{name} hà cambiatu u statutu di %{target}" - deleted_status: "(statutu sguassatu)" empty: Nunda trovu. filter_by_action: Filtrà da azzione filter_by_user: Filtrà da utilizatore @@ -602,9 +600,6 @@ co: desc_html: Vede a linea pubblica nant’a pagina d’accolta title: Vista di e linee title: Parametri di u situ - trendable_by_default: - desc_html: Ùn affetta micca quelli chì sò digià stati ricusati - title: Auturizà l'hashtag à esse in tindenze senza verificazione trends: desc_html: Mustrà à u pubblicu i hashtag chì sò stati digià verificati è chì sò in e tendenze avà title: Tendenze di hashtag @@ -962,14 +957,6 @@ co: carry_mutes_over_text: St'utilizatore hà traslucatu dapoi %{acct}, ch'aviate piattatu. copy_account_note_text: 'St''utilizatore hà traslucatu dapoi %{acct}, eccu e vostr''anziane note nant''à ellu:' notification_mailer: - digest: - action: Vede tutte e nutificazione - body: Eccu cio ch’avete mancatu dapoi à a vostr’ultima visita u %{since} - mention: "%{name} v’hà mintuvatu·a in:" - new_followers_summary: - one: Avete ancu un’abbunatu novu! - other: Avete ancu %{count} abbunati novi! - title: Dapoi l’ultima volta… favourite: body: "%{name} hà aghjuntu u vostru statutu à i so favuriti :" subject: "%{name} hà messu u vostru post in i so favuriti" diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 3a58fd23bf8..b0ab498ea46 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -111,6 +111,7 @@ cs: avatar: Avatar by_domain: Doména change_email: + changed_msg: E-mail úspěšně změněn! current_email: Současný e-mail label: Změnit e-mail new_email: Nový e-mail @@ -304,7 +305,6 @@ cs: create_unavailable_domain_html: "%{name} zastavil doručování na doménu %{target}" demote_user_html: Uživatel %{name} degradoval uživatele %{target} destroy_announcement_html: Uživatel %{name} odstranil oznámení %{target} - destroy_custom_emoji_html: Uživatel %{name} zničil emoji %{target} destroy_domain_allow_html: Uživatel %{name} zakázal federaci s doménou %{target} destroy_domain_block_html: Uživatel %{name} odblokoval doménu %{target} destroy_email_domain_block_html: Uživatel %{name} odblokoval e-mailovou doménu %{target} @@ -339,7 +339,6 @@ cs: update_custom_emoji_html: Uživatel %{name} aktualizoval emoji %{target} update_domain_block_html: "%{name} aktualizoval blokaci domény %{target}" update_status_html: Uživatel %{name} aktualizoval příspěvek uživatele %{target} - deleted_status: "(smazaný příspěvek)" empty: Nebyly nalezeny žádné záznamy. filter_by_action: Filtrovat podle akce filter_by_user: Filtrovat podle uživatele @@ -803,9 +802,6 @@ cs: desc_html: Zobrazit na hlavní stránce odkaz na veřejnou časovou osu a povolit přístup na veřejnou časovou osu pomocí API bez autentizace title: Povolit neautentizovaný přístup k časové ose title: Nastavení stránky - trendable_by_default: - desc_html: Ovlivňuje hashtagy, které nebyly dříve zakázány - title: Povolit zobrazení hashtagů mezi populárními i bez předchozího posouzení trends: desc_html: Veřejně zobrazit dříve schválený obsah, který je zrovna populární title: Trendy @@ -1196,14 +1192,26 @@ cs: public: Veřejné časové osy thread: Konverzace edit: + add_keyword: Přidat klíčové slovo + keywords: Klíčová slova title: Upravit filtr errors: + deprecated_api_multiple_keywords: Tyto parametry nelze změnit z této aplikace, protože se vztahují na více než jedno klíčové slovo filtru. Použijte novější aplikaci nebo webové rozhraní. invalid_context: Nebyl poskytnut žádný nebo jen neplatný kontext index: + contexts: Filtruje %{contexts} delete: Smazat empty: Nemáte žádný filtr. + expires_in: Vyprší za %{distance} + expires_on: Vyprší %{date} + keywords: + few: "%{count} klíčová slova" + many: "%{count} klíčových slov" + one: "%{count} klíčové slovo" + other: "%{count} klíčových slov" title: Filtry new: + save: Uložit nový filtr title: Přidat nový filtr footer: developers: Vývojáři @@ -1330,21 +1338,6 @@ cs: subject: Uživatel %{name} podal hlášení sign_up: subject: Uživatel %{name} se zaregistroval - digest: - action: Zobrazit všechna oznámení - body: Zde najdete stručný souhrn zpráv, které jste zmeškali od vaší poslední návštěvy %{since} - mention: 'Uživatel %{name} vás zmínil v:' - new_followers_summary: - few: Zatímco jste byli pryč jste navíc získali %{count} nové sledující! Skvělé! - many: Zatímco jste byli pryč jste navíc získali %{count} nových sledujících! Úžasné! - one: Zatímco jste byli pryč jste navíc získali jednoho nového sledujícího! Hurá! - other: Zatímco jste byli pryč jste navíc získali %{count} nových sledujících! Úžasné! - subject: - few: "%{count} nová oznámení od vaší poslední návštěvy 🐘" - many: "%{count} nových oznámení od vaší poslední návštěvy 🐘" - one: "1 nové oznámení od vaší poslední návštěvy 🐘" - other: "%{count} nových oznámení od vaší poslední návštěvy 🐘" - title: Ve vaší nepřítomnosti… favourite: body: 'Váš příspěvek si oblíbil uživatel %{name}:' subject: Uživatel %{name} si oblíbil váš příspěvek diff --git a/config/locales/cy.yml b/config/locales/cy.yml index a1e9835d66b..7b6a0ef70e8 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -257,7 +257,6 @@ cy: update_status: Diweddaru Statws actions: memorialize_account_html: Newidodd %{name} gyfrif %{target} i dudalen goffa - deleted_status: "(statws wedi ei ddileu)" empty: Dim logiau ar gael. filter_by_action: Hidlo wrth weithred filter_by_user: Hidlo wrth ddefnyddiwr @@ -510,9 +509,6 @@ cy: desc_html: Dangos ffrwd gyhoeddus ar y dudalen lanio title: Rhagolwg o'r ffrwd title: Gosodiadau'r wefan - trendable_by_default: - desc_html: Yn ddylanwadu ar hashnodau sydd heb ei rhwystro yn y gorffenol - title: Gadael hashnodau i dueddu heb adolygiad cynt trends: desc_html: Arddangos hashnodau a adolygwyd yn gynt yn gyhoeddus sydd yn tueddu yn bresennol title: Hashnodau tueddig @@ -835,18 +831,6 @@ cy: carry_mutes_over_text: Wnaeth y defnyddiwr symud o %{acct}, a oeddech chi wedi'i dawelu. copy_account_note_text: 'Wnaeth y defnyddiwr symud o %{acct}, dyma oedd eich hen nodiadau amdanynt:' notification_mailer: - digest: - action: Gweld holl hysbysiadau - body: Dyma grynodeb byr o'r holl negeseuon golloch chi ers eich ymweliad diwethaf ar %{since} - mention: 'Soniodd %{name} amdanoch chi:' - new_followers_summary: - few: Hefyd, rydych wedi ennill %{count} dilynwr newydd tra eich bod i ffwrdd! Hwrê! - many: Hefyd, rydych wedi ennill %{count} dilynwr newydd tra eich bod i ffwrdd! Hwrê! - one: Yr ydych wedi ennill dilynwr newydd tra eich bod i ffwrdd! Hwrê! - other: Hefyd, rydych wedi ennill %{count} dilynwr newydd tra eich bod i ffwrdd! Hwrê! - two: Hefyd, rydych wedi ennill %{count} dilynwr newydd tra eich bod i ffwrdd! Hwrê! - zero: Hefyd, rydych wedi ennill %{count} dilynwr newydd tra eich bod i ffwrdd! Hwrê! - title: Yn eich absenoldeb... favourite: body: 'Cafodd eich statws ei hoffi gan %{name}:' subject: Hoffodd %{name} eich statws diff --git a/config/locales/da.yml b/config/locales/da.yml index 9538186c4b7..9b6250ad342 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -235,17 +235,21 @@ da: approve_user: Godkend bruger assigned_to_self_report: Tildel rapport change_email_user: Skift e-mail for bruger + change_role_user: Skift brugerrolle confirm_user: Bekræft bruger create_account_warning: Opret advarsel create_announcement: Opret bekendtgørelse + create_canonical_email_block: Opret e-mailblokering create_custom_emoji: Opret tilpasset emoji create_domain_allow: Opret domænetilladelse create_domain_block: Opret domæneblokering create_email_domain_block: Opret e-maildomæneblokering create_ip_block: Opret IP-regel create_unavailable_domain: Opret Utilgængeligt Domæne + create_user_role: Opret rolle demote_user: Degradér bruger destroy_announcement: Slet bekendtgørelse + destroy_canonical_email_block: Slet e-mailblokering destroy_custom_emoji: Slet tilpasset emoji destroy_domain_allow: Slet domænetilladelse destroy_domain_block: Slet domæneblokering @@ -254,6 +258,7 @@ da: destroy_ip_block: Slet IP-regel destroy_status: Slet indlæg destroy_unavailable_domain: Slet Utilgængeligt Domæne + destroy_user_role: Ødelæg rolle disable_2fa_user: Deaktivér 2FA disable_custom_emoji: Deaktivér tilpasset emoji disable_sign_in_token_auth_user: Deaktivér e-mailtoken godkendelse for bruger @@ -280,24 +285,30 @@ da: update_announcement: Opdatér bekendtgørelse update_custom_emoji: Opdatér tilpasset emoji update_domain_block: Opdatér domæneblokering + update_ip_block: Opdatér IP-regel update_status: Opdatér indlæg + update_user_role: Opdatér rolle actions: approve_appeal_html: "%{name} godkendte moderationsafgørelsesappellen fra %{target}" approve_user_html: "%{name} godkendte tilmeldingen fra %{target}" assigned_to_self_report_html: "%{name} tildelte sig selv anmeldelsen %{target}" change_email_user_html: "%{name} ændrede e-mailadressen for bruger %{target}" + change_role_user_html: "%{name} ændrede rollen for %{target}" confirm_user_html: "%{name} bekræftede e-mailadressen for bruger %{target}" create_account_warning_html: "%{name} sendte en advarsel til %{target}" create_announcement_html: "%{name} oprettede den nye bekendtgørelse %{target}" + create_canonical_email_block_html: "%{name} blokerede e-mailen med hash'et %{target}" create_custom_emoji_html: "%{name} uploadede den nye emoji %{target}" create_domain_allow_html: "%{name} tillod federering med domænet %{target}" create_domain_block_html: "%{name} blokerede domænet %{target}" create_email_domain_block_html: "%{name} blokerede e-maildomænet %{target}" create_ip_block_html: "%{name} oprettede en regel for IP %{target}" create_unavailable_domain_html: "%{name} stoppede levering til domænet %{target}" + create_user_role_html: "%{name} oprettede %{target}-rolle" demote_user_html: "%{name} degraderede brugeren %{target}" destroy_announcement_html: "%{name} slettede bekendtgørelsen %{target}" - destroy_custom_emoji_html: "%{name} fjernede emojien %{target}" + destroy_canonical_email_block_html: "%{name} afblokerede e-mailen med hash'et %{target}" + destroy_custom_emoji_html: "%{name} slettede emojien %{target}" destroy_domain_allow_html: "%{name} fjernede federeringstilladelsen med domænet %{target}" destroy_domain_block_html: "%{name} afblokerede domænet %{target}" destroy_email_domain_block_html: "%{name} afblokerede e-maildomænet %{target}" @@ -305,6 +316,7 @@ da: destroy_ip_block_html: "%{name} slettede en regel for IP %{target}" destroy_status_html: "%{name} fjernede indlægget fra %{target}" destroy_unavailable_domain_html: "%{name} genoptog levering til domænet %{target}" + destroy_user_role_html: "%{name} slettede %{target}-rolle" disable_2fa_user_html: "%{name} deaktiverede tofaktorkravet for brugeren %{target}" disable_custom_emoji_html: "%{name} deaktiverede emojien %{target}" disable_sign_in_token_auth_user_html: "%{name} deaktiverede e-mailtoken godkendelsen for %{target}" @@ -331,8 +343,9 @@ da: update_announcement_html: "%{name} opdaterede bekendtgørelsen %{target}" update_custom_emoji_html: "%{name} opdaterede emoji %{target}" update_domain_block_html: "%{name} opdaterede domæneblokeringen for %{target}" + update_ip_block_html: "%{name} ændrede reglen for IP'en %{target}" update_status_html: "%{name} opdaterede indlægget fra %{target}" - deleted_status: "(slettet indlæg)" + update_user_role_html: "%{name} ændrede %{target}-rolle" empty: Ingen logger fundet. filter_by_action: Filtrér efter handling filter_by_user: Filtrér efter bruger @@ -794,8 +807,8 @@ da: title: Tillad ikke-godkendt tilgang til offentlig tidslinje title: Webstedsindstillinger trendable_by_default: - desc_html: Påvirker hashtags, som ikke tidligere er blevet nægtet - title: Tillad hashtags at forme tendens uden forudgående revision + desc_html: Bestemt tendensindhold kan stadig udtrykkeligt forbydes + title: Tillad tendenser uden forudgående gennemsyn trends: desc_html: Vis offentligt tidligere reviderede hashtags, som pt. trender title: Populært @@ -1181,7 +1194,7 @@ da: add_keyword: Tilføj nøgleord keywords: Nøgleord statuses: Individuelle indlæg - statuses_hint_html: Dette filter gælder for udvalgte, individuelle indlæg, uanset om de matcher nøgleordene nedenfor. Disse indlæg kan gennemgås og fjernes fra filteret ved at klikke hér. + statuses_hint_html: Dette filter gælder for udvalgte, individuelle indlæg, uanset om de matcher nøgleordene nedenfor. Gennemgå eller fjern indlæg fra filteret. title: Redigere filter errors: deprecated_api_multiple_keywords: Disse parametre kan ikke ændres fra denne applikation, da de gælder for flere end ét filternøgleord. Brug en nyere applikation eller webgrænsefladen. @@ -1210,7 +1223,7 @@ da: batch: remove: Fjern fra filter index: - hint: Dette filter gælder for udvalgte, individuelle indlæg uanset andre kriterier. Flere indlæg kan føjes til filteret via webgrænsefladen. + hint: Dette filter gælder for udvalgte, individuelle indlæg uanset andre kriterier. Flere indlæg kan føjes til filteret via webfladen. title: Filtrerede indlæg footer: developers: Udviklere @@ -1219,12 +1232,22 @@ da: trending_now: Trender lige nu generic: all: Alle + all_items_on_page_selected_html: + one: "%{count} emne på denne side er valgt." + other: Alle %{count} emner på denne side er valgt. + all_matching_items_selected_html: + one: "%{count} emne, der matchede søgningen, er valgt." + other: Alle %{count} emner, som matchede søgningen, er valgt. changes_saved_msg: Ændringerne er gemt! copy: Kopier delete: Slet + deselect: Afmarkér alle none: Intet order_by: Sortér efter save_changes: Gem ændringer + select_all_matching_items: + one: Vælg %{count} emne, der matchede søgningen. + other: Vælg alle %{count} emner, som matchede søgningen. today: i dag validation_errors: one: Noget er ikke er helt i vinkel! Tjek fejlen nedenfor @@ -1333,17 +1356,6 @@ da: subject: "%{name} indsendte en anmeldelse" sign_up: subject: "%{name} tilmeldte sig" - digest: - action: Se alle notifikationer - body: Her er en kort oversigt over de beskeder, som er misset siden dit seneste besøg %{since} - mention: "%{name} nævnte dig i:" - new_followers_summary: - one: Under dit fravær har du har også fået en ny følger! Sådan! - other: Under dit fravær har du har også fået %{count} nye følgere! Sådan! - subject: - one: "1 ny notifikation siden senest besøg 🐘" - other: "%{count} nye notifikationer siden senest besøg 🐘" - title: I dit fravær... favourite: body: "%{name} favoritmarkerede dit indlæg:" subject: "%{name} favoritmarkerede dit indlæg" diff --git a/config/locales/de.yml b/config/locales/de.yml index 0ce9c32549b..d411886bf63 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1,30 +1,30 @@ --- de: about: - about_hashtag_html: Das sind öffentliche Beiträge, die mit #%{hashtag} getaggt wurden. Wenn du irgendwo im Fediversum ein Konto besitzt, kannst du mit ihnen interagieren. - about_mastodon_html: Mastodon ist ein soziales Netzwerk. Es basiert auf offenen Web-Protokollen und freier, quelloffener Software. Es ist dezentral (so wie E-Mail!). + about_hashtag_html: Das sind öffentliche Beiträge, die mit #%{hashtag} getaggt wurden. Wenn du irgendwo im Födiversum ein Konto besitzt, kannst du mit ihnen interagieren. + about_mastodon_html: Mastodon ist ein soziales Netzwerk. Es basiert auf offenen Web-Protokollen und freier, quelloffener Software. Es ist dezentral – genau wie E-Mail! about_this: Über diesen Server active_count_after: aktiv - active_footnote: Monatlich Aktive User (MAU) + active_footnote: Monatlich aktive User (MAU) administered_by: 'Betrieben von:' api: API apps: Mobile Apps apps_platforms: Benutze Mastodon auf iOS, Android und anderen Plattformen browse_directory: Durchsuche das Profilverzeichnis und filtere nach Interessen - browse_local_posts: Durchsuche einen Live-Stream von öffentlichen Beiträgen von diesem Server + browse_local_posts: Durchsuche einen Live-Stream öffentlicher Beiträge dieses Servers browse_public_posts: Stöbere durch öffentliche Beiträge auf Mastodon contact: Kontakt contact_missing: Nicht angegeben contact_unavailable: Nicht verfügbar - continue_to_web: Weiter zur Web App + continue_to_web: Weiter zur Web-App discover_users: Benutzer entdecken documentation: Dokumentation - federation_hint_html: Mit einem Account auf %{instance} wirst du in der Lage sein Nutzern auf irgendeinem Mastodon-Server und darüber hinaus zu folgen. + federation_hint_html: Mit einem Account auf %{instance} wirst du in der Lage sein, Nutzern auf irgendeinem Mastodon-Server und darüber hinaus zu folgen. get_apps: Versuche eine mobile App hosted_on: Mastodon, gehostet auf %{domain} instance_actor_flash: | - Dieses Konto ist ein virtueller Akteur, der den Server selbst und nicht einen einzelnen Benutzer repräsentiert. - Dieser wird für Föderationszwecke verwendet und sollte nicht blockiert werden, es sei denn du möchtest die gesamte Instanz blockieren. + Dieses Konto ist ein virtueller Akteur, welcher den Server selbst – und nicht einen einzelnen Benutzer – repräsentiert. + Dieser wird für Föderationszwecke verwendet und sollte nicht blockiert werden, es sei denn, du möchtest die gesamte Instanz blockieren. learn_more: Mehr erfahren logged_in_as_html: Du bist derzeit als %{username} eingeloggt. logout_before_registering: Du bist bereits angemeldet. @@ -44,7 +44,7 @@ de: unavailable_content_description: domain: Server reason: 'Grund:' - rejecting_media: Mediendateien dieses Servers werden nicht verarbeitet und keine Thumbnails werden angezeigt, was manuelles anklicken auf den anderen Server erfordert. + rejecting_media: Mediendateien dieses Servers werden nicht verarbeitet und keine Thumbnails werden angezeigt, was manuelles Anklicken auf den anderen Server erfordert. rejecting_media_title: Gefilterte Medien silenced: Beiträge von diesem Server werden nirgends angezeigt, außer in deiner Startseite, wenn du der Person folgst, die den Beitrag verfasst hat. silenced_title: Stummgeschaltete Server @@ -96,9 +96,9 @@ de: created_msg: Moderationsnotiz erfolgreich erstellt! destroyed_msg: Moderationsnotiz erfolgreich gelöscht! accounts: - add_email_domain_block: E-Mail-Domain blacklisten + add_email_domain_block: E-Mail-Domain auf Blacklist setzen approve: Akzeptieren - approved_msg: "%{username}'s Anmeldeantrag erfolgreich genehmigt" + approved_msg: Anmeldeantrag von %{username} erfolgreich genehmigt are_you_sure: Bist du sicher? avatar: Profilbild by_domain: Domain @@ -121,7 +121,7 @@ de: delete: Daten löschen deleted: Gelöscht demote: Degradieren - destroyed_msg: "%{username}'s Daten wurden zum Löschen in die Warteschlange eingereiht" + destroyed_msg: Daten von %{username} wurden zum Löschen in die Warteschlange eingereiht disable: Ausschalten disable_sign_in_token_auth: Deaktiviere die Zwei-Faktor-Authentifizierung per E-Mail disable_two_factor_authentication: 2FA abschalten @@ -134,12 +134,12 @@ de: enable: Freischalten enable_sign_in_token_auth: Aktiviere die Zwei-Faktor-Authentifizierung per E-Mail enabled: Freigegeben - enabled_msg: "%{username}'s Konto erfolgreich freigegeben" + enabled_msg: Konto von %{username} erfolgreich freigegeben followers: Follower follows: Folgt header: Titelbild inbox_url: Posteingangs-URL - invite_request_text: Begründung für das beitreten + invite_request_text: Begründung für das Beitreten invited_by: Eingeladen von ip: IP-Adresse joined: Beigetreten @@ -152,7 +152,7 @@ de: media_attachments: Dateien memorialize: In Gedenkmal verwandeln memorialized: Memorialisiert - memorialized_msg: "%{username} wurde erfolgreich in ein memorialisiertes Konto umgewandelt" + memorialized_msg: "%{username} wurde erfolgreich in ein In-Memoriam-Konto umgewandelt" moderation: active: Aktiv all: Alle @@ -180,11 +180,11 @@ de: redownload: Profil neu laden redownloaded_msg: Profil von %{username} erfolgreich von Ursprung aktualisiert reject: Ablehnen - rejected_msg: "%{username}'s Anmeldeantrag erfolgreich abgelehnt" + rejected_msg: Anmeldeantrag von %{username} erfolgreich abgelehnt remove_avatar: Profilbild entfernen remove_header: Titelbild entfernen removed_avatar_msg: Profilbild von %{username} erfolgreich entfernt - removed_header_msg: "%{username}'s Titelbild wurde erfolgreich entfernt" + removed_header_msg: Titelbild von %{username} wurde erfolgreich entfernt resend_confirmation: already_confirmed: Diese_r Benutzer_in wurde bereits bestätigt send: Bestätigungs-E-Mail erneut senden @@ -195,7 +195,7 @@ de: role: Rolle search: Suche search_same_email_domain: Andere Benutzer mit der gleichen E-Mail-Domain - search_same_ip: Andere Benutzer mit derselben IP + search_same_ip: Andere Benutzer mit derselben IP-Adresse security_measures: only_password: Nur Passwort password_and_2fa: Passwort und 2FA @@ -212,7 +212,7 @@ de: subscribe: Abonnieren suspend: Suspendieren suspended: Verbannt - suspension_irreversible: Die Daten dieses Kontos wurden unwiderruflich gelöscht. Du kannst das Konto aufheben, um es brauchbar zu machen, aber es wird keine Daten wiederherstellen, die es davor schon hatte. + suspension_irreversible: Die Daten dieses Kontos wurden unwiderruflich gelöscht. Du kannst das Konto aufheben, um es wieder brauchbar zu machen, aber es wird keine Daten wiederherstellen, die es davor hatte. suspension_reversible_hint_html: Das Konto wurde gesperrt und die Daten werden am %{date} vollständig gelöscht. Bis dahin kann das Konto ohne irgendwelche negativen Auswirkungen wiederhergestellt werden. Wenn du alle Daten des Kontos sofort entfernen möchtest, kannst du dies nachfolgend tun. title: Konten unblock_email: E-Mail Adresse entsperren @@ -221,7 +221,7 @@ de: undo_sensitized: Nicht mehr als NSFW markieren undo_silenced: Stummschaltung aufheben undo_suspension: Verbannung aufheben - unsilenced_msg: "%{username}'s Konto erfolgreich freigegeben" + unsilenced_msg: Konto von %{username} erfolgreich freigegeben unsubscribe: Abbestellen unsuspended_msg: Konto von %{username} erfolgreich freigegeben username: Profilname @@ -235,18 +235,22 @@ de: approve_user: Benutzer genehmigen assigned_to_self_report: Bericht zuweisen change_email_user: E-Mail des Benutzers ändern + change_role_user: Rolle des Benutzers ändern confirm_user: Benutzer bestätigen create_account_warning: Warnung erstellen create_announcement: Ankündigung erstellen - create_custom_emoji: Eigene Emoji erstellen + create_canonical_email_block: E-Mail-Block erstellen + create_custom_emoji: Eigene Emojis erstellen create_domain_allow: Domain erlauben create_domain_block: Domain blockieren create_email_domain_block: E-Mail-Domain-Block erstellen create_ip_block: IP-Regel erstellen create_unavailable_domain: Nicht verfügbare Domain erstellen + create_user_role: Rolle erstellen demote_user: Benutzer degradieren destroy_announcement: Ankündigung löschen - destroy_custom_emoji: Eigene Emoji löschen + destroy_canonical_email_block: E-Mail-Blockade löschen + destroy_custom_emoji: Eigene Emojis löschen destroy_domain_allow: Erlaube das Löschen von Domains destroy_domain_block: Domain-Blockade löschen destroy_email_domain_block: E-Mail-Domain-Blockade löschen @@ -254,6 +258,7 @@ de: destroy_ip_block: IP-Regel löschen destroy_status: Beitrag löschen destroy_unavailable_domain: Nicht verfügbare Domain löschen + destroy_user_role: Rolle löschen disable_2fa_user: 2FA deaktivieren disable_custom_emoji: Benutzerdefiniertes Emoji deaktivieren disable_sign_in_token_auth_user: Zwei-Faktor-Authentifizierung per E-Mail für den Nutzer deaktiviert @@ -279,25 +284,31 @@ de: unsuspend_account: Konto nicht mehr sperren update_announcement: Ankündigung aktualisieren update_custom_emoji: Benutzerdefiniertes Emoji aktualisieren - update_domain_block: Domain Block aktualisieren + update_domain_block: Domain-Blockade aktualisieren + update_ip_block: IP-Regel aktualisieren update_status: Beitrag aktualisieren + update_user_role: Rolle aktualisieren actions: approve_appeal_html: "%{name} genehmigte die Moderationsbeschlüsse von %{target}" approve_user_html: "%{name} genehmigte die Anmeldung von %{target}" assigned_to_self_report_html: "%{name} hat sich die Meldung %{target} selbst zugewiesen" change_email_user_html: "%{name} hat die E-Mail-Adresse des Nutzers %{target} geändert" + change_role_user_html: "%{name} hat die Rolle von %{target} geändert" confirm_user_html: "%{name} hat die E-Mail-Adresse von %{target} bestätigt" create_account_warning_html: "%{name} hat eine Warnung an %{target} gesendet" create_announcement_html: "%{name} hat die neue Ankündigung %{target} erstellt" + create_canonical_email_block_html: "%{name} hat die E-Mail mit dem Hash %{target} blockiert" create_custom_emoji_html: "%{name} hat neues Emoji %{target} hochgeladen" create_domain_allow_html: "%{name} hat die Domain %{target} gewhitelistet" create_domain_block_html: "%{name} hat die Domain %{target} blockiert" create_email_domain_block_html: "%{name} hat die E-Mail-Domain %{target} geblacklistet" create_ip_block_html: "%{name} hat eine Regel für IP %{target} erstellt" create_unavailable_domain_html: "%{name} hat die Lieferung an die Domain %{target} eingestellt" + create_user_role_html: "%{name} hat die Rolle %{target} erstellt" demote_user_html: "%{name} stufte Benutzer_in %{target} herunter" destroy_announcement_html: "%{name} hat die neue Ankündigung %{target} gelöscht" - destroy_custom_emoji_html: "%{name} zerstörte Emoji %{target}" + destroy_canonical_email_block_html: "%{name} hat die E-Mail mit dem Hash %{target} freigegeben" + destroy_custom_emoji_html: "%{name} hat das %{target} Emoji gelöscht" destroy_domain_allow_html: "%{name} hat die Domain %{target} von der Whitelist entfernt" destroy_domain_block_html: "%{name} hat die Domain %{target} entblockt" destroy_email_domain_block_html: "%{name} hat die E-Mail-Domain %{target} gewhitelistet" @@ -305,12 +316,13 @@ de: destroy_ip_block_html: "%{name} hat eine Regel für IP %{target} gelöscht" destroy_status_html: "%{name} hat einen Beitrag von %{target} entfernt" destroy_unavailable_domain_html: "%{name} setzte die Lieferung an die Domain %{target} fort" + destroy_user_role_html: "%{name} hat die Rolle %{target} gelöscht" disable_2fa_user_html: "%{name} hat Zwei-Faktor-Anforderung für Benutzer_in %{target} deaktiviert" disable_custom_emoji_html: "%{name} hat das %{target} Emoji deaktiviert" disable_sign_in_token_auth_user_html: "%{name} hat die E-Mail-Token Authentifizierung für %{target} deaktiviert" disable_user_html: "%{name} hat Zugang von Benutzer_in %{target} deaktiviert" enable_custom_emoji_html: "%{name} hat das %{target} Emoji aktiviert" - enable_sign_in_token_auth_user_html: "%{name} hat die E-Mail-Token Authentifizierung für %{target} aktiviert" + enable_sign_in_token_auth_user_html: "%{name} hat die E-Mail-Token-Authentifizierung für %{target} aktiviert" enable_user_html: "%{name} hat Zugang von Benutzer_in %{target} aktiviert" memorialize_account_html: "%{name} hat das Konto von %{target} in eine Gedenkseite umgewandelt" promote_user_html: "%{name} hat %{target} befördert" @@ -320,19 +332,20 @@ de: reopen_report_html: "%{name} hat die Meldung %{target} wieder geöffnet" reset_password_user_html: "%{name} hat das Passwort von %{target} zurückgesetzt" resolve_report_html: "%{name} hat die Meldung %{target} bearbeitet" - sensitive_account_html: "%{name} markierte %{target}'s Medien als NSFW" + sensitive_account_html: "%{name} markierte die Medien von %{target} als NSFW" silence_account_html: "%{name} hat das Konto von %{target} stummgeschaltet" suspend_account_html: "%{name} hat das Konto von %{target} verbannt" unassigned_report_html: "%{name} hat die Zuweisung der Meldung %{target} entfernt" - unblock_email_account_html: "%{name} entsperrte %{target}'s E-Mail-Adresse" - unsensitive_account_html: "%{name} markierte %{target}'s Medien nicht als NSFW" + unblock_email_account_html: "%{name} entsperrte die E-Mail-Adresse von %{target}" + unsensitive_account_html: "%{name} markierte Medien von %{target} als nicht NSFW" unsilence_account_html: "%{name} hat die Stummschaltung von %{target} aufgehoben" unsuspend_account_html: "%{name} hat die Verbannung von %{target} aufgehoben" update_announcement_html: "%{name} aktualisierte Ankündigung %{target}" update_custom_emoji_html: "%{name} hat das %{target} Emoji geändert" update_domain_block_html: "%{name} hat den Domain-Block für %{target} aktualisiert" + update_ip_block_html: "%{name} hat die Regel für IP %{target} geändert" update_status_html: "%{name} hat einen Beitrag von %{target} aktualisiert" - deleted_status: "(gelöschter Beitrag)" + update_user_role_html: "%{name} hat die Rolle %{target} geändert" empty: Keine Protokolle gefunden. filter_by_action: Nach Aktion filtern filter_by_user: Nach Benutzer filtern @@ -467,11 +480,11 @@ de: resolve: Domain auflösen title: Neue E-Mail-Domain-Blockade no_email_domain_block_selected: Es wurden keine E-Mail-Domain-Blockierungen geändert, da keine ausgewählt wurden - resolved_dns_records_hint_html: Der Domain-Name wird an die folgenden MX-Domains aufgelöst, die letztendlich für die Annahme von E-Mails verantwortlich sind. Das Blockieren einer MX-Domain blockiert Anmeldungen von jeder E-Mail-Adresse, die dieselbe MX-Domain verwendet, auch wenn der sichtbare Domainname anders ist. Achte darauf große E-Mail-Anbieter nicht zu blockieren. + resolved_dns_records_hint_html: Der Domain-Name wird an die folgenden MX-Domains aufgelöst, die letztendlich für die Annahme von E-Mails verantwortlich sind. Das Blockieren einer MX-Domain blockiert Anmeldungen von jeder E-Mail-Adresse, welche dieselbe MX-Domain verwendet, auch wenn der sichtbare Domainname anders ist. Achte darauf, große E-Mail-Anbieter nicht zu blockieren. resolved_through_html: Durch %{domain} aufgelöst title: E-Mail-Domain-Blockade follow_recommendations: - description_html: "Folgeempfehlungen helfen neuen Nutzern dabei, schnell interessante Inhalte zu finden. Wenn ein Nutzer noch nicht genug mit anderen interagiert hat, um personalisierte Folgeempfehlungen zu erstellen, werden stattdessen diese Benutzerkonten verwendet. Sie werden täglich basiert auf einer Mischung aus am meisten interagierenden Benutzerkonten und solchen mit den meisten Folgenden für eine bestimmte Sprache neuberechnet." + description_html: "Folgeempfehlungen helfen neuen Nutzern dabei, schnell interessante Inhalte zu finden. Wenn ein Nutzer noch nicht genug mit anderen interagiert hat, um personalisierte Folgeempfehlungen zu erstellen, werden stattdessen diese Benutzerkonten verwendet. Sie werden täglich basierend auf einer Mischung aus am meisten interagierenden Benutzerkonten und jenen mit den meisten Folgenden für eine bestimmte Sprache neuberechnet." language: Für Sprache status: Status suppress: Folgeempfehlungen unterdrücken @@ -577,7 +590,7 @@ de: disable: Ausschalten disabled: Ausgeschaltet enable: Einschalten - enable_hint: Sobald aktiviert wird dein Server alle öffentlichen Beiträge dieses Relays abonnieren und wird alle öffentlichen Beiträge dieses Servers an es senden. + enable_hint: Sobald aktiviert, wird dein Server alle öffentlichen Beiträge dieses Relays abonnieren und alle öffentlichen Beiträge dieses Servers an dieses senden. enabled: Eingeschaltet inbox_url: Relay-URL pending: Warte auf Zustimmung des Relays @@ -599,12 +612,12 @@ de: action_taken_by: Maßnahme ergriffen durch actions: delete_description_html: Der gemeldete Beitrag wird gelöscht und ein Strike wird aufgezeichnet, um dir bei zukünftigen Verstößen des gleichen Accounts zu helfen. - mark_as_sensitive_description_html: The media in the reported posts will be marked as sensitive and a strike will be recorded to help you escalate on future infractions by the same account. - other_description_html: Weitere Optionen zur Kontrolle des Kontoverhaltens und zur Anpassung der Kommunikation an das gemeldete Konto. - resolve_description_html: Es wird keine Maßnahme gegen den gemeldeten Account ergriffen, es wird kein Strike verzeichnet und die Meldung wird geschlossen. - silence_description_html: Das Profil wird nur für diejenigen sichtbar sein, die es bereits verfolgen oder manuell nachschlagen und die Reichweite wird stark begrenzt. Kann immer rückgängig gemacht werden. + mark_as_sensitive_description_html: Die Medien in den gemeldeten Beiträgen werden als NSFW markiert und ein Strike wird notiert, um dir dabei zu helfen, härter auf zukünftige Zuwiderhandlungen desselben Kontos zu reagieren. + other_description_html: Weitere Optionen zur Kontrolle des Kontoverhaltens und zur Anpassung der Kommunikation mit dem gemeldeten Konto. + resolve_description_html: Es wird keine Maßnahme gegen das gemeldete Konto ergriffen, es wird kein Strike verzeichnet und die Meldung wird geschlossen. + silence_description_html: Das Profil wird nur für diejenigen sichtbar sein, die ihm bereits folgen oder es manuell nachschlagen, und die Reichweite wird stark begrenzt. Kann immer rückgängig gemacht werden. suspend_description_html: Das Profil und alle seine Inhalte werden unzugänglich werden, bis es schließlich gelöscht wird. Interaktion mit dem Konto wird unmöglich sein. Reversibel innerhalb von 30 Tagen. - actions_description_html: Entscheide, welche Maßnahmen zur Lösung dieses Berichts zu ergreifen sind. Wenn du eine Strafmaßnahme gegen das gemeldete Konto ergreifst, wird eine E-Mail-Benachrichtigung an diese gesendet außer wenn die Spam Kategorie ausgewählt ist. + actions_description_html: Entscheide, welche Maßnahmen zur Lösung dieses Berichts zu ergreifen sind. Wenn du eine Strafmaßnahme gegen das gemeldete Konto ergreifst, wird eine E-Mail-Benachrichtigung an diese gesendet, außer wenn die Spam-Kategorie ausgewählt ist. add_to_report: Mehr zur Meldung hinzufügen are_you_sure: Bist du dir sicher? assign_to_self: Mir zuweisen @@ -614,7 +627,7 @@ de: category_description_html: Der Grund, warum dieses Konto und/oder der Inhalt gemeldet wurden, wird in der Kommunikation mit dem gemeldeten Konto zitiert comment: none: Kein - comment_description_html: 'Um weitere Informationen bereitzustellen, schrieb %{name} folgendes:' + comment_description_html: 'Um weitere Informationen bereitzustellen, schrieb %{name} Folgendes:' created_at: Gemeldet delete_and_resolve: Beiträge löschen forwarded: Weitergeleitet @@ -661,10 +674,10 @@ de: moderation: Moderation special: Spezial delete: Löschen - description_html: Mit Benutzerrollenkönnen Sie die Funktionen und Bereiche von Mastodon anpassen, auf die Ihre Benutzer zugreifen können. + description_html: Mit Benutzerrollenkannst du die Funktionen und Bereiche von Mastodon anpassen, auf die deine Benutzer zugreifen können. edit: "'%{name}' Rolle bearbeiten" everyone: Standardberechtigungen - everyone_full_description_html: Das ist die -Basis-Rolle die jeden Benutzer betrifft, auch diejenigen ohne zugewiesene Rolle. Alle anderen Rollen erben Berechtigungen davon. + everyone_full_description_html: Das ist die -Basis-Rolle, die jeden Benutzer betrifft, auch diejenigen ohne zugewiesene Rolle. Alle anderen Rollen erben Berechtigungen davon. permissions_count: one: "%{count} Berechtigung" other: "%{count} Berechtigungen" @@ -674,46 +687,46 @@ de: delete_user_data: Benutzerdaten löschen delete_user_data_description: Erlaubt Benutzern, die Daten anderer Benutzer ohne Verzögerung zu löschen invite_users: Benutzer einladen - invite_users_description: Erlaubt Benutzern neue Leute zum Server einzuladen + invite_users_description: Erlaubt Benutzern, neue Leute zum Server einzuladen manage_announcements: Ankündigungen verwalten - manage_announcements_description: Erlaubt Benutzern Ankündigungen auf dem Server zu verwalten + manage_announcements_description: Erlaubt Benutzern, Ankündigungen auf dem Server zu verwalten manage_appeals: Anträge verwalten - manage_appeals_description: Erlaubt es Benutzer Anträge gegen Moderationsaktionen zu überprüfen + manage_appeals_description: Erlaubt es Benutzern, Anträge gegen Moderationsaktionen zu überprüfen manage_blocks: Geblocktes verwalten - manage_blocks_description: Erlaubt Benutzern E-Mail-Anbieter und IP-Adressen zu blockieren + manage_blocks_description: Erlaubt Benutzern, E-Mail-Anbieter und IP-Adressen zu blockieren manage_custom_emojis: Benutzerdefinierte Emojis verwalten - manage_custom_emojis_description: Erlaubt Benutzern benutzerdefinierte Emojis auf dem Server zu verwalten + manage_custom_emojis_description: Erlaubt es Benutzern, eigene Emojis auf dem Server zu verwalten manage_federation: Föderation verwalten - manage_federation_description: Erlaubt Benutzern, Föderation mit anderen Domänen zu blockieren oder zuzulassen und die Zustellbarkeit zu kontrollieren + manage_federation_description: Erlaubt es Benutzern, Föderation mit anderen Domains zu blockieren oder zuzulassen und die Zustellbarkeit zu kontrollieren manage_invites: Einladungen verwalten - manage_invites_description: Erlaubt Benutzern Einladungslinks zu durchsuchen und zu deaktivieren + manage_invites_description: Erlaubt es Benutzern, Einladungslinks zu durchsuchen und zu deaktivieren manage_reports: Meldungen verwalten - manage_reports_description: Erlaubt Benutzern Meldungen zu überprüfen und Moderationsaktionen gegen sie durchzuführen + manage_reports_description: Erlaubt es Benutzern, Meldungen zu überprüfen und Moderationsaktionen gegen sie durchzuführen manage_roles: Rollen verwalten - manage_roles_description: Erlaubt Benutzern Rollen unter ihren Rollen zu verwalten und zuzuweisen + manage_roles_description: Erlaubt es Benutzern, Rollen unter ihren Rollen zu verwalten und zuzuweisen manage_rules: Regeln verwalten - manage_rules_description: Erlaubt Benutzern Serverregeln zu ändern + manage_rules_description: Erlaubt es Benutzern, Serverregeln zu ändern manage_settings: Einstellungen verwalten - manage_settings_description: Erlaubt Benutzern Site-Einstellungen zu ändern + manage_settings_description: Erlaubt es Benutzern, Seiten-Einstellungen zu ändern manage_taxonomies: Taxonomien verwalten manage_taxonomies_description: Ermöglicht Benutzern die Überprüfung angesagter Inhalte und das Aktualisieren der Hashtag-Einstellungen manage_user_access: Benutzerzugriff verwalten - manage_user_access_description: Erlaubt Benutzern die Zwei-Faktor-Authentifizierung anderer Benutzer zu deaktivieren, ihre E-Mail-Adresse zu ändern und ihr Passwort zurückzusetzen + manage_user_access_description: Erlaubt es Benutzern, die Zwei-Faktor-Authentifizierung anderer Benutzer zu deaktivieren, ihre E-Mail-Adresse zu ändern und ihr Passwort zurückzusetzen manage_users: Benutzer verwalten - manage_users_description: Erlaubt Benutzern die Details anderer Benutzer anzuzeigen und Moderationsaktionen gegen sie auszuführen + manage_users_description: Erlaubt es Benutzern, die Details anderer Benutzer anzuzeigen und Moderationsaktionen gegen sie auszuführen manage_webhooks: Webhooks verwalten - manage_webhooks_description: Erlaubt Benutzern Webhooks für administrative Ereignisse einzurichten + manage_webhooks_description: Erlaubt es Benutzern, Webhooks für administrative Ereignisse einzurichten view_audit_log: Audit-Log anzeigen - view_audit_log_description: Erlaubt Benutzern den Verlauf von administrativen Aktionen auf dem Server zu sehen + view_audit_log_description: Erlaubt es Benutzern, den Verlauf von administrativen Aktionen auf dem Server zu sehen view_dashboard: Dashboard anzeigen - view_dashboard_description: Erlaubt Benutzern den Zugriff auf das Dashboard und verschiedene Metriken + view_dashboard_description: Gewährt Benutzern den Zugriff auf das Dashboard und verschiedene Metriken view_devops: DevOps - view_devops_description: Erlaubt Benutzern auf Sidekiq und pgHero Dashboards zuzugreifen + view_devops_description: Erlaubt es Benutzern, auf die Sidekiq- und pgHero-Dashboards zuzugreifen title: Rollen rules: add_new: Regel hinzufügen delete: Löschen - description_html: Während die meisten behaupten, die Nutzungsbedingungen gelesen und akzeptiert zu haben, lesen die Menschen sie in der Regel erst nach einem Problem. Vereinfache es, die Regeln deines Servers auf einen Blick zu sehen, indem du sie in einer einfachen Auflistung zur Verfügung stellst. Versuche die einzelnen Regeln kurz und einfach zu halten, aber versuche nicht, sie in viele verschiedene Elemente aufzuteilen. + description_html: Während die meisten behaupten, die Nutzungsbedingungen gelesen und akzeptiert zu haben, lesen die Menschen sie in der Regel erst nach einem Problem. Vereinfache es, die Regeln deines Servers auf einen Blick zu sehen, indem du sie in einer einfachen Auflistung zur Verfügung stellst. Versuche, die einzelnen Regeln kurz und einfach zu halten, aber versuche nicht, sie in viele verschiedene Elemente aufzuteilen. edit: Regel bearbeiten empty: Es wurden bis jetzt keine Server-Regeln definiert. title: Server-Regeln @@ -722,13 +735,13 @@ de: desc_html: Anzahl der lokal geposteten Beiträge, aktiven Nutzern und neuen Registrierungen in wöchentlichen Zusammenfassungen title: Veröffentliche gesamte Statistiken über Benutzeraktivitäten bootstrap_timeline_accounts: - desc_html: Mehrere Profilnamen durch Kommata trennen. Diese Accounts werden immer in den Folgemempfehlungen angezeigt - title: Konten, die Neu-Angemeldete empfohlen bekommen sollen + desc_html: Mehrere Profilnamen durch Kommata trennen. Diese Konten werden immer in den Folgemempfehlungen angezeigt + title: Konten, welche neuen Benutzern empfohlen werden sollen contact_information: email: Öffentliche E-Mail-Adresse username: Profilname für die Kontaktaufnahme custom_css: - desc_html: Verändere das Aussehen mit CSS, dass auf jeder Seite geladen wird + desc_html: Verändere das Aussehen mit CSS-Stilen, die auf jeder Seite geladen werden title: Benutzerdefiniertes CSS default_noindex: desc_html: Beeinflusst alle Benutzer, die diese Einstellung nicht selbst geändert haben @@ -744,7 +757,7 @@ de: desc_html: Wird auf der Startseite angezeigt. Mindestens 600x100px sind empfohlen. Wenn es nicht gesetzt wurde, wird das Server-Thumbnail dafür verwendet title: Bild für Einstiegsseite mascot: - desc_html: Angezeigt auf mehreren Seiten. Mehr als 293x205px empfohlen. Wenn es nicht gesetzt wurde wird es auf das Standard-Maskottchen zurückfallen + desc_html: Angezeigt auf mehreren Seiten. Mehr als 293x205px empfohlen. Wenn es nicht gesetzt wurde, wird stattdessen das Standard-Maskottchen genutzt werden. title: Maskottchen-Bild peers_api_enabled: desc_html: Domain-Namen, die der Server im Fediversum gefunden hat @@ -753,7 +766,7 @@ de: desc_html: Linkvorschauen auf anderen Webseiten werden ein Vorschaubild anzeigen, obwohl die Medien als NSFW markiert sind title: NSFW-Medien in OpenGraph-Vorschau anzeigen profile_directory: - desc_html: Erlaube Benutzer auffindbar zu sein + desc_html: Erlaube es Benutzern, auffindbar zu sein title: Aktiviere Profilverzeichnis registrations: closed_message: @@ -763,7 +776,7 @@ de: desc_html: Allen erlauben, ihr Konto eigenmächtig zu löschen title: Kontolöschung erlauben require_invite_text: - desc_html: Wenn eine Registrierung manuell genehmigt werden muss, mache den "Warum möchtest du beitreten?" Text eher obligatorisch als optional + desc_html: Wenn eine Registrierung manuell genehmigt werden muss, mache den „Warum möchtest du beitreten?“-Text obligatorisch statt optional title: Neue Benutzer müssen einen Einladungstext ausfüllen registrations_mode: modes: @@ -772,7 +785,7 @@ de: open: Jeder kann sich registrieren title: Registrierungsmodus show_known_fediverse_at_about_page: - desc_html: Wenn aktiviert, wird es alle Beiträge aus dem bereits bekannten Teil des Fediversums auf der Startseite anzeigen. Andernfalls werden lokale Beitrage des Servers angezeigt. + desc_html: Wenn aktiviert, wird es alle Beiträge aus dem bereits bekannten Teil des Födiversums auf der Startseite anzeigen. Andernfalls werden lokale Beitrage des Servers angezeigt. title: Zeige eine öffentliche Zeitleiste auf der Einstiegsseite site_description: desc_html: Einleitungsabschnitt auf der Frontseite. Beschreibe, was diesen Mastodon-Server ausmacht. Du kannst HTML-Tags benutzen, insbesondere <a> und <em>. @@ -781,7 +794,7 @@ de: desc_html: Bietet sich für Verhaltenskodizes, Regeln, Richtlinien und weiteres an, was deinen Server auszeichnet. Du kannst HTML-Tags benutzen title: Erweiterte Beschreibung des Servers site_short_description: - desc_html: Wird angezeigt in der Seitenleiste und in Meta-Tags. Beschreibe in einem einzigen Abschnitt, was Mastodon ist und was diesen Server von anderen unterscheidet. Falls leer, wird die Server-Beschreibung verwendet. + desc_html: Wird in der Seitenleiste und in Meta-Tags angezeigt. Beschreibe in einem einzigen Abschnitt, was Mastodon ist und was diesen Server von anderen unterscheidet. Falls leer, wird die Server-Beschreibung verwendet. title: Kurze Beschreibung des Servers site_terms: desc_html: Hier kannst du deine eigenen Geschäftsbedingungen, Datenschutzerklärung und anderes rechtlich Relevante eintragen. Du kannst HTML-Tags nutzen @@ -795,8 +808,8 @@ de: title: Zeitleisten-Vorschau title: Server-Einstellungen trendable_by_default: - desc_html: Betroffene Hashtags, die bisher nicht gesperrt wurden - title: Hashtags ohne vorherige Überprüfung erlauben zu trenden + desc_html: Bestimmte angesagte Inhalte können immer noch explizit deaktiviert werden + title: Trends ohne vorherige Überprüfung erlauben trends: desc_html: Zuvor überprüfte Hashtags öffentlich anzeigen, die derzeit angesagt sind title: Trendende Hashtags @@ -821,24 +834,24 @@ de: disable: "%{name} hat das Konto von %{target} eingefroren" mark_statuses_as_sensitive: "%{name} markierte %{target}'s Beiträge als NSFW" none: "%{name} hat eine Warnung an %{target} gesendet" - sensitive: "%{name} markierte %{target}'s Konto als NSFW" + sensitive: "%{name} markierte das Konto von %{target} als NSFW" silence: "%{name} hat das Konto von %{target} eingeschränkt" suspend: "%{name} hat das Konto von %{target} verbannt" appeal_approved: Einspruch angenommen appeal_pending: Einspruch ausstehend system_checks: database_schema_check: - message_html: Es gibt ausstehende Datenbankmigrationen. Bitte führen Sie sie aus, um sicherzustellen, dass sich die Anwendung wie erwartet verhält + message_html: Es gibt ausstehende Datenbankmigrationen. Bitte führe sie aus, um sicherzustellen, dass sich die Anwendung wie erwartet verhält elasticsearch_running_check: - message_html: Verbindung mit Elasticsearch konnte nicht hergestellt werden. Bitte prüfe ob Elasticsearch läuft oder deaktiviere die Volltextsuche + message_html: Verbindung mit Elasticsearch konnte nicht hergestellt werden. Bitte prüfe, ob Elasticsearch läuft, oder deaktiviere die Volltextsuche elasticsearch_version_check: message_html: 'Inkompatible Elasticsearch-Version: %{value}' version_comparison: Elasticsearch %{running_version} läuft, aber %{required_version} wird benötigt rules_check: action: Serverregeln verwalten - message_html: Sie haben keine Serverregeln definiert. + message_html: Du hast keine Serverregeln definiert. sidekiq_process_check: - message_html: Kein Sidekiq-Prozess läuft für die %{value} Warteschlange(n). Bitte überprüfen Sie Ihre Sidekiq-Konfiguration + message_html: Kein Sidekiq-Prozess läuft für die %{value} Warteschlange(n). Bitte überprüfe deine Sidekiq-Konfiguration tags: review: Prüfstatus updated_msg: Hashtageinstellungen wurden erfolgreich aktualisiert @@ -850,26 +863,26 @@ de: links: allow: Erlaube Link allow_provider: Erlaube Herausgeber - description_html: Dies sind Links, die derzeit von Konten geteilt werden, von denen dein Server Beiträge sieht. Es kann deinen Benutzern helfen, herauszufinden, was in der Welt vor sich geht. Es werden keine Links öffentlich angezeigt, bis du den Publisher genehmigst. Du kannst auch einzelne Links zulassen oder ablehnen. + description_html: Dies sind Links, die derzeit von Konten geteilt werden, von denen dein Server Beiträge sieht. Es kann deinen Benutzern helfen herauszufinden, was in der Welt vor sich geht. Es werden keine Links öffentlich angezeigt, bis du den Publisher genehmigst. Du kannst auch einzelne Links zulassen oder ablehnen. disallow: Verbiete Link disallow_provider: Verbiete Herausgeber shared_by_over_week: one: In der letzten Woche von einer Person geteilt other: In der letzten Woche von %{count} Personen geteilt title: Angesagte Links - usage_comparison: Heute %{today} mal geteilt, gestern %{yesterday} mal + usage_comparison: Heute %{today} Mal geteilt, gestern %{yesterday} Mal only_allowed: Nur Erlaubte pending_review: Überprüfung ausstehend preview_card_providers: allowed: Links von diesem Herausgeber können angesagt sein - description_html: Dies sind Domains, von denen Links oft auf deinem Server geteilt werden. Links werden sich nicht öffentlich trenden, es sei denn, die Domain des Links wird genehmigt. Deine Zustimmung (oder Ablehnung) erstreckt sich auf Subdomains. + description_html: Dies sind Domains, von denen Links oft auf deinem Server geteilt werden. Links werden nicht öffentlich trenden, es sei denn, die Domain des Links wird genehmigt. Deine Zustimmung (oder Ablehnung) erstreckt sich auf Subdomains. rejected: Links von diesem Herausgeber können nicht angesagt sein title: Herausgeber rejected: Abgelehnt statuses: allow: Beitrag erlauben allow_account: Autor erlauben - description_html: Dies sind Beiträge, von denen dein Server weiß, dass sie derzeit viel geteilt und favorisiert werden. Es kann deinen neuen und wiederkehrenden Benutzern helfen, weitere Personen zu finden. Es werden keine Beiträge öffentlich angezeigt, bis du den Autor genehmigst und der Autor es zulässt deren Konto anderen Benutzern zu zeigen. Du kannst auch einzelne Beiträge zulassen oder ablehnen. + description_html: Dies sind Beiträge, von denen dein Server weiß, dass sie derzeit viel geteilt und favorisiert werden. Es kann deinen neuen und wiederkehrenden Benutzern helfen, weitere Personen zu finden. Es werden keine Beiträge öffentlich angezeigt, bis du den Autor genehmigst und der Autor es zulässt, sein Konto anderen Benutzern zeigen zu lassen. Du kannst auch einzelne Beiträge zulassen oder ablehnen. disallow: Beitrag verbieten disallow_account: Autor verbieten not_discoverable: Der Autor hat sich nicht dafür entschieden, entdeckt zu werden @@ -895,7 +908,7 @@ de: trendable: Darf unter Trends erscheinen trending_rank: 'Trend #%{rank}' usable: Kann verwendet werden - usage_comparison: Heute %{today} mal genutzt, gestern %{yesterday} mal + usage_comparison: Heute %{today} Mal genutzt, gestern %{yesterday} Mal used_by_over_week: one: In der letzten Woche von einer Person genutzt other: In der letzten Woche von %{count} Personen genutzt @@ -937,9 +950,9 @@ de: sensitive: deren Konto als NSFW zu markieren silence: deren Konto zu beschränken suspend: deren Konto zu sperren - body: "%{target} hat was gegen eine Moderationsentscheidung von %{action_taken_by} von %{date}, die %{type} war. Die Person schrieb:" + body: "%{target} hat etwas gegen eine Moderationsentscheidung von %{action_taken_by} von %{date}, die %{type} war. Die Person schrieb:" next_steps: Du kannst dem Einspruch zustimmen und die Moderationsentscheidung rückgängig machen oder ignorieren. - subject: "%{username} hat Einspruch an einer Moderationsentscheidung von %{instance}" + subject: "%{username} hat Einspruch gegen eine Moderationsentscheidung von %{instance} eingelegt" new_pending_account: body: Die Details von diesem neuem Konto sind unten. Du kannst die Anfrage akzeptieren oder ablehnen. subject: Neues Konto zur Überprüfung auf %{instance} verfügbar (%{username}) @@ -965,13 +978,13 @@ de: aliases: add_new: Alias erstellen created_msg: Ein neuer Alias wurde erfolgreich erstellt. Du kannst nun den Wechsel vom alten Konto starten. - deleted_msg: Der Alias wurde erfolgreich entfernt. Aus diesem Konto zu diesem zu verschieben ist nicht mehr möglich. + deleted_msg: Der Alias wurde erfolgreich entfernt. Aus jenem Konto zu diesem zu verschieben, ist nicht mehr möglich. empty: Du hast keine Aliase. - hint_html: Wenn du von einem Konto zu einem anderem Konto wechseln möchtest, dann kannst du einen Alias erstellen, welcher benötigt wird bevor du deine Folgenden vom altem Account zu diesen migrierst. Die Aktion alleine ist harmlos und wi­der­ruf­lich. Die Kontenmigration wird vom altem Konto aus eingeleitet. + hint_html: Wenn du von einem Konto zu einem anderem Konto wechseln möchtest, dann kannst du einen Alias erstellen, welcher benötigt wird, bevor du deine Folgenden vom altem Account zu diesen migrierst. Die Aktion alleine ist harmlos und wi­der­ruf­lich. Die Kontenmigration wird vom altem Konto aus eingeleitet. remove: Alle Aliase aufheben appearance: advanced_web_interface: Fortgeschrittene Benutzeroberfläche - advanced_web_interface_hint: Wenn du mehr aus deiner Bildschirmbreite herausholen möchtest, erlaubt dir die fortgeschrittene Benutzeroberfläche viele unterschiedliche Spalten auf einmal zu sehen, wie z.B. deine Startseite, Benachrichtigungen, das gesamte bekannte Netz, deine Listen und beliebige Hashtags. + advanced_web_interface_hint: Wenn du mehr aus deiner Bildschirmbreite herausholen möchtest, erlaubt es dir die fortgeschrittene Benutzeroberfläche, viele unterschiedliche Spalten auf einmal zu sehen, wie z.B. deine Startseite, Benachrichtigungen, das gesamte bekannte Netz, deine Listen und beliebige Hashtags. animations_and_accessibility: Animationen und Barrierefreiheit confirmation_dialogs: Bestätigungsfenster discovery: Entdecken @@ -1038,7 +1051,7 @@ de: pending: Deine Bewerbung wird von unseren Mitarbeitern noch überprüft. Dies kann einige Zeit dauern. Du erhältst eine E-Mail, wenn deine Bewerbung genehmigt wurde. redirecting_to: Dein Konto ist inaktiv, da es derzeit zu %{acct} umgeleitet wird. view_strikes: Zeige frühere Streiks gegen dein Konto - too_fast: Formular zu schnell gesendet, versuchen Sie es erneut. + too_fast: Formular zu schnell gesendet, versuche es erneut. trouble_logging_in: Schwierigkeiten beim Anmelden? use_security_key: Sicherheitsschlüssel verwenden authorize_follow: @@ -1057,7 +1070,7 @@ de: confirm: Fortfahren hint_html: "Hinweis: Wir werden dich für die nächste Stunde nicht erneut nach deinem Passwort fragen." invalid_password: Ungültiges Passwort - prompt: Gib dein Passwort ein um fortzufahren + prompt: Gib dein Passwort ein, um fortzufahren crypto: errors: invalid_key: ist kein gültiger Ed25519- oder Curve25519-Schlüssel @@ -1087,7 +1100,7 @@ de: proceed: Konto löschen success_msg: Dein Konto wurde erfolgreich gelöscht warning: - before: 'Bevor du fortfährst, lese bitte diese Punkte sorgfältig durch:' + before: 'Bevor du fortfährst, lies bitte diese Punkte sorgfältig durch:' caches: Inhalte, die von anderen Servern zwischengespeichert wurden, können weiterhin bestehen data_removal: Deine Beiträge und andere Daten werden dauerhaft entfernt email_change_html: Du kannst deine E-Mail-Adresse ändern, ohne dein Konto zu löschen @@ -1136,15 +1149,15 @@ de: errors: '400': Die Anfrage, die du gesendet hast, war ungültig oder fehlerhaft. '403': Dir fehlt die Befugnis, diese Seite sehen zu können. - '404': Die Seite nach der du gesucht hast wurde nicht gefunden. + '404': Die Seite, nach der du gesucht hast, wurde nicht gefunden. '406': Diese Seite ist im gewünschten Format nicht verfügbar. - '410': Die Seite nach der du gesucht hast existiert hier nicht mehr. + '410': Die Seite, nach der du gesucht hast, existiert hier nicht mehr. '422': content: Sicherheitsüberprüfung fehlgeschlagen. Blockierst du Cookies? title: Sicherheitsüberprüfung fehlgeschlagen '429': Du wurdest gedrosselt '500': - content: Bitte verzeih, etwas ist bei uns schief gegangen. + content: Bitte verzeih', etwas ist bei uns schiefgegangen. title: Diese Seite ist kaputt '503': Die Seite konnte wegen eines temporären Serverfehlers nicht angezeigt werden. noscript_html: Bitte aktiviere JavaScript, um die Mastodon-Web-Anwendung zu verwenden. Alternativ kannst du auch eine der nativen Mastodon-Anwendungen für deine Plattform probieren. @@ -1155,7 +1168,7 @@ de: archive_takeout: date: Datum download: Dein Archiv herunterladen - hint_html: Du kannst ein Archiv deiner Beiträge und hochgeladenen Medien anfragen. Die exportierten Daten werden in dem ActivityPub-Format gespeichert, welches mit jeder Software lesbar ist die das Format unterstützt. Du kannst alle 7 Tage ein Archiv anfordern. + hint_html: Du kannst ein Archiv deiner Beiträge und hochgeladenen Medien anfragen. Die exportierten Daten werden in dem ActivityPub-Format gespeichert, welches mit jeder Software lesbar ist, die das Format unterstützt. Du kannst alle 7 Tage ein Archiv anfordern. in_progress: Stelle dein Archiv zusammen... request: Dein Archiv anfragen size: Größe @@ -1181,9 +1194,11 @@ de: edit: add_keyword: Stichwort hinzufügen keywords: Stichwörter + statuses: Individuelle Beiträge + statuses_hint_html: Dieser Filter gilt für die Auswahl einzelner Beiträge, unabhängig davon, ob sie mit den unten stehenden Schlüsselwörtern übereinstimmen. Beiträge im Filter ansehen oder entfernen.. title: Filter bearbeiten errors: - deprecated_api_multiple_keywords: Diese Parameter können von dieser Anwendung nicht geändert werden, da sie auf mehr als ein Filterschlüsselwort angewendet werden. Verwenden Sie eine neuere Anwendung oder die Web-Schnittstelle. + deprecated_api_multiple_keywords: Diese Parameter können von dieser Anwendung nicht geändert werden, da sie auf mehr als ein Filterschlüsselwort angewendet werden. Verwende eine neuere Anwendung oder die Web-Schnittstelle. invalid_context: Ungültiger oder fehlender Kontext übergeben index: contexts: Filter in %{contexts} @@ -1194,10 +1209,23 @@ de: keywords: one: "%{count} Stichwort" other: "%{count} Stichwörter" + statuses: + one: "%{count} Beitrag" + other: "%{count} Beiträge" + statuses_long: + one: "%{count} individueller Beitrag ausgeblendet" + other: "%{count} individuelle Beiträge ausgeblendet" title: Filter new: save: Neuen Filter speichern title: Neuen Filter hinzufügen + statuses: + back_to_filter: Zurück zum Filter + batch: + remove: Vom Filter entfernen + index: + hint: Dieser Filter wird verwendet, um einzelne Beiträge unabhängig von anderen Kriterien auszuwählen. Du kannst mehr Beiträge zu diesem Filter über die Webschnittstelle hinzufügen. + title: Gefilterte Beiträge footer: developers: Entwickler more: Mehr… @@ -1205,12 +1233,22 @@ de: trending_now: In den Trends generic: all: Alle + all_items_on_page_selected_html: + one: "%{count} Element auf dieser Seite ausgewählt." + other: Alle %{count} Elemente auf dieser Seite ausgewählt. + all_matching_items_selected_html: + one: "%{count} Element trifft auf ihre Suche zu." + other: Alle %{count} Elemente, die Ihrer Suche entsprechen, werden ausgewählt. changes_saved_msg: Änderungen gespeichert! copy: Kopieren delete: Löschen + deselect: Auswahl für alle aufheben none: Keine order_by: Sortieren nach save_changes: Änderungen speichern + select_all_matching_items: + one: Wähle %{count} Element, das deiner Suche entspricht. + other: Wählen Sie alle %{count} Elemente, die Ihrer Suche entsprechen. today: heute validation_errors: one: Etwas ist noch nicht ganz richtig! Bitte korrigiere den Fehler @@ -1252,7 +1290,7 @@ de: one: 1 mal verwendet other: "%{count} mal verwendet" max_uses_prompt: Kein Limit - prompt: Generiere und teile Links um Zugang zu diesem Server zu geben + prompt: Generiere und teile Links, um Zugang zu diesem Server zu erteilen table: expires_at: Läuft ab uses: Verwendungen @@ -1274,7 +1312,7 @@ de: media_attachments: validations: images_and_video: Es kann kein Video an einen Beitrag, der bereits Bilder enthält, angehängt werden - not_ready: Dateien die noch nicht bearbeitet wurden, können nicht angehängt werden. Versuche es gleich noch einmal! + not_ready: Dateien, die noch nicht bearbeitet wurden, können nicht angehängt werden. Versuche es gleich noch einmal! too_many: Es können nicht mehr als 4 Dateien angehängt werden migrations: acct: benutzername@domain des neuen Kontos @@ -1300,7 +1338,7 @@ de: set_redirect: Umleitung einrichten warning: backreference_required: Das neue Konto muss zuerst so konfiguriert werden, dass es auf das alte Konto referenziert - before: 'Bevor du fortfährst, lese bitte diese Hinweise sorgfältig durch:' + before: 'Bevor du fortfährst, lies bitte diese Hinweise sorgfältig durch:' cooldown: Nach dem Migrieren wird es eine Abklingzeit geben, in der du das Konto nicht noch einmal migrieren kannst disabled_account: Dein aktuelles Konto wird nachher nicht vollständig nutzbar sein. Du hast jedoch Zugriff auf den Datenexport sowie die Reaktivierung. followers: Diese Aktion wird alle Folgende vom aktuellen Konto auf das neue Konto verschieben @@ -1312,24 +1350,13 @@ de: move_handler: carry_blocks_over_text: Dieses Benutzerkonto ist von %{acct} umgezogen, welches du blockiert hast. carry_mutes_over_text: Dieses Benutzerkonto ist von %{acct} umgezogen, welches du stummgeschaltet hast. - copy_account_note_text: 'Dieser Benutzer ist von %{acct} umgezogen, hier waren deine letzten Notizen zu diesem Benutzer:' + copy_account_note_text: 'Dieser Benutzer ist von %{acct} umgezogen, hier sind deine letzten Notizen zu diesem Benutzer:' notification_mailer: admin: report: subject: "%{name} hat eine Meldung eingereicht" sign_up: subject: "%{name} registrierte sich" - digest: - action: Zeige alle Benachrichtigungen - body: Hier ist eine kurze Zusammenfassung der Nachrichten, die du seit deinem letzten Besuch am %{since} verpasst hast - mention: "%{name} hat dich erwähnt:" - new_followers_summary: - one: Außerdem ist dir seit du weg warst ein weiteres Konto gefolgt! Juhu! - other: Außerdem sind dir seit du weg warst %{count} weitere Konten gefolgt! Großartig! - subject: - one: "1 neue Mitteilung seit deinem letzten Besuch 🐘" - other: "%{count} neue Mitteilungen seit deinem letzten Besuch 🐘" - title: In deiner Abwesenheit... favourite: body: 'Dein Beitrag wurde von %{name} favorisiert:' subject: "%{name} hat deinen Beitrag favorisiert" @@ -1374,7 +1401,7 @@ de: trillion: T otp_authentication: code_hint: Gib den von deiner Authentifizierungs-App generierten Code ein, um deine Anmeldung zu bestätigen - description_html: Wenn du Zwei-Faktor-Authentifizierung mit einer Authentifizierungs-App aktivierst, musst du, um dich anzumelden, im Besitz deines Handys sein, dass Tokens für dein Konto generiert. + description_html: Wenn du Zwei-Faktor-Authentifizierung mit einer Authentifizierungs-App aktivierst, musst du, um dich anzumelden, im Besitz deines Smartphones sein, welches Tokens für dein Konto generiert. enable: Aktivieren instructions_html: "Scanne diesen QR-Code in Google Authenticator oder einer ähnlichen TOTP-App auf deinem Handy. Von nun an generiert diese App Tokens, die du beim Anmelden eingeben musst." manual_instructions: 'Wenn du den QR-Code nicht scannen kannst und ihn manuell eingeben musst, ist hier das Klartext-Geheimnis:' @@ -1393,7 +1420,7 @@ de: duration_too_long: ist zu weit in der Zukunft duration_too_short: ist zu früh expired: Die Umfrage ist bereits vorbei - invalid_choice: Die gewählte Stimmenoption existiert nicht + invalid_choice: Die gewählte Abstimmoption existiert nicht over_character_limit: kann nicht länger als jeweils %{max} Zeichen sein too_few_options: muss mindestens einen Eintrag haben too_many_options: kann nicht mehr als %{max} Einträge beinhalten @@ -1420,7 +1447,7 @@ de: relationship: Beziehung remove_selected_domains: Entferne alle Follower von den ausgewählten Domains remove_selected_followers: Entferne ausgewählte Follower - remove_selected_follows: Entfolge ausgewählte Benutzer + remove_selected_follows: Entfolge ausgewählten Benutzern status: Kontostatus remote_follow: acct: Profilname@Domain, von wo aus du dieser Person folgen möchtest @@ -1428,7 +1455,7 @@ de: no_account_html: Noch kein Konto? Du kannst dich hier anmelden proceed: Weiter prompt: 'Du wirst dieser Person folgen:' - reason_html: "Warum ist dieser Schritt erforderlich?%{instance} ist möglicherweise nicht der Server auf dem du registriert bist, also müssen wir dich erst auf deinen Heimserver weiterleiten." + reason_html: "Warum ist dieser Schritt erforderlich?%{instance} ist möglicherweise nicht der Server, auf dem du registriert bist, also müssen wir dich erst auf deinen Heimserver weiterleiten." remote_interaction: favourite: proceed: Fortfahren zum Favorisieren @@ -1448,8 +1475,8 @@ de: account: Öffentliche Beiträge von @%{acct} tag: 'Öffentliche Beiträge mit dem Tag #%{hashtag}' scheduled_statuses: - over_daily_limit: Du hast das Limit für geplante Beiträge, dass %{limit} beträgt, für heute erreicht - over_total_limit: Du hast das Limit für geplante Beiträge, dass %{limit} beträgt, erreicht + over_daily_limit: Du hast das Limit für geplante Beiträge, welches %{limit} beträgt, für heute erreicht + over_total_limit: Du hast das Limit für geplante Beiträge, welches %{limit} beträgt, erreicht too_soon: Das geplante Datum muss in der Zukunft liegen sessions: activity: Letzte Aktivität @@ -1570,7 +1597,7 @@ de: enabled: Automatisch alte Beiträge löschen enabled_hint: Löscht automatisch deine Beiträge, sobald sie einen bestimmten Altersgrenzwert erreicht haben, es sei denn, sie entsprechen einer der folgenden Ausnahmen exceptions: Ausnahmen - explanation: Damit Mastodon nicht durch das Löschen von Beiträgen ausgebremst wird, wartet der Server damit bis wenig los ist. Aus diesem Grund werden deine Beiträge ggf. erst einige Zeit nach Erreichen der Altersgrenze gelöscht. + explanation: Damit Mastodon nicht durch das Löschen von Beiträgen ausgebremst wird, wartet der Server damit, bis wenig los ist. Aus diesem Grund werden deine Beiträge ggf. erst einige Zeit nach Erreichen der Altersgrenze gelöscht. ignore_favs: Favoriten ignorieren ignore_reblogs: Boosts ignorieren interaction_exceptions: Ausnahmen basierend auf Interaktionen @@ -1578,15 +1605,15 @@ de: keep_direct: Direktnachrichten behalten keep_direct_hint: Löscht keine deiner Direktnachrichten keep_media: Beiträge mit Medienanhängen behalten - keep_media_hint: Löscht keine Ihrer Beiträge mit Medienanhängen + keep_media_hint: Löscht keinen deiner Beiträge mit Medienanhängen keep_pinned: Angeheftete Beiträge behalten - keep_pinned_hint: Löscht keine deiner angehefteten Beiträge + keep_pinned_hint: Löscht keinen deiner angehefteten Beiträge keep_polls: Umfragen behalten keep_polls_hint: Löscht keine deiner Umfragen keep_self_bookmark: Als Lesezeichen markierte Beiträge behalten - keep_self_bookmark_hint: Löscht nicht deine eigenen Beiträge, wenn du sie als Lesezeichen markiert hast + keep_self_bookmark_hint: Löscht deine eigenen Beiträge nicht, wenn du sie als Lesezeichen markiert hast keep_self_fav: Behalte die von dir favorisierten Beiträge - keep_self_fav_hint: Löscht nicht deine eigenen Beiträge, wenn du sie favorisiert hast + keep_self_fav_hint: Löscht deine eigenen Beiträge nicht, wenn du sie favorisiert hast min_age: '1209600': 2 Wochen '15778476': 6 Monate @@ -1615,10 +1642,10 @@ de:

    Datenschutzerklärung

    Welche Informationen sammeln wir?

      -
    • Grundlegende Kontoinformationen: Wenn du dich auf diesem Server registrierst, wirst du darum gebeten, einen Benutzernamen, eine E-Mail-Adresse und ein Passwort einzugeben. Du kannst auch zusätzliche Profilinformationen wie etwa einen Anzeigenamen oder eine Biografie eingeben und ein Profilbild oder ein Headerbild hochladen. Der Benutzername, der Anzeigename, die Biografie, das Profilbild und das Headerbild werden immer öffentlich angezeigt.
    • -
    • Beiträge, Folge- und andere öffentliche Informationen: Die Liste der Leute, denen du folgst, wird öffentlich gezeigt, das gleiche gilt für deine Folgenden (Follower). Sobald du eine Nachricht übermittelst, wird das Datum und die Uhrzeit gemeinsam mit der Information, welche Anwendung du dafür verwendet hast, gespeichert. Nachricht können Medienanhänge enthalten, etwa Bilder und Videos. Öffentliche und ungelistete Beiträge sind öffentlich verfügbar. Sobald du einen Beitrag auf deinem Profil anpinnst, sind dies auch öffentlich verfügbare Informationen. Deine Beiträge werden an deine Folgenden ausgeliefert, was in manchen Fällen bedeutet, dass sie an andere Server ausgeliefert werden und dort Kopien gespeichert werden. Sobald du Beiträge löschst, wird dies ebenso an deine Follower ausgeliefert. Die Handlungen des Teilens und Favorisieren eines anderen Beitrages ist immer öffentlich.
    • -
    • Direkte und "Nur Folgende"-Beiträge: Alle Beiträge werden auf dem Server gespeichert und verarbeitet. "Nur Folgende"-Beiträge werden an deine Folgenden und an Benutzer, die du in ihnen erwähnst, ausgeliefert, direkte Beiträge nur an in ihnen erwähnte Benutzer. In manchen Fällen bedeutet dass, dass sie an andere Server ausgeliefert werden und dort Kopien gespeichert werden. Wir bemühen uns nach bestem Wissen und Gewissen, den Zugriff auf diese Beiträge auf nur autorisierte Personen einzuschränken, jedoch könnten andere Server dabei scheitern. Deswegen ist es wichtig, die Server, zu denen deine Folgenden gehören, zu überprüfen. Du kannst eine Option in den Einstellungen umschalten, um neue Folgenden manuell anzunehmen oder abzuweisen. Bitte beachte, dass die Betreiber des Server und jedes empfangenden Servers solche Nachrichten anschauen könnten und dass Empfänger von diesen eine Bildschirmkopie erstellen könnten, sie kopieren oder anderweitig weiterverteilen könnten. Teile nicht irgendwelche sensiblen Informationen über Mastodon.
    • -
    • Internet Protocol-Adressen (IP-Adressen) und andere Metadaten: Sobald du dich anmeldest, erfassen wir sowohl die IP-Adresse, von der aus du dich anmeldest, als auch den Namen deine Browseranwendung. Alle angemeldeten Sitzungen (Sessions) sind für deine Überprüfung und Widerruf in den Einstellungen verfügbar. Die letzte verwendete IP-Adresse wird bis zu 12 Monate lang gespeichert. Wir könnten auch Serverprotokoll behalten, welche die IP-Adresse von jeder Anfrage an unseren Server enthalten.
    • +
    • Grundlegende Kontoinformationen: Wenn du dich auf diesem Server registrierst, wirst du darum gebeten, einen Benutzernamen, eine E-Mail-Adresse und ein Passwort einzugeben. Du kannst auch zusätzliche Profilinformationen, wie etwa einen Anzeigenamen oder eine Biografie, eingeben und ein Profilbild oder ein Headerbild hochladen. Der Benutzername, der Anzeigename, die Biografie, das Profilbild und das Headerbild werden immer öffentlich angezeigt.
    • +
    • Beiträge, Folge- und andere öffentliche Informationen: Die Liste der Leute, denen du folgst, wird öffentlich gezeigt; das gleiche gilt für deine Folgenden (Follower). Sobald du eine Nachricht übermittelst, wird das Datum und die Uhrzeit gemeinsam mit der Information, welche Anwendung du dafür verwendet hast, gespeichert. Nachricht können Medienanhänge enthalten, etwa Bilder und Videos. Öffentliche und ungelistete Beiträge sind öffentlich verfügbar. Sobald du einen Beitrag auf deinem Profil anpinnst, ist dies auch eine öffentlich verfügbare Information. Deine Beiträge werden an deine Folgenden ausgeliefert, was in manchen Fällen bedeutet, dass sie an andere Server ausgeliefert werden und dort Kopien gespeichert werden. Sobald du Beiträge löschst, wird dies ebenso an deine Follower ausgeliefert. Die Handlungen des Teilens und Favorisieren eines anderen Beitrages ist immer öffentlich.
    • +
    • Direkte und „Nur Folgende“-Beiträge: Alle Beiträge werden auf dem Server gespeichert und verarbeitet. „Nur Folgende“-Beiträge werden an deine Folgenden und an Benutzer, die du in ihnen erwähnst, ausgeliefert, direkte Beiträge nur an in ihnen erwähnte Benutzer. In manchen Fällen bedeutet das, dass sie an andere Server ausgeliefert und dort Kopien gespeichert werden. Wir bemühen uns nach bestem Wissen und Gewissen, den Zugriff auf diese Beiträge auf nur autorisierte Personen einzuschränken, jedoch könnten andere Server dabei scheitern. Deswegen ist es wichtig, die Server, zu denen deine Folgenden gehören, zu überprüfen. Du kannst eine Option in den Einstellungen umschalten, um neue Folgenden manuell anzunehmen oder abzuweisen. Bitte beachte, dass die Betreiber des Server und jedes empfangenden Servers solche Nachrichten anschauen könnten und dass Empfänger von diesen eine Bildschirmkopie erstellen, sie kopieren oder anderweitig weiterverteilen könnten. Teile keine sensiblen Informationen über Mastodon.
    • +
    • Internet-Protokoll-Adressen (IP-Adressen) und andere Metadaten: Sobald du dich anmeldest, erfassen wir sowohl die IP-Adresse, von der aus du dich anmeldest, als auch den Namen deine Browseranwendung. Alle angemeldeten Sitzungen (Sessions) sind für deine Überprüfung und Widerruf in den Einstellungen verfügbar. Die letzte verwendete IP-Adresse wird bis zu 12 Monate lang gespeichert. Wir könnten auch Serverprotokoll behalten, welche die IP-Adresse von jeder Anfrage an unseren Server enthalten.

    Für was verwenden wir deine Informationen?

    @@ -1678,7 +1705,7 @@ de: enabled: Zwei-Faktor-Authentisierung ist aktiviert enabled_success: Zwei-Faktor-Authentisierung erfolgreich aktiviert generate_recovery_codes: Wiederherstellungscodes generieren - lost_recovery_codes: Wiederherstellungscodes erlauben dir, wieder den Zugang zu deinem Konto zu erlangen, falls du dein Telefon verlieren solltest. Wenn du deine Wiederherstellungscodes verloren hast, kannst du sie hier neu generieren. Deine alten Wiederherstellungscodes werden damit ungültig gemacht. + lost_recovery_codes: Wiederherstellungscodes erlauben es dir, wieder Zugang zu deinem Konto zu erlangen, falls du dein Telefon verlieren solltest. Wenn du deine Wiederherstellungscodes verloren hast, kannst du sie hier neu generieren. Deine alten Wiederherstellungscodes werden damit ungültig gemacht. methods: Zwei-Faktor-Methoden otp: Authentifizierungs-App recovery_codes: Wiederherstellungs-Codes sichern @@ -1717,8 +1744,8 @@ de: disable: Du kannst dein Konto nicht mehr verwenden, aber dein Profil und andere Daten bleiben unversehrt. Du kannst ein Backup deiner Daten anfordern, die Kontoeinstellungen ändern oder dein Konto löschen. mark_statuses_as_sensitive: Einige deiner Beiträge wurden von den Moderator_innen von %{instance} als NSFW markiert. Das bedeutet, dass die Nutzer die Medien in den Beiträgen antippen müssen, bevor eine Vorschau angezeigt wird. Du kannst Medien in Zukunft als NSFW markieren, wenn du Beiträge verfasst. sensitive: Von nun an werden alle deine hochgeladenen Mediendateien als sensibel markiert und hinter einer Warnung versteckt. - silence: Solange dein Konto limitiert ist, können nur die Leute, die dir bereits folgen, deine Beiträge auf dem Server sehen und es könnte sein, dass du von verschiedenen öffentlichen Listungen ausgeschlossen wirst. Andererseits können andere dir manuell folgen. - suspend: Du kannst dein Konto nicht mehr verwenden und dein Profil und andere Daten sind nicht mehr verfügbar. Du kannst dich immer noch anmelden, um ein Backup deiner Daten anzufordern, bis die Daten innerhalb von 30 Tagen vollständig gelöscht wurden. Allerdings werden wir einige Daten speichern, um zu verhindern, dass du die Sperrung umgehst. + silence: Solange dein Konto limitiert ist, können nur die Leute, die dir bereits folgen, deine Beiträge auf dem Server sehen, und es könnte sein, dass du von verschiedenen öffentlichen Listungen ausgeschlossen wirst. Andererseits können andere dir manuell folgen. + suspend: Du kannst dein Konto nicht mehr verwenden, und dein Profil und andere Daten sind nicht mehr verfügbar. Du kannst dich immer noch anmelden, um ein Backup deiner Daten anzufordern, bis die Daten innerhalb von 30 Tagen vollständig gelöscht wurden. Allerdings werden wir einige Daten speichern, um zu verhindern, dass du die Sperrung umgehst. reason: 'Grund:' statuses: 'Zitierte Beiträge:' subject: @@ -1742,16 +1769,16 @@ de: edit_profile_step: Du kannst dein Profil anpassen, indem du einen Avatar oder ein Titelbild hochlädst oder deinen Anzeigenamen änderst und mehr. Wenn du deine Folgenden vorher überprüfen möchtest, bevor sie dir folgen können, dann kannst du dein Profil sperren. explanation: Hier sind ein paar Tipps, um loszulegen final_action: Fang an zu posten - final_step: 'Fang an zu posten! Selbst ohne Follower werden deine öffentlichen Beiträge von anderen gesehen, zum Beispiel auf der lokalen Zeitleiste oder in Hashtags. Vielleicht möchtest du dich vorstellen mit dem #introductions-Hashtag.' + final_step: 'Fang an zu posten! Selbst ohne Follower werden deine öffentlichen Beiträge von anderen gesehen, zum Beispiel auf der lokalen Zeitleiste oder in Hashtags. Vielleicht möchtest du dich mit dem #introductions-Hashtag vorstellen.' full_handle: Dein vollständiger Benutzername - full_handle_hint: Dies ist was du deinen Freunden sagen kannst, damit sie dich anschreiben oder von einem anderen Server folgen können. + full_handle_hint: Dies ist, was du deinen Freunden sagen kannst, damit sie dich anschreiben oder dir von einem anderen Server folgen können. review_preferences_action: Einstellungen ändern review_preferences_step: Stelle sicher, dass du deine Einstellungen einstellst, wie zum Beispiel welche E-Mails du gerne erhalten möchtest oder was für Privatsphäreneinstellungen voreingestellt werden sollten. Wenn dir beim Ansehen von GIFs nicht schwindelig wird, dann kannst du auch das automatische Abspielen dieser aktivieren. subject: Willkommen bei Mastodon tip_federated_timeline: Die föderierte Zeitleiste ist die sehr große Ansicht vom Mastodon-Netzwerk. Sie enthält aber auch nur Leute, denen du und deine Nachbarn folgen, sie ist also nicht komplett. tip_following: Du folgst standardmäßig deinen Server-Admin(s). Um mehr interessante Leute zu finden, kannst du die lokale oder öffentliche Zeitleiste durchsuchen. tip_local_timeline: Die lokale Zeitleiste ist eine Ansicht aller Leute auf %{instance}. Diese sind deine Nachbarn! - tip_mobile_webapp: Wenn dein mobiler Browser dir anbietet Mastodon zu deinem Startbildschirm hinzuzufügen, dann kannst du Benachrichtigungen erhalten. Es verhält sich wie eine native App in vielen Wegen! + tip_mobile_webapp: Wenn dein mobiler Browser dir anbietet, Mastodon zu deinem Startbildschirm hinzuzufügen, dann kannst du Benachrichtigungen erhalten. Es verhält sich wie eine native App in vielen Belangen! tips: Tipps title: Willkommen an Bord, %{name}! users: diff --git a/config/locales/devise.de.yml b/config/locales/devise.de.yml index 0512ca12956..4cc829f3b8a 100644 --- a/config/locales/devise.de.yml +++ b/config/locales/devise.de.yml @@ -21,18 +21,18 @@ de: action: E-Mail-Adresse verifizieren action_with_app: Bestätigen und zu %{app} zurückkehren explanation: Du hast einen Account auf %{host} mit dieser E-Mail-Adresse erstellt. Du bist nur noch einen Klick weit von der Aktivierung entfernt. Wenn du das nicht warst, kannst du diese E-Mail ignorieren. - explanation_when_pending: Du hast dich für eine Einladung bei %{host} mit dieser E-Mailadresse beworben. Sobald du deine E-Mailadresse bestätigst werden wir deine Anfrage überprüfen. Du kannst dich in dieser Zeit nicht anmelden. Wenn deine Anfrage abgelehnt wird, werden deine Daten entfernt, also wird keine weitere Handlung benötigt. Wenn du das nicht warst kannst du diese E-Mail ignorieren. + explanation_when_pending: Du hast dich für eine Einladung bei %{host} mit dieser E-Mailadresse beworben. Sobald du deine E-Mailadresse bestätigst hast, werden wir deine Anfrage überprüfen. Du kannst dich in dieser Zeit nicht anmelden. Wenn deine Anfrage abgelehnt wird, werden deine Daten entfernt, also wird keine weitere Handlung benötigt. Wenn du das nicht warst, kannst du diese E-Mail ignorieren. extra_html: Bitte lies auch die Regeln des Servers und unsere Nutzungsbedingungen. subject: 'Mastodon: Bestätigung deines Kontos bei %{instance}' title: Verifiziere E-Mail-Adresse email_changed: explanation: 'Die E-Mail-Adresse deines Accounts wird geändert zu:' - extra: Wenn du deine E-Mail-Adresse nicht geändert hast, dann kann es vermutlich sein, dass jemand Zugriff zu deinem Account erhalten hat. Bitte ändere sofort dein Passwort oder kontaktiere den Administrator des Servers, wenn du dich ausgesperrt hast. + extra: Wenn du deine E-Mail-Adresse nicht geändert hast, dann wird es vermutlich so sein, dass jemand Zugriff zu deinem Account erhalten hat. Bitte ändere sofort dein Passwort oder kontaktiere den Administrator des Servers, wenn du dich ausgesperrt hast. subject: 'Mastodon: E-Mail-Adresse geändert' title: Neue E-Mail-Adresse password_change: explanation: Das Passwort für deinen Account wurde geändert. - extra: Wenn du dein Passwort nicht geändert hast, dann kann es vermutlich sein, dass jemand Zugriff zu deinem Account erhalten hat. Bitte ändere sofort dein Passwort oder kontaktiere den Administrator des Servers, wenn du dich ausgesperrt hast. + extra: Wenn du dein Passwort nicht geändert hast, dann wird es vermutlich so sein, dass jemand Zugriff auf deinem Account erlangt hat. Bitte ändere sofort dein Passwort oder kontaktiere den Administrator des Servers, wenn du dich ausgesperrt hast. subject: 'Mastodon: Passwort geändert' title: Passwort geändert reconfirmation_instructions: @@ -43,7 +43,7 @@ de: reset_password_instructions: action: Ändere Passwort explanation: Du hast ein neues Passwort für deinen Account angefragt. - extra: Wenn du diese Anfrage nicht gestellt hast, solltest du diese E-Mail ignorieren. Dein Passwort wird sich nicht ändern solange du den obigen Link anklickst und ein neues erstellst. + extra: Wenn du diese Anfrage nicht gestellt hast, solltest du diese E-Mail ignorieren. Dein Passwort wird sich nicht ändern, solange du den obigen Link anklickst und ein neues erstellst. subject: 'Mastodon: Passwort zurücksetzen' title: Passwort zurücksetzen two_factor_disabled: @@ -51,7 +51,7 @@ de: subject: 'Mastodon: Zwei‐Faktor‐Authentifizierung deaktiviert' title: 2FA deaktiviert two_factor_enabled: - explanation: Zwei-Faktor-Authentifizierung wurde für dein Konto aktiviert. Ein Token, der von der gepaarten TOTP-App generiert wird, wird für den Login benötigt. + explanation: Zwei-Faktor-Authentifizierung wurde für dein Konto aktiviert. Ein Token, das von der verbundenen TOTP-App generiert wird, wird für den Login benötigt. subject: 'Mastodon: Zwei‐Faktor‐Authentifizierung aktiviert' title: 2FA aktiviert two_factor_recovery_codes_changed: @@ -78,7 +78,7 @@ de: subject: 'Mastodon: Authentifizierung mit Sicherheitsschlüssel aktiviert' title: Sicherheitsschlüssel aktiviert omniauth_callbacks: - failure: Du konntest nicht mit deinem %{kind}-Konto angemeldet werden, weil »%{reason}«. + failure: Du konntest nicht mit deinem %{kind}-Konto angemeldet werden, weil „%{reason}“. success: Du hast dich erfolgreich mit deinem %{kind}-Konto angemeldet. passwords: no_token: Du kannst diese Seite nur über den Link aus der E-Mail zum Passwort-Zurücksetzen aufrufen. Wenn du einen solchen Link aufgerufen hast, stelle bitte sicher, dass du die vollständige Adresse aufrufst. @@ -91,8 +91,8 @@ de: signed_up: Willkommen! Du hast dich erfolgreich registriert. signed_up_but_inactive: Du hast dich erfolgreich registriert. Wir konnten dich noch nicht anmelden, da dein Konto inaktiv ist. signed_up_but_locked: Du hast dich erfolgreich registriert. Wir konnten dich noch nicht anmelden, da dein Konto gesperrt ist. - signed_up_but_pending: Eine Nachricht mit einem Bestätigungslink wurde an dich per E-Mail geschickt. Nachdem du diesen Link angeklickt hast werden wir deine Anfrage überprüfen. Du wirst benachrichtigt falls die Anfrage angenommen wurde. - signed_up_but_unconfirmed: Du hast dich erfolgreich registriert. Wir konnten dich noch nicht anmelden, da dein Konto noch nicht bestätigt ist. Du erhältst in Kürze eine E-Mail. Darin ist erklärt, wie du dein Konto freischalten kannst. + signed_up_but_pending: Eine Nachricht mit einem Bestätigungslink wurde an dich per E-Mail geschickt. Nachdem du diesen Link angeklickt hast, werden wir deine Anfrage überprüfen. Du wirst benachrichtigt werden, falls die Anfrage angenommen wurde. + signed_up_but_unconfirmed: Du hast dich erfolgreich registriert. Wir konnten dich noch nicht anmelden, da dein Konto noch nicht bestätigt ist. Du erhältst in Kürze eine E-Mail. Darin wird erklärt, wie du dein Konto freischalten kannst. update_needs_confirmation: Deine Daten wurden aktualisiert, aber du musst deine neue E-Mail-Adresse bestätigen. Du erhältst in wenigen Minuten eine E-Mail. Darin ist erklärt, wie du die Änderung deiner E-Mail-Adresse abschließen kannst. updated: Deine Daten wurden aktualisiert. sessions: @@ -112,4 +112,4 @@ de: not_locked: ist nicht gesperrt not_saved: one: '1 Fehler hat verhindert, dass %{resource} gespeichert wurde:' - other: "%{count} Fehler verhinderten, dass %{resource} gespeichert wurde:" + other: "%{count} Fehler haben verhindert, dass %{resource} gespeichert wurde:" diff --git a/config/locales/devise.hu.yml b/config/locales/devise.hu.yml index 24aa076ee82..82520cef752 100644 --- a/config/locales/devise.hu.yml +++ b/config/locales/devise.hu.yml @@ -12,7 +12,7 @@ hu: last_attempt: Már csak egy próbálkozásod maradt, mielőtt a fiókodat zároljuk. locked: A fiókodat zároltuk. not_found_in_database: Helytelen %{authentication_keys} vagy jelszó. - pending: A fiókod felülvizsgálat alatt áll, még mielőtt használhatnád. + pending: A fiókod még engedélyezésre vár. timeout: A munkameneted lejárt. Kérjük, a folytatáshoz jelentkezz be újra. unauthenticated: A folytatás előtt be kell jelentkezned vagy regisztrálnod kell. unconfirmed: A folytatás előtt meg kell erősítened az e-mail címed. diff --git a/config/locales/doorkeeper.de.yml b/config/locales/doorkeeper.de.yml index 3f7e1b2d758..e4668a50fd1 100644 --- a/config/locales/doorkeeper.de.yml +++ b/config/locales/doorkeeper.de.yml @@ -72,7 +72,7 @@ de: revoke: Bist du sicher? index: authorized_at: Autorisiert am %{date} - description_html: Dies sind Anwendungen, die über die Programmierschnittstelle auf dein Konto zugreifen können. Wenn es Anwendungen gibt, die du hier nicht erkennst oder eine Anwendung sich falsch verhält, kannst du den Zugriff widerrufen. + description_html: Dies sind Anwendungen, die über die Programmierschnittstelle auf dein Konto zugreifen können. Wenn es Anwendungen gibt, die du hier nicht erkennst, oder wenn eine Anwendung sich falsch bzw. verdächtig verhält, kannst du den Zugriff widerrufen. last_used_at: Zuletzt verwendet am %{date} never_used: Nie verwendet scopes: Berechtigungen @@ -83,13 +83,13 @@ de: access_denied: Die Anfrage wurde durch Benutzer_in oder Autorisierungs-Server verweigert. credential_flow_not_configured: Das Konto konnte nicht gefunden werden, da Doorkeeper.configure.resource_owner_from_credentials nicht konfiguriert ist. invalid_client: 'Client-Authentifizierung ist fehlgeschlagen: Client unbekannt, keine Authentisierung mitgeliefert oder Authentisierungsmethode wird nicht unterstützt.' - invalid_grant: Die beigefügte Autorisierung ist ungültig, abgelaufen, wurde widerrufen, einem anderen Client ausgestellt oder der Weiterleitungs-URI stimmt nicht mit der Autorisierungs-Anfrage überein. + invalid_grant: Die beigefügte Autorisierung ist ungültig, abgelaufen, wurde widerrufen oder einem anderen Client ausgestellt, oder der Weiterleitungs-URI stimmt nicht mit der Autorisierungs-Anfrage überein. invalid_redirect_uri: Der beigefügte Weiterleitungs-URI ist ungültig. invalid_request: missing_param: 'Erforderlicher Parameter fehlt: %{value}.' request_not_authorized: Anfrage muss autorisiert werden. Benötigter Parameter für die Autorisierung der Anfrage fehlt oder ungültig. unknown: Der Anfrage fehlt ein benötigter Parameter, enthält einen nicht unterstützten Parameterwert oder ist anderweitig fehlerhaft. - invalid_resource_owner: Die angegebenen Zugangsdaten für das Konto sind ungültig oder das Konto kann nicht gefunden werden + invalid_resource_owner: Die angegebenen Zugangsdaten für das Konto sind ungültig, oder das Konto kann nicht gefunden werden invalid_scope: Die angeforderte Befugnis ist ungültig, unbekannt oder fehlerhaft. invalid_token: expired: Der Zugriffs-Token ist abgelaufen diff --git a/config/locales/doorkeeper.ru.yml b/config/locales/doorkeeper.ru.yml index 7f4cca82b1c..86883bf149b 100644 --- a/config/locales/doorkeeper.ru.yml +++ b/config/locales/doorkeeper.ru.yml @@ -133,7 +133,7 @@ ru: follows: Подписки lists: Списки media: Медиафайлы - mutes: Без звука + mutes: Игнорирует notifications: Уведомления push: Push-уведомления reports: Обращения @@ -164,7 +164,7 @@ ru: read:filters: видеть ваши фильтры read:follows: видеть ваши подписки read:lists: видеть ваши списки - read:mutes: видеть список игнорируемых + read:mutes: смотреть список игнорируемых read:notifications: получать уведомления read:reports: видеть ваши жалобы read:search: использовать поиск @@ -173,12 +173,13 @@ ru: write:accounts: редактировать ваш профиль write:blocks: блокировать учётные записи и домены write:bookmarks: добавлять посты в закладки + write:conversations: игнорировать и удалить разговоры write:favourites: отмечать посты как избранные write:filters: создавать фильтры write:follows: подписываться на людей write:lists: создавать списки write:media: загружать медиафайлы - write:mutes: добавлять в игнорируемое людей и обсуждения + write:mutes: игнорировать людей и обсуждения write:notifications: очищать список уведомлений write:reports: отправлять жалобы на других write:statuses: публиковать посты diff --git a/config/locales/el.yml b/config/locales/el.yml index 8bbb0282206..8c7c29ac23a 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -265,7 +265,6 @@ el: destroy_instance_html: Ο/Η %{name} εκκαθάρισε τον τομέα %{target} reject_user_html: "%{name} απορρίφθηκε εγγραφή από %{target}" unblock_email_account_html: "%{name} ξεμπλόκαρε τη διεύθυνση ηλεκτρονικού ταχυδρομείου του %{target}" - deleted_status: "(διαγραμμένη δημοσίευση)" empty: Δεν βρέθηκαν αρχεία καταγραφής. filter_by_action: Φιλτράρισμα ανά ενέργεια filter_by_user: Φιλτράρισμα ανά χρήστη @@ -581,9 +580,6 @@ el: desc_html: Εμφάνισε τη δημόσια ροή στην αρχική σελίδα title: Προεπισκόπιση ροής title: Ρυθμίσεις ιστότοπου - trendable_by_default: - desc_html: Επηρεάζει όσες ετικέτες δεν είχαν απαγορευτεί νωρίτερα - title: Επέτρεψε στις ετικέτες να εμφανίζονται στις τάσεις χωρίς να χρειάζεται πρώτα έγκριση trends: desc_html: Δημόσια εμφάνιση ετικετών που έχουν ήδη εγκριθεί και είναι δημοφιλείς title: Δημοφιλείς ετικέτες @@ -946,17 +942,6 @@ el: subject: "%{name} υπέβαλε μια αναφορά" sign_up: subject: "%{name} έχει εγγραφεί" - digest: - action: Δες όλες τις ειδοποιήσεις - body: Μια σύνοψη των μηνυμάτων που έχασες από την τελευταία επίσκεψή σου στις %{since} - mention: 'Ο/Η %{name} σε ανέφερε στις:' - new_followers_summary: - one: Επίσης, απέκτησες έναν νέο ακόλουθο ενώ ήσουν μακριά! - other: Επίσης, απέκτησες %{count} νέους ακόλουθους ενώ ήσουν μακριά! Εκπληκτικό! - subject: - one: "1 νέα ειδοποίηση από την τελευταία επίσκεψή σου 🐘" - other: "%{count} νέες ειδοποιήσεις από την τελευταία επίσκεψή σου 🐘" - title: Ενώ έλειπες... favourite: body: 'Η κατάστασή σου αγαπήθηκε από τον/την %{name}:' subject: Ο/Η %{name} αγάπησε την κατάστασή σου diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 3eabb665a7c..cca9b053112 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -261,7 +261,6 @@ eo: create_ip_block_html: "%{name} kreis regulon por IP %{target}" demote_user_html: "%{name} degradis uzanton %{target}" destroy_announcement_html: "%{name} forigis anoncon %{target}" - destroy_custom_emoji_html: "%{name} neniigis la emoĝion %{target}" destroy_domain_allow_html: "%{name} forigis domajnon %{target} el la blanka listo" destroy_domain_block_html: "%{name} malblokis domajnon %{target}" destroy_email_domain_block_html: "%{name} malblokis retpoŝtan domajnon %{target}" @@ -280,7 +279,6 @@ eo: suspend_account_html: "%{name} suspendis la konton de %{target}" unsuspend_account_html: "%{name} reaktivigis la konton de %{target}" update_announcement_html: "%{name} ĝisdatigis anoncon %{target}" - deleted_status: "(forigita mesaĝo)" empty: Neniu protokolo trovita. filter_by_action: Filtri per ago filter_by_user: Filtri per uzanto @@ -969,17 +967,6 @@ eo: moderation: title: Moderigado notification_mailer: - digest: - action: Vidi ĉiujn sciigojn - body: Jen eta resumo de la mesaĝoj, kiujn vi mistrafis ekde via lasta vizito en %{since} - mention: "%{name} menciis vin en:" - new_followers_summary: - one: Ankaŭ, vi ekhavis novan sekvanton en via foresto! Jej! - other: Ankaŭ, vi ekhavis %{count} novajn sekvantojn en via foresto! Mirinde! - subject: - one: "1 nova sciigo ekde via lasta vizito 🐘" - other: "%{count} novaj sciigoj ekde via lasta vizito 🐘" - title: En via foresto… favourite: body: "%{name} stelumis vian mesaĝon:" subject: "%{name} stelumis vian mesaĝon" diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 72c2ad3470a..21c2dde6cab 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -235,17 +235,21 @@ es-AR: approve_user: Aprobar usuario assigned_to_self_report: Asignar denuncia change_email_user: Cambiar correo electrónico del usuario + change_role_user: Cambiar rol del usuario confirm_user: Confirmar usuario create_account_warning: Crear advertencia create_announcement: Crear anuncio + create_canonical_email_block: Crear bloqueo de correo electrónico create_custom_emoji: Crear emoji personalizado create_domain_allow: Crear permiso de dominio create_domain_block: Crear bloqueo de dominio create_email_domain_block: Crear bloqueo de dominio de correo electrónico create_ip_block: Crear regla de dirección IP create_unavailable_domain: Crear dominio no disponible + create_user_role: Crear rol demote_user: Descender usuario destroy_announcement: Eliminar anuncio + destroy_canonical_email_block: Eliminar bloqueo de correo electrónico destroy_custom_emoji: Eliminar emoji personalizado destroy_domain_allow: Eliminar permiso de dominio destroy_domain_block: Eliminar bloqueo de dominio @@ -254,6 +258,7 @@ es-AR: destroy_ip_block: Eliminar regla de dirección IP destroy_status: Eliminar mensaje destroy_unavailable_domain: Eliminar dominio no disponible + destroy_user_role: Destruir rol disable_2fa_user: Deshabilitar 2FA disable_custom_emoji: Deshabilitar emoji personalizado disable_sign_in_token_auth_user: Deshabilitar autenticación de token por correo electrónico para el usuario @@ -280,24 +285,30 @@ es-AR: update_announcement: Actualizar anuncio update_custom_emoji: Actualizar emoji personalizado update_domain_block: Actualizar bloque de dominio + update_ip_block: Actualizar regla de dirección IP update_status: Actualizar mensaje + update_user_role: Actualizar rol actions: approve_appeal_html: "%{name} aprobó la solicitud de moderación de %{target}" approve_user_html: "%{name} aprobó el registro de %{target}" assigned_to_self_report_html: "%{name} se asignó la denuncia %{target} a sí" change_email_user_html: "%{name} cambió la dirección de correo electrónico del usuario %{target}" + change_role_user_html: "%{name} cambió el rol de %{target}" confirm_user_html: "%{name} confirmó la dirección de correo del usuario %{target}" create_account_warning_html: "%{name} envió una advertencia a %{target}" create_announcement_html: "%{name} creó el nuevo anuncio %{target}" + create_canonical_email_block_html: "%{name} bloqueó el correo electrónico con el hash %{target}" create_custom_emoji_html: "%{name} subió nuevo emoji %{target}" create_domain_allow_html: "%{name} permitió la federación con el dominio %{target}" create_domain_block_html: "%{name} bloqueó el dominio %{target}" create_email_domain_block_html: "%{name} bloqueó el dominio de correo electrónico %{target}" create_ip_block_html: "%{name} creó la regla para la dirección IP %{target}" create_unavailable_domain_html: "%{name} detuvo la entrega al dominio %{target}" + create_user_role_html: "%{name} creó el rol %{target}" demote_user_html: "%{name} bajó de nivel al usuario %{target}" destroy_announcement_html: "%{name} eliminó el anuncio %{target}" - destroy_custom_emoji_html: "%{name} destruyó el emoji %{target}" + destroy_canonical_email_block_html: "%{name} desbloqueó el correo electrónico con el hash %{target}" + destroy_custom_emoji_html: "%{name} eliminó el emoji %{target}" destroy_domain_allow_html: "%{name} no permitió la federación con el dominio %{target}" destroy_domain_block_html: "%{name} desbloqueó el dominio %{target}" destroy_email_domain_block_html: "%{name} desbloqueó el dominio de correo electrónico %{target}" @@ -305,6 +316,7 @@ es-AR: destroy_ip_block_html: "%{name} eliminó la regla para la dirección IP %{target}" destroy_status_html: "%{name} eliminó el mensaje de %{target}" destroy_unavailable_domain_html: "%{name} reanudó la entrega al dominio %{target}" + destroy_user_role_html: "%{name} eliminó el rol %{target}" disable_2fa_user_html: "%{name} deshabilitó el requerimiento de dos factores para el usuario %{target}" disable_custom_emoji_html: "%{name} deshabilitó el emoji %{target}" disable_sign_in_token_auth_user_html: "%{name} deshabilitó la autenticación de token por correo electrónico para %{target}" @@ -331,8 +343,9 @@ es-AR: update_announcement_html: "%{name} actualizó el anuncio %{target}" update_custom_emoji_html: "%{name} actualizó el emoji %{target}" update_domain_block_html: "%{name} actualizó el bloqueo de dominio para %{target}" + update_ip_block_html: "%{name} cambió la regla para la dirección IP %{target}" update_status_html: "%{name} actualizó el mensaje de %{target}" - deleted_status: "[mensaje eliminado]" + update_user_role_html: "%{name} cambió el rol %{target}" empty: No se encontraron registros. filter_by_action: Filtrar por acción filter_by_user: Filtrar por usuario @@ -795,8 +808,8 @@ es-AR: title: Permitir acceso no autorizado a la línea temporal pública title: Configuración del sitio trendable_by_default: - desc_html: Afecta a etiquetas que no fueron rechazadas previamente - title: Permitir que las etiquetas sean tendencia sin revisión previa + desc_html: El contenido de tendencias específicas todavía puede ser explícitamente desactivado + title: Permitir tendencias sin revisión previa trends: desc_html: Mostrar públicamente etiquetas previamente revisadas que son tendencia actualmente title: Tendencias @@ -1182,7 +1195,7 @@ es-AR: add_keyword: Agregar palabra clave keywords: Palabras clave statuses: Mensajes individuales - statuses_hint_html: Este filtro se aplica a los mensajes individuales seleccionados, independientemente de si coinciden con las palabras clave de abajo. Podés revisar estos mensajes y eliminarlos del filtro haciendo clic acá. + statuses_hint_html: Este filtro se aplica a la selección de mensajes individuales, independientemente de si coinciden con las palabras clave a continuación. Revisar o quitar mensajes del filtro. title: Editar filtro errors: deprecated_api_multiple_keywords: Estos parámetros no se pueden cambiar de esta aplicación porque se aplican a más de una palabra clave de filtro. Usá una aplicación más reciente o la interface web. @@ -1211,7 +1224,7 @@ es-AR: batch: remove: Quitar del filtro index: - hint: Este filtro se aplica a la selección de mensajes individuales independientemente de otros criterios. Podés agregar más mensajes a este filtro desde la interface web. + hint: Este filtro se aplica a la selección de mensajes individuales, independientemente de otros criterios. Podés agregar más mensajes a este filtro desde la interface web. title: Mensajes filtrados footer: developers: Desarrolladores @@ -1220,12 +1233,22 @@ es-AR: trending_now: Tendencia ahora generic: all: Todas + all_items_on_page_selected_html: + one: "%{count} elemento en esta página está seleccionado." + other: Todos los %{count} elementos en esta página están seleccionados. + all_matching_items_selected_html: + one: "%{count} elemento que coincide con tu búsqueda está seleccionado." + other: Todos los %{count} elementos que coinciden con tu búsqueda están seleccionados. changes_saved_msg: "¡Cambios guardados exitosamente!" copy: Copiar delete: Eliminar + deselect: Deseleccionar todo none: "[Ninguna]" order_by: Ordenar por save_changes: Guardar cambios + select_all_matching_items: + one: Seleccionar %{count} elemento que coincide con tu búsqueda. + other: Seleccionar todos los %{count} elementos que coinciden con tu búsqueda. today: hoy validation_errors: one: "¡Falta algo! Por favor, revisá el error abajo" @@ -1334,17 +1357,6 @@ es-AR: subject: "%{name} envió una denuncia" sign_up: subject: Se registró %{name} - digest: - action: Ver todas las notificaciones - body: Acá tenés un resumen de los mensajes que te perdiste desde tu última visita, el %{since} - mention: "%{name} te mencionó en:" - new_followers_summary: - one: Además, ¡ganaste un nuevo seguidor mientras estabas ausente! ¡Esa! - other: Además, ¡ganaste %{count} nuevos seguidores mientras estabas ausente! ¡Esssa! - subject: - one: "1 nueva notificación desde tu última visita 🐘" - other: "%{count} nuevas notificaciones desde tu última visita 🐘" - title: En tu ausencia... favourite: body: 'Tu mensaje fue marcado como favorito por %{name}:' subject: "%{name} marcó tu mensaje como favorito" diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 8faa88f5692..4f387128cda 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -235,6 +235,7 @@ es-MX: approve_user: Aprobar Usuario assigned_to_self_report: Asignar Reporte change_email_user: Cambiar Correo Electrónico del Usuario + change_role_user: Cambiar Rol de Usuario confirm_user: Confirmar Usuario create_account_warning: Crear Advertencia create_announcement: Crear Anuncio @@ -244,6 +245,7 @@ es-MX: create_email_domain_block: Crear Bloqueo de Dominio de Correo Electrónico create_ip_block: Crear regla IP create_unavailable_domain: Crear Dominio No Disponible + create_user_role: Crear Rol demote_user: Degradar Usuario destroy_announcement: Eliminar Anuncio destroy_custom_emoji: Eliminar Emoji Personalizado @@ -254,6 +256,7 @@ es-MX: destroy_ip_block: Eliminar regla IP destroy_status: Eliminar Estado destroy_unavailable_domain: Eliminar Dominio No Disponible + destroy_user_role: Destruir Rol disable_2fa_user: Deshabilitar 2FA disable_custom_emoji: Deshabilitar Emoji Personalizado disable_sign_in_token_auth_user: Deshabilitar la Autenticación por Token de Correo Electrónico para el Usuario @@ -281,11 +284,13 @@ es-MX: update_custom_emoji: Actualizar Emoji Personalizado update_domain_block: Actualizar el Bloqueo de Dominio update_status: Actualizar Estado + update_user_role: Actualizar Rol actions: approve_appeal_html: "%{name} aprobó la solicitud de moderación de %{target}" approve_user_html: "%{name} aprobó el registro de %{target}" assigned_to_self_report_html: "%{name} asignó el informe %{target} a sí mismo" change_email_user_html: "%{name} cambió la dirección de correo electrónico del usuario %{target}" + change_role_user_html: "%{name} cambió el rol de %{target}" confirm_user_html: "%{name} confirmó la dirección de correo electrónico del usuario %{target}" create_account_warning_html: "%{name} envió una advertencia a %{target}" create_announcement_html: "%{name} ha creado un nuevo anuncio %{target}" @@ -295,9 +300,10 @@ es-MX: create_email_domain_block_html: "%{name} bloqueó el dominio de correo electrónico %{target}" create_ip_block_html: "%{name} creó una regla para la IP %{target}" create_unavailable_domain_html: "%{name} detuvo las entregas al dominio %{target}" + create_user_role_html: "%{name} creó el rol %{target}" demote_user_html: "%{name} degradó al usuario %{target}" destroy_announcement_html: "%{name} eliminó el anuncio %{target}" - destroy_custom_emoji_html: "%{name} destruyó emoji %{target}" + destroy_custom_emoji_html: "%{name} eliminó el emoji %{target}" destroy_domain_allow_html: "%{name} bloqueó la federación con el dominio %{target}" destroy_domain_block_html: "%{name} desbloqueó el dominio %{target}" destroy_email_domain_block_html: "%{name} desbloqueó el dominio de correo electrónico %{target}" @@ -305,6 +311,7 @@ es-MX: destroy_ip_block_html: "%{name} eliminó una regla para la IP %{target}" destroy_status_html: "%{name} eliminó el estado por %{target}" destroy_unavailable_domain_html: "%{name} reanudó las entregas al dominio %{target}" + destroy_user_role_html: "%{name} eliminó el rol %{target}" disable_2fa_user_html: "%{name} desactivó el requisito de dos factores para el usuario %{target}" disable_custom_emoji_html: "%{name} desactivó el emoji %{target}" disable_sign_in_token_auth_user_html: "%{name} ha deshabilitado la autenticación por token de correo electrónico para %{target}" @@ -332,7 +339,7 @@ es-MX: update_custom_emoji_html: "%{name} actualizó el emoji %{target}" update_domain_block_html: "%{name} actualizó el bloqueo de dominio para %{target}" update_status_html: "%{name} actualizó el estado de %{target}" - deleted_status: "(estado borrado)" + update_user_role_html: "%{name} cambió el rol %{target}" empty: No se encontraron registros. filter_by_action: Filtrar por acción filter_by_user: Filtrar por usuario @@ -794,9 +801,6 @@ es-MX: desc_html: Mostrar línea de tiempo pública en la portada title: Previsualización title: Ajustes del sitio - trendable_by_default: - desc_html: Afecta a etiquetas que no han sido previamente rechazadas - title: Permitir que las etiquetas sean tendencia sin revisión previa trends: desc_html: Mostrar públicamente hashtags previamente revisados que son tendencia title: Hashtags de tendencia @@ -1181,6 +1185,8 @@ es-MX: edit: add_keyword: Añadir palabra clave keywords: Palabras clave + statuses: Publicaciones individuales + statuses_hint_html: Este filtro se aplica a la selección de publicaciones individuales independientemente de si coinciden con las palabras clave a continuación. Revise o elimine publicaciones del filtro. title: Editar filtro errors: deprecated_api_multiple_keywords: Estos parámetros no se pueden cambiar desde esta aplicación porque se aplican a más de una palabra clave de filtro. Utilice una aplicación más reciente o la interfaz web. @@ -1194,10 +1200,23 @@ es-MX: keywords: one: "%{count} palabra clave" other: "%{count} palabras clave" + statuses: + one: "%{count} publicación" + other: "%{count} publicaciones" + statuses_long: + one: "%{count} publicación individual oculta" + other: "%{count} publicaciones individuales ocultas" title: Filtros new: save: Guardar nuevo filtro title: Añadir un nuevo filtro + statuses: + back_to_filter: Volver a filtrar + batch: + remove: Eliminar del filtro + index: + hint: Este filtro se aplica a la selección de publicaciones individuales independientemente de otros criterios. Puede añadir más publicaciones a este filtro desde la interfaz web. + title: Publicaciones filtradas footer: developers: Desarrolladores more: Mas… @@ -1205,12 +1224,22 @@ es-MX: trending_now: Tendencia ahora generic: all: Todos + all_items_on_page_selected_html: + one: "%{count} elemento en esta página está seleccionado." + other: Todos los %{count} elementos en esta página están seleccionados. + all_matching_items_selected_html: + one: "%{count} elemento que coincide con su búsqueda está seleccionado." + other: Todos los %{count} elementos que coinciden con su búsqueda están seleccionados. changes_saved_msg: "¡Cambios guardados con éxito!" copy: Copiar delete: Eliminar + deselect: Deseleccionar todo none: Nada order_by: Ordenar por save_changes: Guardar cambios + select_all_matching_items: + one: Seleccionar %{count} elemento que coincide con tu búsqueda. + other: Seleccionar todos los %{count} elementos que coinciden con tu búsqueda. today: hoy validation_errors: one: "¡Algo no está bien! Por favor, revisa el error" @@ -1319,17 +1348,6 @@ es-MX: subject: "%{name} envió un informe" sign_up: subject: "%{name} se registró" - digest: - action: Ver todas las notificaciones - body: Un resumen de los mensajes que perdiste en desde tu última visita, el %{since} - mention: "%{name} te ha mencionado en:" - new_followers_summary: - one: "¡Ademas, has adquirido un nuevo seguidor mientras no estabas! ¡Hurra!" - other: "¡Ademas, has adquirido %{count} nuevos seguidores mientras no estabas! ¡Genial!" - subject: - one: "1 nueva notificación desde tu última visita 🐘" - other: "%{count} nuevas notificaciones desde tu última visita 🐘" - title: En tu ausencia… favourite: body: 'Tu estado fue marcado como favorito por %{name}:' subject: "%{name} marcó como favorito tu estado" diff --git a/config/locales/es.yml b/config/locales/es.yml index 8d2ed1a3353..db4785d2c9c 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -235,17 +235,21 @@ es: approve_user: Aprobar Usuario assigned_to_self_report: Asignar Reporte change_email_user: Cambiar Correo Electrónico del Usuario + change_role_user: Cambiar Rol de Usuario confirm_user: Confirmar Usuario create_account_warning: Crear Advertencia create_announcement: Crear Anuncio + create_canonical_email_block: Crear Bloqueo de Correo Electrónico create_custom_emoji: Crear Emoji Personalizado create_domain_allow: Crear Permiso de Dominio create_domain_block: Crear Bloqueo de Dominio create_email_domain_block: Crear Bloqueo de Dominio de Correo Electrónico create_ip_block: Crear regla IP create_unavailable_domain: Crear Dominio No Disponible + create_user_role: Crear Rol demote_user: Degradar Usuario destroy_announcement: Eliminar Anuncio + destroy_canonical_email_block: Eliminar Bloqueo de Correo Electrónico destroy_custom_emoji: Eliminar Emoji Personalizado destroy_domain_allow: Eliminar Permiso de Dominio destroy_domain_block: Eliminar Bloqueo de Dominio @@ -254,6 +258,7 @@ es: destroy_ip_block: Eliminar regla IP destroy_status: Eliminar Estado destroy_unavailable_domain: Eliminar Dominio No Disponible + destroy_user_role: Destruir Rol disable_2fa_user: Deshabilitar 2FA disable_custom_emoji: Deshabilitar Emoji Personalizado disable_sign_in_token_auth_user: Deshabilitar la Autenticación por Token de Correo Electrónico para el Usuario @@ -280,24 +285,30 @@ es: update_announcement: Actualizar Anuncio update_custom_emoji: Actualizar Emoji Personalizado update_domain_block: Actualizar el Bloqueo de Dominio + update_ip_block: Actualizar regla IP update_status: Actualizar Estado + update_user_role: Actualizar Rol actions: approve_appeal_html: "%{name} aprobó la solicitud de moderación de %{target}" approve_user_html: "%{name} aprobó el registro de %{target}" assigned_to_self_report_html: "%{name} asignó el informe %{target} a sí mismo" change_email_user_html: "%{name} cambió la dirección de correo electrónico del usuario %{target}" + change_role_user_html: "%{name} cambió el rol de %{target}" confirm_user_html: "%{name} confirmó la dirección de correo electrónico del usuario %{target}" create_account_warning_html: "%{name} envió una advertencia a %{target}" create_announcement_html: "%{name} ha creado un nuevo anuncio %{target}" + create_canonical_email_block_html: "%{name} bloqueó el correo electrónico con el hash %{target}" create_custom_emoji_html: "%{name} subió un nuevo emoji %{target}" create_domain_allow_html: "%{name} permitió la federación con el dominio %{target}" create_domain_block_html: "%{name} bloqueó el dominio %{target}" create_email_domain_block_html: "%{name} bloqueó el dominio de correo electrónico %{target}" create_ip_block_html: "%{name} creó una regla para la IP %{target}" create_unavailable_domain_html: "%{name} detuvo las entregas al dominio %{target}" + create_user_role_html: "%{name} creó el rol %{target}" demote_user_html: "%{name} degradó al usuario %{target}" destroy_announcement_html: "%{name} eliminó el anuncio %{target}" - destroy_custom_emoji_html: "%{name} destruyó emoji %{target}" + destroy_canonical_email_block_html: "%{name} desbloqueó el correo electrónico con el hash %{target}" + destroy_custom_emoji_html: "%{name} eliminó el emoji %{target}" destroy_domain_allow_html: "%{name} bloqueó la federación con el dominio %{target}" destroy_domain_block_html: "%{name} desbloqueó el dominio %{target}" destroy_email_domain_block_html: "%{name} desbloqueó el dominio de correo electrónico %{target}" @@ -305,6 +316,7 @@ es: destroy_ip_block_html: "%{name} eliminó una regla para la IP %{target}" destroy_status_html: "%{name} eliminó el estado por %{target}" destroy_unavailable_domain_html: "%{name} reanudó las entregas al dominio %{target}" + destroy_user_role_html: "%{name} eliminó el rol %{target}" disable_2fa_user_html: "%{name} desactivó el requisito de dos factores para el usuario %{target}" disable_custom_emoji_html: "%{name} desactivó el emoji %{target}" disable_sign_in_token_auth_user_html: "%{name} ha deshabilitado la autenticación por token de correo electrónico para %{target}" @@ -331,8 +343,9 @@ es: update_announcement_html: "%{name} actualizó el anuncio %{target}" update_custom_emoji_html: "%{name} actualizó el emoji %{target}" update_domain_block_html: "%{name} actualizó el bloqueo de dominio para %{target}" + update_ip_block_html: "%{name} cambió la regla para la IP %{target}" update_status_html: "%{name} actualizó el estado de %{target}" - deleted_status: "(estado borrado)" + update_user_role_html: "%{name} cambió el rol %{target}" empty: No se encontraron registros. filter_by_action: Filtrar por acción filter_by_user: Filtrar por usuario @@ -795,8 +808,8 @@ es: title: Previsualización title: Ajustes del sitio trendable_by_default: - desc_html: Afecta a etiquetas que no han sido previamente rechazadas - title: Permitir que las etiquetas sean tendencia sin revisión previa + desc_html: El contenido específico de tendencias todavía puede ser explícitamente desactivado + title: Permitir tendencias sin revisión previa trends: desc_html: Mostrar públicamente hashtags previamente revisados que son tendencia title: Hashtags de tendencia @@ -1182,7 +1195,7 @@ es: add_keyword: Añadir palabra clave keywords: Palabras clave statuses: Publicaciones individuales - statuses_hint_html: Este filtro se aplica a las publicaciones individuales seleccionadas, independientemente de si coinciden con las palabras clave de abajo. Puedes revisar estos mensajes y eliminarlos del filtro pulsando aquí. + statuses_hint_html: Este filtro se aplica a la selección de publicaciones individuales independientemente de si coinciden con las palabras clave a continuación. Revise o elimine publicaciones del filtro. title: Editar filtro errors: deprecated_api_multiple_keywords: Estos parámetros no se pueden cambiar desde esta aplicación porque se aplican a más de una palabra clave de filtro. Utilice una aplicación más reciente o la interfaz web. @@ -1211,7 +1224,7 @@ es: batch: remove: Eliminar del filtro index: - hint: Este filtro se aplica a la selección de publicaciones individuales independientemente de otros criterios. Puede añadir más mensajes a este filtro desde la interfaz Web. + hint: Este filtro se aplica a la selección de publicaciones individuales independientemente de otros criterios. Puede añadir más publicaciones a este filtro desde la interfaz web. title: Publicaciones filtradas footer: developers: Desarrolladores @@ -1220,12 +1233,22 @@ es: trending_now: Tendencia ahora generic: all: Todos + all_items_on_page_selected_html: + one: "%{count} elemento en esta página está seleccionado." + other: Todos los %{count} elementos en esta página están seleccionados. + all_matching_items_selected_html: + one: "%{count} elemento que coincide con su búsqueda está seleccionado." + other: Todos los %{count} elementos que coinciden con su búsqueda están seleccionados. changes_saved_msg: "¡Cambios guardados con éxito!" copy: Copiar delete: Eliminar + deselect: Deseleccionar todo none: Nada order_by: Ordenar por save_changes: Guardar cambios + select_all_matching_items: + one: Seleccionar %{count} elemento que coincide con tu búsqueda. + other: Seleccionar todos los %{count} elementos que coinciden con tu búsqueda. today: hoy validation_errors: one: "¡Algo no está bien! Por favor, revisa el error" @@ -1334,17 +1357,6 @@ es: subject: "%{name} envió un informe" sign_up: subject: "%{name} se registró" - digest: - action: Ver todas las notificaciones - body: Un resumen de los mensajes que perdiste en desde tu última visita, el %{since} - mention: "%{name} te ha mencionado en:" - new_followers_summary: - one: "¡Ademas, has adquirido un nuevo seguidor mientras no estabas! ¡Hurra!" - other: "¡Ademas, has adquirido %{count} nuevos seguidores mientras no estabas! ¡Genial!" - subject: - one: "1 nueva notificación desde tu última visita 🐘" - other: "%{count} nuevas notificaciones desde tu última visita 🐘" - title: En tu ausencia… favourite: body: 'Tu estado fue marcado como favorito por %{name}:' subject: "%{name} marcó como favorito tu estado" diff --git a/config/locales/et.yml b/config/locales/et.yml index 6aab7a219e4..5b354afd937 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -215,7 +215,6 @@ et: update_announcement: Uuenda teadaannet update_custom_emoji: Uuendas kohandatud emotikoni update_status: Uuendas staatust - deleted_status: "(kustutatud staatus)" empty: Logisi ei leitud. filter_by_action: Filtreeri tegevuse järgi filter_by_user: Filtreeri kasutaja järgi @@ -463,9 +462,6 @@ et: desc_html: Kuva avalikku ajajoont esilehel title: Ajajoone eelvaade title: Lehe seaded - trendable_by_default: - desc_html: Puudutab silte, mis pole varem keelatud - title: Luba siltide trendimine ilma eelneva ülevaatuseta trends: desc_html: Kuva avalikult eelnevalt üle vaadatud sildid, mis on praegu trendikad title: Populaarsed sildid praegu @@ -770,14 +766,6 @@ et: moderation: title: Moderatsioon notification_mailer: - digest: - action: Vaata kõiki teateid - body: Siin on kiire ülevaade sellest, mis sõnumeid Te ei näinud pärast Teie viimast külastust %{since} - mention: "%{name} mainis Teid postituses:" - new_followers_summary: - one: Ja veel, Te saite ühe uue jälgija kui Te olite eemal! Jee! - other: Ja veel, Te saite %{count} uut jälgijat kui Te olite eemal! Hämmastav! - title: Teie puudumisel... favourite: body: "%{name} lisas Teie staatuse lemmikutesse:" subject: "%{name} märkis su staatuse lemmikuks" diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 3202b9b9c02..f0910aaba3e 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -285,7 +285,6 @@ eu: create_unavailable_domain_html: "%{name}(e)k %{target} domeinurako banaketa gelditu du" demote_user_html: "%{name} erabiltzaileak %{target} erabiltzailea mailaz jaitsi du" destroy_announcement_html: "%{name} erabiltzaileak %{target} iragarpena ezabatu du" - destroy_custom_emoji_html: "%{name} erabiltzaileak %{target} emojia suntsitu du" destroy_domain_allow_html: "%{name} erabiltzaileak %{target} domeinuarekin federatzea debekatu du" destroy_domain_block_html: "%{name} erabiltzaileak %{target} domeinua desblokeatu du" destroy_email_domain_block_html: "%{name} erabiltzaileak %{target} e-posta helbideen domeinua desblokeatu du" @@ -320,7 +319,6 @@ eu: update_custom_emoji_html: "%{name} erabiltzaileak %{target} emoji-a eguneratu du" update_domain_block_html: "%{name} erabiltzaileak %{target} domeinu-blokeoa eguneratu du" update_status_html: "%{name} erabiltzaileak %{target} erabiltzailearen bidalketa eguneratu du" - deleted_status: "(ezabatutako bidalketa)" empty: Ez da egunkaririk aurkitu. filter_by_action: Iragazi ekintzen arabera filter_by_user: Iragazi erabiltzaileen arabera @@ -697,9 +695,6 @@ eu: desc_html: Bistaratu denbora-lerro publikoa hasiera orrian title: Denbora-lerroaren aurrebista title: Gunearen ezarpenak - trendable_by_default: - desc_html: Aurretik debekatu ez diren traola guztiei eragiten dio - title: Baimendu traolak joera bihurtzea aurretik errebisatu gabe trends: desc_html: Erakutsi publikoki orain joeran dauden aurretik errebisatutako traolak title: Traolak joeran @@ -1127,14 +1122,6 @@ eu: carry_mutes_over_text: Erabiltzaile hau %{acct} kontutik dator, zeina isilarazita daukazun. copy_account_note_text: 'Erabiltzaile hau %{acct} kontutik dator, hemen berari buruzko zure aurreko oharrak:' notification_mailer: - digest: - action: Ikusi jakinarazpen guztiak - body: Hona zure %{since}(e)ko azken bisitatik galdu dituzun mezuen laburpen bat - mention: "%{name}(e)k aipatu zaitu:" - new_followers_summary: - one: Kanpoan zeundela jarraitzaile berri bat gehitu zaizu! - other: Kanpoan zeundela %{count} jarraitzaile berri bat gehitu zaizkizu! - title: Kanpoan zeundela... favourite: body: "%{name}(e)k zure bidalketa gogoko du:" subject: "%{name}(e)k zure bidalketa gogoko du" diff --git a/config/locales/fa.yml b/config/locales/fa.yml index d6acaf5341c..fa6448770e8 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -284,7 +284,6 @@ fa: create_unavailable_domain_html: "%{name} تحویل محتوا به دامنه %{target} را متوقف کرد" demote_user_html: "%{name} کاربر %{target} را تنزل داد" destroy_announcement_html: "%{name} اعلامیهٔ %{target} را حذف کرد" - destroy_custom_emoji_html: "%{name} اموجی %{target} را نابود کرد" destroy_domain_allow_html: "%{name} دامنهٔ %{target} را از فهرست مجاز برداشت" destroy_domain_block_html: "%{name} انسداد دامنهٔ %{target} را رفع کرد" destroy_email_domain_block_html: "%{name} انسداد دامنهٔ رایانامهٔ %{target} را برداشت" @@ -319,7 +318,6 @@ fa: update_custom_emoji_html: "%{name} شکلک %{target} را به‌روز کرد" update_domain_block_html: "%{name} مسدودسازی دامنه را برای %{target} به‌روزرسانی کرد" update_status_html: "%{name} نوشتهٔ %{target} را به‌روز کرد" - deleted_status: "(نوشتهٔ پاک‌شده)" empty: هیچ گزارشی پیدا نشد. filter_by_action: پالایش بر اساس کنش filter_by_user: پالایش بر اساس کاربر @@ -677,9 +675,6 @@ fa: desc_html: نوشته‌های عمومی این سرور را در صفحهٔ آغازین نشان دهید title: پیش‌نمایش نوشته‌ها title: تنظیمات سایت - trendable_by_default: - desc_html: روی برچسب‌هایی که پیش از این ممنوع نشده‌اند تأثیر می‌گذارد - title: بگذارید که برچسب‌های پرطرفدار بدون بازبینی قبلی نمایش داده شوند trends: desc_html: برچسب‌های عمومی که پیش‌تر بازبینی شده‌اند و هم‌اینک پرطرفدارند title: پرطرفدارها @@ -1093,14 +1088,6 @@ fa: admin: sign_up: subject: "%{name} ثبت نام کرد" - digest: - action: دیدن تمامی آگاهی‌ها - body: خلاصه‌ای از پیغام‌هایی که از زمان آخرین بازدید شما در %{since} فرستاده شد - mention: "%{name} این‌جا از شما نام برد:" - new_followers_summary: - one: در ضمن، وقتی که نبودید یک پیگیر تازه پیدا کردید! ای ول! - other: در ضمن، وقتی که نبودید %{count} پیگیر تازه پیدا کردید! چه عالی! - title: در مدتی که نبودید... favourite: body: "%{name} این نوشتهٔ شما را پسندید:" subject: "%{name} نوشتهٔ شما را پسندید" diff --git a/config/locales/fi.yml b/config/locales/fi.yml index b48d8ab9fbd..397a40e694c 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -235,6 +235,7 @@ fi: approve_user: Hyväksy käyttäjä assigned_to_self_report: Määritä raportti change_email_user: Vaihda sähköposti käyttäjälle + change_role_user: Muuta käyttäjän roolia confirm_user: Vahvista käyttäjä create_account_warning: Luo varoitus create_announcement: Luo ilmoitus @@ -244,6 +245,7 @@ fi: create_email_domain_block: Estä sähköpostipalvelin create_ip_block: Luo IP-sääntö create_unavailable_domain: Luo ei-saatavilla oleva verkkotunnus + create_user_role: Luo rooli demote_user: Alenna käyttäjä destroy_announcement: Poista ilmoitus destroy_custom_emoji: Poista mukautettu emoji @@ -254,6 +256,7 @@ fi: destroy_ip_block: Poista IP-sääntö destroy_status: Poista julkaisu destroy_unavailable_domain: Poista ei-saatavilla oleva verkkotunnus + destroy_user_role: Hävitä rooli disable_2fa_user: Poista kaksivaiheinen tunnistautuminen käytöstä disable_custom_emoji: Estä mukautettu emoji disable_sign_in_token_auth_user: Estä käyttäjältä sähköpostitunnuksen todennus @@ -281,11 +284,13 @@ fi: update_custom_emoji: Päivitä muokattu emoji update_domain_block: Päivitä verkkotunnuksen esto update_status: Päivitä viesti + update_user_role: Päivitä rooli actions: approve_appeal_html: "%{name} hyväksyi moderointipäätöksen muutoksenhaun lähettäjältä %{target}" approve_user_html: "%{name} hyväksyi käyttäjän rekisteröitymisen kohteesta %{target}" assigned_to_self_report_html: "%{name} otti raportin %{target} tehtäväkseen" change_email_user_html: "%{name} vaihtoi käyttäjän %{target} sähköpostiosoitteen" + change_role_user_html: "%{name} muutti roolia %{target}" confirm_user_html: "%{name} vahvisti käyttäjän %{target} sähköpostiosoitteen" create_account_warning_html: "%{name} lähetti varoituksen henkilölle %{target}" create_announcement_html: "%{name} loi uuden ilmoituksen %{target}" @@ -295,6 +300,7 @@ fi: create_email_domain_block_html: "%{name} esti sähköpostin %{target}" create_ip_block_html: "%{name} luonut IP-säännön %{target}" create_unavailable_domain_html: "%{name} pysäytti toimituksen verkkotunnukseen %{target}" + create_user_role_html: "%{name} luonut %{target} roolin" demote_user_html: "%{name} alensi käyttäjän %{target}" destroy_announcement_html: "%{name} poisti ilmoituksen %{target}" destroy_custom_emoji_html: "%{name} poisti emojin %{target}" @@ -305,6 +311,7 @@ fi: destroy_ip_block_html: "%{name} poisti IP-säännön %{target}" destroy_status_html: "%{name} poisti viestin %{target}" destroy_unavailable_domain_html: "%{name} jatkoi toimitusta verkkotunnukseen %{target}" + destroy_user_role_html: "%{name} poisti %{target} roolin" disable_2fa_user_html: "%{name} poisti käyttäjältä %{target} vaatimuksen kaksivaiheisen todentamiseen" disable_custom_emoji_html: "%{name} poisti emojin %{target}" disable_sign_in_token_auth_user_html: "%{name} poisti sähköpostitunnuksen %{target} todennuksen käytöstä" @@ -332,7 +339,7 @@ fi: update_custom_emoji_html: "%{name} päivitti emojin %{target}" update_domain_block_html: "%{name} päivitti verkkotunnuksen %{target}" update_status_html: "%{name} päivitti viestin %{target}" - deleted_status: "(poistettu julkaisu)" + update_user_role_html: "%{name} muutti roolia %{target}" empty: Lokeja ei löytynyt. filter_by_action: Suodata tapahtuman mukaan filter_by_user: Suodata käyttäjän mukaan @@ -480,6 +487,9 @@ fi: unsuppress: Palauta seuraa suositus instances: availability: + description_html: + one: Jos toimitus verkkotunnukseen epäonnistuu %{count} päivä ilman onnistumista, uusia yrityksiä ei tehdä ennen kuin toimitus alkaen verkkotunnukselta on vastaanotettu. + other: Jos toimitus verkkotunnukselle, epäonnistuu %{count} eri päivänä ilman onnistumista, uusia yrityksiä ei tehdä ennen kuin toimitus alkaen verkkotunnuselta on vastaanotettu. failure_threshold_reached: Epäonnistumisen kynnys saavutettu %{date}. failures_recorded: one: Epäonnistuneita yrityksiä %{count} päivässä. @@ -660,6 +670,53 @@ fi: delete: Poista description_html: Käyttäjän roolit, voit muokata toimintoja ja alueita mitä sinun Mastodon käyttäjät voivat käyttää. edit: Muokkaa "%{name}" roolia + everyone: Oletus käyttöoikeudet + everyone_full_description_html: Tämä on perusrooli joka vaikuttaa kaikkiin käyttäjiin, jopa ilman määrättyä roolia. Kaikki muut roolit perivät sen käyttöoikeudet. + permissions_count: + one: "%{count} käyttöoikeus" + other: "%{count} käyttöoikeutta" + privileges: + administrator: Ylläpitäjä + administrator_description: Käyttäjät, joilla on tämä käyttöoikeus, ohittavat jokaisen käyttöoikeuden + delete_user_data: Poista käyttäjän tiedot + delete_user_data_description: Salli käyttäjien poistaa muiden käyttäjien tiedot viipymättä + invite_users: Kutsu käyttäjiä + invite_users_description: Sallii käyttäjien kutsua uusia ihmisiä palvelimelle + manage_announcements: Hallitse Ilmoituksia + manage_announcements_description: Salli käyttäjien hallita ilmoituksia palvelimella + manage_appeals: Hallitse valituksia + manage_appeals_description: Antaa käyttäjien tarkastella valvontatoimia koskevia valituksia + manage_blocks: Hallitse lohkoja + manage_blocks_description: Sallii käyttäjien estää sähköpostipalvelujen ja IP-osoitteiden käytön + manage_custom_emojis: Hallita mukautettuja hymiöitä + manage_custom_emojis_description: Salli käyttäjien hallita mukautettuja hymiöitä palvelimella + manage_federation: Hallita liitoksia + manage_federation_description: Sallii käyttäjien estää tai sallia liitoksen muiden verkkotunnusten kanssa ja hallita toimitusta + manage_invites: Hallita kutsuja + manage_invites_description: Sallii käyttäjien selata ja poistaa kutsulinkkejä käytöstä + manage_reports: Hallita raportteja + manage_reports_description: Sallii käyttäjien tarkastella raportteja ja suorittaa valvontatoimia niitä vastaan + manage_roles: Hallita rooleja + manage_roles_description: Sallii käyttäjien hallita ja määrittää rooleja heidän alapuolellaan + manage_rules: Hallita sääntöjä + manage_rules_description: Sallii käyttäjien vaihtaa palvelinsääntöjä + manage_settings: Hallita asetuksia + manage_settings_description: Salli käyttäjien muuttaa sivuston asetuksia + manage_taxonomies: Hallita luokittelua + manage_taxonomies_description: Sallii käyttäjien tarkistaa trendillisen sisällön ja päivittää hashtag-asetuksia + manage_user_access: Hallita käyttäjän oikeuksia + manage_user_access_description: Sallii käyttäjien poistaa käytöstä muiden käyttäjien kaksivaiheisen todennuksen, muuttaa heidän sähköpostiosoitettaan ja nollata heidän salasanansa + manage_users: Hallita käyttäjiä + manage_users_description: Sallii käyttäjien tarkastella muiden käyttäjien tietoja ja suorittaa valvontatoimia heitä vastaan + manage_webhooks: Hallita Webhookit + manage_webhooks_description: Sallii käyttäjien luoda webhookit hallinnollisiin tapahtumiin + view_audit_log: Katsoa valvontalokia + view_audit_log_description: Sallii käyttäjien nähdä palvelimen hallinnollisten toimien historian + view_dashboard: Näytä koontinäyttö + view_dashboard_description: Sallii käyttäjien käyttää kojelautaa ja erilaisia mittareita + view_devops: Operaattorit + view_devops_description: Sallii käyttäjille oikeuden käyttää Sidekiq ja pgHero dashboardeja + title: Roolit rules: add_new: Lisää sääntö delete: Poista @@ -744,9 +801,6 @@ fi: desc_html: Näytä julkinen aikajana aloitussivulla title: Aikajanan esikatselu title: Sivuston asetukset - trendable_by_default: - desc_html: Vaikuttaa hashtageihin, joita ei ole aiemmin poistettu käytöstä - title: Salli hashtagit ilman tarkistusta ennakkoon trends: desc_html: Näytä julkisesti aiemmin tarkistetut hashtagit, jotka ovat tällä hetkellä saatavilla title: Trendaavat aihetunnisteet @@ -779,6 +833,11 @@ fi: system_checks: database_schema_check: message_html: Tietokannan siirto on vireillä. Suorita ne varmistaaksesi, että sovellus toimii odotetulla tavalla + elasticsearch_running_check: + message_html: Ei saatu yhteyttä Elasticsearch. Tarkista, että se on käynnissä tai poista kokotekstihaku käytöstä + elasticsearch_version_check: + message_html: 'Yhteensopimaton Elasticsearch versio: %{value}' + version_comparison: Elasticsearch %{running_version} on käynnissä, kun %{required_version} vaaditaan rules_check: action: Hallinnoi palvelimen sääntöjä message_html: Et ole määrittänyt mitään palvelimen sääntöä. @@ -798,8 +857,12 @@ fi: description_html: Nämä ovat linkkejä, joita jaetaan tällä hetkellä paljon tileillä, joilta palvelimesi näkee viestejä. Se voi auttaa käyttäjiäsi saamaan selville, mitä maailmassa tapahtuu. Linkkejä ei näytetä julkisesti, ennen kuin hyväksyt julkaisijan. Voit myös sallia tai hylätä yksittäiset linkit. disallow: Hylkää linkki disallow_provider: Estä julkaisija + shared_by_over_week: + one: Yksi henkilö jakanut viimeisen viikon aikana + other: Jakanut %{count} henkilöä viimeisen viikon aikana title: Suositut linkit usage_comparison: Jaettu %{today} kertaa tänään verrattuna eilen %{yesterday} + only_allowed: Vain sallittu pending_review: Odottaa tarkistusta preview_card_providers: allowed: Tämän julkaisijan linkit voivat trendata @@ -851,6 +914,7 @@ fi: webhooks: add_new: Lisää päätepiste delete: Poista + description_html: A webhook mahdollistaa Mastodonin työntää reaaliaikaisia ilmoituksia valituista tapahtumista omaan sovellukseesi, joten sovelluksesi voi laukaista automaattisesti reaktioita. disable: Poista käytöstä disabled: Ei käytössä edit: Muokkaa päätepistettä @@ -1121,8 +1185,11 @@ fi: edit: add_keyword: Lisää avainsana keywords: Avainsanat + statuses: Yksittäiset postaukset + statuses_hint_html: Tämä suodatin koskee yksittäisten postausten valintaa riippumatta siitä, vastaavatko ne alla olevia avainsanoja. Tarkista tai poista viestit suodattimesta. title: Muokkaa suodatinta errors: + deprecated_api_multiple_keywords: Näitä parametreja ei voi muuttaa tästä sovelluksesta, koska ne koskevat useampaa kuin yhtä suodattimen avainsanaa. Käytä uudempaa sovellusta tai web-käyttöliittymää. invalid_context: Ei sisältöä tai se on virheellinen index: contexts: Suodattimet %{contexts} @@ -1133,10 +1200,23 @@ fi: keywords: one: "%{count} avainsana" other: "%{count} avainsanaa" + statuses: + one: "%{count} viesti" + other: "%{count} viestiä" + statuses_long: + one: "%{count} yksittäinen viesti piilotettu" + other: "%{count} yksittäistä viestiä piilotettu" title: Suodattimet new: save: Tallenna uusi suodatin title: Lisää uusi suodatin + statuses: + back_to_filter: Takaisin suodattimeen + batch: + remove: Poista suodattimista + index: + hint: Tämä suodatin koskee yksittäisten viestien valintaa muista kriteereistä riippumatta. Voit lisätä lisää viestejä tähän suodattimeen web-käyttöliittymästä. + title: Suodatetut viestit footer: developers: Kehittäjille more: Lisää… @@ -1258,17 +1338,6 @@ fi: subject: "%{name} lähetti raportin" sign_up: subject: "%{name} kirjautunut" - digest: - action: Näytä kaikki ilmoitukset - body: Tässä lyhyt yhteenveto viime käyntisi (%{since}) jälkeen tulleista viesteistä - mention: "%{name} mainitsi sinut:" - new_followers_summary: - one: Olet myös saanut yhden uuden seuraajan! Juhuu! - other: Olet myös saanut %{count} uutta seuraajaa! Aivan mahtavaa! - subject: - one: "1 uusi ilmoitus viime käyntisi jälkeen 🐘" - other: "%{count} uutta ilmoitusta viime käyntisi jälkeen 🐘" - title: Poissaollessasi… favourite: body: "%{name} tykkäsi tilastasi:" subject: "%{name} tykkäsi tilastasi" diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 018dea3afb2..a0409693c62 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -297,7 +297,6 @@ fr: create_unavailable_domain_html: "%{name} a arrêté la livraison vers le domaine %{target}" demote_user_html: "%{name} a rétrogradé l'utilisateur·rice %{target}" destroy_announcement_html: "%{name} a supprimé l'annonce %{target}" - destroy_custom_emoji_html: "%{name} a détruit l'émoji %{target}" destroy_domain_allow_html: "%{name} a rejeté la fédération avec le domaine %{target}" destroy_domain_block_html: "%{name} a débloqué le domaine %{target}" destroy_email_domain_block_html: "%{name} a débloqué le domaine de courriel %{target}" @@ -332,7 +331,6 @@ fr: update_custom_emoji_html: "%{name} a mis à jour l'émoji %{target}" update_domain_block_html: "%{name} a mis à jour le blocage de domaine pour %{target}" update_status_html: "%{name} a mis à jour le message de %{target}" - deleted_status: "(message supprimé)" empty: Aucun journal trouvé. filter_by_action: Filtrer par action filter_by_user: Filtrer par utilisateur·ice @@ -794,9 +792,6 @@ fr: desc_html: Afficher un lien vers le fil public sur la page d’accueil et autoriser l'accès anonyme au fil public via l'API title: Autoriser la prévisualisation anonyme du fil global title: Paramètres du serveur - trendable_by_default: - desc_html: Affecte les hashtags qui n'ont pas été précédemment non autorisés - title: Autoriser les hashtags à apparaître dans les tendances sans approbation préalable trends: desc_html: Afficher publiquement les hashtags approuvés qui sont populaires en ce moment title: Hashtags populaires @@ -1319,17 +1314,6 @@ fr: subject: "%{name} a soumis un signalement" sign_up: subject: "%{name} s'est inscrit·e" - digest: - action: Voir toutes les notifications - body: Voici un bref résumé des messages que vous avez raté depuis votre dernière visite le %{since} - mention: "%{name} vous a mentionné⋅e dans :" - new_followers_summary: - one: De plus, vous avez un·e nouvel·le abonné·e ! Youpi ! - other: De plus, vous avez %{count} abonné·e·s de plus ! Incroyable ! - subject: - one: "Une nouvelle notification depuis votre dernière visite 🐘" - other: "%{count} nouvelles notifications depuis votre dernière visite 🐘" - title: Pendant votre absence… favourite: body: "%{name} a ajouté votre message à ses favoris :" subject: "%{name} a ajouté votre message à ses favoris" diff --git a/config/locales/fy.yml b/config/locales/fy.yml index fa727d6fe4a..02f77d7ea07 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -37,8 +37,6 @@ fy: contexts: thread: Petearen notification_mailer: - digest: - mention: "%{name} hat jo fermeld yn:" mention: action: Beäntwurdzje body: 'Jo binne fermeld troch %{name} yn:' diff --git a/config/locales/gd.yml b/config/locales/gd.yml index c98235cffd6..7c8df8f6b7c 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -307,7 +307,6 @@ gd: create_unavailable_domain_html: Sguir %{name} ris an lìbhrigeadh dhan àrainn %{target} demote_user_html: Dh’ìslich %{name} an cleachdaiche %{target} destroy_announcement_html: Sguab %{name} às am brath-fios %{target} - destroy_custom_emoji_html: Mhill %{name} an Emoji %{target} 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} @@ -342,7 +341,6 @@ gd: update_custom_emoji_html: Dh’ùraich %{name} an Emoji %{target} update_domain_block_html: Dh’ùraich %{name} bacadh na h-àrainne %{target} update_status_html: Dh’ùraich %{name} post le %{target} - deleted_status: "(post air a sguabadh às)" empty: Cha deach loga a lorg. filter_by_action: Criathraich a-rèir gnìomha filter_by_user: Criathraich a-rèir cleachdaiche @@ -826,9 +824,6 @@ gd: desc_html: Seall ceangal dhan loidhne-ama phoblach air an duilleag-landaidh is ceadaich inntrigeadh gun ùghdarrachadh leis an API air an loidhne-ama phoblach title: Ceadaich inntrigeadh gun ùghdarrachadh air an loidhne-ama phoblach title: Roghainnean na làraich - trendable_by_default: - desc_html: Bheir seo buaidh air na tagaichean hais nach deach a dhì-cheadachadh roimhe - title: Leig le tagaichean hais treandadh às aonais lèirmheis ro làimh trends: desc_html: Seall susbaint gu poblach a chaidh lèirmheas a dhèanamh oirre roimhe ’s a tha a’ treandadh title: Treandaichean @@ -1091,7 +1086,7 @@ gd: post_follow: close: Air neo dùin an uinneag seo. return: Seall pròifil a’ chleachdaiche - web: Tadhail air an lìon + web: Tadhail air an duilleag-lìn title: Lean air %{acct} challenge: confirm: Lean air adhart @@ -1365,21 +1360,6 @@ gd: subject: Rinn %{name} gearan sign_up: subject: Chlàraich %{name} - digest: - action: Seall a h-uile brath - body: Seo geàrr-chunntas air na h-atharraichean nach fhaca thu on tadhal mu dheireadh agad %{since} - mention: 'Thug %{name} iomradh ort an-seo:' - new_followers_summary: - few: Cuideachd, bhuannaich thu %{count} luchd-leantainn ùr on àm a bha thu air falbh! Nach ma sin! - one: Cuideachd, bhuannaich thu %{count} neach-leantainn ùr on àm a bha thu air falbh! Nach ma sin! - other: Cuideachd, bhuannaich thu %{count} luchd-leantainn ùr on àm a bha thu air falbh! Nach ma sin! - two: Cuideachd, bhuannaich thu %{count} neach-leantainn ùr on àm a bha thu air falbh! Nach ma sin! - subject: - few: "%{count} brathan ùra on tadhal mu dheireadh agad 🐘" - one: "%{count} bhrath ùr on tadhal mu dheireadh agad 🐘" - other: "%{count} brath ùr on tadhal mu dheireadh agad 🐘" - two: "%{count} bhrath ùr on tadhal mu dheireadh agad 🐘" - title: Fhad ’s a bha thu air falbh… favourite: body: 'Is annsa le %{name} am post agad:' subject: Is annsa le %{name} am post agad diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 5610272b7bc..6c32fcaf3da 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -235,17 +235,21 @@ gl: approve_user: Aprobar Usuaria assigned_to_self_report: Asignar denuncia change_email_user: Editar email da usuaria + change_role_user: Cambiar Rol da Usuaria confirm_user: Confirmar usuaria create_account_warning: Crear aviso create_announcement: Crear anuncio + create_canonical_email_block: Crear Bloqueo de email create_custom_emoji: Crear emoticonas personalizadas create_domain_allow: Crear Dominio Permitido create_domain_block: Crear bloquedo do Dominio create_email_domain_block: Crear bloqueo de dominio de correo electrónico create_ip_block: Crear regra IP create_unavailable_domain: Crear dominio Non dispoñible + create_user_role: Crear Rol demote_user: Degradar usuaria destroy_announcement: Eliminar anuncio + destroy_canonical_email_block: Eliminar Bloqueo de email destroy_custom_emoji: Eliminar emoticona personalizada destroy_domain_allow: Eliminar Dominio permitido destroy_domain_block: Eliminar bloqueo do Dominio @@ -254,6 +258,7 @@ gl: destroy_ip_block: Eliminar regra IP destroy_status: Eliminar publicación destroy_unavailable_domain: Eliminar dominio Non dispoñible + destroy_user_role: Eliminar Rol disable_2fa_user: Desactivar 2FA disable_custom_emoji: Desactivar emoticona personalizada disable_sign_in_token_auth_user: Desactivar Autenticación por token no email para Usuaria @@ -280,24 +285,30 @@ gl: update_announcement: Actualizar anuncio update_custom_emoji: Actualizar emoticona personalizada update_domain_block: Actualizar bloqueo do dominio + update_ip_block: Actualizar regra IP update_status: Actualizar publicación + update_user_role: Actualizar Rol actions: approve_appeal_html: "%{name} aprobou a apelación da decisión da moderación de %{target}" approve_user_html: "%{name} aprobou o rexistro de %{target}" assigned_to_self_report_html: "%{name} asignou a denuncia %{target} para si mesma" change_email_user_html: "%{name} cambiou o enderezo de email da usuaria %{target}" + change_role_user_html: "%{name} cambiou o rol de %{target}" confirm_user_html: "%{name} confirmou o enderezo de email da usuaria %{target}" create_account_warning_html: "%{name} envioulle unha advertencia a %{target}" create_announcement_html: "%{name} creou un novo anuncio %{target}" + create_canonical_email_block_html: "%{name} bloqueou o email con hash %{target}" create_custom_emoji_html: "%{name} subiu un novo emoji %{target}" create_domain_allow_html: "%{name} permitiu a federación co dominio %{target}" create_domain_block_html: "%{name} bloqueou o dominio %{target}" create_email_domain_block_html: "%{name} bloqueou o dominio de email %{target}" create_ip_block_html: "%{name} creou regra para o IP %{target}" create_unavailable_domain_html: "%{name} deixou de interactuar co dominio %{target}" + create_user_role_html: "%{name} creou o rol %{target}" demote_user_html: "%{name} degradou a usuaria %{target}" destroy_announcement_html: "%{name} eliminou o anuncio %{target}" - destroy_custom_emoji_html: "%{name} destruíu o emoji %{target}" + destroy_canonical_email_block_html: "%{name} desbloqueou o email con hash %{target}" + destroy_custom_emoji_html: "%{name} eliminou o emoji %{target}" destroy_domain_allow_html: "%{name} retirou a federación co dominio %{target}" destroy_domain_block_html: "%{name} desbloqueou o dominio %{target}" destroy_email_domain_block_html: "%{name} desbloqueou o dominio de email %{target}" @@ -305,6 +316,7 @@ gl: destroy_ip_block_html: "%{name} eliminou a regra para o IP %{target}" destroy_status_html: "%{name} eliminou a publicación de %{target}" destroy_unavailable_domain_html: "%{name} retomou a interacción co dominio %{target}" + destroy_user_role_html: "%{name} eliminou o rol %{target}" disable_2fa_user_html: "%{name} desactivou o requerimento do segundo factor para a usuaria %{target}" disable_custom_emoji_html: "%{name} desactivou o emoji %{target}" disable_sign_in_token_auth_user_html: "%{name} desactivou a autenticación por token no email para %{target}" @@ -331,8 +343,9 @@ gl: update_announcement_html: "%{name} actualizou o anuncio %{target}" update_custom_emoji_html: "%{name} actualizou o emoji %{target}" update_domain_block_html: "%{name} actualizou o bloqueo do dominio para %{target}" + update_ip_block_html: "%{name} cambiou a regra para IP %{target}" update_status_html: "%{name} actualizou a publicación de %{target}" - deleted_status: "(publicación eliminada)" + update_user_role_html: "%{name} cambiou o rol %{target}" empty: Non se atoparon rexistros. filter_by_action: Filtrar por acción filter_by_user: Filtrar por usuaria @@ -795,8 +808,8 @@ gl: title: Permitir acceso á cronoloxía pública sen autenticación title: Axustes do sitio trendable_by_default: - desc_html: Afecta ós cancelos que non foron rexeitados de xeito previo - title: Permite ós cancelos ser tendencia sen revisión previa + desc_html: Poderase prohibir igualmente contido en voga específico + title: Permitir tendencias sen aprobación previa trends: desc_html: Amosar de xeito público cancelos revisados previamente que actualmente son tendencia title: Cancelos en tendencia @@ -1182,7 +1195,7 @@ gl: add_keyword: Engadir palabra chave keywords: Palabras chave statuses: Publicacións individuais - statuses_hint_html: Este filtro aplícase para seleccionar publicacións individuais independentemente de se concordan coas palabras chave aquí indicadas. Podes revisar estas publicacións e eliminalas do filtro premendo aquí. + statuses_hint_html: O filtro aplícase para seleccionar publicacións individuais independentemente de se concorda coas palabras chave indicadas. Revisa ou elimina publicacións do filtro. title: Editar filtro errors: deprecated_api_multiple_keywords: Estes parámetros non se poden cambiar desde esta aplicación porque son de aplicación a máis dun filtro de palabras chave. Usa unha aplicación máis recente ou a interface web. @@ -1211,7 +1224,7 @@ gl: batch: remove: Eliminar do filtro index: - hint: Este filtro aplícase para seleccionar publicacións individuais independentemente de outros criterios. Podes engadir máis publicacións a este filtro desde a interface Web. + hint: Este filtro aplícase para seleccionar publicacións individuais independentemente de outros criterios. Podes engadir máis publicacións a este filtro desde a interface web. title: Publicacións filtradas footer: developers: Desenvolvedoras @@ -1220,12 +1233,22 @@ gl: trending_now: Tendencia agora generic: all: Todo + all_items_on_page_selected_html: + one: "%{count} elemento seleccionado nesta páxina." + other: Tódolos %{count} elementos desta páxina están seleccionados. + all_matching_items_selected_html: + one: "%{count} elemento coincidente coa busca está seleccionado." + other: Tódolos %{count} elementos coincidentes coa busca están seleccionados. changes_saved_msg: Cambios gardados correctamente!! copy: Copiar delete: Eliminar + deselect: Desmarcar todo none: Ningún order_by: Ordenar por save_changes: Gardar cambios + select_all_matching_items: + one: Seleccionar %{count} elemento coincidente coa busca. + other: Seleccionar tódolos %{count} elementos coincidentes coa busca. today: hoxe validation_errors: one: Algo non está ben de todo! Por favor revise abaixo o erro @@ -1334,17 +1357,6 @@ gl: subject: "%{name} enviou unha denuncia" sign_up: subject: "%{name} rexistrouse" - digest: - action: Ver todas as notificacións - body: Aquí ten un breve resumo das mensaxes publicadas desde a súa última visita en %{since} - mention: "%{name} mencionouna en:" - new_followers_summary: - one: Ademáis, ten unha nova seguidora desde entón! Ben! - other: Ademáis, obtivo %{count} novas seguidoras desde entón! Tremendo! - subject: - one: "1 nova notificación desde a última visita 🐘" - other: "%{count} novas notificacións desde a última visita 🐘" - title: Na súa ausencia... favourite: body: 'A túa publicación foi marcada como favorita por %{name}:' subject: "%{name} marcou como favorita a túa publicación" diff --git a/config/locales/he.yml b/config/locales/he.yml index 2106423bcf4..c340f6e6c7e 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -245,6 +245,7 @@ he: approve_user: אישור משתמש assigned_to_self_report: הקצאת דו"ח change_email_user: שינוי כתובת דוא"ל למשתמש + change_role_user: שינוי תפקיד למשתמש confirm_user: אשר משתמש create_account_warning: יצירת אזהרה create_announcement: יצירת הכרזה @@ -254,6 +255,7 @@ he: create_email_domain_block: יצירת חסימת דומיין דוא"ל create_ip_block: יצירת כלל IP create_unavailable_domain: יצירת דומיין בלתי זמין + create_user_role: יצירת תפקיד demote_user: הורדת משתמש בדרגה destroy_announcement: מחיקת הכרזה destroy_custom_emoji: מחיקת אמוג'י יחודי @@ -264,6 +266,7 @@ he: destroy_ip_block: מחיקת כלל IP destroy_status: מחיקת פוסט destroy_unavailable_domain: מחיקת דומיין בלתי זמין + destroy_user_role: מחיקת תפקיד disable_2fa_user: השעיית זיהוי דו-גורמי disable_custom_emoji: השעיית אמוג'י מיוחד disable_sign_in_token_auth_user: השעיית אסימון הזדהות בדוא"ל של משתמש @@ -291,11 +294,13 @@ he: update_custom_emoji: עדכון סמלון מותאם אישית update_domain_block: עדכון חסימת שם מתחם update_status: סטטוס עדכון + update_user_role: עדכון תפקיד actions: approve_appeal_html: "%{name} אישר/ה ערעור על החלטת מנהלי הקהילה מ-%{target}" approve_user_html: "%{name} אישר/ה הרשמה מ-%{target}" assigned_to_self_report_html: '%{name} הקצה/תה דו"ח %{target} לעצמם' change_email_user_html: '%{name} שינה/תה את כתובת הדוא"ל של המשתמש %{target}' + change_role_user_html: "%{name} שינה את התפקיד של %{target}" confirm_user_html: '%{name} אישר/ה את כותבת הדו"אל של המשתמש %{target}' create_account_warning_html: "%{name} שלח/ה אזהרה ל %{target}" create_announcement_html: "%{name} יצר/ה הכרזה חדשה %{target}" @@ -305,9 +310,10 @@ he: create_email_domain_block_html: '%{name} חסם/ה את דומיין הדוא"ל %{target}' create_ip_block_html: "%{name} יצר/ה כלל עבור IP %{target}" create_unavailable_domain_html: "%{name} הפסיק/ה משלוח לדומיין %{target}" + create_user_role_html: "%{name} יצר את התפקיד של %{target}" demote_user_html: "%{name} הוריד/ה בדרגה את המשתמש %{target}" destroy_announcement_html: "%{name} מחק/ה את ההכרזה %{target}" - destroy_custom_emoji_html: "%{name} השמיד/ה את האמוג'י %{target}" + destroy_custom_emoji_html: "%{name} מחק אמוג'י של %{target}" destroy_domain_allow_html: "%{name} לא התיר/ה פדרציה עם הדומיין %{target}" destroy_domain_block_html: "%{name} הסיר/ה חסימה מהדומיין %{target}" destroy_email_domain_block_html: '%{name} הסיר/ה חסימה מדומיין הדוא"ל %{target}' @@ -315,6 +321,7 @@ he: destroy_ip_block_html: "%{name} מחק/ה את הכלל עבור IP %{target}" destroy_status_html: "%{name} הסיר/ה פוסט מאת %{target}" destroy_unavailable_domain_html: "%{name} התחיל/ה מחדש משלוח לדומיין %{target}" + destroy_user_role_html: "%{name} ביטל את התפקיד של %{target}" disable_2fa_user_html: "%{name} ביטל/ה את הדרישה לאימות דו-גורמי למשתמש %{target}" disable_custom_emoji_html: "%{name} השבית/ה את האמוג'י %{target}" disable_sign_in_token_auth_user_html: '%{name} השבית/ה את האימות בעזרת אסימון דוא"ל עבור %{target}' @@ -342,7 +349,7 @@ he: update_custom_emoji_html: "%{name} עדכן/ה אמוג'י %{target}" update_domain_block_html: "%{name} עדכן/ה חסימת דומיין עבור %{target}" update_status_html: "%{name} עדכן/ה פוסט של %{target}" - deleted_status: "(פוסט נמחק)" + update_user_role_html: "%{name} שינה את התפקיד של %{target}" empty: לא נמצאו יומנים. filter_by_action: סינון לפי פעולה filter_by_user: סינון לפי משתמש @@ -826,9 +833,6 @@ he: desc_html: הצגת קישורית לפיד הפומבי מדף הנחיתה והרשאה לממשק לגשת לפיד הפומבי ללא אימות title: הרשאת גישה בלתי מאומתת לפיד הפומבי title: הגדרות אתר - trendable_by_default: - desc_html: משפיע על האשתגיות שלא נאסרו קודם לכן - title: הרשאה להאשתגיות להופיע בנושאים החמים ללא אישור מוקדם trends: desc_html: הצגה פומבית של תוכן שנסקר בעבר ומופיע כרגע בנושאים החמים title: נושאים חמים @@ -1220,6 +1224,7 @@ he: edit: add_keyword: הוספת מילת מפתח keywords: מילות מפתח + statuses: פוסטים יחידים title: ערוך מסנן errors: deprecated_api_multiple_keywords: לא ניתן לשנות פרמטרים אלו מהיישומון הזה בגלל שהם חלים על יותר ממילת מפתח אחת. ניתן להשתמש ביישומון מעודכן יותר או בממשק הוובי. @@ -1239,6 +1244,13 @@ he: new: save: שמירת מסנן חדש title: הוספת מסנן חדש + statuses: + back_to_filter: חזרה לפילטר + batch: + remove: הסרה מפילטר + index: + hint: פילטר זה חל באופן של בחירת פוסטים בודדים ללא תלות בקריטריונים אחרים. תוכלו להוסיף עוד פוסטים לפילטר זה ממשק הווב. + title: פוסטים שסוננו footer: developers: מפתחות more: עוד… @@ -1249,6 +1261,7 @@ he: changes_saved_msg: השינויים נשמרו בהצלחה! copy: להעתיק delete: למחוק + deselect: בטל בחירה של הכל none: כלום order_by: מיין לפי save_changes: שמור שינויים @@ -1364,21 +1377,6 @@ he: subject: '%{name} שלח/ה דו"ח' sign_up: subject: "%{name} נרשמו" - digest: - action: הצגת כל ההתראות - body: להלן סיכום זריז של הדברים שקרו על מאז ביקורך האחרון ב-%{since} - mention: "%{name} פנה אליך ב:" - new_followers_summary: - many: חוץ מזה, נוספו לך %{count} עוקבים חדשים בזמן שלא היית! מדהים! - one: חוץ מזה, נוסף לך עוקב חדש בזמן שלא היית! הידד! - other: חוץ מזה, נוספו לך %{count} עוקבים חדשים בזמן שלא היית! מדהים! - two: חוץ מזה, נוספו לך %{count} עוקבים חדשים בזמן שלא היית! מדהים! - subject: - many: "%{count} התראות חדשות מאז ביקורך האחרון 🐘" - one: "התראה חדשה אחת מאז ביקורך האחרון 🐘" - other: "%{count} התראות חדשות מאז ביקורך האחרון 🐘" - two: "%{count} התראות חדשות מאז ביקורך האחרון 🐘" - title: בהעדרך... favourite: body: 'חצרוצך חובב על ידי %{name}:' subject: חצרוצך חובב על ידי %{name} diff --git a/config/locales/hr.yml b/config/locales/hr.yml index 3a2af1662d8..6f2d4139982 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -71,7 +71,6 @@ hr: moderation: all: Sve action_logs: - deleted_status: "(izbrisani status)" empty: Nema pronađenih izvješća. filter_by_action: Filtriraj prema radnji filter_by_user: Filtriraj prema korisniku @@ -162,9 +161,6 @@ hr: one: 1 korištenje other: "%{count} korištenja" notification_mailer: - digest: - body: Ovo je kratak sažetak propuštenih poruka od Vašeg prošlog posjeta %{since} - mention: "%{name} Vas je spomenuo/la:" favourite: body: "%{name} je označio/la Vaš status favoritom:" subject: "%{name} je označio/la Vaš status favoritom" diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 9a601c4cafd..53e514f153e 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -237,17 +237,21 @@ hu: approve_user: Felhasználó Jóváhagyása assigned_to_self_report: Jelentés hozzárendelése change_email_user: Felhasználó e-mail címének módosítása + change_role_user: Felhasználó szerepkörének módosítása confirm_user: Felhasználó megerősítése create_account_warning: Figyelmeztetés létrehozása create_announcement: Közlemény létrehozása + create_canonical_email_block: E-mail tiltás létrehozása create_custom_emoji: Egyéni emodzsi létrehozása create_domain_allow: Domain engedélyezés létrehozása create_domain_block: Domain tiltás létrehozása create_email_domain_block: E-mail domain tiltás létrehozása create_ip_block: IP szabály létrehozása create_unavailable_domain: Elérhetetlen domain létrehozása + create_user_role: Szerepkör létrehozása demote_user: Felhasználó lefokozása destroy_announcement: Közlemény törlése + destroy_canonical_email_block: E-mail tiltás törlése destroy_custom_emoji: Egyéni emodzsi törlése destroy_domain_allow: Domain engedélyezés törlése destroy_domain_block: Domain tiltás törlése @@ -256,6 +260,7 @@ hu: destroy_ip_block: IP szabály törlése destroy_status: Bejegyzés törlése destroy_unavailable_domain: Elérhetetlen domain törlése + destroy_user_role: Szerepkör eltávolítása disable_2fa_user: Kétlépcsős hitelesítés letiltása disable_custom_emoji: Egyéni emodzsi letiltása disable_sign_in_token_auth_user: A felhasználó tokenes e-mail hitelesítésének letiltása @@ -282,31 +287,38 @@ hu: update_announcement: Közlemény frissítése update_custom_emoji: Egyéni emodzsi frissítése update_domain_block: Domain tiltás frissítése + update_ip_block: IP-szabály frissítése update_status: Bejegyzés frissítése + update_user_role: Szerepkör frissítése actions: approve_appeal_html: "%{name} jóváhagyott egy fellebbezést %{target} moderátori döntéséről" approve_user_html: "%{name} jóváhagyta %{target} regisztrációját" assigned_to_self_report_html: "%{name} a %{target} bejelentést magához rendelte" change_email_user_html: "%{name} megváltoztatta %{target} felhasználó e-mail címét" + change_role_user_html: "%{name} módosította %{target} szerepkörét" confirm_user_html: "%{name} megerősítette %{target} e-mail-címét" create_account_warning_html: "%{name} figyelmeztetést küldött %{target} számára" create_announcement_html: "%{name} új közleményt hozott létre: %{target}" + create_canonical_email_block_html: "%{name} letiltotta a(z) %{target} hashű e-mailt" create_custom_emoji_html: "%{name} új emodzsit töltött fel: %{target}" create_domain_allow_html: "%{name} engedélyezte a föderációt %{target} domainnel" create_domain_block_html: "%{name} letiltotta a %{target} domaint" create_email_domain_block_html: "%{name} letiltotta a %{target} e-mail domaint" - create_ip_block_html: "%{name} létrehozott egy szabályt a %{target} IP-vel kapcsolatban" + create_ip_block_html: "%{name} létrehozta a(z) %{target} IP-címre vonatkozó szabályt" create_unavailable_domain_html: "%{name} leállította a kézbesítést a %{target} domainbe" + create_user_role_html: "%{name} létrehozta a(z) %{target} szerepkört" demote_user_html: "%{name} lefokozta %{target} felhasználót" destroy_announcement_html: "%{name} törölte a %{target} közleményt" - destroy_custom_emoji_html: "%{name} törölte az emodzsit: %{target}" + destroy_canonical_email_block_html: "%{name} engedélyezte a(z) %{target} hashű e-mailt" + destroy_custom_emoji_html: "%{name} törölte a(z) %{target} emodzsit" destroy_domain_allow_html: "%{name} letiltotta a föderációt a %{target} domainnel" destroy_domain_block_html: "%{name} engedélyezte a %{target} domaint" destroy_email_domain_block_html: "%{name} engedélyezte a %{target} e-mail domaint" destroy_instance_html: "%{name} véglegesen törölte a(z) %{target} domaint" - destroy_ip_block_html: "%{name} törölt egy szabályt a %{target} IP-vel kapcsolatban" + destroy_ip_block_html: "%{name} törölte a(z) %{target} IP-címre vonatkozó szabályt" destroy_status_html: "%{name} eltávolította %{target} felhasználó bejegyzését" destroy_unavailable_domain_html: "%{name} újraindította a kézbesítést a %{target} domainbe" + destroy_user_role_html: "%{name} törölte a(z) %{target} szerepkört" disable_2fa_user_html: "%{name} kikapcsolta a kétlépcsős azonosítást %{target} felhasználó fiókján" disable_custom_emoji_html: "%{name} letiltotta az emodzsit: %{target}" disable_sign_in_token_auth_user_html: "%{name} letiltotta a tokenes e-mail hitelesítést %{target} felhasználóra" @@ -333,8 +345,9 @@ hu: update_announcement_html: "%{name} frissítette a %{target} közleményt" update_custom_emoji_html: "%{name} frissítette az emodzsit: %{target}" update_domain_block_html: "%{name} frissítette a %{target} domain tiltását" + update_ip_block_html: "%{name} módosította a(z) %{target} IP-címre vonatkozó szabályt" update_status_html: "%{name} frissítette %{target} felhasználó bejegyzését" - deleted_status: "(törölt bejegyzés)" + update_user_role_html: "%{name} módosította a(z) %{target} szerepkört" empty: Nem található napló. filter_by_action: Szűrés művelet alapján filter_by_user: Szűrés felhasználó alapján @@ -698,7 +711,7 @@ hu: manage_settings: Beállítások kezelése manage_settings_description: Lehetővé teszi, hogy a felhasználó megváltoztassa az oldal beállításait manage_taxonomies: Taxonómiák kezelése - manage_taxonomies_description: Lehetővé teszi, hogy a felhasználó átnézze a népszerű tartalmakat és frissítse a hashtag-ek beállításait + manage_taxonomies_description: Lehetővé teszi, hogy a felhasználó átnézze a népszerű tartalmakat és frissítse a hashtagek beállításait manage_user_access: Felhasználói hozzáférések kezelése manage_user_access_description: Lehetővé teszi, hogy a felhasználó letiltsa mások kétlépcsős azonosítását, megváltoztassa az email címüket, és alaphelyzetbe állítsa a jelszavukat manage_users: Felhasználók kezelése @@ -794,11 +807,11 @@ hu: title: A szerver bélyegképe timeline_preview: desc_html: Nyilvános idővonal megjelenítése a főoldalon - title: Idővonal előnézete + title: A nyilvános idővonal hitelesítés nélküli elérésének engedélyezése title: Webhely beállításai trendable_by_default: - desc_html: Azokra a hashtagekere hat, melyet előzőleg nem tiltottak le - title: Felkapott hashtagek engedélyezése előzetes ellenőrzés nélkül + desc_html: Az egyes felkapott tartalmak továbbra is explicit módon tilthatók + title: Trendek engedélyezése előzetes ellenőrzés nélkül trends: desc_html: Előzetesen engedélyezett és most felkapott hashtagek nyilvános megjelenítése title: Felkapott hashtagek @@ -1183,6 +1196,8 @@ hu: edit: add_keyword: Kulcsszó hozzáadása keywords: Kulcsszavak + statuses: Egyedi bejegyzések + statuses_hint_html: Ez a szűrő egyedi bejegyzések kiválasztására vonatkozik, függetlenül attól, hogy megfelelnek-e a lenti kulcsszavaknak. Engedélyezze vagy távolítsa el a bejegyzéseket a szűrőből. title: Szűrő szerkesztése errors: deprecated_api_multiple_keywords: Ezek a paraméterek nem módosíthatóak az alkalmazásból, mert több mint egy szűrőkulcsszóra is hatással vannak. Használd az alkalmazás vagy a webes felület újabb verzióját. @@ -1196,10 +1211,23 @@ hu: keywords: one: "%{count} kulcsszó" other: "%{count} kulcsszó" + statuses: + one: "%{count} bejegyzés" + other: "%{count} bejegyzés" + statuses_long: + one: "%{count} egyedi bejegyzés elrejtve" + other: "%{count} egyedi bejegyzés elrejtve" title: Szűrők new: save: Új szűrő mentése title: Új szűrő hozzáadása + statuses: + back_to_filter: Vissza a szűrőhöz + batch: + remove: Eltávolítás a szűrőből + index: + hint: Ez a szűrő egyedi bejegyzések kiválasztására vonatkozik a megadott kritériumoktól függetlenül. Újabb bejegyzéseket adhatsz hozzá ehhez a szűrőhöz a webes felületen keresztül. + title: Megszűrt bejegyzések footer: developers: Fejlesztőknek more: Többet… @@ -1207,12 +1235,22 @@ hu: trending_now: Most felkapott generic: all: Mind + all_items_on_page_selected_html: + one: "%{count} elem kiválasztva ezen az oldalon." + other: Mind a(z) %{count} elem kiválasztva ezen az oldalon. + all_matching_items_selected_html: + one: "%{count}, a keresésnek megfelelő elem kiválasztva." + other: Mind a(z) %{count}, a keresésnek megfelelő elem kiválasztva. changes_saved_msg: A változásokat elmentettük! copy: Másolás delete: Törlés + deselect: Összes kiválasztás megszüntetése none: Nincs order_by: Rendezés save_changes: Változások mentése + select_all_matching_items: + one: "%{count}, a keresésnek megfelelő elem kiválasztása." + other: Mind a(z) %{count}, a keresésnek megfelelő elem kiválasztása. today: ma validation_errors: one: Valami nincs rendjén! Tekintsd meg a hibát lent @@ -1321,17 +1359,6 @@ hu: subject: "%{name} bejelentést küldött" sign_up: subject: "%{name} feliratkozott" - digest: - action: Összes értesítés megtekintése - body: Itt a legutóbbi látogatásod (%{since}) óta írott üzenetek rövid összefoglalása - mention: "%{name} megemlített itt:" - new_followers_summary: - one: Sőt, egy új követőd is lett, amióta nem jártál itt. Hurrá! - other: Sőt, %{count} új követőd is lett, amióta nem jártál itt. Hihetetlen! - subject: - one: "1 új értesítés az utolsó látogatásod óta 🐘" - other: "%{count} új értesítés az utolsó látogatásod óta 🐘" - title: Amíg távol voltál… favourite: body: 'A bejegyzésedet kedvencnek jelölte %{name}:' subject: "%{name} kedvencnek jelölte a bejegyzésedet" diff --git a/config/locales/hy.yml b/config/locales/hy.yml index e04f2088c64..61b08d6e00a 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -245,7 +245,6 @@ hy: update_custom_emoji: Թարմացնել սեփական էմոջիները update_domain_block: Թարմացնել տիրոյթի արգելափակումը update_status: Թարմացնել գրառումը - deleted_status: "(ջնջուած գրառում)" empty: Ոչ մի գրառում չկայ։ filter_by_action: Զտել ըստ գործողութեան filter_by_user: Զտել ըստ օգտատիրոջ @@ -733,10 +732,6 @@ hy: admin: sign_up: subject: "%{name}-ը գրանցուած է" - digest: - action: Դիտել բոլոր ծանուցումները - mention: "%{name} նշել է քեզ՝" - title: Երբ բացակայ էիր... favourite: body: Քո գրառումը հաւանել է %{name}-ը։ subject: "%{name} հաւանեց գրառումդ" diff --git a/config/locales/id.yml b/config/locales/id.yml index f14f4cf9f01..a66b62d5205 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -284,7 +284,6 @@ id: create_unavailable_domain_html: "%{name} menghentikan pengiriman ke domain %{target}" demote_user_html: "%{name} menurunkan pengguna %{target}" destroy_announcement_html: "%{name} menghapus pengumuman %{target}" - destroy_custom_emoji_html: "%{name} menghapus emoji %{target}" destroy_domain_allow_html: "%{name} membatalkan izin penggabungan dengan domain %{target}" destroy_domain_block_html: "%{name} membuka blokir domain %{target}" destroy_email_domain_block_html: "%{name} membuka blokir domain email %{target}" @@ -319,7 +318,6 @@ id: update_custom_emoji_html: "%{name} memperbarui emoji %{target}" update_domain_block_html: "%{name} memperbarui blokir domain untuk %{target}" update_status_html: "%{name} memperbarui status %{target}" - deleted_status: "(status dihapus)" empty: Log tidak ditemukan. filter_by_action: Filter berdasarkan tindakan filter_by_user: Filter berdasarkan pengguna @@ -713,9 +711,6 @@ id: desc_html: Tampilkan tautan ke linimasa publik pada halaman landas dan izinkan API mengakses linimasa publik tanpa autentifikasi title: Izinkan akses linimasa publik tanpa autentifikasi title: Pengaturan situs - trendable_by_default: - desc_html: Memengaruhi tagar yang belum pernah diizinkan - title: Izinkan tagar masuk tren tanpa peninjauan trends: desc_html: Tampilkan secara publik tagar tertinjau yang kini sedang tren title: Tagar sedang tren @@ -1216,15 +1211,6 @@ id: admin: sign_up: subject: "%{name} mendaftar" - digest: - action: Lihat semua notifikasi - body: Ini adalah ringkasan singkat yang anda lewatkan pada sejak kunjungan terakhir anda pada %{since} - mention: "%{name} menyebut anda di:" - new_followers_summary: - other: Anda mendapatkan %{count} pengikut baru! Luar biasa! - subject: - other: "%{count} notifikasi baru sejak kunjungan Anda terakhir 🐘" - title: Saat Anda tidak muncul... favourite: body: 'Status anda disukai oleh %{name}:' subject: "%{name} menyukai status anda" diff --git a/config/locales/io.yml b/config/locales/io.yml index f88ab41646c..56258e6460b 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -235,17 +235,21 @@ io: approve_user: Aprobez uzanto assigned_to_self_report: Taskigez raporto change_email_user: Chanjez retposto por uzanto + change_role_user: Chanjez rolo di uzanto confirm_user: Konfirmez uzanto create_account_warning: Kreez averto create_announcement: Kreez anunco + create_canonical_email_block: Kreez domenobstrukto create_custom_emoji: Kreez kustumizita emocimajo create_domain_allow: Kreez domenpermiso create_domain_block: Kreez domenobstrukto create_email_domain_block: Kreez retpostodomenobstrukto create_ip_block: Kreez IP-regulo create_unavailable_domain: Kreez nedisponebla domeno + create_user_role: Kreez rolo demote_user: Despromocez uzanto destroy_announcement: Efacez anunco + destroy_canonical_email_block: Efacez domenobstrukto destroy_custom_emoji: Efacez kustumizita emocimajo destroy_domain_allow: Efacez domenpermiso destroy_domain_block: Efacez domenobstrukto @@ -254,6 +258,7 @@ io: destroy_ip_block: Efacez IP-regulo destroy_status: Efacez posto destroy_unavailable_domain: Efacez nedisponebla domeno + destroy_user_role: Destruktez rolo disable_2fa_user: Desaktivigez 2FA disable_custom_emoji: Desaktivigez kustumizita emocimajo disable_sign_in_token_auth_user: Desaktivigez retpostofichyurizo por uzanto @@ -280,24 +285,30 @@ io: update_announcement: Novigez anunco update_custom_emoji: Novigez kustumizita emocimajo update_domain_block: Novigez domenobstrukto + update_ip_block: Kreez IP-regulo update_status: Novigez posto + update_user_role: Novigez rolo actions: approve_appeal_html: "%{name} aprobis jerdecidapelo de %{target}" approve_user_html: "%{name} aprobis registro de %{target}" assigned_to_self_report_html: "%{name} taskigis raporto %{target} a su" change_email_user_html: "%{name} chanjis retpostoadreso di uzanto %{target}" + change_role_user_html: "%{name} chanjis rolo di %{target}" confirm_user_html: "%{name} konfirmis retpostoadreso di uzanto %{target}" create_account_warning_html: "%{name} sendis averto a %{target}" create_announcement_html: "%{name} kreis nova anunco %{target}" + create_canonical_email_block_html: "%{name} obstruktis retpostodomeno %{target}" create_custom_emoji_html: "%{name} adchargis nova emocimajo %{target}" create_domain_allow_html: "%{name} permisis federato kun domeno %{target}" create_domain_block_html: "%{name} obstruktis domeno %{target}" create_email_domain_block_html: "%{name} obstruktis retpostodomeno %{target}" create_ip_block_html: "%{name} kreis regulo por IP %{target}" create_unavailable_domain_html: "%{name} cesis sendo a domeno %{target}" + create_user_role_html: "%{name} kreis rolo di %{target}" demote_user_html: "%{name} despromocis uzanto %{target}" destroy_announcement_html: "%{name} efacis anunco %{target}" - destroy_custom_emoji_html: "%{name} destruktis emocimajo %{target}" + destroy_canonical_email_block_html: "%{name} obstruktis retpostodomeno %{target}" + destroy_custom_emoji_html: "%{name} efacis emocimajo %{target}" destroy_domain_allow_html: "%{name} despermisis federato kun domeno %{target}" destroy_domain_block_html: "%{name} deobstruktis domeno %{target}" destroy_email_domain_block_html: "%{name} deobstruktis retpostodomeno %{target}" @@ -305,6 +316,7 @@ io: destroy_ip_block_html: "%{name} efacis regulo por IP %{target}" destroy_status_html: "%{name} efacis posto da %{target}" destroy_unavailable_domain_html: "%{name} durigis sendo a domeno %{target}" + destroy_user_role_html: "%{name} efacis rolo di %{target}" disable_2fa_user_html: "%{name} desaktivigis 2-faktorbezono por uzanto %{target}" disable_custom_emoji_html: "%{name} desaktivigis emocimajo %{target}" disable_sign_in_token_auth_user_html: "%{name} desaktivigis retpostofichyurizo por %{target}" @@ -331,8 +343,9 @@ io: update_announcement_html: "%{name} novigis anunco %{target}" update_custom_emoji_html: "%{name} novigis emocimajo %{target}" update_domain_block_html: "%{name} novigis domenobstrukto por %{target}" + update_ip_block_html: "%{name} kreis regulo por IP %{target}" update_status_html: "%{name} novigis posto da %{target}" - deleted_status: "(efacita posto)" + update_user_role_html: "%{name} chanjis rolo di %{target}" empty: Nula logi. filter_by_action: Filtrez segun ago filter_by_user: Filtrez segun uzanto @@ -795,7 +808,7 @@ io: title: Permisez neyurizita aceso a publika tempolineo title: Site Settings trendable_by_default: - desc_html: Efektigas hashtagi quo ante nepermisesis + desc_html: Partikulara trendoza kontenajo povas ankore videbla nepermisesar title: Permisez hashtagi divenies tendencoza sen bezonata kontrolo trends: desc_html: Publika montrez antee kontrolita kontenajo quo nun esas tendencoza @@ -1181,6 +1194,8 @@ io: edit: add_keyword: Insertez klefvorto keywords: Klefvorti + statuses: Individuala posti + statuses_hint_html: Ca filtrilo aplikesas a selektita posti ne segun kad oli parigesas kun basa klefvorti. Kontrolez o efacez posti de la filtrilo. title: Modifikez filtrilo errors: deprecated_api_multiple_keywords: Ca parametri ne povas chanjesar per ca softwaro pro quo oli efektigas plu kam 1 filtrilklefvorto. Uzez plu recenta softwaro o interretintervizajo. @@ -1194,10 +1209,23 @@ io: keywords: one: "%{count} klefvorto" other: "%{count} klefvorti" + statuses: + one: "%{count} posto" + other: "%{count} posti" + statuses_long: + one: "%{count} posto celesas" + other: "%{count} posti celesas" title: Filtrili new: save: Salvez nova filtrilo title: Insertez nova filtrilo + statuses: + back_to_filter: Retrovenez a filtrilo + batch: + remove: Efacez de filtrilo + index: + hint: Ca filtrilo aplikesas a selektita posti ne segun altra kriterio. Vu povas pozar plu multa posti a ca filtrilo de retintervizajo. + title: Filtrita posti footer: developers: Developeri more: Pluse… @@ -1205,12 +1233,22 @@ io: trending_now: Nuna tendenco generic: all: Omna + all_items_on_page_selected_html: + one: "%{count} kozo sur ca sito selektesas." + other: Omna %{count} kozi sur ca sito selektesas. + all_matching_items_selected_html: + one: "%{count} kozo quo parigesas kun vua trovato selektesas." + other: Omna %{count} kozi quo parigesas kun vua trovato selektesas. changes_saved_msg: Chanji senprobleme konservita! copy: Kopiez delete: Efacez + deselect: Deselektez omno none: Nulo order_by: Asortez quale save_changes: Konservar la chanji + select_all_matching_items: + one: Selektez %{count} kozo quo parigesas kun vua trovato. + other: Selektez omna %{count} kozi quo parigesas kun vua trovato. today: hodie validation_errors: one: Ulo ne eventis senprobleme! Voluntez konsultar la suba eror-raporto @@ -1319,17 +1357,6 @@ io: subject: "%{name} sendis raporto" sign_up: subject: "%{name} registris" - digest: - action: Videz omna avizi - body: Yen mikra rezumo di to, depos ke tu laste vizitis en %{since} - mention: "%{name} mencionis tu en:" - new_followers_summary: - one: Tu obtenis nova sequanto! Yey! - other: Tu obtenis %{count} nova sequanti! Astonive! - subject: - one: "1 nova avizo de pos vua antea vizito 🐘" - other: "%{count} nova avizi de pos vua antea vizito 🐘" - title: Dum vua neprezenteso... favourite: body: "%{name} favoris tua mesajo:" subject: "%{name} favoris tua mesajo" diff --git a/config/locales/is.yml b/config/locales/is.yml index db856011bde..841645c91d3 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -235,17 +235,21 @@ is: approve_user: Samþykkja notanda assigned_to_self_report: Úthluta kæru change_email_user: Skipta um tölvupóstfang notanda + change_role_user: Breyta hlutverki notanda confirm_user: Staðfesta notanda create_account_warning: Útbúa aðvörun create_announcement: Búa til tilkynningu + create_canonical_email_block: Búa til útilokunarblokk tölvupósts create_custom_emoji: Búa til sérsniðið tjáningartákn create_domain_allow: Búa til lén leyft create_domain_block: Búa til útilokun léns create_email_domain_block: Búa til útilokun tölvupóstléns create_ip_block: Búa til IP-reglu create_unavailable_domain: Útbúa lén sem ekki er tiltækt + create_user_role: Útbúa hlutverk demote_user: Lækka notanda í tign destroy_announcement: Eyða tilkynningu + destroy_canonical_email_block: Eyða útilokunarblokk tölvupósts destroy_custom_emoji: Eyða sérsniðnu tjáningartákni destroy_domain_allow: Eyða léni leyft destroy_domain_block: Eyða útilokun léns @@ -254,6 +258,7 @@ is: destroy_ip_block: Eyða IP-reglu destroy_status: Eyða færslu destroy_unavailable_domain: Eyða léni sem ekki er tiltækt + destroy_user_role: Eyða hlutverki disable_2fa_user: Gera tveggja-þátta auðkenningu óvirka disable_custom_emoji: Gera sérsniðið tjáningartákn óvirkt disable_sign_in_token_auth_user: Gera óvirka auðkenningu með teikni í tölvupósti fyrir notandann @@ -280,24 +285,30 @@ is: update_announcement: Uppfæra tilkynningu update_custom_emoji: Uppfæra sérsniðið tjáningartákn update_domain_block: Uppfæra útilokun léns + update_ip_block: Uppfæra reglu IP-vistfangs update_status: Uppfæra færslu + update_user_role: Uppfæra hlutverk actions: approve_appeal_html: "%{name} samþykkti áfrýjun á ákvörðun umsjónarmanns frá %{target}" approve_user_html: "%{name} samþykkti nýskráningu frá %{target}" assigned_to_self_report_html: "%{name} úthlutaði kæru %{target} til sín" change_email_user_html: "%{name} breytti tölvupóstfangi fyrir notandann %{target}" + change_role_user_html: "%{name} breytti hlutverki %{target}" confirm_user_html: "%{name} staðfesti tölvupóstfang fyrir notandann %{target}" create_account_warning_html: "%{name} sendi aðvörun til %{target}" create_announcement_html: "%{name} útbjó nýja tilkynningu %{target}" + create_canonical_email_block_html: "%{name} útilokaði tölvupóst með tætigildið %{target}" create_custom_emoji_html: "%{name} sendi inn nýtt tjáningartákn %{target}" create_domain_allow_html: "%{name} leyfði skýjasamband með léninu %{target}" create_domain_block_html: "%{name} útilokaði lénið %{target}" create_email_domain_block_html: "%{name} útilokaði póstlénið %{target}" create_ip_block_html: "%{name} útbjó reglu fyrir IP-vistfangið %{target}" create_unavailable_domain_html: "%{name} stöðvaði afhendingu til lénsins %{target}" + create_user_role_html: "%{name} útbjó %{target} hlutverk" demote_user_html: "%{name} lækkaði notandann %{target} í tign" destroy_announcement_html: "%{name} eyddi tilkynninguni %{target}" - destroy_custom_emoji_html: "%{name} henti út tjáningartákninu %{target}" + destroy_canonical_email_block_html: "%{name} tók af útilokun á tölvupósti með tætigildið %{target}" + destroy_custom_emoji_html: "%{name} eyddi emoji-tákni %{target}" destroy_domain_allow_html: "%{name} bannaði skýjasamband með léninu %{target}" destroy_domain_block_html: "%{name} aflétti útilokun af léninu %{target}" destroy_email_domain_block_html: "%{name} aflétti útilokun af póstléninu %{target}" @@ -305,6 +316,7 @@ is: destroy_ip_block_html: "%{name} eyddi reglu fyrir IP-vistfangið %{target}" destroy_status_html: "%{name} fjarlægði færslu frá %{target}" destroy_unavailable_domain_html: "%{name} hóf aftur afhendingu til lénsins %{target}" + destroy_user_role_html: "%{name} eyddi hlutverki %{target}" disable_2fa_user_html: "%{name} gerði kröfu um tveggja-þátta innskráningu óvirka fyrir notandann %{target}" disable_custom_emoji_html: "%{name} gerði tjáningartáknið %{target} óvirkt" disable_sign_in_token_auth_user_html: "%{name} gerði óvirka auðkenningu með teikni í tölvupósti fyrir %{target}" @@ -331,8 +343,9 @@ is: update_announcement_html: "%{name} uppfærði tilkynningu %{target}" update_custom_emoji_html: "%{name} uppfærði tjáningartáknið %{target}" update_domain_block_html: "%{name} uppfærði útilokun lénsins %{target}" + update_ip_block_html: "%{name} breytti reglu fyrir IP-vistfangið %{target}" update_status_html: "%{name} uppfærði færslu frá %{target}" - deleted_status: "(eydd færsla)" + update_user_role_html: "%{name} breytti hlutverki %{target}" empty: Engar atvikaskrár fundust. filter_by_action: Sía eftir aðgerð filter_by_user: Sía eftir notanda @@ -795,11 +808,11 @@ is: title: Leyfa óauðkenndan aðgang að opinberri tímalínu title: Stillingar vefsvæðis trendable_by_default: - desc_html: Hefur áhrif á myllumerki sem ekki hafa áður verið gerð óleyfileg - title: Leyfa myllumerkjum að fara í umræðuna án þess að þau séu fyrst yfirfarin + desc_html: Sérstakt vinsælt efni er eftir sem áður hægt að banna sérstaklega + title: Leyfa vinsælt efni án undanfarandi yfirferðar trends: desc_html: Birta opinberlega þau áður yfirförnu myllumerki sem eru núna í umræðunni - title: Myllumerki í umræðunni + title: Vinsælt site_uploads: delete: Eyða innsendri skrá destroyed_msg: Það tókst að eyða innsendingu á vefsvæði! @@ -1182,7 +1195,7 @@ is: add_keyword: Bæta við stikkorði keywords: Stikkorð statuses: Einstakar færslur - statuses_hint_html: Þessi sía virkar til að velja stakar færslur burtséð frá því hvort þær samsvari stikkorðunum hér fyrir neðan. Þú getur yfirfarið þessar færslur og fjarlægt þær úr síunni með því að smella hér. + statuses_hint_html: Þessi sía virkar til að velja stakar færslur án tillits til annarra skilyrða. Yfirfarðu eða fjarlægðu færslur úr síunni. title: Breyta síu errors: deprecated_api_multiple_keywords: Þessum viðföngum er ekki hægt að breyta úr þessu forriti, þar sem þau eiga við fleiri en eitt stikkorð síu. Notaðu nýrra forrit eða farðu í vefviðmótið. @@ -1220,12 +1233,22 @@ is: trending_now: Í umræðunni núna generic: all: Allt + all_items_on_page_selected_html: + one: "%{count} atriði á þessari síðu er valið." + other: Öll %{count} atriðin á þessari síðu eru valin. + all_matching_items_selected_html: + one: "%{count} atriði sem samsvarar leitinni þinni er valið." + other: Öll %{count} atriðin sem samsvara leitinni þinni eru valin. changes_saved_msg: Það tókst að vista breytingarnar! copy: Afrita delete: Eyða + deselect: Afvelja allt none: Ekkert order_by: Raða eftir save_changes: Vista breytingar + select_all_matching_items: + one: Veldu %{count} atriði sem samsvarar leitinni þinni. + other: Veldu öll %{count} atriðin sem samsvara leitinni þinni. today: í dag validation_errors: one: Ennþá er ekk alvegi allt í lagi! Skoðaðu vel villuna hér fyrir neðan @@ -1334,17 +1357,6 @@ is: subject: "%{name} sendi inn kæru" sign_up: subject: "%{name} nýskráði sig" - digest: - action: Skoða allar tilkynningar - body: Hér er stutt yfirlit yfir þau skilaboð sem þú gætir hafa misst af síðan þú leist inn síðast %{since} - mention: "%{name} minntist á þig í:" - new_followers_summary: - one: Að auki, þú hefur fengið einn nýjan fylgjanda á meðan þú varst fjarverandi! Húh! - other: Að auki, þú hefur fengið %{count} nýja fylgjendur á meðan þú varst fjarverandi! Frábært! - subject: - one: "1 ný tilkynning síðan þú leist inn síðast 🐘" - other: "%{count} nýjar tilkynningar síðan þú leist inn síðast 🐘" - title: Á meðan þú varst fjarverandi... favourite: body: 'Færslan þín var sett í eftirlæti af %{name}:' subject: "%{name} setti færsluna þína í eftirlæti" diff --git a/config/locales/it.yml b/config/locales/it.yml index f269cc542ac..ff3120f34c3 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -235,17 +235,21 @@ it: approve_user: Approva Utente assigned_to_self_report: Assegna report change_email_user: Cambia l'e-mail per l'utente + change_role_user: Cambia il Ruolo dell'Utente confirm_user: Conferma utente create_account_warning: Crea avviso create_announcement: Crea un annuncio + create_canonical_email_block: Crea Blocco E-mail create_custom_emoji: Crea emoji personalizzata create_domain_allow: Crea permesso di dominio create_domain_block: Crea blocco di dominio create_email_domain_block: Crea blocco dominio e-mail create_ip_block: Crea regola IP create_unavailable_domain: Crea dominio non disponibile + create_user_role: Crea Ruolo demote_user: Degrada l'utente destroy_announcement: Cancella annuncio + destroy_canonical_email_block: Elimina Blocco E-mail destroy_custom_emoji: Cancella emoji personalizzata destroy_domain_allow: Cancella permesso di dominio destroy_domain_block: Cancella blocco di dominio @@ -254,6 +258,7 @@ it: destroy_ip_block: Elimina regola IP destroy_status: Cancella stato destroy_unavailable_domain: Elimina dominio non disponibile + destroy_user_role: Distruggi Ruolo disable_2fa_user: Disabilita l'autenticazione a due fattori disable_custom_emoji: Disabilita emoji personalizzata disable_sign_in_token_auth_user: Disabilita autenticazione con codice via email per l'utente @@ -280,24 +285,30 @@ it: update_announcement: Aggiorna annuncio update_custom_emoji: Aggiorna emoji personalizzata update_domain_block: Aggiorna blocco di dominio + update_ip_block: Aggiorna regola IP update_status: Aggiorna stato + update_user_role: Aggiorna Ruolo actions: approve_appeal_html: "%{name} ha approvato il ricorso contro la decisione di moderazione da %{target}" approve_user_html: "%{name} ha approvato la registrazione da %{target}" assigned_to_self_report_html: "%{name} ha assegnato il rapporto %{target} a se stesso" change_email_user_html: "%{name} ha cambiato l'indirizzo e-mail dell'utente %{target}" + change_role_user_html: "%{name} ha cambiato il ruolo di %{target}" confirm_user_html: "%{name} ha confermato l'indirizzo e-mail dell'utente %{target}" create_account_warning_html: "%{name} ha inviato un avviso a %{target}" create_announcement_html: "%{name} ha creato un nuovo annuncio %{target}" + create_canonical_email_block_html: "%{name} ha bloccato l'e-mail con l'hash %{target}" create_custom_emoji_html: "%{name} ha caricato una nuova emoji %{target}" create_domain_allow_html: "%{name} ha consentito alla federazione col dominio %{target}" create_domain_block_html: "%{name} ha bloccato dominio %{target}" create_email_domain_block_html: "%{name} ha bloccato dominio e-mail %{target}" create_ip_block_html: "%{name} ha creato una regola per l'IP %{target}" create_unavailable_domain_html: "%{name} ha interrotto la consegna al dominio %{target}" + create_user_role_html: "%{name} ha creato il ruolo %{target}" demote_user_html: "%{name} ha retrocesso l'utente %{target}" destroy_announcement_html: "%{name} ha eliminato l'annuncio %{target}" - destroy_custom_emoji_html: "%{name} ha eliminato emoji %{target}" + destroy_canonical_email_block_html: "%{name} ha sbloccato l'email con l'hash %{target}" + destroy_custom_emoji_html: "%{name} ha eliminato l'emoji %{target}" destroy_domain_allow_html: "%{name} ha negato la federazione al dominio %{target}" destroy_domain_block_html: "%{name} ha sbloccato dominio %{target}" destroy_email_domain_block_html: "%{name} ha sbloccato il dominio e-mail %{target}" @@ -305,6 +316,7 @@ it: destroy_ip_block_html: "%{name} ha eliminato la regola per l'IP %{target}" destroy_status_html: "%{name} ha eliminato lo status di %{target}" destroy_unavailable_domain_html: "%{name} ha ripreso la consegna al dominio %{target}" + destroy_user_role_html: "%{name} ha eliminato il ruolo %{target}" disable_2fa_user_html: "%{name} ha disabilitato l'autenticazione a due fattori per l'utente %{target}" disable_custom_emoji_html: "%{name} ha disabilitato emoji %{target}" disable_sign_in_token_auth_user_html: "%{name} ha disabilitato l'autenticazione con codice via email per %{target}" @@ -331,8 +343,9 @@ it: update_announcement_html: "%{name} ha aggiornato l'annuncio %{target}" update_custom_emoji_html: "%{name} ha aggiornato emoji %{target}" update_domain_block_html: "%{name} ha aggiornato il blocco dominio per %{target}" + update_ip_block_html: "%{name} ha cambiato la regola per l'IP %{target}" update_status_html: "%{name} ha aggiornato lo status di %{target}" - deleted_status: "(stato cancellato)" + update_user_role_html: "%{name} ha modificato il ruolo %{target}" empty: Nessun log trovato. filter_by_action: Filtra per azione filter_by_user: Filtra per utente @@ -795,8 +808,8 @@ it: title: Anteprima timeline title: Impostazioni sito trendable_by_default: - desc_html: Interessa gli hashtag che non sono stati precedentemente disattivati - title: Permetti agli hashtag di comparire nei trend senza prima controllarli + desc_html: I contenuti di tendenza specifici possono ancora essere esplicitamente vietati + title: Consenti tendenze senza controllo preliminare trends: desc_html: Visualizza pubblicamente gli hashtag precedentemente esaminati che sono attualmente in tendenza title: Hashtag di tendenza @@ -1183,6 +1196,8 @@ it: edit: add_keyword: Aggiungi parola chiave keywords: Parole chiave + statuses: Post singoli + statuses_hint_html: Questo filtro si applica a singoli post indipendentemente dal fatto che corrispondano alle parole chiave qui sotto. Rivedi o rimuovi i post dal filtro. title: Modifica filtro errors: deprecated_api_multiple_keywords: Questi parametri non possono essere modificati da questa applicazione perché si applicano a più di una parola chiave che fa da filtro. Utilizzare un'applicazione più recente o l'interfaccia web. @@ -1196,10 +1211,23 @@ it: keywords: one: "%{count} parola chiave" other: "%{count} parole chiave" + statuses: + one: "%{count} post" + other: "%{count} post" + statuses_long: + one: "%{count} singolo post nascosto" + other: "%{count} singoli post nascosti" title: Filtri new: save: Salva nuovo filtro title: Aggiungi filtro + statuses: + back_to_filter: Torna al filtro + batch: + remove: Togli dal filtro + index: + hint: Questo filtro si applica a singoli post indipendentemente da altri criteri. Puoi aggiungere più post a questo filtro dall'interfaccia Web. + title: Post filtrati footer: developers: Sviluppatori more: Altro… @@ -1207,12 +1235,22 @@ it: trending_now: Di tendenza ora generic: all: Tutto + all_items_on_page_selected_html: + one: "%{count} elemento su questa pagina è selezionato." + other: Tutti i %{count} elementi su questa pagina sono selezionati. + all_matching_items_selected_html: + one: "%{count} elemento corrispondente alla tua ricerca è selezionato." + other: Tutti i %{count} elementi corrispondenti alla tua ricerca sono selezionati. changes_saved_msg: Modifiche effettuate con successo! copy: Copia delete: Cancella + deselect: Deseleziona tutto none: Nessuno order_by: Ordina per save_changes: Salva modifiche + select_all_matching_items: + one: Seleziona %{count} elemento corrispondente alla tua ricerca. + other: Seleziona tutti gli elementi %{count} corrispondenti alla tua ricerca. today: oggi validation_errors: one: Qualcosa ancora non va bene! Per favore, controlla l'errore qui sotto @@ -1321,17 +1359,6 @@ it: subject: "%{name} ha inviato una segnalazione" sign_up: subject: "%{name} si è iscritto" - digest: - action: Vedi tutte le notifiche - body: Ecco un breve riassunto di quello che ti sei perso dalla tua ultima visita del %{since} - mention: "%{name} ti ha menzionato:" - new_followers_summary: - one: E inoltre hai ricevuto un nuovo seguace mentre eri assente! Urrà! - other: Inoltre, hai acquisito %{count} nuovi seguaci mentre eri assente! Incredibile! - subject: - one: "1 nuova notifica dalla tua ultima visita 🐘" - other: "%{count} nuove notifiche dalla tua ultima visita 🐘" - title: In tua assenza… favourite: body: 'Il tuo status è stato apprezzato da %{name}:' subject: "%{name} ha apprezzato il tuo status" diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 5dccf1a4334..133835b5899 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -284,7 +284,6 @@ ja: create_unavailable_domain_html: "%{name}がドメイン %{target}への配送を停止しました" demote_user_html: "%{name}さんが%{target}さんを降格しました" destroy_announcement_html: "%{name}さんがお知らせ %{target}を削除しました" - destroy_custom_emoji_html: "%{name}さんがカスタム絵文字 %{target}を削除しました" destroy_domain_allow_html: "%{name}さんが%{target}の連合許可を外しました" destroy_domain_block_html: "%{name}さんがドメイン %{target}のブロックを外しました" destroy_email_domain_block_html: "%{name}さんが%{target}をメールドメインブロックから外しました" @@ -319,7 +318,6 @@ ja: update_custom_emoji_html: "%{name}さんがカスタム絵文字 %{target}を更新しました" update_domain_block_html: "%{name}さんが%{target}のドメインブロックを更新しました" update_status_html: "%{name}さんが%{target}さんの投稿を更新しました" - deleted_status: "(削除済)" empty: ログが見つかりませんでした filter_by_action: アクションでフィルター filter_by_user: ユーザーでフィルター @@ -761,9 +759,6 @@ ja: desc_html: ランディングページに公開タイムラインへのリンクを表示し、認証なしでの公開タイムラインへのAPIアクセスを許可します title: 公開タイムラインへの未認証のアクセスを許可する title: サイト設定 - trendable_by_default: - desc_html: 表示を拒否していないハッシュタグに影響します - title: 審査前のハッシュタグのトレンドへの表示を許可する trends: desc_html: 現在トレンドになっている承認済みのハッシュタグを公開します title: トレンドタグを有効にする @@ -1264,15 +1259,6 @@ ja: subject: "%{name} がレポートを送信しました" sign_up: subject: "%{name}さんがサインアップしました" - digest: - action: 全ての通知を表示 - body: '最後のログイン(%{since})からの出来事:' - mention: "%{name}さんがあなたに返信しました:" - new_followers_summary: - other: また、離れている間に%{count}人の新たなフォロワーを獲得しました! - subject: - other: "前回の訪問から%{count}件の新しい通知 🐘" - title: 不在の間に… favourite: body: "%{name}さんにお気に入り登録された、あなたの投稿があります:" subject: "%{name}さんにお気に入りに登録されました" diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 9948ae49394..288e50edd6b 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -115,7 +115,6 @@ ka: username: მომხმარებლის სახელი web: ვები action_logs: - deleted_status: "(გაუქმებული სტატუსი)" title: აუდიტის ლოგი custom_emojis: by_domain: დომენი @@ -438,14 +437,6 @@ ka: moderation: title: მოდერაცია notification_mailer: - digest: - action: ყველა შეტყობინების ჩვენება - body: 'აქ მოკლე შინაარსია წერილების, რომლებიც გამოგეპარათ წინა სტუმრობის შემდეგ: %{since}' - mention: "%{name}-მა დაგასახელათ:" - new_followers_summary: - one: ასევე, არყოფნისას შეგეძინათ ერთი ახალი მიმდევარი! იეი! - other: ასევე, არყოფნისას შეგეძინათ %{count} ახალი მიმდევარი! შესანიშნავია! - title: თქვენს არყოფნაში... favourite: body: 'თქვენი სტატუსი ფავორიტი გახადა %{name}-მა:' subject: "%{name}-მა თქვენი სტატუსი გახადა ფავორიტი" diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 4fac9a7964b..8096b95f4d8 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -223,7 +223,6 @@ kab: create_unavailable_domain_html: "%{name} iseḥbes asiweḍ ɣer taɣult %{target}" demote_user_html: "%{name} iṣubb-d deg usellun aseqdac %{target}" destroy_announcement_html: "%{name} yekkes taselɣut %{target}" - destroy_custom_emoji_html: "%{name} ihudd imuji %{target}" destroy_domain_allow_html: "%{name} yekkes taɣult %{target} seg tebdart tamellalt" destroy_domain_block_html: "%{name} yekkes aseḥbes n taɣult %{target}" destroy_email_domain_block_html: "%{name} yekkes asewḥel i taɣult n imayl %{target}" @@ -247,7 +246,6 @@ kab: update_custom_emoji_html: "%{name} ileqqem imuji %{target}" update_domain_block_html: "%{name} ileqqem iḥder n taɣult i %{target}" update_status_html: "%{name} ileqqem tasufeɣt n %{target}" - deleted_status: "(tasuffeɣt tettwakkes)" empty: Ulac iɣmisen i yellan. filter_by_action: Fren s tigawt filter_by_user: Sizdeg s useqdac @@ -632,9 +630,6 @@ kab: incoming_migrations: Tusiḍ-d seg umiḍan nniḍen proceed_with_move: Awid imeḍfaṛen-ik notification_mailer: - digest: - action: Wali akk tilγa - mention: 'Yuder-ik-id %{name} deg:' favourite: subject: "%{name} yesmenyaf addad-ik·im" follow: diff --git a/config/locales/kk.yml b/config/locales/kk.yml index b12f791636a..b1c92f7eb16 100644 --- a/config/locales/kk.yml +++ b/config/locales/kk.yml @@ -175,7 +175,6 @@ kk: web: Веб whitelisted: Рұқсат тізімі action_logs: - deleted_status: "(өшірілген жазба)" title: Аудит логы announcements: destroyed_msg: Анонс сәтті өшірілді! @@ -405,9 +404,6 @@ kk: desc_html: Display public timeline on лендинг пейдж title: Таймлайн превьюі title: Сайт баптаулары - trendable_by_default: - desc_html: Бұрын тыйым салынбаған хэштегтерге әсер етеді - title: Хэштегтерге алдын-ала шолусыз тренд беруге рұқсат етіңіз trends: desc_html: Бұрын қарастырылған хэштегтерді қазіргі уақытта трендте көпшілікке көрсету title: Тренд хештегтер @@ -685,14 +681,6 @@ kk: moderation: title: Модерация notification_mailer: - digest: - action: Барлық ескертпелер - body: Міне, соңғы кірген уақыттан кейін келген хаттардың қысқаша мазмұны %{since} - mention: "%{name} сізді атап өтіпті:" - new_followers_summary: - one: Сондай-ақ, сіз бір жаңа оқырман таптыңыз! Алақай! - other: Сондай-ақ, сіз %{count} жаңа оқырман таптыңыз! Керемет! - title: Сіз жоқ кезде... favourite: body: 'Жазбаңызды ұнатып, таңдаулыға қосты %{name}:' subject: "%{name} жазбаңызды таңдаулыға қосты" diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 4788365c277..102d853938b 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -230,17 +230,21 @@ ko: approve_user: 사용자 승인 assigned_to_self_report: 신고 맡기 change_email_user: 사용자의 이메일 변경 + change_role_user: 사용자 역할 변경 confirm_user: 사용자 확인 create_account_warning: 경고 생성 create_announcement: 공지사항 생성 + create_canonical_email_block: 이메일 차단 생성 create_custom_emoji: 커스텀 에모지 생성 create_domain_allow: 도메인 허용 생성 create_domain_block: 도메인 차단 추가 create_email_domain_block: 이메일 도메인 차단 생성 create_ip_block: IP 규칙 만들기 create_unavailable_domain: 사용 불가능한 도메인 생성 + create_user_role: 역할 생성 demote_user: 사용자 강등 destroy_announcement: 공지사항 삭제 + destroy_canonical_email_block: 이메일 차단 삭제 destroy_custom_emoji: 커스텀 에모지 삭제 destroy_domain_allow: 도메인 허용 삭제 destroy_domain_block: 도메인 차단 삭제 @@ -249,6 +253,7 @@ ko: destroy_ip_block: IP 규칙 삭제 destroy_status: 게시물 삭제 destroy_unavailable_domain: 사용 불가능한 도메인 제거 + destroy_user_role: 역할 삭제 disable_2fa_user: 2단계 인증 비활성화 disable_custom_emoji: 커스텀 에모지 비활성화 disable_sign_in_token_auth_user: 사용자에 대한 이메일 토큰 인증 비활성화 @@ -275,24 +280,30 @@ ko: update_announcement: 공지사항 업데이트 update_custom_emoji: 커스텀 에모지 업데이트 update_domain_block: 도메인 차단 갱신 + update_ip_block: IP 규칙 수정 update_status: 게시물 게시 + update_user_role: 역할 수정 actions: approve_appeal_html: "%{name} 님이 %{target}의 중재 결정에 대한 이의제기를 승인했습니다" approve_user_html: "%{name} 님이 %{target}의 가입을 승인했습니다" assigned_to_self_report_html: "%{name} 님이 신고 %{target}을 자신에게 할당했습니다" change_email_user_html: "%{name} 님이 사용자 %{target}의 이메일 주소를 변경했습니다" + change_role_user_html: "%{name} 님이 %{target} 님의 역할을 수정했습니다" confirm_user_html: "%{name} 님이 사용자 %{target}의 이메일 주소를 승인했습니다" create_account_warning_html: "%{name} 님이 %{target}에게 경고를 보냈습니다" create_announcement_html: "%{name} 님이 새 공지 %{target}을 만들었습니다" + create_canonical_email_block_html: "%{name} 님이 %{target} 해시를 가진 이메일을 차단했습니다" create_custom_emoji_html: "%{name} 님이 새로운 에모지 %{target}를 업로드 했습니다" create_domain_allow_html: "%{name} 님이 %{target} 도메인을 허용리스트에 넣었습니다" create_domain_block_html: "%{name} 님이 도메인 %{target}를 차단했습니다" create_email_domain_block_html: "%{name} 님이 이메일 도메인 %{target}를 차단했습니다" create_ip_block_html: "%{name} 님이 IP 규칙 %{target}을 만들었습니다" create_unavailable_domain_html: "%{name} 님이 도메인 %{target}에 대한 전달을 중지했습니다" + create_user_role_html: "%{name} 님이 %{target} 역할을 생성했습니다" demote_user_html: "%{name} 님이 사용자 %{target} 님을 강등했습니다" destroy_announcement_html: "%{name} 님이 공지 %{target}을 삭제했습니다" - destroy_custom_emoji_html: "%{name} 님이 %{target} 에모지를 삭제했습니다" + destroy_canonical_email_block_html: "%{name} 님이 %{target} 해시를 가진 이메일을 차단 해제했습니다" + destroy_custom_emoji_html: "%{name} 님이 에모지 %{target}를 삭제했습니다" destroy_domain_allow_html: "%{name} 님이 %{target} 도메인과의 연합을 금지했습니다" destroy_domain_block_html: "%{name} 님이 도메인 %{target}의 차단을 해제했습니다" destroy_email_domain_block_html: "%{name} 님이 이메일 도메인 %{target}을 차단 해제하였습니다" @@ -300,6 +311,7 @@ ko: destroy_ip_block_html: "%{name} 님이 IP 규칙 %{target}을 삭제하였습니다" destroy_status_html: "%{name} 님이 %{target}의 게시물을 삭제했습니다" destroy_unavailable_domain_html: "%{name} 님이 도메인 %{target}에 대한 전달을 재개" + destroy_user_role_html: "%{name} 님이 %{target} 역할을 삭제했습니다" disable_2fa_user_html: "%{name} 님이 사용자 %{target}의 2FA를 비활성화 했습니다" disable_custom_emoji_html: "%{name} 님이 에모지 %{target}를 비활성화 했습니다" disable_sign_in_token_auth_user_html: "%{name} 님이 %{target} 님의 이메일 토큰 인증을 비활성화 했습니다" @@ -326,8 +338,9 @@ ko: update_announcement_html: "%{name} 님이 공지사항 %{target}을 갱신했습니다" update_custom_emoji_html: "%{name} 님이 에모지 %{target}를 업데이트 했습니다" update_domain_block_html: "%{name} 님이 %{target}에 대한 도메인 차단을 갱신했습니다" + update_ip_block_html: "%{name} 님이 IP 규칙 %{target}을 수정했습니다" update_status_html: "%{name} 님이 %{target}의 게시물을 업데이트 했습니다" - deleted_status: "(삭제된 게시물)" + update_user_role_html: "%{name} 님이 %{target} 역할을 수정했습니다" empty: 로그를 찾을 수 없습니다 filter_by_action: 행동으로 거르기 filter_by_user: 사용자로 거르기 @@ -781,8 +794,8 @@ ko: title: 타임라인 프리뷰 title: 사이트 설정 trendable_by_default: - desc_html: 이전에 거부되지 않은 해시태그들에 영향을 미칩니다 - title: 해시태그가 사전 리뷰 없이 트렌드에 올라갈 수 있도록 허용 + desc_html: 특정 트렌드를 허용시키지 않는 것은 여전히 가능합니다 + title: 사전 리뷰 없이 트렌드에 오르는 것을 허용 trends: desc_html: 리뷰를 거친 해시태그를 유행하는 해시태그에 공개적으로 보여줍니다 title: 유행하는 해시태그 @@ -1164,7 +1177,7 @@ ko: add_keyword: 키워드 추가 keywords: 키워드 statuses: 개별 게시물 - statuses_hint_html: 이 필터는 아래 키워드들의 매치 여부와는 관계 없이 선택된 개별적인 게시물들에 적용됩니다. 다음 게시물들을 검토하고 여기를 클릭해 필터에서 제거할 수 있습니다. + statuses_hint_html: 이 필터는 아래의 키워드에 매칭되는지 여부와 관계 없이 몇몇개의 게시물들에 별개로 적용되었습니다. 검토하거나 필터에서 삭제하세요 title: 필터 편집 errors: deprecated_api_multiple_keywords: 이 파라미터들은 하나를 초과하는 필터 키워드에 적용되기 때문에 이 응용프로그램에서 수정될 수 없습니다. 더 최신의 응용프로그램이나 웹 인터페이스를 사용하세요. @@ -1199,12 +1212,19 @@ ko: trending_now: 지금 유행중 generic: all: 모두 + all_items_on_page_selected_html: + other: 현재 페이지에서 %{count} 개의 항목이 선택되었습니다 + all_matching_items_selected_html: + other: 검색에 잡히는 %{count} 개의 항목이 선택되었습니다 changes_saved_msg: 정상적으로 변경되었습니다! copy: 복사 delete: 삭제 + deselect: 전체 선택 해제 none: 없음 order_by: 순서 save_changes: 변경 사항을 저장 + select_all_matching_items: + other: 검색에 잡힌 %{count} 개의 항목을 모두 선택하기 today: 오늘 validation_errors: other: 오류가 발생했습니다. 아래 %{count}개 오류를 확인해 주십시오 @@ -1311,15 +1331,6 @@ ko: subject: "%{name} 님이 신고를 제출했습니다" sign_up: subject: "%{name} 님이 가입했습니다" - digest: - action: 모든 알림 보기 - body: 마지막 로그인(%{since}) 이후로 일어난 일들에 관한 요약 - mention: "%{name} 님이 나를 언급했습니다:" - new_followers_summary: - other: 게다가, 접속하지 않은 동안 %{count} 명의 팔로워가 생겼습니다! - subject: - other: 마지막 방문 이후로 %{count} 건의 새로운 알림 - title: 당신이 없는 동안에... favourite: body: '당신의 게시물을 %{name} 님이 마음에 들어했습니다:' subject: "%{name} 님이 내 게시물을 마음에 들어했습니다" diff --git a/config/locales/ku.yml b/config/locales/ku.yml index 497876c6c18..b43e205d278 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -235,17 +235,21 @@ ku: approve_user: Bikarhêner bipejirîne assigned_to_self_report: Ragihandinê diyar bike change_email_user: E-nameya bikarhêner biguherîne + change_role_user: Rola bikarhêner biguherîne confirm_user: Bikarhêner bipejirîne create_account_warning: Hişyariyekê çê bike create_announcement: Daxûyaniyekê çê bike + create_canonical_email_block: Astengkirina e-nameyê biafirîne create_custom_emoji: Emojiyên kesanekirî çê bike create_domain_allow: Navpera ku destûr standiye peyda bike create_domain_block: Navpera ku asteng bûye ava bike create_email_domain_block: Navpera e-name yê de asteng kirinê peyda bike create_ip_block: Rêziknameya IPyê saz bike create_unavailable_domain: Navpera ku nayê bikaranîn pêk bîne + create_user_role: Rolê biafirîne demote_user: Bikarhênerê kaşê jêr bike destroy_announcement: Daxûyanîyê jê bibe + destroy_canonical_email_block: Astengkirina e-nameyê jê bibe destroy_custom_emoji: Emojîya kesanekirî jê bibe destroy_domain_allow: Navperên mafdayî jê bibe destroy_domain_block: Navperên astengkirî jê bibe @@ -254,6 +258,7 @@ ku: destroy_ip_block: Tomara IPyê jêbibe destroy_status: Şandiyê jê bibe destroy_unavailable_domain: Navperên tuneyî jê bibe + destroy_user_role: Rolê hilweşîne disable_2fa_user: 2FA neçalak bike disable_custom_emoji: Emojîya kesanekirî neçalak bike disable_sign_in_token_auth_user: Ji bo bikarhênerê piştrastkirina navnîşana e-name yê ya token neçalak bike @@ -280,24 +285,30 @@ ku: update_announcement: Daxûyaniyê rojane bike update_custom_emoji: Emojîya kesanekirî rojane bike update_domain_block: Navperên astengkirî rojane bike + update_ip_block: Rolê IP rojane bike update_status: Şandiyê rojane bike + update_user_role: Rolê rojane bike actions: approve_appeal_html: "%{name} îtiraza biryara çavdêriyê ji %{target} pejirand" approve_user_html: "%{name} tomarkirina ji %{target} pejirand" assigned_to_self_report_html: "%{name} ji xwe re ragihandinek %{target} hilda" change_email_user_html: "%{name} navnîşana e-nameya bikarhêner %{target} guherand" + change_role_user_html: "%{name} rolê %{target} guhert" confirm_user_html: "%{name} navnîşana e-nameya bikarhêner %{target} piştrast kir" create_account_warning_html: "%{name} ji bo %{target} hişyariyek şand" create_announcement_html: "%{name} agahdarkirineke nû çêkir %{target}" + create_canonical_email_block_html: "%{name} bi riya dabeşkirinê e-nameya %{target} asteng kir" create_custom_emoji_html: "%{name} emojîyeke nû ya %{target} bar kir" create_domain_allow_html: "%{name} bi navperê %{target} re maf da demnameya giştî" create_domain_block_html: "%{name} navpera %{target} asteng kir" create_email_domain_block_html: "%{name} e-nameya navperê %{target} asteng kir" create_ip_block_html: "%{name} ji bo IPya %{target} rêzikname saz kir" create_unavailable_domain_html: "%{name} bi navperê %{target} re gihandinê rawestand" + create_user_role_html: "%{name} rola %{target} afirand" demote_user_html: "%{name} bikarhênerê %{target} kaşê jêr kir" destroy_announcement_html: "%{name} daxûyaniyeke %{target} jê bir" - destroy_custom_emoji_html: "%{name} emojiya %{target} tune kir" + destroy_canonical_email_block_html: "%{name} bi riya dabeşkirinê astengiya li ser e-nameya %{target} rakir" + destroy_custom_emoji_html: "%{name} emojiya %{target} jê bir" destroy_domain_allow_html: "%{name} bi navperê %{target} re maf neda demnameya giştî" destroy_domain_block_html: "%{name} navpera %{target} asteng kir" destroy_email_domain_block_html: "%{name} astengiya li ser navpera e-nameyê %{target} rakir" @@ -305,6 +316,7 @@ ku: destroy_ip_block_html: "%{name}, ji bo IPya %{target} rêziknameyê jêbir" destroy_status_html: "%{name} ji alîyê %{target} ve şandiyê rakir" destroy_unavailable_domain_html: "%{name} bi navperê %{target} re gihandinê berdewam kir" + destroy_user_role_html: "%{name} rola %{target} jê bir" disable_2fa_user_html: "%{name} ji bo bikarhênerê %{target} du faktorî neçalak kir" disable_custom_emoji_html: "%{name} emojiya %{target} neçalak kir" disable_sign_in_token_auth_user_html: "%{name} ji bo %{target} nîşana mafdayîna e-nameya ne çalak kir" @@ -331,8 +343,9 @@ ku: update_announcement_html: "%{name} daxûyaniya %{target} rojane kir" update_custom_emoji_html: "%{name} emojiya %{target} rojane kir" update_domain_block_html: "%{name} ji bo navpera %{target} astengkirin rojane kir" + update_ip_block_html: "%{name} rolê %{target} guhert ji bo IP" update_status_html: "%{name} şandiya bikarhêner %{target} rojane kir" - deleted_status: "(şandiyeke jêbirî)" + update_user_role_html: "%{name} rola %{target} guherand" empty: Tomarkirin nehate dîtin. filter_by_action: Li gorî çalakiyê biparzinîne filter_by_user: Li gorî bikarhênerê biparzinîne @@ -797,8 +810,8 @@ ku: title: Mafê bide gihîştina ne naskirî bo demnameya gelemperî title: Sazkariyên malperê trendable_by_default: - desc_html: Hashtagên ku berê hatibûn qedexekirin bandor dike - title: Bihêle ku hashtag bêyî nirxandinek pêşîn bibe rojev + desc_html: Naveroka rojevê nîşankirî dikare were qedexekirin + title: Mafê bide rojevê bêyî ku were nirxandin trends: desc_html: Hashtagên ku berê hatibûn nirxandin ên ku niha rojev in bi gelemperî bide xuyakirin title: Hashtagên rojevê @@ -1183,6 +1196,8 @@ ku: edit: add_keyword: Kilîtpeyv tevî bike keywords: Peyvkilît + statuses: Şandiyên kesane + statuses_hint_html: Ev parzûn ji bo hibijartina şandiyên kesane tê sepandin bêyî ku ew bi peyvkilîtên jêrîn re lihevhatî bin. Şandiyan binirxîne an jî ji parzûnê rake. title: Parzûnê serrast bike errors: deprecated_api_multiple_keywords: Van parameteran ji vê sepanê nayên guhertin ji ber ku ew li ser bêtirî yek kilîtpeyvên parzûnkirî têne sepandin. Sepaneke nûtir an navrûya bikarhêneriyê ya malperê bi kar bîne. @@ -1196,10 +1211,23 @@ ku: keywords: one: "%{count} kilîtpeyv" other: "%{count} kilîtpeyv" + statuses: + one: "%{count} şandî" + other: "%{count} şandî" + statuses_long: + one: "%{count} şandiyê kesane yê veşartî" + other: "%{count} şandiyê kesane yê veşartî" title: Parzûn new: save: Parzûna nû tomar bike title: Parzûnek nû li zêde bike + statuses: + back_to_filter: Vegere bo parzûnê + batch: + remove: Ji parzûnê rake + index: + hint: Ev parzûn bêyî pîvanên din ji bo hilbijartina şandiyên kesane tê sepandin. Tu dikarî ji navrûya tevnê bêtir şandiyan tevlî vê parzûnê bikî. + title: Şandiyên parzûnkirî footer: developers: Pêşdebir more: Bêtir… @@ -1207,12 +1235,22 @@ ku: trending_now: Niha rojevê de generic: all: Hemû + all_items_on_page_selected_html: + one: Berhemê %{count} li ser vê rûpelê hatiye hilbijartin. + other: Hemû berhemên %{count} li ser vê rûpelê hatine hilbijartin. + all_matching_items_selected_html: + one: Berhemê %{count} ku bi lêgerîna te re lihevhatî ye hatiye hilbijartin. + other: Hemû berhemên %{count} ku bi lêgerîna te re lihevhatî ne hatine hilbijartin. changes_saved_msg: Guhertin bi serkeftî tomar bû! copy: Jê bigire delete: Jê bibe + deselect: Hemûyan hilnebijêre none: Ne yek order_by: Rêz bike bi save_changes: Guhertinan tomar bike + select_all_matching_items: + one: Berhemê %{count} ku bi lêgerîna te re lihevhatî ye hilbijêre. + other: Hemû berhemên %{count} ku bi lêgerîna te re lihevhatî ne hilbijêre. today: îro validation_errors: one: Tiştek hîn ne rast e! Ji kerema xwe çewtiya li jêr di ber çavan re derbas bike @@ -1321,17 +1359,6 @@ ku: subject: "%{name} ragihandinek şand" sign_up: subject: "%{name} tomar bû" - digest: - action: Hemû agahdariyan nîşan bide - body: Li vir kurteyeke peyamên ku li te derbasbûnd ji serdana te ya dawîn di %{since} de - mention: "%{name} behsa te kir:" - new_followers_summary: - one: Herwiha, dema tu dûr bûyî te şopînerek nû bi dest xist! Bijî! - other: Herwiha, dema tu dûr bûyî te %{count} şopînerek nû bi dest xist! Bijî! - subject: - one: "1 agahdarî ji serdana te ya herî dawî 🐘" - other: "%{count} agahdarî ji serdana te ya herî dawî 🐘" - title: Di tunebûna te de... favourite: body: 'Şandiya te hate bijartin ji alî %{name} ve:' subject: "%{name} şandiya te hez kir" diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 96119216d1e..4e79ca1887f 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -127,7 +127,6 @@ lt: username: Slapyvardis warn: Įspėti action_logs: - deleted_status: "(panaikintas statusas)" title: Audito žurnalas custom_emojis: by_domain: Domenas @@ -493,11 +492,6 @@ lt: moderation: title: Moderacija notification_mailer: - digest: - action: Peržiurėti visus pranešimus - body: Čia yra trumpa santrauka žinutės, kurią jūs praleidote nuo jūsų paskutinio apsilankymo %{since} - mention: "%{name} paminėjo jus:" - title: Kol jūsų nebuvo... favourite: body: 'Jūsų statusą pamėgo %{name}:' subject: "%{name} pamėgo Jūsų statusą" diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 21da83077dc..ae208739048 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -45,8 +45,8 @@ lv: unavailable_content_description: domain: Serveris reason: Iemesls - rejecting_media: 's faili no šiem serveriem netiks apstrādāti vai saglabāti, un netiks parādīti sīktēli, kuriem nepieciešama manuāla noklikšķināšana uz sākotnējā faila:' - rejecting_media_title: Filtrēts saturs + rejecting_media: 'Multivides faili no šiem serveriem netiks apstrādāti vai saglabāti, un netiks parādīti sīktēli, kuriem nepieciešama manuāla noklikšķināšana uz sākotnējā faila:' + rejecting_media_title: Filtrēta multivide silenced: 'Ziņas no šiem serveriem tiks paslēptas publiskās ziņu lentās un sarunās, un no lietotāju mijiedarbības netiks ģenerēti paziņojumi, ja vien tu tiem nesekosi:' silenced_title: Ierobežoti serveri suspended: 'Nekādi dati no šiem serveriem netiks apstrādāti, uzglabāti vai apmainīti, padarot neiespējamu jebkādu mijiedarbību vai saziņu ar lietotājiem no šiem serveriem:' @@ -240,17 +240,21 @@ lv: approve_user: Apstiprināt lietotāju assigned_to_self_report: Piešķirt Pārskatu change_email_user: Mainīt e-pastu lietotājam + change_role_user: Mainīt lietotāja lomu confirm_user: Apstiprināt lietotāju create_account_warning: Izveidot Brīdinājumu create_announcement: Izveidot Paziņojumu + create_canonical_email_block: Izveidot E-pasta Bloku create_custom_emoji: Izveidot pielāgotu emocijzīmi create_domain_allow: Izveidot Domēna Atļauju create_domain_block: Izveidot Domēna Bloku create_email_domain_block: Izveidot E-pasta Domēna Bloku create_ip_block: Izveidot IP noteikumu create_unavailable_domain: Izveidot Nepieejamu Domēnu + create_user_role: Izveidot lomu demote_user: Pazemināt Lietotāju destroy_announcement: Dzēst Paziņojumu + destroy_canonical_email_block: Dzēst E-pasta Bloku destroy_custom_emoji: Dzēst pielāgoto emocijzīmi destroy_domain_allow: Dzēst Domēna Atļauju destroy_domain_block: Dzēst Domēna Bloku @@ -259,6 +263,7 @@ lv: destroy_ip_block: Dzēst IP noteikumu destroy_status: Izdzēst Rakstu destroy_unavailable_domain: Dzēst Nepieejamu Domēnu + destroy_user_role: Iznīcināt lomu disable_2fa_user: Atspējot 2FA disable_custom_emoji: Atspējot pielāgotu emocijzīmi disable_sign_in_token_auth_user: Atspējoja e-pasta marķiera autentifikāciju lietotājam @@ -285,24 +290,30 @@ lv: update_announcement: Atjaunināt Paziņojumu update_custom_emoji: Atjaunināt pielāgoto emocijzīmi update_domain_block: Atjaunināt Domēna Bloku + update_ip_block: Atjaunināt IP noteikumu update_status: Atjaunināt ziņu + update_user_role: Atjaunināt lomu actions: approve_appeal_html: "%{name} apstiprināja moderācijas lēmuma apelāciju no %{target}" approve_user_html: "%{name} apstiprināja reģistrēšanos no %{target}" assigned_to_self_report_html: "%{name} piešķīra pārskatu %{target} sev" change_email_user_html: "%{name} nomainīja e-pasta adresi lietotājam %{target}" + change_role_user_html: "%{name} nomainīja lomu uz %{target}" confirm_user_html: "%{name} apstiprināja e-pasta adresi lietotājam %{target}" create_account_warning_html: "%{name} nosūtīja brīdinājumu %{target}" create_announcement_html: "%{name} izveidoja jaunu paziņojumu %{target}" + create_canonical_email_block_html: "%{name} bloķēja e-pastu ar hešu %{target}" create_custom_emoji_html: "%{name} augšupielādēja jaunu emocijzīmi %{target}" create_domain_allow_html: "%{name} atļāva federāciju ar domēnu %{target}" create_domain_block_html: "%{name} bloķēja domēnu %{target}" create_email_domain_block_html: "%{name} bloķēja e-pasta domēnu %{target}" create_ip_block_html: "%{name} izveidoja nosacījumu priekš IP %{target}" create_unavailable_domain_html: "%{name} apturēja piegādi uz domēnu %{target}" + create_user_role_html: "%{name} nomainīja %{target} lomu" demote_user_html: "%{name} pazemināja lietotāju %{target}" destroy_announcement_html: "%{name} izdzēsa paziņojumu %{target}" - destroy_custom_emoji_html: "%{name} iznīcināja emocijzīmi %{target}" + destroy_canonical_email_block_html: "%{name} atbloķēja e-pastu ar hešu %{target}" + destroy_custom_emoji_html: "%{name} izdzēsa emocijzīmi %{target}" destroy_domain_allow_html: "%{name} neatļāva federāciju ar domēnu %{target}" destroy_domain_block_html: "%{name} atbloķēja domēnu %{target}" destroy_email_domain_block_html: "%{name} atbloķēja e-pasta domēnu %{target}" @@ -310,6 +321,7 @@ lv: destroy_ip_block_html: "%{name} izdzēsa nosacījumu priekš IP %{target}" destroy_status_html: "%{name} noņēma ziņu %{target}" destroy_unavailable_domain_html: "%{name} atjaunoja piegādi uz domēnu %{target}" + destroy_user_role_html: "%{name} izdzēsa %{target} lomu" disable_2fa_user_html: "%{name} atspējoja divfaktoru prasības lietotājam %{target}" disable_custom_emoji_html: "%{name} atspējoja emocijzīmi %{target}" disable_sign_in_token_auth_user_html: "%{name} atspējoja e-pasta marķiera autentifikāciju %{target}" @@ -336,8 +348,9 @@ lv: update_announcement_html: "%{name} atjaunināja paziņojumu %{target}" update_custom_emoji_html: "%{name} atjaunināja emocijzīmi %{target}" update_domain_block_html: "%{name} atjaunināja domēna bloku %{target}" + update_ip_block_html: "%{name} mainīja nosacījumu priekš IP %{target}" update_status_html: "%{name} atjaunināja ziņu %{target}" - deleted_status: "(dzēsta ziņa)" + update_user_role_html: "%{name} nomainīja %{target} lomu" empty: Žurnāli nav atrasti. filter_by_action: Filtrēt pēc darbības filter_by_user: Filtrēt pēc lietotāja @@ -811,8 +824,8 @@ lv: title: Atļaut neautentificētu piekļuvi publiskai ziņu lentai title: Vietnes iestatījumi trendable_by_default: - desc_html: Ietekmē tēmturus, kas iepriekš nav bijuši aizliegti - title: Ļaujiet tēmturiem mainīties bez iepriekšējas pārskatīšanas + desc_html: Konkrētais populārais saturs joprojām var būt nepārprotami aizliegts + title: Atļaut tendences bez iepriekšējas pārskatīšanas trends: desc_html: Publiski parādīt iepriekš pārskatītus tēmturus, kas pašlaik ir populāri title: Populārākie tēmturi @@ -1201,6 +1214,8 @@ lv: edit: add_keyword: Pievienot atslēgvārdu keywords: Atslēgvārdi + statuses: Individuālās ziņas + statuses_hint_html: Šis filtrs attiecas uz atsevišķām ziņām neatkarīgi no tā, vai tās atbilst tālāk norādītajiem atslēgvārdiem. Pārskatīt vai noņemt ziņas no filtra. title: Rediģēt filtru errors: deprecated_api_multiple_keywords: Šos parametrus šajā lietojumprogrammā nevar mainīt, jo tie attiecas uz vairāk nekā vienu filtra atslēgvārdu. Izmanto jaunāku lietojumprogrammu vai tīmekļa saskarni. @@ -1215,10 +1230,25 @@ lv: one: "%{count} atsēgvārds" other: "%{count} atslēgvārdi" zero: "%{count} atslēgvārdu" + statuses: + one: "%{count} ziņa" + other: "%{count} ziņas" + zero: "%{count} ziņu" + statuses_long: + one: paslēpta %{count} individuālā ziņa + other: slēptas %{count} individuālās ziņas + zero: "%{count} paslēptu ziņu" title: Filtri new: save: Saglabāt jauno filtru title: Pievienot jaunu filtru + statuses: + back_to_filter: Atpakaļ pie filtra + batch: + remove: Noņemt no filtra + index: + hint: Šis filtrs attiecas uz atsevišķu ziņu atlasi neatkarīgi no citiem kritērijiem. Šim filtram tu vari pievienot vairāk ziņu, izmantojot tīmekļa saskarni. + title: Filtrētās ziņas footer: developers: Izstrādātāji more: Vairāk… @@ -1226,12 +1256,25 @@ lv: trending_now: Šobrīd tendences generic: all: Visi + all_items_on_page_selected_html: + one: Šajā lapā ir atlasīts %{count} vienums. + other: Šajā lapā ir atlasīti %{count} vienumi. + zero: Šajā lapā ir atlasīts %{count} vienumu. + all_matching_items_selected_html: + one: Atlasīts %{count} vienums, kas atbilst tavam meklēšanas vaicājumam. + other: Atlasīti visi %{count} vienumi, kas atbilst tavam meklēšanas vaicājumam. + zero: Atlasīts %{count} vienumu, kas atbilst tavam meklēšanas vaicājumam. changes_saved_msg: Izmaiņas veiksmīgi saglabātas! copy: Kopēt delete: Dzēst + deselect: Atcelt visu atlasi none: Neviens order_by: Kārtot pēc save_changes: Saglabāt izmaiņas + select_all_matching_items: + one: Atlasi %{count} vienumu, kas atbilst tavam meklēšanas vaicājumam. + other: Atlasi visus %{count} vienumus, kas atbilst tavam meklēšanas vaicājumam. + zero: Atlasi %{count} vienumu, kas atbilst tavam meklēšanas vaicājumam. today: šodien validation_errors: one: Kaut kas vēl nav īsti kārtībā! Lūdzu, pārskati zemāk norādīto kļūdu @@ -1342,19 +1385,6 @@ lv: subject: "%{name} iesniedza ziņojumu" sign_up: subject: "%{name} ir pierakstījies" - digest: - action: Rādīt visus paziņojumus - body: Šeit ir īss kopsavilkums par ziņojumiem, kurus tu esi palaidis garām kopš pēdējā apmeklējuma %{since} - mention: "%{name} pieminēja tevi:" - new_followers_summary: - one: Tāpat, atrodoties prom, esi ieguvis vienu jaunu sekotāju! Jip! - other: Turklāt, atrodoties prom, esi ieguvis %{count} jaunus sekotājus! Apbrīnojami! - zero: "%{count} jaunu sekotāju!" - subject: - one: "1 jauns paziņojums kopš tava pēdējā apmeklējuma 🐘" - other: "%{count} jauni paziņojumi kopš tava pēdējā apmeklējuma 🐘" - zero: "%{count} jaunu paziņojumu kopš tava pēdējā apmeklējuma" - title: Tavas prombūtnes laikā... favourite: body: 'Tavu ziņu izlasei pievienoja %{name}:' subject: "%{name} pievienoja tavu ziņu izlasei" diff --git a/config/locales/ml.yml b/config/locales/ml.yml index 76a3ec07cef..ea05859ac48 100644 --- a/config/locales/ml.yml +++ b/config/locales/ml.yml @@ -127,8 +127,6 @@ ml: generic: all: എല്ലാം notification_mailer: - digest: - action: എല്ലാ അറിയിപ്പുകളും കാണിക്കുക follow: body: "%{name} ഇപ്പോൾ നിങ്ങളെ പിന്തുടരുന്നു!" subject: "%{name} ഇപ്പോൾ നിങ്ങളെ പിന്തുടരുന്നു" diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 36aa351d9d4..b80a0d5c9af 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -256,7 +256,6 @@ ms: create_unavailable_domain_html: "%{name} telah menghentikan penghantaran ke domain %{target}" demote_user_html: "%{name} telah menurunkan taraf pengguna %{target}" destroy_announcement_html: "%{name} telah memadamkan pengumuman %{target}" - destroy_custom_emoji_html: "%{name} telah memusnahkan emoji %{target}" destroy_domain_allow_html: "%{name} telah membuang kebenaran persekutuan dengan domain %{target}" destroy_domain_block_html: "%{name} telah menyahsekat domain %{target}" destroy_email_domain_block_html: "%{name} telah menyahsekat domain e-mel %{target}" @@ -285,7 +284,6 @@ ms: update_custom_emoji_html: "%{name} telah mengemaskini emoji %{target}" update_domain_block_html: "%{name} telah mengemaskini penyekatan domain untuk %{target}" update_status_html: "%{name} telah mengemaskini hantaran oleh %{target}" - deleted_status: "(hantaran telah dipadam)" empty: Tiada log dijumpai. filter_by_action: Tapis mengikut tindakan filter_by_user: Tapis mengikut pengguna @@ -542,8 +540,5 @@ ms: exports: archive_takeout: in_progress: Mengkompil arkib anda... - notification_mailer: - digest: - title: Ketika anda tiada di sini... users: follow_limit_reached: Anda tidak boleh mengikut lebih daripada %{limit} orang diff --git a/config/locales/nl.yml b/config/locales/nl.yml index e34092f8f60..086568664a4 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -289,7 +289,6 @@ nl: create_unavailable_domain_html: "%{name} heeft de bezorging voor domein %{target} beëindigd" demote_user_html: Gebruiker %{target} is door %{name} gedegradeerd destroy_announcement_html: "%{name} heeft de mededeling %{target} verwijderd" - destroy_custom_emoji_html: "%{name} verwijderde emoji %{target}" destroy_domain_allow_html: "%{name} heeft de federatie met het domein %{target} afgekeurd" destroy_domain_block_html: Domein %{target} is door %{name} gedeblokkeerd destroy_email_domain_block_html: "%{name} heeft het e-maildomein %{target} gedeblokkeerd" @@ -320,7 +319,6 @@ nl: update_custom_emoji_html: Emoji %{target} is door %{name} bijgewerkt update_domain_block_html: "%{name} heeft de domeinblokkade bijgewerkt voor %{target}" update_status_html: "%{name} heeft de berichten van %{target} bijgewerkt" - deleted_status: "(verwijderd bericht}" empty: Geen logs gevonden. filter_by_action: Op actie filteren filter_by_user: Op gebruiker filteren @@ -670,9 +668,6 @@ nl: desc_html: Toon een link naar de openbare tijdlijnpagina op de voorpagina en geef de API zonder in te loggen toegang tot de openbare tijdlijn title: Toegang tot de openbare tijdlijn zonder in te loggen toestaan title: Server-instellingen - trendable_by_default: - desc_html: Heeft invloed op hashtags die nog niet eerder niet zijn toegestaan - title: Hashtags toestaan om trending te worden zonder voorafgaande beoordeling trends: desc_html: Eerder beoordeelde hashtags die op dit moment trending zijn openbaar tonen title: Trends @@ -1083,14 +1078,6 @@ nl: admin: report: subject: "%{name} heeft een rapportage ingediend" - digest: - action: Alle meldingen bekijken - body: Hier is een korte samenvatting van de berichten die je sinds jouw laatste bezoek op %{since} hebt gemist - mention: "%{name} vermeldde jou in:" - new_followers_summary: - one: Je hebt trouwens sinds je weg was er ook een nieuwe volger bijgekregen! Hoera! - other: Je hebt trouwens sinds je weg was er ook %{count} nieuwe volgers bijgekregen! Fantastisch! - title: Tijdens jouw afwezigheid... favourite: body: 'Jouw bericht werd door %{name} als favoriet gemarkeerd:' subject: "%{name} markeerde jouw bericht als favoriet" diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 392b927e199..44025936969 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -254,7 +254,6 @@ nn: create_ip_block_html: "%{name} opprettet regel for IP %{target}" reject_user_html: "%{name} avslo registrering fra %{target}" silence_account_html: "%{name} begrenset %{target} sin konto" - deleted_status: "(sletta status)" empty: Ingen loggar funne. filter_by_action: Sorter etter handling filter_by_user: Sorter etter brukar @@ -558,9 +557,6 @@ nn: desc_html: Vis offentlig tidslinje på landingssiden title: Tillat uautentisert tilgang til offentleg tidsline title: Sideinnstillingar - trendable_by_default: - desc_html: Påverkar emneknaggar som ikkje har vore tillatne tidlegare - title: Tillat emneknaggar å verta populære utan gjennomgang på førehand trends: title: Populære emneknaggar site_uploads: @@ -888,14 +884,6 @@ nn: carry_mutes_over_text: Denne brukeren flyttet fra %{acct}, som du hadde dempet. copy_account_note_text: 'Denne brukeren flyttet fra %{acct}, her var dine tidligere notater om dem:' notification_mailer: - digest: - action: Sjå alle varsel - body: Her er ei kort samanfatting av meldingane du gjekk glepp av sidan siste gong du var innom %{since} - mention: "%{name} nemnde deg i:" - new_followers_summary: - one: Du har forresten fått deg ein ny fylgjar mens du var borte! Hurra! - other: Du har forresten fått deg %{count} nye fylgjarar mens du var borte! Hurra! - title: Mens du var borte... favourite: body: 'Statusen din vart merkt som favoritt av %{name}:' subject: "%{name} merkte statusen din som favoritt" diff --git a/config/locales/no.yml b/config/locales/no.yml index 13f13d8bd45..27b7be807f5 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -247,7 +247,6 @@ create_ip_block_html: "%{name} opprettet regel for IP %{target}" reject_user_html: "%{name} avslo registrering fra %{target}" silence_account_html: "%{name} begrenset %{target} sin konto" - deleted_status: "(statusen er slettet)" empty: Ingen loggføringer ble funnet. filter_by_action: Sorter etter handling filter_by_user: Sorter etter bruker @@ -551,9 +550,6 @@ desc_html: Vis offentlig tidslinje på landingssiden title: Forhandsvis tidslinjen title: Nettstedsinnstillinger - trendable_by_default: - desc_html: Påvirker hashtags som ikke har blitt nektet tidligere - title: Tillat hashtags for trend uten foregående vurdering trends: title: Trendende emneknagger site_uploads: @@ -868,14 +864,6 @@ carry_mutes_over_text: Denne brukeren flyttet fra %{acct}, som du hadde dempet. copy_account_note_text: 'Denne brukeren flyttet fra %{acct}, her var dine tidligere notater om dem:' notification_mailer: - digest: - action: Vis alle varslinger - body: Her er en kort oppsummering av hva du har gått glipp av siden du sist logget inn den %{since} - mention: "%{name} nevnte deg i:" - new_followers_summary: - one: I tillegg har du fått en ny følger mens du var borte. Hurra! - other: I tillegg har du har fått %{count} nye følgere mens du var borte! Imponerende! - title: I ditt fravær… favourite: body: 'Statusen din ble likt av %{name}:' subject: "%{name} likte statusen din" diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 46394056714..d8560fd1c53 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -216,7 +216,6 @@ oc: update_announcement: Actualizar l’anóncia update_custom_emoji: Actualizar l’emoji personalizat update_status: Actualizar l’estatut - deleted_status: "(estatut suprimit)" empty: Cap de jornal pas trobat. filter_by_action: Filtrar per accion filter_by_user: Filtrar per utilizaire @@ -793,14 +792,6 @@ oc: moderation: title: Moderacion notification_mailer: - digest: - action: Veire totas las notificacions - body: Trobatz aquí un resumit dels messatges qu’avètz mancats dempuèi vòstra darrièra visita lo %{since} - mention: "%{name} vos a mencionat dins :" - new_followers_summary: - one: Avètz un nòu seguidor dempuèi vòstra darrièra visita ! Ouà ! - other: Avètz %{count} nòus seguidors dempuèi vòstra darrièra visita ! Qué crane ! - title: Pendent vòstra abséncia… favourite: body: "%{name} a mes vòstre estatut en favorit :" subject: "%{name} a mes vòstre estatut en favorit" diff --git a/config/locales/pl.yml b/config/locales/pl.yml index f51c231a6c2..99169454e97 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -245,6 +245,7 @@ pl: approve_user: Zatwierdź użytkownika assigned_to_self_report: Przypisz zgłoszenie change_email_user: Zmień adres e-mail użytkownika + change_role_user: Zmień rolę użytkownika confirm_user: Potwierdź użytkownika create_account_warning: Utwórz ostrzeżenie create_announcement: Utwórz ogłoszenie @@ -254,6 +255,7 @@ pl: create_email_domain_block: Utwórz blokadę domeny e-mail create_ip_block: Utwórz regułę IP create_unavailable_domain: Utwórz niedostępną domenę + create_user_role: Utwórz rolę demote_user: Zdegraduj użytkownika destroy_announcement: Usuń ogłoszenie destroy_custom_emoji: Usuń niestandardowe emoji @@ -264,6 +266,7 @@ pl: destroy_ip_block: Usuń regułę IP destroy_status: Usuń wpis destroy_unavailable_domain: Usuń niedostępną domenę + destroy_user_role: Zlikwiduj rolę disable_2fa_user: Wyłącz 2FA disable_custom_emoji: Wyłącz niestandardowe emoji disable_sign_in_token_auth_user: Wyłącz uwierzytelnianie tokenu e-mail dla użytkownika @@ -290,12 +293,15 @@ pl: update_announcement: Aktualizuj ogłoszenie update_custom_emoji: Aktualizuj niestandardowe emoji update_domain_block: Zaktualizuj blokadę domeny + update_ip_block: Aktualizuj regułę IP update_status: Aktualizuj wpis + update_user_role: Aktualizuj rolę actions: approve_appeal_html: "%{name} zatwierdził(-a) odwołanie decyzji moderacyjnej od %{target}" approve_user_html: "%{name} zatwierdził rejestrację od %{target}" assigned_to_self_report_html: "%{name} przypisał(a) sobie zgłoszenie %{target}" change_email_user_html: "%{name} zmienił(a) adres e-mail użytkownika %{target}" + change_role_user_html: "%{name} zmienił rolę %{target}" confirm_user_html: "%{name} potwierdził(a) adres e-mail użytkownika %{target}" create_account_warning_html: "%{name} wysłał(a) ostrzeżenie do %{target}" create_announcement_html: "%{name} utworzył(a) nowe ogłoszenie %{target}" @@ -305,9 +311,10 @@ pl: create_email_domain_block_html: "%{name} dodał(a) domenę e-mail %{target} na czarną listę" create_ip_block_html: "%{name} stworzył(a) regułę dla IP %{target}" create_unavailable_domain_html: "%{name} przestał(a) doręczać na domenę %{target}" + create_user_role_html: "%{name} utworzył rolę %{target}" demote_user_html: "%{name} zdegradował(a) użytkownika %{target}" destroy_announcement_html: "%{name} usunął(-ęła) ogłoszenie %{target}" - destroy_custom_emoji_html: "%{name} usunął(-ęła) emoji %{target}" + destroy_custom_emoji_html: "%{name} usunął emoji %{target}" destroy_domain_allow_html: "%{name} usunął(-ęła) domenę %{target} z białej listy" destroy_domain_block_html: "%{name} odblokował(a) domenę %{target}" destroy_email_domain_block_html: "%{name} usunął(-ęła) domenę e-mail %{target} z czarnej listy" @@ -315,6 +322,7 @@ pl: destroy_ip_block_html: "%{name} usunął(-ęła) regułę dla IP %{target}" destroy_status_html: "%{name} usunął(-ęła) wpis użytkownika %{target}" destroy_unavailable_domain_html: "%{name} wznowił(a) doręczanie do domeny %{target}" + destroy_user_role_html: "%{name} usunął rolę %{target}" disable_2fa_user_html: "%{name} wyłączył(a) uwierzytelnianie dwustopniowe użytkownikowi %{target}" disable_custom_emoji_html: "%{name} wyłączył(a) emoji %{target}" disable_sign_in_token_auth_user_html: "%{name} wyłączył/a uwierzytelnianie tokenem e-mail dla %{target}" @@ -342,7 +350,7 @@ pl: update_custom_emoji_html: "%{name} zaktualizował(a) emoji %{target}" update_domain_block_html: "%{name} zaktualizował(a) blokadę domeny dla %{target}" update_status_html: "%{name} zaktualizował(a) wpis użytkownika %{target}" - deleted_status: "(usunięty wpis)" + update_user_role_html: "%{name} zmienił rolę %{target}" empty: Nie znaleziono aktywności w dzienniku. filter_by_action: Filtruj według działania filter_by_user: Filtruj według użytkownika @@ -827,8 +835,8 @@ pl: title: Podgląd osi czasu title: Ustawienia strony trendable_by_default: - desc_html: Wpływa na hashtagi, które nie były wcześniej niedozwolone - title: Hashtagi mogą pojawiać się w trendach bez wcześniejszego zatwierdzenia + desc_html: Pewne treści trendu nadal mogą być bezpośrednio zabronione + title: Zezwalaj na trendy bez ich uprzedniego przejrzenia trends: desc_html: Wyświetlaj publicznie wcześniej sprawdzone hashtagi, które są obecnie na czasie title: Popularne hashtagi @@ -1222,7 +1230,7 @@ pl: add_keyword: Dodaj słowo kluczowe keywords: Słowa kluczowe statuses: Pojedyncze wpisy - statuses_hint_html: Ten filtr ma zastosowanie do wybierania poszczególnych postów niezależnie od tego, czy pasują one do słów kluczowych poniżej. Możesz przejrzeć te posty i usunąć je z filtra klikając tutaj. + statuses_hint_html: Ten filtr ma zastosowanie do wybierania poszczególnych wpisów niezależnie od tego, czy pasują one do słów kluczowych poniżej. Przejrzyj lub usuń wpisy z filtra. title: Edytuj filtr errors: deprecated_api_multiple_keywords: Te parametry nie mogą zostać zmienione z tej aplikacji, ponieważ dotyczą więcej niż jednego słowa kluczowego. Użyj nowszej wersji aplikacji lub interfejsu internetowego. @@ -1247,7 +1255,7 @@ pl: batch: remove: Usuń z filtra index: - hint: Ten filtr ma zastosowanie do wybierania poszczególnych postów niezależnie od innych kryteriów. Możesz dodać więcej postów do tego filtra z interfejsu WWW. + hint: Ten filtr ma zastosowanie do wybierania poszczególnych wpisów niezależnie od pozostałych kryteriów. Możesz dodać więcej wpisów do tego filtra z interfejsu internetowego. title: Filtrowane posty footer: developers: Dla programistów @@ -1259,6 +1267,7 @@ pl: changes_saved_msg: Ustawienia zapisane! copy: Kopiuj delete: Usuń + deselect: Odznacz wszystkie none: Żaden order_by: Uporządkuj według save_changes: Zapisz zmiany @@ -1374,21 +1383,6 @@ pl: subject: "%{name} wysłał raport" sign_up: subject: "%{name} zarejestrował(-a) się" - digest: - action: Wyświetl wszystkie powiadomienia - body: Oto krótkie podsumowanie wiadomości, które ominęły Cię od Twojej ostatniej wizyty (%{since}) - mention: "%{name} wspomniał o Tobie w:" - new_followers_summary: - few: "(%{count}) nowe osoby śledzą Cię!" - many: "(%{count}) nowych osób Cię śledzi! Wspaniale!" - one: Dodatkowo, w czasie nieobecności zaczęła śledzić Cię jedna osoba Gratulacje! - other: Dodatkowo, zaczęło Cię śledzić %{count} nowych osób! Wspaniale! - subject: - few: "%{count} nowe powiadomienia od Twojej ostatniej wizyty 🐘" - many: "%{count} nowych powiadomień od Twojej ostatniej wizyty 🐘" - one: "1 nowe powiadomienie od Twojej ostatniej wizyty 🐘" - other: "%{count} nowych powiadomień od Twojej ostatniej wizyty 🐘" - title: W trakcie Twojej nieobecności… favourite: body: 'Twój wpis został polubiony przez %{name}:' subject: "%{name} lubi Twój wpis" diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 4a7800b605d..9460d651fbf 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -103,11 +103,17 @@ pt-BR: avatar: Imagem de perfil by_domain: Domínio change_email: + changed_msg: E-mail alterado com sucesso! current_email: E-mail atual label: Alterar e-mail new_email: Novo e-mail submit: Alterar e-mail title: Alterar e-mail para %{username} + change_role: + changed_msg: Função alterada com sucesso! + label: Alterar função + no_role: Nenhuma função + title: Alterar função para %{username} confirm: Confirmar confirmed: Confirmado confirming: Confirmando @@ -151,6 +157,7 @@ pt-BR: active: Ativo all: Todos pending: Pendente + silenced: Limitado suspended: Banidos title: Moderação moderation_notes: Notas de moderação @@ -158,6 +165,7 @@ pt-BR: most_recent_ip: IP mais recente no_account_selected: Nenhuma conta foi alterada, pois nenhuma conta foi selecionada no_limits_imposed: Nenhum limite imposto + no_role_assigned: Nenhuma função atribuída not_subscribed: Não inscrito pending: Revisão pendente perform_full_suspension: Banir @@ -184,6 +192,7 @@ pt-BR: reset: Redefinir reset_password: Redefinir senha resubscribe: Reinscrever-se + role: Função search: Pesquisar search_same_email_domain: Outros usuários com o mesmo domínio de e-mail search_same_ip: Outros usuários com o mesmo IP @@ -226,6 +235,7 @@ pt-BR: approve_user: Aprovar Usuário assigned_to_self_report: Adicionar relatório change_email_user: Editar e-mail do usuário + change_role_user: Alteração de Função do Usuário confirm_user: Confirmar Usuário create_account_warning: Criar Aviso create_announcement: Criar Anúncio @@ -235,6 +245,7 @@ pt-BR: create_email_domain_block: Criar Bloqueio de Domínio de E-mail create_ip_block: Criar regra de IP create_unavailable_domain: Criar domínio indisponível + create_user_role: Criar Função demote_user: Rebaixar usuário destroy_announcement: Excluir anúncio destroy_custom_emoji: Excluir emoji personalizado @@ -245,6 +256,7 @@ pt-BR: destroy_ip_block: Excluir regra de IP destroy_status: Excluir Status destroy_unavailable_domain: Deletar domínio indisponível + destroy_user_role: Destruir Função disable_2fa_user: Desativar autenticação de dois fatores disable_custom_emoji: Desativar Emoji Personalizado disable_sign_in_token_auth_user: Desativar autenticação via token por email para Usuário @@ -272,11 +284,13 @@ pt-BR: update_custom_emoji: Editar Emoji Personalizado update_domain_block: Atualizar bloqueio de domínio update_status: Editar Status + update_user_role: Atualizar função actions: approve_appeal_html: "%{name} aprovou o recurso de decisão de moderação de %{target}" approve_user_html: "%{name} aprovado inscrição de %{target}" assigned_to_self_report_html: "%{name} atribuiu o relatório %{target} para si" change_email_user_html: "%{name} alterou o endereço de e-mail do usuário %{target}" + change_role_user_html: "%{name} alterou a função de %{target}" confirm_user_html: "%{name} confirmou o endereço de e-mail do usuário %{target}" create_account_warning_html: "%{name} enviou um aviso para %{target}" create_announcement_html: "%{name} criou o novo anúncio %{target}" @@ -286,9 +300,9 @@ pt-BR: create_email_domain_block_html: "%{name} bloqueou do domínio de e-mail %{target}" create_ip_block_html: "%{name} criou regra para o IP %{target}" create_unavailable_domain_html: "%{name} parou a entrega ao domínio %{target}" + create_user_role_html: "%{name} criou a função %{target}" demote_user_html: "%{name} rebaixou o usuário %{target}" destroy_announcement_html: "%{name} excluiu o anúncio %{target}" - destroy_custom_emoji_html: "%{name} excluiu emoji %{target}" destroy_domain_allow_html: "%{name} bloqueou federação com domínio %{target}" destroy_domain_block_html: "%{name} deixou de bloquear domínio %{target}" destroy_email_domain_block_html: "%{name} adicionou domínio de e-mail %{target} à lista branca" @@ -296,6 +310,7 @@ pt-BR: destroy_ip_block_html: "%{name} excluiu regra para o IP %{target}" destroy_status_html: "%{name} excluiu post de %{target}" destroy_unavailable_domain_html: "%{name} retomou a entrega ao domínio %{target}" + destroy_user_role_html: "%{name} excluiu a função %{target}" disable_2fa_user_html: "%{name} desativou a exigência de autenticação de dois fatores para o usuário %{target}" disable_custom_emoji_html: "%{name} desativou o emoji %{target}" disable_sign_in_token_auth_user_html: "%{name} desativou a autenticação via token por email para %{target}" @@ -323,7 +338,7 @@ pt-BR: update_custom_emoji_html: "%{name} atualizou o emoji %{target}" update_domain_block_html: "%{name} atualizou o bloqueio de domínio de %{target}" update_status_html: "%{name} atualizou a publicação de %{target}" - deleted_status: "(status excluído)" + update_user_role_html: "%{name} alterou a função %{target}" empty: Nenhum registro encontrado. filter_by_action: Filtrar por ação filter_by_user: Filtrar por usuário @@ -635,6 +650,54 @@ pt-BR: unresolved: Não resolvido updated_at: Atualizado view_profile: Ver perfil + roles: + add_new: Adicionar função + assigned_users: + one: "%{count} usuário" + other: "%{count} usuários" + categories: + administration: Administração + invites: Convites + moderation: Moderação + special: Especial + delete: Excluir + description_html: Com as funções de usuário, você pode personalizar quais funções e áreas do Mastodon seus usuários podem acessar. + edit: Editar função de '%{name}' + everyone: Permissões padrão + everyone_full_description_html: Esta é a função base que afeta todos os usuários, mesmo aqueles sem uma função atribuída. Todas as outras funções dela herdam as suas permissões. + privileges: + administrator: Administrador + administrator_description: Usuários com essa permissão irão ignorar todas as permissões + invite_users: Convidar Usuários + invite_users_description: Permite que os usuários convidem novas pessoas para o servidor + manage_announcements: Gerenciar Avisos + manage_announcements_description: Permite aos usuários gerenciar anúncios no servidor + manage_blocks_description: Permite aos usuários bloquear provedores de e-mail e endereços IP + manage_custom_emojis_description: Permite aos usuários gerenciar emojis personalizados no servidor + manage_federation: Gerenciar Federação + manage_federation_description: Permite aos usuários bloquear ou permitir federação com outros domínios e controlar a entregabilidade + manage_invites: Gerenciar convites + manage_invites_description: Permite que os usuários naveguem e desativem os links de convites + manage_reports: Gerenciar relatórios + manage_roles: Gerenciar Funções + manage_roles_description: Permitir que os usuários gerenciem e atribuam papéis abaixo deles + manage_rules: Gerenciar Regras + manage_rules_description: Permite que os usuários alterarem as regras do servidor + manage_settings: Gerenciar Configurações + manage_settings_description: Permite que os usuários alterem as configurações do site + manage_taxonomies: Gerenciar taxonomias + manage_taxonomies_description: Permite aos usuários rever o conteúdo em alta e atualizar as configurações de hashtag + manage_user_access: Gerenciar Acesso de Usuário + manage_user_access_description: Permite aos usuários desativar a autenticação de dois fatores de outros usuários, alterar seu endereço de e-mail e redefinir sua senha + manage_users: Gerenciar usuários + manage_users_description: Permite aos usuários ver os detalhes de outros usuários e executar ações de moderação contra eles + manage_webhooks: Gerenciar Webhooks + manage_webhooks_description: Permite aos usuários configurar webhooks para eventos administrativos + view_audit_log: Ver o registro de auditoria + view_audit_log_description: Permite aos usuários ver um histórico de ações administrativas no servidor + view_dashboard: Ver painel + view_dashboard_description: Permite que os usuários acessem o painel e várias métricas + title: Funções rules: add_new: Adicionar regra delete: Deletar @@ -719,9 +782,6 @@ pt-BR: desc_html: Mostra a linha do tempo pública na página inicial e permite acesso da API à mesma sem autenticação title: Permitir acesso não autenticado à linha pública title: Configurações do site - trendable_by_default: - desc_html: Afeta as hashtags que não foram reprovadas anteriormente - title: Permitir que hashtags fiquem em alta sem revisão prévia trends: desc_html: Mostrar publicamente hashtags previamente revisadas que estão em alta title: Hashtags em alta @@ -768,15 +828,18 @@ pt-BR: disallow_provider: Anular editor title: Em alta no momento usage_comparison: Compartilhado %{today} vezes hoje, em comparação com %{yesterday} de ontem + only_allowed: Somente permitido pending_review: Revisão pendente preview_card_providers: allowed: Links deste editor podem tender + description_html: Estes são domínios a partir dos quais links são comumente compartilhados em seu servidor. Links não tenderão publicamente a menos que o domínio do link seja aprovado. Sua aprovação (ou rejeição) estende-se aos subdomínios. rejected: Links deste editor não vão tender title: Editor rejected: Rejeitado statuses: allow: Permitir postagem allow_account: Permitir autor + description_html: Estes são posts que seu servidor sabe que estão sendo muito compartilhados e favorecidos no momento. Isso pode ajudar seus usuários, novos e retornantes, a encontrar mais pessoas para seguir. Nenhum post é exibido publicamente até que você aprove o autor e o autor permitir que sua conta seja sugerida a outros. Você também pode permitir ou rejeitar postagens individuais. title: Publicações em alta tags: current_score: Pontuação atual %{score} @@ -1051,6 +1114,7 @@ pt-BR: edit: add_keyword: Adicionar palavra-chave keywords: Palavras-chave + statuses: Postagens individuais title: Editar filtro errors: invalid_context: Contexto inválido ou nenhum contexto informado @@ -1182,17 +1246,6 @@ pt-BR: subject: "%{name} enviou uma denúncia" sign_up: subject: "%{name} se inscreveu" - digest: - action: Ver todas as notificações - body: Aqui está um breve resumo das mensagens que você perdeu desde o seu último acesso em %{since} - mention: "%{name} te mencionou em:" - new_followers_summary: - one: Você tem um novo seguidor! Uia! - other: Você tem %{count} novos seguidores! AÊÊÊ! - subject: - one: "Uma nova notificação desde o seu último acesso 🐘" - other: "%{count} novas notificações desde o seu último acesso 🐘" - title: Enquanto você estava ausente... favourite: body: "%{name} favoritou seu toot:" subject: "%{name} favoritou seu toot" diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index ac21c330eb8..fd151b73aeb 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -235,17 +235,21 @@ pt-PT: approve_user: Aprovar Utilizador assigned_to_self_report: Atribuir Denúncia change_email_user: Alterar E-mail do Utilizador + change_role_user: Alterar Função do Utilizador confirm_user: Confirmar Utilizador create_account_warning: Criar Aviso create_announcement: Criar Anúncio + create_canonical_email_block: Criar Bloqueio de E-mail create_custom_emoji: Criar Emoji Personalizado create_domain_allow: Criar Permissão de Domínio create_domain_block: Criar Bloqueio de Domínio create_email_domain_block: Criar Bloqueio de Domínio de E-mail create_ip_block: Criar regra de IP create_unavailable_domain: Criar Domínio Indisponível + create_user_role: Criar Função demote_user: Despromover Utilizador destroy_announcement: Eliminar Anúncio + destroy_canonical_email_block: Eliminar Bloqueio de E-mail destroy_custom_emoji: Eliminar Emoji Personalizado destroy_domain_allow: Eliminar Permissão de Domínio destroy_domain_block: Eliminar Bloqueio de Domínio @@ -254,6 +258,7 @@ pt-PT: destroy_ip_block: Eliminar regra de IP destroy_status: Eliminar Publicação destroy_unavailable_domain: Eliminar Domínio Indisponível + destroy_user_role: Eliminar Função disable_2fa_user: Desativar 2FA disable_custom_emoji: Desativar Emoji Personalizado disable_sign_in_token_auth_user: Desativar token de autenticação por e-mail para Utilizador @@ -280,24 +285,30 @@ pt-PT: update_announcement: Atualizar Anúncio update_custom_emoji: Atualizar Emoji Personalizado update_domain_block: Atualizar Bloqueio de Domínio + update_ip_block: Atualizar regra de IP update_status: Atualizar Estado + update_user_role: Atualizar Função actions: approve_appeal_html: "%{name} aprovou recurso da decisão de moderação de %{target}" approve_user_html: "%{name} aprovou a inscrição de %{target}" assigned_to_self_report_html: "%{name} atribuiu a denúncia %{target} a si próprio" change_email_user_html: "%{name} alterou o endereço de e-mail do utilizador %{target}" + change_role_user_html: "%{name} alterou a função de %{target}" confirm_user_html: "%{name} confirmou o endereço de e-mail do utilizador %{target}" create_account_warning_html: "%{name} enviou um aviso para %{target}" create_announcement_html: "%{name} criou o novo anúncio %{target}" + create_canonical_email_block_html: "%{name} bloqueou o e-mail com a hash %{target}" create_custom_emoji_html: "%{name} carregou o novo emoji %{target}" create_domain_allow_html: "%{name} habilitou a federação com o domínio %{target}" create_domain_block_html: "%{name} bloqueou o domínio %{target}" create_email_domain_block_html: "%{name} bloqueou o domínio de e-mail %{target}" create_ip_block_html: "%{name} criou regra para o IP %{target}" create_unavailable_domain_html: "%{name} parou a entrega ao domínio %{target}" + create_user_role_html: "%{name} criou a função %{target}" demote_user_html: "%{name} despromoveu o utilizador %{target}" destroy_announcement_html: "%{name} eliminou o anúncio %{target}" - destroy_custom_emoji_html: "%{name} destruiu o emoji %{target}" + destroy_canonical_email_block_html: "%{name} desbloqueou o e-mail com a hash %{target}" + destroy_custom_emoji_html: "%{name} eliminou o emoji %{target}" destroy_domain_allow_html: "%{name} desabilitou a federação com o domínio %{target}" destroy_domain_block_html: "%{name} desbloqueou o domínio %{target}" destroy_email_domain_block_html: "%{name} desbloqueou o domínio de e-mail %{target}" @@ -305,6 +316,7 @@ pt-PT: destroy_ip_block_html: "%{name} eliminou regra para o IP %{target}" destroy_status_html: "%{name} removeu a publicação de %{target}" destroy_unavailable_domain_html: "%{name} retomou a entrega ao domínio %{target}" + destroy_user_role_html: "%{name} eliminou a função %{target}" disable_2fa_user_html: "%{name} desativou o requerimento de autenticação em dois passos para o utilizador %{target}" disable_custom_emoji_html: "%{name} desabilitou o emoji %{target}" disable_sign_in_token_auth_user_html: "%{name} desativou token de autenticação por e-mail para %{target}" @@ -331,8 +343,9 @@ pt-PT: update_announcement_html: "%{name} atualizou o anúncio %{target}" update_custom_emoji_html: "%{name} atualizou o emoji %{target}" update_domain_block_html: "%{name} atualizou o bloqueio de domínio para %{target}" + update_ip_block_html: "%{name} alterou regra para IP %{target}" update_status_html: "%{name} atualizou o estado de %{target}" - deleted_status: "(publicação eliminada)" + update_user_role_html: "%{name} alterou a função %{target}" empty: Não foram encontrados registos. filter_by_action: Filtrar por ação filter_by_user: Filtrar por utilizador @@ -795,8 +808,8 @@ pt-PT: title: Visualização da linha temporal title: Configurações do site trendable_by_default: - desc_html: Afecta as hashtags que ainda não tenham sido proibidas - title: Permitir hashtags em tendência sem revisão prévia + desc_html: Conteúdo específico em tendência pode mesmo assim ser explicitamente rejeitado + title: Permitir tendências sem revisão prévia trends: desc_html: Exibir publicamente hashtags atualmente em destaque que já tenham sido revistas anteriormente title: Hashtags em destaque @@ -1181,6 +1194,8 @@ pt-PT: edit: add_keyword: Adicionar palavra-chave keywords: Palavras-chave + statuses: Publicações individuais + statuses_hint_html: Este filtro aplica-se a publicações individuais selecionadas independentemente de estas corresponderem às palavras-chave abaixo. Reveja ou remova publicações do filtro. title: Editar filtros errors: deprecated_api_multiple_keywords: Estes parâmetros não podem ser alterados a partir deste aplicativo porque se aplicam a mais de um filtro de palavra-chave. Use um aplicativo mais recente ou a interface web. @@ -1194,10 +1209,23 @@ pt-PT: keywords: one: "%{count} palavra-chave" other: "%{count} palavras-chaves" + statuses: + one: "%{count} publicação" + other: "%{count} publicações" + statuses_long: + one: "%{count} publicação individual ocultada" + other: "%{count} publicações individuais ocultadas" title: Filtros new: save: Salvar novo filtro title: Adicionar novo filtro + statuses: + back_to_filter: Voltar ao filtro + batch: + remove: Remover do filtro + index: + hint: Este filtro aplica-se a publicações individuais selecionadas independentemente de outros critérios. Pode adicionar mais publicações a este filtro através da interface web. + title: Publicações filtradas footer: developers: Responsáveis pelo desenvolvimento more: Mais… @@ -1205,12 +1233,22 @@ pt-PT: trending_now: Tendências atuais generic: all: Tudo + all_items_on_page_selected_html: + one: "%{count} item nesta página está selecionado." + other: Todo os %{count} items nesta página estão selecionados. + all_matching_items_selected_html: + one: "%{count} item que corresponde à sua pesquisa está selecionado." + other: Todos os %{count} items que correspondem à sua pesquisa estão selecionados. changes_saved_msg: Alterações guardadas! copy: Copiar delete: Eliminar + deselect: Desmarcar todos none: Nenhum order_by: Ordenar por save_changes: Guardar alterações + select_all_matching_items: + one: Selecione %{count} item que corresponde à sua pesquisa. + other: Selecione todos os %{count} items que correspondem à sua pesquisa. today: hoje validation_errors: one: Algo não está correcto. Por favor vê o erro abaixo @@ -1319,17 +1357,6 @@ pt-PT: subject: "%{name} submeteu uma denúncia" sign_up: subject: "%{name} inscreveu-se" - digest: - action: Ver todas as notificações - body: Aqui tens um breve resumo do que perdeste desde o último acesso a %{since} - mention: "%{name} mencionou-te em:" - new_followers_summary: - one: Tens um novo seguidor! Boa! - other: Tens %{count} novos seguidores! Fantástico! - subject: - one: "1 nova notificação desde o seu último acesso 🐘" - other: "%{count} novas notificações desde o seu último acesso 🐘" - title: Enquanto estiveste ausente… favourite: body: 'O teu post foi adicionado aos favoritos por %{name}:' subject: "%{name} adicionou o teu post aos favoritos" diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 90f2db0c496..b129c890125 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -245,17 +245,21 @@ ru: approve_user: Утвердить assigned_to_self_report: Присвоение жалоб change_email_user: Изменение эл. почты пользователя + change_role_user: Изменить роль пользователя confirm_user: Подтверждение пользователей create_account_warning: Выдача предупреждения create_announcement: Создание объявлений + create_canonical_email_block: Создать блокировку эл. почты create_custom_emoji: Добавление эмодзи create_domain_allow: Разрешение доменов create_domain_block: Блокировка доменов create_email_domain_block: Блокировка e-mail доменов create_ip_block: Создание правил для IP-адресов create_unavailable_domain: Добавление домена в список недоступных + create_user_role: Создать роль demote_user: Разжалование пользователей destroy_announcement: Удаление объявлений + destroy_canonical_email_block: Удалить блокировку эл. почты destroy_custom_emoji: Удаление эмодзи destroy_domain_allow: Отзыв разрешений для доменов destroy_domain_block: Разблокировка доменов @@ -264,6 +268,7 @@ ru: destroy_ip_block: Удаление правил для IP-адресов destroy_status: Удаление постов destroy_unavailable_domain: Исключение доменов из списка недоступных + destroy_user_role: Удалить роль disable_2fa_user: Отключение 2FA disable_custom_emoji: Отключение эмодзи disable_sign_in_token_auth_user: Отключение аутентификации по e-mail кодам у пользователей @@ -290,21 +295,26 @@ ru: update_announcement: Обновление объявлений update_custom_emoji: Обновление эмодзи update_domain_block: Изменение блокировки домена + update_ip_block: Обновить правило для IP-адреса update_status: Изменение постов + update_user_role: Обновить роль actions: approve_appeal_html: "%{name} одобрил апелляцию на умеренное решение от %{target}" approve_user_html: "%{name} утвердил(а) регистрацию %{target}" assigned_to_self_report_html: "%{name} назначил(а) себя для решения жалобы %{target}" change_email_user_html: "%{name} сменил(а) e-mail пользователя %{target}" + change_role_user_html: "%{name} изменил(а) роль %{target}" confirm_user_html: "%{name} подтвердил(а) e-mail адрес пользователя %{target}" create_account_warning_html: "%{name} выдал(а) предупреждение %{target}" create_announcement_html: "%{name} создал(а) новое объявление %{target}" + create_canonical_email_block_html: "%{name} заблокировал(а) эл. почту с хешем %{target}" create_custom_emoji_html: "%{name} загрузил(а) новый эмодзи %{target}" create_domain_allow_html: "%{name} разрешил(а) федерацию с доменом %{target}" create_domain_block_html: "%{name} заблокировал(а) домен %{target}" create_email_domain_block_html: "%{name} заблокировал(а) e-mail домен %{target}" create_ip_block_html: "%{name} создал(а) правило для IP %{target}" create_unavailable_domain_html: "%{name} приостановил доставку на узел %{target}" + create_user_role_html: "%{name} создал(а) роль %{target}" demote_user_html: "%{name} разжаловал(а) пользователя %{target}" destroy_announcement_html: "%{name} удалил(а) объявление %{target}" destroy_custom_emoji_html: "%{name} удалил(а) эмодзи %{target}" @@ -315,6 +325,7 @@ ru: destroy_ip_block_html: "%{name} удалил(а) правило для IP %{target}" destroy_status_html: "%{name} удалил(а) пост пользователя %{target}" destroy_unavailable_domain_html: "%{name} возобновил доставку на узел %{target}" + destroy_user_role_html: "%{name} удалил(а) роль %{target}" disable_2fa_user_html: "%{name} отключил(а) требование двухэтапной авторизации для пользователя %{target}" disable_custom_emoji_html: "%{name} отключил(а) эмодзи %{target}" disable_sign_in_token_auth_user_html: "%{name} отключил(а) аутентификацию по e-mail кодам для %{target}" @@ -342,7 +353,6 @@ ru: update_custom_emoji_html: "%{name} обновил(а) эмодзи %{target}" update_domain_block_html: "%{name} обновил(а) блокировку домена для %{target}" update_status_html: "%{name} изменил(а) пост пользователя %{target}" - deleted_status: "(удалённый пост)" empty: Журнал пуст. filter_by_action: Фильтр по действию filter_by_user: Фильтр по пользователю @@ -779,9 +789,6 @@ ru: desc_html: Показывать публичную ленту на приветственной странице title: Предпросмотр ленты title: Настройки сайта - trendable_by_default: - desc_html: Влияет на хэштеги, которые не были ранее запрещены - title: Разрешить добавление хештегов в список актульных без предварительной проверки trends: desc_html: Публично отобразить проверенные хэштеги, актуальные на данный момент title: Популярные хэштеги @@ -1139,7 +1146,7 @@ ru: csv: CSV domain_blocks: Доменные блокировки lists: Списки - mutes: Ваши игнорируемые + mutes: Ваши игнорируете storage: Ваши файлы featured_tags: add_new: Добавить @@ -1156,6 +1163,7 @@ ru: edit: add_keyword: Добавить ключевое слово keywords: Ключевые слова + statuses: Отдельные сообщения title: Изменить фильтр errors: deprecated_api_multiple_keywords: Эти параметры нельзя изменить из этого приложения, так как применяются к более чем одному ключевому слову фильтра. Используйте более последнее приложение или веб-интерфейс. @@ -1175,6 +1183,10 @@ ru: new: save: Сохранить новый фильтр title: Добавить фильтр + statuses: + back_to_filter: Вернуться к фильтру + batch: + remove: Удалить из фильтра footer: developers: Разработчикам more: Ещё… @@ -1292,7 +1304,7 @@ ru: title: Модерация move_handler: carry_blocks_over_text: Этот пользователь переехал с учётной записи %{acct}, которую вы заблокировали. - carry_mutes_over_text: Этот пользователь переехал с учётной записи %{acct}, которую вы добавили в список игнорирования. + carry_mutes_over_text: Этот пользователь перешёл с учётной записи %{acct}, которую вы игнорируете. copy_account_note_text: 'Этот пользователь переехал с %{acct}, вот ваша предыдущая заметка о нём:' notification_mailer: admin: @@ -1300,21 +1312,6 @@ ru: subject: "%{name} отправил жалобу" sign_up: subject: "%{name} зарегистрирован" - digest: - action: Просмотреть все уведомления - body: Вот краткая сводка сообщений, которые вы пропустили с последнего захода %{since} - mention: "%{name} упомянул(а) Вас в:" - new_followers_summary: - few: У вас появилось %{count} новых подписчика! Отлично! - many: У вас появилось %{count} новых подписчиков! Отлично! - one: Также, пока вас не было, у вас появился новый подписчик! Ура! - other: Также, пока вас не было, у вас появилось %{count} новых подписчиков! Отлично! - subject: - few: "%{count} новых уведомления с вашего последнего посещения 🐘" - many: "%{count} новых уведомлений с вашего последнего посещения 🐘" - one: "1 новое уведомление с вашего последнего посещения 🐘" - other: "%{count} новых уведомлений с вашего последнего посещения 🐘" - title: В ваше отсутствие… favourite: body: "%{name} добавил(а) ваш пост в избранное:" subject: "%{name} добавил(а) ваш пост в избранное" @@ -1568,7 +1565,7 @@ ru: enabled_hint: Автоматически удаляет ваши посты после того, как они достигли определённого возрастного порога, за некоторыми исключениями ниже. exceptions: Исключения explanation: Из-за того, что удаление постов — это ресурсоёмкий процесс, оно производится медленно со временем, когда сервер менее всего загружен. По этой причине, посты могут удаляться не сразу, а спустя определённое время, по достижению возрастного порога. - ignore_favs: Игнорировать отметки «избранного» + ignore_favs: Игнорировать избранное ignore_reblogs: Игнорировать продвижения interaction_exceptions: Исключения на основе взаимодействий interaction_exceptions_explanation: 'Обратите внимание: нет никаких гарантий, что посты будут удалены, после того, как они единожды перешли порог по отметкам «избранного» или продвижений.' diff --git a/config/locales/sc.yml b/config/locales/sc.yml index e6ee2bca9e9..60dcbbc9e34 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -257,7 +257,6 @@ sc: create_ip_block_html: "%{name} at creadu una règula pro s'IP %{target}" demote_user_html: "%{name} at degradadu s'utente %{target}" destroy_announcement_html: "%{name} at cantzelladu s'annùntziu %{target}" - destroy_custom_emoji_html: "%{name} at cantzelladu s'emoji %{target}" destroy_domain_allow_html: "%{name} no at permìtidu sa federatzione cun su domìniu %{target}" destroy_domain_block_html: "%{name} at isblocadu su domìniu %{target}" destroy_email_domain_block_html: "%{name} at isblocadu su domìniu de posta eletrònica %{target}" @@ -285,7 +284,6 @@ sc: update_custom_emoji_html: "%{name} at atualizadu s'emoji %{target}" update_domain_block_html: "%{name} at atualizadu su blocu de domìniu pro %{target}" update_status_html: "%{name} at atualizadu sa publicatzione de %{target}" - deleted_status: "(istadu cantzelladu)" empty: Perunu registru agatadu. filter_by_action: Filtra pro atzione filter_by_user: Filtra pro utente @@ -571,9 +569,6 @@ sc: desc_html: Ammustra su ligàmene a sa lìnia de tempus pùblica in sa pàgina initziale e permite s'atzessu pro mèdiu de s'API a sa lìnia de tempus pùblica sena autenticatzione title: Permite s'atzessu no autenticadu a sa lìnia de tempus pùblica title: Cunfiguratzione de su logu - trendable_by_default: - desc_html: Tocat a is etichetas chi non siant istadas refudadas prima - title: Permite chi is etichetas divenant tendèntzia sena revisione pretzedente trends: desc_html: Ammustra in pùblicu is etichetas chi siant istadas revisionadas in passadu e chi oe siant in tendèntzia title: Etichetas de tendèntzia @@ -910,14 +905,6 @@ sc: carry_mutes_over_text: Custa persone s'est tramudada dae %{acct}, chi as postu a sa muda. copy_account_note_text: 'Custa persone s''est tramudada dae %{acct}, custas sunt is notas antepostas tuas chi ddi pertocant:' notification_mailer: - digest: - action: Ammustra totu is notìficas - body: Custu est unu resumu de su chi ti est sutzèdidu dae sa visita ùrtima tua su %{since} - mention: "%{name} t'at mentovadu in:" - new_followers_summary: - one: In prus, %{count} persone noa ti sighit dae cando fias assente. Incredìbile! - other: In prus, %{count} persones noas ti sighint dae cando fias assente. Incredìbile! - title: Durante s'ausèntzia tua... favourite: body: "%{name} at marcadu comente a preferidu s'istadu tuo:" subject: "%{name} at marcadu comente a preferidu s'istadu tuo" diff --git a/config/locales/si.yml b/config/locales/si.yml index 811cd7a4728..fded19b175d 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -288,7 +288,6 @@ si: create_unavailable_domain_html: "%{name} වසම %{target}වෙත බෙදා හැරීම නැවැත්වීය" demote_user_html: "%{name} පහත හෙලන ලද පරිශීලක %{target}" destroy_announcement_html: "%{name} මකා දැමූ නිවේදනය %{target}" - destroy_custom_emoji_html: "%{name} විනාශ වූ ඉමොජි %{target}" destroy_domain_allow_html: වසම %{target}සමඟ %{name} අවසර නොදුන් සම්මේලනය destroy_domain_block_html: "%{name} අවහිර නොකළ වසම %{target}" destroy_email_domain_block_html: "%{name} අවහිර නොකළ විද්‍යුත් තැපැල් වසම %{target}" @@ -323,7 +322,6 @@ si: update_custom_emoji_html: "%{name} යාවත්කාලීන කළ ඉමොජි %{target}" update_domain_block_html: "%{target}සඳහා %{name} යාවත්කාලීන කරන ලද වසම් වාරණ" update_status_html: "%{name} %{target}යාවත්කාලීන කරන ලද පළ කිරීම" - deleted_status: "(මකා දැමූ පළ කිරීම)" empty: ලඝු-සටහන් හමු නොවිණි. filter_by_action: ක්‍රියාව අනුව පෙරන්න filter_by_user: පරිශීලක අනුව පෙරන්න @@ -724,9 +722,6 @@ si: desc_html: ගොඩබෑමේ පිටුවේ පොදු කාලරාමුව වෙත සබැඳිය සංදර්ශනය කරන්න සහ සත්‍යාපනයකින් තොරව පොදු කාලරේඛාවට API ප්‍රවේශයට ඉඩ දෙන්න title: පොදු කාලරේඛාවට අනවසර පිවිසීමට ඉඩ දෙන්න title: අඩවියේ සැකසුම් - trendable_by_default: - desc_html: කලින් අවසර නොදුන් හැෂ් ටැග් වලට බලපායි - title: පෙර සමාලෝචනයකින් තොරව හැෂ් ටැග් වලට නැඹුරු වීමට ඉඩ දෙන්න trends: desc_html: දැනට ප්‍රවණතා ඇති කලින් සමාලෝචනය කළ අන්තර්ගතය ප්‍රසිද්ධියේ සංදර්ශන කරන්න title: ප්රවණතා @@ -1240,17 +1235,6 @@ si: subject: "%{name} වාර්තාවක් ඉදිරිපත් කළේය" sign_up: subject: "%{name} අත්සන් කර ඇත" - digest: - action: සියලුම දැනුම්දීම් බලන්න - body: "%{since}වෙනිදා ඔබගේ අවසන් සංචාරයේ සිට ඔබට මග හැරුණු පණිවිඩවල කෙටි සාරාංශයක් මෙන්න" - mention: "%{name} ඔබව සඳහන් කළේ:" - new_followers_summary: - one: එසේම, ඔබ බැහැරව සිටියදී එක් නව අනුගාමිකයෙකු ලබා ගෙන ඇත! Yay! - other: එසේම, ඔබ බැහැරව සිටියදී නව අනුගාමිකයින් %{count} ක් ලබාගෙන ඇත! අරුම පුදුම! - subject: - one: "ඔබගේ අවසන් සංචාරයේ සිට 1 නව දැනුම්දීමක් 🐘" - other: "ඔබගේ අවසන් සංචාරයේ සිට නව දැනුම්දීම් %{count} ක් 🐘" - title: ඔබ නොමැති විට... favourite: body: 'ඔබේ පළ කිරීම %{name}විසින් ප්‍රිය කරන ලදී:' subject: "%{name} ඔබගේ පළ කිරීම ප්‍රිය කරන ලදී" diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index cf450f8256b..559185c2cda 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -253,6 +253,7 @@ ca: events: Esdeveniments activats url: URL del extrem 'no': 'No' + not_recommended: No recomanat recommended: Recomanat required: mark: "*" diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml index bc84e0f39b1..61456e92170 100644 --- a/config/locales/simple_form.cs.yml +++ b/config/locales/simple_form.cs.yml @@ -68,6 +68,11 @@ cs: with_dns_records: Dojde k pokusu o překlad DNS záznamů dané domény a výsledky budou rovněž zablokovány featured_tag: name: 'Nejspíš budete chtít použít jeden z těchto:' + filters: + action: Vyberte jakou akci provést, když příspěvek odpovídá filtru + actions: + hide: Úplně schovat filtrovaný obsah tak, jako by neexistoval + warn: Schovat filtrovaný obsah za varováním zmiňujicím název filtru form_challenge: current_password: Vstupujete do zabezpečeného prostoru imports: @@ -184,6 +189,7 @@ cs: setting_use_pending_items: Pomalý režim severity: Vážnost sign_in_token_attempt: Bezpečnostní kód + title: Název type: Typ importu username: Uživatelské jméno username_or_email: Uživatelské jméno nebo e-mail @@ -192,6 +198,10 @@ cs: with_dns_records: Zahrnout MX záznamy a IP adresy domény featured_tag: name: Hashtag + filters: + actions: + hide: Zcela skrýt + warn: Skrýt s varováním interactions: must_be_follower: Blokovat oznámení od lidí, kteří vás nesledují must_be_following: Blokovat oznámení od lidí, které nesledujete diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index 5077e16ff92..5de688e1286 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -253,6 +253,7 @@ da: events: Aktive begivenheder url: Endepunkts-URL 'no': Nej + not_recommended: Ikke anbefalet recommended: Anbefalet required: mark: "*" diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index bbeb610ecca..0d712bf5f24 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -22,9 +22,9 @@ de: suspend: Verhindert jegliche Interaktion von oder zu diesem Konto und löscht dessen Inhalt. Kann innerhalb von 30 Tagen rückgängig gemacht werden. warning_preset_id: Optional. Du kannst immer noch eigenen Text an das Ende der Vorlage hinzufügen announcement: - all_day: Wenn aktiviert werden nur die Daten des Zeitraums angezeigt + all_day: Wenn aktiviert, werden nur die Daten des Zeitraums angezeigt ends_at: Optional. Die Ankündigung wird zu diesem Zeitpunkt automatisch zurückgezogen - scheduled_at: Leer lassen um die Ankündigung sofort zu veröffentlichen + scheduled_at: Leer lassen, um die Ankündigung sofort zu veröffentlichen starts_at: Optional. Falls deine Ankündigung an einen bestimmten Zeitraum gebunden ist text: Du kannst die Toot-Syntax verwenden. Bitte beachte den Platz, den die Ankündigung auf dem Bildschirm des Benutzers einnehmen wird appeal: @@ -37,7 +37,7 @@ de: current_password: Aus Sicherheitsgründen gib bitte das Passwort des aktuellen Kontos ein current_username: Um das zu bestätigen, gib den Benutzernamen des aktuellen Kontos ein digest: Wenn du eine lange Zeit inaktiv bist, wird dir eine Zusammenfassung von Erwähnungen zugeschickt, die du in deiner Abwesenheit empfangen hast - discoverable: Erlaube deinem Konto durch Empfehlungen, Trends und andere Funktionen von Fremden entdeckt zu werden + discoverable: Erlaube deinem Konto, durch Empfehlungen, Trends und andere Funktionen von Fremden entdeckt zu werden email: Du wirst eine Bestätigungs-E-Mail erhalten fields: Du kannst bis zu 4 Elemente auf deinem Profil anzeigen lassen, die als Tabelle dargestellt werden header: PNG, GIF oder JPG. Maximal %{size}. Wird auf %{dimensions} px herunterskaliert @@ -58,14 +58,14 @@ de: setting_noindex: Betrifft dein öffentliches Profil und deine Beiträge setting_show_application: Die Anwendung die du nutzt wird in der detaillierten Ansicht deiner Beiträge angezeigt setting_use_blurhash: Die Farbverläufe basieren auf den Farben der versteckten Medien, aber verstecken jegliche Details - setting_use_pending_items: Neue Beiträge hinter einem Klick verstecken anstatt automatisch zu scrollen + setting_use_pending_items: Neue Beiträge hinter einem Klick verstecken, anstatt automatisch zu scrollen username: Dein Benutzername wird auf %{domain} einzigartig sein whole_word: Wenn das Schlagwort nur aus Buchstaben und Zahlen besteht, wird es nur angewendet, wenn es dem ganzen Wort entspricht domain_allow: - domain: Diese Domain kann Daten von diesem Server abrufen und eingehende Daten werden verarbeitet und gespeichert + domain: Diese Domain kann Daten von diesem Server abrufen, und eingehende Daten werden verarbeitet und gespeichert email_domain_block: domain: Dies kann der Domänenname sein, der in der E-Mail-Adresse oder dem von ihm verwendeten MX-Eintrag angezeigt wird. Er wird bei der Anmeldung überprüft. - with_dns_records: Ein Versuch die DNS-Einträge der Domain aufzulösen wurde unternommen und diese Ergebnisse werden unter anderem auch geblockt + with_dns_records: Ein Versuch, die DNS-Einträge der Domain aufzulösen, wurde unternommen, und diese Ergebnisse werden unter anderem auch blockiert featured_tag: name: 'Du möchtest vielleicht einen von diesen benutzen:' filters: @@ -82,7 +82,7 @@ de: ip_block: comment: Optional. Denke daran, warum du diese Regel hinzugefügt hast. expires_in: IP-Adressen sind eine endliche Ressource, sie werden manchmal geteilt und werden ab und zu ausgetauscht. Aus diesem Grund werden unbestimmte IP-Blöcke nicht empfohlen. - ip: Gebe eine IPv4- oder IPv6-Adresse an. Du kannst ganze Bereiche mit der CIDR-Syntax blockieren. Achte darauf, dass du dich nicht aussperrst! + ip: Gib eine IPv4- oder IPv6-Adresse an. Du kannst ganze Bereiche mit der CIDR-Syntax blockieren. Achte darauf, dass du dich nicht aussperrst! severities: no_access: Zugriff auf alle Ressourcen blockieren sign_up_block: Neue Anmeldungen werden nicht möglich sein @@ -185,7 +185,7 @@ de: setting_hide_network: Netzwerk ausblenden setting_noindex: Suchmaschinen-Indexierung verhindern setting_reduce_motion: Bewegung in Animationen verringern - setting_show_application: Anwendung preisgeben, die benutzt wurde um Beiträge zu versenden + setting_show_application: Anwendung preisgeben, die benutzt wurde, um Beiträge zu versenden setting_system_font_ui: Standardschriftart des Systems verwenden setting_theme: Theme setting_trends: Heutige Trends anzeigen @@ -200,7 +200,7 @@ de: username_or_email: Profilname oder E-Mail whole_word: Ganzes Wort email_domain_block: - with_dns_records: MX-Einträge und IPs der Domain einbeziehen + with_dns_records: MX-Einträge und IP-Adressen der Domain einbeziehen featured_tag: name: Hashtag filters: @@ -224,7 +224,7 @@ de: sign_up_requires_approval: Anmeldungen begrenzen severity: Regel notification_emails: - appeal: Jemand hat Einspruch an eine Moderatorentscheidung + appeal: Jemand hat Einspruch gegen eine Moderatorentscheidung eingelegt digest: Kurzfassungen über E-Mail senden favourite: E-Mail senden, wenn jemand meinen Beitrag favorisiert follow: E-Mail senden, wenn mir jemand folgt @@ -237,10 +237,10 @@ de: rule: text: Regel tag: - listable: Erlaube diesem Hashtag im Profilverzeichnis zu erscheinen + listable: Erlaube diesem Hashtag, im Profilverzeichnis zu erscheinen name: Hashtag - trendable: Erlaube es diesen Hashtag in den Trends erscheinen zu lassen - usable: Beiträge erlauben, diesen Hashtag zu verwenden + trendable: Erlaube es, diesen Hashtag in den Trends erscheinen zu lassen + usable: Beiträgen erlauben, diesen Hashtag zu verwenden user: role: Rolle user_role: @@ -253,11 +253,12 @@ de: events: Aktivierte Ereignisse url: Endpunkt-URL 'no': Nein + not_recommended: Nicht empfohlen recommended: Empfohlen required: mark: "*" text: Pflichtfeld title: sessions: - webauthn: Verwende einer deiner Sicherheitsschlüssel zum Anmelden + webauthn: Verwende einen deiner Sicherheitsschlüssel zum Anmelden 'yes': Ja diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml index 53b25da8e57..e116925168c 100644 --- a/config/locales/simple_form.es-AR.yml +++ b/config/locales/simple_form.es-AR.yml @@ -253,6 +253,7 @@ es-AR: events: Eventos habilitados url: Dirección web del punto final 'no': 'No' + not_recommended: No recomendado recommended: Opción recomendada required: mark: "*" diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index 3128209e8f1..3278159274a 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -85,6 +85,7 @@ es-MX: ip: Introduzca una dirección IPv4 o IPv6. Puede bloquear rangos completos usando la sintaxis CIDR. ¡Tenga cuidado de no quedarse fuera! severities: no_access: Bloquear acceso a todos los recursos + sign_up_block: Los nuevos registros se deshabilitarán sign_up_requires_approval: Nuevos registros requerirán su aprobación severity: Elegir lo que pasará con las peticiones desde esta IP rule: @@ -219,6 +220,7 @@ es-MX: ip: IP severities: no_access: Bloquear acceso + sign_up_block: Bloquear registros sign_up_requires_approval: Limitar registros severity: Regla notification_emails: diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml index 25efe37cd68..03357e44b34 100644 --- a/config/locales/simple_form.es.yml +++ b/config/locales/simple_form.es.yml @@ -253,6 +253,7 @@ es: events: Eventos habilitados url: URL de Endpoint 'no': 'No' + not_recommended: No recomendado recommended: Recomendado required: mark: "*" diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index 189f51ab65f..53e6a52b3b6 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -85,6 +85,7 @@ fi: ip: Kirjoita IPv4- tai IPv6-osoite. Voit estää kokonaisia alueita käyttämällä CIDR-syntaksia. Varo, että et lukitse itseäsi! severities: no_access: Estä pääsy kaikkiin resursseihin + sign_up_block: Uudet kirjautumiset eivät ole mahdollisia sign_up_requires_approval: Uudet rekisteröitymiset edellyttävät hyväksyntääsi severity: Valitse, mitä tapahtuu tämän IP-osoitteen pyynnöille rule: @@ -219,6 +220,7 @@ fi: ip: IP severities: no_access: Estä pääsy + sign_up_block: Estä kirjautumiset sign_up_requires_approval: Rajoita rekisteröitymisiä severity: Sääntö notification_emails: diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index a9d80140997..3b050eeee3e 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -253,6 +253,7 @@ gl: events: Eventos activados url: URL do extremo 'no': Non + not_recommended: Non é recomendable recommended: Recomendado required: mark: "*" diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml index fe0ed1a77be..22b5d848077 100644 --- a/config/locales/simple_form.he.yml +++ b/config/locales/simple_form.he.yml @@ -85,6 +85,7 @@ he: ip: נא להכניס כתובת IPv4 או IPv6. ניתן לחסום תחומים שלמים על ידי שימוש בתחביר CIDR. זהירות לא לנעול את עצמכם בחוץ! severities: no_access: חסימת גישה לכל המשאבים + sign_up_block: הרשמות חדשות לא יאופשרו sign_up_requires_approval: הרשמות חדשות ידרשו את אישורך severity: נא לבחור מה יקרה לבקשות מכתובת IP זו rule: @@ -219,6 +220,7 @@ he: ip: IP severities: no_access: חסימת גישה + sign_up_block: חסימת הרשמות sign_up_requires_approval: הגבלת הרשמות severity: כלל notification_emails: @@ -251,6 +253,7 @@ he: events: אירועים מאופשרים url: כתובת URL של נקודת הקצה 'no': לא + not_recommended: לא מומלצים recommended: מומלץ required: mark: "*" diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index df19f4aa7a5..16465ff793e 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -80,7 +80,7 @@ hu: invite_request: text: Ez segít nekünk átnézni a jelentkezésedet ip_block: - comment: Opcionális. Emlékeztető, hogy miért is vetted fel ezt a szabályt. + comment: Nem kötelező. Emlékeztető, hogy miért is vetted fel ezt a szabályt. expires_in: Az IP címek korlátos erőforrások, ezért néha meg vannak osztva és gyakran gazdát is cserélnek. Ezért a korlátlan IP tiltások használatát nem javasoljuk. ip: Írj be egy IPv4 vagy IPv6 címet. A CIDR formátum használatával teljes tartományokat tilthatsz ki. Légy óvatos, hogy magadat véletlenül se zárd ki! severities: @@ -253,6 +253,7 @@ hu: events: Engedélyezett események url: Végponti URL 'no': Nem + not_recommended: Nem ajánlott recommended: Ajánlott required: mark: "*" diff --git a/config/locales/simple_form.io.yml b/config/locales/simple_form.io.yml index 743c8964a1e..bb545247172 100644 --- a/config/locales/simple_form.io.yml +++ b/config/locales/simple_form.io.yml @@ -85,6 +85,7 @@ io: ip: Tipez adreso di IPv4 o IPv6. Vu povas restrikar tota porteo per sintaxo CIDR. Sorgemez por ke vu ne klefklozas su! severities: no_access: Restriktez aceso a omna moyeni + sign_up_block: Nova registrago ne esos posibla sign_up_requires_approval: Nova registro bezonos vua aprobo severity: Selektez quo eventos kun demandi de ca IP rule: @@ -219,6 +220,7 @@ io: ip: IP severities: no_access: Depermisez aceso + sign_up_block: Obstruktez registragi sign_up_requires_approval: Limitigez registri severity: Regulo notification_emails: @@ -251,6 +253,7 @@ io: events: Aktivigita eventi url: URL di finpunto 'no': Ne + not_recommended: Ne rekomendesas recommended: Rekomendito required: mark: "*" diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml index 60cbb334199..bdc9c038035 100644 --- a/config/locales/simple_form.is.yml +++ b/config/locales/simple_form.is.yml @@ -233,13 +233,13 @@ is: pending_account: Nýr notandaaðgangur þarfnast yfirferðar reblog: Einhver endurbirti færsluna þína report: Ný kæra hefur verið send inn - trending_tag: Ný tilhneiging krefst yfirferðar + trending_tag: Nýtt vinsælt efni krefst yfirferðar rule: text: Regla tag: listable: Leyfa þessu myllumerki að birtast í leitum og í persónusniðamöppunni name: Myllumerki - trendable: Leyfa þessu myllumerki að birtast undir tilhneigingum + trendable: Leyfa þessu myllumerki að birtast undir vinsælu efni usable: Leyfa færslum að nota þetta myllumerki user: role: Hlutverk @@ -253,6 +253,7 @@ is: events: Virkjaðir atburðir url: Slóð á endapunkt 'no': Nei + not_recommended: Ekki mælt með þessu recommended: Mælt með required: mark: "*" diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index 50a4caae9ac..aeabbcdfd48 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -253,6 +253,7 @@ it: events: Eventi abilitati url: URL endpoint 'no': 'No' + not_recommended: Non consigliato recommended: Consigliato required: mark: "*" diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index 5469a7c04ac..fe8e010cf5c 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -253,6 +253,7 @@ ko: events: 활성화된 이벤트 url: 엔드포인트 URL 'no': 아니오 + not_recommended: 추천하지 않음 recommended: 추천함 required: mark: "*" diff --git a/config/locales/simple_form.ku.yml b/config/locales/simple_form.ku.yml index d08b4bf051a..e4b0f07596a 100644 --- a/config/locales/simple_form.ku.yml +++ b/config/locales/simple_form.ku.yml @@ -44,7 +44,7 @@ ku: inbox_url: URLyê di rûpela pêşî de guhêrkerê ku tu dixwazî bi kar bînî jê bigire irreversible: Şandiyên parzûnkirî êdî bê veger wenda bibe, heger parzûn paşê were rakirin jî nabe locale: Zimanê navrûyê bikarhêner, agahdarîyên e-name û pêl kirin - locked: Bi destan daxwazên şopê hilbijêrîne da ku kî bikaribe te bişopîne + locked: Bi pejirandina daxwazên şopandinê, kî dikare te bişopîne bi destan kontrol bike password: Herî kêm 8 tîpan bi kar bîne phrase: Ji rewşa nivîsê tîpên girdek/hûrdek an jî ji hişyariya naveroka ya şandiyê wek serbixwe wê were hevbeş kirin scopes: |- @@ -255,6 +255,7 @@ ku: events: Bûyerên çalakkirî url: Girêdana xala dawîbûnê 'no': Na + not_recommended: Nayê pêşniyarkirin recommended: Pêşniyarkirî required: mark: "*" diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index d73da1c2a7c..cff70297e3b 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -253,6 +253,7 @@ lv: events: Iespējotie notikumi url: Galapunkta URL 'no': Nē + not_recommended: Nav ieteicams recommended: Ieteicams required: mark: "*" diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index 91a472b21f6..91ded57a62e 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -85,6 +85,7 @@ pl: ip: Wprowadź adres IPv4 lub IPv6. Możesz zablokować całe zakresy za pomocą składni CIDR. Uważaj, aby się nie zablokować! severities: no_access: Zablokuj dostęp do wszystkich zasobów + sign_up_block: Nowe rejestracje nie będą możliwe sign_up_requires_approval: Nowe rejestracje będą wymagać twojej zgody severity: Wybierz co ma się stać z żadaniami z tego adresu IP rule: @@ -251,6 +252,7 @@ pl: events: Włączone zdarzenia url: Endpoint URL 'no': Nie + not_recommended: Niezalecane recommended: Polecane required: mark: "*" diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml index ab6c2e3ff21..8c56bd2d27b 100644 --- a/config/locales/simple_form.pt-PT.yml +++ b/config/locales/simple_form.pt-PT.yml @@ -253,6 +253,7 @@ pt-PT: events: Eventos ativados url: URL do Endpoint 'no': Não + not_recommended: Não recomendado recommended: Recomendado required: mark: "*" diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index 8f897c91745..a9042b25d0a 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -253,6 +253,7 @@ ru: events: Включенные события url: Endpoint URL 'no': Нет + not_recommended: Не рекомендуется recommended: Рекомендуем required: mark: "*" diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml index 854670fe504..2724b1727fe 100644 --- a/config/locales/simple_form.sl.yml +++ b/config/locales/simple_form.sl.yml @@ -253,6 +253,7 @@ sl: events: Omogočeni dogodki url: URL končne točke 'no': Ne + not_recommended: Ni priporočeno recommended: Priporočeno required: mark: "*" diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index 8a23d1f6b74..27ad0abd588 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -253,6 +253,7 @@ th: events: เหตุการณ์ที่เปิดใช้งาน url: URL ปลายทาง 'no': ไม่ + not_recommended: ไม่แนะนำ recommended: แนะนำ required: mark: "*" diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index f63ad13aa63..20bb03cd484 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -253,6 +253,7 @@ tr: events: Etkin olaylar url: Uç nokta URL’si 'no': Hayır + not_recommended: Önerilmez recommended: Önerilen required: mark: "*" diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml index df9f1fb4dfd..3f12b6d6e72 100644 --- a/config/locales/simple_form.uk.yml +++ b/config/locales/simple_form.uk.yml @@ -253,6 +253,7 @@ uk: events: Увімкнені події url: URL кінцевої точки 'no': Ні + not_recommended: Не рекомендовано recommended: Рекомендовано required: mark: "*" diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index 143064c5d65..664974e4e4b 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -253,6 +253,7 @@ vi: events: Những sự kiện đã bật url: URL endpoint 'no': Tắt + not_recommended: Không đề xuất recommended: Đề xuất required: mark: "*" diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index 0c3c28c67a7..0239304b100 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -33,7 +33,7 @@ zh-CN: autofollow: 通过邀请链接注册的用户将会自动关注你 avatar: 文件大小限制 %{size},只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 %{dimensions}px bot: 来自这个帐户的绝大多数操作都是自动进行的,并且可能无人监控 - context: 过滤器的应用场景 + context: 过滤器的应用环境 current_password: 为了安全起见,请输入当前账号的密码 current_username: 请输入当前账号的用户名以确认 digest: 仅在你长时间未登录,且收到了私信时发送 @@ -146,7 +146,7 @@ zh-CN: chosen_languages: 语言过滤 confirm_new_password: 确认新密码 confirm_password: 确认密码 - context: 过滤器场景 + context: 过滤器环境 current_password: 当前密码 data: 数据文件 discoverable: 在本站用户目录中收录此账号 diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml index 3691af8926e..b5eb3e8c1f3 100644 --- a/config/locales/simple_form.zh-TW.yml +++ b/config/locales/simple_form.zh-TW.yml @@ -253,6 +253,7 @@ zh-TW: events: 已啟用的事件 url: 端點 URL 'no': 否 + not_recommended: 不建議 recommended: 建議 required: mark: "*" diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 7b02930c2a9..4ed611b18c8 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -255,7 +255,6 @@ sk: change_email_user_html: "%{name} zmenil/a emailovú adresu užívateľa %{target}" confirm_user_html: "%{name} potvrdil/a emailovú adresu používateľa %{target}" create_account_warning_html: "%{name} poslal/a upozornenie užívateľovi %{target}" - deleted_status: "(zmazaný príspevok)" filter_by_action: Filtruj podľa úkonu filter_by_user: Trieď podľa užívateľa title: Kontrólny záznam @@ -575,9 +574,6 @@ sk: desc_html: Zobraziť verejnú nástenku na hlavnej stránke title: Náhľad nástenky title: Nastavenia stránky - trendable_by_default: - desc_html: Ovplyvňuje haštagy ktoré predtým neboli zakázané - title: Dovoľ haštagom zobrazovať sa ako populárne, bez predchodzieho posudzovania trends: desc_html: Verejne zobraz už schválené haštagy, ktoré práve trendujú title: Populárne haštagy @@ -913,16 +909,6 @@ sk: carry_blocks_over_text: Tento užívateľ sa presunul z účtu %{acct}, ktorý si mal/a zablokovaný. carry_mutes_over_text: Tento užívateľ sa presunul z účtu %{acct}, ktorý si mal/a stíšený. notification_mailer: - digest: - action: Zobraziť všetky notifikácie - body: Tu nájdete krátky súhrn správ ktoré ste zmeškali od svojej poslednj návštevi od %{since} - mention: "%{name} ťa spomenul/a v:" - new_followers_summary: - few: A ešte, kým si bol/a preč, si získal/a %{count} nových následovateľov! Hurá! - many: A ešte, kým si bol/a preč, si získal/a %{count} nových následovateľov! Hurá! - one: A ešte, kým si bol/a preč, si získal/a jedného nového následovateľa! Hurá! - other: A ešte, kým si bol/a preč, si získal/a %{count} nových následovateľov! Hurá! - title: Zatiaľ čo si bol/a preč… favourite: body: 'Tvoj príspevok bol uložený medzi obľúbené užívateľa %{name}:' subject: "%{name} si obľúbil/a tvoj príspevok" diff --git a/config/locales/sl.yml b/config/locales/sl.yml index ea7b8e6ba3b..1b1aa1b6ac2 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -245,17 +245,21 @@ sl: approve_user: Odobri uporabnika assigned_to_self_report: Dodeli prijavo change_email_user: Spremeni e-poštni naslov uporabnika + change_role_user: Spremeni vlogo uporabnika confirm_user: Potrdi uporabnika create_account_warning: Ustvari opozorilo create_announcement: Ustvari obvestilo + create_canonical_email_block: Ustvari blokado e-pošte create_custom_emoji: Ustvari emodži po meri create_domain_allow: Ustvari odobritev domene create_domain_block: Ustvari blokado domene create_email_domain_block: Ustvari blokado domene e-pošte create_ip_block: Ustvari pravilo IP create_unavailable_domain: Ustvari domeno, ki ni na voljo + create_user_role: Ustvari vlogo demote_user: Ponižaj uporabnika destroy_announcement: Izbriši obvestilo + destroy_canonical_email_block: Izbriši blokado e-pošte destroy_custom_emoji: Izbriši emodži po meri destroy_domain_allow: Izbriši odobritev domene destroy_domain_block: Izbriši blokado domene @@ -264,6 +268,7 @@ sl: destroy_ip_block: Izbriši pravilo IP destroy_status: Izbriši objavo destroy_unavailable_domain: Izbriši domeno, ki ni na voljo + destroy_user_role: Uniči vlogo disable_2fa_user: Onemogoči disable_custom_emoji: Onemogoči emodži po meri disable_sign_in_token_auth_user: Onemogoči overjanje z žetonom po e-pošti za uporabnika @@ -290,24 +295,30 @@ sl: update_announcement: Posodobi objavo update_custom_emoji: Posodobi emodži po meri update_domain_block: Posodobi blokado domene + update_ip_block: Posodobi pravilo IP update_status: Posodobi objavo + update_user_role: Posodobi vlogo actions: approve_appeal_html: "%{name} je ugodil pritožbi uporabnika %{target} na moderatorsko odločitev" approve_user_html: "%{name} je odobril/a registracijo iz %{target}" assigned_to_self_report_html: "%{name} je dodelil/a prijavo %{target} sebi" change_email_user_html: "%{name} je spremenil/a naslov e-pošte uporabnika %{target}" + change_role_user_html: "%{name} je spremenil/a vlogo %{target}" confirm_user_html: "%{name} je potrdil/a naslov e-pošte uporabnika %{target}" create_account_warning_html: "%{name} je poslal/a opozorilo %{target}" create_announcement_html: "%{name} je ustvarila/a novo obvestilo %{target}" + create_canonical_email_block_html: "%{name} je dal/a na črni seznam e-pošto s ključnikom %{target}" create_custom_emoji_html: "%{name} je posodobil/a emotikone %{target}" create_domain_allow_html: "%{name} je dovolil/a federacijo z domeno %{target}" create_domain_block_html: "%{name} je blokiral/a domeno %{target}" create_email_domain_block_html: "%{name} je dal/a na črni seznam e-pošto domene %{target}" create_ip_block_html: "%{name} je ustvaril/a pravilo za IP %{target}" create_unavailable_domain_html: "%{name} je prekinil/a dostavo v domeno %{target}" + create_user_role_html: "%{name} je ustvaril/a vlogo %{target}" demote_user_html: "%{name} je ponižal/a uporabnika %{target}" destroy_announcement_html: "%{name} je izbrisal/a obvestilo %{target}" - destroy_custom_emoji_html: "%{name} je uničil/a emotikone %{target}" + destroy_canonical_email_block_html: "%{name} je odstranil/a s črnega seznama e-pošto s ključnikom %{target}" + destroy_custom_emoji_html: "%{name} je izbrisal/a emotikon %{target}" destroy_domain_allow_html: "%{name} ni dovolil/a federacije z domeno %{target}" destroy_domain_block_html: "%{name} je odblokiral/a domeno %{target}" destroy_email_domain_block_html: "%{name} je odblokiral/a e-pošto domene %{target}" @@ -315,6 +326,7 @@ sl: destroy_ip_block_html: "%{name} je izbrisal/a pravilo za IP %{target}" destroy_status_html: "%{name} je odstranil/a objavo uporabnika %{target}" destroy_unavailable_domain_html: "%{name} je nadaljeval/a dostav v domeno %{target}" + destroy_user_role_html: "%{name} je izbrisal/a vlogo %{target}" disable_2fa_user_html: "%{name} je onemogočil/a dvofaktorsko zahtevo za uporabnika %{target}" disable_custom_emoji_html: "%{name} je onemogočil/a emotikone %{target}" disable_sign_in_token_auth_user_html: "%{name} je onemogočil/a overjanje z žetonom po e-pošti za uporabnika %{target}" @@ -341,8 +353,9 @@ sl: update_announcement_html: "%{name} je posodobil/a objavo %{target}" update_custom_emoji_html: "%{name} je posodobil/a emotikone %{target}" update_domain_block_html: "%{name} je posodobil/a domenski blok za %{target}" + update_ip_block_html: "%{name} je spremenil/a pravilo za IP %{target}" update_status_html: "%{name} je posodobil/a objavo uporabnika %{target}" - deleted_status: "(izbrisana objava)" + update_user_role_html: "%{name} je spremenil/a vlogo %{target}" empty: Ni najdenih zapisnikov. filter_by_action: Filtriraj po dejanjih filter_by_user: Filtriraj po uporabnikih @@ -827,8 +840,8 @@ sl: title: Predogled časovnice title: Nastavitve strani trendable_by_default: - desc_html: Velja za ključnike, ki niso bili poprej onemogočeni - title: Dovoli, da so ključniki v trendu brez predhodnega pregleda + desc_html: Določeno vsebino v trendu je še vedno možno izrecno prepovedati + title: Dovoli trende brez predhodnega pregleda trends: desc_html: Javno prikaži poprej pregledano vsebino, ki je trenutno v trendu title: Trendi @@ -1222,7 +1235,7 @@ sl: add_keyword: Dodaj ključno besedo keywords: Ključne besede statuses: Posamezne objave - statuses_hint_html: Ta filter se nanaša na posamezne objave ne glede na to, ali se ujemajo s spodnjimi ključnimi besedami. Te objave lahko pregledate in jih odstranite iz filtra, če kliknete tukaj. + statuses_hint_html: Ta filter velja za izbrane posamezne objave, ne glede na to, ali se ujemajo s spodnjimi ključnimi besedami. Preglejte ali odstarnite objave iz filtra. title: Uredite filter errors: deprecated_api_multiple_keywords: Teh parametrov ni mogoče spremeniti iz tega programa, ker veljajo za več kot eno ključno besedo filtra. Uporabite novejšo izdaj programa ali spletni vmesnik. @@ -1266,12 +1279,28 @@ sl: trending_now: Zdaj v trendu generic: all: Vse + all_items_on_page_selected_html: + few: Na tej strani so izbrani %{count} elementi. + one: Na tej strani je izbran %{count} element. + other: Na tej strani je izbranih %{count} elementov. + two: Na tej strani sta izbrana %{count} elementa. + all_matching_items_selected_html: + few: Izbrani so %{count} elementi, ki ustrezajo vašemu iskanju. + one: Izbran je %{count} element, ki ustreza vašemu iskanju. + other: Izbranih je %{count} elementov, ki ustrezajo vašemu iskanju. + two: Izbrana sta %{count} elementa, ki ustrezata vašemu iskanju. changes_saved_msg: Spremembe so uspešno shranjene! copy: Kopiraj delete: Izbriši + deselect: Prekliči ves izbor none: Brez order_by: Razvrsti po save_changes: Shrani spremembe + select_all_matching_items: + few: Izberite %{count} elemente, ki ustrezajo vašemu iskanju. + one: Izberite %{count} element, ki ustreza vašemu iskanju. + other: Izberite %{count} elementov, ki ustrezajo vašemu iskanju. + two: Izberite %{count} elementa, ki ustrezata vašemu iskanju. today: danes validation_errors: few: Nekaj še ni čisto v redu! Spodaj si oglejte %{count} napake @@ -1384,21 +1413,6 @@ sl: subject: "%{name} je oddal/a prijavo" sign_up: subject: "%{name} se je vpisal/a" - digest: - action: Prikaži vsa obvestila - body: Tukaj je kratek povzetek sporočil, ki ste jih zamudili od vašega zadnjega obiska v %{since} - mention: "%{name} vas je omenil/a v:" - new_followers_summary: - few: Prav tako ste pridobili %{count} nove sledilce, ko ste bili odsotni! Juhu! - one: Prav tako ste pridobili enega novega sledilca, ko ste bili odsotni! Juhu! - other: Prav tako ste pridobili %{count} novih sledilcev, ko ste bili odsotni! Juhu! - two: Prav tako ste pridobili %{count} nova sledilca, ko ste bili odsotni! Juhu! - subject: - few: "%{count} nova obvestila od vašega zadnjega obiska 🐘" - one: "%{count} novo obvestilo od vašega zadnjega obiska 🐘" - other: "%{count} novih obvestil od vašega zadnjega obiska 🐘" - two: "%{count} novi obvestili od vašega zadnjega obiska 🐘" - title: V vaši odsotnosti... favourite: body: "%{name} je vzljubil/a vašo objavo:" subject: "%{name} je vzljubil/a vašo objavo" diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 8a91cc6f445..ef72bfbdf98 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -297,7 +297,6 @@ sq: create_unavailable_domain_html: "%{name} ndali dërgimin drejt përkatësisë %{target}" demote_user_html: "%{name} zhgradoi përdoruesin %{target}" destroy_announcement_html: "%{name} fshiu lajmërimin për %{target}" - destroy_custom_emoji_html: "%{name} asgjësoi emoxhin %{target}" destroy_domain_allow_html: "%{name} hoqi lejimin për federim me %{target}" destroy_domain_block_html: "%{name} zhbllokoi përkatësinë %{target}" destroy_email_domain_block_html: "%{name} hoqi bllokimin për përkatësinë email %{target}" @@ -332,7 +331,6 @@ sq: update_custom_emoji_html: "%{name} përditësoi emoxhin %{target}" update_domain_block_html: "%{name} përditësoi bllokimin e përkatësish për %{target}" update_status_html: "%{name} përditësoi gjendjen me %{target}" - deleted_status: "(fshiu gjendjen)" empty: S’u gjetën regjistra. filter_by_action: Filtroji sipas veprimit filter_by_user: Filtroji sipas përdoruesit @@ -791,9 +789,6 @@ sq: desc_html: Shfaqni lidhje te rrjedhë kohore publike në faqen hyrëse dhe lejoni te rrjedhë kohore publike hyrje API pa mirëfilltësim title: Lejo në rrjedhë kohore publike hyrje pa mirëfilltësim title: Rregullime sajti - trendable_by_default: - desc_html: Prek hashtag-ë që nuk kanë qenë të palejuar më parë - title: Lejo hashtag-ë në prirje pa paraparje paraprake trends: desc_html: Shfaqni publikisht hashtag-ë të shqyrtuar më parë që janë popullorë tani title: Hashtag-ë popullorë tani @@ -1310,17 +1305,6 @@ sq: subject: "%{name} parashtroi një raportim" sign_up: subject: "%{name} u regjistrua" - digest: - action: Shihini krejt njoftimet - body: Ja një përmbledhje e shkurtër e mesazheve që keni humbur që nga vizita juaj e fundit më %{since} - mention: "%{name} ju ka përmendur te:" - new_followers_summary: - one: Veç kësaj, u bëtë me një ndjekës të ri, teksa s’ishit këtu! Ëhë! - other: Veç kësaj, u bëtë me %{count} ndjekës të rinj, teksa s’ishit këtu! Shkëlqyeshëm! - subject: - one: "1 njoftim i ri që nga vizita juaj e fundit 🐘" - other: "%{count} njoftime të reja që nga vizita juaj e fundit 🐘" - title: Gjatë mungesës tuaj… favourite: body: 'Gjendja juaj u parapëlqye nga %{name}:' subject: "%{name} parapëlqeu gjendjen tuaj" diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index a94893b9e5e..692db061a3b 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -315,13 +315,6 @@ sr-Latn: moderation: title: Moderacija notification_mailer: - digest: - body: Evo kratak pregled šta ste propustili od poslednje posete od %{since} - mention: "%{name} Vas je pomenuo u:" - new_followers_summary: - few: Dobili ste %{count} nova pratioca! Sjajno! - one: Dobili ste jednog novog pratioca! Jeee! - other: Dobili ste %{count} novih pratioca! Sjajno! favourite: body: "%{name} je postavio kao omiljen Vaš status:" subject: "%{name} je postavio kao omiljen Vaš status" diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 2042fc4409a..e6cbb26d25f 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -146,7 +146,6 @@ sr: warn: Упозори web: Веб action_logs: - deleted_status: "(обрисан статус)" title: Записник custom_emojis: by_domain: Домен @@ -504,15 +503,6 @@ sr: moderation: title: Модерација notification_mailer: - digest: - action: Погледајте сва обавештења - body: Ево кратак преглед порука које сте пропустили од последње посете од %{since} - mention: "%{name} Вас је поменуо у:" - new_followers_summary: - few: Добили сте %{count} нова пратиоца! Сјајно! - one: Добили сте једног новог пратиоца! Јеее! - other: Добили сте %{count} нових пратиоца! Сјајно! - title: Док нисте били ту... favourite: body: "%{name} је поставио као омиљен Ваш статус:" subject: "%{name} је поставио као омиљен Ваш статус" diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 1e238b196df..77a44b75def 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -258,7 +258,6 @@ sv: create_domain_block_html: "%{name} blockerade domänen %{target}" create_email_domain_block_html: "%{name} svartlistade e-postdomän %{target}" create_ip_block_html: "%{name} skapade regel för IP %{target}" - destroy_custom_emoji_html: "%{name} förstörde emoji %{target}" destroy_domain_block_html: "%{name} avblockerade domänen %{target}" destroy_email_domain_block_html: "%{name} avblockerade e-postdomän %{target}" destroy_ip_block_html: "%{name} tog bort regel för IP %{target}" @@ -282,7 +281,6 @@ sv: update_custom_emoji_html: "%{name} uppdaterade emoji %{target}" update_domain_block_html: "%{name} uppdaterade domän-block för %{target}" update_status_html: "%{name} uppdaterade inlägget av %{target}" - deleted_status: "(raderad status)" empty: Inga loggar hittades. filter_by_action: Filtrera efter åtgärd filter_by_user: Filtrera efter användare @@ -912,14 +910,6 @@ sv: admin: sign_up: subject: "%{name} registrerade sig" - digest: - action: Visa alla aviseringar - body: Här är en kort sammanfattning av de meddelanden du missade sedan ditt senaste besök på %{since} - mention: "%{name} nämnde dig i:" - new_followers_summary: - one: Du har också förvärvat en ny följare! Jippie! - other: Du har också fått %{count} nya följare medans du var iväg! Otroligt! - title: I din frånvaro... favourite: body: 'Din status favoriserades av %{name}:' subject: "%{name} favoriserade din status" diff --git a/config/locales/th.yml b/config/locales/th.yml index 7f3c25ff125..125bb306234 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -230,17 +230,21 @@ th: approve_user: อนุมัติผู้ใช้ assigned_to_self_report: มอบหมายรายงาน change_email_user: เปลี่ยนอีเมลสำหรับผู้ใช้ + change_role_user: เปลี่ยนบทบาทของผู้ใช้ confirm_user: ยืนยันผู้ใช้ create_account_warning: สร้างคำเตือน create_announcement: สร้างประกาศ + create_canonical_email_block: สร้างการปิดกั้นอีเมล create_custom_emoji: สร้างอีโมจิที่กำหนดเอง create_domain_allow: สร้างการอนุญาตโดเมน create_domain_block: สร้างการปิดกั้นโดเมน create_email_domain_block: สร้างการปิดกั้นโดเมนอีเมล create_ip_block: สร้างกฎ IP create_unavailable_domain: สร้างโดเมนที่ไม่พร้อมใช้งาน + create_user_role: สร้างบทบาท demote_user: ลดขั้นผู้ใช้ destroy_announcement: ลบประกาศ + destroy_canonical_email_block: ลบการปิดกั้นอีเมล destroy_custom_emoji: ลบอีโมจิที่กำหนดเอง destroy_domain_allow: ลบการอนุญาตโดเมน destroy_domain_block: ลบการปิดกั้นโดเมน @@ -249,6 +253,7 @@ th: destroy_ip_block: ลบกฎ IP destroy_status: ลบโพสต์ destroy_unavailable_domain: ลบโดเมนที่ไม่พร้อมใช้งาน + destroy_user_role: ทำลายบทบาท disable_2fa_user: ปิดใช้งาน 2FA disable_custom_emoji: ปิดใช้งานอีโมจิที่กำหนดเอง disable_sign_in_token_auth_user: ปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมลสำหรับผู้ใช้ @@ -275,12 +280,15 @@ th: update_announcement: อัปเดตประกาศ update_custom_emoji: อัปเดตอีโมจิที่กำหนดเอง update_domain_block: อัปเดตการปิดกั้นโดเมน + update_ip_block: อัปเดตกฎ IP update_status: อัปเดตโพสต์ + update_user_role: อัปเดตบทบาท actions: approve_appeal_html: "%{name} ได้อนุมัติการอุทธรณ์การตัดสินใจในการควบคุมจาก %{target}" approve_user_html: "%{name} ได้อนุมัติการลงทะเบียนจาก %{target}" assigned_to_self_report_html: "%{name} ได้มอบหมายรายงาน %{target} ให้กับตนเอง" change_email_user_html: "%{name} ได้เปลี่ยนที่อยู่อีเมลของผู้ใช้ %{target}" + change_role_user_html: "%{name} ได้เปลี่ยนบทบาทของ %{target}" confirm_user_html: "%{name} ได้ยืนยันที่อยู่อีเมลของผู้ใช้ %{target}" create_account_warning_html: "%{name} ได้ส่งคำเตือนไปยัง %{target}" create_announcement_html: "%{name} ได้สร้างประกาศใหม่ %{target}" @@ -290,9 +298,10 @@ th: create_email_domain_block_html: "%{name} ได้ปิดกั้นโดเมนอีเมล %{target}" create_ip_block_html: "%{name} ได้สร้างกฎสำหรับ IP %{target}" create_unavailable_domain_html: "%{name} ได้หยุดการจัดส่งไปยังโดเมน %{target}" + create_user_role_html: "%{name} ได้สร้างบทบาท %{target}" demote_user_html: "%{name} ได้ลดขั้นผู้ใช้ %{target}" destroy_announcement_html: "%{name} ได้ลบประกาศ %{target}" - destroy_custom_emoji_html: "%{name} ได้ทำลายอีโมจิ %{target}" + destroy_custom_emoji_html: "%{name} ได้ลบอีโมจิ %{target}" destroy_domain_allow_html: "%{name} ได้ไม่อนุญาตการติดต่อกับภายนอกกับโดเมน %{target}" destroy_domain_block_html: "%{name} ได้เลิกปิดกั้นโดเมน %{target}" destroy_email_domain_block_html: "%{name} ได้เลิกปิดกั้นโดเมนอีเมล %{target}" @@ -300,6 +309,7 @@ th: destroy_ip_block_html: "%{name} ได้ลบกฎสำหรับ IP %{target}" destroy_status_html: "%{name} ได้เอาโพสต์โดย %{target} ออก" destroy_unavailable_domain_html: "%{name} ได้ทำการจัดส่งไปยังโดเมน %{target} ต่อ" + destroy_user_role_html: "%{name} ได้ลบบทบาท %{target}" disable_2fa_user_html: "%{name} ได้ปิดใช้งานความต้องการสองปัจจัยสำหรับผู้ใช้ %{target}" disable_custom_emoji_html: "%{name} ได้ปิดใช้งานอีโมจิ %{target}" disable_sign_in_token_auth_user_html: "%{name} ได้ปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมลสำหรับ %{target}" @@ -326,8 +336,9 @@ th: update_announcement_html: "%{name} ได้อัปเดตประกาศ %{target}" update_custom_emoji_html: "%{name} ได้อัปเดตอีโมจิ %{target}" update_domain_block_html: "%{name} ได้อัปเดตการปิดกั้นโดเมนสำหรับ %{target}" + update_ip_block_html: "%{name} ได้เปลี่ยนกฎสำหรับ IP %{target}" update_status_html: "%{name} ได้อัปเดตโพสต์โดย %{target}" - deleted_status: "(โพสต์ที่ลบแล้ว)" + update_user_role_html: "%{name} ได้เปลี่ยนบทบาท %{target}" empty: ไม่พบรายการบันทึก filter_by_action: กรองตามการกระทำ filter_by_user: กรองตามผู้ใช้ @@ -760,9 +771,6 @@ th: desc_html: แสดงลิงก์ไปยังเส้นเวลาสาธารณะในหน้าเริ่มต้นและอนุญาตการเข้าถึง API ไปยังเส้นเวลาสาธารณะโดยไม่มีการรับรองความถูกต้อง title: อนุญาตการเข้าถึงเส้นเวลาสาธารณะที่ไม่ได้รับรองความถูกต้อง title: การตั้งค่าไซต์ - trendable_by_default: - desc_html: มีผลต่อแฮชแท็กที่ไม่ได้ไม่อนุญาตก่อนหน้านี้ - title: อนุญาตให้แฮชแท็กขึ้นแนวโน้มโดยไม่มีการตรวจทานล่วงหน้า trends: desc_html: แสดงเนื้อหาที่ตรวจทานแล้วก่อนหน้านี้ที่กำลังนิยมในปัจจุบันเป็นสาธารณะ title: แนวโน้ม @@ -1125,10 +1133,18 @@ th: expires_on: หมดอายุเมื่อ %{date} keywords: other: "%{count} คำสำคัญ" + statuses: + other: "%{count} โพสต์" title: ตัวกรอง new: save: บันทึกตัวกรองใหม่ title: เพิ่มตัวกรองใหม่ + statuses: + back_to_filter: กลับไปที่ตัวกรอง + batch: + remove: เอาออกจากตัวกรอง + index: + title: โพสต์ที่กรองอยู่ footer: developers: นักพัฒนา more: เพิ่มเติม… @@ -1139,6 +1155,7 @@ th: changes_saved_msg: บันทึกการเปลี่ยนแปลงสำเร็จ! copy: คัดลอก delete: ลบ + deselect: ไม่เลือกทั้งหมด none: ไม่มี order_by: เรียงลำดับตาม save_changes: บันทึกการเปลี่ยนแปลง @@ -1238,14 +1255,6 @@ th: subject: "%{name} ได้ส่งรายงาน" sign_up: subject: "%{name} ได้ลงทะเบียน" - digest: - action: ดูการแจ้งเตือนทั้งหมด - mention: "%{name} ได้กล่าวถึงคุณใน:" - new_followers_summary: - other: นอกจากนี้คุณยังได้รับ %{count} ผู้ติดตามใหม่ขณะที่ไม่อยู่! มหัศจรรย์! - subject: - other: "%{count} การแจ้งเตือนใหม่นับตั้งแต่การเยี่ยมชมล่าสุดของคุณ 🐘" - title: เมื่อคุณไม่อยู่... favourite: body: 'โพสต์ของคุณได้รับการชื่นชอบโดย %{name}:' subject: "%{name} ได้ชื่นชอบโพสต์ของคุณ" diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 2706070a351..151cc57c8d2 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -235,17 +235,21 @@ tr: approve_user: Kullanıcıyı Onayla assigned_to_self_report: Raporu Ata change_email_user: Kullanıcı E-postasını Değiştir + change_role_user: Kullanıcının Rolünü Değiştir confirm_user: Kullanıcıyı Onayla create_account_warning: Uyarı Oluştur create_announcement: Duyuru Oluştur + create_canonical_email_block: E-posta Engeli Oluştur create_custom_emoji: Özel İfade Oluştur create_domain_allow: İzin Verilen Alan Adı Oluştur create_domain_block: Engellenen Alan Adı Oluştur create_email_domain_block: E-Posta Alan Adı Engeli Oluştur create_ip_block: IP kuralı oluştur create_unavailable_domain: Mevcut Olmayan Alan Adı Oluştur + create_user_role: Rol Oluştur demote_user: Kullanıcıyı Düşür destroy_announcement: Duyuru Sil + destroy_canonical_email_block: E-Posta Engelini Sil destroy_custom_emoji: Özel İfadeyi Sil destroy_domain_allow: İzin Verilen Alan Adını Sil destroy_domain_block: Engellenen Alan Adını Sil @@ -254,6 +258,7 @@ tr: destroy_ip_block: IP kuralını sil destroy_status: Durumu Sil destroy_unavailable_domain: Mevcut Olmayan Alan Adı Sil + destroy_user_role: Rolü Kaldır disable_2fa_user: 2AD Kapat disable_custom_emoji: Özel İfadeyi Devre Dışı Bırak disable_sign_in_token_auth_user: Kullanıcı için E-posta Token Doğrulamayı devre dışı bırak @@ -280,24 +285,30 @@ tr: update_announcement: Duyuruyu Güncelle update_custom_emoji: Özel İfadeyi Güncelle update_domain_block: Engellenen Alan Adını Güncelle + update_ip_block: IP kuralını güncelle update_status: Durumu Güncelle + update_user_role: Rolü Güncelle actions: approve_appeal_html: "%{name}, %{target} kullanıcısının yönetim kararına itirazını kabul etti" approve_user_html: "%{name}, %{target} konumundan kaydı onayladı" assigned_to_self_report_html: "%{name} kendilerine %{target} adlı raporu verdi" change_email_user_html: "%{name}, %{target} kullanıcısının e-posta adresini değiştirdi" + change_role_user_html: "%{name}, %{target} kişisinin rolünü değiştirdi" confirm_user_html: "%{name} %{target} kullanıcısının e-posta adresini onayladı" create_account_warning_html: "%{name} %{target} 'a bir uyarı gönderdi" create_announcement_html: "%{name}, yeni %{target} duyurusunu oluşturdu" + create_canonical_email_block_html: "%{name}, %{target} karmasıyla e-posta engelledi" create_custom_emoji_html: "%{name} yeni %{target} ifadesini yükledi" create_domain_allow_html: "%{name}, %{target} alan adıyla birliğe izin verdi" create_domain_block_html: "%{name}, %{target} alan adını engelledi" create_email_domain_block_html: "%{name}, %{target} e-posta alan adını engelledi" create_ip_block_html: "%{name}, %{target} IP adresi için kural oluşturdu" create_unavailable_domain_html: "%{name}, %{target} alan adına teslimatı durdurdu" + create_user_role_html: "%{name}, %{target} rolünü oluşturdu" demote_user_html: "%{name}, %{target} kullanıcısını düşürdü" destroy_announcement_html: "%{name}, %{target} duyurusunu sildi" - destroy_custom_emoji_html: "%{name}, %{target} emojisini yok etti" + destroy_canonical_email_block_html: "%{name}, %{target} karmasıyla e-posta engelini kaldırdı" + destroy_custom_emoji_html: "%{name}, %{target} ifadesini sildi" destroy_domain_allow_html: "%{name}, %{target} alan adıyla birlik iznini kaldırdı" destroy_domain_block_html: "%{name}, %{target} alan adı engelini kaldırdı" destroy_email_domain_block_html: "%{name}, %{target} e-posta alan adı engelini kaldırdı" @@ -305,6 +316,7 @@ tr: destroy_ip_block_html: "%{name}, %{target} IP adresi kuralını sildi" destroy_status_html: "%{name}, %{target} kullanıcısının gönderisini kaldırdı" destroy_unavailable_domain_html: "%{name}, %{target} alan adına teslimatı sürdürdü" + destroy_user_role_html: "%{name}, %{target} rolünü sildi" disable_2fa_user_html: "%{name}, %{target} kullanıcısının iki aşamalı doğrulama gereksinimini kapattı" disable_custom_emoji_html: "%{name}, %{target} emojisini devre dışı bıraktı" disable_sign_in_token_auth_user_html: "%{name}, %{target} için e-posta token doğrulamayı devre dışı bıraktı" @@ -331,8 +343,9 @@ tr: update_announcement_html: "%{name}, %{target} duyurusunu güncelledi" update_custom_emoji_html: "%{name}, %{target} emojisini güncelledi" update_domain_block_html: "%{name}, %{target} alan adının engelini güncelledi" + update_ip_block_html: "%{name}, %{target} IP adresi için kuralı güncelledi" update_status_html: "%{name}, %{target} kullanıcısının gönderisini güncelledi" - deleted_status: "(silinmiş durum)" + update_user_role_html: "%{name}, %{target} rolünü değiştirdi" empty: Kayıt bulunamadı. filter_by_action: Eyleme göre filtre filter_by_user: Kullanıcıya göre filtre @@ -795,8 +808,8 @@ tr: title: Zaman çizelgesi önizlemesi title: Site Ayarları trendable_by_default: - desc_html: Daha önce izin verilmeyen etiketleri etkiler - title: Ön inceleme yapmadan etiketlerin trend olmasına izin ver + desc_html: Belirli öne çıkan içeriğe yine de açıkça izin verilmeyebilir + title: Ön inceleme yapmadan öne çıkmalara izin ver trends: desc_html: Şu anda trend olan ve daha önce incelenen etiketleri herkese açık olarak göster title: Gündem etiketleri @@ -1182,7 +1195,7 @@ tr: add_keyword: Anahtar sözcük ekle keywords: Anahtar Sözcükler statuses: Tekil gönderiler - statuses_hint_html: Bu filtre aşağıdaki anahtar kelimelere eşlenip eşlenmediklerinden bağımsız olarak tekil gönderileri seçmek için uygulanıyor. Bu gönderileri gözden geçirip, buraya tıklayarak filtreden kaldırabilirsiniz. + statuses_hint_html: Bu filtre, aşağıdaki anahtar kelimelerle eşleşip eşleşmediklerinden bağımsız olarak tekil gönderileri seçmek için uygulanıyor. Filtredeki gönderileri inceleyin veya kaldırın. title: Filtreyi düzenle errors: deprecated_api_multiple_keywords: Bu parametreler, birden fazla filtre anahtar sözcüğü için geçerli olduğundan dolayı bu uygulama içerisinden değiştirilemezler. Daha yeni bir uygulama veya web arayüzünü kullanın. @@ -1220,12 +1233,22 @@ tr: trending_now: Şu an gündemde generic: all: Tümü + all_items_on_page_selected_html: + one: Bu sayfadaki %{count} öğe seçilmiş. + other: Bu sayfadaki tüm %{count} öğe seçilmiş. + all_matching_items_selected_html: + one: Aramanızla eşleşen %{count} öğe seçilmiş. + other: Aramanızla eşleşen tüm %{count} öğe seçilmiş. changes_saved_msg: Değişiklikler başarıyla kaydedildi! copy: Kopyala delete: Sil + deselect: Hiçbirini seçme none: Hiçbiri order_by: Sıralama ölçütü save_changes: Değişiklikleri kaydet + select_all_matching_items: + one: Aramanızla eşleşen %{count} öğeyi seç. + other: Aramanızla eşleşen tüm %{count} öğeyi seç. today: bugün validation_errors: one: Bir şeyler ters gitti! Lütfen aşağıdaki hatayı gözden geçiriniz @@ -1334,17 +1357,6 @@ tr: subject: "%{name} bir bildirim gönderdi" sign_up: subject: "%{name} kaydoldu" - digest: - action: Tüm bildirimleri görüntüle - body: Son ziyaretiniz olan %{since}'den beri'da kaçırdığınız şeylerin özeti - mention: "%{name} senden bahsetti:" - new_followers_summary: - one: Ayrıca, uzaktayken yeni bir takipçi kazandınız! Yaşasın! - other: Ayrıca, uzaktayken %{count} yeni takipçi kazandınız! İnanılmaz! - subject: - one: "Son ziyaretinizden bu yana 1 yeni bildirim 🐘" - other: "Son ziyaretinizden bu yana %{count} yeni bildirim 🐘" - title: Senin yokluğunda... favourite: body: "%{name} durumunu beğendi:" subject: "%{name} durumunu beğendi" diff --git a/config/locales/uk.yml b/config/locales/uk.yml index c1ca26c52a6..30e9f3e566a 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -243,17 +243,21 @@ uk: approve_user: Затвердити користувачів assigned_to_self_report: Призначити звіт change_email_user: Змінити електронну пошту для користувача + change_role_user: Змінити роль користувача confirm_user: Підтвердити користувача create_account_warning: Створити попередження create_announcement: Створити оголошення + create_canonical_email_block: Створити блок електронної пошти create_custom_emoji: Створити користувацьке емодзі create_domain_allow: Створити дозвіл на домен create_domain_block: Створити блокування домену create_email_domain_block: Створити блокування поштового домену create_ip_block: Створити правило IP create_unavailable_domain: Створити недоступний домен + create_user_role: Створити роль demote_user: Понизити користувача destroy_announcement: Видалити оголошення + destroy_canonical_email_block: Видалити блок електронної пошти destroy_custom_emoji: Видалити користувацьке емодзі destroy_domain_allow: Видалити дозвіл на домен destroy_domain_block: Видалити блокування домену @@ -262,6 +266,7 @@ uk: destroy_ip_block: Видалити правило IP destroy_status: Видалити пост destroy_unavailable_domain: Видалити недоступний домен + destroy_user_role: Знищити роль disable_2fa_user: Вимкнути 2FA disable_custom_emoji: Вимкнути користувацькі емодзі disable_sign_in_token_auth_user: Вимкнути автентифікацію за допомогою е-пошти для користувача @@ -288,24 +293,30 @@ uk: update_announcement: Оновити оголошення update_custom_emoji: Оновити користувацькі емодзі update_domain_block: Оновити блокування домену + update_ip_block: Оновити правило IP update_status: Оновити статус + update_user_role: Оновити роль actions: approve_appeal_html: "%{name} затвердили звернення на оскарження рішення від %{target}" approve_user_html: "%{name} схвалює реєстрацію від %{target}" assigned_to_self_report_html: "%{name} створює скаргу %{target} на себе" change_email_user_html: "%{name} змінює поштову адресу користувача %{target}" + change_role_user_html: "%{name} змінює роль %{target}" confirm_user_html: "%{name} підтверджує стан поштової адреси користувача %{target}" create_account_warning_html: "%{name} надсилає попередження до %{target}" create_announcement_html: "%{name} створює нове оголошення %{target}" + create_canonical_email_block_html: "%{name} блокує електронну пошту з хешем %{target}" create_custom_emoji_html: "%{name} завантажує нові емодзі %{target}" create_domain_allow_html: "%{name} дозволяє федерацію з доменом %{target}" create_domain_block_html: "%{name} блокує домен %{target}" create_email_domain_block_html: "%{name} блокує домен електронної пошти %{target}" create_ip_block_html: "%{name} створює правило для IP %{target}" create_unavailable_domain_html: "%{name} зупиняє доставляння на домен %{target}" + create_user_role_html: "%{name} створює роль %{target}" demote_user_html: "%{name} понижує користувача %{target}" destroy_announcement_html: "%{name} видаляє оголошення %{target}" - destroy_custom_emoji_html: "%{name} знищує емодзі %{target}" + destroy_canonical_email_block_html: "%{name} розблоковує електронну пошту з хешем %{target}" + destroy_custom_emoji_html: "%{name} видаляє емоджі %{target}" destroy_domain_allow_html: "%{name} скасовує федерацію з доменом %{target}" destroy_domain_block_html: "%{name} розблокує домен %{target}" destroy_email_domain_block_html: "%{name} розблоковує домен електронної пошти %{target}" @@ -313,6 +324,7 @@ uk: destroy_ip_block_html: "%{name} видаляє правило для IP %{target}" destroy_status_html: "%{name} видаляє статус %{target}" destroy_unavailable_domain_html: "%{name} відновлює доставляння на домен %{target}" + destroy_user_role_html: "%{name} видаляє роль %{target}" disable_2fa_user_html: "%{name} вимикає двоетапну перевірку для користувача %{target}" disable_custom_emoji_html: "%{name} вимикає емодзі %{target}" disable_sign_in_token_auth_user_html: "%{name} вимикає автентифікацію через е-пошту для %{target}" @@ -339,8 +351,9 @@ uk: update_announcement_html: "%{name} оновлює оголошення %{target}" update_custom_emoji_html: "%{name} оновлює емодзі %{target}" update_domain_block_html: "%{name} оновлює блокування домену для %{target}" + update_ip_block_html: "%{name} змінює правило для IP %{target}" update_status_html: "%{name} змінює статус користувача %{target}" - deleted_status: "(видалений статус)" + update_user_role_html: "%{name} змінює роль %{target}" empty: Не знайдено жодного журналу. filter_by_action: Фільтрувати за дією filter_by_user: Фільтрувати за користувачем @@ -624,6 +637,7 @@ uk: resolve_description_html: Не буде застосовано жодних дій проти облікового запису, на який скаржилися, не буде записано попередження, а скаргу буде закрито. silence_description_html: Профіль буде видимий лише тим, хто вже стежить за ним або знайде його самостійно, сильно обмежуючи його знаходження. Можна потім скасувати. suspend_description_html: Профіль і весь його вміст буде недоступним, поки його не буде видалено. Взаємодія з обліковим записом буде неможливою. + actions_description_html: Визначте, які дії слід вжити для розв'язання цієї скарги. Якщо ви оберете каральні дії проти зареєстрованого облікового запису, про них буде надіслано сповіщення електронним листом, крім випадків, коли вибрано категорію Спам. add_to_report: Додати ще подробиць до скарги are_you_sure: Ви впевнені? assign_to_self: Призначити мені @@ -820,8 +834,8 @@ uk: title: Передпоказ фіду title: Налаштування сайту trendable_by_default: - desc_html: Впливає на хештеги, які не були заборонені раніше - title: Дозволити хештегам потрапляти в тренди без попереднього перегляду + desc_html: Конкретні популярні матеріали все одно можуть бути явно відхилені + title: Дозволити популярне без попереднього огляду trends: desc_html: Відображати розглянуті хештеґи, які популярні зараз title: Популярні хештеги @@ -1205,6 +1219,8 @@ uk: edit: add_keyword: Додати ключове слово keywords: Ключові слова + statuses: Окремі дописи + statuses_hint_html: Цей фільтр застосовується для вибору окремих дописів, незалежно від того, чи збігаються вони з ключовими словами нижче. Перегляд чи вилучення дописів з фільтра. title: Редагувати фільтр errors: deprecated_api_multiple_keywords: Ці параметри не можна змінити з цього застосунку, тому що вони застосовуються до більш ніж одного ключового слова. Використовуйте новішу версію застосунку або вебінтерфейс. @@ -1220,10 +1236,27 @@ uk: many: "%{count} ключових слів" one: "%{count} ключове слово" other: "%{count} ключових слів" + statuses: + few: "%{count} дописи" + many: "%{count} дописів" + one: "%{count} допис" + other: "%{count} дописа" + statuses_long: + few: Сховано %{count} окремі дописи + many: Сховано %{count} окремих дописів + one: Сховано %{count} окремий допис + other: Сховано %{count} окремі дописи title: Фільтри new: save: Зберегти новий фільтр title: Додати фільтр + statuses: + back_to_filter: Назад до фільтру + batch: + remove: Вилучити з фільтра + index: + hint: Цей фільтр застосовується для вибору окремих дописів, незалежно від інших критеріїв. Ви можете додавати більше дописів до цього фільтра з вебінтерфейсу. + title: Відфільтровані дописи footer: developers: Розробникам more: Більше… @@ -1231,12 +1264,28 @@ uk: trending_now: Актуальні generic: all: Усі + all_items_on_page_selected_html: + few: Усі %{count} елементи на цій сторінці вибрано. + many: Усі %{count} елементів на цій сторінці вибрано. + one: "%{count} елемент на цій сторінці вибрано." + other: "%{count} елементи на цій сторінці вибрано." + all_matching_items_selected_html: + few: Усі %{count} елементи, що збігаються з вашим пошуком вибрано. + many: Усі %{count} елементів, що збігаються з вашим пошуком вибрано. + one: "%{count} елемент, що збігається з вашим пошуком вибрано." + other: Усі %{count} елементи, що збігаються з вашим пошуком вибрано. changes_saved_msg: Зміни успішно збережені! copy: Копіювати delete: Видалити + deselect: Скасувати вибір none: Немає order_by: Сортувати за save_changes: Зберегти зміни + select_all_matching_items: + few: Вибрати всі %{count} елементи, що збігаються з вашим пошуком. + many: Вибрати всі %{count} елементів, що збігаються з вашим пошуком. + one: Вибрати %{count} елемент, що збігається з вашим пошуком. + other: Вибрати всі %{count} елементи, що збігаються з вашим пошуком. today: сьогодні validation_errors: few: Щось досі не гаразд! Перегляньте %{count} повідомлень про помилки @@ -1349,21 +1398,6 @@ uk: subject: "%{name} подає скаргу" sign_up: subject: "%{name} приєднується" - digest: - action: Показати усі сповіщення - body: Коротко про пропущене вами з Вашого останнього входу %{since} - mention: "%{name} згадав(-ла) Вас в:" - new_followers_summary: - few: У Вас з'явилось %{count} нових підписники! Чудово! - many: У Вас з'явилось %{count} нових підписників! Чудово! - one: Також, у Вас з'явився новий підписник, коли ви були відсутні! Ура! - other: Також, у Вас з'явилось %{count} нових підписників, поки ви були відсутні! Чудово! - subject: - few: "%{count} нові сповіщення з вашого останнього відвідування 🐘" - many: "%{count} нових сповіщень з вашого останнього відвідування 🐘" - one: "1 нове сповіщення з вашого останнього відвідування 🐘" - other: "%{count} нових сповіщень з вашого останнього відвідування 🐘" - title: Поки ви були відсутні... favourite: body: 'Ваш статус подобається %{name}:' subject: Ваш статус сподобався %{name} diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 625d3a07efc..dfc7623ddca 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -228,17 +228,21 @@ vi: approve_user: Chấp nhận người dùng assigned_to_self_report: Tự xử lý báo cáo change_email_user: Đổi email người dùng + change_role_user: Thay đổi vai trò confirm_user: Xác minh người dùng create_account_warning: Nhắc nhở người dùng create_announcement: Tạo thông báo mới + create_canonical_email_block: Tạo chặn tên miền email mới create_custom_emoji: Tạo emoji create_domain_allow: Cho phép máy chủ create_domain_block: Chặn máy chủ create_email_domain_block: Chặn tên miền email create_ip_block: Tạo chặn IP mới create_unavailable_domain: Máy chủ không khả dụng + create_user_role: Tạo vai trò demote_user: Xóa vai trò destroy_announcement: Xóa thông báo + destroy_canonical_email_block: Bỏ chặn tên miền email destroy_custom_emoji: Xóa emoji destroy_domain_allow: Bỏ cho phép máy chủ destroy_domain_block: Bỏ chặn máy chủ @@ -247,6 +251,7 @@ vi: destroy_ip_block: Xóa IP đã chặn destroy_status: Xóa tút destroy_unavailable_domain: Xóa máy chủ không khả dụng + destroy_user_role: Xóa vai trò disable_2fa_user: Vô hiệu hóa 2FA disable_custom_emoji: Vô hiệu hóa emoji disable_sign_in_token_auth_user: Vô hiệu hóa xác minh bằng email cho người dùng @@ -273,23 +278,29 @@ vi: update_announcement: Cập nhật thông báo update_custom_emoji: Cập nhật emoji update_domain_block: Cập nhật máy chủ chặn + update_ip_block: Cập nhật chặn IP update_status: Cập nhật tút + update_user_role: Cập nhật vai trò actions: approve_appeal_html: "%{name} đã chấp nhận kháng cáo của %{target}" approve_user_html: "%{name} đã chấp nhận đăng ký từ %{target}" assigned_to_self_report_html: "%{name} tự xử lý báo cáo %{target}" change_email_user_html: "%{name} đã thay đổi địa chỉ email của %{target}" + change_role_user_html: "%{name} đã thay đổi vai trò %{target}" confirm_user_html: "%{name} đã xác minh địa chỉ email của %{target}" create_account_warning_html: "%{name} đã nhắc nhở %{target}" create_announcement_html: "%{name} tạo thông báo mới %{target}" + create_canonical_email_block_html: "%{name} chặn email với hàm băm %{target}" create_custom_emoji_html: "%{name} đã tải lên biểu tượng cảm xúc mới %{target}" create_domain_allow_html: "%{name} kích hoạt liên hợp với %{target}" create_domain_block_html: "%{name} chặn máy chủ %{target}" create_email_domain_block_html: "%{name} chặn tên miền email %{target}" create_ip_block_html: "%{name} đã chặn IP %{target}" create_unavailable_domain_html: "%{name} ngưng phân phối với máy chủ %{target}" + create_user_role_html: "%{name} đã tạo vai trò %{target}" demote_user_html: "%{name} đã xóa vai trò của %{target}" destroy_announcement_html: "%{name} xóa thông báo %{target}" + destroy_canonical_email_block_html: "%{name} bỏ chặn email với hàm băm %{target}" destroy_custom_emoji_html: "%{name} đã xóa emoji %{target}" destroy_domain_allow_html: "%{name} đã ngừng liên hợp với %{target}" destroy_domain_block_html: "%{name} bỏ chặn máy chủ %{target}" @@ -298,6 +309,7 @@ vi: destroy_ip_block_html: "%{name} bỏ chặn IP %{target}" destroy_status_html: "%{name} đã xóa tút của %{target}" destroy_unavailable_domain_html: "%{name} tiếp tục phân phối với máy chủ %{target}" + destroy_user_role_html: "%{name} đã xóa vai trò %{target}" disable_2fa_user_html: "%{name} đã vô hiệu hóa xác minh hai bước của %{target}" disable_custom_emoji_html: "%{name} đã ẩn emoji %{target}" disable_sign_in_token_auth_user_html: "%{name} vô hiệu hóa xác minh email của %{target}" @@ -324,8 +336,9 @@ vi: update_announcement_html: "%{name} cập nhật thông báo %{target}" update_custom_emoji_html: "%{name} đã cập nhật emoji %{target}" update_domain_block_html: "%{name} cập nhật chặn máy chủ %{target}" + update_ip_block_html: "%{name} cập nhật chặn IP %{target}" update_status_html: "%{name} cập nhật tút của %{target}" - deleted_status: "(tút đã xóa)" + update_user_role_html: "%{name} đã thay đổi vai trò %{target}" empty: Không tìm thấy bản ghi. filter_by_action: Theo hành động filter_by_user: Theo người @@ -777,8 +790,8 @@ vi: title: Cho phép truy cập vào dòng thời gian công cộng không cần cho phép title: Cài đặt trang web trendable_by_default: - desc_html: Ảnh hưởng đến các hashtag chưa được cho phép trước đây - title: Cho phép hashtags theo xu hướng mà không cần xem xét trước + desc_html: Nội dung xu hướng cụ thể vẫn có thể bị cấm một cách rõ ràng + title: Cho phép xu hướng mà không cần xem xét trước trends: desc_html: Hiển thị công khai các hashtag được xem xét trước đây hiện đang là xu hướng title: Hashtag xu hướng @@ -1160,6 +1173,7 @@ vi: add_keyword: Thêm từ khoá keywords: Từ khóa statuses: Những tút riêng lẻ + statuses_hint_html: Bộ lọc này áp dụng cho các tút riêng lẻ được chọn bất kể chúng có khớp với các từ khóa bên dưới hay không. Xem lại hoặc xóa các tút từ bộ lọc. title: Chỉnh sửa bộ lọc errors: deprecated_api_multiple_keywords: Không thể thay đổi các tham số này từ ứng dụng này vì chúng áp dụng cho nhiều hơn một từ khóa bộ lọc. Sử dụng ứng dụng mới hơn hoặc giao diện web. @@ -1174,6 +1188,8 @@ vi: other: "%{count} từ khóa" statuses: other: "%{count} tút" + statuses_long: + other: "%{count} tút riêng lẻ đã ẩn" title: Bộ lọc new: save: Lưu thành bộ lọc mới @@ -1183,6 +1199,7 @@ vi: batch: remove: Xóa khỏi bộ lọc index: + hint: Bộ lọc này áp dụng để chọn các tút riêng lẻ bất kể các tiêu chí khác. Bạn có thể thêm các tút khác vào bộ lọc này từ giao diện web. title: Những tút đã lọc footer: developers: Phát triển @@ -1191,12 +1208,19 @@ vi: trending_now: Xu hướng generic: all: Tất cả + all_items_on_page_selected_html: + other: Toàn bộ %{count} mục trong trang này đã được chọn. + all_matching_items_selected_html: + other: Toàn bộ %{count} mục trùng khớp với tìm kiếm đã được chọn. changes_saved_msg: Đã lưu thay đổi! copy: Sao chép delete: Xóa + deselect: Bỏ chọn tất cả none: Trống order_by: Sắp xếp save_changes: Lưu thay đổi + select_all_matching_items: + other: Chọn tất cả%{count} mục trùng hợp với tìm kiếm của bạn. today: hôm nay validation_errors: other: Đã có %{count} lỗi xảy ra! Xem chi tiết bên dưới @@ -1303,15 +1327,6 @@ vi: subject: "%{name} đã gửi báo cáo" sign_up: subject: "%{name} đã được đăng ký" - digest: - action: Xem toàn bộ thông báo - body: Dưới đây là những tin nhắn bạn đã bỏ lỡ kể từ lần truy cập trước vào %{since} - mention: "%{name} nhắc đến bạn trong:" - new_followers_summary: - other: Ngoài ra, bạn đã có %{count} người theo dõi mới trong khi đi chơi! Ngạc nhiên chưa! - subject: - other: "%{count} thông báo mới kể từ lần đăng nhập cuối 🐘" - title: Khi bạn offline... favourite: body: Tút của bạn vừa được thích bởi %{name} subject: "%{name} vừa thích tút của bạn" diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 1a71554bb7a..e3eacca16e0 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -22,9 +22,9 @@ zh-CN: federation_hint_html: 在 %{instance} 上拥有账号后,你可以关注任何兼容 Mastodon 服务器上的人。 get_apps: 尝试移动应用 hosted_on: 运行在 %{domain} 上的 Mastodon 站点 - instance_actor_flash: '这个账号是个虚拟账号,不代表任何用户,只用来代表服务器本身。它用于和其它服务器互通,所以不应该被封禁,除非你想封禁整个实例。但是想封禁整个实例的时候,你应该用域名封禁。 - - ' + instance_actor_flash: | + 该账号用来代表虚拟角色,并不代表个人用户,仅代表服务器本身。 + 该账号用于达成互联之目的,除非你想要封禁整个实例,否则该账号不应该被封禁。在此种情况下,你应该使用域名封禁。 learn_more: 了解详情 logged_in_as_html: 您当前以 %{username} 登录。 logout_before_registering: 您已登录。 @@ -62,7 +62,7 @@ zh-CN: followers: other: 关注者 following: 正在关注 - instance_actor_flash: 这个账户是一个虚拟账户,用来代表服务器自身,不代表任何实际用户。它用于互通功能,不应该被封禁。 + instance_actor_flash: 该账号用来代表虚拟角色,并不代表个人用户,仅代表服务器本身。该账号用于达成互联之目的,不应该被停用。 joined: 加入于 %{date} last_active: 最近活动 link_verified_on: 此链接的所有权已在 %{date} 检查 @@ -230,6 +230,7 @@ zh-CN: approve_user: 批准用户 assigned_to_self_report: 指派举报 change_email_user: 为用户修改邮箱地址 + change_role_user: 更改用户角色 confirm_user: 确认用户 create_account_warning: 创建警告 create_announcement: 创建公告 @@ -239,6 +240,7 @@ zh-CN: create_email_domain_block: 封禁电子邮箱域名 create_ip_block: 新建 IP 规则 create_unavailable_domain: 创建不可用域名 + create_user_role: 创建角色 demote_user: 给用户降职 destroy_announcement: 删除公告 destroy_custom_emoji: 删除自定义表情符号 @@ -249,6 +251,7 @@ zh-CN: destroy_ip_block: 删除 IP 规则 destroy_status: 删除嘟文 destroy_unavailable_domain: 删除不可用域名 + destroy_user_role: 销毁角色 disable_2fa_user: 停用双重认证 disable_custom_emoji: 禁用自定义表情符号 disable_sign_in_token_auth_user: 为用户禁用电子邮件令牌认证 @@ -276,11 +279,13 @@ zh-CN: update_custom_emoji: 更新自定义表情符号 update_domain_block: 更新域名屏蔽 update_status: 更新嘟文 + update_user_role: 更新角色 actions: approve_appeal_html: "%{name} 批准了 %{target} 对审核结果的申诉" approve_user_html: "%{name} 批准了用户 %{target} 的注册" assigned_to_self_report_html: "%{name} 接管了举报 %{target}" change_email_user_html: "%{name} 更改了用户 %{target} 的电子邮件地址" + change_role_user_html: "%{name} 更改了 %{target} 的角色" confirm_user_html: "%{name} 确认了用户 %{target} 的电子邮件地址" create_account_warning_html: "%{name} 向 %{target} 发送了警告" create_announcement_html: "%{name} 创建了新公告 %{target}" @@ -290,9 +295,10 @@ zh-CN: create_email_domain_block_html: "%{name} 屏蔽了电子邮件域名 %{target}" create_ip_block_html: "%{name} 为 IP %{target} 创建了规则" create_unavailable_domain_html: "%{name} 停止了向域名 %{target} 的投递" + create_user_role_html: "%{name} 创建了 %{target} 角色" demote_user_html: "%{name} 对用户 %{target} 进行了降任操作" destroy_announcement_html: "%{name} 删除了公告 %{target}" - destroy_custom_emoji_html: "%{name} 销毁了自定义表情 %{target}" + destroy_custom_emoji_html: "%{name} 删除了自定义表情 %{target}" destroy_domain_allow_html: "%{name} 拒绝了和 %{target} 跨站交互" destroy_domain_block_html: "%{name} 解除了对域名 %{target} 的屏蔽" destroy_email_domain_block_html: "%{name} 解除了对电子邮件域名 %{target} 的屏蔽" @@ -300,6 +306,7 @@ zh-CN: destroy_ip_block_html: "%{name} 删除了 IP %{target} 的规则" destroy_status_html: "%{name} 删除了 %{target} 的嘟文" destroy_unavailable_domain_html: "%{name} 恢复了向域名 %{target} 的投递" + destroy_user_role_html: "%{name} 删除了 %{target} 角色" disable_2fa_user_html: "%{name} 停用了用户 %{target} 的双重认证" disable_custom_emoji_html: "%{name} 停用了自定义表情 %{target}" disable_sign_in_token_auth_user_html: "%{name} 已为 %{target} 禁用电子邮件令牌认证" @@ -327,7 +334,7 @@ zh-CN: update_custom_emoji_html: "%{name} 更新了自定义表情 %{target}" update_domain_block_html: "%{name} 更新了对 %{target} 的域名屏蔽" update_status_html: "%{name} 刷新了 %{target} 的嘟文" - deleted_status: "(嘟文已删除)" + update_user_role_html: "%{name} 更改了 %{target} 角色" empty: 没有找到日志 filter_by_action: 根据行为过滤 filter_by_user: 根据用户过滤 @@ -779,7 +786,6 @@ zh-CN: title: 时间轴预览 title: 网站设置 trendable_by_default: - desc_html: 影响以前未禁止的话题标签 title: 允许在未审查的情况下将话题置为热门 trends: desc_html: 公开显示先前已通过审核的当前热门话题 @@ -834,7 +840,7 @@ zh-CN: links: allow: 允许链接 allow_provider: 允许发布者 - description_html: 这些是当前此服务器可见账号的嘟文中被大量分享的链接。它可以帮助用户了解正在发生的事情。发布者获得批准前不会公开显示任何链接。你也可以批准或拒绝单个链接。 + description_html: 这些是当前此服务器可见账号的嘟文中被大量分享的链接。它可以帮助用户了解正在发生的事情。发布者获得批准前不会公开显示任何链接。你也可以批准或拒绝个别链接。 disallow: 不允许链接 disallow_provider: 不允许发布者 shared_by_over_week: @@ -852,7 +858,7 @@ zh-CN: statuses: allow: 允许嘟文 allow_account: 允许发布者 - description_html: 这些是当前此服务器可见的被大量分享和喜欢的嘟文。这些嘟文可以帮助新老用户找到更多可关注的账号。批准发布者且发布者允许将其账号推荐给其他用户前,不会公开显示任何嘟文。你也可以批准或拒绝单条嘟文。 + description_html: 这些是当前此服务器可见的被大量分享和喜欢的嘟文。这些嘟文可以帮助新老用户找到更多可关注的账号。批准发布者且发布者允许将其账号推荐给其他用户前,不会公开显示任何嘟文。你也可以批准或拒绝个别嘟文。 disallow: 禁止嘟文 disallow_account: 禁止发布者 not_discoverable: 发布者选择不被发现 @@ -1162,7 +1168,7 @@ zh-CN: add_keyword: 添加关键词 keywords: 关键词 statuses: 个别嘟文 - statuses_hint_html: 无论是否匹配下列关键词,此过滤器适用于选用个别嘟文。你可以点击此处来审核这些嘟文,并从过滤器中移除。 + statuses_hint_html: 无论是否匹配下列关键词,此过滤器适用于选用个别嘟文。从过滤器中审核嘟文或移除嘟文。 title: 编辑过滤器 errors: deprecated_api_multiple_keywords: 这些参数不能从此应用程序更改,因为它们应用于一个以上的过滤关键字。 使用较新的应用程序或网页界面。 @@ -1197,12 +1203,19 @@ zh-CN: trending_now: 现在流行 generic: all: 全部 + all_items_on_page_selected_html: + other: 此页面上的所有 %{count} 项目已被选中。 + all_matching_items_selected_html: + other: 所有 %{count} 匹配您搜索的项目都已被选中。 changes_saved_msg: 更改保存成功! copy: 复制 delete: 删除 + deselect: 取消全选 none: 无 order_by: 排序方式 save_changes: 保存更改 + select_all_matching_items: + other: 选择匹配您搜索的所有 %{count} 个项目。 today: 今天 validation_errors: other: 出错啦!检查一下下面 %{count} 处出错的地方吧 @@ -1309,15 +1322,6 @@ zh-CN: subject: "%{name} 提交了报告" sign_up: subject: "%{name} 注册了" - digest: - action: 查看所有通知 - body: 以下是自%{since}你最后一次登录以来错过的消息的摘要 - mention: "%{name} 在嘟文中提到了你:" - new_followers_summary: - other: 而且,你不在的时候,有 %{count} 个人关注了你!好棒! - subject: - other: "自上次访问以来,收到 %{count} 条新通知 🐘" - title: 在你不在的这段时间…… favourite: body: 你的嘟文被 %{name} 喜欢了: subject: "%{name} 喜欢了你的嘟文" diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index e375bb4c8a5..39dfc93563d 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -263,7 +263,6 @@ zh-HK: create_unavailable_domain_html: "%{name} 停止了對網域 %{target} 的更新通知" demote_user_html: "%{name} 降權了 %{target}" destroy_announcement_html: "%{name} 刪除了公告 %{target}" - destroy_custom_emoji_html: "%{name} 刪除了 Emoji %{target}" destroy_domain_allow_html: "%{name} 禁止網域 %{target} 加入聯邦宇宙" destroy_domain_block_html: "%{name} 封鎖了網域 %{target}" destroy_email_domain_block_html: "%{name} 解除封鎖 e-mail 網域 %{target}" @@ -294,7 +293,6 @@ zh-HK: update_custom_emoji_html: "%{name} 更新了 Emoji 表情符號 %{target}" update_domain_block_html: "%{name} 更新了對 %{target} 的網域封鎖" update_status_html: "%{name} 更新了 %{target} 的嘟文" - deleted_status: "(已刪除文章)" empty: 找不到任何日誌。 filter_by_action: 按動作篩選 filter_by_user: 按帳號篩選 @@ -591,9 +589,6 @@ zh-HK: desc_html: 在主頁顯示本站時間軸 title: 時間軸預覽 title: 網站設定 - trendable_by_default: - desc_html: 影響之前並未禁止的標籤 - title: 容許標籤不需要審核來成為今期流行 trends: desc_html: 公開地顯示已審核的標籤為今期流行 title: 趨勢主題標籤 @@ -939,13 +934,6 @@ zh-HK: carry_mutes_over_text: 此用戶從%{acct} 轉移,該帳號已被你靜音。 copy_account_note_text: 此用戶從%{acct} 轉移,這是你之前在該帳號留下的備注: notification_mailer: - digest: - action: 查看所有通知 - body: 這是自從你在%{since}使用以後,你錯失了的訊息︰ - mention: "%{name} 在此提及了你︰" - new_followers_summary: - other: 你新獲得了 %{count} 位關注者了!好厲害! - title: 在你不在的這段時間…… favourite: body: 你的文章被 %{name} 喜愛: subject: "%{name} 喜歡你的文章" diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index c055ba69f52..c59df907a30 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -230,17 +230,21 @@ zh-TW: approve_user: 批准使用者 assigned_to_self_report: 指派回報 change_email_user: 變更使用者的電子信箱地址 + change_role_user: 變更使用者角色 confirm_user: 確認使用者 create_account_warning: 建立警告 create_announcement: 建立公告 + create_canonical_email_block: 新增 E-mail 封鎖 create_custom_emoji: 建立自訂顏文字 create_domain_allow: 建立允許網域 create_domain_block: 建立阻擋網域 create_email_domain_block: 封鎖電子郵件站台 create_ip_block: 新增IP規則 create_unavailable_domain: 新增無法存取的網域 + create_user_role: 建立角色 demote_user: 把用戶降級 destroy_announcement: 刪除公告 + destroy_canonical_email_block: 刪除 E-mail 封鎖 destroy_custom_emoji: 刪除自訂顏文字 destroy_domain_allow: 刪除允許網域 destroy_domain_block: 刪除阻擋網域 @@ -249,6 +253,7 @@ zh-TW: destroy_ip_block: 刪除 IP 規則 destroy_status: 刪除狀態 destroy_unavailable_domain: 刪除無法存取的網域 + destroy_user_role: 移除角色 disable_2fa_user: 停用兩階段認證 disable_custom_emoji: 停用自訂顏文字 disable_sign_in_token_auth_user: 停用使用者電子信箱 token 驗證 @@ -275,24 +280,30 @@ zh-TW: update_announcement: 更新公告 update_custom_emoji: 更新自訂顏文字 update_domain_block: 更新封鎖網域 + update_ip_block: 更新 IP 規則 update_status: 更新狀態 + update_user_role: 更新角色 actions: approve_appeal_html: "%{name} 批准了來自 %{target} 的審核決定申訴" approve_user_html: "%{name} 批准了從 %{target} 而來的註冊" assigned_to_self_report_html: "%{name} 將報告 %{target} 指派給自己" change_email_user_html: "%{name} 變更了使用者 %{target} 的電子信箱地址" + change_role_user_html: "%{name} 變更了 %{target} 的角色" confirm_user_html: "%{name} 確認了使用者 %{target} 的電子信箱位址" create_account_warning_html: "%{name} 已對 %{target} 送出警告" create_announcement_html: "%{name} 新增了公告 %{target}" + create_canonical_email_block_html: "%{name} 已封鎖了 hash 為 %{target} 之 e-mail" create_custom_emoji_html: "%{name} 上傳了新自訂表情符號 %{target}" create_domain_allow_html: "%{name} 允許 %{target} 網域加入聯邦宇宙" create_domain_block_html: "%{name} 封鎖了網域 %{target}" create_email_domain_block_html: "%{name} 封鎖了電子信箱網域 %{target}" create_ip_block_html: "%{name} 已經設定了IP %{target} 的規則" create_unavailable_domain_html: "%{name} 停止發送至網域 %{target}" + create_user_role_html: "%{name} 建立了 %{target} 角色" demote_user_html: "%{name} 將使用者 %{target} 降級" destroy_announcement_html: "%{name} 刪除了公告 %{target}" - destroy_custom_emoji_html: "%{name} 停用了自訂表情符號 %{target}" + destroy_canonical_email_block_html: "%{name} 取消了 hash 為 %{target} 之 e-mail 的封鎖" + destroy_custom_emoji_html: "%{name} 刪除了表情符號 %{target}" destroy_domain_allow_html: "%{name} 不允許與網域 %{target} 加入聯邦宇宙" destroy_domain_block_html: "%{name} 取消了對網域 %{target} 的封鎖" destroy_email_domain_block_html: "%{name} 取消了對電子信箱網域 %{target} 的封鎖" @@ -300,6 +311,7 @@ zh-TW: destroy_ip_block_html: "%{name} 刪除了 IP %{target} 的規則" destroy_status_html: "%{name} 刪除了 %{target} 的嘟文" destroy_unavailable_domain_html: "%{name} 恢復了對網域 %{target} 的發送" + destroy_user_role_html: "%{name} 刪除了 %{target} 角色" disable_2fa_user_html: "%{name} 停用了使用者 %{target} 的兩階段認證" disable_custom_emoji_html: "%{name} 停用了自訂表情符號 %{target}" disable_sign_in_token_auth_user_html: "%{name} 停用了 %{target} 之使用者電子信箱 token 驗證" @@ -326,8 +338,9 @@ zh-TW: update_announcement_html: "%{name} 更新了公告 %{target}" update_custom_emoji_html: "%{name} 更新了自訂表情符號 %{target}" update_domain_block_html: "%{name} 更新了 %{target} 之網域封鎖" + update_ip_block_html: "%{name} 已經更新了 IP %{target} 之規則" update_status_html: "%{name} 更新了 %{target} 的嘟文" - deleted_status: "(已刪除嘟文)" + update_user_role_html: "%{name} 變更了 %{target} 角色" empty: 找不到 log filter_by_action: 按動作篩選 filter_by_user: 按使用者篩選 @@ -781,8 +794,8 @@ zh-TW: title: 時間軸預覽 title: 網站設定 trendable_by_default: - desc_html: 影響此前並未被禁用的標籤 - title: 允許熱門的主題標籤直接顯示於趨勢區,不需經過審核 + desc_html: 特定的熱門內容仍可以被明確地禁止 + title: 允許熱門話題直接顯示,不需經過審核 trends: desc_html: 公開目前炎上的已審核標籤 title: 趨勢主題標籤 @@ -1164,7 +1177,7 @@ zh-TW: add_keyword: 新增關鍵字 keywords: 關鍵字 statuses: 各別嘟文 - statuses_hint_html: 此過濾器會套用至所選之各別嘟文,不管它們有無匹配到以下的關鍵字。您可以檢視這些嘟文而按此將它們從過濾器中移除。 + statuses_hint_html: 此過濾器會套用至所選之各別嘟文,無論其是否符合下列關鍵字。審閱或從過濾條件移除貼文。 title: 編輯篩選條件 errors: deprecated_api_multiple_keywords: 這些參數無法從此應用程式中更改,因為它們適用於一或多個過濾器關鍵字。請使用較新的應用程式或是網頁介面。 @@ -1199,12 +1212,19 @@ zh-TW: trending_now: 現正熱門 generic: all: 全部 + all_items_on_page_selected_html: + other: 已選取此頁面上 %{count} 個項目。 + all_matching_items_selected_html: + other: 已選取符合您搜尋的 %{count} 個項目。 changes_saved_msg: 已成功儲存修改! copy: 複製 delete: 刪除 + deselect: 取消選擇全部 none: 無 order_by: 排序 save_changes: 儲存修改 + select_all_matching_items: + other: 選取 %{count} 個符合您搜尋的項目。 today: 今天 validation_errors: other: 唔…這是什麼鳥?請檢查以下 %{count} 項錯誤 @@ -1311,15 +1331,6 @@ zh-TW: subject: "%{name} 送出了一則檢舉報告" sign_up: subject: "%{name} 已進行註冊" - digest: - action: 閱覽所有通知 - body: 以下是自 %{since} 您最後一次登入以來錯過的訊息摘要 - mention: "%{name} 在此提及了您:" - new_followers_summary: - other: 此外,您在離開時獲得了 %{count} 位新的追蹤者!超棒的! - subject: - other: "從您上次造訪以來有 %{count} 個新通知 🐘" - title: 您不在的時候... favourite: body: 您的嘟文被 %{name} 加入了最愛: subject: "%{name} 將您的嘟文加入了最愛" From 802fcd06dd4ab7f78d24d6eea0f1bb2172615280 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Sep 2022 22:20:36 +0900 Subject: [PATCH 289/646] Bump @babel/core from 7.18.13 to 7.19.0 (#19126) Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.18.13 to 7.19.0. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.19.0/packages/babel-core) --- updated-dependencies: - dependency-name: "@babel/core" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 190 ++++++++------------------------------------------- 2 files changed, 28 insertions(+), 164 deletions(-) diff --git a/package.json b/package.json index db0c0a05daa..b0f8db84d2f 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ }, "private": true, "dependencies": { - "@babel/core": "^7.18.13", + "@babel/core": "^7.19.0", "@babel/plugin-proposal-decorators": "^7.19.0", "@babel/plugin-transform-react-inline-elements": "^7.18.6", "@babel/plugin-transform-runtime": "^7.18.10", diff --git a/yarn.lock b/yarn.lock index d0e249e350f..f9ab5585609 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30,7 +30,7 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.18.6": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== @@ -42,42 +42,21 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.0.tgz#2a592fd89bacb1fcde68de31bee4f2f2dacb0e86" integrity sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw== -"@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.7.2": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.10.tgz#74ef0fbf56b7dfc3f198fc2d927f4f03e12f4b05" - integrity sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.10" - "@babel/helper-compilation-targets" "^7.17.10" - "@babel/helper-module-transforms" "^7.17.7" - "@babel/helpers" "^7.17.9" - "@babel/parser" "^7.17.10" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.10" - "@babel/types" "^7.17.10" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" - -"@babel/core@^7.18.13": - version "7.18.13" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.13.tgz#9be8c44512751b05094a4d3ab05fc53a47ce00ac" - integrity sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A== +"@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.19.0", "@babel/core@^7.7.2": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.0.tgz#d2f5f4f2033c00de8096be3c9f45772563e150c3" + integrity sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.13" - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-module-transforms" "^7.18.9" - "@babel/helpers" "^7.18.9" - "@babel/parser" "^7.18.13" + "@babel/generator" "^7.19.0" + "@babel/helper-compilation-targets" "^7.19.0" + "@babel/helper-module-transforms" "^7.19.0" + "@babel/helpers" "^7.19.0" + "@babel/parser" "^7.19.0" "@babel/template" "^7.18.10" - "@babel/traverse" "^7.18.13" - "@babel/types" "^7.18.13" + "@babel/traverse" "^7.19.0" + "@babel/types" "^7.19.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -93,25 +72,7 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.0" -"@babel/generator@^7.17.10", "@babel/generator@^7.7.2": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.6.tgz#9ab2d46d3cbf631f0e80f72e72874a04c3fc12a9" - integrity sha512-AIwwoOS8axIC5MZbhNHRLKi3D+DMpvDf9XUcu3pIVAfOHFT45f4AoDAltRbHIQomCipkCZxrNkfpOEHhJz/VKw== - dependencies: - "@babel/types" "^7.18.6" - "@jridgewell/gen-mapping" "^0.3.0" - jsesc "^2.5.1" - -"@babel/generator@^7.18.13", "@babel/generator@^7.18.6": - version "7.18.13" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.13.tgz#59550cbb9ae79b8def15587bdfbaa388c4abf212" - integrity sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ== - dependencies: - "@babel/types" "^7.18.13" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/generator@^7.19.0": +"@babel/generator@^7.19.0", "@babel/generator@^7.7.2": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.0.tgz#785596c06425e59334df2ccee63ab166b738419a" integrity sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg== @@ -143,7 +104,7 @@ "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-compilation-targets@^7.17.10", "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.0": +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.0": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz#537ec8339d53e806ed422f1e06c8f17d55b96bb0" integrity sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA== @@ -263,35 +224,7 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-transforms@^7.17.7", "@babel/helper-module-transforms@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz#57e3ca669e273d55c3cda55e6ebf552f37f483c8" - integrity sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw== - dependencies: - "@babel/helper-environment-visitor" "^7.18.6" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.18.6" - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.6" - "@babel/types" "^7.18.6" - -"@babel/helper-module-transforms@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" - integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.18.6" - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" - -"@babel/helper-module-transforms@^7.19.0": +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.0": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz#309b230f04e22c58c6a2c0c0c7e50b216d350c30" integrity sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ== @@ -409,23 +342,14 @@ "@babel/traverse" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/helpers@^7.17.9": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.6.tgz#4c966140eaa1fcaa3d5a8c09d7db61077d4debfd" - integrity sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ== +"@babel/helpers@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.19.0.tgz#f30534657faf246ae96551d88dd31e9d1fa1fc18" + integrity sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg== dependencies: - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.6" - "@babel/types" "^7.18.6" - -"@babel/helpers@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" - integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== - dependencies: - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.0" + "@babel/types" "^7.19.0" "@babel/highlight@^7.10.4": version "7.12.13" @@ -445,17 +369,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.17.10": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.6.tgz#845338edecad65ebffef058d3be851f1d28a63bc" - integrity sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw== - -"@babel/parser@^7.18.10", "@babel/parser@^7.18.13", "@babel/parser@^7.18.6": - version "7.18.13" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.13.tgz#5b2dd21cae4a2c5145f1fbd8ca103f9313d3b7e4" - integrity sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg== - -"@babel/parser@^7.19.0": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.19.0": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.0.tgz#497fcafb1d5b61376959c1c338745ef0577aa02c" integrity sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw== @@ -1195,16 +1109,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.16.7", "@babel/template@^7.18.6", "@babel/template@^7.3.3": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" - integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.6" - "@babel/types" "^7.18.6" - -"@babel/template@^7.18.10": +"@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.3.3": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== @@ -1213,39 +1118,7 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.17.10", "@babel/traverse@^7.18.6", "@babel/traverse@^7.7.2": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.6.tgz#a228562d2f46e89258efa4ddd0416942e2fd671d" - integrity sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.6" - "@babel/helper-function-name" "^7.18.6" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.18.6" - "@babel/types" "^7.18.6" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.13", "@babel/traverse@^7.18.9": - version "7.18.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.13.tgz#5ab59ef51a997b3f10c4587d648b9696b6cb1a68" - integrity sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.13" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.18.13" - "@babel/types" "^7.18.13" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/traverse@^7.19.0": +"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.19.0", "@babel/traverse@^7.7.2": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.0.tgz#eb9c561c7360005c592cc645abafe0c3c4548eed" integrity sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA== @@ -1261,16 +1134,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.16.7", "@babel/types@^7.17.10", "@babel/types@^7.18.10", "@babel/types@^7.18.13", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.0.tgz#75f21d73d73dc0351f3368d28db73465f4814600" - integrity sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA== - dependencies: - "@babel/helper-string-parser" "^7.18.10" - "@babel/helper-validator-identifier" "^7.18.6" - to-fast-properties "^2.0.0" - -"@babel/types@^7.19.0": +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.16.7", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.0.tgz#75f21d73d73dc0351f3368d28db73465f4814600" integrity sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA== @@ -1658,7 +1522,7 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": +"@jridgewell/gen-mapping@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== From f84adc2ccf462c61627d61fed4a6a1fcc1dfb8f3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Sep 2022 22:23:56 +0900 Subject: [PATCH 290/646] Bump doorkeeper from 5.5.4 to 5.6.0 (#19163) Bumps [doorkeeper](https://github.com/doorkeeper-gem/doorkeeper) from 5.5.4 to 5.6.0. - [Release notes](https://github.com/doorkeeper-gem/doorkeeper/releases) - [Changelog](https://github.com/doorkeeper-gem/doorkeeper/blob/main/CHANGELOG.md) - [Commits](https://github.com/doorkeeper-gem/doorkeeper/compare/v5.5.4...v5.6.0) --- updated-dependencies: - dependency-name: doorkeeper dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 92b69782ea9..baefffb2f49 100644 --- a/Gemfile +++ b/Gemfile @@ -46,7 +46,7 @@ gem 'omniauth-rails_csrf_protection', '~> 0.1' gem 'color_diff', '~> 0.1' gem 'discard', '~> 1.2' -gem 'doorkeeper', '~> 5.5' +gem 'doorkeeper', '~> 5.6' gem 'ed25519', '~> 1.3' gem 'fast_blank', '~> 1.0' gem 'fastimage' diff --git a/Gemfile.lock b/Gemfile.lock index 0c6aea49bbb..2caa5f2e102 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -207,7 +207,7 @@ GEM docile (1.3.4) domain_name (0.5.20190701) unf (>= 0.0.5, < 1.0.0) - doorkeeper (5.5.4) + doorkeeper (5.6.0) railties (>= 5) dotenv (2.8.1) dotenv-rails (2.8.1) @@ -761,7 +761,7 @@ DEPENDENCIES devise-two-factor (~> 4.0) devise_pam_authenticatable2 (~> 9.2) discard (~> 1.2) - doorkeeper (~> 5.5) + doorkeeper (~> 5.6) dotenv-rails (~> 2.8) ed25519 (~> 1.3) fabrication (~> 2.30) From 479395013618a4bacad2e90620086ec7ccb67344 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Sep 2022 23:11:10 +0900 Subject: [PATCH 291/646] Bump jest from 28.1.3 to 29.0.3 (#19162) * Bump babel-jest from 28.1.3 to 29.0.3 Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 28.1.3 to 29.0.3. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v29.0.3/packages/babel-jest) --- updated-dependencies: - dependency-name: babel-jest dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * Bump jest-environment-jsdom from 28.1.3 to 29.0.3 Bumps [jest-environment-jsdom](https://github.com/facebook/jest/tree/HEAD/packages/jest-environment-jsdom) from 28.1.3 to 29.0.3. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v29.0.3/packages/jest-environment-jsdom) --- updated-dependencies: - dependency-name: jest-environment-jsdom dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * Bump jest from 28.1.3 to 29.0.3 Bumps [jest](https://github.com/facebook/jest/tree/HEAD/packages/jest) from 28.1.3 to 29.0.3. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v29.0.3/packages/jest) --- updated-dependencies: - dependency-name: jest dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../__snapshots__/avatar-test.js.snap | 4 +- .../__snapshots__/avatar_overlay-test.js.snap | 4 +- .../__snapshots__/display_name-test.js.snap | 2 +- package.json | 6 +- yarn.lock | 832 ++++++++---------- 5 files changed, 395 insertions(+), 453 deletions(-) diff --git a/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.js.snap b/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.js.snap index 76ab3374ae8..1c200b1848d 100644 --- a/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.js.snap +++ b/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.js.snap @@ -6,7 +6,7 @@ exports[` Autoplay renders a animated avatar 1`] = ` onMouseEnter={[Function]} onMouseLeave={[Function]} style={ - Object { + { "backgroundImage": "url(/animated/alice.gif)", "backgroundSize": "100px 100px", "height": "100px", @@ -22,7 +22,7 @@ exports[` Still renders a still avatar 1`] = ` onMouseEnter={[Function]} onMouseLeave={[Function]} style={ - Object { + { "backgroundImage": "url(/static/alice.jpg)", "backgroundSize": "100px 100px", "height": "100px", diff --git a/app/javascript/mastodon/components/__tests__/__snapshots__/avatar_overlay-test.js.snap b/app/javascript/mastodon/components/__tests__/__snapshots__/avatar_overlay-test.js.snap index d59fee42f66..58f27a32122 100644 --- a/app/javascript/mastodon/components/__tests__/__snapshots__/avatar_overlay-test.js.snap +++ b/app/javascript/mastodon/components/__tests__/__snapshots__/avatar_overlay-test.js.snap @@ -7,7 +7,7 @@ exports[` renders display name + account name 1`] = ` Foo

    ", } } diff --git a/package.json b/package.json index b0f8db84d2f..e177434b365 100644 --- a/package.json +++ b/package.json @@ -147,14 +147,14 @@ "@babel/eslint-parser": "^7.18.9", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^12.1.5", - "babel-jest": "^28.1.3", + "babel-jest": "^29.0.3", "eslint": "^7.32.0", "eslint-plugin-import": "~2.26.0", "eslint-plugin-jsx-a11y": "~6.6.1", "eslint-plugin-promise": "~6.0.1", "eslint-plugin-react": "~7.31.6", - "jest": "^28.1.3", - "jest-environment-jsdom": "^28.1.3", + "jest": "^29.0.3", + "jest-environment-jsdom": "^29.0.3", "postcss-scss": "^4.0.4", "prettier": "^2.7.1", "raf": "^3.4.1", diff --git a/yarn.lock b/yarn.lock index f9ab5585609..c1ae9694ac9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -607,7 +607,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-syntax-jsx@^7.18.6": +"@babel/plugin-syntax-jsx@^7.18.6", "@babel/plugin-syntax-jsx@^7.7.2": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== @@ -1308,110 +1308,110 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@jest/console@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" - integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== +"@jest/console@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.0.3.tgz#a222ab87e399317a89db88a58eaec289519e807a" + integrity sha512-cGg0r+klVHSYnfE977S9wmpuQ9L+iYuYgL+5bPXiUlUynLLYunRxswEmhBzvrSKGof5AKiHuTTmUKAqRcDY9dg== dependencies: - "@jest/types" "^28.1.3" + "@jest/types" "^29.0.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^28.1.3" - jest-util "^28.1.3" + jest-message-util "^29.0.3" + jest-util "^29.0.3" slash "^3.0.0" -"@jest/core@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.1.3.tgz#0ebf2bd39840f1233cd5f2d1e6fc8b71bd5a1ac7" - integrity sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA== +"@jest/core@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.0.3.tgz#ba22a9cbd0c7ba36e04292e2093c547bf53ec1fd" + integrity sha512-1d0hLbOrM1qQE3eP3DtakeMbKTcXiXP3afWxqz103xPyddS2NhnNghS7MaXx1dcDt4/6p4nlhmeILo2ofgi8cQ== dependencies: - "@jest/console" "^28.1.3" - "@jest/reporters" "^28.1.3" - "@jest/test-result" "^28.1.3" - "@jest/transform" "^28.1.3" - "@jest/types" "^28.1.3" + "@jest/console" "^29.0.3" + "@jest/reporters" "^29.0.3" + "@jest/test-result" "^29.0.3" + "@jest/transform" "^29.0.3" + "@jest/types" "^29.0.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^28.1.3" - jest-config "^28.1.3" - jest-haste-map "^28.1.3" - jest-message-util "^28.1.3" - jest-regex-util "^28.0.2" - jest-resolve "^28.1.3" - jest-resolve-dependencies "^28.1.3" - jest-runner "^28.1.3" - jest-runtime "^28.1.3" - jest-snapshot "^28.1.3" - jest-util "^28.1.3" - jest-validate "^28.1.3" - jest-watcher "^28.1.3" + jest-changed-files "^29.0.0" + jest-config "^29.0.3" + jest-haste-map "^29.0.3" + jest-message-util "^29.0.3" + jest-regex-util "^29.0.0" + jest-resolve "^29.0.3" + jest-resolve-dependencies "^29.0.3" + jest-runner "^29.0.3" + jest-runtime "^29.0.3" + jest-snapshot "^29.0.3" + jest-util "^29.0.3" + jest-validate "^29.0.3" + jest-watcher "^29.0.3" micromatch "^4.0.4" - pretty-format "^28.1.3" - rimraf "^3.0.0" + pretty-format "^29.0.3" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.3.tgz#abed43a6b040a4c24fdcb69eab1f97589b2d663e" - integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== +"@jest/environment@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.0.3.tgz#7745ec30a954e828e8cc6df6a13280d3b51d8f35" + integrity sha512-iKl272NKxYNQNqXMQandAIwjhQaGw5uJfGXduu8dS9llHi8jV2ChWrtOAVPnMbaaoDhnI3wgUGNDvZgHeEJQCA== dependencies: - "@jest/fake-timers" "^28.1.3" - "@jest/types" "^28.1.3" + "@jest/fake-timers" "^29.0.3" + "@jest/types" "^29.0.3" "@types/node" "*" - jest-mock "^28.1.3" + jest-mock "^29.0.3" -"@jest/expect-utils@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.1.3.tgz#58561ce5db7cd253a7edddbc051fb39dda50f525" - integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== +"@jest/expect-utils@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.0.3.tgz#f5bb86f5565bf2dacfca31ccbd887684936045b2" + integrity sha512-i1xUkau7K/63MpdwiRqaxgZOjxYs4f0WMTGJnYwUKubsNRZSeQbLorS7+I4uXVF9KQ5r61BUPAUMZ7Lf66l64Q== dependencies: - jest-get-type "^28.0.2" + jest-get-type "^29.0.0" -"@jest/expect@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.1.3.tgz#9ac57e1d4491baca550f6bdbd232487177ad6a72" - integrity sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw== +"@jest/expect@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.0.3.tgz#9dc7c46354eeb7a348d73881fba6402f5fdb2c30" + integrity sha512-6W7K+fsI23FQ01H/BWccPyDZFrnU9QlzDcKOjrNVU5L8yUORFAJJIpmyxWPW70+X624KUNqzZwPThPMX28aXEQ== dependencies: - expect "^28.1.3" - jest-snapshot "^28.1.3" + expect "^29.0.3" + jest-snapshot "^29.0.3" -"@jest/fake-timers@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.3.tgz#230255b3ad0a3d4978f1d06f70685baea91c640e" - integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== +"@jest/fake-timers@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.0.3.tgz#ad5432639b715d45a86a75c47fd75019bc36b22c" + integrity sha512-tmbUIo03x0TdtcZCESQ0oQSakPCpo7+s6+9mU19dd71MptkP4zCwoeZqna23//pgbhtT1Wq02VmA9Z9cNtvtCQ== dependencies: - "@jest/types" "^28.1.3" + "@jest/types" "^29.0.3" "@sinonjs/fake-timers" "^9.1.2" "@types/node" "*" - jest-message-util "^28.1.3" - jest-mock "^28.1.3" - jest-util "^28.1.3" + jest-message-util "^29.0.3" + jest-mock "^29.0.3" + jest-util "^29.0.3" -"@jest/globals@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.1.3.tgz#a601d78ddc5fdef542728309894895b4a42dc333" - integrity sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA== +"@jest/globals@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.0.3.tgz#681950c430fdc13ff9aa89b2d8d572ac0e4a1bf5" + integrity sha512-YqGHT65rFY2siPIHHFjuCGUsbzRjdqkwbat+Of6DmYRg5shIXXrLdZoVE/+TJ9O1dsKsFmYhU58JvIbZRU1Z9w== dependencies: - "@jest/environment" "^28.1.3" - "@jest/expect" "^28.1.3" - "@jest/types" "^28.1.3" + "@jest/environment" "^29.0.3" + "@jest/expect" "^29.0.3" + "@jest/types" "^29.0.3" + jest-mock "^29.0.3" -"@jest/reporters@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.1.3.tgz#9adf6d265edafc5fc4a434cfb31e2df5a67a369a" - integrity sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg== +"@jest/reporters@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.0.3.tgz#735f110e08b44b38729d8dbbb74063bdf5aba8a5" + integrity sha512-3+QU3d4aiyOWfmk1obDerie4XNCaD5Xo1IlKNde2yGEi02WQD+ZQD0i5Hgqm1e73sMV7kw6pMlCnprtEwEVwxw== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^28.1.3" - "@jest/test-result" "^28.1.3" - "@jest/transform" "^28.1.3" - "@jest/types" "^28.1.3" - "@jridgewell/trace-mapping" "^0.3.13" + "@jest/console" "^29.0.3" + "@jest/test-result" "^29.0.3" + "@jest/transform" "^29.0.3" + "@jest/types" "^29.0.3" + "@jridgewell/trace-mapping" "^0.3.15" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" @@ -1423,67 +1423,67 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-message-util "^28.1.3" - jest-util "^28.1.3" - jest-worker "^28.1.3" + jest-message-util "^29.0.3" + jest-util "^29.0.3" + jest-worker "^29.0.3" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" terminal-link "^2.0.0" v8-to-istanbul "^9.0.1" -"@jest/schemas@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" - integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== +"@jest/schemas@^29.0.0": + version "29.0.0" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a" + integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA== dependencies: "@sinclair/typebox" "^0.24.1" -"@jest/source-map@^28.1.2": - version "28.1.2" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-28.1.2.tgz#7fe832b172b497d6663cdff6c13b0a920e139e24" - integrity sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww== +"@jest/source-map@^29.0.0": + version "29.0.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.0.0.tgz#f8d1518298089f8ae624e442bbb6eb870ee7783c" + integrity sha512-nOr+0EM8GiHf34mq2GcJyz/gYFyLQ2INDhAylrZJ9mMWoW21mLBfZa0BUVPPMxVYrLjeiRe2Z7kWXOGnS0TFhQ== dependencies: - "@jridgewell/trace-mapping" "^0.3.13" + "@jridgewell/trace-mapping" "^0.3.15" callsites "^3.0.0" graceful-fs "^4.2.9" -"@jest/test-result@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" - integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== +"@jest/test-result@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.0.3.tgz#b03d8ef4c58be84cd5d5d3b24d4b4c8cabbf2746" + integrity sha512-vViVnQjCgTmbhDKEonKJPtcFe9G/CJO4/Np4XwYJah+lF2oI7KKeRp8t1dFvv44wN2NdbDb/qC6pi++Vpp0Dlg== dependencies: - "@jest/console" "^28.1.3" - "@jest/types" "^28.1.3" + "@jest/console" "^29.0.3" + "@jest/types" "^29.0.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz#9d0c283d906ac599c74bde464bc0d7e6a82886c3" - integrity sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw== +"@jest/test-sequencer@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.0.3.tgz#0681061ad21fb8e293b49c4fdf7e631ca79240ba" + integrity sha512-Hf4+xYSWZdxTNnhDykr8JBs0yBN/nxOXyUQWfotBUqqy0LF9vzcFB0jm/EDNZCx587znLWTIgxcokW7WeZMobQ== dependencies: - "@jest/test-result" "^28.1.3" + "@jest/test-result" "^29.0.3" graceful-fs "^4.2.9" - jest-haste-map "^28.1.3" + jest-haste-map "^29.0.3" slash "^3.0.0" -"@jest/transform@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.3.tgz#59d8098e50ab07950e0f2fc0fc7ec462371281b0" - integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== +"@jest/transform@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.0.3.tgz#9eb1fed2072a0354f190569807d1250572fb0970" + integrity sha512-C5ihFTRYaGDbi/xbRQRdbo5ddGtI4VSpmL6AIcZxdhwLbXMa7PcXxxqyI91vGOFHnn5aVM3WYnYKCHEqmLVGzg== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^28.1.3" - "@jridgewell/trace-mapping" "^0.3.13" + "@jest/types" "^29.0.3" + "@jridgewell/trace-mapping" "^0.3.15" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" + fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^28.1.3" - jest-regex-util "^28.0.2" - jest-util "^28.1.3" + jest-haste-map "^29.0.3" + jest-regex-util "^29.0.0" + jest-util "^29.0.3" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" @@ -1510,12 +1510,12 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jest/types@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" - integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== +"@jest/types@^29.0.3": + version "29.0.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.0.3.tgz#0be78fdddb1a35aeb2041074e55b860561c8ef63" + integrity sha512-coBJmOQvurXjN1Hh5PzF7cmsod0zLIOXpP8KD161mqNlroMhLcwpODiEzi7ZsRl5Z/AIuxpeNm8DCl43F4kz8A== dependencies: - "@jest/schemas" "^28.1.3" + "@jest/schemas" "^29.0.0" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" @@ -1554,7 +1554,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13": +"@jridgewell/trace-mapping@^0.3.12": version "0.3.14" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== @@ -1562,6 +1562,14 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/trace-mapping@^0.3.15": + version "0.3.15" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" + integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping@^0.3.9": version "0.3.13" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" @@ -1864,14 +1872,14 @@ jest-diff "^25.2.1" pretty-format "^25.2.1" -"@types/jsdom@^16.2.4": - version "16.2.14" - resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-16.2.14.tgz#26fe9da6a8870715b154bb84cd3b2e53433d8720" - integrity sha512-6BAy1xXEmMuHeAJ4Fv4yXKwBDTGTOseExKE3OaHiNycdHdZw59KfYzrt0DkDluvwmik1HRt6QS7bImxUmpSy+w== +"@types/jsdom@^20.0.0": + version "20.0.0" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.0.tgz#4414fb629465167f8b7b3804b9e067bdd99f1791" + integrity sha512-YfAchFs0yM1QPDrLm2VHe+WHGtqms3NXnXAMolrgrVP6fgBHHXy1ozAbo/dFtPNtZC/m66bPiCTWYmqp1F14gA== dependencies: "@types/node" "*" - "@types/parse5" "*" "@types/tough-cookie" "*" + parse5 "^7.0.0" "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": version "7.0.6" @@ -1908,11 +1916,6 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/parse5@*": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-6.0.3.tgz#705bb349e789efa06f43f128cef51240753424cb" - integrity sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g== - "@types/prettier@^2.1.5": version "2.2.3" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0" @@ -2190,7 +2193,7 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -abab@^2.0.5, abab@^2.0.6: +abab@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== @@ -2615,15 +2618,15 @@ axobject-query@^2.2.0: resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== -babel-jest@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.3.tgz#c1187258197c099072156a0a121c11ee1e3917d5" - integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== +babel-jest@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.0.3.tgz#64e156a47a77588db6a669a88dedff27ed6e260f" + integrity sha512-ApPyHSOhS/sVzwUOQIWJmdvDhBsMG01HX9z7ogtkp1TToHGGUWFlnXJUIzCgKPSfiYLn3ibipCYzsKSURHEwLg== dependencies: - "@jest/transform" "^28.1.3" + "@jest/transform" "^29.0.3" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^28.1.3" + babel-preset-jest "^29.0.2" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -2656,10 +2659,10 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz#1952c4d0ea50f2d6d794353762278d1d8cca3fbe" - integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== +babel-plugin-jest-hoist@^29.0.2: + version "29.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.0.2.tgz#ae61483a829a021b146c016c6ad39b8bcc37c2c8" + integrity sha512-eBr2ynAEFjcebVvu8Ktx580BD1QKCrBG1XwEUTXJe285p9HA/4hOhfWCFRQhTKSyBV0VzjhG7H91Eifz9s29hg== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -2765,12 +2768,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz#5dfc20b99abed5db994406c2b9ab94c73aaa419d" - integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== +babel-preset-jest@^29.0.2: + version "29.0.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.0.2.tgz#e14a7124e22b161551818d89e5bdcfb3b2b0eac7" + integrity sha512-BeVXp7rH5TK96ofyEnHjznjLMQ2nAeDJ+QzxKnHAAMs0RgrQsCywjAN8m4mOm5Di0pxU//3AoEeJJrerMH5UeA== dependencies: - babel-plugin-jest-hoist "^28.1.3" + babel-plugin-jest-hoist "^29.0.2" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -3262,15 +3265,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0, chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.2: +chalk@^4.0, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -4012,7 +4007,7 @@ damerau-levenshtein@^1.0.8: resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== -data-urls@^3.0.1, data-urls@^3.0.2: +data-urls@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== @@ -4208,10 +4203,10 @@ diff-sequences@^25.2.6: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== -diff-sequences@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" - integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== +diff-sequences@^29.0.0: + version "29.0.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.0.0.tgz#bae49972ef3933556bcb0800b72e8579d19d9e4f" + integrity sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA== diffie-hellman@^5.0.0: version "5.0.3" @@ -4912,16 +4907,16 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.3.tgz#90a7c1a124f1824133dd4533cce2d2bdcb6603ec" - integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== +expect@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.0.3.tgz#6be65ddb945202f143c4e07c083f4f39f3bd326f" + integrity sha512-t8l5DTws3212VbmPL+tBFXhjRHLmctHB0oQbL8eUc6S7NzZtYUhycrFO9mkxA0ZUC6FAWdNi7JchJSkODtcu1Q== dependencies: - "@jest/expect-utils" "^28.1.3" - jest-get-type "^28.0.2" - jest-matcher-utils "^28.1.3" - jest-message-util "^28.1.3" - jest-util "^28.1.3" + "@jest/expect-utils" "^29.0.3" + jest-get-type "^29.0.0" + jest-matcher-utils "^29.0.3" + jest-message-util "^29.0.3" + jest-util "^29.0.3" express@^4.17.1, express@^4.18.1: version "4.18.1" @@ -5833,7 +5828,7 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: +https-proxy-agent@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -6556,82 +6551,82 @@ jake@^10.8.5: filelist "^1.0.1" minimatch "^3.0.4" -jest-changed-files@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-28.1.3.tgz#d9aeee6792be3686c47cb988a8eaf82ff4238831" - integrity sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA== +jest-changed-files@^29.0.0: + version "29.0.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.0.0.tgz#aa238eae42d9372a413dd9a8dadc91ca1806dce0" + integrity sha512-28/iDMDrUpGoCitTURuDqUzWQoWmOmOKOFST1mi2lwh62X4BFf6khgH3uSuo1e49X/UDjuApAj3w0wLOex4VPQ== dependencies: execa "^5.0.0" p-limit "^3.1.0" -jest-circus@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.1.3.tgz#d14bd11cf8ee1a03d69902dc47b6bd4634ee00e4" - integrity sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow== +jest-circus@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.0.3.tgz#90faebc90295291cfc636b27dbd82e3bfb9e7a48" + integrity sha512-QeGzagC6Hw5pP+df1+aoF8+FBSgkPmraC1UdkeunWh0jmrp7wC0Hr6umdUAOELBQmxtKAOMNC3KAdjmCds92Zg== dependencies: - "@jest/environment" "^28.1.3" - "@jest/expect" "^28.1.3" - "@jest/test-result" "^28.1.3" - "@jest/types" "^28.1.3" + "@jest/environment" "^29.0.3" + "@jest/expect" "^29.0.3" + "@jest/test-result" "^29.0.3" + "@jest/types" "^29.0.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" is-generator-fn "^2.0.0" - jest-each "^28.1.3" - jest-matcher-utils "^28.1.3" - jest-message-util "^28.1.3" - jest-runtime "^28.1.3" - jest-snapshot "^28.1.3" - jest-util "^28.1.3" + jest-each "^29.0.3" + jest-matcher-utils "^29.0.3" + jest-message-util "^29.0.3" + jest-runtime "^29.0.3" + jest-snapshot "^29.0.3" + jest-util "^29.0.3" p-limit "^3.1.0" - pretty-format "^28.1.3" + pretty-format "^29.0.3" slash "^3.0.0" stack-utils "^2.0.3" -jest-cli@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.1.3.tgz#558b33c577d06de55087b8448d373b9f654e46b2" - integrity sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ== +jest-cli@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.0.3.tgz#fd8f0ef363a7a3d9c53ef62e0651f18eeffa77b9" + integrity sha512-aUy9Gd/Kut1z80eBzG10jAn6BgS3BoBbXyv+uXEqBJ8wnnuZ5RpNfARoskSrTIy1GY4a8f32YGuCMwibtkl9CQ== dependencies: - "@jest/core" "^28.1.3" - "@jest/test-result" "^28.1.3" - "@jest/types" "^28.1.3" + "@jest/core" "^29.0.3" + "@jest/test-result" "^29.0.3" + "@jest/types" "^29.0.3" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^28.1.3" - jest-util "^28.1.3" - jest-validate "^28.1.3" + jest-config "^29.0.3" + jest-util "^29.0.3" + jest-validate "^29.0.3" prompts "^2.0.1" yargs "^17.3.1" -jest-config@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.1.3.tgz#e315e1f73df3cac31447eed8b8740a477392ec60" - integrity sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ== +jest-config@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.0.3.tgz#c2e52a8f5adbd18de79f99532d8332a19e232f13" + integrity sha512-U5qkc82HHVYe3fNu2CRXLN4g761Na26rWKf7CjM8LlZB3In1jadEkZdMwsE37rd9RSPV0NfYaCjHdk/gu3v+Ew== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^28.1.3" - "@jest/types" "^28.1.3" - babel-jest "^28.1.3" + "@jest/test-sequencer" "^29.0.3" + "@jest/types" "^29.0.3" + babel-jest "^29.0.3" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^28.1.3" - jest-environment-node "^28.1.3" - jest-get-type "^28.0.2" - jest-regex-util "^28.0.2" - jest-resolve "^28.1.3" - jest-runner "^28.1.3" - jest-util "^28.1.3" - jest-validate "^28.1.3" + jest-circus "^29.0.3" + jest-environment-node "^29.0.3" + jest-get-type "^29.0.0" + jest-regex-util "^29.0.0" + jest-resolve "^29.0.3" + jest-runner "^29.0.3" + jest-util "^29.0.3" + jest-validate "^29.0.3" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^28.1.3" + pretty-format "^29.0.3" slash "^3.0.0" strip-json-comments "^3.1.1" @@ -6645,128 +6640,128 @@ jest-diff@^25.2.1: jest-get-type "^25.2.6" pretty-format "^25.5.0" -jest-diff@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.3.tgz#948a192d86f4e7a64c5264ad4da4877133d8792f" - integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== +jest-diff@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.0.3.tgz#41cc02409ad1458ae1bf7684129a3da2856341ac" + integrity sha512-+X/AIF5G/vX9fWK+Db9bi9BQas7M9oBME7egU7psbn4jlszLFCu0dW63UgeE6cs/GANq4fLaT+8sGHQQ0eCUfg== dependencies: chalk "^4.0.0" - diff-sequences "^28.1.1" - jest-get-type "^28.0.2" - pretty-format "^28.1.3" + diff-sequences "^29.0.0" + jest-get-type "^29.0.0" + pretty-format "^29.0.3" -jest-docblock@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-28.1.1.tgz#6f515c3bf841516d82ecd57a62eed9204c2f42a8" - integrity sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA== +jest-docblock@^29.0.0: + version "29.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.0.0.tgz#3151bcc45ed7f5a8af4884dcc049aee699b4ceae" + integrity sha512-s5Kpra/kLzbqu9dEjov30kj1n4tfu3e7Pl8v+f8jOkeWNqM6Ds8jRaJfZow3ducoQUrf2Z4rs2N5S3zXnb83gw== dependencies: detect-newline "^3.0.0" -jest-each@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-28.1.3.tgz#bdd1516edbe2b1f3569cfdad9acd543040028f81" - integrity sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g== +jest-each@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.0.3.tgz#7ef3157580b15a609d7ef663dd4fc9b07f4e1299" + integrity sha512-wILhZfESURHHBNvPMJ0lZlYZrvOQJxAo3wNHi+ycr90V7M+uGR9Gh4+4a/BmaZF0XTyZsk4OiYEf3GJN7Ltqzg== dependencies: - "@jest/types" "^28.1.3" + "@jest/types" "^29.0.3" chalk "^4.0.0" - jest-get-type "^28.0.2" - jest-util "^28.1.3" - pretty-format "^28.1.3" + jest-get-type "^29.0.0" + jest-util "^29.0.3" + pretty-format "^29.0.3" -jest-environment-jsdom@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-28.1.3.tgz#2d4e5d61b7f1d94c3bddfbb21f0308ee506c09fb" - integrity sha512-HnlGUmZRdxfCByd3GM2F100DgQOajUBzEitjGqIREcb45kGjZvRrKUdlaF6escXBdcXNl0OBh+1ZrfeZT3GnAg== +jest-environment-jsdom@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.0.3.tgz#0c6ee841133dd6acbe957bceaceea93b7ec60ca9" + integrity sha512-KIGvpm12c71hoYTjL4wC2c8K6KfhOHJqJtaHc1IApu5rG047YWZoEP13BlbucWfzGISBrmli8KFqdhdQEa8Wnw== dependencies: - "@jest/environment" "^28.1.3" - "@jest/fake-timers" "^28.1.3" - "@jest/types" "^28.1.3" - "@types/jsdom" "^16.2.4" + "@jest/environment" "^29.0.3" + "@jest/fake-timers" "^29.0.3" + "@jest/types" "^29.0.3" + "@types/jsdom" "^20.0.0" "@types/node" "*" - jest-mock "^28.1.3" - jest-util "^28.1.3" - jsdom "^19.0.0" + jest-mock "^29.0.3" + jest-util "^29.0.3" + jsdom "^20.0.0" -jest-environment-node@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.1.3.tgz#7e74fe40eb645b9d56c0c4b70ca4357faa349be5" - integrity sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A== +jest-environment-node@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.0.3.tgz#293804b1e0fa5f0e354dacbe510655caa478a3b2" + integrity sha512-cdZqRCnmIlTXC+9vtvmfiY/40Cj6s2T0czXuq1whvQdmpzAnj4sbqVYuZ4zFHk766xTTJ+Ij3uUqkk8KCfXoyg== dependencies: - "@jest/environment" "^28.1.3" - "@jest/fake-timers" "^28.1.3" - "@jest/types" "^28.1.3" + "@jest/environment" "^29.0.3" + "@jest/fake-timers" "^29.0.3" + "@jest/types" "^29.0.3" "@types/node" "*" - jest-mock "^28.1.3" - jest-util "^28.1.3" + jest-mock "^29.0.3" + jest-util "^29.0.3" jest-get-type@^25.2.6: version "25.2.6" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== -jest-get-type@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" - integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== +jest-get-type@^29.0.0: + version "29.0.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.0.0.tgz#843f6c50a1b778f7325df1129a0fd7aa713aef80" + integrity sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw== -jest-haste-map@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.3.tgz#abd5451129a38d9841049644f34b034308944e2b" - integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== +jest-haste-map@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.0.3.tgz#d7f3f7180f558d760eacc5184aac5a67f20ef939" + integrity sha512-uMqR99+GuBHo0RjRhOE4iA6LmsxEwRdgiIAQgMU/wdT2XebsLDz5obIwLZm/Psj+GwSEQhw9AfAVKGYbh2G55A== dependencies: - "@jest/types" "^28.1.3" + "@jest/types" "^29.0.3" "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.9" - jest-regex-util "^28.0.2" - jest-util "^28.1.3" - jest-worker "^28.1.3" + jest-regex-util "^29.0.0" + jest-util "^29.0.3" + jest-worker "^29.0.3" micromatch "^4.0.4" walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-leak-detector@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz#a6685d9b074be99e3adee816ce84fd30795e654d" - integrity sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA== +jest-leak-detector@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.0.3.tgz#e85cf3391106a7a250850b6766b508bfe9c7bc6f" + integrity sha512-YfW/G63dAuiuQ3QmQlh8hnqLDe25WFY3eQhuc/Ev1AGmkw5zREblTh7TCSKLoheyggu6G9gxO2hY8p9o6xbaRQ== dependencies: - jest-get-type "^28.0.2" - pretty-format "^28.1.3" + jest-get-type "^29.0.0" + pretty-format "^29.0.3" -jest-matcher-utils@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e" - integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== +jest-matcher-utils@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.0.3.tgz#b8305fd3f9e27cdbc210b21fc7dbba92d4e54560" + integrity sha512-RsR1+cZ6p1hDV4GSCQTg+9qjeotQCgkaleIKLK7dm+U4V/H2bWedU3RAtLm8+mANzZ7eDV33dMar4pejd7047w== dependencies: chalk "^4.0.0" - jest-diff "^28.1.3" - jest-get-type "^28.0.2" - pretty-format "^28.1.3" + jest-diff "^29.0.3" + jest-get-type "^29.0.0" + pretty-format "^29.0.3" -jest-message-util@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" - integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== +jest-message-util@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.0.3.tgz#f0254e1ffad21890c78355726202cc91d0a40ea8" + integrity sha512-7T8JiUTtDfppojosORAflABfLsLKMLkBHSWkjNQrjIltGoDzNGn7wEPOSfjqYAGTYME65esQzMJxGDjuLBKdOg== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^28.1.3" + "@jest/types" "^29.0.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^28.1.3" + pretty-format "^29.0.3" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.1.3.tgz#d4e9b1fc838bea595c77ab73672ebf513ab249da" - integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== +jest-mock@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.0.3.tgz#4f0093f6a9cb2ffdb9c44a07a3912f0c098c8de9" + integrity sha512-ort9pYowltbcrCVR43wdlqfAiFJXBx8l4uJDsD8U72LgBcetvEp+Qxj1W9ZYgMRoeAo+ov5cnAGF2B6+Oth+ww== dependencies: - "@jest/types" "^28.1.3" + "@jest/types" "^29.0.3" "@types/node" "*" jest-pnp-resolver@^1.2.2: @@ -6774,154 +6769,155 @@ jest-pnp-resolver@^1.2.2: resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== -jest-regex-util@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" - integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== +jest-regex-util@^29.0.0: + version "29.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.0.0.tgz#b442987f688289df8eb6c16fa8df488b4cd007de" + integrity sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug== -jest-resolve-dependencies@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz#8c65d7583460df7275c6ea2791901fa975c1fe66" - integrity sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA== +jest-resolve-dependencies@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.0.3.tgz#f23a54295efc6374b86b198cf8efed5606d6b762" + integrity sha512-KzuBnXqNvbuCdoJpv8EanbIGObk7vUBNt/PwQPPx2aMhlv/jaXpUJsqWYRpP/0a50faMBY7WFFP8S3/CCzwfDw== dependencies: - jest-regex-util "^28.0.2" - jest-snapshot "^28.1.3" + jest-regex-util "^29.0.0" + jest-snapshot "^29.0.3" -jest-resolve@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-28.1.3.tgz#cfb36100341ddbb061ec781426b3c31eb51aa0a8" - integrity sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ== +jest-resolve@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.0.3.tgz#329a3431e3b9eb6629a2cd483e9bed95b26827b9" + integrity sha512-toVkia85Y/BPAjJasTC9zIPY6MmVXQPtrCk8SmiheC4MwVFE/CMFlOtMN6jrwPMC6TtNh8+sTMllasFeu1wMPg== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^28.1.3" + jest-haste-map "^29.0.3" jest-pnp-resolver "^1.2.2" - jest-util "^28.1.3" - jest-validate "^28.1.3" + jest-util "^29.0.3" + jest-validate "^29.0.3" resolve "^1.20.0" resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.1.3.tgz#5eee25febd730b4713a2cdfd76bdd5557840f9a1" - integrity sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA== +jest-runner@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.0.3.tgz#2e47fe1e8777aea9b8970f37e8f83630b508fb87" + integrity sha512-Usu6VlTOZlCZoNuh3b2Tv/yzDpKqtiNAetG9t3kJuHfUyVMNW7ipCCJOUojzKkjPoaN7Bl1f7Buu6PE0sGpQxw== dependencies: - "@jest/console" "^28.1.3" - "@jest/environment" "^28.1.3" - "@jest/test-result" "^28.1.3" - "@jest/transform" "^28.1.3" - "@jest/types" "^28.1.3" + "@jest/console" "^29.0.3" + "@jest/environment" "^29.0.3" + "@jest/test-result" "^29.0.3" + "@jest/transform" "^29.0.3" + "@jest/types" "^29.0.3" "@types/node" "*" chalk "^4.0.0" emittery "^0.10.2" graceful-fs "^4.2.9" - jest-docblock "^28.1.1" - jest-environment-node "^28.1.3" - jest-haste-map "^28.1.3" - jest-leak-detector "^28.1.3" - jest-message-util "^28.1.3" - jest-resolve "^28.1.3" - jest-runtime "^28.1.3" - jest-util "^28.1.3" - jest-watcher "^28.1.3" - jest-worker "^28.1.3" + jest-docblock "^29.0.0" + jest-environment-node "^29.0.3" + jest-haste-map "^29.0.3" + jest-leak-detector "^29.0.3" + jest-message-util "^29.0.3" + jest-resolve "^29.0.3" + jest-runtime "^29.0.3" + jest-util "^29.0.3" + jest-watcher "^29.0.3" + jest-worker "^29.0.3" p-limit "^3.1.0" source-map-support "0.5.13" -jest-runtime@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.1.3.tgz#a57643458235aa53e8ec7821949e728960d0605f" - integrity sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw== +jest-runtime@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.0.3.tgz#5a823ec5902257519556a4e5a71a868e8fd788aa" + integrity sha512-12gZXRQ7ozEeEHKTY45a+YLqzNDR/x4c//X6AqwKwKJPpWM8FY4vwn4VQJOcLRS3Nd1fWwgP7LU4SoynhuUMHQ== dependencies: - "@jest/environment" "^28.1.3" - "@jest/fake-timers" "^28.1.3" - "@jest/globals" "^28.1.3" - "@jest/source-map" "^28.1.2" - "@jest/test-result" "^28.1.3" - "@jest/transform" "^28.1.3" - "@jest/types" "^28.1.3" + "@jest/environment" "^29.0.3" + "@jest/fake-timers" "^29.0.3" + "@jest/globals" "^29.0.3" + "@jest/source-map" "^29.0.0" + "@jest/test-result" "^29.0.3" + "@jest/transform" "^29.0.3" + "@jest/types" "^29.0.3" + "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^28.1.3" - jest-message-util "^28.1.3" - jest-mock "^28.1.3" - jest-regex-util "^28.0.2" - jest-resolve "^28.1.3" - jest-snapshot "^28.1.3" - jest-util "^28.1.3" + jest-haste-map "^29.0.3" + jest-message-util "^29.0.3" + jest-mock "^29.0.3" + jest-regex-util "^29.0.0" + jest-resolve "^29.0.3" + jest-snapshot "^29.0.3" + jest-util "^29.0.3" slash "^3.0.0" strip-bom "^4.0.0" -jest-snapshot@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.1.3.tgz#17467b3ab8ddb81e2f605db05583d69388fc0668" - integrity sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg== +jest-snapshot@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.0.3.tgz#0a024706986a915a6eefae74d7343069d2fc8eef" + integrity sha512-52q6JChm04U3deq+mkQ7R/7uy7YyfVIrebMi6ZkBoDJ85yEjm/sJwdr1P0LOIEHmpyLlXrxy3QP0Zf5J2kj0ew== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^28.1.3" - "@jest/transform" "^28.1.3" - "@jest/types" "^28.1.3" + "@jest/expect-utils" "^29.0.3" + "@jest/transform" "^29.0.3" + "@jest/types" "^29.0.3" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^28.1.3" + expect "^29.0.3" graceful-fs "^4.2.9" - jest-diff "^28.1.3" - jest-get-type "^28.0.2" - jest-haste-map "^28.1.3" - jest-matcher-utils "^28.1.3" - jest-message-util "^28.1.3" - jest-util "^28.1.3" + jest-diff "^29.0.3" + jest-get-type "^29.0.0" + jest-haste-map "^29.0.3" + jest-matcher-utils "^29.0.3" + jest-message-util "^29.0.3" + jest-util "^29.0.3" natural-compare "^1.4.0" - pretty-format "^28.1.3" + pretty-format "^29.0.3" semver "^7.3.5" -jest-util@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" - integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== +jest-util@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.0.3.tgz#06d1d77f9a1bea380f121897d78695902959fbc0" + integrity sha512-Q0xaG3YRG8QiTC4R6fHjHQPaPpz9pJBEi0AeOE4mQh/FuWOijFjGXMMOfQEaU9i3z76cNR7FobZZUQnL6IyfdQ== dependencies: - "@jest/types" "^28.1.3" + "@jest/types" "^29.0.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-28.1.3.tgz#e322267fd5e7c64cea4629612c357bbda96229df" - integrity sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA== +jest-validate@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.0.3.tgz#f9521581d7344685428afa0a4d110e9c519aeeb6" + integrity sha512-OebiqqT6lK8cbMPtrSoS3aZP4juID762lZvpf1u+smZnwTEBCBInan0GAIIhv36MxGaJvmq5uJm7dl5gVt+Zrw== dependencies: - "@jest/types" "^28.1.3" + "@jest/types" "^29.0.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^28.0.2" + jest-get-type "^29.0.0" leven "^3.1.0" - pretty-format "^28.1.3" + pretty-format "^29.0.3" -jest-watcher@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" - integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== +jest-watcher@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.0.3.tgz#8e220d1cc4f8029875e82015d084cab20f33d57f" + integrity sha512-tQX9lU91A+9tyUQKUMp0Ns8xAcdhC9fo73eqA3LFxP2bSgiF49TNcc+vf3qgGYYK9qRjFpXW9+4RgF/mbxyOOw== dependencies: - "@jest/test-result" "^28.1.3" - "@jest/types" "^28.1.3" + "@jest/test-result" "^29.0.3" + "@jest/types" "^29.0.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.10.2" - jest-util "^28.1.3" + jest-util "^29.0.3" string-length "^4.0.1" jest-worker@^26.2.1: @@ -6942,24 +6938,24 @@ jest-worker@^26.5.0: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" - integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== +jest-worker@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.0.3.tgz#c2ba0aa7e41eec9eb0be8e8a322ae6518df72647" + integrity sha512-Tl/YWUugQOjoTYwjKdfJWkSOfhufJHO5LhXTSZC3TRoQKO+fuXnZAdoXXBlpLXKGODBL3OvdUasfDD4PcMe6ng== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.3.tgz#e9c6a7eecdebe3548ca2b18894a50f45b36dfc6b" - integrity sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA== +jest@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.0.3.tgz#5227a0596d30791b2649eea347e4aa97f734944d" + integrity sha512-ElgUtJBLgXM1E8L6K1RW1T96R897YY/3lRYqq9uVcPWtP2AAl/nQ16IYDh/FzQOOQ12VEuLdcPU83mbhG2C3PQ== dependencies: - "@jest/core" "^28.1.3" - "@jest/types" "^28.1.3" + "@jest/core" "^29.0.3" + "@jest/types" "^29.0.3" import-local "^3.0.2" - jest-cli "^28.1.3" + jest-cli "^29.0.3" js-base64@^2.1.9: version "2.6.4" @@ -6986,39 +6982,6 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsdom@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-19.0.0.tgz#93e67c149fe26816d38a849ea30ac93677e16b6a" - integrity sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A== - dependencies: - abab "^2.0.5" - acorn "^8.5.0" - acorn-globals "^6.0.0" - cssom "^0.5.0" - cssstyle "^2.3.0" - data-urls "^3.0.1" - decimal.js "^10.3.1" - domexception "^4.0.0" - escodegen "^2.0.0" - form-data "^4.0.0" - html-encoding-sniffer "^3.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^3.0.0" - webidl-conversions "^7.0.0" - whatwg-encoding "^2.0.0" - whatwg-mimetype "^3.0.0" - whatwg-url "^10.0.0" - ws "^8.2.3" - xml-name-validator "^4.0.0" - jsdom@^20.0.0: version "20.0.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.0.tgz#882825ac9cc5e5bbee704ba16143e1fa78361ebf" @@ -8353,11 +8316,6 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parse5@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.0.0.tgz#51f74a5257f5fcc536389e8c2d0b3802e1bfa91a" @@ -9032,13 +8990,12 @@ pretty-format@^27.0.2: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" - integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== +pretty-format@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.0.3.tgz#23d5f8cabc9cbf209a77d49409d093d61166a811" + integrity sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q== dependencies: - "@jest/schemas" "^28.1.3" - ansi-regex "^5.0.1" + "@jest/schemas" "^29.0.0" ansi-styles "^5.0.0" react-is "^18.0.0" @@ -9881,7 +9838,7 @@ rimraf@^2.5.4, rimraf@^2.6.3: dependencies: glob "^7.1.3" -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -9974,13 +9931,6 @@ sax@~1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - saxes@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" @@ -11805,14 +11755,6 @@ whatwg-mimetype@^3.0.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== -whatwg-url@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-10.0.0.tgz#37264f720b575b4a311bd4094ed8c760caaa05da" - integrity sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w== - dependencies: - tr46 "^3.0.0" - webidl-conversions "^7.0.0" - whatwg-url@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" @@ -12109,7 +12051,7 @@ ws@^7.3.1: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -ws@^8.2.3, ws@^8.8.0, ws@^8.8.1: +ws@^8.8.0, ws@^8.8.1: version "8.8.1" resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== From 0aacf00f5b77264537aa87fb8f78d7346feb1ec4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Sep 2022 23:12:25 +0900 Subject: [PATCH 292/646] Bump rails from 6.1.6.1 to 6.1.7 (#19164) Bumps [rails](https://github.com/rails/rails) from 6.1.6.1 to 6.1.7. - [Release notes](https://github.com/rails/rails/releases) - [Commits](https://github.com/rails/rails/compare/v6.1.6.1...v6.1.7) --- updated-dependencies: - dependency-name: rails dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 108 +++++++++++++++++++++++++-------------------------- 2 files changed, 55 insertions(+), 55 deletions(-) diff --git a/Gemfile b/Gemfile index baefffb2f49..d90c17f14fa 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem 'pkg-config', '~> 1.4' gem 'rexml', '~> 3.2' gem 'puma', '~> 5.6' -gem 'rails', '~> 6.1.6' +gem 'rails', '~> 6.1.7' gem 'sprockets', '~> 3.7.2' gem 'thor', '~> 1.2' gem 'rack', '~> 2.2.4' diff --git a/Gemfile.lock b/Gemfile.lock index 2caa5f2e102..8b8a15623d2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,40 +10,40 @@ GIT GEM remote: https://rubygems.org/ specs: - actioncable (6.1.6.1) - actionpack (= 6.1.6.1) - activesupport (= 6.1.6.1) + actioncable (6.1.7) + actionpack (= 6.1.7) + activesupport (= 6.1.7) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (6.1.6.1) - actionpack (= 6.1.6.1) - activejob (= 6.1.6.1) - activerecord (= 6.1.6.1) - activestorage (= 6.1.6.1) - activesupport (= 6.1.6.1) + actionmailbox (6.1.7) + actionpack (= 6.1.7) + activejob (= 6.1.7) + activerecord (= 6.1.7) + activestorage (= 6.1.7) + activesupport (= 6.1.7) mail (>= 2.7.1) - actionmailer (6.1.6.1) - actionpack (= 6.1.6.1) - actionview (= 6.1.6.1) - activejob (= 6.1.6.1) - activesupport (= 6.1.6.1) + actionmailer (6.1.7) + actionpack (= 6.1.7) + actionview (= 6.1.7) + activejob (= 6.1.7) + activesupport (= 6.1.7) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (6.1.6.1) - actionview (= 6.1.6.1) - activesupport (= 6.1.6.1) + actionpack (6.1.7) + actionview (= 6.1.7) + activesupport (= 6.1.7) rack (~> 2.0, >= 2.0.9) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (6.1.6.1) - actionpack (= 6.1.6.1) - activerecord (= 6.1.6.1) - activestorage (= 6.1.6.1) - activesupport (= 6.1.6.1) + actiontext (6.1.7) + actionpack (= 6.1.7) + activerecord (= 6.1.7) + activestorage (= 6.1.7) + activesupport (= 6.1.7) nokogiri (>= 1.8.5) - actionview (6.1.6.1) - activesupport (= 6.1.6.1) + actionview (6.1.7) + activesupport (= 6.1.7) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) @@ -54,22 +54,22 @@ GEM case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) active_record_query_trace (1.8) - activejob (6.1.6.1) - activesupport (= 6.1.6.1) + activejob (6.1.7) + activesupport (= 6.1.7) globalid (>= 0.3.6) - activemodel (6.1.6.1) - activesupport (= 6.1.6.1) - activerecord (6.1.6.1) - activemodel (= 6.1.6.1) - activesupport (= 6.1.6.1) - activestorage (6.1.6.1) - actionpack (= 6.1.6.1) - activejob (= 6.1.6.1) - activerecord (= 6.1.6.1) - activesupport (= 6.1.6.1) + activemodel (6.1.7) + activesupport (= 6.1.7) + activerecord (6.1.7) + activemodel (= 6.1.7) + activesupport (= 6.1.7) + activestorage (6.1.7) + actionpack (= 6.1.7) + activejob (= 6.1.7) + activerecord (= 6.1.7) + activesupport (= 6.1.7) marcel (~> 1.0) mini_mime (>= 1.1.0) - activesupport (6.1.6.1) + activesupport (6.1.7) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) @@ -500,20 +500,20 @@ GEM rack rack-test (2.0.2) rack (>= 1.3) - rails (6.1.6.1) - actioncable (= 6.1.6.1) - actionmailbox (= 6.1.6.1) - actionmailer (= 6.1.6.1) - actionpack (= 6.1.6.1) - actiontext (= 6.1.6.1) - actionview (= 6.1.6.1) - activejob (= 6.1.6.1) - activemodel (= 6.1.6.1) - activerecord (= 6.1.6.1) - activestorage (= 6.1.6.1) - activesupport (= 6.1.6.1) + rails (6.1.7) + actioncable (= 6.1.7) + actionmailbox (= 6.1.7) + actionmailer (= 6.1.7) + actionpack (= 6.1.7) + actiontext (= 6.1.7) + actionview (= 6.1.7) + activejob (= 6.1.7) + activemodel (= 6.1.7) + activerecord (= 6.1.7) + activestorage (= 6.1.7) + activesupport (= 6.1.7) bundler (>= 1.15.0) - railties (= 6.1.6.1) + railties (= 6.1.7) sprockets-rails (>= 2.0.0) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) @@ -529,9 +529,9 @@ GEM railties (>= 6.0.0, < 7) rails-settings-cached (0.6.6) rails (>= 4.2.0) - railties (6.1.6.1) - actionpack (= 6.1.6.1) - activesupport (= 6.1.6.1) + railties (6.1.7) + actionpack (= 6.1.7) + activesupport (= 6.1.7) method_source rake (>= 12.2) thor (~> 1.0) @@ -816,7 +816,7 @@ DEPENDENCIES rack (~> 2.2.4) rack-attack (~> 6.6) rack-cors (~> 1.1) - rails (~> 6.1.6) + rails (~> 6.1.7) rails-controller-testing (~> 1.0) rails-i18n (~> 6.0) rails-settings-cached (~> 0.6) From 526b4b3677dfc5139289b405185024c85bba14dc Mon Sep 17 00:00:00 2001 From: trwnh Date: Thu, 15 Sep 2022 08:35:06 -0500 Subject: [PATCH 293/646] Fix breaking change in admin account API (#19176) * Fix breaking change in admin account API Ensure that `ip` is a String value and not returning a raw database entry * please rubocop --- app/serializers/rest/admin/account_serializer.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/serializers/rest/admin/account_serializer.rb b/app/serializers/rest/admin/account_serializer.rb index 3480e8c5a1c..2fbc7b1cb21 100644 --- a/app/serializers/rest/admin/account_serializer.rb +++ b/app/serializers/rest/admin/account_serializer.rb @@ -77,6 +77,6 @@ class REST::Admin::AccountSerializer < ActiveModel::Serializer end def ip - ips&.first + ips&.first&.ip end end From 6307634db560e30c0f21f45c2a35a2a08bb3b778 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 17 Sep 2022 10:03:03 +0900 Subject: [PATCH 294/646] Bump eslint-plugin-react from 7.31.6 to 7.31.8 (#19169) Bumps [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) from 7.31.6 to 7.31.8. - [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases) - [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/CHANGELOG.md) - [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.31.6...v7.31.8) --- updated-dependencies: - dependency-name: eslint-plugin-react dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e177434b365..41a1fcbf0ad 100644 --- a/package.json +++ b/package.json @@ -152,7 +152,7 @@ "eslint-plugin-import": "~2.26.0", "eslint-plugin-jsx-a11y": "~6.6.1", "eslint-plugin-promise": "~6.0.1", - "eslint-plugin-react": "~7.31.6", + "eslint-plugin-react": "~7.31.8", "jest": "^29.0.3", "jest-environment-jsdom": "^29.0.3", "postcss-scss": "^4.0.4", diff --git a/yarn.lock b/yarn.lock index c1ae9694ac9..533e2932e3a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4672,10 +4672,10 @@ eslint-plugin-promise@~6.0.1: resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.0.1.tgz#a8cddf96a67c4059bdabf4d724a29572188ae423" integrity sha512-uM4Tgo5u3UWQiroOyDEsYcVMOo7re3zmno0IZmB5auxoaQNIceAbXEkSt8RNrKtaYehARHG06pYK6K1JhtP0Zw== -eslint-plugin-react@~7.31.6: - version "7.31.6" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.6.tgz#55ec176be94917ecde3f3ca0e1363073193e241a" - integrity sha512-CXu4eu28sb8Sd2+cyUYsJVyDvpTlaXPG+bOzzpS9IzZKtye96AYX3ZmHQ6ayn/OAIQ/ufDJP8ElPWd63Pepn9w== +eslint-plugin-react@~7.31.8: + version "7.31.8" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.8.tgz#3a4f80c10be1bcbc8197be9e8b641b2a3ef219bf" + integrity sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw== dependencies: array-includes "^3.1.5" array.prototype.flatmap "^1.3.0" From 2163cd333d1482fb6bf1d5bffc215a1e66030127 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 17 Sep 2022 10:03:19 +0900 Subject: [PATCH 295/646] Bump sass from 1.54.8 to 1.54.9 (#19170) Bumps [sass](https://github.com/sass/dart-sass) from 1.54.8 to 1.54.9. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.54.8...1.54.9) --- updated-dependencies: - dependency-name: sass dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 41a1fcbf0ad..18867a51fb9 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "requestidlecallback": "^0.3.0", "reselect": "^4.1.6", "rimraf": "^3.0.2", - "sass": "^1.54.8", + "sass": "^1.54.9", "sass-loader": "^10.2.0", "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", diff --git a/yarn.lock b/yarn.lock index 533e2932e3a..a7a5e374655 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9917,10 +9917,10 @@ sass-loader@^10.2.0: schema-utils "^3.0.0" semver "^7.3.2" -sass@^1.54.8: - version "1.54.8" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.8.tgz#4adef0dd86ea2b1e4074f551eeda4fc5f812a996" - integrity sha512-ib4JhLRRgbg6QVy6bsv5uJxnJMTS2soVcCp9Y88Extyy13A8vV0G1fAwujOzmNkFQbR3LvedudAMbtuNRPbQww== +sass@^1.54.9: + version "1.54.9" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.9.tgz#b05f14ed572869218d1a76961de60cd647221762" + integrity sha512-xb1hjASzEH+0L0WI9oFjqhRi51t/gagWnxLiwUNMltA0Ab6jIDkAacgKiGYKM9Jhy109osM7woEEai6SXeJo5Q== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From 58d219621ef89d05c0dde8c6def2a58356d28b43 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 17 Sep 2022 10:03:46 +0900 Subject: [PATCH 296/646] Bump @rails/ujs from 6.1.6 to 6.1.7 (#19171) Bumps [@rails/ujs](https://github.com/rails/rails) from 6.1.6 to 6.1.7. - [Release notes](https://github.com/rails/rails/releases) - [Commits](https://github.com/rails/rails/compare/v6.1.6...v6.1.7) --- updated-dependencies: - dependency-name: "@rails/ujs" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 18867a51fb9..d2d2c89bd41 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "@babel/runtime": "^7.19.0", "@gamestdio/websocket": "^0.3.2", "@github/webauthn-json": "^0.5.7", - "@rails/ujs": "^6.1.6", + "@rails/ujs": "^6.1.7", "array-includes": "^3.1.5", "arrow-key-navigation": "^1.2.0", "autoprefixer": "^9.8.8", diff --git a/yarn.lock b/yarn.lock index a7a5e374655..5da3452f288 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1646,10 +1646,10 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.11.tgz#aeb16f50649a91af79dbe36574b66d0f9e4d9f71" integrity sha512-3NsZsJIA/22P3QUyrEDNA2D133H4j224twJrdipXN38dpnIOzAbUDtOwkcJ5pXmn75w7LSQDjA4tO9dm1XlqlA== -"@rails/ujs@^6.1.6": - version "6.1.6" - resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-6.1.6.tgz#de486ae0a663e1bed637a012cbb2739bfcfa2031" - integrity sha512-2M4zlthYmOC6X/tcPcFd//sIL26a7JbCpGNl8uIrQf+pR1Z47uhYt9cOwVqJTJZPurdy2k+YY3Pn64pqruAPEA== +"@rails/ujs@^6.1.7": + version "6.1.7" + resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-6.1.7.tgz#b09dc5b2105dd267e8374c47e4490240451dc7f6" + integrity sha512-0e7WQ4LE/+LEfW2zfAw9ppsB6A8RmxbdAUPAF++UT80epY+7emuQDkKXmaK0a9lp6An50RvzezI0cIQjp1A58w== "@rollup/plugin-babel@^5.2.0": version "5.3.1" From 14c7c9e40e72ac7ba2ba098b2c11d35ba463b56a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 18 Sep 2022 16:50:12 +0900 Subject: [PATCH 297/646] Bump blurhash from 1.1.5 to 2.0.0 (#19168) Bumps [blurhash](https://github.com/woltapp/blurhash) from 1.1.5 to 2.0.0. - [Release notes](https://github.com/woltapp/blurhash/releases) - [Commits](https://github.com/woltapp/blurhash/commits) --- updated-dependencies: - dependency-name: blurhash dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index d2d2c89bd41..b57108c04f2 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "babel-plugin-preval": "^5.1.0", "babel-plugin-react-intl": "^6.2.0", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", - "blurhash": "^1.1.5", + "blurhash": "^2.0.0", "classnames": "^2.3.1", "cocoon-js-vanilla": "^1.3.0", "color-blend": "^3.0.1", diff --git a/yarn.lock b/yarn.lock index 5da3452f288..04837a50ceb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2836,10 +2836,10 @@ bluebird@^3.5.5: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -blurhash@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/blurhash/-/blurhash-1.1.5.tgz#3034104cd5dce5a3e5caa871ae2f0f1f2d0ab566" - integrity sha512-a+LO3A2DfxTaTztsmkbLYmUzUeApi0LZuKalwbNmqAHR6HhJGMt1qSV/R3wc+w4DL28holjqO3Bg74aUGavGjg== +blurhash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/blurhash/-/blurhash-2.0.0.tgz#c2e6392043d5355241cf9ddaec9359023ea57a40" + integrity sha512-fdEZnyJZ5E5s9neCfZUMSMkKfMtdKz1fG53t/iYvMjUFUsDnyZ1YnRRayKBK/B8cilNwe5gaIrPF8QlLrukEZQ== bmp-js@^0.1.0: version "0.1.0" From 1145dbd327ae9b56357cc488801d723051f58e0b Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 20 Sep 2022 23:30:26 +0200 Subject: [PATCH 298/646] Improve error reporting and logging when processing remote accounts (#15605) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add a more descriptive PrivateNetworkAddressError exception class * Remove unnecessary exception class to rescue clause * Remove unnecessary include to JsonLdHelper * Give more neutral error message when too many webfinger redirects * Remove unnecessary guard condition * Rework how “ActivityPub::FetchRemoteAccountService” handles errors Add “suppress_errors” keyword argument to avoid raising errors in ActivityPub::FetchRemoteAccountService#call (default/previous behavior). * Rework how “ActivityPub::FetchRemoteKeyService” handles errors Add “suppress_errors” keyword argument to avoid raising errors in ActivityPub::FetchRemoteKeyService#call (default/previous behavior). * Fix Webfinger::RedirectError not being a subclass of Webfinger::Error * Add suppress_errors option to ResolveAccountService Defaults to true (to preserve previous behavior). If set to false, errors will be raised instead of caught, allowing the caller to be informed of what went wrong. * Return more precise error when failing to fetch account signing AP payloads * Add tests * Fixes * Refactor error handling a bit * Fix various issues * Add specific error when provided Digest is not 256 bits of base64-encoded data * Please CodeClimate * Improve webfinger error reporting --- .../concerns/signature_verification.rb | 46 ++++++++++++---- app/lib/request.rb | 6 +-- app/lib/webfinger.rb | 2 +- .../fetch_remote_account_service.rb | 38 +++++++++----- .../activitypub/fetch_remote_key_service.rb | 34 ++++++++---- .../activitypub/process_account_service.rb | 2 - app/services/resolve_account_service.rb | 12 ++--- lib/exceptions.rb | 9 ++++ .../fetch_remote_account_service_spec.rb | 52 +++++++++++++++++++ spec/services/resolve_account_service_spec.rb | 4 +- 10 files changed, 158 insertions(+), 47 deletions(-) diff --git a/app/controllers/concerns/signature_verification.rb b/app/controllers/concerns/signature_verification.rb index 4dd0cac55da..89dc828f455 100644 --- a/app/controllers/concerns/signature_verification.rb +++ b/app/controllers/concerns/signature_verification.rb @@ -93,11 +93,15 @@ module SignatureVerification return account unless verify_signature(account, signature, compare_signed_string).nil? - @signature_verification_failure_reason = "Verification failed for #{account.username}@#{account.domain} #{account.uri} using rsa-sha256 (RSASSA-PKCS1-v1_5 with SHA-256)" - @signed_request_account = nil + fail_with! "Verification failed for #{account.username}@#{account.domain} #{account.uri} using rsa-sha256 (RSASSA-PKCS1-v1_5 with SHA-256)" rescue SignatureVerificationError => e - @signature_verification_failure_reason = e.message - @signed_request_account = nil + fail_with! e.message + rescue HTTP::Error, OpenSSL::SSL::SSLError => e + fail_with! "Failed to fetch remote data: #{e.message}" + rescue Mastodon::UnexptectedResponseError + fail_with! 'Failed to fetch remote data (got unexpected reply from server)' + rescue Stoplight::Error::RedLight + fail_with! 'Fetching attempt skipped because of recent connection failure' end def request_body @@ -106,6 +110,11 @@ module SignatureVerification private + def fail_with!(message) + @signature_verification_failure_reason = message + @signed_request_account = nil + end + def signature_params @signature_params ||= begin raw_signature = request.headers['Signature'] @@ -138,7 +147,17 @@ module SignatureVerification digests = request.headers['Digest'].split(',').map { |digest| digest.split('=', 2) }.map { |key, value| [key.downcase, value] } sha256 = digests.assoc('sha-256') raise SignatureVerificationError, "Mastodon only supports SHA-256 in Digest header. Offered algorithms: #{digests.map(&:first).join(', ')}" if sha256.nil? - raise SignatureVerificationError, "Invalid Digest value. Computed SHA-256 digest: #{body_digest}; given: #{sha256[1]}" if body_digest != sha256[1] + + return if body_digest == sha256[1] + + digest_size = begin + Base64.strict_decode64(sha256[1].strip).length + rescue ArgumentError + raise SignatureVerificationError, "Invalid Digest value. The provided Digest value is not a valid base64 string. Given digest: #{sha256[1]}" + end + + raise SignatureVerificationError, "Invalid Digest value. The provided Digest value is not a SHA-256 digest. Given digest: #{sha256[1]}" if digest_size != 32 + raise SignatureVerificationError, "Invalid Digest value. Computed SHA-256 digest: #{body_digest}; given: #{sha256[1]}" end def verify_signature(account, signature, compare_signed_string) @@ -216,19 +235,20 @@ module SignatureVerification end if key_id.start_with?('acct:') - stoplight_wrap_request { ResolveAccountService.new.call(key_id.gsub(/\Aacct:/, '')) } + stoplight_wrap_request { ResolveAccountService.new.call(key_id.gsub(/\Aacct:/, ''), suppress_errors: false) } elsif !ActivityPub::TagManager.instance.local_uri?(key_id) account = ActivityPub::TagManager.instance.uri_to_resource(key_id, Account) - account ||= stoplight_wrap_request { ActivityPub::FetchRemoteKeyService.new.call(key_id, id: false) } + account ||= stoplight_wrap_request { ActivityPub::FetchRemoteKeyService.new.call(key_id, id: false, suppress_errors: false) } account end - rescue Mastodon::HostValidationError - nil + rescue Mastodon::PrivateNetworkAddressError => e + raise SignatureVerificationError, "Requests to private network addresses are disallowed (tried to query #{e.host})" + rescue Mastodon::HostValidationError, ActivityPub::FetchRemoteAccountService::Error, ActivityPub::FetchRemoteKeyService::Error, Webfinger::Error => e + raise SignatureVerificationError, e.message end def stoplight_wrap_request(&block) Stoplight("source:#{request.remote_ip}", &block) - .with_fallback { nil } .with_threshold(1) .with_cool_off_time(5.minutes.seconds) .with_error_handler { |error, handle| error.is_a?(HTTP::Error) || error.is_a?(OpenSSL::SSL::SSLError) ? handle.call(error) : raise(error) } @@ -237,6 +257,10 @@ module SignatureVerification def account_refresh_key(account) return if account.local? || !account.activitypub? - ActivityPub::FetchRemoteAccountService.new.call(account.uri, only_key: true) + ActivityPub::FetchRemoteAccountService.new.call(account.uri, only_key: true, suppress_errors: false) + rescue Mastodon::PrivateNetworkAddressError => e + raise SignatureVerificationError, "Requests to private network addresses are disallowed (tried to query #{e.host})" + rescue Mastodon::HostValidationError, ActivityPub::FetchRemoteAccountService::Error, Webfinger::Error => e + raise SignatureVerificationError, e.message end end diff --git a/app/lib/request.rb b/app/lib/request.rb index f5123d776ab..eac04c798da 100644 --- a/app/lib/request.rb +++ b/app/lib/request.rb @@ -208,7 +208,7 @@ class Request addresses.each do |address| begin - check_private_address(address) + check_private_address(address, host) sock = ::Socket.new(address.is_a?(Resolv::IPv6) ? ::Socket::AF_INET6 : ::Socket::AF_INET, ::Socket::SOCK_STREAM, 0) sockaddr = ::Socket.pack_sockaddr_in(port, address.to_s) @@ -264,10 +264,10 @@ class Request alias new open - def check_private_address(address) + def check_private_address(address, host) addr = IPAddr.new(address.to_s) return if private_address_exceptions.any? { |range| range.include?(addr) } - raise Mastodon::HostValidationError if PrivateAddressCheck.private_address?(addr) + raise Mastodon::PrivateNetworkAddressError, host if PrivateAddressCheck.private_address?(addr) end def private_address_exceptions diff --git a/app/lib/webfinger.rb b/app/lib/webfinger.rb index a681e0815fa..7c0c10c3385 100644 --- a/app/lib/webfinger.rb +++ b/app/lib/webfinger.rb @@ -3,7 +3,7 @@ class Webfinger class Error < StandardError; end class GoneError < Error; end - class RedirectError < StandardError; end + class RedirectError < Error; end class Response attr_reader :uri diff --git a/app/services/activitypub/fetch_remote_account_service.rb b/app/services/activitypub/fetch_remote_account_service.rb index 9d01f538687..d7d739c592b 100644 --- a/app/services/activitypub/fetch_remote_account_service.rb +++ b/app/services/activitypub/fetch_remote_account_service.rb @@ -5,10 +5,12 @@ class ActivityPub::FetchRemoteAccountService < BaseService include DomainControlHelper include WebfingerHelper + class Error < StandardError; end + SUPPORTED_TYPES = %w(Application Group Organization Person Service).freeze # Does a WebFinger roundtrip on each call, unless `only_key` is true - def call(uri, id: true, prefetched_body: nil, break_on_redirect: false, only_key: false) + def call(uri, id: true, prefetched_body: nil, break_on_redirect: false, only_key: false, suppress_errors: true) return if domain_not_allowed?(uri) return ActivityPub::TagManager.instance.uri_to_resource(uri, Account) if ActivityPub::TagManager.instance.local_uri?(uri) @@ -18,38 +20,50 @@ class ActivityPub::FetchRemoteAccountService < BaseService else body_to_json(prefetched_body, compare_id: id ? uri : nil) end + rescue Oj::ParseError + raise Error, "Error parsing JSON-LD document #{uri}" end - return if !supported_context? || !expected_type? || (break_on_redirect && @json['movedTo'].present?) + raise Error, "Error fetching actor JSON at #{uri}" if @json.nil? + raise Error, "Unsupported JSON-LD context for document #{uri}" unless supported_context? + raise Error, "Unexpected object type for actor #{uri} (expected any of: #{SUPPORTED_TYPES})" unless expected_type? + raise Error, "Actor #{uri} has moved to #{@json['movedTo']}" if break_on_redirect && @json['movedTo'].present? @uri = @json['id'] @username = @json['preferredUsername'] @domain = Addressable::URI.parse(@uri).normalized_host - return unless only_key || verified_webfinger? + check_webfinger! unless only_key ActivityPub::ProcessAccountService.new.call(@username, @domain, @json, only_key: only_key, verified_webfinger: !only_key) - rescue Oj::ParseError - nil + rescue Error => e + Rails.logger.debug "Fetching account #{uri} failed: #{e.message}" + raise unless suppress_errors end private - def verified_webfinger? + def check_webfinger! webfinger = webfinger!("acct:#{@username}@#{@domain}") confirmed_username, confirmed_domain = split_acct(webfinger.subject) - return webfinger.link('self', 'href') == @uri if @username.casecmp(confirmed_username).zero? && @domain.casecmp(confirmed_domain).zero? + if @username.casecmp(confirmed_username).zero? && @domain.casecmp(confirmed_domain).zero? + raise Error, "Webfinger response for #{@username}@#{@domain} does not loop back to #{@uri}" if webfinger.link('self', 'href') != @uri + return + end webfinger = webfinger!("acct:#{confirmed_username}@#{confirmed_domain}") @username, @domain = split_acct(webfinger.subject) - return false unless @username.casecmp(confirmed_username).zero? && @domain.casecmp(confirmed_domain).zero? - return false if webfinger.link('self', 'href') != @uri + unless confirmed_username.casecmp(@username).zero? && confirmed_domain.casecmp(@domain).zero? + raise Webfinger::RedirectError, "Too many webfinger redirects for URI #{uri} (stopped at #{@username}@#{@domain})" + end - true - rescue Webfinger::Error - false + raise Error, "Webfinger response for #{@username}@#{@domain} does not loop back to #{@uri}" if webfinger.link('self', 'href') != @uri + rescue Webfinger::RedirectError => e + raise Error, e.message + rescue Webfinger::Error => e + raise Error, "Webfinger error when resolving #{@username}@#{@domain}: #{e.message}" end def split_acct(acct) diff --git a/app/services/activitypub/fetch_remote_key_service.rb b/app/services/activitypub/fetch_remote_key_service.rb index c48288b3ba7..01008d8831b 100644 --- a/app/services/activitypub/fetch_remote_key_service.rb +++ b/app/services/activitypub/fetch_remote_key_service.rb @@ -3,9 +3,11 @@ class ActivityPub::FetchRemoteKeyService < BaseService include JsonLdHelper + class Error < StandardError; end + # Returns account that owns the key - def call(uri, id: true, prefetched_body: nil) - return if uri.blank? + def call(uri, id: true, prefetched_body: nil, suppress_errors: true) + raise Error, 'No key URI given' if uri.blank? if prefetched_body.nil? if id @@ -13,7 +15,7 @@ class ActivityPub::FetchRemoteKeyService < BaseService if person? @json = fetch_resource(@json['id'], true) elsif uri != @json['id'] - return + raise Error, "Fetched URI #{uri} has wrong id #{@json['id']}" end else @json = fetch_resource(uri, id) @@ -22,21 +24,29 @@ class ActivityPub::FetchRemoteKeyService < BaseService @json = body_to_json(prefetched_body, compare_id: id ? uri : nil) end - return unless supported_context?(@json) && expected_type? - return find_account(@json['id'], @json) if person? + raise Error, "Unable to fetch key JSON at #{uri}" if @json.nil? + raise Error, "Unsupported JSON-LD context for document #{uri}" unless supported_context?(@json) + raise Error, "Unexpected object type for key #{uri}" unless expected_type? + return find_account(@json['id'], @json, suppress_errors) if person? @owner = fetch_resource(owner_uri, true) - return unless supported_context?(@owner) && confirmed_owner? + raise Error, "Unable to fetch actor JSON #{owner_uri}" if @owner.nil? + raise Error, "Unsupported JSON-LD context for document #{owner_uri}" unless supported_context?(@owner) + raise Error, "Unexpected object type for actor #{owner_uri} (expected any of: #{SUPPORTED_TYPES})" unless expected_owner_type? + raise Error, "publicKey id for #{owner_uri} does not correspond to #{@json['id']}" unless confirmed_owner? - find_account(owner_uri, @owner) + find_account(owner_uri, @owner, suppress_errors) + rescue Error => e + Rails.logger.debug "Fetching key #{uri} failed: #{e.message}" + raise unless suppress_errors end private - def find_account(uri, prefetched_body) + def find_account(uri, prefetched_body, suppress_errors) account = ActivityPub::TagManager.instance.uri_to_resource(uri, Account) - account ||= ActivityPub::FetchRemoteAccountService.new.call(uri, prefetched_body: prefetched_body) + account ||= ActivityPub::FetchRemoteAccountService.new.call(uri, prefetched_body: prefetched_body, suppress_errors: suppress_errors) account end @@ -56,7 +66,11 @@ class ActivityPub::FetchRemoteKeyService < BaseService @owner_uri ||= value_or_id(@json['owner']) end + def expected_owner_type? + equals_or_includes_any?(@owner['type'], ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES) + end + def confirmed_owner? - equals_or_includes_any?(@owner['type'], ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES) && value_or_id(@owner['publicKey']) == @json['id'] + value_or_id(@owner['publicKey']) == @json['id'] end end diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index 34750dba6bd..456b3524b5d 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -32,8 +32,6 @@ class ActivityPub::ProcessAccountService < BaseService process_duplicate_accounts! if @options[:verified_webfinger] end - return if @account.nil? - after_protocol_change! if protocol_changed? after_key_change! if key_changed? && !@options[:signed_with_known_key] clear_tombstones! if key_changed? diff --git a/app/services/resolve_account_service.rb b/app/services/resolve_account_service.rb index b55e4540944..e3b370968f8 100644 --- a/app/services/resolve_account_service.rb +++ b/app/services/resolve_account_service.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true class ResolveAccountService < BaseService - include JsonLdHelper include DomainControlHelper include WebfingerHelper include Redisable @@ -13,6 +12,7 @@ class ResolveAccountService < BaseService # @param [Hash] options # @option options [Boolean] :redirected Do not follow further Webfinger redirects # @option options [Boolean] :skip_webfinger Do not attempt any webfinger query or refreshing account data + # @option options [Boolean] :suppress_errors When failing, return nil instead of raising an error # @return [Account] def call(uri, options = {}) return if uri.blank? @@ -52,15 +52,15 @@ class ResolveAccountService < BaseService # either needs to be created, or updated from fresh data fetch_account! - rescue Webfinger::Error, Oj::ParseError => e + rescue Webfinger::Error => e Rails.logger.debug "Webfinger query for #{@uri} failed: #{e}" - nil + raise unless @options[:suppress_errors] end private def process_options!(uri, options) - @options = options + @options = { suppress_errors: true }.merge(options) if uri.is_a?(Account) @account = uri @@ -96,7 +96,7 @@ class ResolveAccountService < BaseService @username, @domain = split_acct(@webfinger.subject) unless confirmed_username.casecmp(@username).zero? && confirmed_domain.casecmp(@domain).zero? - raise Webfinger::RedirectError, "The URI #{uri} tries to hijack #{@username}@#{@domain}" + raise Webfinger::RedirectError, "Too many webfinger redirects for URI #{uri} (stopped at #{@username}@#{@domain})" end rescue Webfinger::GoneError @gone = true @@ -110,7 +110,7 @@ class ResolveAccountService < BaseService return unless activitypub_ready? with_lock("resolve:#{@username}@#{@domain}") do - @account = ActivityPub::FetchRemoteAccountService.new.call(actor_url) + @account = ActivityPub::FetchRemoteAccountService.new.call(actor_url, suppress_errors: @options[:suppress_errors]) end @account diff --git a/lib/exceptions.rb b/lib/exceptions.rb index 0c677b6605d..3c5ba226b19 100644 --- a/lib/exceptions.rb +++ b/lib/exceptions.rb @@ -25,4 +25,13 @@ module Mastodon end end end + + class PrivateNetworkAddressError < HostValidationError + attr_reader :host + + def initialize(host) + @host = host + super() + end + end end diff --git a/spec/services/activitypub/fetch_remote_account_service_spec.rb b/spec/services/activitypub/fetch_remote_account_service_spec.rb index aa13f0a9b79..ec6f1f41d8f 100644 --- a/spec/services/activitypub/fetch_remote_account_service_spec.rb +++ b/spec/services/activitypub/fetch_remote_account_service_spec.rb @@ -119,6 +119,58 @@ RSpec.describe ActivityPub::FetchRemoteAccountService, type: :service do include_examples 'sets profile data' end + context 'when WebFinger returns a different URI' do + let!(:webfinger) { { subject: 'acct:alice@example.com', links: [{ rel: 'self', href: 'https://example.com/bob' }] } } + + before do + stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor)) + stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' }) + end + + it 'fetches resource' do + account + expect(a_request(:get, 'https://example.com/alice')).to have_been_made.once + end + + it 'looks up webfinger' do + account + expect(a_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com')).to have_been_made.once + end + + it 'does not create account' do + expect(account).to be_nil + end + end + + context 'when WebFinger returns a different URI after a redirection' do + let!(:webfinger) { { subject: 'acct:alice@iscool.af', links: [{ rel: 'self', href: 'https://example.com/bob' }] } } + + before do + stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor)) + stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' }) + stub_request(:get, 'https://iscool.af/.well-known/webfinger?resource=acct:alice@iscool.af').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' }) + end + + it 'fetches resource' do + account + expect(a_request(:get, 'https://example.com/alice')).to have_been_made.once + end + + it 'looks up webfinger' do + account + expect(a_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com')).to have_been_made.once + end + + it 'looks up "redirected" webfinger' do + account + expect(a_request(:get, 'https://iscool.af/.well-known/webfinger?resource=acct:alice@iscool.af')).to have_been_made.once + end + + it 'does not create account' do + expect(account).to be_nil + end + end + context 'with wrong id' do it 'does not create account' do expect(subject.call('https://fake.address/@foo', prefetched_body: Oj.dump(actor))).to be_nil diff --git a/spec/services/resolve_account_service_spec.rb b/spec/services/resolve_account_service_spec.rb index 8c302e1d863..654606beab5 100644 --- a/spec/services/resolve_account_service_spec.rb +++ b/spec/services/resolve_account_service_spec.rb @@ -137,8 +137,8 @@ RSpec.describe ResolveAccountService, type: :service do stub_request(:get, 'https://evil.example.com/.well-known/webfinger?resource=acct:foo@evil.example.com').to_return(body: Oj.dump(webfinger2), headers: { 'Content-Type': 'application/jrd+json' }) end - it 'returns new remote account' do - expect { subject.call('Foo@redirected.example.com') }.to raise_error Webfinger::RedirectError + it 'does not return a new remote account' do + expect(subject.call('Foo@redirected.example.com')).to be_nil end end From 7b38cb88caa46a47eb7b18f2211ef768923568aa Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 20 Sep 2022 23:49:00 +0200 Subject: [PATCH 299/646] Fix ProcessMentionService swallowing unprocessed mentions to unconfirmed/unapproved users (#19191) --- app/services/process_mentions_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/process_mentions_service.rb b/app/services/process_mentions_service.rb index 8c63b611d36..c9c158af1c6 100644 --- a/app/services/process_mentions_service.rb +++ b/app/services/process_mentions_service.rb @@ -38,7 +38,7 @@ class ProcessMentionsService < BaseService mentioned_account = Account.find_remote(username, domain) # Unapproved and unconfirmed accounts should not be mentionable - next if mentioned_account&.local? && !(mentioned_account.user_confirmed? && mentioned_account.user_approved?) + next match if mentioned_account&.local? && !(mentioned_account.user_confirmed? && mentioned_account.user_approved?) # If the account cannot be found or isn't the right protocol, # first try to resolve it From 882e54c78678bd4247d70fe5b04571543769bcee Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Wed, 21 Sep 2022 06:50:19 +0900 Subject: [PATCH 300/646] Fix Ambiguous SQL error on tootctl media refresh (#19206) --- lib/mastodon/media_cli.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mastodon/media_cli.rb b/lib/mastodon/media_cli.rb index 4904cc5eb99..bba4a1bd72f 100644 --- a/lib/mastodon/media_cli.rb +++ b/lib/mastodon/media_cli.rb @@ -234,7 +234,7 @@ module Mastodon end if options[:days].present? - scope = scope.where('id > ?', Mastodon::Snowflake.id_at(options[:days].days.ago, with_random: false)) + scope = scope.where('media_attachments.id > ?', Mastodon::Snowflake.id_at(options[:days].days.ago, with_random: false)) end processed, aggregate = parallelize_with_progress(scope) do |media_attachment| From 50948b46aabc0756d85bc6641f0bd3bcc09bf7d4 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 20 Sep 2022 23:51:21 +0200 Subject: [PATCH 301/646] Add ability to filter followed accounts' posts by language (#19095) --- app/controllers/api/v1/accounts_controller.rb | 6 +- .../features/account/components/header.js | 5 + .../account_timeline/components/header.js | 6 + .../containers/header_container.js | 8 +- .../subscribed_languages_modal/index.js | 121 ++++++++++++++++++ .../features/ui/components/modal_root.js | 2 + .../mastodon/locales/defaultMessages.json | 25 ++++ app/javascript/mastodon/locales/en.json | 4 + app/lib/feed_manager.rb | 2 + app/models/concerns/account_interactions.rb | 23 ++-- app/models/export.rb | 4 +- app/models/follow.rb | 4 +- app/models/follow_request.rb | 4 +- .../rest/relationship_serializer.rb | 7 +- app/services/follow_service.rb | 13 +- app/services/import_service.rb | 2 +- app/validators/language_validator.rb | 21 +++ app/workers/refollow_worker.rb | 7 +- app/workers/unfollow_follow_worker.rb | 9 +- ...20220829192633_add_languages_to_follows.rb | 5 + ...192658_add_languages_to_follow_requests.rb | 5 + db/schema.rb | 4 +- .../api/v1/accounts_controller_spec.rb | 11 ++ .../following_accounts_controller_spec.rb | 2 +- spec/lib/feed_manager_spec.rb | 12 ++ .../concerns/account_interactions_spec.rb | 2 +- spec/models/export_spec.rb | 4 +- spec/models/follow_request_spec.rb | 2 +- spec/services/follow_service_spec.rb | 13 ++ spec/workers/refollow_worker_spec.rb | 4 +- 30 files changed, 298 insertions(+), 39 deletions(-) create mode 100644 app/javascript/mastodon/features/subscribed_languages_modal/index.js create mode 100644 app/validators/language_validator.rb create mode 100644 db/migrate/20220829192633_add_languages_to_follows.rb create mode 100644 db/migrate/20220829192658_add_languages_to_follow_requests.rb diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index 5537cc9b0bd..be84720aa9c 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -30,12 +30,12 @@ class Api::V1::AccountsController < Api::BaseController self.response_body = Oj.dump(response.body) self.status = response.status rescue ActiveRecord::RecordInvalid => e - render json: ValidationErrorFormatter.new(e, :'account.username' => :username, :'invite_request.text' => :reason).as_json, status: :unprocessable_entity + render json: ValidationErrorFormatter.new(e, 'account.username': :username, 'invite_request.text': :reason).as_json, status: :unprocessable_entity end def follow - follow = FollowService.new.call(current_user.account, @account, reblogs: params.key?(:reblogs) ? truthy_param?(:reblogs) : nil, notify: params.key?(:notify) ? truthy_param?(:notify) : nil, with_rate_limit: true) - options = @account.locked? || current_user.account.silenced? ? {} : { following_map: { @account.id => { reblogs: follow.show_reblogs?, notify: follow.notify? } }, requested_map: { @account.id => false } } + follow = FollowService.new.call(current_user.account, @account, reblogs: params.key?(:reblogs) ? truthy_param?(:reblogs) : nil, notify: params.key?(:notify) ? truthy_param?(:notify) : nil, languages: params.key?(:languages) ? params[:languages] : nil, with_rate_limit: true) + options = @account.locked? || current_user.account.silenced? ? {} : { following_map: { @account.id => { reblogs: follow.show_reblogs?, notify: follow.notify?, languages: follow.languages } }, requested_map: { @account.id => false } } render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships(**options) end diff --git a/app/javascript/mastodon/features/account/components/header.js b/app/javascript/mastodon/features/account/components/header.js index 1ad9341c79f..8f2753c35ef 100644 --- a/app/javascript/mastodon/features/account/components/header.js +++ b/app/javascript/mastodon/features/account/components/header.js @@ -51,6 +51,7 @@ const messages = defineMessages({ unendorse: { id: 'account.unendorse', defaultMessage: 'Don\'t feature on profile' }, add_or_remove_from_list: { id: 'account.add_or_remove_from_list', defaultMessage: 'Add or Remove from lists' }, admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' }, + languages: { id: 'account.languages', defaultMessage: 'Change subscribed languages' }, }); const dateFormatOptions = { @@ -85,6 +86,7 @@ class Header extends ImmutablePureComponent { onEndorseToggle: PropTypes.func.isRequired, onAddToList: PropTypes.func.isRequired, onEditAccountNote: PropTypes.func.isRequired, + onChangeLanguages: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, domain: PropTypes.string.isRequired, hidden: PropTypes.bool, @@ -212,6 +214,9 @@ class Header extends ImmutablePureComponent { } else { menu.push({ text: intl.formatMessage(messages.showReblogs, { name: account.get('username') }), action: this.props.onReblogToggle }); } + + menu.push({ text: intl.formatMessage(messages.languages), action: this.props.onChangeLanguages }); + menu.push(null); } menu.push({ text: intl.formatMessage(account.getIn(['relationship', 'endorsed']) ? messages.unendorse : messages.endorse), action: this.props.onEndorseToggle }); diff --git a/app/javascript/mastodon/features/account_timeline/components/header.js b/app/javascript/mastodon/features/account_timeline/components/header.js index fab0bc597fb..f9838442f5a 100644 --- a/app/javascript/mastodon/features/account_timeline/components/header.js +++ b/app/javascript/mastodon/features/account_timeline/components/header.js @@ -22,6 +22,7 @@ export default class Header extends ImmutablePureComponent { onUnblockDomain: PropTypes.func.isRequired, onEndorseToggle: PropTypes.func.isRequired, onAddToList: PropTypes.func.isRequired, + onChangeLanguages: PropTypes.func.isRequired, hideTabs: PropTypes.bool, domain: PropTypes.string.isRequired, hidden: PropTypes.bool, @@ -91,6 +92,10 @@ export default class Header extends ImmutablePureComponent { this.props.onEditAccountNote(this.props.account); } + handleChangeLanguages = () => { + this.props.onChangeLanguages(this.props.account); + } + render () { const { account, hidden, hideTabs } = this.props; @@ -117,6 +122,7 @@ export default class Header extends ImmutablePureComponent { onEndorseToggle={this.handleEndorseToggle} onAddToList={this.handleAddToList} onEditAccountNote={this.handleEditAccountNote} + onChangeLanguages={this.handleChangeLanguages} domain={this.props.domain} hidden={hidden} /> diff --git a/app/javascript/mastodon/features/account_timeline/containers/header_container.js b/app/javascript/mastodon/features/account_timeline/containers/header_container.js index 371794dd758..3d6eb487dbd 100644 --- a/app/javascript/mastodon/features/account_timeline/containers/header_container.js +++ b/app/javascript/mastodon/features/account_timeline/containers/header_container.js @@ -121,12 +121,18 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ dispatch(unblockDomain(domain)); }, - onAddToList(account){ + onAddToList (account) { dispatch(openModal('LIST_ADDER', { accountId: account.get('id'), })); }, + onChangeLanguages (account) { + dispatch(openModal('SUBSCRIBED_LANGUAGES', { + accountId: account.get('id'), + })); + }, + }); export default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(Header)); diff --git a/app/javascript/mastodon/features/subscribed_languages_modal/index.js b/app/javascript/mastodon/features/subscribed_languages_modal/index.js new file mode 100644 index 00000000000..6a1bb2c47f4 --- /dev/null +++ b/app/javascript/mastodon/features/subscribed_languages_modal/index.js @@ -0,0 +1,121 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import { connect } from 'react-redux'; +import { createSelector } from 'reselect'; +import { is, List as ImmutableList, Set as ImmutableSet } from 'immutable'; +import { languages as preloadedLanguages } from 'mastodon/initial_state'; +import Option from 'mastodon/features/report/components/option'; +import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; +import IconButton from 'mastodon/components/icon_button'; +import Button from 'mastodon/components/button'; +import { followAccount } from 'mastodon/actions/accounts'; + +const messages = defineMessages({ + close: { id: 'lightbox.close', defaultMessage: 'Close' }, +}); + +const getAccountLanguages = createSelector([ + (state, accountId) => state.getIn(['timelines', `account:${accountId}`, 'items'], ImmutableList()), + state => state.get('statuses'), +], (statusIds, statuses) => + new ImmutableSet(statusIds.map(statusId => statuses.get(statusId)).filter(status => !status.get('reblog')).map(status => status.get('language')))); + +const mapStateToProps = (state, { accountId }) => ({ + acct: state.getIn(['accounts', accountId, 'acct']), + availableLanguages: getAccountLanguages(state, accountId), + selectedLanguages: ImmutableSet(state.getIn(['relationships', accountId, 'languages']) || ImmutableList()), +}); + +const mapDispatchToProps = (dispatch, { accountId }) => ({ + + onSubmit (languages) { + dispatch(followAccount(accountId, { languages })); + }, + +}); + +export default @connect(mapStateToProps, mapDispatchToProps) +@injectIntl +class SubscribedLanguagesModal extends ImmutablePureComponent { + + static propTypes = { + accountId: PropTypes.string.isRequired, + acct: PropTypes.string.isRequired, + availableLanguages: ImmutablePropTypes.setOf(PropTypes.string), + selectedLanguages: ImmutablePropTypes.setOf(PropTypes.string), + onClose: PropTypes.func.isRequired, + languages: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)), + intl: PropTypes.object.isRequired, + submit: PropTypes.func.isRequired, + }; + + static defaultProps = { + languages: preloadedLanguages, + }; + + state = { + selectedLanguages: this.props.selectedLanguages, + }; + + handleLanguageToggle = (value, checked) => { + const { selectedLanguages } = this.state; + + if (checked) { + this.setState({ selectedLanguages: selectedLanguages.add(value) }); + } else { + this.setState({ selectedLanguages: selectedLanguages.delete(value) }); + } + }; + + handleSubmit = () => { + this.props.onSubmit(this.state.selectedLanguages.toArray()); + this.props.onClose(); + } + + renderItem (value) { + const language = this.props.languages.find(language => language[0] === value); + const checked = this.state.selectedLanguages.includes(value); + + return ( +
    +
    + + {acct} }} /> +
    + +
    +

    + +
    + {availableLanguages.union(selectedLanguages).map(value => this.renderItem(value))} +
    + +
    + +
    + +
    +
    +
    + ); + } + +} diff --git a/app/javascript/mastodon/features/ui/components/modal_root.js b/app/javascript/mastodon/features/ui/components/modal_root.js index b2c30e07913..dfa89f2ce9b 100644 --- a/app/javascript/mastodon/features/ui/components/modal_root.js +++ b/app/javascript/mastodon/features/ui/components/modal_root.js @@ -11,6 +11,7 @@ import VideoModal from './video_modal'; import BoostModal from './boost_modal'; import AudioModal from './audio_modal'; import ConfirmationModal from './confirmation_modal'; +import SubscribedLanguagesModal from 'mastodon/features/subscribed_languages_modal'; import FocalPointModal from './focal_point_modal'; import { MuteModal, @@ -39,6 +40,7 @@ const MODAL_COMPONENTS = { 'LIST_ADDER': ListAdder, 'COMPARE_HISTORY': CompareHistoryModal, 'FILTER': FilterModal, + 'SUBSCRIBED_LANGUAGES': () => Promise.resolve({ default: SubscribedLanguagesModal }), }; export default class ModalRoot extends React.PureComponent { diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index 13ef5692215..4c208c3cb1d 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -1030,6 +1030,10 @@ "defaultMessage": "Open moderation interface for @{name}", "id": "status.admin_account" }, + { + "defaultMessage": "Change subscribed languages", + "id": "account.languages" + }, { "defaultMessage": "Follows you", "id": "account.follows_you" @@ -3350,6 +3354,27 @@ ], "path": "app/javascript/mastodon/features/status/index.json" }, + { + "descriptors": [ + { + "defaultMessage": "Close", + "id": "lightbox.close" + }, + { + "defaultMessage": "Change subscribed languages for {target}", + "id": "subscribed_languages.target" + }, + { + "defaultMessage": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "id": "subscribed_languages.lead" + }, + { + "defaultMessage": "Save changes", + "id": "subscribed_languages.save" + } + ], + "path": "app/javascript/mastodon/features/subscribed_languages_modal/index.json" + }, { "descriptors": [ { diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 521bc44551a..4f515b3214a 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -24,6 +24,7 @@ "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", "account.joined": "Joined {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index ccff2667b6b..f2d204a6441 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -354,6 +354,7 @@ class FeedManager def filter_from_home?(status, receiver_id, crutches) return false if receiver_id == status.account_id return true if status.reply? && (status.in_reply_to_id.nil? || status.in_reply_to_account_id.nil?) + return true if crutches[:languages][status.account_id].present? && status.language.present? && !crutches[:languages][status.account_id].include?(status.language) check_for_blocks = crutches[:active_mentions][status.id] || [] check_for_blocks.concat([status.account_id]) @@ -542,6 +543,7 @@ class FeedManager end crutches[:following] = Follow.where(account_id: receiver_id, target_account_id: statuses.map(&:in_reply_to_account_id).compact).pluck(:target_account_id).index_with(true) + crutches[:languages] = Follow.where(account_id: receiver_id, target_account_id: statuses.map(&:account_id)).pluck(:target_account_id, :languages).to_h crutches[:hiding_reblogs] = Follow.where(account_id: receiver_id, target_account_id: statuses.map { |s| s.account_id if s.reblog? }.compact, show_reblogs: false).pluck(:target_account_id).index_with(true) crutches[:blocking] = Block.where(account_id: receiver_id, target_account_id: check_for_blocks).pluck(:target_account_id).index_with(true) crutches[:muting] = Mute.where(account_id: receiver_id, target_account_id: check_for_blocks).pluck(:target_account_id).index_with(true) diff --git a/app/models/concerns/account_interactions.rb b/app/models/concerns/account_interactions.rb index 9b358d338e3..15c49f2fecb 100644 --- a/app/models/concerns/account_interactions.rb +++ b/app/models/concerns/account_interactions.rb @@ -9,6 +9,7 @@ module AccountInteractions mapping[follow.target_account_id] = { reblogs: follow.show_reblogs?, notify: follow.notify?, + languages: follow.languages, } end end @@ -38,6 +39,7 @@ module AccountInteractions mapping[follow_request.target_account_id] = { reblogs: follow_request.show_reblogs?, notify: follow_request.notify?, + languages: follow_request.languages, } end end @@ -100,12 +102,13 @@ module AccountInteractions has_many :announcement_mutes, dependent: :destroy end - def follow!(other_account, reblogs: nil, notify: nil, uri: nil, rate_limit: false, bypass_limit: false) - rel = active_relationships.create_with(show_reblogs: reblogs.nil? ? true : reblogs, notify: notify.nil? ? false : notify, uri: uri, rate_limit: rate_limit, bypass_follow_limit: bypass_limit) + def follow!(other_account, reblogs: nil, notify: nil, languages: nil, uri: nil, rate_limit: false, bypass_limit: false) + rel = active_relationships.create_with(show_reblogs: reblogs.nil? ? true : reblogs, notify: notify.nil? ? false : notify, languages: languages, uri: uri, rate_limit: rate_limit, bypass_follow_limit: bypass_limit) .find_or_create_by!(target_account: other_account) - rel.show_reblogs = reblogs unless reblogs.nil? - rel.notify = notify unless notify.nil? + rel.show_reblogs = reblogs unless reblogs.nil? + rel.notify = notify unless notify.nil? + rel.languages = languages unless languages.nil? rel.save! if rel.changed? @@ -114,12 +117,13 @@ module AccountInteractions rel end - def request_follow!(other_account, reblogs: nil, notify: nil, uri: nil, rate_limit: false, bypass_limit: false) - rel = follow_requests.create_with(show_reblogs: reblogs.nil? ? true : reblogs, notify: notify.nil? ? false : notify, uri: uri, rate_limit: rate_limit, bypass_follow_limit: bypass_limit) + def request_follow!(other_account, reblogs: nil, notify: nil, languages: nil, uri: nil, rate_limit: false, bypass_limit: false) + rel = follow_requests.create_with(show_reblogs: reblogs.nil? ? true : reblogs, notify: notify.nil? ? false : notify, uri: uri, languages: languages, rate_limit: rate_limit, bypass_follow_limit: bypass_limit) .find_or_create_by!(target_account: other_account) - rel.show_reblogs = reblogs unless reblogs.nil? - rel.notify = notify unless notify.nil? + rel.show_reblogs = reblogs unless reblogs.nil? + rel.notify = notify unless notify.nil? + rel.languages = languages unless languages.nil? rel.save! if rel.changed? @@ -288,8 +292,7 @@ module AccountInteractions private - def remove_potential_friendship(other_account, mutual = false) + def remove_potential_friendship(other_account) PotentialFriendshipTracker.remove(id, other_account.id) - PotentialFriendshipTracker.remove(other_account.id, id) if mutual end end diff --git a/app/models/export.rb b/app/models/export.rb index 5216eed5ea7..2457dcc1565 100644 --- a/app/models/export.rb +++ b/app/models/export.rb @@ -30,9 +30,9 @@ class Export end def to_following_accounts_csv - CSV.generate(headers: ['Account address', 'Show boosts'], write_headers: true) do |csv| + CSV.generate(headers: ['Account address', 'Show boosts', 'Notify on new posts', 'Languages'], write_headers: true) do |csv| account.active_relationships.includes(:target_account).reorder(id: :desc).each do |follow| - csv << [acct(follow.target_account), follow.show_reblogs] + csv << [acct(follow.target_account), follow.show_reblogs, follow.notify, follow.languages&.join(', ')] end end end diff --git a/app/models/follow.rb b/app/models/follow.rb index a5e3fe80995..e5cecbbc1d3 100644 --- a/app/models/follow.rb +++ b/app/models/follow.rb @@ -11,6 +11,7 @@ # show_reblogs :boolean default(TRUE), not null # uri :string # notify :boolean default(FALSE), not null +# languages :string is an Array # class Follow < ApplicationRecord @@ -27,6 +28,7 @@ class Follow < ApplicationRecord has_one :notification, as: :activity, dependent: :destroy validates :account_id, uniqueness: { scope: :target_account_id } + validates :languages, language: true scope :recent, -> { reorder(id: :desc) } @@ -35,7 +37,7 @@ class Follow < ApplicationRecord end def revoke_request! - FollowRequest.create!(account: account, target_account: target_account, show_reblogs: show_reblogs, notify: notify, uri: uri) + FollowRequest.create!(account: account, target_account: target_account, show_reblogs: show_reblogs, notify: notify, languages: languages, uri: uri) destroy! end diff --git a/app/models/follow_request.rb b/app/models/follow_request.rb index 0b6f7629af9..9034250c0d0 100644 --- a/app/models/follow_request.rb +++ b/app/models/follow_request.rb @@ -11,6 +11,7 @@ # show_reblogs :boolean default(TRUE), not null # uri :string # notify :boolean default(FALSE), not null +# languages :string is an Array # class FollowRequest < ApplicationRecord @@ -27,9 +28,10 @@ class FollowRequest < ApplicationRecord has_one :notification, as: :activity, dependent: :destroy validates :account_id, uniqueness: { scope: :target_account_id } + validates :languages, language: true def authorize! - account.follow!(target_account, reblogs: show_reblogs, notify: notify, uri: uri, bypass_limit: true) + account.follow!(target_account, reblogs: show_reblogs, notify: notify, languages: languages, uri: uri, bypass_limit: true) MergeWorker.perform_async(target_account.id, account.id) if account.local? destroy! end diff --git a/app/serializers/rest/relationship_serializer.rb b/app/serializers/rest/relationship_serializer.rb index afd4cddf9b5..31fc60eb25a 100644 --- a/app/serializers/rest/relationship_serializer.rb +++ b/app/serializers/rest/relationship_serializer.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class REST::RelationshipSerializer < ActiveModel::Serializer - attributes :id, :following, :showing_reblogs, :notifying, :followed_by, + attributes :id, :following, :showing_reblogs, :notifying, :languages, :followed_by, :blocking, :blocked_by, :muting, :muting_notifications, :requested, :domain_blocking, :endorsed, :note @@ -25,6 +25,11 @@ class REST::RelationshipSerializer < ActiveModel::Serializer false end + def languages + (instance_options[:relationships].following[object.id] || {})[:languages] || + (instance_options[:relationships].requested[object.id] || {})[:languages] + end + def followed_by instance_options[:relationships].followed_by[object.id] || false end diff --git a/app/services/follow_service.rb b/app/services/follow_service.rb index ed28e13718e..feea40e3c0a 100644 --- a/app/services/follow_service.rb +++ b/app/services/follow_service.rb @@ -11,6 +11,7 @@ class FollowService < BaseService # @param [Hash] options # @option [Boolean] :reblogs Whether or not to show reblogs, defaults to true # @option [Boolean] :notify Whether to create notifications about new posts, defaults to false + # @option [Array] :languages Which languages to allow on the home feed from this account, defaults to all # @option [Boolean] :bypass_locked # @option [Boolean] :bypass_limit Allow following past the total follow number # @option [Boolean] :with_rate_limit @@ -57,15 +58,15 @@ class FollowService < BaseService end def change_follow_options! - @source_account.follow!(@target_account, reblogs: @options[:reblogs], notify: @options[:notify]) + @source_account.follow!(@target_account, **follow_options) end def change_follow_request_options! - @source_account.request_follow!(@target_account, reblogs: @options[:reblogs], notify: @options[:notify]) + @source_account.request_follow!(@target_account, **follow_options) end def request_follow! - follow_request = @source_account.request_follow!(@target_account, reblogs: @options[:reblogs], notify: @options[:notify], rate_limit: @options[:with_rate_limit], bypass_limit: @options[:bypass_limit]) + follow_request = @source_account.request_follow!(@target_account, **follow_options.merge(rate_limit: @options[:with_rate_limit], bypass_limit: @options[:bypass_limit])) if @target_account.local? LocalNotificationWorker.perform_async(@target_account.id, follow_request.id, follow_request.class.name, 'follow_request') @@ -77,7 +78,7 @@ class FollowService < BaseService end def direct_follow! - follow = @source_account.follow!(@target_account, reblogs: @options[:reblogs], notify: @options[:notify], rate_limit: @options[:with_rate_limit], bypass_limit: @options[:bypass_limit]) + follow = @source_account.follow!(@target_account, **follow_options.merge(rate_limit: @options[:with_rate_limit], bypass_limit: @options[:bypass_limit])) LocalNotificationWorker.perform_async(@target_account.id, follow.id, follow.class.name, 'follow') MergeWorker.perform_async(@target_account.id, @source_account.id) @@ -88,4 +89,8 @@ class FollowService < BaseService def build_json(follow_request) Oj.dump(serialize_payload(follow_request, ActivityPub::FollowSerializer)) end + + def follow_options + @options.slice(:reblogs, :notify, :languages) + end end diff --git a/app/services/import_service.rb b/app/services/import_service.rb index 8e6640b9dde..676c37bde40 100644 --- a/app/services/import_service.rb +++ b/app/services/import_service.rb @@ -27,7 +27,7 @@ class ImportService < BaseService def import_follows! parse_import_data!(['Account address']) - import_relationships!('follow', 'unfollow', @account.following, ROWS_PROCESSING_LIMIT, reblogs: { header: 'Show boosts', default: true }) + import_relationships!('follow', 'unfollow', @account.following, ROWS_PROCESSING_LIMIT, reblogs: { header: 'Show boosts', default: true }, notify: { header: 'Notify on new posts', default: false }, languages: { header: 'Languages', default: nil }) end def import_blocks! diff --git a/app/validators/language_validator.rb b/app/validators/language_validator.rb new file mode 100644 index 00000000000..b723e1a408e --- /dev/null +++ b/app/validators/language_validator.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +class LanguageValidator < ActiveModel::EachValidator + include LanguagesHelper + + def validate_each(record, attribute, value) + record.errors.add(attribute, :invalid) unless valid?(value) + end + + private + + def valid?(str) + if str.nil? + true + elsif str.is_a?(Array) + str.all? { |x| valid_locale?(x) } + else + valid_locale?(str) + end + end +end diff --git a/app/workers/refollow_worker.rb b/app/workers/refollow_worker.rb index 319b001097b..4b712d3aaeb 100644 --- a/app/workers/refollow_worker.rb +++ b/app/workers/refollow_worker.rb @@ -10,8 +10,9 @@ class RefollowWorker return unless target_account.activitypub? target_account.passive_relationships.where(account: Account.where(domain: nil)).includes(:account).reorder(nil).find_each do |follow| - reblogs = follow.show_reblogs? - notify = follow.notify? + reblogs = follow.show_reblogs? + notify = follow.notify? + languages = follow.languages # Locally unfollow remote account follower = follow.account @@ -19,7 +20,7 @@ class RefollowWorker # Schedule re-follow begin - FollowService.new.call(follower, target_account, reblogs: reblogs, notify: notify, bypass_limit: true) + FollowService.new.call(follower, target_account, reblogs: reblogs, notify: notify, languages: languages, bypass_limit: true) rescue Mastodon::NotPermittedError, ActiveRecord::RecordNotFound, Mastodon::UnexpectedResponseError, HTTP::Error, OpenSSL::SSL::SSLError next end diff --git a/app/workers/unfollow_follow_worker.rb b/app/workers/unfollow_follow_worker.rb index 0bd5ff472e8..7203b4888f8 100644 --- a/app/workers/unfollow_follow_worker.rb +++ b/app/workers/unfollow_follow_worker.rb @@ -10,11 +10,12 @@ class UnfollowFollowWorker old_target_account = Account.find(old_target_account_id) new_target_account = Account.find(new_target_account_id) - follow = follower_account.active_relationships.find_by(target_account: old_target_account) - reblogs = follow&.show_reblogs? - notify = follow&.notify? + follow = follower_account.active_relationships.find_by(target_account: old_target_account) + reblogs = follow&.show_reblogs? + notify = follow&.notify? + languages = follow&.languages - FollowService.new.call(follower_account, new_target_account, reblogs: reblogs, notify: notify, bypass_locked: bypass_locked, bypass_limit: true) + FollowService.new.call(follower_account, new_target_account, reblogs: reblogs, notify: notify, languages: languages, bypass_locked: bypass_locked, bypass_limit: true) UnfollowService.new.call(follower_account, old_target_account, skip_unmerge: true) rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError true diff --git a/db/migrate/20220829192633_add_languages_to_follows.rb b/db/migrate/20220829192633_add_languages_to_follows.rb new file mode 100644 index 00000000000..f6cf48880ac --- /dev/null +++ b/db/migrate/20220829192633_add_languages_to_follows.rb @@ -0,0 +1,5 @@ +class AddLanguagesToFollows < ActiveRecord::Migration[6.1] + def change + add_column :follows, :languages, :string, array: true + end +end diff --git a/db/migrate/20220829192658_add_languages_to_follow_requests.rb b/db/migrate/20220829192658_add_languages_to_follow_requests.rb new file mode 100644 index 00000000000..f98fabb220a --- /dev/null +++ b/db/migrate/20220829192658_add_languages_to_follow_requests.rb @@ -0,0 +1,5 @@ +class AddLanguagesToFollowRequests < ActiveRecord::Migration[6.1] + def change + add_column :follow_requests, :languages, :string, array: true + end +end diff --git a/db/schema.rb b/db/schema.rb index db22f538a76..1a98b22dba9 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2022_08_27_195229) do +ActiveRecord::Schema.define(version: 2022_08_29_192658) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -461,6 +461,7 @@ ActiveRecord::Schema.define(version: 2022_08_27_195229) do t.boolean "show_reblogs", default: true, null: false t.string "uri" t.boolean "notify", default: false, null: false + t.string "languages", array: true t.index ["account_id", "target_account_id"], name: "index_follow_requests_on_account_id_and_target_account_id", unique: true end @@ -472,6 +473,7 @@ ActiveRecord::Schema.define(version: 2022_08_27_195229) do t.boolean "show_reblogs", default: true, null: false t.string "uri" t.boolean "notify", default: false, null: false + t.string "languages", array: true t.index ["account_id", "target_account_id"], name: "index_follows_on_account_id_and_target_account_id", unique: true t.index ["target_account_id"], name: "index_follows_on_target_account_id" end diff --git a/spec/controllers/api/v1/accounts_controller_spec.rb b/spec/controllers/api/v1/accounts_controller_spec.rb index 5d5c245c50f..d6bbcefd770 100644 --- a/spec/controllers/api/v1/accounts_controller_spec.rb +++ b/spec/controllers/api/v1/accounts_controller_spec.rb @@ -145,6 +145,17 @@ RSpec.describe Api::V1::AccountsController, type: :controller do expect(json[:showing_reblogs]).to be false expect(json[:notifying]).to be true end + + it 'changes languages option' do + post :follow, params: { id: other_account.id, languages: %w(en es) } + + json = body_as_json + + expect(json[:following]).to be true + expect(json[:showing_reblogs]).to be false + expect(json[:notifying]).to be false + expect(json[:languages]).to match_array %w(en es) + end end end diff --git a/spec/controllers/settings/exports/following_accounts_controller_spec.rb b/spec/controllers/settings/exports/following_accounts_controller_spec.rb index 78858e7725b..bfe01055568 100644 --- a/spec/controllers/settings/exports/following_accounts_controller_spec.rb +++ b/spec/controllers/settings/exports/following_accounts_controller_spec.rb @@ -11,7 +11,7 @@ describe Settings::Exports::FollowingAccountsController do sign_in user, scope: :user get :index, format: :csv - expect(response.body).to eq "Account address,Show boosts\nusername@domain,true\n" + expect(response.body).to eq "Account address,Show boosts,Notify on new posts,Languages\nusername@domain,true,false,\n" end end end diff --git a/spec/lib/feed_manager_spec.rb b/spec/lib/feed_manager_spec.rb index 48c57b86e11..0f3b05e5a59 100644 --- a/spec/lib/feed_manager_spec.rb +++ b/spec/lib/feed_manager_spec.rb @@ -127,6 +127,18 @@ RSpec.describe FeedManager do reblog = Fabricate(:status, reblog: status, account: jeff) expect(FeedManager.instance.filter?(:home, reblog, alice)).to be true end + + it 'returns true for German post when follow is set to English only' do + alice.follow!(bob, languages: %w(en)) + status = Fabricate(:status, text: 'Hallo Welt', account: bob, language: 'de') + expect(FeedManager.instance.filter?(:home, status, alice)).to be true + end + + it 'returns false for German post when follow is set to German' do + alice.follow!(bob, languages: %w(de)) + status = Fabricate(:status, text: 'Hallo Welt', account: bob, language: 'de') + expect(FeedManager.instance.filter?(:home, status, alice)).to be false + end end context 'for mentions feed' do diff --git a/spec/models/concerns/account_interactions_spec.rb b/spec/models/concerns/account_interactions_spec.rb index 0369aff1049..1d1898ab0ca 100644 --- a/spec/models/concerns/account_interactions_spec.rb +++ b/spec/models/concerns/account_interactions_spec.rb @@ -14,7 +14,7 @@ describe AccountInteractions do context 'account with Follow' do it 'returns { target_account_id => true }' do Fabricate(:follow, account: account, target_account: target_account) - is_expected.to eq(target_account_id => { reblogs: true, notify: false }) + is_expected.to eq(target_account_id => { reblogs: true, notify: false, languages: nil }) end end diff --git a/spec/models/export_spec.rb b/spec/models/export_spec.rb index 4e6b824bbe4..135d7a36ba6 100644 --- a/spec/models/export_spec.rb +++ b/spec/models/export_spec.rb @@ -35,8 +35,8 @@ describe Export do results = export.strip.split("\n") expect(results.size).to eq 3 - expect(results.first).to eq 'Account address,Show boosts' - expect(results.second).to eq 'one@local.host,true' + expect(results.first).to eq 'Account address,Show boosts,Notify on new posts,Languages' + expect(results.second).to eq 'one@local.host,true,false,' end end diff --git a/spec/models/follow_request_spec.rb b/spec/models/follow_request_spec.rb index 36ce8ee60b1..901eabc9df4 100644 --- a/spec/models/follow_request_spec.rb +++ b/spec/models/follow_request_spec.rb @@ -7,7 +7,7 @@ RSpec.describe FollowRequest, type: :model do let(:target_account) { Fabricate(:account) } it 'calls Account#follow!, MergeWorker.perform_async, and #destroy!' do - expect(account).to receive(:follow!).with(target_account, reblogs: true, notify: false, uri: follow_request.uri, bypass_limit: true) + expect(account).to receive(:follow!).with(target_account, reblogs: true, notify: false, uri: follow_request.uri, languages: nil, bypass_limit: true) expect(MergeWorker).to receive(:perform_async).with(target_account.id, account.id) expect(follow_request).to receive(:destroy!) follow_request.authorize! diff --git a/spec/services/follow_service_spec.rb b/spec/services/follow_service_spec.rb index 02bc87c58d9..88346ec54af 100644 --- a/spec/services/follow_service_spec.rb +++ b/spec/services/follow_service_spec.rb @@ -121,6 +121,19 @@ RSpec.describe FollowService, type: :service do expect(sender.muting_reblogs?(bob)).to be false end end + + describe 'already followed account, changing languages' do + let(:bob) { Fabricate(:account, username: 'bob') } + + before do + sender.follow!(bob) + subject.call(sender, bob, languages: %w(en es)) + end + + it 'changes languages' do + expect(Follow.find_by(account: sender, target_account: bob)&.languages).to match_array %w(en es) + end + end end context 'remote ActivityPub account' do diff --git a/spec/workers/refollow_worker_spec.rb b/spec/workers/refollow_worker_spec.rb index df6731b6400..d9c2293b622 100644 --- a/spec/workers/refollow_worker_spec.rb +++ b/spec/workers/refollow_worker_spec.rb @@ -23,8 +23,8 @@ describe RefollowWorker do result = subject.perform(account.id) expect(result).to be_nil - expect(service).to have_received(:call).with(alice, account, reblogs: true, notify: false, bypass_limit: true) - expect(service).to have_received(:call).with(bob, account, reblogs: false, notify: false, bypass_limit: true) + expect(service).to have_received(:call).with(alice, account, reblogs: true, notify: false, languages: nil, bypass_limit: true) + expect(service).to have_received(:call).with(bob, account, reblogs: false, notify: false, languages: nil, bypass_limit: true) end end end From 8e25e6c3a8d91bd536a7442bdf93bb1dbf7025a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Sep 2022 10:50:49 +0900 Subject: [PATCH 302/646] Bump @babel/core from 7.19.0 to 7.19.1 (#19199) Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.19.0 to 7.19.1. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.19.1/packages/babel-core) --- updated-dependencies: - dependency-name: "@babel/core" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 108 ++++++++++++++++++++++++++++----------------------- 2 files changed, 61 insertions(+), 49 deletions(-) diff --git a/package.json b/package.json index b57108c04f2..caea3454a72 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ }, "private": true, "dependencies": { - "@babel/core": "^7.19.0", + "@babel/core": "^7.19.1", "@babel/plugin-proposal-decorators": "^7.19.0", "@babel/plugin-transform-react-inline-elements": "^7.18.6", "@babel/plugin-transform-runtime": "^7.18.10", diff --git a/yarn.lock b/yarn.lock index 04837a50ceb..76a99d06589 100644 --- a/yarn.lock +++ b/yarn.lock @@ -42,20 +42,25 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.0.tgz#2a592fd89bacb1fcde68de31bee4f2f2dacb0e86" integrity sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw== -"@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.19.0", "@babel/core@^7.7.2": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.0.tgz#d2f5f4f2033c00de8096be3c9f45772563e150c3" - integrity sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ== +"@babel/compat-data@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.1.tgz#72d647b4ff6a4f82878d184613353af1dd0290f9" + integrity sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg== + +"@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.19.1", "@babel/core@^7.7.2": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.1.tgz#c8fa615c5e88e272564ace3d42fbc8b17bfeb22b" + integrity sha512-1H8VgqXme4UXCRv7/Wa1bq7RVymKOzC7znjyFM8KiEzwFqcKUKYNoQef4GhdklgNvoBXyW4gYhuBNCM5o1zImw== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" "@babel/generator" "^7.19.0" - "@babel/helper-compilation-targets" "^7.19.0" + "@babel/helper-compilation-targets" "^7.19.1" "@babel/helper-module-transforms" "^7.19.0" "@babel/helpers" "^7.19.0" - "@babel/parser" "^7.19.0" + "@babel/parser" "^7.19.1" "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" + "@babel/traverse" "^7.19.1" "@babel/types" "^7.19.0" convert-source-map "^1.7.0" debug "^4.1.0" @@ -104,14 +109,14 @@ "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz#537ec8339d53e806ed422f1e06c8f17d55b96bb0" - integrity sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA== +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.0", "@babel/helper-compilation-targets@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.1.tgz#7f630911d83b408b76fe584831c98e5395d7a17c" + integrity sha512-LlLkkqhCMyz2lkQPvJNdIYU7O5YjWRgC2R4omjCTpZd8u8KMQzZvX4qce+/BluN1rcQiV7BoGUpmQ0LeHerbhg== dependencies: - "@babel/compat-data" "^7.19.0" + "@babel/compat-data" "^7.19.1" "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.20.2" + browserslist "^4.21.3" semver "^6.3.0" "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.19.0": @@ -369,10 +374,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.0.tgz#497fcafb1d5b61376959c1c338745ef0577aa02c" - integrity sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.1.tgz#6f6d6c2e621aad19a92544cc217ed13f1aac5b4c" + integrity sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" @@ -1118,10 +1123,10 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.19.0", "@babel/traverse@^7.7.2": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.0.tgz#eb9c561c7360005c592cc645abafe0c3c4548eed" - integrity sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA== +"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.7.2": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.1.tgz#0fafe100a8c2a603b4718b1d9bf2568d1d193347" + integrity sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA== dependencies: "@babel/code-frame" "^7.18.6" "@babel/generator" "^7.19.0" @@ -1129,7 +1134,7 @@ "@babel/helper-function-name" "^7.19.0" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.19.0" + "@babel/parser" "^7.19.1" "@babel/types" "^7.19.0" debug "^4.1.0" globals "^11.1.0" @@ -3018,17 +3023,6 @@ browserslist@^4.0.0, browserslist@^4.12.0: escalade "^3.1.1" node-releases "^1.1.71" -browserslist@^4.20.2: - version "4.20.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.3.tgz#eb7572f49ec430e054f56d52ff0ebe9be915f8bf" - integrity sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg== - dependencies: - caniuse-lite "^1.0.30001332" - electron-to-chromium "^1.4.118" - escalade "^3.1.1" - node-releases "^2.0.3" - picocolors "^1.0.0" - browserslist@^4.21.0: version "4.21.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.0.tgz#7ab19572361a140ecd1e023e2c1ed95edda0cefe" @@ -3039,6 +3033,16 @@ browserslist@^4.21.0: node-releases "^2.0.5" update-browserslist-db "^1.0.0" +browserslist@^4.21.3: + version "4.21.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" + integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== + dependencies: + caniuse-lite "^1.0.30001400" + electron-to-chromium "^1.4.251" + node-releases "^2.0.6" + update-browserslist-db "^1.0.9" + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -3227,16 +3231,16 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001310.tgz#da02cd07432c9eece6992689d1b84ca18139eea8" integrity sha512-cb9xTV8k9HTIUA3GnPUJCk0meUnrHL5gy5QePfDjxHyNBcnzPzrHFv5GqfP7ue5b1ZyzZL0RJboD6hQlPXjhjg== -caniuse-lite@^1.0.30001332: - version "1.0.30001335" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001335.tgz#899254a0b70579e5a957c32dced79f0727c61f2a" - integrity sha512-ddP1Tgm7z2iIxu6QTtbZUv6HJxSaV/PZeSrWFZtbY4JZ69tOeNhBCl3HyRQgeNZKE5AOn1kpV7fhljigy0Ty3w== - caniuse-lite@^1.0.30001358: version "1.0.30001359" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz#a1c1cbe1c2da9e689638813618b4219acbd4925e" integrity sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw== +caniuse-lite@^1.0.30001400: + version "1.0.30001406" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001406.tgz#d0146e7919635479f873b4507517b627f66ab269" + integrity sha512-bWTlaXUy/rq0BBtYShc/jArYfBPjEV95euvZ8JVtO43oQExEN/WquoqpufFjNu4kSpi5cy5kMbNvzztWDfv1Jg== + chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -4360,16 +4364,16 @@ electron-to-chromium@^1.3.723: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.736.tgz#f632d900a1f788dab22fec9c62ec5c9c8f0c4052" integrity sha512-DY8dA7gR51MSo66DqitEQoUMQ0Z+A2DSXFi7tK304bdTVqczCAfUuyQw6Wdg8hIoo5zIxkU1L24RQtUce1Ioig== -electron-to-chromium@^1.4.118: - version "1.4.129" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.129.tgz#c675793885721beefff99da50f57c6525c2cd238" - integrity sha512-GgtN6bsDtHdtXJtlMYZWGB/uOyjZWjmRDumXTas7dGBaB9zUyCjzHet1DY2KhyHN8R0GLbzZWqm4efeddqqyRQ== - electron-to-chromium@^1.4.164: version "1.4.170" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.170.tgz#0415fc489402e09bfbe1f0c99bbf4d73f31d48d4" integrity sha512-rZ8PZLhK4ORPjFqLp9aqC4/S1j4qWFsPPz13xmWdrbBkU/LlxMcok+f+6f8YnQ57MiZwKtOaW15biZZsY5Igvw== +electron-to-chromium@^1.4.251: + version "1.4.254" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.254.tgz#c6203583890abf88dfc0be046cd72d3b48f8beb6" + integrity sha512-Sh/7YsHqQYkA6ZHuHMy24e6TE4eX6KZVsZb9E/DvU1nQRIrH4BflO/4k+83tfdYvDl+MObvlqHPRICzEdC9c6Q== + elliptic@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -7852,16 +7856,16 @@ node-releases@^1.1.71: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== -node-releases@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.4.tgz#f38252370c43854dc48aa431c766c6c398f40476" - integrity sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ== - node-releases@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666" integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q== +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -11347,6 +11351,14 @@ update-browserslist-db@^1.0.0: escalade "^3.1.1" picocolors "^1.0.0" +update-browserslist-db@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz#2924d3927367a38d5c555413a7ce138fc95fcb18" + integrity sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + uri-js@^4.2.2: version "4.4.0" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" From 665582d93e5b7b828c79c58e99e27d72155c99bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Sep 2022 10:51:20 +0900 Subject: [PATCH 303/646] Bump @babel/eslint-parser from 7.18.9 to 7.19.1 (#19193) Bumps [@babel/eslint-parser](https://github.com/babel/babel/tree/HEAD/eslint/babel-eslint-parser) from 7.18.9 to 7.19.1. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.19.1/eslint/babel-eslint-parser) --- updated-dependencies: - dependency-name: "@babel/eslint-parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 33 ++++++++++++++++++++------------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index caea3454a72..058c2461513 100644 --- a/package.json +++ b/package.json @@ -144,7 +144,7 @@ "ws": "^8.8.1" }, "devDependencies": { - "@babel/eslint-parser": "^7.18.9", + "@babel/eslint-parser": "^7.19.1", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^12.1.5", "babel-jest": "^29.0.3", diff --git a/yarn.lock b/yarn.lock index 76a99d06589..c10e3ae5170 100644 --- a/yarn.lock +++ b/yarn.lock @@ -68,12 +68,12 @@ json5 "^2.2.1" semver "^6.3.0" -"@babel/eslint-parser@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz#255a63796819a97b7578751bb08ab9f2a375a031" - integrity sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ== +"@babel/eslint-parser@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz#4f68f6b0825489e00a24b41b6a1ae35414ecd2f4" + integrity sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ== dependencies: - eslint-scope "^5.1.1" + "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" semver "^6.3.0" @@ -1583,6 +1583,13 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": + version "5.1.1-v1" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" + integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== + dependencies: + eslint-scope "5.1.1" + "@node-redis/bloom@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@node-redis/bloom/-/bloom-1.0.1.tgz#144474a0b7dc4a4b91badea2cfa9538ce0a1854e" @@ -4696,6 +4703,14 @@ eslint-plugin-react@~7.31.8: semver "^6.3.0" string.prototype.matchall "^4.0.7" +eslint-scope@5.1.1, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -4704,14 +4719,6 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - eslint-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" From 0f24ef4673eee301de6049704b4c42e751553b57 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Sep 2022 11:05:25 +0900 Subject: [PATCH 304/646] Bump @babel/plugin-transform-runtime from 7.18.10 to 7.19.1 (#19203) Bumps [@babel/plugin-transform-runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-runtime) from 7.18.10 to 7.19.1. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.19.1/packages/babel-plugin-transform-runtime) --- updated-dependencies: - dependency-name: "@babel/plugin-transform-runtime" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 76 +++++++++++++++++++++++++++++++++------------------- 2 files changed, 49 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index 058c2461513..b215c860d58 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@babel/core": "^7.19.1", "@babel/plugin-proposal-decorators": "^7.19.0", "@babel/plugin-transform-react-inline-elements": "^7.18.6", - "@babel/plugin-transform-runtime": "^7.18.10", + "@babel/plugin-transform-runtime": "^7.19.1", "@babel/preset-env": "^7.19.0", "@babel/preset-react": "^7.18.6", "@babel/runtime": "^7.19.0", diff --git a/yarn.lock b/yarn.lock index c10e3ae5170..f417354f497 100644 --- a/yarn.lock +++ b/yarn.lock @@ -160,6 +160,18 @@ resolve "^1.14.2" semver "^6.1.2" +"@babel/helper-define-polyfill-provider@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" + integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + "@babel/helper-environment-visitor@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz#b7eee2b5b9d70602e59d1a6cad7dd24de7ca6cd7" @@ -215,14 +227,7 @@ dependencies: "@babel/types" "^7.18.9" -"@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-imports@^7.18.6": +"@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== @@ -925,16 +930,16 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-runtime@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz#37d14d1fa810a368fd635d4d1476c0154144a96f" - integrity sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ== +"@babel/plugin-transform-runtime@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.1.tgz#a3df2d7312eea624c7889a2dcd37fd1dfd25b2c6" + integrity sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA== dependencies: "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.9" - babel-plugin-polyfill-corejs2 "^0.3.2" - babel-plugin-polyfill-corejs3 "^0.5.3" - babel-plugin-polyfill-regenerator "^0.4.0" + "@babel/helper-plugin-utils" "^7.19.0" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" semver "^6.3.0" "@babel/plugin-transform-shorthand-properties@^7.18.6": @@ -1139,7 +1144,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.16.7", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.0.tgz#75f21d73d73dc0351f3368d28db73465f4814600" integrity sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA== @@ -2710,13 +2715,13 @@ babel-plugin-macros@^3.0.1: cosmiconfig "^7.0.0" resolve "^1.19.0" -babel-plugin-polyfill-corejs2@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz#e4c31d4c89b56f3cf85b92558954c66b54bd972d" - integrity sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q== +babel-plugin-polyfill-corejs2@^0.3.2, babel-plugin-polyfill-corejs2@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" + integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== dependencies: "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.3.2" + "@babel/helper-define-polyfill-provider" "^0.3.3" semver "^6.1.1" babel-plugin-polyfill-corejs3@^0.5.3: @@ -2727,12 +2732,20 @@ babel-plugin-polyfill-corejs3@^0.5.3: "@babel/helper-define-polyfill-provider" "^0.3.2" core-js-compat "^3.21.0" -babel-plugin-polyfill-regenerator@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz#8f51809b6d5883e07e71548d75966ff7635527fe" - integrity sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw== +babel-plugin-polyfill-corejs3@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" + integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.2" + "@babel/helper-define-polyfill-provider" "^0.3.3" + core-js-compat "^3.25.1" + +babel-plugin-polyfill-regenerator@^0.4.0, babel-plugin-polyfill-regenerator@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" + integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" babel-plugin-preval@^5.1.0: version "5.1.0" @@ -3040,7 +3053,7 @@ browserslist@^4.21.0: node-releases "^2.0.5" update-browserslist-db "^1.0.0" -browserslist@^4.21.3: +browserslist@^4.21.3, browserslist@^4.21.4: version "4.21.4" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== @@ -3654,6 +3667,13 @@ core-js-compat@^3.21.0, core-js-compat@^3.22.1: browserslist "^4.21.0" semver "7.0.0" +core-js-compat@^3.25.1: + version "3.25.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.25.2.tgz#7875573586809909c69e03ef310810c1969ee138" + integrity sha512-TxfyECD4smdn3/CjWxczVtJqVLEEC2up7/82t7vC0AzNogr+4nQ8vyF7abxAuTXWvjTClSbvGhU0RgqA4ToQaQ== + dependencies: + browserslist "^4.21.4" + core-js-pure@^3.0.0: version "3.6.5" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" From 195087bee0aaf52e8c0ddf89dfa8269cf5057a74 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Sep 2022 11:05:44 +0900 Subject: [PATCH 305/646] Bump @babel/plugin-proposal-decorators from 7.19.0 to 7.19.1 (#19196) Bumps [@babel/plugin-proposal-decorators](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-proposal-decorators) from 7.19.0 to 7.19.1. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.19.1/packages/babel-plugin-proposal-decorators) --- updated-dependencies: - dependency-name: "@babel/plugin-proposal-decorators" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index b215c860d58..5a603d72381 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "private": true, "dependencies": { "@babel/core": "^7.19.1", - "@babel/plugin-proposal-decorators": "^7.19.0", + "@babel/plugin-proposal-decorators": "^7.19.1", "@babel/plugin-transform-react-inline-elements": "^7.18.6", "@babel/plugin-transform-runtime": "^7.19.1", "@babel/preset-env": "^7.19.0", diff --git a/yarn.lock b/yarn.lock index f417354f497..e16166482de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -280,16 +280,16 @@ "@babel/helper-wrap-function" "^7.18.9" "@babel/types" "^7.18.9" -"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz#1092e002feca980fbbb0bd4d51b74a65c6a500e6" - integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ== +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9", "@babel/helper-replace-supers@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz#e1592a9b4b368aa6bdb8784a711e0bcbf0612b78" + integrity sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw== dependencies: "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-member-expression-to-functions" "^7.18.9" "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" + "@babel/traverse" "^7.19.1" + "@babel/types" "^7.19.0" "@babel/helper-simple-access@^7.18.6": version "7.18.6" @@ -427,14 +427,14 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-decorators@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.19.0.tgz#5a3bc0699ee34117c73c960a5396ffce104c4eaa" - integrity sha512-Bo5nOSjiJccjv00+BrDkmfeBLBi2B0qe8ygj24KdL8VdwtZz+710NCwehF+x/Ng+0mkHx5za2eAofmvVFLF4Fg== +"@babel/plugin-proposal-decorators@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.19.1.tgz#4bab3e7afe894fdbf47ffa86701266104fcb6ecc" + integrity sha512-LfIKNBBY7Q1OX5C4xAgRQffOg2OnhAo9fnbcOHgOC9Yytm2Sw+4XqHufRYU86tHomzepxtvuVaNO+3EVKR4ivw== dependencies: "@babel/helper-create-class-features-plugin" "^7.19.0" "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-replace-supers" "^7.19.1" "@babel/helper-split-export-declaration" "^7.18.6" "@babel/plugin-syntax-decorators" "^7.19.0" @@ -1128,7 +1128,7 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.7.2": +"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.6", "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.7.2": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.1.tgz#0fafe100a8c2a603b4718b1d9bf2568d1d193347" integrity sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA== From 7191db0e434ba84edfa18de05b1133ac9e924ded Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 21 Sep 2022 04:10:02 +0200 Subject: [PATCH 306/646] New Crowdin updates (#19167) * New translations en.json (Esperanto) * New translations en.json (Esperanto) * New translations en.json (Czech) * New translations en.yml (Czech) * New translations en.json (Czech) * New translations en.yml (Spanish) * New translations en.yml (Turkish) * New translations en.json (Thai) * New translations en.json (Thai) * New translations en.json (Dutch) * New translations en.yml (Czech) * New translations simple_form.en.yml (Czech) * New translations activerecord.en.yml (Czech) * New translations en.json (Thai) * New translations en.yml (Czech) * New translations en.json (Albanian) * New translations en.yml (Albanian) * New translations simple_form.en.yml (Albanian) * New translations activerecord.en.yml (Albanian) * New translations devise.en.yml (Albanian) * New translations doorkeeper.en.yml (Albanian) * New translations en.json (Thai) * New translations en.yml (Thai) * New translations en.yml (Ukrainian) * New translations en.yml (Thai) * New translations en.json (Thai) * New translations en.yml (Thai) * New translations en.json (Bulgarian) * New translations en.json (Bulgarian) * New translations en.yml (Thai) * New translations en.json (Japanese) * New translations en.json (Indonesian) * New translations en.json (Sinhala) * New translations en.json (Sinhala) * New translations en.json (Sinhala) * New translations en.json (Sinhala) * New translations en.json (Sinhala) * New translations en.yml (Greek) * New translations en.yml (Afrikaans) * New translations en.json (Arabic) * New translations en.yml (Arabic) * New translations en.yml (Bulgarian) * New translations en.json (Catalan) * New translations en.yml (Catalan) * New translations en.yml (Danish) * New translations en.json (Greek) * New translations en.json (Frisian) * New translations en.yml (Frisian) * New translations en.json (Basque) * New translations en.yml (Basque) * New translations en.yml (Finnish) * New translations en.json (Irish) * New translations en.yml (Irish) * New translations en.yml (Hebrew) * New translations en.yml (Hungarian) * New translations en.json (Afrikaans) * New translations en.yml (French) * New translations en.json (Hebrew) * New translations en.json (French) * New translations en.yml (German) * New translations en.yml (Chinese Simplified) * New translations en.json (Tamil) * New translations en.json (Dutch) * New translations en.json (Romanian) * New translations en.yml (Romanian) * New translations en.json (Armenian) * New translations en.json (Ido) * New translations en.yml (Ido) * New translations en.yml (Armenian) * New translations en.json (Urdu (Pakistan)) * New translations en.json (Serbian (Cyrillic)) * New translations en.yml (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.yml (Swedish) * New translations en.yml (Chinese Traditional) * New translations en.yml (Urdu (Pakistan)) * New translations en.yml (Vietnamese) * New translations en.yml (Galician) * New translations en.yml (Icelandic) * New translations en.json (Portuguese, Brazilian) * New translations en.yml (Portuguese, Brazilian) * New translations en.yml (Indonesian) * New translations en.json (Persian) * New translations en.yml (Slovenian) * New translations en.yml (Slovak) * New translations en.yml (Dutch) * New translations en.yml (Italian) * New translations en.yml (Japanese) * New translations en.json (Georgian) * New translations en.yml (Georgian) * New translations en.yml (Korean) * New translations en.json (Lithuanian) * New translations en.yml (Lithuanian) * New translations en.json (Macedonian) * New translations en.yml (Macedonian) * New translations simple_form.en.yml (Dutch) * New translations en.json (Slovak) * New translations en.json (Norwegian) * New translations en.yml (Norwegian) * New translations en.json (Punjabi) * New translations en.yml (Punjabi) * New translations en.yml (Polish) * New translations en.yml (Portuguese) * New translations en.yml (Russian) * New translations en.yml (Persian) * New translations en.yml (Tamil) * New translations en.json (Estonian) * New translations en.yml (English, United Kingdom) * New translations en.yml (Telugu) * New translations en.json (Telugu) * New translations en.yml (Malay) * New translations en.json (Malay) * New translations en.yml (Hindi) * New translations en.json (Hindi) * New translations en.yml (Latvian) * New translations en.yml (Estonian) * New translations en.json (English, United Kingdom) * New translations en.yml (Kazakh) * New translations en.yml (Bengali) * New translations en.json (Kazakh) * New translations en.yml (Spanish, Argentina) * New translations en.yml (Spanish, Mexico) * New translations en.json (Bengali) * New translations en.json (Spanish, Mexico) * New translations en.json (Marathi) * New translations en.yml (Marathi) * New translations en.json (Croatian) * New translations en.yml (Croatian) * New translations en.json (Norwegian Nynorsk) * New translations en.yml (Norwegian Nynorsk) * New translations en.yml (Breton) * New translations en.yml (Asturian) * New translations en.json (Asturian) * New translations en.yml (Scottish Gaelic) * New translations en.json (Scottish Gaelic) * New translations en.yml (Kannada) * New translations en.json (Kannada) * New translations en.yml (Cornish) * New translations en.json (Cornish) * New translations en.yml (Sinhala) * New translations en.json (Chinese Traditional, Hong Kong) * New translations en.json (Breton) * New translations en.yml (Malayalam) * New translations en.json (Malayalam) * New translations en.yml (Tatar) * New translations en.json (Tatar) * New translations en.yml (Chinese Traditional, Hong Kong) * New translations en.yml (Uyghur) * New translations en.json (Uyghur) * New translations en.yml (Esperanto) * New translations en.yml (Welsh) * New translations en.json (Welsh) * New translations en.json (Occitan) * New translations en.yml (Occitan) * New translations en.json (Sanskrit) * New translations en.json (Standard Moroccan Tamazight) * New translations en.yml (Silesian) * New translations en.json (Silesian) * New translations en.yml (Taigi) * New translations en.json (Taigi) * New translations en.yml (Kabyle) * New translations en.json (Kabyle) * New translations en.yml (Sanskrit) * New translations en.yml (Sardinian) * New translations en.json (Serbian (Latin)) * New translations en.json (Sardinian) * New translations en.yml (Corsican) * New translations en.json (Corsican) * New translations en.yml (Sorani (Kurdish)) * New translations en.json (Sorani (Kurdish)) * New translations en.yml (Kurmanji (Kurdish)) * New translations en.yml (Serbian (Latin)) * New translations en.yml (Standard Moroccan Tamazight) * New translations en.json (Dutch) * New translations en.json (Danish) * New translations en.json (Korean) * New translations en.yml (Dutch) * New translations en.json (Spanish, Argentina) * Run `yarn manage:translations` * Run `bundle exec i18n-tasks normalize` Co-authored-by: Yamagishi Kazutoshi --- app/javascript/mastodon/locales/af.json | 4 + app/javascript/mastodon/locales/ar.json | 4 + app/javascript/mastodon/locales/ast.json | 4 + app/javascript/mastodon/locales/bg.json | 116 ++++---- app/javascript/mastodon/locales/bn.json | 4 + app/javascript/mastodon/locales/br.json | 4 + app/javascript/mastodon/locales/ca.json | 4 + app/javascript/mastodon/locales/ckb.json | 4 + app/javascript/mastodon/locales/co.json | 4 + app/javascript/mastodon/locales/cs.json | 44 +-- app/javascript/mastodon/locales/cy.json | 4 + app/javascript/mastodon/locales/da.json | 4 + app/javascript/mastodon/locales/de.json | 4 + app/javascript/mastodon/locales/el.json | 4 + app/javascript/mastodon/locales/en-GB.json | 4 + app/javascript/mastodon/locales/eo.json | 20 +- app/javascript/mastodon/locales/es-AR.json | 4 + app/javascript/mastodon/locales/es-MX.json | 38 +-- app/javascript/mastodon/locales/es.json | 4 + app/javascript/mastodon/locales/et.json | 4 + app/javascript/mastodon/locales/eu.json | 4 + app/javascript/mastodon/locales/fa.json | 4 + app/javascript/mastodon/locales/fi.json | 4 + app/javascript/mastodon/locales/fr.json | 4 + app/javascript/mastodon/locales/fy.json | 4 + app/javascript/mastodon/locales/ga.json | 4 + app/javascript/mastodon/locales/gd.json | 4 + app/javascript/mastodon/locales/gl.json | 4 + app/javascript/mastodon/locales/he.json | 4 + app/javascript/mastodon/locales/hi.json | 4 + app/javascript/mastodon/locales/hr.json | 4 + app/javascript/mastodon/locales/hu.json | 4 + app/javascript/mastodon/locales/hy.json | 4 + app/javascript/mastodon/locales/id.json | 8 +- app/javascript/mastodon/locales/io.json | 4 + app/javascript/mastodon/locales/is.json | 4 + app/javascript/mastodon/locales/it.json | 4 + app/javascript/mastodon/locales/ja.json | 26 +- app/javascript/mastodon/locales/ka.json | 4 + app/javascript/mastodon/locales/kab.json | 4 + app/javascript/mastodon/locales/kk.json | 4 + app/javascript/mastodon/locales/kn.json | 4 + app/javascript/mastodon/locales/ko.json | 4 + app/javascript/mastodon/locales/ku.json | 4 + app/javascript/mastodon/locales/kw.json | 4 + app/javascript/mastodon/locales/lt.json | 4 + app/javascript/mastodon/locales/lv.json | 4 + app/javascript/mastodon/locales/mk.json | 4 + app/javascript/mastodon/locales/ml.json | 4 + app/javascript/mastodon/locales/mr.json | 4 + app/javascript/mastodon/locales/ms.json | 4 + app/javascript/mastodon/locales/nl.json | 34 ++- app/javascript/mastodon/locales/nn.json | 4 + app/javascript/mastodon/locales/no.json | 4 + app/javascript/mastodon/locales/oc.json | 4 + app/javascript/mastodon/locales/pa.json | 4 + app/javascript/mastodon/locales/pl.json | 4 + app/javascript/mastodon/locales/pt-BR.json | 4 + app/javascript/mastodon/locales/pt-PT.json | 4 + app/javascript/mastodon/locales/ro.json | 4 + app/javascript/mastodon/locales/ru.json | 4 + app/javascript/mastodon/locales/sa.json | 4 + app/javascript/mastodon/locales/sc.json | 4 + app/javascript/mastodon/locales/si.json | 290 ++++++++++--------- app/javascript/mastodon/locales/sk.json | 4 + app/javascript/mastodon/locales/sl.json | 4 + app/javascript/mastodon/locales/sq.json | 38 +-- app/javascript/mastodon/locales/sr-Latn.json | 4 + app/javascript/mastodon/locales/sr.json | 4 + app/javascript/mastodon/locales/sv.json | 4 + app/javascript/mastodon/locales/szl.json | 4 + app/javascript/mastodon/locales/ta.json | 4 + app/javascript/mastodon/locales/tai.json | 4 + app/javascript/mastodon/locales/te.json | 4 + app/javascript/mastodon/locales/th.json | 12 +- app/javascript/mastodon/locales/tr.json | 4 + app/javascript/mastodon/locales/tt.json | 4 + app/javascript/mastodon/locales/ug.json | 4 + app/javascript/mastodon/locales/uk.json | 4 + app/javascript/mastodon/locales/ur.json | 4 + app/javascript/mastodon/locales/vi.json | 4 + app/javascript/mastodon/locales/zgh.json | 4 + app/javascript/mastodon/locales/zh-CN.json | 4 + app/javascript/mastodon/locales/zh-HK.json | 4 + app/javascript/mastodon/locales/zh-TW.json | 4 + config/locales/activerecord.cs.yml | 2 + config/locales/cs.yml | 24 ++ config/locales/es-MX.yml | 11 +- config/locales/es.yml | 2 +- config/locales/nl.yml | 91 ++++++ config/locales/simple_form.cs.yml | 4 + config/locales/simple_form.nl.yml | 4 + config/locales/simple_form.sq.yml | 3 + config/locales/sq.yml | 46 +++ config/locales/th.yml | 21 ++ config/locales/tr.yml | 2 +- config/locales/uk.yml | 1 + 97 files changed, 841 insertions(+), 296 deletions(-) diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json index 86d59065442..384e6feb2eb 100644 --- a/app/javascript/mastodon/locales/af.json +++ b/app/javascript/mastodon/locales/af.json @@ -24,6 +24,7 @@ "account.follows_you": "Volg jou", "account.hide_reblogs": "Versteek hupstoot vanaf @{name}", "account.joined": "{date} aangesluit", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Eienaarskap van die skakel was getoets op {date}", "account.locked_info": "Die rekening se privaatheidstatus is gesluit. Die eienaar hersien handmatig wie hom/haar kan volg.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 220aa14ee54..65ec25be91f 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -24,6 +24,7 @@ "account.follows_you": "يُتابِعُك", "account.hide_reblogs": "إخفاء مشاركات @{name}", "account.joined": "انضم في {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "تمَّ التَّحقق مِن مِلْكيّة هذا الرابط بتاريخ {date}", "account.locked_info": "تمَّ تعيين حالة خصوصية هذا الحساب إلى مُقفَل. يُراجع المالك يدويًا من يمكنه متابعته.", "account.media": "وسائط", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "غير متوفر", "status.unmute_conversation": "فك الكتم عن المحادثة", "status.unpin": "فك التدبيس من الصفحة التعريفية", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "إلغاء الاقتراح", "suggestions.header": "يمكن أن يهمك…", "tabs_bar.federated_timeline": "الموحَّد", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 50fc3f25ce1..5479563172d 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -24,6 +24,7 @@ "account.follows_you": "Síguete", "account.hide_reblogs": "Anubrir les comparticiones de @{name}", "account.joined": "Joined {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "La propiedá d'esti enllaz foi comprobada'l {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Non disponible", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Desfixar del perfil", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "Quiciabes t'interese…", "tabs_bar.federated_timeline": "Fediversu", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index ebe79503922..4135ff3cfed 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -24,6 +24,7 @@ "account.follows_you": "Твой последовател", "account.hide_reblogs": "Скриване на споделяния от @{name}", "account.joined": "Присъединил се на {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Собствеността върху тази връзка е проверена на {date}", "account.locked_info": "Този акаунт е поверително заключен. Собственикът преглежда ръчно кой може да го следва.", "account.media": "Мултимедия", @@ -41,25 +42,25 @@ "account.statuses_counter": "{count, plural, one {{counter} Публикация} other {{counter} Публикации}}", "account.unblock": "Не блокирай", "account.unblock_domain": "Unhide {domain}", - "account.unblock_short": "Unblock", + "account.unblock_short": "Отблокирай", "account.unendorse": "Не включвайте в профила", "account.unfollow": "Не следвай", "account.unmute": "Раззаглушаване на @{name}", "account.unmute_notifications": "Раззаглушаване на известия от @{name}", "account.unmute_short": "Unmute", "account_note.placeholder": "Click to add a note", - "admin.dashboard.daily_retention": "User retention rate by day after sign-up", - "admin.dashboard.monthly_retention": "User retention rate by month after sign-up", + "admin.dashboard.daily_retention": "Ниво на задържани на потребители след регистрация, в дни", + "admin.dashboard.monthly_retention": "Ниво на задържани на потребители след регистрация, в месеци", "admin.dashboard.retention.average": "Средно", - "admin.dashboard.retention.cohort": "Sign-up month", + "admin.dashboard.retention.cohort": "Месец на регистрацията", "admin.dashboard.retention.cohort_size": "Нови потребители", "alert.rate_limited.message": "Моля, опитайте отново след {retry_time, time, medium}.", "alert.rate_limited.title": "Скоростта е ограничена", "alert.unexpected.message": "Възникна неочаквана грешка.", "alert.unexpected.title": "Опаа!", "announcement.announcement": "Оповестяване", - "attachments_list.unprocessed": "(unprocessed)", - "audio.hide": "Hide audio", + "attachments_list.unprocessed": "(необработен)", + "audio.hide": "Скриване на видеото", "autosuggest_hashtag.per_week": "{count} на седмица", "boost_modal.combo": "Можете да натиснете {combo}, за да пропуснете това следващия път", "bundle_column_error.body": "Нещо се обърка при зареждането на този компонент.", @@ -93,10 +94,10 @@ "community.column_settings.local_only": "Само локално", "community.column_settings.media_only": "Media only", "community.column_settings.remote_only": "Само дистанционно", - "compose.language.change": "Change language", - "compose.language.search": "Search languages...", + "compose.language.change": "Смяна на езика", + "compose.language.search": "Търсене на езици...", "compose_form.direct_message_warning_learn_more": "Още информация", - "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", + "compose_form.encryption_warning": "Поставете в Мастодон не са криптирани от край до край. Не споделяйте никаква чувствителна информация.", "compose_form.hashtag_warning": "Тази публикация няма да бъде изброена под нито един хаштаг, тъй като е скрита. Само публични публикации могат да се търсят по хаштаг.", "compose_form.lock_disclaimer": "Вашият акаунт не е {locked}. Всеки може да ви последва, за да прегледа вашите публикации само за последователи.", "compose_form.lock_disclaimer.lock": "заключено", @@ -107,9 +108,9 @@ "compose_form.poll.remove_option": "Премахване на този избор", "compose_form.poll.switch_to_multiple": "Промяна на анкетата, за да се позволят множество възможни избора", "compose_form.poll.switch_to_single": "Промяна на анкетата, за да се позволи един възможен избор", - "compose_form.publish": "Publish", + "compose_form.publish": "Публикувай", "compose_form.publish_loud": "{publish}!", - "compose_form.save_changes": "Save changes", + "compose_form.save_changes": "Запази промените", "compose_form.sensitive.hide": "{count, plural, one {Маркиране на мултимедията като деликатна} other {Маркиране на мултимедиите като деликатни}}", "compose_form.sensitive.marked": "{count, plural, one {Мултимедията е маркирана като деликатна} other {Мултимедиите са маркирани като деликатни}}", "compose_form.sensitive.unmarked": "{count, plural, one {Мултимедията не е маркирана като деликатна} other {Мултимедиите не са маркирани като деликатни}}", @@ -179,7 +180,7 @@ "empty_column.follow_requests": "Все още нямате заявки за последване. Когато получите такава, тя ще се покаже тук.", "empty_column.hashtag": "В този хаштаг няма нищо все още.", "empty_column.home": "Вашата начална емисия е празна! Посетете {public} или използвайте търсене, за да започнете и да се запознаете с други потребители.", - "empty_column.home.suggestions": "See some suggestions", + "empty_column.home.suggestions": "Виж някои предложения", "empty_column.list": "There is nothing in this list yet.", "empty_column.lists": "Все още нямате списъци. Когато създадете такъв, той ще се покаже тук.", "empty_column.mutes": "Не сте заглушавали потребители все още.", @@ -189,7 +190,7 @@ "error.unexpected_crash.explanation_addons": "Тази страница не може да се покаже правилно. Тази грешка вероятно е причинена от добавка на браузъра или инструменти за автоматичен превод.", "error.unexpected_crash.next_steps": "Опитайте да опресните страницата. Ако това не помогне, все още можете да използвате Mastodon чрез различен браузър или приложение.", "error.unexpected_crash.next_steps_addons": "Опитайте да ги деактивирате и да опресните страницата. Ако това не помогне, може все още да използвате Mastodon чрез различен браузър или приложение.", - "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.copy_stacktrace": "Копиране на stacktrace-а в клипборда", "errors.unexpected_crash.report_issue": "Сигнал за проблем", "explore.search_results": "Резултати от търсенето", "explore.suggested_follows": "За вас", @@ -198,21 +199,21 @@ "explore.trending_statuses": "Публикации", "explore.trending_tags": "Тагове", "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.context_mismatch_title": "Несъвпадение на контекста!", "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.expired_title": "Изтекал филтър!", "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", + "filter_modal.added.review_and_configure_title": "Настройки на филтър", + "filter_modal.added.settings_link": "страница с настройки", "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.title": "Филтърът е добавен!", + "filter_modal.select_filter.context_mismatch": "не е приложимо за този контекст", + "filter_modal.select_filter.expired": "изтекло", + "filter_modal.select_filter.prompt_new": "Нова категория: {name}", + "filter_modal.select_filter.search": "Търси или създай", + "filter_modal.select_filter.subtitle": "Изберете съществуваща категория или създайте нова", + "filter_modal.select_filter.title": "Филтриране на поста", + "filter_modal.title.status": "Филтрирай пост", "follow_recommendations.done": "Готово", "follow_recommendations.heading": "Следвайте хора, които харесвате, за да виждате техните съобщения! Ето някои предложения.", "follow_recommendations.lead": "Съобщения от хора, които следвате, ще се показват в хронологичен ред на вашата главна страница. Не се страхувайте, че ще сгрешите, по всяко време много лесно можете да спрете да ги следвате!", @@ -237,9 +238,9 @@ "hashtag.column_settings.tag_mode.any": "Някое от тези", "hashtag.column_settings.tag_mode.none": "Никое от тези", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "hashtag.follow": "Follow hashtag", - "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.follow": "Следване на хаштаг", + "hashtag.total_volume": "Пълно количество в {days, plural,one {последния ден} other {последните {days} дни}}", + "hashtag.unfollow": "Спиране на следване на хаштаг", "home.column_settings.basic": "Основно", "home.column_settings.show_reblogs": "Показване на споделяния", "home.column_settings.show_replies": "Показване на отговори", @@ -287,8 +288,8 @@ "lightbox.expand": "Разгъване на полето за преглед на изображение", "lightbox.next": "Напред", "lightbox.previous": "Назад", - "limited_account_hint.action": "Show profile anyway", - "limited_account_hint.title": "This profile has been hidden by the moderators of your server.", + "limited_account_hint.action": "Покажи профила въпреки това", + "limited_account_hint.title": "Този профил е скрит от модераторите на сървъра Ви.", "lists.account.add": "Добавяне към списък", "lists.account.remove": "Премахване от списък", "lists.delete": "Изтриване на списък", @@ -315,11 +316,11 @@ "navigation_bar.bookmarks": "Отметки", "navigation_bar.community_timeline": "Локална емисия", "navigation_bar.compose": "Композиране на нова публикация", - "navigation_bar.direct": "Direct messages", + "navigation_bar.direct": "Директни съобщения", "navigation_bar.discover": "Откриване", "navigation_bar.domain_blocks": "Hidden domains", "navigation_bar.edit_profile": "Редактирай профил", - "navigation_bar.explore": "Explore", + "navigation_bar.explore": "Разглеждане", "navigation_bar.favourites": "Любими", "navigation_bar.filters": "Заглушени думи", "navigation_bar.follow_requests": "Заявки за последване", @@ -334,8 +335,8 @@ "navigation_bar.preferences": "Предпочитания", "navigation_bar.public_timeline": "Публичен канал", "navigation_bar.security": "Сигурност", - "notification.admin.report": "{name} reported {target}", - "notification.admin.sign_up": "{name} signed up", + "notification.admin.report": "{name} докладва {target}", + "notification.admin.sign_up": "{name} се регистрира", "notification.favourite": "{name} хареса твоята публикация", "notification.follow": "{name} те последва", "notification.follow_request": "{name} поиска да ви последва", @@ -344,16 +345,16 @@ "notification.poll": "Анкета, в която сте гласували, приключи", "notification.reblog": "{name} сподели твоята публикация", "notification.status": "{name} току-що публикува", - "notification.update": "{name} edited a post", + "notification.update": "{name} промени публикация", "notifications.clear": "Изчистване на известия", "notifications.clear_confirmation": "Сигурни ли сте, че искате да изчистите окончателно всичките си известия?", - "notifications.column_settings.admin.report": "New reports:", - "notifications.column_settings.admin.sign_up": "New sign-ups:", + "notifications.column_settings.admin.report": "Нови доклади:", + "notifications.column_settings.admin.sign_up": "Нови регистрации:", "notifications.column_settings.alert": "Десктоп известия", "notifications.column_settings.favourite": "Предпочитани:", "notifications.column_settings.filter_bar.advanced": "Показване на всички категории", "notifications.column_settings.filter_bar.category": "Лента за бърз филтър", - "notifications.column_settings.filter_bar.show_bar": "Show filter bar", + "notifications.column_settings.filter_bar.show_bar": "Покажи лентата с филтри", "notifications.column_settings.follow": "Нови последователи:", "notifications.column_settings.follow_request": "Нови заявки за последване:", "notifications.column_settings.mention": "Споменавания:", @@ -363,9 +364,9 @@ "notifications.column_settings.show": "Покажи в колона", "notifications.column_settings.sound": "Пускане на звук", "notifications.column_settings.status": "Нови публикации:", - "notifications.column_settings.unread_notifications.category": "Unread notifications", - "notifications.column_settings.unread_notifications.highlight": "Highlight unread notifications", - "notifications.column_settings.update": "Edits:", + "notifications.column_settings.unread_notifications.category": "Непрочетени известия", + "notifications.column_settings.unread_notifications.highlight": "Отбележи непрочетените уведомления", + "notifications.column_settings.update": "Редакции:", "notifications.filter.all": "Всичко", "notifications.filter.boosts": "Споделяния", "notifications.filter.favourites": "Любими", @@ -389,15 +390,15 @@ "poll.total_votes": "{count, plural, one {# глас} other {# гласа}}", "poll.vote": "Гласуване", "poll.voted": "Вие гласувахте за този отговор", - "poll.votes": "{votes, plural, one {# vote} other {# votes}}", + "poll.votes": "{votes, plural, one {# глас} other {# гласа}}", "poll_button.add_poll": "Добавяне на анкета", "poll_button.remove_poll": "Премахване на анкета", "privacy.change": "Adjust status privacy", "privacy.direct.long": "Post to mentioned users only", - "privacy.direct.short": "Direct", + "privacy.direct.short": "Само споменатите хора", "privacy.private.long": "Post to followers only", - "privacy.private.short": "Followers-only", - "privacy.public.long": "Visible for all", + "privacy.private.short": "Само последователи", + "privacy.public.long": "Видимо за всички", "privacy.public.short": "Публично", "privacy.unlisted.long": "Visible for all, but opted-out of discovery features", "privacy.unlisted.short": "Скрито", @@ -468,7 +469,7 @@ "search_results.accounts": "Хора", "search_results.all": "All", "search_results.hashtags": "Хаштагове", - "search_results.nothing_found": "Could not find anything for these search terms", + "search_results.nothing_found": "Не е намерено нищо за това търсене", "search_results.statuses": "Публикации", "search_results.statuses_fts_disabled": "Търсенето на публикации по тяхното съдържание не е активирано за този Mastodon сървър.", "search_results.total": "{count, number} {count, plural, one {резултат} other {резултата}}", @@ -482,16 +483,16 @@ "status.delete": "Изтриване", "status.detailed_status": "Подробен изглед на разговор", "status.direct": "Директно съобщение към @{name}", - "status.edit": "Edit", - "status.edited": "Edited {date}", - "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", + "status.edit": "Редакция", + "status.edited": "Редактирано на {date}", + "status.edited_x_times": "Редактирано {count, plural,one {{count} път} other {{count} пъти}}", "status.embed": "Вграждане", "status.favourite": "Предпочитани", - "status.filter": "Filter this post", + "status.filter": "Филтриране на поста", "status.filtered": "Филтрирано", - "status.hide": "Hide toot", - "status.history.created": "{name} created {date}", - "status.history.edited": "{name} edited {date}", + "status.hide": "Скриване на поста", + "status.history.created": "{name} създаде {date}", + "status.history.edited": "{name} редактира {date}", "status.load_more": "Зареждане на още", "status.media_hidden": "Мултимедията е скрита", "status.mention": "Споменаване", @@ -513,7 +514,7 @@ "status.report": "Докладване на @{name}", "status.sensitive_warning": "Деликатно съдържание", "status.share": "Споделяне", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "Покажи въпреки това", "status.show_less": "Покажи по-малко", "status.show_less_all": "Покажи по-малко за всички", "status.show_more": "Покажи повече", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Не е налично", "status.unmute_conversation": "Раззаглушаване на разговор", "status.unpin": "Разкачане от профил", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Отхвърляне на предложение", "suggestions.header": "Може да се интересувате от…", "tabs_bar.federated_timeline": "Обединен", @@ -550,14 +554,14 @@ "upload_error.poll": "Качването на файлове не е позволено с анкети.", "upload_form.audio_description": "Опишете за хора със загуба на слуха", "upload_form.description": "Опишете за хора със зрителни увреждания", - "upload_form.description_missing": "No description added", + "upload_form.description_missing": "Без добавено описание", "upload_form.edit": "Редакция", "upload_form.thumbnail": "Промяна на миниизображението", "upload_form.undo": "Отмяна", "upload_form.video_description": "Опишете за хора със загуба на слуха или зрително увреждане", "upload_modal.analyzing_picture": "Анализ на снимка…", "upload_modal.apply": "Прилагане", - "upload_modal.applying": "Applying…", + "upload_modal.applying": "Прилагане…", "upload_modal.choose_image": "Избор на изображение", "upload_modal.description_placeholder": "Ах, чудна българска земьо, полюшвай цъфтящи жита", "upload_modal.detect_text": "Откриване на текст от картина", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index 94b0477b5dd..dfa718ae01c 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -24,6 +24,7 @@ "account.follows_you": "তোমাকে অনুসরণ করে", "account.hide_reblogs": "@{name}'র সমর্থনগুলি লুকিয়ে ফেলুন", "account.joined": "Joined {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "এই লিংকের মালিকানা চেক করা হয়েছে {date} তারিখে", "account.locked_info": "এই নিবন্ধনের গোপনীয়তার ক্ষেত্র তালা দেওয়া আছে। নিবন্ধনকারী অনুসরণ করার অনুমতি যাদেরকে দেবেন, শুধু তারাই অনুসরণ করতে পারবেন।", "account.media": "মিডিয়া", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "পাওয়া যাচ্ছে না", "status.unmute_conversation": "আলোচনার প্রজ্ঞাপন চালু করতে", "status.unpin": "নিজের পাতা থেকে পিন করে রাখাটির পিন খুলতে", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "সাহায্যের পরামর্শগুলো সরাতে", "suggestions.header": "আপনি হয়তোবা এগুলোতে আগ্রহী হতে পারেন…", "tabs_bar.federated_timeline": "যুক্তবিশ্ব", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 50837691ff2..f3d19f9a29a 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -24,6 +24,7 @@ "account.follows_you": "Ho heul", "account.hide_reblogs": "Kuzh toudoù rannet gant @{name}", "account.joined": "Amañ abaoe {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Gwiriet eo bet perc'hennidigezh al liamm d'an deiziad-mañ : {date}", "account.locked_info": "Prennet eo ar gont-mañ. Dibab a ra ar perc'henn ar re a c'hall heuliañ anezhi pe anezhañ.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Dihegerz", "status.unmute_conversation": "Diguzhat ar gaozeadenn", "status.unpin": "Dispilhennañ eus ar profil", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dilezel damvenegoù", "suggestions.header": "Marteze e vefec'h dedenet gant…", "tabs_bar.federated_timeline": "Kevredet", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index c3fe88121c5..32faea99aa5 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -24,6 +24,7 @@ "account.follows_you": "Et segueix", "account.hide_reblogs": "Amaga els impulsos de @{name}", "account.joined": "Membre des de {date}", + "account.languages": "Canviar les llengües subscrits", "account.link_verified_on": "La propietat d'aquest enllaç es va verificar el dia {date}", "account.locked_info": "Aquest estat de privadesa del compte està definit com a bloquejat. El propietari revisa manualment qui pot seguir-lo.", "account.media": "Multimèdia", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "No està disponible", "status.unmute_conversation": "No silenciïs la conversa", "status.unpin": "No fixis al perfil", + "subscribed_languages.lead": "Només els apunts en les llengües seleccionades apareixeran en le teves línies de temps Inici i llista després del canvi. No en seleccionis cap per a rebre apunts en totes les llengües.", + "subscribed_languages.save": "Desa els canvis", + "subscribed_languages.target": "Canvia les llengües subscrites per a {target}", "suggestions.dismiss": "Ignora el suggeriment", "suggestions.header": "És possible que estiguis interessat en…", "tabs_bar.federated_timeline": "Federat", diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json index 19d9550d0cb..1497e31a3de 100644 --- a/app/javascript/mastodon/locales/ckb.json +++ b/app/javascript/mastodon/locales/ckb.json @@ -24,6 +24,7 @@ "account.follows_you": "شوێنکەوتووەکانت", "account.hide_reblogs": "داشاردنی بووستەکان لە @{name}", "account.joined": "بەشداری {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "خاوەنداریەتی ئەم لینکە لە {date} چێک کراوە", "account.locked_info": "تایبەتمەندی ئەم هەژمارەیە ڕیکخراوە بۆ قوفڵدراوە. خاوەنەکە بە دەستی پێداچوونەوە دەکات کە کێ دەتوانێت شوێنیان بکەوێت.", "account.media": "میدیا", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "بەردەست نیە", "status.unmute_conversation": "گفتوگۆی بێدەنگ", "status.unpin": "لە سەرەوە لایبە", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "ڕەتکردنەوەی پێشنیار", "suggestions.header": "لەوانەیە حەزت لەمەش بێت…", "tabs_bar.federated_timeline": "گشتی", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 5ca3f4a4b54..efc584c6682 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -24,6 +24,7 @@ "account.follows_you": "Vi seguita", "account.hide_reblogs": "Piattà spartere da @{name}", "account.joined": "Quì dapoi {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "A prupietà di stu ligame hè stata verificata u {date}", "account.locked_info": "U statutu di vita privata di u contu hè chjosu. U pruprietariu esamina manualmente e dumande d'abbunamentu.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Micca dispunibule", "status.unmute_conversation": "Ùn piattà più a cunversazione", "status.unpin": "Spuntarulà da u prufile", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Righjittà a pruposta", "suggestions.header": "Site forse interessatu·a da…", "tabs_bar.federated_timeline": "Glubale", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index ef1a13d8f5a..a5c512c0fe8 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -24,6 +24,7 @@ "account.follows_you": "Sleduje vás", "account.hide_reblogs": "Skrýt boosty od @{name}", "account.joined": "Založen {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Vlastnictví tohoto odkazu bylo zkontrolováno {date}", "account.locked_info": "Stav soukromí tohoto účtu je nastaven na zamčeno. Jeho vlastník ručně posuzuje, kdo ho může sledovat.", "account.media": "Média", @@ -59,7 +60,7 @@ "alert.unexpected.title": "Jejda!", "announcement.announcement": "Oznámení", "attachments_list.unprocessed": "(nezpracováno)", - "audio.hide": "Hide audio", + "audio.hide": "Skrýt zvuk", "autosuggest_hashtag.per_week": "{count} za týden", "boost_modal.combo": "Příště můžete pro přeskočení stisknout {combo}", "bundle_column_error.body": "Při načítání této komponenty se něco pokazilo.", @@ -197,22 +198,22 @@ "explore.trending_links": "Zprávy", "explore.trending_statuses": "Příspěvky", "explore.trending_tags": "Hashtagy", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Tato kategorie filtru se nevztahuje na kontext, ve kterém jste tento příspěvek otevřeli. Pokud chcete, aby byl příspěvek filtrován i v tomto kontextu, budete muset filtr upravit.", + "filter_modal.added.context_mismatch_title": "Kontext se neshoduje!", + "filter_modal.added.expired_explanation": "Tato kategorie filtrů vypršela, budete muset změnit datum vypršení platnosti, aby mohla být použita.", + "filter_modal.added.expired_title": "Vypršel filtr!", + "filter_modal.added.review_and_configure": "Chcete-li zkontrolovat a dále konfigurovat tuto kategorii filtru, přejděte na {settings_link}.", + "filter_modal.added.review_and_configure_title": "Nastavení filtru", + "filter_modal.added.settings_link": "stránka nastavení", + "filter_modal.added.short_explanation": "Tento příspěvek byl přidán do následující kategorie filtrů: {title}.", + "filter_modal.added.title": "Filtr přidán!", + "filter_modal.select_filter.context_mismatch": "nevztahuje se na tento kontext", + "filter_modal.select_filter.expired": "vypršela platnost", + "filter_modal.select_filter.prompt_new": "Nová kategorie: {name}", + "filter_modal.select_filter.search": "Vyhledat nebo vytvořit", + "filter_modal.select_filter.subtitle": "Použít existující kategorii nebo vytvořit novou kategorii", + "filter_modal.select_filter.title": "Filtrovat tento příspěvek", + "filter_modal.title.status": "Filtrovat příspěvek", "follow_recommendations.done": "Hotovo", "follow_recommendations.heading": "Sledujte lidi, jejichž příspěvky chcete vidět! Tady jsou nějaké návrhy.", "follow_recommendations.lead": "Příspěvky od lidí, které sledujete, se budou objevovat v chronologickém pořadí ve vaší domovské ose. Nebojte se, že uděláte chybu, můžete lidi stejně snadno kdykoliv přestat sledovat!", @@ -237,9 +238,9 @@ "hashtag.column_settings.tag_mode.any": "Jakékoliv z těchto", "hashtag.column_settings.tag_mode.none": "Žádné z těchto", "hashtag.column_settings.tag_toggle": "Zahrnout v tomto sloupci dodatečné tagy", - "hashtag.follow": "Follow hashtag", + "hashtag.follow": "Sledovat hashtag", "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", - "hashtag.unfollow": "Unfollow hashtag", + "hashtag.unfollow": "Zrušit sledování hashtagu", "home.column_settings.basic": "Základní", "home.column_settings.show_reblogs": "Zobrazit boosty", "home.column_settings.show_replies": "Zobrazit odpovědi", @@ -487,7 +488,7 @@ "status.edited_x_times": "Upraven {count, plural, one {{count}krát} few {{count}krát} many {{count}krát} other {{count}krát}}", "status.embed": "Vložit na web", "status.favourite": "Oblíbit", - "status.filter": "Filter this post", + "status.filter": "Filtrovat tento příspěvek", "status.filtered": "Filtrováno", "status.hide": "Skrýt příspěvek", "status.history.created": "Uživatel {name} vytvořil {date}", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Nedostupné", "status.unmute_conversation": "Odkrýt konverzaci", "status.unpin": "Odepnout z profilu", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Odmítnout návrh", "suggestions.header": "Mohlo by vás zajímat…", "tabs_bar.federated_timeline": "Federovaná", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index cb1c90d6953..de59b5ac51a 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -24,6 +24,7 @@ "account.follows_you": "Yn eich dilyn chi", "account.hide_reblogs": "Cuddio bwstiau o @{name}", "account.joined": "Ymunodd {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Gwiriwyd perchnogaeth y ddolen yma ar {date}", "account.locked_info": "Mae'r statws preifatrwydd cyfrif hwn wedi'i osod i gloi. Mae'r perchennog yn adolygu'r sawl sy'n gallu eu dilyn.", "account.media": "Cyfryngau", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Dim ar gael", "status.unmute_conversation": "Dad-dawelu sgwrs", "status.unpin": "Dadbinio o'r proffil", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Diswyddo", "suggestions.header": "Efallai y bydd gennych ddiddordeb mewn…", "tabs_bar.federated_timeline": "Ffederasiwn", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 80cb8e6c689..ffa6fdd15af 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -24,6 +24,7 @@ "account.follows_you": "Følger dig", "account.hide_reblogs": "Skjul boosts fra @{name}", "account.joined": "Tilmeldt {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Ejerskab af dette link blev tjekket {date}", "account.locked_info": "Denne kontos fortrolighedsstatus er sat til låst. Ejeren bedømmer manuelt, hvem der kan følge vedkommende.", "account.media": "Medier", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Utilgængelig", "status.unmute_conversation": "Genaktivér samtale", "status.unpin": "Frigør fra profil", + "subscribed_languages.lead": "Kun indlæg på udvalgte sprog vil fremgå på Hjem og listetidslinjer efter ændringen. Vælg ingen for at modtage indlæg på alle sprog.", + "subscribed_languages.save": "Gem ændringer", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Afvis foreslag", "suggestions.header": "Du er måske interesseret i…", "tabs_bar.federated_timeline": "Fælles", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 9bed255268e..a8b841a26a5 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -24,6 +24,7 @@ "account.follows_you": "Folgt dir", "account.hide_reblogs": "Geteilte Beiträge von @{name} verbergen", "account.joined": "Beigetreten am {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Diesem Profil folgt niemand", "account.locked_info": "Der Privatsphärenstatus dieses Accounts wurde auf „gesperrt“ gesetzt. Die Person bestimmt manuell, wer ihm/ihr folgen darf.", "account.media": "Medien", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Nicht verfügbar", "status.unmute_conversation": "Stummschaltung von Konversation aufheben", "status.unpin": "Vom Profil lösen", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Empfehlung ausblenden", "suggestions.header": "Du bist vielleicht interessiert an…", "tabs_bar.federated_timeline": "Föderation", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 999f67c73f3..d90455b519b 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -24,6 +24,7 @@ "account.follows_you": "Σε ακολουθεί", "account.hide_reblogs": "Απόκρυψη προωθήσεων από @{name}", "account.joined": "Μέλος από τις {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Η ιδιοκτησία αυτού του συνδέσμου ελέχθηκε την {date}", "account.locked_info": "Η κατάσταση απορρήτου αυτού του λογαριασμού είναι κλειδωμένη. Ο ιδιοκτήτης επιβεβαιώνει χειροκίνητα ποιος μπορεί να τον ακολουθήσει.", "account.media": "Πολυμέσα", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Μη διαθέσιμα", "status.unmute_conversation": "Διέκοψε την αποσιώπηση της συζήτησης", "status.unpin": "Ξεκαρφίτσωσε από το προφίλ", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Απόρριψη πρότασης", "suggestions.header": "Ίσως να ενδιαφέρεσαι για…", "tabs_bar.federated_timeline": "Ομοσπονδιακή", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 2287dcda5b0..eab3be805bb 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -24,6 +24,7 @@ "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", "account.joined": "Joined {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 082c53de7eb..0363f6715d9 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -24,6 +24,7 @@ "account.follows_you": "Sekvas vin", "account.hide_reblogs": "Kaŝi la plusendojn de @{name}", "account.joined": "Kuniĝis {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "La posedanto de tiu ligilo estis kontrolita je {date}", "account.locked_info": "La privateco de tiu konto estas elektita kiel fermita. La posedanto povas mane akcepti tiun, kiu povas sekvi rin.", "account.media": "Aŭdovidaĵoj", @@ -59,7 +60,7 @@ "alert.unexpected.title": "Aj!", "announcement.announcement": "Anonco", "attachments_list.unprocessed": "(neprilaborita)", - "audio.hide": "Hide audio", + "audio.hide": "Kaŝi aŭdion", "autosuggest_hashtag.per_week": "{count} semajne", "boost_modal.combo": "Vi povas premi {combo} por preterpasi sekvafoje", "bundle_column_error.body": "Io misfunkciis en la ŝargado de ĉi tiu elemento.", @@ -202,16 +203,16 @@ "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", "filter_modal.added.expired_title": "Expired filter!", "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", + "filter_modal.added.review_and_configure_title": "Filtrilopcioj", + "filter_modal.added.settings_link": "opciopaĝo", "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", "filter_modal.added.title": "Filter added!", "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.expired": "eksvalidiĝinta", + "filter_modal.select_filter.prompt_new": "Nova klaso: {name}", + "filter_modal.select_filter.search": "Serĉi aŭ krei", "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", + "filter_modal.select_filter.title": "Filtri ĉi afiŝo", "filter_modal.title.status": "Filter a post", "follow_recommendations.done": "Farita", "follow_recommendations.heading": "Sekvi la personojn kies mesaĝojn vi volas vidi! Jen iom da sugestoj.", @@ -487,7 +488,7 @@ "status.edited_x_times": "Redactita {count, plural, one {{count} fojon} other {{count} fojojn}}", "status.embed": "Enkorpigi", "status.favourite": "Aldoni al viaj preferaĵoj", - "status.filter": "Filter this post", + "status.filter": "Filtri ĉi afiŝo", "status.filtered": "Filtrita", "status.hide": "Kaŝi la mesaĝon", "status.history.created": "{name} kreis {date}", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Nedisponebla", "status.unmute_conversation": "Malsilentigi la konversacion", "status.unpin": "Depingli de profilo", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Forigi la proponon", "suggestions.header": "Vi povus interesiĝi pri…", "tabs_bar.federated_timeline": "Fratara", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 27ebd749d48..8a7335ac02d 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -24,6 +24,7 @@ "account.follows_you": "Te sigue", "account.hide_reblogs": "Ocultar adhesiones de @{name}", "account.joined": "En este servidor desde {date}", + "account.languages": "Cambiar idiomas suscritos", "account.link_verified_on": "La propiedad de este enlace fue verificada el {date}", "account.locked_info": "Esta cuenta es privada. El propietario manualmente revisa quién puede seguirle.", "account.media": "Medios", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "No disponible", "status.unmute_conversation": "Dejar de silenciar conversación", "status.unpin": "Dejar de fijar", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Descartar sugerencia", "suggestions.header": "Es posible que te interese…", "tabs_bar.federated_timeline": "Federada", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index bb03a297537..2bcc3a55465 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -24,6 +24,7 @@ "account.follows_you": "Te sigue", "account.hide_reblogs": "Ocultar retoots de @{name}", "account.joined": "Se unió el {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "El proprietario de este link fue comprobado el {date}", "account.locked_info": "El estado de privacidad de esta cuenta està configurado como bloqueado. El proprietario debe revisar manualmente quien puede seguirle.", "account.media": "Multimedia", @@ -197,22 +198,22 @@ "explore.trending_links": "Noticias", "explore.trending_statuses": "Publicaciones", "explore.trending_tags": "Hashtags", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Esta categoría de filtro no se aplica al contexto en el que ha accedido a esta publlicación. Si quieres que la publicación sea filtrada también en este contexto, tendrás que editar el filtro.", + "filter_modal.added.context_mismatch_title": "¡El contexto no coincide!", + "filter_modal.added.expired_explanation": "Esta categoría de filtro ha caducado, necesitará cambiar la fecha de caducidad para que se aplique.", + "filter_modal.added.expired_title": "¡Filtro caducado!", + "filter_modal.added.review_and_configure": "Para revisar y configurar esta categoría de filtros, vaya a {settings_link}.", + "filter_modal.added.review_and_configure_title": "Ajustes de filtro", + "filter_modal.added.settings_link": "página de ajustes", + "filter_modal.added.short_explanation": "Esta publicación ha sido añadida a la siguiente categoría de filtros: {title}.", + "filter_modal.added.title": "¡Filtro añadido!", + "filter_modal.select_filter.context_mismatch": "no se aplica a este contexto", + "filter_modal.select_filter.expired": "expirado", + "filter_modal.select_filter.prompt_new": "Nueva categoría: {name}", + "filter_modal.select_filter.search": "Buscar o crear", + "filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva", + "filter_modal.select_filter.title": "Filtrar esta publicación", + "filter_modal.title.status": "Filtrar una publicación", "follow_recommendations.done": "Hecho", "follow_recommendations.heading": "¡Sigue a gente que publique cosas que te gusten! Aquí tienes algunas sugerencias.", "follow_recommendations.lead": "Las publicaciones de la gente a la que sigas aparecerán ordenadas cronológicamente en Inicio. No tengas miedo de cometer errores, ¡puedes dejarles de seguir en cualquier momento con la misma facilidad!", @@ -487,7 +488,7 @@ "status.edited_x_times": "Editado {count, plural, one {{count} time} other {{count} veces}}", "status.embed": "Incrustado", "status.favourite": "Favorito", - "status.filter": "Filter this post", + "status.filter": "Filtrar esta publicación", "status.filtered": "Filtrado", "status.hide": "Ocultar publicación", "status.history.created": "{name} creó {date}", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "No disponible", "status.unmute_conversation": "Dejar de silenciar conversación", "status.unpin": "Dejar de fijar", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Descartar sugerencia", "suggestions.header": "Es posible que te interese…", "tabs_bar.federated_timeline": "Federado", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 7c9700ecbb8..ade9480d759 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -24,6 +24,7 @@ "account.follows_you": "Te sigue", "account.hide_reblogs": "Ocultar retoots de @{name}", "account.joined": "Se unió el {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "El proprietario de este link fue comprobado el {date}", "account.locked_info": "El estado de privacidad de esta cuenta està configurado como bloqueado. El proprietario debe revisar manualmente quien puede seguirle.", "account.media": "Multimedia", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "No disponible", "status.unmute_conversation": "Dejar de silenciar conversación", "status.unpin": "Dejar de fijar", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Descartar sugerencia", "suggestions.header": "Es posible que te interese…", "tabs_bar.federated_timeline": "Federada", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 6737111fdff..3eaaa12ec6e 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -24,6 +24,7 @@ "account.follows_you": "Jälgib Teid", "account.hide_reblogs": "Peida upitused kasutajalt @{name}", "account.joined": "Liitus {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Selle lingi autorsust kontrolliti {date}", "account.locked_info": "Selle konto privaatsussätteks on lukustatud. Omanik vaatab manuaalselt üle, kes teda jägida saab.", "account.media": "Meedia", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Pole saadaval", "status.unmute_conversation": "Ära vaigista vestlust", "status.unpin": "Kinnita profiililt lahti", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Eira soovitust", "suggestions.header": "Teid võib huvitada…", "tabs_bar.federated_timeline": "Föderatiivne", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index c8062f00403..5b72eeb2d65 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -24,6 +24,7 @@ "account.follows_you": "Jarraitzen dizu", "account.hide_reblogs": "Ezkutatu @{name}(r)en bultzadak", "account.joined": "{date}(e)an elkartua", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Esteka honen jabetzaren egiaztaketa data: {date}", "account.locked_info": "Kontu honen pribatutasun egoera blokeatuta gisa ezarri da. Jabeak eskuz erabakitzen du nork jarraitu diezaioken.", "account.media": "Multimedia", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Ez eskuragarri", "status.unmute_conversation": "Desmututu elkarrizketa", "status.unpin": "Desfinkatu profiletik", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Errefusatu proposamena", "suggestions.header": "Hau interesatu dakizuke…", "tabs_bar.federated_timeline": "Federatua", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 775f38475ec..f3e6fbc7240 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -24,6 +24,7 @@ "account.follows_you": "پی می‌گیردتان", "account.hide_reblogs": "نهفتن تقویت‌های ‎@{name}", "account.joined": "پیوسته از {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "مالکیت این پیوند در {date} بررسی شد", "account.locked_info": "این حساب خصوصی است. صاحبش تصمیم می‌گیرد که چه کسی پی‌گیرش باشد.", "account.media": "رسانه", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "ناموجود", "status.unmute_conversation": "رفع خموشی گفت‌وگو", "status.unpin": "برداشتن سنجاق از نمایه", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "نادیده گرفتن پیشنهاد", "suggestions.header": "شاید این هم برایتان جالب باشد…", "tabs_bar.federated_timeline": "همگانی", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 52afeaa5d30..6920093f47a 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -24,6 +24,7 @@ "account.follows_you": "Seuraa sinua", "account.hide_reblogs": "Piilota buustaukset käyttäjältä @{name}", "account.joined": "Liittynyt {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Tämän linkin omistaja tarkistettiin {date}", "account.locked_info": "Tämän tilin yksityisyyden tila on asetettu lukituksi. Omistaja arvioi manuaalisesti, kuka voi seurata niitä.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Ei saatavilla", "status.unmute_conversation": "Poista keskustelun mykistys", "status.unpin": "Irrota profiilista", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Hylkää ehdotus", "suggestions.header": "Saatat olla kiinnostunut myös…", "tabs_bar.federated_timeline": "Yleinen", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index dcac5c880ae..9cbbc3c03dd 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -24,6 +24,7 @@ "account.follows_you": "Vous suit", "account.hide_reblogs": "Masquer les partages de @{name}", "account.joined": "Ici depuis {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "La propriété de ce lien a été vérifiée le {date}", "account.locked_info": "Ce compte est privé. Son ou sa propriétaire approuve manuellement qui peut le suivre.", "account.media": "Médias", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Indisponible", "status.unmute_conversation": "Ne plus masquer la conversation", "status.unpin": "Retirer du profil", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Rejeter la suggestion", "suggestions.header": "Vous pourriez être intéressé·e par…", "tabs_bar.federated_timeline": "Fil public global", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index a53a1cf529d..1e49a7e178b 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -24,6 +24,7 @@ "account.follows_you": "Folget dy", "account.hide_reblogs": "Hide boosts from @{name}", "account.joined": "Registrearre op {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Net beskikber", "status.unmute_conversation": "Petear net mear negearre", "status.unpin": "Unpin from profile", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index e05c4a41d08..e9e1e96d46a 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -24,6 +24,7 @@ "account.follows_you": "Do do leanúint", "account.hide_reblogs": "Folaigh athphostálacha ó @{name}", "account.joined": "Ina bhall ó {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "Tá an socrú príobháideachais don cuntas seo curtha go 'faoi ghlas'. Déanann an t-úinéir léirmheas ar cén daoine atá ceadaithe an cuntas leanúint.", "account.media": "Ábhair", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Díbhalbhaigh comhrá", "status.unpin": "Díphionnáil de do phróifíl", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index f874637fa9d..7f17df51ebf 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -24,6 +24,7 @@ "account.follows_you": "’Gad leantainn", "account.hide_reblogs": "Falaich na brosnachaidhean o @{name}", "account.joined": "Air ballrachd fhaighinn {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Chaidh dearbhadh cò leis a tha an ceangal seo {date}", "account.locked_info": "Tha prìobhaideachd ghlaiste aig a’ chunntais seo. Nì an sealbhadair lèirmheas a làimh air cò dh’fhaodas leantainn orra.", "account.media": "Meadhanan", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Chan eil seo ri fhaighinn", "status.unmute_conversation": "Dì-mhùch an còmhradh", "status.unpin": "Dì-phrìnich on phròifil", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Leig seachad am moladh", "suggestions.header": "Dh’fhaoidte gu bheil ùidh agad ann an…", "tabs_bar.federated_timeline": "Co-naisgte", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index c584dd5517d..215956d4963 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -24,6 +24,7 @@ "account.follows_you": "Séguete", "account.hide_reblogs": "Agochar repeticións de @{name}", "account.joined": "Uníuse {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "A propiedade desta ligazón foi verificada o {date}", "account.locked_info": "Esta é unha conta privada. A propietaria revisa de xeito manual quen pode seguila.", "account.media": "Multimedia", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Non dispoñíbel", "status.unmute_conversation": "Deixar de silenciar conversa", "status.unpin": "Desafixar do perfil", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Rexeitar suxestión", "suggestions.header": "Poderíache interesar…", "tabs_bar.federated_timeline": "Federada", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 81253fd1f80..9c60de8ca79 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -24,6 +24,7 @@ "account.follows_you": "במעקב אחריך", "account.hide_reblogs": "להסתיר הידהודים מאת @{name}", "account.joined": "הצטרפו ב{date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "בעלות על הקישור הזה נבדקה לאחרונה ב{date}", "account.locked_info": "מצב הפרטיות של החשבון הנוכחי הוגדר כנעול. בעל החשבון קובע באופן פרטני מי יכול לעקוב אחריו.", "account.media": "מדיה", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "לא זמין", "status.unmute_conversation": "הסרת השתקת שיחה", "status.unpin": "לשחרר מקיבוע באודות", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "להתעלם מהצעה", "suggestions.header": "ייתכן שזה יעניין אותך…", "tabs_bar.federated_timeline": "פיד כללי (בין-קהילתי)", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index d2403c1f586..6fab737f969 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -24,6 +24,7 @@ "account.follows_you": "आपको फॉलो करता है", "account.hide_reblogs": "@{name} के बूस्ट छुपाएं", "account.joined": "शामिल हुये {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "इस लिंक का स्वामित्व {date} को चेक किया गया था", "account.locked_info": "यह खाता गोपनीयता स्थिति लॉक करने के लिए सेट है। मालिक मैन्युअल रूप से समीक्षा करता है कि कौन उनको फॉलो कर सकता है।", "account.media": "मीडिया", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "अनुपलब्ध", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "फ़ेडरेटेड", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index c66de9c0d13..94ff9d3a3ce 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -24,6 +24,7 @@ "account.follows_you": "Prati te", "account.hide_reblogs": "Sakrij boostove od @{name}", "account.joined": "Pridružio se {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Vlasništvo ove poveznice provjereno je {date}", "account.locked_info": "Status privatnosti ovog računa postavljen je na zaključano. Vlasnik ručno pregledava tko ih može pratiti.", "account.media": "Medijski sadržaj", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Nije dostupno", "status.unmute_conversation": "Poništi utišavanje razgovora", "status.unpin": "Otkvači s profila", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Odbaci prijedlog", "suggestions.header": "Možda Vas zanima…", "tabs_bar.federated_timeline": "Federalno", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 08cb01dc3d6..cc36029563b 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -24,6 +24,7 @@ "account.follows_you": "Követ téged", "account.hide_reblogs": "@{name} megtolásainak elrejtése", "account.joined": "Csatlakozott {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "A linket eredetiségét ebben az időpontban ellenőriztük: {date}", "account.locked_info": "Ennek a fióknak zárolt a láthatósága. A tulajdonos kézzel engedélyezi, hogy ki követheti őt.", "account.media": "Média", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Nem érhető el", "status.unmute_conversation": "Beszélgetés némításának feloldása", "status.unpin": "Kitűzés eltávolítása a profilodról", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Javaslat elvetése", "suggestions.header": "Esetleg érdekelhet…", "tabs_bar.federated_timeline": "Föderációs", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 5a18eff04ba..dc1bec6e4e4 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -24,6 +24,7 @@ "account.follows_you": "Հետեւում է քեզ", "account.hide_reblogs": "Թաքցնել @{name}֊ի տարածածները", "account.joined": "Միացել է {date}-ից", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Սոյն յղման տիրապետումը ստուգուած է՝ {date}֊ին", "account.locked_info": "Սոյն հաշուի գաղտնիութեան մակարդակը նշուած է որպէս՝ փակ։ Հաշուի տէրն ընտրում է, թէ ով կարող է հետեւել իրեն։", "account.media": "Մեդիա", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Անհասանելի", "status.unmute_conversation": "Ապալռեցնել խօսակցութիւնը", "status.unpin": "Հանել անձնական էջից", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Անտեսել առաջարկը", "suggestions.header": "Միգուցէ քեզ հետաքրքրի…", "tabs_bar.federated_timeline": "Դաշնային", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 9c387921287..8b615038bea 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -24,6 +24,7 @@ "account.follows_you": "Mengikuti anda", "account.hide_reblogs": "Sembunyikan boosts dari @{name}", "account.joined": "Bergabung {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Kepemilikan tautan ini telah dicek pada {date}", "account.locked_info": "Status privasi akun ini disetel untuk dikunci. Pemilik secara manual meninjau siapa yang dapat mengikutinya.", "account.media": "Media", @@ -59,7 +60,7 @@ "alert.unexpected.title": "Ups!", "announcement.announcement": "Pengumuman", "attachments_list.unprocessed": "(tidak diproses)", - "audio.hide": "Hide audio", + "audio.hide": "Indonesia", "autosuggest_hashtag.per_week": "{count} per minggu", "boost_modal.combo": "Anda dapat menekan {combo} untuk melewati ini", "bundle_column_error.body": "Kesalahan terjadi saat memuat komponen ini.", @@ -197,7 +198,7 @@ "explore.trending_links": "Berita", "explore.trending_statuses": "Postingan", "explore.trending_tags": "Tagar", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", + "filter_modal.added.context_mismatch_explanation": "Indonesia Translate", "filter_modal.added.context_mismatch_title": "Context mismatch!", "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", "filter_modal.added.expired_title": "Expired filter!", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Tak tersedia", "status.unmute_conversation": "Bunyikan percakapan", "status.unpin": "Hapus sematan dari profil", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Hentikan saran", "suggestions.header": "Anda mungkin tertarik dg…", "tabs_bar.federated_timeline": "Gabungan", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 28edbc7a30e..312ef70aed8 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -24,6 +24,7 @@ "account.follows_you": "Sequas tu", "account.hide_reblogs": "Celez busti de @{name}", "account.joined": "Juntas ye {date}", + "account.languages": "Chanjez abonita lingui", "account.link_verified_on": "Proprieteso di ca ligilo kontrolesis ye {date}", "account.locked_info": "La privatesostaco di ca konto fixesas quale lokata. Proprietato manue kontrolas personi qui povas sequar.", "account.media": "Medio", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Nedisplonebla", "status.unmute_conversation": "Desilencigez konverso", "status.unpin": "Depinglagez de profilo", + "subscribed_languages.lead": "Nur posti en selektita lingui aparos en vua hemo e listotempolineo pos chanjo. Selektez nulo por ganar posti en omna lingui.", + "subscribed_languages.save": "Sparez chanji", + "subscribed_languages.target": "Chanjez abonita lingui por {target}", "suggestions.dismiss": "Desklozez sugestajo", "suggestions.header": "Vu forsan havas intereso pri…", "tabs_bar.federated_timeline": "Federata", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index e15656a50a3..aa46b748bfd 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -24,6 +24,7 @@ "account.follows_you": "Fylgir þér", "account.hide_reblogs": "Fela endurbirtingar fyrir @{name}", "account.joined": "Gerðist þátttakandi {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Eignarhald á þessum tengli var athugað þann {date}", "account.locked_info": "Staða gagnaleyndar á þessum aðgangi er stillt á læsingu. Eigandinn yfirfer handvirkt hverjir geti fylgst með honum.", "account.media": "Myndskrár", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Ekki tiltækt", "status.unmute_conversation": "Hætta að þagga niður í samtali", "status.unpin": "Losa af notandasniði", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Hafna tillögu", "suggestions.header": "Þú gætir haft áhuga á…", "tabs_bar.federated_timeline": "Sameiginlegt", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 3e59c2782c8..28e9902a8a1 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -24,6 +24,7 @@ "account.follows_you": "Ti segue", "account.hide_reblogs": "Nascondi condivisioni da @{name}", "account.joined": "Su questa istanza dal {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "La proprietà di questo link è stata controllata il {date}", "account.locked_info": "Questo è un account privato. Il proprietario approva manualmente chi può seguirlo.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Non disponibile", "status.unmute_conversation": "Annulla silenzia conversazione", "status.unpin": "Non fissare in cima al profilo", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Elimina suggerimento", "suggestions.header": "Ti potrebbe interessare…", "tabs_bar.federated_timeline": "Federazione", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 55cb2eb93d1..5de2a7abda4 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -24,6 +24,7 @@ "account.follows_you": "フォローされています", "account.hide_reblogs": "@{name}さんからのブーストを非表示", "account.joined": "{date} に登録", + "account.languages": "Change subscribed languages", "account.link_verified_on": "このリンクの所有権は{date}に確認されました", "account.locked_info": "このアカウントは承認制アカウントです。相手が承認するまでフォローは完了しません。", "account.media": "メディア", @@ -200,19 +201,19 @@ "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", "filter_modal.added.context_mismatch_title": "Context mismatch!", "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", + "filter_modal.added.expired_title": "フィルターの有効期限が切れています!", + "filter_modal.added.review_and_configure": "このフィルターカテゴリーを確認して設定するには、{settings_link}に移動します。", + "filter_modal.added.review_and_configure_title": "フィルター設定", + "filter_modal.added.settings_link": "設定", "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", "filter_modal.added.title": "Filter added!", "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.select_filter.expired": "期限切れ", + "filter_modal.select_filter.prompt_new": "新しいカテゴリー: {name}", + "filter_modal.select_filter.search": "検索または新規作成", + "filter_modal.select_filter.subtitle": "既存のカテゴリーを使用するか新規作成します", + "filter_modal.select_filter.title": "この投稿をフィルターする", + "filter_modal.title.status": "投稿をフィルターする", "follow_recommendations.done": "完了", "follow_recommendations.heading": "投稿を見たい人をフォローしてください!ここにおすすめがあります。", "follow_recommendations.lead": "あなたがフォローしている人の投稿は、ホームフィードに時系列で表示されます。いつでも簡単に解除できるので、気軽にフォローしてみてください!", @@ -487,7 +488,7 @@ "status.edited_x_times": "{count}回編集", "status.embed": "埋め込み", "status.favourite": "お気に入り", - "status.filter": "Filter this post", + "status.filter": "この投稿をフィルターする", "status.filtered": "フィルターされました", "status.hide": "トゥートを非表示", "status.history.created": "{name}さんが{date}に作成", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "利用できません", "status.unmute_conversation": "会話のミュートを解除", "status.unpin": "プロフィールへの固定を解除", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "隠す", "suggestions.header": "興味あるかもしれません…", "tabs_bar.federated_timeline": "連合", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index c6c72b6ced8..8021d8be250 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -24,6 +24,7 @@ "account.follows_you": "მოგყვებათ", "account.hide_reblogs": "დაიმალოს ბუსტები @{name}-სგან", "account.joined": "Joined {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "მედია", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Not available", "status.unmute_conversation": "საუბარზე გაჩუმების მოშორება", "status.unpin": "პროფილიდან პინის მოშორება", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "ფედერალური", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 035ec7c841b..78f41c636cb 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -24,6 +24,7 @@ "account.follows_you": "Yeṭṭafaṛ-ik", "account.hide_reblogs": "Ffer ayen i ibeṭṭu @{name}", "account.joined": "Yerna-d {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Taɣara n useɣwen-a tettwasenqed ass n {date}", "account.locked_info": "Amiḍan-agi uslig isekweṛ. D bab-is kan i izemren ad yeǧǧ, s ufus-is, win ara t-iḍefṛen.", "account.media": "Amidya", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Ulac-it", "status.unmute_conversation": "Kkes asgugem n udiwenni", "status.unpin": "Kkes asenteḍ seg umaɣnu", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Sefsex asumer", "suggestions.header": "Ahat ad tcelgeḍ deg…", "tabs_bar.federated_timeline": "Amatu", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index edcf0650ce3..29b6aa16a1a 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -24,6 +24,7 @@ "account.follows_you": "Сізге жазылыпты", "account.hide_reblogs": "@{name} атты қолданушының әрекеттерін жасыру", "account.joined": "Joined {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Сілтеме меншігі расталған күн {date}", "account.locked_info": "Бұл қолданушы өзі туралы мәліметтерді жасырған. Тек жазылғандар ғана көре алады.", "account.media": "Медиа", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Қолжетімді емес", "status.unmute_conversation": "Пікірталасты үнсіз қылмау", "status.unpin": "Профильден алып тастау", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Өткізіп жіберу", "suggestions.header": "Қызығуыңыз мүмкін…", "tabs_bar.federated_timeline": "Жаһандық", diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json index 3d2e0a68d1a..ed97bac6913 100644 --- a/app/javascript/mastodon/locales/kn.json +++ b/app/javascript/mastodon/locales/kn.json @@ -24,6 +24,7 @@ "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", "account.joined": "Joined {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 300b2d7c1ec..e175821896c 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -24,6 +24,7 @@ "account.follows_you": "날 팔로우합니다", "account.hide_reblogs": "@{name}의 부스트를 숨기기", "account.joined": "{date}에 가입함", + "account.languages": "구독한 언어 변경", "account.link_verified_on": "{date}에 이 링크의 소유권이 확인 됨", "account.locked_info": "이 계정의 프라이버시 설정은 잠금으로 설정되어 있습니다. 계정 소유자가 수동으로 팔로워를 승인합니다.", "account.media": "미디어", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "사용할 수 없음", "status.unmute_conversation": "이 대화의 뮤트 해제하기", "status.unpin": "고정 해제", + "subscribed_languages.lead": "변경 후에는 선택한 언어들로 작성된 게시물들만 홈 타임라인과 리스트 타임라인에 나타나게 됩니다. 아무 것도 선택하지 않으면 모든 언어로 작성된 게시물을 받아봅니다.", + "subscribed_languages.save": "변경사항 저장", + "subscribed_languages.target": "{target}에 대한 구독 언어 변경", "suggestions.dismiss": "추천 지우기", "suggestions.header": "여기에 관심이 있을 것 같습니다…", "tabs_bar.federated_timeline": "연합", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index 06c0e6f7a0c..105c45a2d90 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -24,6 +24,7 @@ "account.follows_you": "Te dişopîne", "account.hide_reblogs": "Bilindkirinên ji @{name} veşêre", "account.joined": "Di {date} de tevlî bû", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Xwedaniya li vê girêdanê di {date} de hatiye kontrolkirin", "account.locked_info": "Rewşa vê ajimêrê wek kilît kirî hatiye saz kirin. Xwedî yê ajimêrê, kesên vê bişopîne bi dest vekolin dike.", "account.media": "Medya", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Tune ye", "status.unmute_conversation": "Axaftinê bêdeng neke", "status.unpin": "Şandiya derzîkirî ji profîlê rake", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Pêşniyarê paşguh bike", "suggestions.header": "Dibe ku bala te bikşîne…", "tabs_bar.federated_timeline": "Giştî", diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json index f6a85a932ee..6b901f70d6d 100644 --- a/app/javascript/mastodon/locales/kw.json +++ b/app/javascript/mastodon/locales/kw.json @@ -24,6 +24,7 @@ "account.follows_you": "Y'th hol", "account.hide_reblogs": "Kudha kenerthow a @{name}", "account.joined": "Joined {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Perghenogeth an kolm ma a veu checkys dhe {date}", "account.locked_info": "Studh privetter an akont ma yw alhwedhys. An perghen a wra dasweles dre leuv piw a yll aga holya.", "account.media": "Myski", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Ankavadow", "status.unmute_conversation": "Antawhe kesklapp", "status.unpin": "Anfastya a brofil", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Gordhyllo profyans", "suggestions.header": "Martesen y fydh dhe les dhywgh…", "tabs_bar.federated_timeline": "Keffrysys", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 4e238273e0f..0be6c4e68a5 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -24,6 +24,7 @@ "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", "account.joined": "Joined {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 33f6832bfd4..3b538799eb3 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -24,6 +24,7 @@ "account.follows_you": "Seko tev", "account.hide_reblogs": "Paslēpt paceltos ierakstus no lietotāja @{name}", "account.joined": "Pievienojās {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Šīs saites piederība ir pārbaudīta {date}", "account.locked_info": "Šī konta privātuma statuss ir slēgts. Īpašnieks izskatīs, kurš viņam drīkst sekot.", "account.media": "Multivide", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Nav pieejams", "status.unmute_conversation": "Atvērt sarunu", "status.unpin": "Noņemt no profila", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Noraidīt ieteikumu", "suggestions.header": "Jūs varētu interesēt arī…", "tabs_bar.federated_timeline": "Federētā", diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json index d782dff6496..2c001c37c80 100644 --- a/app/javascript/mastodon/locales/mk.json +++ b/app/javascript/mastodon/locales/mk.json @@ -24,6 +24,7 @@ "account.follows_you": "Те следи тебе", "account.hide_reblogs": "Сокриј буст од @{name}", "account.joined": "Joined {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Сопстевноста на овај линк беше проверен на {date}", "account.locked_info": "Статусот на приватност на овај корисник е сетиран како заклучен. Корисникот одлучува кој можи да го следи него.", "account.media": "Медија", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 37969475d5d..44690137284 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -24,6 +24,7 @@ "account.follows_you": "നിങ്ങളെ പിന്തുടരുന്നു", "account.hide_reblogs": "@{name} ബൂസ്റ്റ് ചെയ്തവ മറയ്കുക", "account.joined": "{date} ൽ ചേർന്നു", + "account.languages": "Change subscribed languages", "account.link_verified_on": "ഈ ലിങ്കിന്റെ ഉടമസ്തത {date} ഇൽ ഉറപ്പാക്കിയതാണ്", "account.locked_info": "ഈ അംഗത്വത്തിന്റെ സ്വകാര്യതാ നിലപാട് അനുസരിച്ച് പിന്തുടരുന്നവരെ തിരഞ്ഞെടുക്കാനുള്ള വിവേചനാധികാരം ഉടമസ്ഥനിൽ നിഷിപ്തമായിരിക്കുന്നു.", "account.media": "മീഡിയ", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "ലഭ്യമല്ല", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "നിർദ്ദേശം ഒഴിവാക്കൂ", "suggestions.header": "നിങ്ങൾക്ക് താൽപ്പര്യമുണ്ടാകാം…", "tabs_bar.federated_timeline": "സംയുക്തമായ", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index 09eaea3f9ef..8c7f0ec1144 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -24,6 +24,7 @@ "account.follows_you": "तुमचा अनुयायी आहे", "account.hide_reblogs": "@{name} पासून सर्व बूस्ट लपवा", "account.joined": "Joined {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "दृक्‌‌श्राव्य मजकूर", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 6a1302329d4..4e50ef46543 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -24,6 +24,7 @@ "account.follows_you": "Mengikuti anda", "account.hide_reblogs": "Sembunyikan galakan daripada @{name}", "account.joined": "Sertai pada {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Pemilikan pautan ini telah disemak pada {date}", "account.locked_info": "Status privasi akaun ini dikunci. Pemiliknya menyaring sendiri siapa yang boleh mengikutinya.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Tidak tersedia", "status.unmute_conversation": "Nyahbisukan perbualan", "status.unpin": "Nyahsemat daripada profil", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Batalkan cadangan", "suggestions.header": "Anda mungkin berminat dengan…", "tabs_bar.federated_timeline": "Bersekutu", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index b48ebbc1696..7831310d841 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -24,6 +24,7 @@ "account.follows_you": "Volgt jou", "account.hide_reblogs": "Boosts van @{name} verbergen", "account.joined": "Geregistreerd op {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Eigendom van deze link is gecontroleerd op {date}", "account.locked_info": "De privacystatus van dit account is op besloten gezet. De eigenaar bepaalt handmatig wie diegene kan volgen.", "account.media": "Media", @@ -198,21 +199,21 @@ "explore.trending_statuses": "Berichten", "explore.trending_tags": "Hashtags", "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", + "filter_modal.added.context_mismatch_title": "Context komt niet overeen!", "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.expired_title": "Filter verlopen!", "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.review_and_configure_title": "Filterinstellingen", + "filter_modal.added.settings_link": "instellingspagina", + "filter_modal.added.short_explanation": "Dit bericht is toegevoegd aan de volgende filtercategorie: {title}.", + "filter_modal.added.title": "Filter toegevoegd!", + "filter_modal.select_filter.context_mismatch": "is niet van toepassing op deze context", + "filter_modal.select_filter.expired": "verlopen", + "filter_modal.select_filter.prompt_new": "Nieuwe categorie: {name}", + "filter_modal.select_filter.search": "Zoeken of toevoegen", + "filter_modal.select_filter.subtitle": "Gebruik een bestaande categorie of maak een nieuwe aan", + "filter_modal.select_filter.title": "Dit bericht filteren", + "filter_modal.title.status": "Een bericht filteren", "follow_recommendations.done": "Klaar", "follow_recommendations.heading": "Volg mensen waarvan je graag berichten wil zien! Hier zijn enkele aanbevelingen.", "follow_recommendations.lead": "Berichten van mensen die je volgt zullen in chronologische volgorde onder start verschijnen. Wees niet bang om hierin fouten te maken, want je kunt mensen op elk moment net zo eenvoudig ontvolgen!", @@ -238,7 +239,7 @@ "hashtag.column_settings.tag_mode.none": "Geen van deze", "hashtag.column_settings.tag_toggle": "Additionele tags aan deze kolom toevoegen", "hashtag.follow": "Hashtag volgen", - "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "hashtag.total_volume": "Totale hoeveelheid in {days, plural, one {het afgelopen etmaal} other {de afgelopen {days} dagen}}", "hashtag.unfollow": "Hashtag ontvolgen", "home.column_settings.basic": "Algemeen", "home.column_settings.show_reblogs": "Boosts tonen", @@ -487,7 +488,7 @@ "status.edited_x_times": "{count, plural, one {{count} keer} other {{count} keer}} bewerkt", "status.embed": "Insluiten", "status.favourite": "Favoriet", - "status.filter": "Filter this post", + "status.filter": "Dit bericht filteren", "status.filtered": "Gefilterd", "status.hide": "Bericht verbergen", "status.history.created": "{name} plaatste dit {date}", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Niet beschikbaar", "status.unmute_conversation": "Gesprek niet langer negeren", "status.unpin": "Van profielpagina losmaken", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Wijzigingen opslaan", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Aanbeveling verwerpen", "suggestions.header": "Je bent waarschijnlijk ook geïnteresseerd in…", "tabs_bar.federated_timeline": "Globaal", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 33c06e11e9d..785662bb5d5 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -24,6 +24,7 @@ "account.follows_you": "Fylgjer deg", "account.hide_reblogs": "Gøym fremhevingar frå @{name}", "account.joined": "Vart med {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Eigarskap for denne lenkja vart sist sjekka {date}", "account.locked_info": "Denne kontoen er privat. Eigaren kan sjølv velja kven som kan fylgja han.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Ikkje tilgjengeleg", "status.unmute_conversation": "Opphev målbinding av samtalen", "status.unpin": "Løys frå profil", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Avslå framlegg", "suggestions.header": "Du er kanskje interessert i…", "tabs_bar.federated_timeline": "Føderert", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 6e2783713f3..29df0b2d4ef 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -24,6 +24,7 @@ "account.follows_you": "Følger deg", "account.hide_reblogs": "Skjul fremhevinger fra @{name}", "account.joined": "Ble med den {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Eierskap av denne lenken ble sjekket {date}", "account.locked_info": "Denne kontoens personvernstatus er satt til låst. Eieren vurderer manuelt hvem som kan følge dem.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Ikke tilgjengelig", "status.unmute_conversation": "Ikke demp samtale", "status.unpin": "Angre festing på profilen", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Utelukk forslaget", "suggestions.header": "Du er kanskje interessert i …", "tabs_bar.federated_timeline": "Felles", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index fa3ef396769..66ef6c76f7f 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -24,6 +24,7 @@ "account.follows_you": "Vos sèc", "account.hide_reblogs": "Rescondre los partatges de @{name}", "account.joined": "Arribèt en {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "La proprietat d’aqueste ligam foguèt verificada lo {date}", "account.locked_info": "L’estatut de privacitat del compte es configurat sus clavat. Lo proprietari causís qual pòt sègre son compte.", "account.media": "Mèdias", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Pas disponible", "status.unmute_conversation": "Tornar mostrar la conversacion", "status.unpin": "Tirar del perfil", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Regetar la suggestion", "suggestions.header": "Vos poiriá interessar…", "tabs_bar.federated_timeline": "Flux public global", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index c77444bffc7..bde5388c627 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -24,6 +24,7 @@ "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", "account.joined": "Joined {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index e264f80550a..d68c2aaa115 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -24,6 +24,7 @@ "account.follows_you": "Śledzi Cię", "account.hide_reblogs": "Ukryj podbicia od @{name}", "account.joined": "Dołączył(a) {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Własność tego odnośnika została potwierdzona {date}", "account.locked_info": "To konto jest prywatne. Właściciel ręcznie wybiera kto może go śledzić.", "account.media": "Zawartość multimedialna", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Niedostępne", "status.unmute_conversation": "Cofnij wyciszenie konwersacji", "status.unpin": "Odepnij z profilu", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Odrzuć sugestię", "suggestions.header": "Może Cię zainteresować…", "tabs_bar.federated_timeline": "Globalne", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index ab1443eceaa..ba349524e47 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -24,6 +24,7 @@ "account.follows_you": "te segue", "account.hide_reblogs": "Ocultar boosts de @{name}", "account.joined": "Entrou em {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "link verificado em {date}", "account.locked_info": "Trancado. Seguir requer aprovação manual do perfil.", "account.media": "Mídia", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Não disponível", "status.unmute_conversation": "Dessilenciar conversa", "status.unpin": "Desafixar", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Ignorar sugestão", "suggestions.header": "Talvez seja do teu interesse…", "tabs_bar.federated_timeline": "Linha global", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 15fb991bdd2..d03e6657221 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -24,6 +24,7 @@ "account.follows_you": "Segue-te", "account.hide_reblogs": "Esconder partilhas de @{name}", "account.joined": "Ingressou em {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "A posse deste link foi verificada em {date}", "account.locked_info": "Esta conta é privada. O proprietário revê manualmente quem a pode seguir.", "account.media": "Média", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Não disponível", "status.unmute_conversation": "Deixar de silenciar esta conversa", "status.unpin": "Não fixar no perfil", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dispensar a sugestão", "suggestions.header": "Tu podes estar interessado em…", "tabs_bar.federated_timeline": "Federada", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index ff5ec9b2afd..626a8a1ed6a 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -24,6 +24,7 @@ "account.follows_you": "Este abonat la tine", "account.hide_reblogs": "Ascunde distribuirile de la @{name}", "account.joined": "S-a înscris în {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Proprietatea acestui link a fost verificată pe {date}", "account.locked_info": "Acest profil este privat. Această persoană aprobă manual conturile care se abonează la ea.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Indisponibil", "status.unmute_conversation": "Repornește conversația", "status.unpin": "Eliberează din profil", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Omite sugestia", "suggestions.header": "Ai putea fi interesat de…", "tabs_bar.federated_timeline": "Global", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 4c277544b10..51e2d61595e 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -24,6 +24,7 @@ "account.follows_you": "Подписан(а) на вас", "account.hide_reblogs": "Скрыть продвижения от @{name}", "account.joined": "Зарегистрирован(а) с {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Владение этой ссылкой было проверено {date}", "account.locked_info": "Это закрытый аккаунт. Его владелец вручную одобряет подписчиков.", "account.media": "Медиа", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Невозможно отобразить файл", "status.unmute_conversation": "Не игнорировать обсуждение", "status.unpin": "Открепить от профиля", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Удалить предложение", "suggestions.header": "Вам может быть интересно…", "tabs_bar.federated_timeline": "Глобальная", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index 2ebda63cde2..e3037bde045 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -24,6 +24,7 @@ "account.follows_you": "त्वामनुसरति", "account.hide_reblogs": "@{name} मित्रस्य प्रकाशनानि छिद्यन्ताम्", "account.joined": "Joined {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "अन्तर्जालस्थानस्यास्य स्वामित्वं परीक्षितमासीत् {date} दिने", "account.locked_info": "एतस्या लेखायाः गुह्यता \"निषिद्ध\"इति वर्तते । स्वामी स्वयञ्चिनोति कोऽनुसर्ता भवितुमर्हतीति ।", "account.media": "सामग्री", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 7482d15fe2e..4264eaacfdb 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -24,6 +24,7 @@ "account.follows_you": "Ti sighit", "account.hide_reblogs": "Cua is cumpartziduras de @{name}", "account.joined": "At aderidu su {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Sa propiedade de custu ligòngiu est istada controllada su {date}", "account.locked_info": "S'istadu de riservadesa de custu contu est istadu cunfiguradu comente blocadu. Sa persone chi tenet sa propiedade revisionat a manu chie dda podet sighire.", "account.media": "Cuntenutu multimediale", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "No est a disponimentu", "status.unmute_conversation": "Torra a ativare s'arresonada", "status.unpin": "Boga dae pitzu de su profilu", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Iscarta cussìgiu", "suggestions.header": "Est possìbile chi tèngias interessu in…", "tabs_bar.federated_timeline": "Federada", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 170c34b5779..3a26e967a45 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -24,7 +24,8 @@ "account.follows_you": "ඔබව අනුගමනය කරයි", "account.hide_reblogs": "@{name}සිට බූස්ට් සඟවන්න", "account.joined": "{date} එක් වී ඇත", - "account.link_verified_on": "මෙම සබැඳියේ හිමිකාරිත්වය {date} දින පරීක්ෂා කරන ලදී", + "account.languages": "Change subscribed languages", + "account.link_verified_on": "මෙම සබැඳියේ අයිතිය {date} දී පරීක්‍ෂා කෙරිණි", "account.locked_info": "මෙම ගිණුමේ රහස්‍යතා තත්ත්වය අගුලු දමා ඇත. හිමිකරු ඔවුන් අනුගමනය කළ හැක්කේ කාටදැයි හස්තීයව සමාලෝචනය කරයි.", "account.media": "මාධ්‍යය", "account.mention": "@{name} සැඳහුම", @@ -32,7 +33,7 @@ "account.mute": "@{name} නිහඬ කරන්න", "account.mute_notifications": "@{name}වෙතින් දැනුම්දීම් නිහඬ කරන්න", "account.muted": "නිහඬ කළා", - "account.posts": "ටූට්ස්", + "account.posts": "ලිපි", "account.posts_with_replies": "ටූට්ස් සහ පිළිතුරු", "account.report": "@{name} වාර්තා කරන්න", "account.requested": "අනුමැතිය බලාපොරොත්තුවෙන්", @@ -41,19 +42,19 @@ "account.statuses_counter": "{count, plural, one {{counter} ටූට්} other {{counter} ටූට්ස්}}", "account.unblock": "@{name} අනවහිර කරන්න", "account.unblock_domain": "{domain} වසම අනවහිර කරන්න", - "account.unblock_short": "අවහිර කිරීම ඉවත් කරන්න", + "account.unblock_short": "අනවහිර", "account.unendorse": "පැතිකඩෙහි විශේෂාංග නොකරන්න", "account.unfollow": "අනුගමනය නොකරන්න", "account.unmute": "@{name}නිහඬ නොකරන්න", "account.unmute_notifications": "@{name}වෙතින් දැනුම්දීම් නිහඬ නොකරන්න", - "account.unmute_short": "නිහඬ නොකරන්න", - "account_note.placeholder": "සටහන එකතු කිරීමට ක්ලික් කරන්න", + "account.unmute_short": "නොනිහඬ", + "account_note.placeholder": "සටහන යෙදීමට ඔබන්න", "admin.dashboard.daily_retention": "ලියාපදිංචි වීමෙන් පසු දිනකට පරිශීලක රඳවා ගැනීමේ අනුපාතය", "admin.dashboard.monthly_retention": "ලියාපදිංචි වීමෙන් පසු මාසය අනුව පරිශීලක රඳවා ගැනීමේ අනුපාතය", "admin.dashboard.retention.average": "සාමාන්යය", "admin.dashboard.retention.cohort": "ලියාපදිංචි වීමේ මාසය", "admin.dashboard.retention.cohort_size": "නව පරිශීලකයින්", - "alert.rate_limited.message": "කරුණාකර {retry_time, time, medium} ට පසු නැවත උත්සාහ කරන්න.", + "alert.rate_limited.message": "{retry_time, time, medium} කට පසුව උත්සාහ කරන්න.", "alert.rate_limited.title": "මිල සීමා සහිතයි", "alert.unexpected.message": "අනපේක්ෂිත දෝෂයක් ඇතිවුනා.", "alert.unexpected.title": "අපොයි!", @@ -77,23 +78,23 @@ "column.favourites": "ප්‍රියතමයන්", "column.follow_requests": "ඉල්ලීම් අනුගමනය කරන්න", "column.home": "මුල් පිටුව", - "column.lists": "ලැයිස්තුව", - "column.mutes": "සමඟ කළ පරිශීලකයන්", + "column.lists": "ලේඛන", + "column.mutes": "නිහඬ කළ අය", "column.notifications": "දැනුම්දීම්", - "column.pins": "පින් කළ දත", + "column.pins": "ඇමිණූ ලිපි", "column.public": "ෆෙඩරේටඩ් කාලරේඛාව", "column_back_button.label": "ආපසු", "column_header.hide_settings": "සැකසුම් සඟවන්න", "column_header.moveLeft_settings": "තීරුව වමට ගෙනයන්න", "column_header.moveRight_settings": "තීරුව දකුණට ගෙනයන්න", - "column_header.pin": "පින් කරන්න", + "column_header.pin": "අමුණන්න", "column_header.show_settings": "සැකසුම් පෙන්වන්න", - "column_header.unpin": "ඇමුණුම ඉවත් කරන්න", + "column_header.unpin": "ගළවන්න", "column_subheading.settings": "සැකසුම්", "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_form.direct_message_warning_learn_more": "තව දැනගන්න", "compose_form.encryption_warning": "Mastodon හි පළ කිරීම් අන්තයේ සිට අවසානය දක්වා සංකේතනය කර නොමැත. Mastodon හරහා කිසිදු සංවේදී තොරතුරක් බෙදා නොගන්න.", @@ -101,13 +102,13 @@ "compose_form.lock_disclaimer": "ඔබගේ ගිණුම {locked}නොවේ. ඔබගේ අනුගාමිකයින්ට පමණක් පළ කිරීම් බැලීමට ඕනෑම කෙනෙකුට ඔබව අනුගමනය කළ හැක.", "compose_form.lock_disclaimer.lock": "අගුළු දමා ඇත", "compose_form.placeholder": "ඔබගේ සිතුවිලි මොනවාද?", - "compose_form.poll.add_option": "තේරීමක් එකතු කරන්න", + "compose_form.poll.add_option": "තේරීමක් යොදන්න", "compose_form.poll.duration": "මත විමසීමේ කාලය", "compose_form.poll.option_placeholder": "තේරීම {number}", "compose_form.poll.remove_option": "මෙම ඉවත් කරන්න", "compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයක් ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", "compose_form.poll.switch_to_single": "තනි තේරීමකට ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", - "compose_form.publish": "ප්‍රකාශ කරන්න", + "compose_form.publish": "ප්‍රකාශනය", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "වෙනස්කම් සුරකින්න", "compose_form.sensitive.hide": "{count, plural, one {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න} other {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න}}", @@ -115,11 +116,11 @@ "compose_form.sensitive.unmarked": "{count, plural, one {මාධ්‍ය සංවේදී ලෙස සලකුණු කර නැත} other {මාධ්‍ය සංවේදී ලෙස සලකුණු කර නැත}}", "compose_form.spoiler.marked": "අනතුරු ඇඟවීම පිටුපස පෙළ සඟවා ඇත", "compose_form.spoiler.unmarked": "ප්‍රයෝජනය සඟවා නැත", - "compose_form.spoiler_placeholder": "ඔබගේ අවවාදය මෙහි ලියන්න", + "compose_form.spoiler_placeholder": "අවවාදය මෙහි ලියන්න", "confirmation_modal.cancel": "අවලංගු", "confirmations.block.block_and_report": "අවහිර කර වාර්තා කරන්න", "confirmations.block.confirm": "අවහිර", - "confirmations.block.message": "ඔබට {name} අවහිර කිරීමට අවශ්‍ය බව ද?", + "confirmations.block.message": "ඔබට {name} අවහිර කිරීමට වුවමනා ද?", "confirmations.delete.confirm": "මකන්න", "confirmations.delete.message": "ඔබට මෙම තත්ත්වය මැකීමට අවශ්‍ය බව විශ්වාසද?", "confirmations.delete_list.confirm": "මකන්න", @@ -140,23 +141,23 @@ "confirmations.unfollow.confirm": "අනුගමනය නොකරන්න", "confirmations.unfollow.message": "ඔබට {name}අනුගමනය නොකිරීමට අවශ්‍ය බව විශ්වාසද?", "conversation.delete": "සංවාදය මකන්න", - "conversation.mark_as_read": "කියවූ ලෙස සලකුණු කරන්න", + "conversation.mark_as_read": "කියවූ බව යොදන්න", "conversation.open": "සංවාදය බලන්න", "conversation.with": "{names} සමඟ", "directory.federated": "දන්නා fediverse වලින්", - "directory.local": "{domain} පමණි", + "directory.local": "{domain} වෙතින් පමණි", "directory.new_arrivals": "නව පැමිණීම්", - "directory.recently_active": "මෑතකදී ක්රියාකාරී", + "directory.recently_active": "මෑත දී සක්‍රියයි", "embed.instructions": "පහත කේතය පිටපත් කිරීමෙන් මෙම තත්ත්වය ඔබේ වෙබ් අඩවියට ඇතුළත් කරන්න.", "embed.preview": "එය පෙනෙන්නේ කෙසේද යන්න මෙන්න:", "emoji_button.activity": "ක්‍රියාකාරකම", - "emoji_button.clear": "පැහැදිලිව", + "emoji_button.clear": "මකන්න", "emoji_button.custom": "අභිරුචි", "emoji_button.flags": "කොඩි", "emoji_button.food": "ආහාර සහ පාන", - "emoji_button.label": "ඉමොජි ඇතුළු කරන්න", + "emoji_button.label": "ඉමොජි යොදන්න", "emoji_button.nature": "ස්වභාවික", - "emoji_button.not_found": "ගැළපෙන ඉමෝජි හමු නොවීය", + "emoji_button.not_found": "ගැළපෙන ඉමෝජි හමු නොවිණි", "emoji_button.objects": "වස්තූන්", "emoji_button.people": "මිනිසුන්", "emoji_button.recent": "නිතර භාවිතා වූ", @@ -166,12 +167,12 @@ "emoji_button.travel": "චාරිකා සහ ස්ථාන", "empty_column.account_suspended": "ගිණුම අත්හිටුවා ඇත", "empty_column.account_timeline": "මෙහි දත් නැත!", - "empty_column.account_unavailable": "පැතිකඩ නොමැත", - "empty_column.blocks": "ඔබ තවමත් කිසිදු පරිශීලකයෙකු අවහිර කර නැත.", + "empty_column.account_unavailable": "පැතිකඩ නොතිබේ", + "empty_column.blocks": "කිසිදු පරිශීලකයෙකු අවහිර කර නැත.", "empty_column.bookmarked_statuses": "ඔබට තවමත් පිටු සලකුණු කළ මෙවලම් කිසිවක් නොමැත. ඔබ එකක් පිටු සලකුණු කළ විට, එය මෙහි පෙන්වනු ඇත.", "empty_column.community": "දේශීය කාලරේඛාව හිස් ය. පන්දුව පෙරළීමට ප්‍රසිද්ධියේ යමක් ලියන්න!", "empty_column.direct": "ඔබට තවමත් සෘජු පණිවිඩ කිසිවක් නොමැත. ඔබ එකක් යවන විට හෝ ලැබුණු විට, එය මෙහි පෙන්වනු ඇත.", - "empty_column.domain_blocks": "අවහිර කළ වසම් නොමැත.", + "empty_column.domain_blocks": "අවහිර කරන ලද වසම් නැත.", "empty_column.explore_statuses": "දැන් කිසිවක් නැඹුරු නොවේ. පසුව නැවත පරීක්ෂා කරන්න!", "empty_column.favourited_statuses": "ඔබට තවමත් ප්‍රියතම දත් කිසිවක් නැත. ඔබ කැමති එකක් වූ විට, එය මෙහි පෙන්වනු ඇත.", "empty_column.favourites": "කිසිවෙකු තවමත් මෙම මෙවලමට ප්‍රිය කර නැත. යමෙකු එසේ කළ විට, ඔවුන් මෙහි පෙන්වනු ඇත.", @@ -190,50 +191,50 @@ "error.unexpected_crash.next_steps": "පිටුව නැවුම් කිරීමට උත්සාහ කරන්න. එය උදව් නොකළහොත්, ඔබට තවමත් වෙනත් බ්‍රවුසරයක් හෝ ස්වදේශීය යෙදුමක් හරහා Mastodon භාවිත කිරීමට හැකි වේ.", "error.unexpected_crash.next_steps_addons": "ඒවා අක්‍රිය කර පිටුව නැවුම් කිරීමට උත්සාහ කරන්න. එය උදව් නොකළහොත්, ඔබට තවමත් වෙනත් බ්‍රවුසරයක් හෝ ස්වදේශීය යෙදුමක් හරහා Mastodon භාවිත කිරීමට හැකි වේ.", "errors.unexpected_crash.copy_stacktrace": "ස්ටැක්ට්රේස් පසුරු පුවරුවට පිටපත් කරන්න", - "errors.unexpected_crash.report_issue": "ගැටලුව වාර්තා කරන්න", + "errors.unexpected_crash.report_issue": "ගැටළුව වාර්තාව", "explore.search_results": "සෙවුම් ප්‍රතිඵල", - "explore.suggested_follows": "ඔයා වෙනුවෙන්", - "explore.title": "ගවේෂණය කරන්න", + "explore.suggested_follows": "ඔබට", + "explore.title": "ගවේශණය", "explore.trending_links": "පුවත්", - "explore.trending_statuses": "තනතුරු", + "explore.trending_statuses": "ලිපි", "explore.trending_tags": "හැෂ් ටැග්", "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", "filter_modal.added.context_mismatch_title": "Context mismatch!", "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.expired_title": "පෙරහන ඉකුත්ය!", "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", + "filter_modal.added.review_and_configure_title": "පෙරහන් සැකසුම්", + "filter_modal.added.settings_link": "සැකසුම් පිටුව", "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", "filter_modal.added.title": "Filter added!", "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", + "filter_modal.select_filter.expired": "ඉකුත්ය", + "filter_modal.select_filter.prompt_new": "නව ප්‍රවර්ගය: {name}", + "filter_modal.select_filter.search": "සොයන්න හෝ සාදන්න", "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", "filter_modal.select_filter.title": "Filter this post", "filter_modal.title.status": "Filter a post", - "follow_recommendations.done": "කළා", + "follow_recommendations.done": "අහවරයි", "follow_recommendations.heading": "ඔබ පළ කිරීම් බැලීමට කැමති පුද්ගලයින් අනුගමනය කරන්න! මෙන්න යෝජනා කිහිපයක්.", "follow_recommendations.lead": "ඔබ අනුගමන කරන පුද්ගලයින්ගේ පළ කිරීම් ඔබගේ නිවසේ සංග්‍රහයේ කාලානුක්‍රමික අනුපිළිවෙලට පෙන්වනු ඇත. වැරදි කිරීමට බිය නොවන්න, ඔබට ඕනෑම වේලාවක පහසුවෙන් මිනිසුන් අනුගමනය කළ නොහැක!", "follow_request.authorize": "අවසරලත්", - "follow_request.reject": "ප්රතික්ෂේප", + "follow_request.reject": "ප්‍රතික්‍ෂේප", "follow_requests.unlocked_explanation": "ඔබගේ ගිණුම අගුලු දමා නොතිබුණද, {domain} කාර්ය මණ්ඩලය සිතුවේ ඔබට මෙම ගිණුම් වලින් ලැබෙන ඉල්ලීම් හස්තීයව සමාලෝචනය කිරීමට අවශ්‍ය විය හැකි බවයි.", "generic.saved": "සුරැකිණි", "getting_started.developers": "සංවර්ධකයින්", "getting_started.directory": "පැතිකඩ නාමාවලිය", "getting_started.documentation": "ප්‍රලේඛනය", "getting_started.heading": "ඇරඹේ", - "getting_started.invite": "මිනිසුන්ට ආරාධනා කරන්න", + "getting_started.invite": "මිනිසුන්ට ආරාධනය", "getting_started.open_source_notice": "Mastodon යනු විවෘත කේත මෘදුකාංගයකි. ඔබට GitHub හි {github}ට දායක වීමට හෝ ගැටළු වාර්තා කිරීමට හැකිය.", "getting_started.security": "ගිණුමේ සැකසුම්", "getting_started.terms": "සේවාවේ කොන්දේසි", "hashtag.column_header.tag_mode.all": "සහ {additional}", "hashtag.column_header.tag_mode.any": "හෝ {additional}", "hashtag.column_header.tag_mode.none": "{additional}නොමැතිව", - "hashtag.column_settings.select.no_options_message": "යෝජනා කිසිවක් හමු නොවිණි", + "hashtag.column_settings.select.no_options_message": "යෝජනා හමු නොවිණි", "hashtag.column_settings.select.placeholder": "හැෂ් ටැග්…ඇතුලත් කරන්න", - "hashtag.column_settings.tag_mode.all": "මේ වගේ", + "hashtag.column_settings.tag_mode.all": "මේ සියල්ලම", "hashtag.column_settings.tag_mode.any": "ඇතුළත් එකක්", "hashtag.column_settings.tag_mode.none": "මේ කිසිවක් නැත", "hashtag.column_settings.tag_toggle": "මෙම තීරුවේ අමතර ටැග් ඇතුළත් කරන්න", @@ -242,7 +243,7 @@ "hashtag.unfollow": "Unfollow hashtag", "home.column_settings.basic": "මූලික", "home.column_settings.show_reblogs": "බූස්ට් පෙන්වන්න", - "home.column_settings.show_replies": "ප්රතිචාර පෙන්වන්න", + "home.column_settings.show_replies": "පිළිතුරු පෙන්වන්න", "home.hide_announcements": "නිවේදන සඟවන්න", "home.show_announcements": "නිවේදන පෙන්වන්න", "intervals.full.days": "{number, plural, one {# දින} other {# දින}}", @@ -262,7 +263,7 @@ "keyboard_shortcuts.federated": "ෆෙඩරේටඩ් කාලරාමුව විවෘත කිරීමට", "keyboard_shortcuts.heading": "යතුරුපුවරු කෙටිමං", "keyboard_shortcuts.home": "නිවසේ කාලරේඛාව විවෘත කිරීමට", - "keyboard_shortcuts.hotkey": "උණුසුම් යතුර", + "keyboard_shortcuts.hotkey": "උණු යතුර", "keyboard_shortcuts.legend": "මෙම පුරාවෘත්තය ප්රදර්ශනය කිරීමට", "keyboard_shortcuts.local": "දේශීය කාලරේඛාව විවෘත කිරීමට", "keyboard_shortcuts.mention": "කතුවරයා සඳහන් කිරීමට", @@ -289,10 +290,10 @@ "lightbox.previous": "පෙර", "limited_account_hint.action": "කෙසේ හෝ පැතිකඩ පෙන්වන්න", "limited_account_hint.title": "මෙම පැතිකඩ ඔබගේ සේවාදායකයේ පරිපාලකයින් විසින් සඟවා ඇත.", - "lists.account.add": "ලැයිස්තුවට එකතු කරන්න", - "lists.account.remove": "ලැයිස්තුවෙන් ඉවත්", - "lists.delete": "ලැයිස්තුව මකන්න", - "lists.edit": "ලැයිස්තුව සංස්කරණය කරන්න", + "lists.account.add": "ලේඛනයට දමන්න", + "lists.account.remove": "ලේඛනයෙන් ඉවතලන්න", + "lists.delete": "ලේඛනය මකන්න", + "lists.edit": "ලේඛනය සංස්කරණය", "lists.edit.submit": "මාතෘකාව වෙනස් කරන්න", "lists.new.create": "ලැයිස්තුව එකතු කරන්න", "lists.new.title_placeholder": "නව ලැයිස්තු මාතෘකාව", @@ -301,37 +302,37 @@ "lists.replies_policy.none": "කිසිවෙක් නැත", "lists.replies_policy.title": "පිළිතුරු පෙන්වන්න:", "lists.search": "ඔබ අනුගමනය කරන පුද්ගලයින් අතර සොයන්න", - "lists.subheading": "ඔබේ ලැයිස්තු", + "lists.subheading": "ඔබගේ ලේඛන", "load_pending": "{count, plural, one {# නව අයිතමයක්} other {නව අයිතම #ක්}}", "loading_indicator.label": "පූරණය වෙමින්...", "media_gallery.toggle_visible": "{number, plural, one {රූපය සඟවන්න} other {පින්තූර සඟවන්න}}", - "missing_indicator.label": "හමු වුණේ නැහැ", - "missing_indicator.sublabel": "මෙම සම්පත සොයාගත නොහැකි විය", - "mute_modal.duration": "කාල සීමාව", + "missing_indicator.label": "හමු නොවිණි", + "missing_indicator.sublabel": "මෙම සම්පත හමු නොවිණි", + "mute_modal.duration": "පරාසය", "mute_modal.hide_notifications": "මෙම පරිශීලකයාගෙන් දැනුම්දීම් සඟවන්නද?", "mute_modal.indefinite": "අවිනිශ්චිත", "navigation_bar.apps": "ජංගම යෙදුම්", - "navigation_bar.blocks": "අවහිර කළ පරිශීලකයින්", - "navigation_bar.bookmarks": "පොත් යොමු කරන්න", + "navigation_bar.blocks": "අවහිර කළ අය", + "navigation_bar.bookmarks": "පොත්යොමු", "navigation_bar.community_timeline": "දේශීය කාලරේඛාව", "navigation_bar.compose": "නව ටූට් සාදන්න", "navigation_bar.direct": "සෘජු පණිවිඩ", "navigation_bar.discover": "සොයා ගන්න", - "navigation_bar.domain_blocks": "සැඟවුණු වසම්", + "navigation_bar.domain_blocks": "අවහිර කළ වසම්", "navigation_bar.edit_profile": "පැතිකඩ සංස්කරණය", "navigation_bar.explore": "ගවේෂණය කරන්න", "navigation_bar.favourites": "ප්‍රියතමයන්", - "navigation_bar.filters": "සමඟ කළ වචන", - "navigation_bar.follow_requests": "ඉල්ලීම් අනුගමනය කරන්න", - "navigation_bar.follows_and_followers": "අනුගාමිකයින් සහ අනුගාමිකයින්", - "navigation_bar.info": "මෙම සේවාදායකය පිළිබඳව", - "navigation_bar.keyboard_shortcuts": "උණුසුම් යතුරු", - "navigation_bar.lists": "ලැයිස්තු", + "navigation_bar.filters": "නිහඬ කළ වචන", + "navigation_bar.follow_requests": "අනුගමන ඉල්ලීම්", + "navigation_bar.follows_and_followers": "අනුගමනය හා අනුගාමිකයින්", + "navigation_bar.info": "මෙම සේවාදායකය ගැන", + "navigation_bar.keyboard_shortcuts": "උණු යතුරු", + "navigation_bar.lists": "ලේඛන", "navigation_bar.logout": "නික්මෙන්න", - "navigation_bar.mutes": "නිශ්ශබ්ද පරිශීලකයන්", + "navigation_bar.mutes": "නිහඬ කළ අය", "navigation_bar.personal": "පුද්ගලික", - "navigation_bar.pins": "ඇලවූ දත්", - "navigation_bar.preferences": "මනාප", + "navigation_bar.pins": "ඇමිණූ ලිපි", + "navigation_bar.preferences": "අභිප්‍රේත", "navigation_bar.public_timeline": "ෆෙඩරේටඩ් කාලරේඛාව", "navigation_bar.security": "ආරක්ෂාව", "notification.admin.report": "{name} වාර්තා {target}", @@ -340,46 +341,46 @@ "notification.follow": "{name} ඔබව අනුගමනය කළා", "notification.follow_request": "{name} ඔබව අනුගමනය කිරීමට ඉල්ලා ඇත", "notification.mention": "{name} ඔබව සඳහන් කර ඇත", - "notification.own_poll": "ඔබේ මත විමසුම අවසන් වී ඇත", - "notification.poll": "ඔබ ඡන්දය දුන් මත විමසුමක් අවසන් වී ඇත", + "notification.own_poll": "ඔබගේ මත විමසුම නිමයි", + "notification.poll": "ඔබ ඡන්දය දුන් මත විමසුමක් නිමයි", "notification.reblog": "{name} ඔබේ තත්ත්වය ඉහළ නැංවීය", "notification.status": "{name} දැන් පළ කළා", "notification.update": "{name} පළ කිරීමක් සංස්කරණය කළා", - "notifications.clear": "දැනුම්දීම් හිස්කරන්න", + "notifications.clear": "දැනුම්දීම් මකන්න", "notifications.clear_confirmation": "ඔබට ඔබගේ සියලු දැනුම්දීම් ස්ථිරවම හිස් කිරීමට අවශ්‍ය බව විශ්වාසද?", "notifications.column_settings.admin.report": "නව වාර්තා:", - "notifications.column_settings.admin.sign_up": "නව ලියාපදිංචි කිරීම්:", - "notifications.column_settings.alert": "ඩෙස්ක්ටොප් දැනුම්දීම්", + "notifications.column_settings.admin.sign_up": "නව ලියාපදිංචි:", + "notifications.column_settings.alert": "වැඩතල දැනුම්දීම්", "notifications.column_settings.favourite": "ප්‍රියතමයන්:", - "notifications.column_settings.filter_bar.advanced": "සියලුම කාණ්ඩ පෙන්වන්න", + "notifications.column_settings.filter_bar.advanced": "සියළු ප්‍රවර්ග පෙන්වන්න", "notifications.column_settings.filter_bar.category": "ඉක්මන් පෙරහන් තීරුව", "notifications.column_settings.filter_bar.show_bar": "පෙරහන් තීරුව පෙන්වන්න", "notifications.column_settings.follow": "නව අනුගාමිකයින්:", - "notifications.column_settings.follow_request": "නව පහත ඉල්ලීම්:", + "notifications.column_settings.follow_request": "නව අනුගමන ඉල්ලීම්:", "notifications.column_settings.mention": "සැඳහුම්:", "notifications.column_settings.poll": "ඡන්ද ප්‍රතිඵල:", "notifications.column_settings.push": "තල්ලු දැනුම්දීම්", "notifications.column_settings.reblog": "තල්ලු කිරීම්:", "notifications.column_settings.show": "තීරුවෙහි පෙන්වන්න", - "notifications.column_settings.sound": "ශබ්දය සිදු කරන ලදී", - "notifications.column_settings.status": "නව දත්:", + "notifications.column_settings.sound": "ශබ්දය වාදනය", + "notifications.column_settings.status": "නව ලිපි:", "notifications.column_settings.unread_notifications.category": "නොකියවූ දැනුම්දීම්", "notifications.column_settings.unread_notifications.highlight": "නොකියවූ දැනුම්දීම් ඉස්මතු කරන්න", - "notifications.column_settings.update": "සංස්කරණ:", + "notifications.column_settings.update": "සංශෝධන:", "notifications.filter.all": "සියල්ල", "notifications.filter.boosts": "බූස්ට් කරයි", "notifications.filter.favourites": "ප්‍රියතමයන්", - "notifications.filter.follows": "පහත සඳහන්", + "notifications.filter.follows": "අනුගමනය", "notifications.filter.mentions": "සැඳහුම්", "notifications.filter.polls": "ඡන්ද ප්‍රතිඵල", "notifications.filter.statuses": "ඔබ අනුගමනය කරන පුද්ගලයින්ගෙන් යාවත්කාලීන", "notifications.grant_permission": "අවසර දෙන්න.", "notifications.group": "දැනුම්දීම් {count}", - "notifications.mark_as_read": "දැනුම්දීමක්ම කියවූ ලෙස සලකුණු කරන්න", + "notifications.mark_as_read": "සියළු දැනුම්දීම් කියවූ බව යොදන්න", "notifications.permission_denied": "කලින් ප්‍රතික්ෂේප කළ බ්‍රවුසර අවසර ඉල්ලීම හේතුවෙන් ඩෙස්ක්ටොප් දැනුම්දීම් නොමැත", "notifications.permission_denied_alert": "බ්‍රවුසර අවසරය පෙර ප්‍රතික්ෂේප කර ඇති බැවින්, ඩෙස්ක්ටොප් දැනුම්දීම් සබල කළ නොහැක", "notifications.permission_required": "අවශ්‍ය අවසරය ලබා දී නොමැති නිසා ඩෙස්ක්ටොප් දැනුම්දීම් නොමැත.", - "notifications_permission_banner.enable": "ඩෙස්ක්ටොප් දැනුම්දීම් සබල කරන්න", + "notifications_permission_banner.enable": "වැඩතල දැනුම්දීම් සබල කරන්න", "notifications_permission_banner.how_to_control": "Mastodon විවෘතව නොමැති විට දැනුම්දීම් ලබා ගැනීමට, ඩෙස්ක්ටොප් දැනුම්දීම් සබල කරන්න. ඔබට ඒවා සක්‍රිය කළ පසු ඉහත {icon} බොත්තම හරහා ඩෙස්ක්ටොප් දැනුම්දීම් ජනනය කරන්නේ කුමන ආකාරයේ අන්තර්ක්‍රියාද යන්න නිවැරදිව පාලනය කළ හැක.", "notifications_permission_banner.title": "කිසිම දෙයක් අතපසු කරන්න එපා", "picture_in_picture.restore": "ආපහු දාන්න", @@ -387,59 +388,59 @@ "poll.refresh": "නැවුම් කරන්න", "poll.total_people": "{count, plural, one {# පුද්ගලයා} other {# මහජන}}", "poll.total_votes": "{count, plural, one {# ඡන්දය} other {ඡන්ද #}}", - "poll.vote": "මනාපය", + "poll.vote": "ඡන්දය", "poll.voted": "ඔබ මෙම පිළිතුරට ඡන්දය දුන්නා", "poll.votes": "{votes, plural, one {# ඡන්දය} other {ඡන්ද #}}", - "poll_button.add_poll": "මත විමසුමක් එක් කරන්න", - "poll_button.remove_poll": "ඡන්ද විමසීම ඉවත් කරන්න", - "privacy.change": "තත්ත්‍වයේ පෞද්ගලිකත්වය සීරුමාරු කරන්න", - "privacy.direct.long": "සඳහන් කළ පරිශීලකයින් සඳහා පමණක් දෘශ්‍යමාන වේ", - "privacy.direct.short": "සඳහන් කළ පුද්ගලයන් පමණි", - "privacy.private.long": "අනුගාමිකයින් සඳහා පමණක් දෘශ්‍යමාන වේ", + "poll_button.add_poll": "මත විමසුමක් යොදන්න", + "poll_button.remove_poll": "මත විමසුම ඉවතලන්න", + "privacy.change": "ලිපියේ රහස්‍යතාව සංශෝධනය", + "privacy.direct.long": "සඳහන් කළ අයට දිස්වෙයි", + "privacy.direct.short": "සඳහන් කළ අයට පමණි", + "privacy.private.long": "අනුගාමිකයින්ට දිස්වේ", "privacy.private.short": "අනුගාමිකයින් පමණි", - "privacy.public.long": "සැමට දෘශ්‍යමානයි", - "privacy.public.short": "ප්රසිද්ධ", + "privacy.public.long": "සැමට දිස්වෙයි", + "privacy.public.short": "ප්‍රසිද්ධ", "privacy.unlisted.long": "සැමට දෘශ්‍යමාන, නමුත් සොයාගැනීමේ විශේෂාංග වලින් ඉවත් විය", "privacy.unlisted.short": "ලැයිස්තුගත නොකළ", "refresh": "නැවුම් කරන්න", "regeneration_indicator.label": "පූරණය වෙමින්…", "regeneration_indicator.sublabel": "ඔබේ නිවසේ පෝෂණය සූදානම් වෙමින් පවතී!", - "relative_time.days": "{number}d", + "relative_time.days": "ද. {number}", "relative_time.full.days": "{number, plural, one {# දින} other {# දින}} පෙර", - "relative_time.full.hours": "{number, plural, one {# පැය} other {# පැය}} පෙර", + "relative_time.full.hours": "{number, plural, one {පැය #} other {පැය #}} කට පෙර", "relative_time.full.just_now": "මේ දැන්", - "relative_time.full.minutes": "{number, plural, one {විනාඩි #} other {# මිනිත්තු}} පෙර", - "relative_time.full.seconds": "{number, plural, one {# දෙවැනි} other {# තත්පර}} පෙර", + "relative_time.full.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}} කට පෙර", + "relative_time.full.seconds": "{number, plural, one {තත්පර #} other {තත්පර #}} කට පෙර", "relative_time.hours": "පැය {number}", "relative_time.just_now": "දැන්", - "relative_time.minutes": "මීටර් {number}", - "relative_time.seconds": "{number}තත්", + "relative_time.minutes": "වි. {number}", + "relative_time.seconds": "තත්. {number}", "relative_time.today": "අද", "reply_indicator.cancel": "අවලංගු කරන්න", - "report.block": "අවහිර කරන්න", + "report.block": "අවහිර", "report.block_explanation": "ඔබට ඔවුන්ගේ පෝස්ට් නොපෙනේ. ඔවුන්ට ඔබේ පළ කිරීම් බැලීමට හෝ ඔබව අනුගමනය කිරීමට නොහැකි වනු ඇත. ඔවුන් අවහිර කර ඇති බව ඔවුන්ට පැවසිය හැකිය.", "report.categories.other": "වෙනත්", - "report.categories.spam": "ආයාචිත තැපැල්", + "report.categories.spam": "ආයාචිත", "report.categories.violation": "අන්තර්ගතය සේවාදායක නීති එකක් හෝ කිහිපයක් උල්ලංඝනය කරයි", "report.category.subtitle": "හොඳම ගැලපීම තෝරන්න", "report.category.title": "මෙම {type}සමඟ සිදුවන්නේ කුමක්දැයි අපට කියන්න", "report.category.title_account": "පැතිකඩ", "report.category.title_status": "තැපැල්", - "report.close": "කළා", + "report.close": "අහවරයි", "report.comment.title": "අප දැනගත යුතු යැයි ඔබ සිතන තවත් යමක් තිබේද?", "report.forward": "{target}වෙත යොමු කරන්න", "report.forward_hint": "ගිණුම වෙනත් සේවාදායකයකින්. වාර්තාවේ නිර්නාමික පිටපතක් එතනටත් එවන්න?", - "report.mute": "නිහඬ කරන්න", + "report.mute": "නිහඬ", "report.mute_explanation": "ඔබට ඔවුන්ගේ පෝස්ට් නොපෙනේ. ඔවුන්ට තවමත් ඔබව අනුගමනය කිරීමට සහ ඔබේ පළ කිරීම් දැකීමට හැකි අතර ඒවා නිශ්ශබ්ද කර ඇති බව නොදැනේ.", "report.next": "ඊළඟ", "report.placeholder": "අමතර අදහස්", - "report.reasons.dislike": "මම ඒකට කැමති නැහැ", + "report.reasons.dislike": "මම එයට අකැමතියි", "report.reasons.dislike_description": "ඒක බලන්න ඕන දෙයක් නෙවෙයි", "report.reasons.other": "ඒක වෙන දෙයක්", "report.reasons.other_description": "ගැටළුව වෙනත් වර්ග වලට නොගැලපේ", - "report.reasons.spam": "එය අයාචිත තැපැල් ය", + "report.reasons.spam": "එය අයාචිතයි", "report.reasons.spam_description": "අනිෂ්ට සබැඳි, ව්‍යාජ නියැලීම, හෝ පුනරාවර්තන පිළිතුරු", - "report.reasons.violation": "එය සේවාදායක නීති උල්ලංඝනය කරයි", + "report.reasons.violation": "එය සේවාදායකයේ නීති කඩ කරයි", "report.reasons.violation_description": "එය නිශ්චිත නීති කඩ කරන බව ඔබ දන්නවා", "report.rules.subtitle": "අදාළ සියල්ල තෝරන්න", "report.rules.title": "කුමන නීති උල්ලංඝනය කරන්නේද?", @@ -449,14 +450,14 @@ "report.target": "වාර්තාව {target}", "report.thanks.take_action": "Mastodon හි ඔබ දකින දේ පාලනය කිරීම සඳහා ඔබේ විකල්ප මෙන්න:", "report.thanks.take_action_actionable": "අපි මෙය සමාලෝචනය කරන අතරතුර, ඔබට @{name}ට එරෙහිව පියවර ගත හැක:", - "report.thanks.title": "මේක බලන්න ඕන නැද්ද?", + "report.thanks.title": "මෙය නොපෙන්විය යුතුද?", "report.thanks.title_actionable": "වාර්තා කිරීමට ස්තූතියි, අපි මේ ගැන සොයා බලමු.", "report.unfollow": "@{name}අනුගමනය නොකරන්න", "report.unfollow_explanation": "ඔබ මෙම ගිණුම අනුගමනය කරයි. ඔබේ නිවසේ සංග්‍රහයේ ඔවුන්ගේ පළ කිරීම් තවදුරටත් නොදැකීමට, ඒවා අනුගමනය නොකරන්න.", "report_notification.attached_statuses": "{count, plural, one {{count} තැපැල්} other {{count} තනතුරු}} අමුණා ඇත", "report_notification.categories.other": "වෙනත්", - "report_notification.categories.spam": "ආයාචිත තැපැල්", - "report_notification.categories.violation": "රීති උල්ලංඝනය කිරීම", + "report_notification.categories.spam": "ආයාචිත", + "report_notification.categories.violation": "නීතිය කඩ කිරීම", "report_notification.open": "විවෘත වාර්තාව", "search.placeholder": "සොයන්න", "search_popout.search_format": "උසස් සෙවුම් ආකෘතිය", @@ -466,63 +467,66 @@ "search_popout.tips.text": "සරල පෙළ ගැළපෙන සංදර්ශක නම්, පරිශීලක නාම සහ හැෂ් ටැග් ලබා දෙයි", "search_popout.tips.user": "පරිශීලක", "search_results.accounts": "මිනිසුන්", - "search_results.all": "සියලුම", + "search_results.all": "සියල්ල", "search_results.hashtags": "හැෂ් ටැග්", "search_results.nothing_found": "මෙම සෙවුම් පද සඳහා කිසිවක් සොයාගත නොහැකි විය", - "search_results.statuses": "ටූට්ස්", + "search_results.statuses": "ලිපි", "search_results.statuses_fts_disabled": "මෙම Mastodon සේවාදායකයේ ඒවායේ අන්තර්ගතය අනුව මෙවලම් සෙවීම සබල නොවේ.", "search_results.total": "{count, number} {count, plural, one {ප්රතිඵලය} other {ප්රතිපල}}", "status.admin_account": "@{name}සඳහා මධ්‍යස්ථ අතුරුමුහුණත විවෘත කරන්න", "status.admin_status": "මධ්‍යස්ථ අතුරුමුහුණතෙහි මෙම තත්ත්වය විවෘත කරන්න", - "status.block": "@{name} අවහිර කරන්න", - "status.bookmark": "පොත් යොමුව", + "status.block": "@{name} අවහිර", + "status.bookmark": "පොත්යොමුවක්", "status.cancel_reblog_private": "Unboost", "status.cannot_reblog": "මෙම තනතුර වැඩි කළ නොහැක", "status.copy": "තත්වයට සබැඳිය පිටපත් කරන්න", "status.delete": "මකන්න", - "status.detailed_status": "සවිස්තරාත්මක සංවාද දසුන", - "status.direct": "@{name} සෘජු පණිවිඩය", - "status.edit": "සංස්කරණය කරන්න", - "status.edited": "සංස්කරණය {date}", - "status.edited_x_times": "සංස්කරණය කළා {count, plural, one {{count} කාලය} other {{count} වාර}}", - "status.embed": "එබ්බවූ", + "status.detailed_status": "විස්තරාත්මක සංවාද දැක්ම", + "status.direct": "@{name} සෘජු පණිවිඩයක්", + "status.edit": "සංස්කරණය", + "status.edited": "සංශෝධිතයි {date}", + "status.edited_x_times": "සංශෝධිතයි {count, plural, one {වාර {count}} other {වාර {count}}}", + "status.embed": "කාවැද්දූ", "status.favourite": "ප්‍රියතම", "status.filter": "Filter this post", "status.filtered": "පෙරන ලද", "status.hide": "Hide toot", "status.history.created": "{name} නිර්මාණය {date}", "status.history.edited": "{name} සංස්කරණය {date}", - "status.load_more": "තව පූරණය කරන්න", - "status.media_hidden": "මාධ්‍ය සංගුවා ඇත", + "status.load_more": "තව පූරණය", + "status.media_hidden": "මාධ්‍ය සඟවා ඇත", "status.mention": "@{name} සැඳහුම", "status.more": "තව", - "status.mute": "@{name} කරන්න", - "status.mute_conversation": "සංවාදයෙන් කරන්න", - "status.open": "මෙම තත්ත්වය පුළුල් කරන්න", - "status.pin": "පැතිකඩ මත අමුණන්න", - "status.pinned": "පින් කළ දත", + "status.mute": "@{name} නිහඬව", + "status.mute_conversation": "සංවාදය නිහඬව", + "status.open": "මෙම ලිපිය විහිදන්න", + "status.pin": "පැතිකඩට අමුණන්න", + "status.pinned": "ඇමිණූ ලිපියකි", "status.read_more": "තව කියවන්න", "status.reblog": "බූස්ට් කරන්න", "status.reblog_private": "මුල් දෘශ්‍යතාව සමඟ වැඩි කරන්න", "status.reblogged_by": "{name} වැඩි කරන ලදී", "status.reblogs.empty": "තාම කවුරුත් මේ toot එක boost කරලා නැහැ. යමෙකු එසේ කළ විට, ඔවුන් මෙහි පෙන්වනු ඇත.", "status.redraft": "මකන්න සහ නැවත කෙටුම්පත", - "status.remove_bookmark": "පොත්යොමුව ඉවත් කරන්න", + "status.remove_bookmark": "පොත්යොමුව ඉවතලන්න", "status.reply": "පිළිතුරු", "status.replyAll": "ත්‍රෙඩ් එකට පිළිතුරු දෙන්න", - "status.report": "@{name} වාර්තා කරන්න", + "status.report": "@{name} වාර්තාව", "status.sensitive_warning": "සංවේදී අන්තර්ගතයකි", "status.share": "බෙදාගන්න", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "කෙසේ වුවද පෙන්වන්න", "status.show_less": "අඩුවෙන් පෙන්වන්න", - "status.show_less_all": "සියල්ලටම අඩුවෙන් පෙන්වන්න", - "status.show_more": "තව පෙන්වන්න", - "status.show_more_all": "සියල්ල සඳහා තවත් පෙන්වන්න", + "status.show_less_all": "සියල්ල අඩුවෙන් පෙන්වන්න", + "status.show_more": "තවත් පෙන්වන්න", + "status.show_more_all": "සියල්ල වැඩියෙන් පෙන්වන්න", "status.show_thread": "නූල් පෙන්වන්න", - "status.uncached_media_warning": "ලද නොහැක", - "status.unmute_conversation": "සංවාදය නිහඬ නොකරන්න", - "status.unpin": "පැතිකඩෙන් ඉවත් කරන්න", - "suggestions.dismiss": "යෝජනාව ඉවත ලන්න", + "status.uncached_media_warning": "නොතිබේ", + "status.unmute_conversation": "සංවාදය නොනිහඬ", + "status.unpin": "පැතිකඩෙන් ගළවන්න", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", + "suggestions.dismiss": "යෝජනාව ඉවතලන්න", "suggestions.header": "ඔබ…ගැන උනන්දු විය හැකිය", "tabs_bar.federated_timeline": "ෆෙඩරල්", "tabs_bar.home": "මුල් පිටුව", @@ -536,19 +540,19 @@ "time_remaining.seconds": "{number, plural, one {# දෙවැනි} other {# තත්පර}} අත්හැරියා", "timeline_hint.remote_resource_not_displayed": "වෙනත් සේවාදායකයන්ගෙන් {resource} දර්ශනය නොවේ.", "timeline_hint.resources.followers": "අනුගාමිකයින්", - "timeline_hint.resources.follows": "පහත සඳහන්", - "timeline_hint.resources.statuses": "පැරණි දත්", + "timeline_hint.resources.follows": "අනුගමනය", + "timeline_hint.resources.statuses": "පරණ ලිපි", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "දැන් ප්‍රවණතාවය", "ui.beforeunload": "ඔබ Mastodon හැර ගියහොත් ඔබේ කෙටුම්පත නැති වනු ඇත.", "units.short.billion": "{count}බී", "units.short.million": "{count}එම්", "units.short.thousand": "{count}කි", - "upload_area.title": "උඩුගත කිරීමට ඇද දමන්න", - "upload_button.label": "පින්තූර, වීඩියෝවක් හෝ ශ්‍රව්‍ය ගොනුවක් එක් කරන්න", - "upload_error.limit": "ගොනුව උඩුගත කළ හැකි සීමාවන් ඇත.", - "upload_error.poll": "ඡන්ද විමසීම් සමඟ ගොනු උඩුගත කිරීමට අවසර නැත.", - "upload_form.audio_description": "ශ්‍රවණාබාධ ඇති පුද්ගලයන් සඳහා විස්තර කරන්න", + "upload_area.title": "උඩුගතයට ඇද දමන්න", + "upload_button.label": "රූප, දෘශ්‍යක හෝ හඬපට යොදන්න", + "upload_error.limit": "සීමාව ඉක්මවා ඇත.", + "upload_error.poll": "මත විමසුම් සමඟ ගොනු යෙදීමට ඉඩ නොදේ.", + "upload_form.audio_description": "නොඇසෙන අය සඳහා විස්තර කරන්න", "upload_form.description": "දෘශ්‍යාබාධිතයන් සඳහා විස්තර කරන්න", "upload_form.description_missing": "විස්තරයක් එක් කර නැත", "upload_form.edit": "සංස්කරණය", @@ -557,23 +561,23 @@ "upload_form.video_description": "ශ්‍රවණාබාධ හෝ දෘශ්‍යාබාධිත පුද්ගලයන් සඳහා විස්තර කරන්න", "upload_modal.analyzing_picture": "පින්තූරය විශ්ලේෂණය කරමින්…", "upload_modal.apply": "යොදන්න", - "upload_modal.applying": "…යෙදීම", - "upload_modal.choose_image": "පින්තුරයක් තෝරාගන්න", - "upload_modal.description_placeholder": "කඩිසර හා හිවලෙක් කම්මැලි බල්ලා මතින් පනී", - "upload_modal.detect_text": "පින්තූරයෙන් හඳුනාගන්න", + "upload_modal.applying": "යොදමින්…", + "upload_modal.choose_image": "රූපයක් තෝරන්න", + "upload_modal.description_placeholder": "කඩිසර දුඹුරු හිවලෙක් කම්මැලි බල්ලා මතින් පනී", + "upload_modal.detect_text": "රූපයෙහි පෙළ අනාවරණය", "upload_modal.edit_media": "මාධ්‍ය සංස්කරණය", "upload_modal.hint": "සියලුම සිඟිති රූ මත සැම විටම දර්ශනය වන නාභි ලක්ෂ්‍යය තේරීමට පෙරදසුනෙහි රවුම ක්ලික් කරන්න හෝ අදින්න.", "upload_modal.preparing_ocr": "OCR…සූදානම් කරමින්", "upload_modal.preview_label": "පෙරදසුන ({ratio})", "upload_progress.label": "උඩුගත වෙමින්...", - "video.close": "දෘශ්‍යයක් වසන්න", + "video.close": "දෘශ්‍යකය වසන්න", "video.download": "ගොනුව බාගන්න", "video.exit_fullscreen": "පූර්ණ තිරයෙන් පිටවන්න", - "video.expand": "වීඩියෝව දිග හරින්න", + "video.expand": "දෘශ්‍යකය විහිදන්න", "video.fullscreen": "පූර්ණ තිරය", - "video.hide": "දෘශ්‍ය‍ය සඟවන්න", - "video.mute": "ශබ්දය නිශ්ශබ්ද කරන්න", + "video.hide": "දෘශ්‍යකය සඟවන්න", + "video.mute": "ශබ්දය නිහඬ", "video.pause": "විරාමය", "video.play": "ධාවනය", - "video.unmute": "ශබ්දය නිශ්ශබ්ද කරන්න" + "video.unmute": "ශබ්දය නොනිහඬ" } diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 12885864697..629c93ca98c 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -24,6 +24,7 @@ "account.follows_you": "Nasleduje ťa", "account.hide_reblogs": "Skry vyzdvihnutia od @{name}", "account.joined": "Pridal/a sa v {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Vlastníctvo tohto odkazu bolo skontrolované {date}", "account.locked_info": "Stav súkromia pre tento účet je nastavený na zamknutý. Jeho vlastník sám prehodnocuje, kto ho môže sledovať.", "account.media": "Médiá", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Nedostupný/é", "status.unmute_conversation": "Prestaň si nevšímať konverzáciu", "status.unpin": "Odopni z profilu", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Zavrhni návrh", "suggestions.header": "Mohlo by ťa zaujímať…", "tabs_bar.federated_timeline": "Federovaná", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 89894acf8a6..1f1f0370fed 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -24,6 +24,7 @@ "account.follows_you": "Vam sledi", "account.hide_reblogs": "Skrij izpostavitve od @{name}", "account.joined": "Pridružen/a {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Lastništvo te povezave je bilo preverjeno {date}", "account.locked_info": "Stanje zasebnosti računa je nastavljeno na zaklenjeno. Lastnik ročno pregleda, kdo ga lahko spremlja.", "account.media": "Mediji", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Ni na voljo", "status.unmute_conversation": "Odtišaj pogovor", "status.unpin": "Odpni iz profila", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Zavrni predlog", "suggestions.header": "Morda bi vas zanimalo…", "tabs_bar.federated_timeline": "Združeno", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 0b7fabb453f..0a485aaaefb 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -24,6 +24,7 @@ "account.follows_you": "Ju ndjek", "account.hide_reblogs": "Fshih përforcime nga @{name}", "account.joined": "U bë pjesë më {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Pronësia e kësaj lidhjeje qe kontrolluar më {date}", "account.locked_info": "Gjendja e privatësisë së kësaj llogarie është caktuar si e kyçur. I zoti merr dorazi në shqyrtim cilët mund ta ndjekin.", "account.media": "Media", @@ -197,22 +198,22 @@ "explore.trending_links": "Lajme", "explore.trending_statuses": "Postime", "explore.trending_tags": "Hashtagë", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", - "filter_modal.added.title": "Filter added!", - "filter_modal.select_filter.context_mismatch": "does not apply to this context", - "filter_modal.select_filter.expired": "expired", - "filter_modal.select_filter.prompt_new": "New category: {name}", - "filter_modal.select_filter.search": "Search or create", - "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", - "filter_modal.select_filter.title": "Filter this post", - "filter_modal.title.status": "Filter a post", + "filter_modal.added.context_mismatch_explanation": "Kjo kategori filtrash nuk aplikohet për kontekstin nën të cilin po merreni me këtë postim. Nëse doni që postimi të filtrohet edhe në këtë kontekst, do t’ju duhet të përpunoni filtrin.", + "filter_modal.added.context_mismatch_title": "Mospërputhje kontekstesh!", + "filter_modal.added.expired_explanation": "Kjo kategori filtrash ka skaduar, do t’ju duhet të ndryshoni datën e skadimit për të, pa të aplikohet.", + "filter_modal.added.expired_title": "Filtër i skaduar!", + "filter_modal.added.review_and_configure": "Që të shqyrtoni dhe formësoni më tej këtë kategori filtrash, kaloni te {settings_link}.", + "filter_modal.added.review_and_configure_title": "Rregullime filtrash", + "filter_modal.added.settings_link": "faqe rregullimesh", + "filter_modal.added.short_explanation": "Ky postim është shtuar te kategoria vijuese e filtrave: {title}.", + "filter_modal.added.title": "U shtua filtër!", + "filter_modal.select_filter.context_mismatch": "mos e apliko mbi këtë kontekst", + "filter_modal.select_filter.expired": "ka skaduar", + "filter_modal.select_filter.prompt_new": "Kategori e re: {name}", + "filter_modal.select_filter.search": "Kërkoni, ose krijoni", + "filter_modal.select_filter.subtitle": "Përdorni një kategori ekzistuese, ose krijoni një të re", + "filter_modal.select_filter.title": "Filtroje këtë postim", + "filter_modal.title.status": "Filtroni një postim", "follow_recommendations.done": "U bë", "follow_recommendations.heading": "Ndiqni persona prej të cilëve doni të shihni postime! Ja ca sugjerime.", "follow_recommendations.lead": "Postimet prej personash që ndiqni do të shfaqen në rend kohor te prurja juaj kryesore. Mos kini frikë të bëni gabime, mund të ndalni po aq kollaj ndjekjen e dikujt, në çfarëdo kohe!", @@ -487,7 +488,7 @@ "status.edited_x_times": "Përpunuar {count, plural, one {{count} herë} other {{count} herë}}", "status.embed": "Trupëzim", "status.favourite": "I parapëlqyer", - "status.filter": "Filter this post", + "status.filter": "Filtroje këtë postim", "status.filtered": "I filtruar", "status.hide": "Fshihe mesazhin", "status.history.created": "{name} u krijua më {date}", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Jo e passhme", "status.unmute_conversation": "Ktheji zërin bisedës", "status.unpin": "Shfiksoje nga profili", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Mos e merr parasysh sugjerimin", "suggestions.header": "Mund t’ju interesonte…", "tabs_bar.federated_timeline": "E federuar", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 8e955727d6d..2487c27f99b 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -24,6 +24,7 @@ "account.follows_you": "Prati Vas", "account.hide_reblogs": "Sakrij podrške koje daje korisnika @{name}", "account.joined": "Joined {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Mediji", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Uključi prepisku", "status.unpin": "Otkači sa profila", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federisano", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 442e7ee3d80..9683cafff15 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -24,6 +24,7 @@ "account.follows_you": "Прати Вас", "account.hide_reblogs": "Сакриј подршке које даје корисника @{name}", "account.joined": "Придружио/ла се {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Власништво над овом везом је проверено {date}", "account.locked_info": "Статус приватности овог налога је подешен на закључано. Власник ручно прегледа ко га може пратити.", "account.media": "Медији", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Није доступно", "status.unmute_conversation": "Укључи преписку", "status.unpin": "Откачи са налога", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Федерисано", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index a150deadb63..c9ae1b08cb0 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -24,6 +24,7 @@ "account.follows_you": "Följer dig", "account.hide_reblogs": "Dölj knuffar från @{name}", "account.joined": "Gick med {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Ägarskap för detta konto kontrollerades den {date}", "account.locked_info": "Detta konto har låst integritetsstatus. Ägaren väljer manuellt vem som kan följa.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Ej tillgängligt", "status.unmute_conversation": "Öppna konversation", "status.unpin": "Ångra fäst i profil", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Avfärda förslag", "suggestions.header": "Du kanske är intresserad av…", "tabs_bar.federated_timeline": "Federerad", diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json index c77444bffc7..bde5388c627 100644 --- a/app/javascript/mastodon/locales/szl.json +++ b/app/javascript/mastodon/locales/szl.json @@ -24,6 +24,7 @@ "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", "account.joined": "Joined {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 6c9529a32e8..1d4531d897c 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -24,6 +24,7 @@ "account.follows_you": "உங்களைப் பின்தொடர்கிறார்", "account.hide_reblogs": "இருந்து ஊக்கியாக மறை @{name}", "account.joined": "சேர்ந்த நாள் {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "இந்த இணைப்பை உரிமையாளர் சரிபார்க்கப்பட்டது {date}", "account.locked_info": "இந்தக் கணக்கு தனியுரிமை நிலை பூட்டப்பட்டுள்ளது. அவர்களைப் பின்தொடர்பவர் யார் என்பதை உரிமையாளர் கைமுறையாக மதிப்பாய்வு செய்கிறார்.", "account.media": "ஊடகங்கள்", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "கிடைக்கவில்லை", "status.unmute_conversation": "ஊமையாக உரையாடல் இல்லை", "status.unpin": "சுயவிவரத்திலிருந்து நீக்கவும்", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "பரிந்துரை விலக்க", "suggestions.header": "நீங்கள் ஆர்வமாக இருக்கலாம் …", "tabs_bar.federated_timeline": "கூட்டமைந்த", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index beba8e33325..1e5f0ed343b 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -24,6 +24,7 @@ "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", "account.joined": "Joined {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Mûi-thé", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index d5cc02b1045..265a3b48411 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -24,6 +24,7 @@ "account.follows_you": "మిమ్మల్ని అనుసరిస్తున్నారు", "account.hide_reblogs": "@{name} నుంచి బూస్ట్ లను దాచిపెట్టు", "account.joined": "Joined {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "ఈ లంకె యొక్క యాజమాన్యం {date}న పరీక్షించబడింది", "account.locked_info": "ఈ ఖాతా యొక్క గోప్యత స్థితి లాక్ చేయబడి వుంది. ఈ ఖాతాను ఎవరు అనుసరించవచ్చో యజమానే నిర్ణయం తీసుకుంటారు.", "account.media": "మీడియా", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Not available", "status.unmute_conversation": "సంభాషణను అన్మ్యూట్ చేయి", "status.unpin": "ప్రొఫైల్ నుండి పీకివేయు", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "సూచనను రద్దు చేయి", "suggestions.header": "మీకు వీటి మీద ఆసక్తి ఉండవచ్చు…", "tabs_bar.federated_timeline": "సమాఖ్య", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 9fcb877d33e..1c25ac04977 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -24,6 +24,7 @@ "account.follows_you": "ติดตามคุณ", "account.hide_reblogs": "ซ่อนการดันจาก @{name}", "account.joined": "เข้าร่วมเมื่อ {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "ตรวจสอบความเป็นเจ้าของของลิงก์นี้เมื่อ {date}", "account.locked_info": "มีการตั้งสถานะความเป็นส่วนตัวของบัญชีนี้เป็นล็อคอยู่ เจ้าของตรวจทานผู้ที่สามารถติดตามเขาด้วยตนเอง", "account.media": "สื่อ", @@ -199,12 +200,12 @@ "explore.trending_tags": "แฮชแท็ก", "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", "filter_modal.added.context_mismatch_title": "บริบทไม่ตรงกัน!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", - "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", + "filter_modal.added.expired_explanation": "หมวดหมู่ตัวกรองนี้หมดอายุแล้ว คุณจะต้องเปลี่ยนวันหมดอายุสำหรับหมวดหมู่เพื่อนำไปใช้", + "filter_modal.added.expired_title": "ตัวกรองหมดอายุแล้ว!", + "filter_modal.added.review_and_configure": "เพื่อตรวจทานและกำหนดค่าหมวดหมู่ตัวกรองนี้เพิ่มเติม ไปยัง {settings_link}", "filter_modal.added.review_and_configure_title": "การตั้งค่าตัวกรอง", "filter_modal.added.settings_link": "หน้าการตั้งค่า", - "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", + "filter_modal.added.short_explanation": "เพิ่มโพสต์นี้ไปยังหมวดหมู่ตัวกรองดังต่อไปนี้แล้ว: {title}", "filter_modal.added.title": "เพิ่มตัวกรองแล้ว!", "filter_modal.select_filter.context_mismatch": "ไม่นำไปใช้กับบริบทนี้", "filter_modal.select_filter.expired": "หมดอายุแล้ว", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "ไม่พร้อมใช้งาน", "status.unmute_conversation": "เลิกซ่อนการสนทนา", "status.unpin": "ถอนหมุดจากโปรไฟล์", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "ปิดข้อเสนอแนะ", "suggestions.header": "คุณอาจสนใจ…", "tabs_bar.federated_timeline": "ที่ติดต่อกับภายนอก", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index bb67ef2f6f3..0d8b0e46fa7 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -24,6 +24,7 @@ "account.follows_you": "Seni takip ediyor", "account.hide_reblogs": "@{name} kişisinin boostlarını gizle", "account.joined": "{date} tarihinde katıldı", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Bu bağlantının sahipliği {date} tarihinde kontrol edildi", "account.locked_info": "Bu hesabın gizlilik durumu gizli olarak ayarlanmış. Sahibi, onu kimin takip edebileceğini manuel olarak onaylıyor.", "account.media": "Medya", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Mevcut değil", "status.unmute_conversation": "Sohbet sesini aç", "status.unpin": "Profilden sabitlemeyi kaldır", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Öneriyi görmezden gel", "suggestions.header": "Şuna ilgi duyuyor olabilirsiniz…", "tabs_bar.federated_timeline": "Federe", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index c2739e18187..71e68e3c40c 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -24,6 +24,7 @@ "account.follows_you": "Сезгә язылган", "account.hide_reblogs": "Hide boosts from @{name}", "account.joined": "{date} көнендә теркәлде", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "Бу - ябык аккаунт. Аны язылучылар гына күрә ала.", "account.media": "Медиа", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index c77444bffc7..bde5388c627 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -24,6 +24,7 @@ "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", "account.joined": "Joined {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index a14e2125b77..271a6f3305f 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -24,6 +24,7 @@ "account.follows_you": "Підписані на вас", "account.hide_reblogs": "Сховати поширення від @{name}", "account.joined": "Долучилися {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Права власності на це посилання були перевірені {date}", "account.locked_info": "Це закритий обліковий запис. Власник вручну обирає, хто може на нього підписуватися.", "account.media": "Медіа", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Недоступно", "status.unmute_conversation": "Не ігнорувати діалог", "status.unpin": "Відкріпити від профілю", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Відхилити пропозицію", "suggestions.header": "Вас може зацікавити…", "tabs_bar.federated_timeline": "Глобальна", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index 19cee9c2a0f..a9ee2e87702 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -24,6 +24,7 @@ "account.follows_you": "آپ کا پیروکار ہے", "account.hide_reblogs": "@{name} سے فروغ چھپائیں", "account.joined": "{date} شامل ہوئے", + "account.languages": "Change subscribed languages", "account.link_verified_on": "اس لنک کی ملکیت کی توثیق {date} پر کی گئی تھی", "account.locked_info": "اس اکاونٹ کا اخفائی ضابطہ مقفل ہے۔ صارف کی پیروی کون کر سکتا ہے اس کا جائزہ وہ خود لیتا ہے.", "account.media": "وسائل", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index d1b5684afcc..ff2ba7e85b9 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -24,6 +24,7 @@ "account.follows_you": "Đang theo dõi bạn", "account.hide_reblogs": "Ẩn tút @{name} đăng lại", "account.joined": "Đã tham gia {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Liên kết này đã được xác minh vào {date}", "account.locked_info": "Đây là tài khoản riêng tư. Họ sẽ tự mình xét duyệt các yêu cầu theo dõi.", "account.media": "Media", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Uncached", "status.unmute_conversation": "Quan tâm", "status.unpin": "Bỏ ghim trên hồ sơ", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Tắt đề xuất", "suggestions.header": "Có thể bạn quan tâm…", "tabs_bar.federated_timeline": "Thế giới", diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json index 92201375dd7..4983489abdd 100644 --- a/app/javascript/mastodon/locales/zgh.json +++ b/app/javascript/mastodon/locales/zgh.json @@ -24,6 +24,7 @@ "account.follows_you": "ⴹⴼⵕⵏ ⴽⵯⵏ", "account.hide_reblogs": "Hide boosts from @{name}", "account.joined": "Joined {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "ⴰⵙⵏⵖⵎⵉⵙ", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 5d0dfa2029e..243d127f4cc 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -24,6 +24,7 @@ "account.follows_you": "关注了你", "account.hide_reblogs": "隐藏来自 @{name} 的转贴", "account.joined": "加入于 {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "此链接的所有权已在 {date} 检查", "account.locked_info": "此账户已锁嘟。账户所有者会手动审核关注者。", "account.media": "媒体", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "暂不可用", "status.unmute_conversation": "恢复此对话的通知提醒", "status.unpin": "在个人资料页面取消置顶", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "关闭建议", "suggestions.header": "你可能会感兴趣…", "tabs_bar.federated_timeline": "跨站", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index fdc2068008b..3b2dde692e8 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -24,6 +24,7 @@ "account.follows_you": "關注你", "account.hide_reblogs": "隱藏 @{name} 的轉推", "account.joined": "於 {date} 加入", + "account.languages": "Change subscribed languages", "account.link_verified_on": "此連結的所有權已在 {date} 檢查過", "account.locked_info": "這位使用者將私隱設定為「不公開」,會手動審批誰能關注他/她。", "account.media": "媒體", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "無法使用", "status.unmute_conversation": "對話解除靜音", "status.unpin": "解除置頂", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "關閉建議", "suggestions.header": "你可能對這些感興趣…", "tabs_bar.federated_timeline": "跨站", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 337cad60b6b..62facfca299 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -24,6 +24,7 @@ "account.follows_you": "跟隨了您", "account.hide_reblogs": "隱藏來自 @{name} 的轉嘟", "account.joined": "加入於 {date}", + "account.languages": "Change subscribed languages", "account.link_verified_on": "已在 {date} 檢查此連結的擁有者權限", "account.locked_info": "此帳戶的隱私狀態被設為鎖定。該擁有者會手動審核能跟隨此帳號的人。", "account.media": "媒體", @@ -522,6 +523,9 @@ "status.uncached_media_warning": "無法使用", "status.unmute_conversation": "解除此對話的靜音", "status.unpin": "從個人檔案頁面解除釘選", + "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", + "subscribed_languages.save": "Save changes", + "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "關閉建議", "suggestions.header": "您可能對這些東西有興趣…", "tabs_bar.federated_timeline": "聯邦宇宙", diff --git a/config/locales/activerecord.cs.yml b/config/locales/activerecord.cs.yml index d306fe627aa..50c4fc8c3cb 100644 --- a/config/locales/activerecord.cs.yml +++ b/config/locales/activerecord.cs.yml @@ -38,3 +38,5 @@ cs: email: blocked: používá zakázanou e-mailovou službu unreachable: pravděpodobně neexistuje + role_id: + elevated: nemůže být vyšší než vaše aktuální role diff --git a/config/locales/cs.yml b/config/locales/cs.yml index b0ab498ea46..4478d242042 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -165,6 +165,7 @@ cs: active: Aktivní all: Vše pending: Čekající + silenced: Omezeno suspended: Pozastavené title: Moderování moderation_notes: Moderátorské poznámky @@ -172,6 +173,7 @@ cs: most_recent_ip: Nejnovější IP adresa no_account_selected: Nebyl změněn žádný účet, neboť žádný nebyl zvolen no_limits_imposed: Nejsou nastavena žádná omezení + no_role_assigned: Nebyla přiřazena žádná role not_subscribed: Neodebírá pending: Čeká na posouzení perform_full_suspension: Pozastavit @@ -243,6 +245,7 @@ cs: approve_user: Schválit uživatele assigned_to_self_report: Přiřadit hlášení change_email_user: Změnit uživateli e-mailovou adresu + change_role_user: Změnit roli uživatele confirm_user: Potvrdit uživatele create_account_warning: Vytvořit varování create_announcement: Nové oznámení @@ -252,6 +255,7 @@ cs: create_email_domain_block: Zablokovat e-mailovou doménu create_ip_block: Vytvořit IP pravidlo create_unavailable_domain: Vytvořit nedostupnou doménu + create_user_role: Vytvořit roli demote_user: Snížit roli uživatele destroy_announcement: Odstranit oznámení destroy_custom_emoji: Odstranit vlastní emoji @@ -262,6 +266,7 @@ cs: destroy_ip_block: Smazat IP pravidlo destroy_status: Odstranit Příspěvek destroy_unavailable_domain: Smazat nedostupnou doménu + destroy_user_role: Zničit roli disable_2fa_user: Vypnout 2FA disable_custom_emoji: Zakázat vlastní emoji disable_sign_in_token_auth_user: Zrušit uživatelovo ověřování e-mailovým tokenem @@ -288,15 +293,19 @@ cs: update_announcement: Aktualizovat oznámení update_custom_emoji: Aktualizovat vlastní emoji update_domain_block: Změnit blokaci domény + update_ip_block: Aktualizovat pravidlo IP update_status: Aktualizovat Příspěvek + update_user_role: Aktualizovat roli actions: approve_appeal_html: Uživatel %{name} schválil odvolání proti rozhodnutí moderátora %{target} approve_user_html: "%{name} schválil registraci od %{target}" assigned_to_self_report_html: Uživatel %{name} si přidělil hlášení %{target} change_email_user_html: Uživatel %{name} změnil e-mailovou adresu uživatele %{target} + change_role_user_html: "%{name} změnil roli %{target}" confirm_user_html: Uživatel %{name} potvrdil e-mailovou adresu uživatele %{target} create_account_warning_html: Uživatel %{name} poslal %{target} varování create_announcement_html: Uživatel %{name} vytvořil nové oznámení %{target} + create_canonical_email_block_html: "%{name} zablokoval e-mail s hash %{target}" create_custom_emoji_html: Uživatel %{name} nahrál nové emoji %{target} create_domain_allow_html: Uživatel %{name} povolil federaci s doménou %{target} create_domain_block_html: Uživatel %{name} zablokoval doménu %{target} @@ -711,12 +720,16 @@ cs: manage_roles: Spravovat role manage_rules: Spravovat pravidla manage_settings: Spravovat nastavení + manage_taxonomies: Správa taxonomií manage_user_access: Spravovat uživatelské přístupy manage_user_access_description: Umožňuje uživatelům rušit jiným uživatelům dvoufázové ověřování, měnit jejich e-mailovou adresu a obnovovat jim hesla manage_users: Spravovat uživatele manage_webhooks: Spravovat webhooky view_audit_log: Zobrazovat protokol auditu + view_dashboard: Zobrazit ovládací panel + view_dashboard_description: Umožňuje uživatelům přístup k ovládacímu panelu a různým metrikám view_devops: Devops + view_devops_description: Umožňuje uživatelům přístup k ovládacím panelům Sidekiq a pgHero title: Role rules: add_new: Přidat pravidlo @@ -802,6 +815,9 @@ cs: desc_html: Zobrazit na hlavní stránce odkaz na veřejnou časovou osu a povolit přístup na veřejnou časovou osu pomocí API bez autentizace title: Povolit neautentizovaný přístup k časové ose title: Nastavení stránky + trendable_by_default: + desc_html: Specifický populární obsah může být i nadále výslovně zakázán + title: Povolit trendy bez předchozí revize trends: desc_html: Veřejně zobrazit dříve schválený obsah, který je zrovna populární title: Trendy @@ -1194,6 +1210,7 @@ cs: edit: add_keyword: Přidat klíčové slovo keywords: Klíčová slova + statuses: Individuální příspěvky title: Upravit filtr errors: deprecated_api_multiple_keywords: Tyto parametry nelze změnit z této aplikace, protože se vztahují na více než jedno klíčové slovo filtru. Použijte novější aplikaci nebo webové rozhraní. @@ -1213,6 +1230,12 @@ cs: new: save: Uložit nový filtr title: Přidat nový filtr + statuses: + back_to_filter: Zpět na filtr + batch: + remove: Odstranit z filtru + index: + title: Filtrované příspěvky footer: developers: Vývojáři more: Více… @@ -1223,6 +1246,7 @@ cs: changes_saved_msg: Změny byly úspěšně uloženy! copy: Kopírovat delete: Smazat + deselect: Zrušit výběr všeho none: Žádné order_by: Seřadit podle save_changes: Uložit změny diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 4f387128cda..31e10c6fab4 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -239,6 +239,7 @@ es-MX: confirm_user: Confirmar Usuario create_account_warning: Crear Advertencia create_announcement: Crear Anuncio + create_canonical_email_block: Crear Bloqueo de Correo Electrónico create_custom_emoji: Crear Emoji Personalizado create_domain_allow: Crear Permiso de Dominio create_domain_block: Crear Bloqueo de Dominio @@ -248,6 +249,7 @@ es-MX: create_user_role: Crear Rol demote_user: Degradar Usuario destroy_announcement: Eliminar Anuncio + destroy_canonical_email_block: Eliminar Bloqueo de Correo Electrónico destroy_custom_emoji: Eliminar Emoji Personalizado destroy_domain_allow: Eliminar Permiso de Dominio destroy_domain_block: Eliminar Bloqueo de Dominio @@ -283,6 +285,7 @@ es-MX: update_announcement: Actualizar Anuncio update_custom_emoji: Actualizar Emoji Personalizado update_domain_block: Actualizar el Bloqueo de Dominio + update_ip_block: Actualizar regla IP update_status: Actualizar Estado update_user_role: Actualizar Rol actions: @@ -294,6 +297,7 @@ es-MX: confirm_user_html: "%{name} confirmó la dirección de correo electrónico del usuario %{target}" create_account_warning_html: "%{name} envió una advertencia a %{target}" create_announcement_html: "%{name} ha creado un nuevo anuncio %{target}" + create_canonical_email_block_html: "%{name} bloqueó el correo electrónico con el hash %{target}" create_custom_emoji_html: "%{name} subió un nuevo emoji %{target}" create_domain_allow_html: "%{name} permitió la federación con el dominio %{target}" create_domain_block_html: "%{name} bloqueó el dominio %{target}" @@ -303,6 +307,7 @@ es-MX: create_user_role_html: "%{name} creó el rol %{target}" demote_user_html: "%{name} degradó al usuario %{target}" destroy_announcement_html: "%{name} eliminó el anuncio %{target}" + destroy_canonical_email_block_html: "%{name} desbloqueó el correo electrónico con el hash %{target}" destroy_custom_emoji_html: "%{name} eliminó el emoji %{target}" destroy_domain_allow_html: "%{name} bloqueó la federación con el dominio %{target}" destroy_domain_block_html: "%{name} desbloqueó el dominio %{target}" @@ -338,6 +343,7 @@ es-MX: update_announcement_html: "%{name} actualizó el anuncio %{target}" update_custom_emoji_html: "%{name} actualizó el emoji %{target}" update_domain_block_html: "%{name} actualizó el bloqueo de dominio para %{target}" + update_ip_block_html: "%{name} cambió la regla para la IP %{target}" update_status_html: "%{name} actualizó el estado de %{target}" update_user_role_html: "%{name} cambió el rol %{target}" empty: No se encontraron registros. @@ -801,6 +807,9 @@ es-MX: desc_html: Mostrar línea de tiempo pública en la portada title: Previsualización title: Ajustes del sitio + trendable_by_default: + desc_html: El contenido específico de tendencias todavía puede ser explícitamente desactivado + title: Permitir tendencias sin revisión previa trends: desc_html: Mostrar públicamente hashtags previamente revisados que son tendencia title: Hashtags de tendencia @@ -1720,7 +1729,7 @@ es-MX: change_password: cambies tu contraseña details: 'Aquí están los detalles del inicio de sesión:' explanation: Hemos detectado un inicio de sesión en tu cuenta desde una nueva dirección IP. - further_actions_html: Si fuiste tú, te recomendamos que %{action} inmediatamente y habilites la autenticación de dos factores para mantener tu cuenta segura. + further_actions_html: Si no fuiste tú, te recomendamos que %{action} inmediatamente y habilites la autenticación de dos factores para mantener tu cuenta segura. subject: Tu cuenta ha sido accedida desde una nueva dirección IP title: Un nuevo inicio de sesión warning: diff --git a/config/locales/es.yml b/config/locales/es.yml index db4785d2c9c..8d9c2bbb347 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1729,7 +1729,7 @@ es: change_password: cambies tu contraseña details: 'Aquí están los detalles del inicio de sesión:' explanation: Hemos detectado un inicio de sesión en tu cuenta desde una nueva dirección IP. - further_actions_html: Si fuiste tú, te recomendamos que %{action} inmediatamente y habilites la autenticación de dos factores para mantener tu cuenta segura. + further_actions_html: Si no fuiste tú, te recomendamos que %{action} inmediatamente y habilites la autenticación de dos factores para mantener tu cuenta segura. subject: Tu cuenta ha sido accedida desde una nueva dirección IP title: Un nuevo inicio de sesión warning: diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 086568664a4..4dabcf789e4 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -212,6 +212,7 @@ nl: suspension_reversible_hint_html: Dit account is opgeschort en de gegevens worden volledig verwijderd op %{date}. Tot die tijd kan dit account worden hersteld zonder nadelige gevolgen. Wanneer je alle gegevens van dit account onmiddellijk wilt verwijderen, kun je dit hieronder doen. title: Accounts unblock_email: E-mailadres deblokkeren + unblocked_email_msg: Het e-mailadres van %{username} is gedeblokkeerd unconfirmed_email: Onbevestigd e-mailadres undo_sensitized: Niet meer als gevoelig forceren undo_silenced: Niet langer beperken @@ -230,6 +231,7 @@ nl: approve_user: Gebruiker goedkeuren assigned_to_self_report: Rapportage toewijzen change_email_user: E-mailadres van gebruiker wijzigen + change_role_user: Wijzig rol van gebruiker confirm_user: Gebruiker bevestigen create_account_warning: Waarschuwing aanmaken create_announcement: Mededeling aanmaken @@ -241,6 +243,7 @@ nl: create_unavailable_domain: Niet beschikbaar domein aanmaken demote_user: Gebruiker degraderen destroy_announcement: Mededeling verwijderen + destroy_canonical_email_block: Verwijder e-mailblokkade destroy_custom_emoji: Lokale emoji verwijderen destroy_domain_allow: Domeingoedkeuring verwijderen destroy_domain_block: Domeinblokkade verwijderen @@ -381,6 +384,15 @@ nl: pending_appeals_html: one: "%{count} bezwaar te beoordelen" other: "%{count} bezwaren te beoordelen" + pending_reports_html: + one: "%{count} openstaande rapportage" + other: "%{count} openstaande rapportages" + pending_tags_html: + one: "%{count} hashtag te beoordelen" + other: "%{count} hashtags te beoordelen" + pending_users_html: + one: "%{count} nieuwe gebruiker te beoordelen" + other: "%{count} nieuwe gebruikers te beoordelen" resolved_reports: opgeloste rapportages software: Software sources: Locatie van registratie @@ -485,6 +497,9 @@ nl: delivery_error_days: Dagen met bezorgfouten delivery_error_hint: Wanneer de bezorging voor %{count} dagen niet mogelijk is, wordt de bezorging automatisch als niet beschikbaar gemarkeerd. empty: Geen domeinen gevonden. + known_accounts: + one: "%{count} bekend account" + other: "%{count} bekende accounts" moderation: all: Alles limited: Beperkt @@ -575,7 +590,9 @@ nl: reported_by: Gerapporteerd door resolved: Opgelost resolved_msg: Rapportage succesvol opgelost! + skip_to_actions: Ga direct naar de acties status: Rapportages + statuses: Gerapporteerde inhoud target_origin: Herkomst van de gerapporteerde accounts title: Rapportages unassign: Niet langer toewijzen @@ -584,6 +601,38 @@ nl: view_profile: Profiel bekijken roles: add_new: Rol toevoegen + assigned_users: + one: "%{count} gebruiker" + other: "%{count} gebruikers" + categories: + administration: Beheer + devops: Devops + invites: Uitnodigingen + moderation: Moderatie + special: Speciaal + delete: Verwijderen + privileges: + administrator: Beheerder + delete_user_data: Gebruikersgegevens verwijderen + invite_users: Gebruikers uitnodigen + manage_announcements: Aankondigingen beheren + manage_appeals: Bezwaren afhandelen + manage_blocks: Blokkades beheren + manage_custom_emojis: Lokale emoji's beheren + manage_federation: Federatie beheren + manage_invites: Uitnodigingen beheren + manage_reports: Rapportages afhandelen + manage_roles: Rollen beheren + manage_rules: Serverregels wijzigen + manage_settings: Server-instellingen wijzigen + manage_taxonomies: Trends en hashtags beheren + manage_user_access: Gebruikerstoegang beheren + manage_users: Gebruikers beheren + manage_webhooks: Webhooks beheren + view_audit_log: Auditlog bekijken + view_dashboard: Dashboard bekijken + view_devops: Devops + title: Rollen rules: add_new: Regel toevoegen delete: Verwijderen @@ -668,6 +717,8 @@ nl: desc_html: Toon een link naar de openbare tijdlijnpagina op de voorpagina en geef de API zonder in te loggen toegang tot de openbare tijdlijn title: Toegang tot de openbare tijdlijn zonder in te loggen toestaan title: Server-instellingen + trendable_by_default: + title: Trends toestaan zonder voorafgaande beoordeling trends: desc_html: Eerder beoordeelde hashtags die op dit moment trending zijn openbaar tonen title: Trends @@ -685,6 +736,9 @@ nl: title: Berichten van account with_media: Met media strikes: + actions: + silence: "%{name} beperkte het account %{target}" + suspend: "%{name} schortte het account %{target} op" appeal_approved: Bezwaar ingediend appeal_pending: Bezwaar in behandeling system_checks: @@ -701,18 +755,32 @@ nl: title: Beheer trends: allow: Toestaan + approved: Toegestaan disallow: Weigeren links: allow: Link toestaan allow_provider: Uitgever toestaan + disallow: Link toestaan + disallow_provider: Website toestaan title: Trending links only_allowed: Alleen toegestaan pending_review: In afwachting van beoordeling preview_card_providers: + allowed: Links van deze website kunnen trending worden + rejected: Links van deze website kunnen niet trending worden title: Uitgevers rejected: Afgewezen statuses: allow: Bericht toestaan + allow_account: Gebruiker toestaan + disallow: Bericht niet toestaan + disallow_account: Gebruiker niet toestaan + not_discoverable: Gebruiker heeft geen toestemming gegeven om vindbaar te zijn + title: Trending berichten + tags: + dashboard: + tag_languages_dimension: Populaire talen + tag_servers_dimension: Populaire servers warning_presets: add_new: Nieuwe toevoegen delete: Verwijderen @@ -789,6 +857,7 @@ nl: invalid_reset_password_token: De code om jouw wachtwoord opnieuw in te stellen is verlopen. Vraag een nieuwe aan. link_to_otp: Voer een tweestapsverificatiecode van je telefoon of een herstelcode in link_to_webauth: Jouw apparaat met de authenticatie-app gebruiken + log_in_with: Inloggen met login: Inloggen logout: Uitloggen migrate_account: Naar een ander account verhuizen @@ -810,6 +879,7 @@ nl: status: account_status: Accountstatus confirming: Aan het wachten totdat de e-mail is bevestigd. + functional: Jouw account kan in diens geheel gebruikt worden. pending: Jouw aanvraag moet nog worden beoordeeld door een van onze medewerkers. Dit kan misschien eventjes duren. Je ontvangt een e-mail wanneer jouw aanvraag is goedgekeurd. redirecting_to: Jouw account is inactief omdat het momenteel wordt doorverwezen naar %{acct}. too_fast: Formulier is te snel ingediend. Probeer het nogmaals. @@ -947,6 +1017,7 @@ nl: edit: add_keyword: Trefwoord toevoegen keywords: Trefwoorden + statuses: Individuele berichten title: Filter bewerken errors: deprecated_api_multiple_keywords: Deze instellingen kunnen niet via deze applicatie worden veranderd, omdat er meer dan één trefwoord wordt gebruikt. Gebruik een meer recente applicatie of de webomgeving. @@ -960,10 +1031,22 @@ nl: keywords: one: "%{count} trefwoord" other: "%{count} trefwoorden" + statuses: + one: "%{count} bericht" + other: "%{count} berichten" + statuses_long: + one: "%{count} individueel bericht verborgen" + other: "%{count} individuele berichten verborgen" title: Filters new: save: Nieuwe filter opslaan title: Nieuw filter toevoegen + statuses: + back_to_filter: Terug naar het filter + batch: + remove: Uit het filter verwijderen + index: + title: Gefilterde berichten footer: developers: Ontwikkelaars more: Meer… @@ -974,6 +1057,7 @@ nl: changes_saved_msg: Wijzigingen succesvol opgeslagen! copy: Kopiëren delete: Verwijderen + deselect: Alles deselecteren none: Geen order_by: Sorteer op save_changes: Wijzigingen opslaan @@ -1302,6 +1386,11 @@ nl: unlisted: Minder openbaar unlisted_long: Aan iedereen tonen, maar niet op openbare tijdlijnen statuses_cleanup: + ignore_favs: Favorieten negeren + ignore_reblogs: Boosts negeren + keep_direct: Directe berichten behouden + keep_media: Berichten met mediabijlagen behouden + keep_pinned: Vastgemaakte berichten behouden min_age: '1209600': 2 weken '15778476': 6 maanden @@ -1458,8 +1547,10 @@ nl: silence: Jouw account %{acct} is nu beperkt suspend: Jouw account %{acct} is opgeschort title: + delete_statuses: Berichten verwijderd disable: Account bevroren none: Waarschuwing + sensitive: Account is als gevoelig gemarkeerd silence: Account beperkt suspend: Account opgeschort welcome: diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml index 61456e92170..bd7039399f5 100644 --- a/config/locales/simple_form.cs.yml +++ b/config/locales/simple_form.cs.yml @@ -85,6 +85,7 @@ cs: ip: Zadejte IPv4 nebo IPv6 adresu. Můžete blokovat celé rozsahy použitím CIDR notace. Dejte pozor, ať neodříznete přístup sami sobě! severities: no_access: Blokovat přístup ke všem zdrojům + sign_up_block: Nové přihlášení nebude možné sign_up_requires_approval: Nové registrace budou vyžadovat schválení severity: Zvolte, jak naložit s požadavky z dané IP rule: @@ -96,7 +97,9 @@ cs: name: Můžete měnit pouze velikost písmen, například kvůli lepší čitelnosti user: chosen_languages: Po zaškrtnutí budou ve veřejných časových osách zobrazeny pouze příspěvky ve zvolených jazycích + role: Role určuje, která oprávnění má uživatel user_role: + color: Barva, která má být použita pro roli v celém UI, jako RGB v hex formátu highlighted: Toto roli učiní veřejně viditelnou permissions_as_keys: Uživatelé s touto rolí budou moci... webhook: @@ -247,6 +250,7 @@ cs: events: Zapnuté události url: URL koncového bodu 'no': Ne + not_recommended: Nedoporučuje se recommended: Doporučeno required: mark: "*" diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index cd9811f3c2a..0da328b820d 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -37,6 +37,7 @@ nl: current_password: Voer voor veiligheidsredenen het wachtwoord van je huidige account in current_username: Voer ter bevestiging de gebruikersnaam van je huidige account in digest: Wordt alleen na een lange periode van inactiviteit verzonden en alleen wanneer je tijdens jouw afwezigheid persoonlijke berichten hebt ontvangen + discoverable: Toestaan dat jouw account vindbaar is voor onbekenden, via aanbevelingen, trends en op andere manieren email: Je krijgt een bevestigingsmail fields: Je kan maximaal 4 items als een tabel op je profiel weergeven header: PNG, GIF of JPG. Maximaal %{size}. Wordt teruggeschaald naar %{dimensions}px @@ -82,6 +83,7 @@ nl: ip: Voer een IPv4- of IPv6-adres in. Je kunt hele reeksen blokkeren met de CIDR-methode. Pas op dat je jezelf niet buitensluit! severities: no_access: Toegang tot de hele server blokkeren + sign_up_block: Nieuwe registraties zijn niet mogelijk sign_up_requires_approval: Nieuwe registraties vereisen jouw goedkeuring severity: Kies wat er moet gebeuren met aanvragen van dit IP-adres rule: @@ -206,6 +208,7 @@ nl: ip: IP severities: no_access: Toegang blokkeren + sign_up_block: Registraties blokkeren sign_up_requires_approval: Registraties beperken severity: Regel notification_emails: @@ -236,6 +239,7 @@ nl: webhook: url: Eindpunt URL 'no': Nee + not_recommended: Niet aanbevolen recommended: Aanbevolen required: mark: "*" diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index fd17afb0e37..0c0cd49985b 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -85,6 +85,7 @@ sq: ip: Jepni një adresë IPv4 ose IPv6. Duke përdorur sintaksën CIDR, mund të bllokoni intervale të tëra. Hapni sytë mos lini veten jashtë! severities: no_access: Blloko hyrje në krejt burimet + sign_up_block: S’do të jenë të mundur regjistrime të reja sign_up_requires_approval: Regjistrime të reja do të duan miratimin tuaj severity: Zgjidhni ç’do të ndodhë me kërkesa nga kjo IP rule: @@ -219,6 +220,7 @@ sq: ip: IP severities: no_access: Bllokoji hyrjen + sign_up_block: Blloko regjistrime sign_up_requires_approval: Kufizo regjistrime severity: Rregull notification_emails: @@ -251,6 +253,7 @@ sq: events: Akte të aktivizuar url: URL pikëmbarimi 'no': Jo + not_recommended: Jo e këshilluar recommended: E rekomanduar required: mark: "*" diff --git a/config/locales/sq.yml b/config/locales/sq.yml index ef72bfbdf98..3beca5f53d5 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -235,17 +235,21 @@ sq: approve_user: Miratoje Përdoruesin assigned_to_self_report: Caktoji Raportim change_email_user: Ndrysho Email për Përdoruesin + change_role_user: Ndryshoni Rol Përdoruesi confirm_user: Ripohoje Përdoruesin create_account_warning: Krijo Sinjalizim create_announcement: Krijoni Lajmërim + create_canonical_email_block: Krijoni Bllokim Email-esh create_custom_emoji: Krijo Emotikon Vetjak create_domain_allow: Krijo Lejim Përkatësie create_domain_block: Krijo Bllokim Përkatësie create_email_domain_block: Krijo Bllokim Përkatësie Email-esh create_ip_block: Krijoni Rregull IP create_unavailable_domain: Krijo Përkatësi të Papërdorshme + create_user_role: Krijoni Rol demote_user: Zhgradoje Përdoruesin destroy_announcement: Fshije Lajmërimin + destroy_canonical_email_block: Fshi Bllokim El-esh destroy_custom_emoji: Fshi Emotikon Vetjak destroy_domain_allow: Fshi Lejim Përkatësie destroy_domain_block: Fshi Bllokim Përkatësie @@ -254,6 +258,7 @@ sq: destroy_ip_block: Fshini Rregull IP destroy_status: Fshi Gjendje destroy_unavailable_domain: Fshi Përkatësi të Papërdorshme + destroy_user_role: Asgjësoje Rolin disable_2fa_user: Çaktivizo 2FA-në disable_custom_emoji: Çaktivizo Emotikon Vetjak disable_sign_in_token_auth_user: Çaktivizo Mirëfilltësim me Token Email-i për Përdoruesin @@ -280,23 +285,30 @@ sq: update_announcement: Përditëso Lajmërimin update_custom_emoji: Përditëso Emoxhi Vetjake update_domain_block: Përditëso Bllok Përkatësish + update_ip_block: Përditësoni rregull IP update_status: Përditëso Gjendjen + update_user_role: Përditësoni Rol actions: approve_appeal_html: "%{name} miratoi apelim vendimi moderimi nga %{target}" approve_user_html: "%{name} miratoi regjistrim nga %{target}" assigned_to_self_report_html: "%{name} ia kaloi raportimin %{target} në ngarkim vetvetes" change_email_user_html: "%{name} ndryshoi adresën email të përdoruesit %{target}" + change_role_user_html: "%{name} ndryshoi rolin e %{target}" confirm_user_html: "%{name} ripohoi adresën email të përdoruesit %{target}" create_account_warning_html: "%{name} dërgoi një sinjalizim për %{target}" create_announcement_html: "%{name} krijoi lajmërim të ri për %{target}" + create_canonical_email_block_html: "%{name} bllokoi email-in me hashin %{target}" create_custom_emoji_html: "%{name} ngarkoi emoxhi të ri %{target}" create_domain_allow_html: "%{name} lejoi federim me përkatësinë %{target}" create_domain_block_html: "%{name} bllokoi përkatësinë %{target}" create_email_domain_block_html: "%{name} bllokoi përkatësinë email %{target}" create_ip_block_html: "%{name} krijoi rregull për IP-në %{target}" create_unavailable_domain_html: "%{name} ndali dërgimin drejt përkatësisë %{target}" + create_user_role_html: "%{name} krijoi rolin %{target}" demote_user_html: "%{name} zhgradoi përdoruesin %{target}" destroy_announcement_html: "%{name} fshiu lajmërimin për %{target}" + destroy_canonical_email_block_html: "%{name} zhbllokoi email-n me hashin %{target}" + destroy_custom_emoji_html: "%{name} fshiu emoji-n %{target}" destroy_domain_allow_html: "%{name} hoqi lejimin për federim me %{target}" destroy_domain_block_html: "%{name} zhbllokoi përkatësinë %{target}" destroy_email_domain_block_html: "%{name} hoqi bllokimin për përkatësinë email %{target}" @@ -304,6 +316,7 @@ sq: destroy_ip_block_html: "%{name} fshiu rregull për IP-në %{target}" destroy_status_html: "%{name} hoqi gjendje nga %{target}" destroy_unavailable_domain_html: "%{name} rinisi dërgimin drejt përkatësisë %{target}" + destroy_user_role_html: "%{name} fshiu rolin %{target}" disable_2fa_user_html: "%{name} çaktivizoi domosdoshmërinë për dyfaktorësh për përdoruesin %{target}" disable_custom_emoji_html: "%{name} çaktivizoi emoxhin %{target}" disable_sign_in_token_auth_user_html: "%{name} çaktivizo mirëfilltësim me token email-i për %{target}" @@ -330,7 +343,9 @@ sq: update_announcement_html: "%{name} përditësoi lajmërimin %{target}" update_custom_emoji_html: "%{name} përditësoi emoxhin %{target}" update_domain_block_html: "%{name} përditësoi bllokimin e përkatësish për %{target}" + update_ip_block_html: "%{name} ndryshoi rregull për IP-në %{target}" update_status_html: "%{name} përditësoi gjendjen me %{target}" + update_user_role_html: "%{name} ndryshoi rolin për %{target}" empty: S’u gjetën regjistra. filter_by_action: Filtroji sipas veprimit filter_by_user: Filtroji sipas përdoruesit @@ -789,6 +804,9 @@ sq: desc_html: Shfaqni lidhje te rrjedhë kohore publike në faqen hyrëse dhe lejoni te rrjedhë kohore publike hyrje API pa mirëfilltësim title: Lejo në rrjedhë kohore publike hyrje pa mirëfilltësim title: Rregullime sajti + trendable_by_default: + desc_html: Lënda specifike në modë prapë mund të ndalohet shprehimisht + title: Lejoni prirje pa shqyrtim paraprak trends: desc_html: Shfaqni publikisht hashtag-ë të shqyrtuar më parë që janë popullorë tani title: Hashtag-ë popullorë tani @@ -850,6 +868,7 @@ sq: other: Ndarë me të tjerë nga %{count} vetë gjatë javës së kaluar title: Lidhje në modë usage_comparison: Ndarë %{today} herë sot, kundrejt %{yesterday} dje + only_allowed: Lejuar vetëm pending_review: Në pritje të shqyrtimit preview_card_providers: allowed: Lidhje prej këtij botuesi mund të përdoren @@ -869,6 +888,7 @@ sq: other: Ndarë me të tjerë, ose shënuar si e parapëlqyer %{friendly_count} herë title: Postime në modë tags: + current_score: Vlera aktuale %{score} dashboard: tag_accounts_measure: përdorime unike tag_languages_dimension: Gjuhë kryesuese @@ -940,6 +960,7 @@ sq: body: 'Gjërat vijuese lypin një shqyrtim, përpara se të mund të shfaqen publikisht:' new_trending_links: no_approved_links: Aktualisht s’ka lidhje në modë të miratuara. + requirements: 'Cilido prej këtyre kandidatëve mund të kalojë lidhjen e miratuar për në modë #%{rank}, që aktualisht është “%{lowest_link_title}” me pikë %{lowest_link_score}.' title: Lidhje në modë new_trending_statuses: no_approved_statuses: Aktualisht s’ka postime në modë të miratuar. @@ -1167,6 +1188,8 @@ sq: edit: add_keyword: Shtoni fjalëkyç keywords: Fjalëkyçe + statuses: Postime individuale + statuses_hint_html: Ky filtër aplikohet për të përzgjedhur postime individuale, pavarësish se kanë apo jo përkim me fjalëkyçat më poshtë. Shqyrtoni, ose hiqni postime prej filtrit. title: Përpunoni filtër errors: deprecated_api_multiple_keywords: Këta parametra s’mund të ndryshohen nga ky aplikacion, ngaqë aplikohen mbi më shumë se një fjalëkyç filtri. Përdorni një aplikacion më të ri, ose ndërfaqen web. @@ -1180,10 +1203,23 @@ sq: keywords: one: "%{count} fjalëkyç" other: "%{count} fjalëkyçe" + statuses: + one: "%{count} postim" + other: "%{count} postime" + statuses_long: + one: "%{count} postim individual i fshehur" + other: "%{count} postime individuale të fshehur" title: Filtra new: save: Ruani filtër të ri title: Shtoni filtër të ri + statuses: + back_to_filter: Mbrapsht te filtri + batch: + remove: Hiqe prej filtri + index: + hint: Ky filtër aplikohet për të përzgjedhur postime individuale, pavarësisht kriteresh të tjera. Që nga ndërfaqja web mund të shtoni më tepër postime te ky filtër. + title: Postime të filtruar footer: developers: Zhvillues more: Më tepër… @@ -1191,12 +1227,22 @@ sq: trending_now: Prirjet e tashme generic: all: Krejt + all_items_on_page_selected_html: + one: Në këtë faqe është i përzgjedhur %{count} objekt. + other: Në këtë faqe janë përzgjedhur krejt %{count} objektet. + all_matching_items_selected_html: + one: Është përzgjedhur %{count} objekt me përkim me kërkimin tuaj. + other: Janë përzgjedhur krejt %{count} objektet me përkim me kërkimin tuaj. changes_saved_msg: Ndryshimet u ruajtën me sukses! copy: Kopjoje delete: Fshije + deselect: Shpërzgjidhi krejt none: Asnjë order_by: Renditi sipas save_changes: Ruaji ndryshimet + select_all_matching_items: + one: Përzgjidhni %{count} objekt me përkim me kërkimin tuaj. + other: Përzgjidhni krejt %{count} objektet me përkim me kërkimin tuaj. today: sot validation_errors: one: Diçka s’është ende si duhet! Ju lutemi, shqyrtoni gabimin më poshtë diff --git a/config/locales/th.yml b/config/locales/th.yml index 125bb306234..b5dd9bc3685 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -292,6 +292,7 @@ th: confirm_user_html: "%{name} ได้ยืนยันที่อยู่อีเมลของผู้ใช้ %{target}" create_account_warning_html: "%{name} ได้ส่งคำเตือนไปยัง %{target}" create_announcement_html: "%{name} ได้สร้างประกาศใหม่ %{target}" + create_canonical_email_block_html: "%{name} ได้ปิดกั้นอีเมลที่มีแฮช %{target}" create_custom_emoji_html: "%{name} ได้อัปโหลดอีโมจิใหม่ %{target}" create_domain_allow_html: "%{name} ได้อนุญาตการติดต่อกับภายนอกกับโดเมน %{target}" create_domain_block_html: "%{name} ได้ปิดกั้นโดเมน %{target}" @@ -301,6 +302,7 @@ th: create_user_role_html: "%{name} ได้สร้างบทบาท %{target}" demote_user_html: "%{name} ได้ลดขั้นผู้ใช้ %{target}" destroy_announcement_html: "%{name} ได้ลบประกาศ %{target}" + destroy_canonical_email_block_html: "%{name} ได้เลิกปิดกั้นอีเมลที่มีแฮช %{target}" destroy_custom_emoji_html: "%{name} ได้ลบอีโมจิ %{target}" destroy_domain_allow_html: "%{name} ได้ไม่อนุญาตการติดต่อกับภายนอกกับโดเมน %{target}" destroy_domain_block_html: "%{name} ได้เลิกปิดกั้นโดเมน %{target}" @@ -658,7 +660,9 @@ th: other: "%{count} สิทธิอนุญาต" privileges: administrator: ผู้ดูแล + administrator_description: ผู้ใช้ที่มีสิทธิอนุญาตนี้จะข้ามทุกสิทธิอนุญาต delete_user_data: ลบข้อมูลผู้ใช้ + delete_user_data_description: อนุญาตให้ผู้ใช้ลบข้อมูลของผู้ใช้อื่น ๆ โดยทันที invite_users: เชิญผู้ใช้ invite_users_description: อนุญาตให้ผู้ใช้เชิญผู้คนใหม่ไปยังเซิร์ฟเวอร์ manage_announcements: จัดการประกาศ @@ -683,6 +687,8 @@ th: manage_taxonomies_description: อนุญาตให้ผู้ใช้ตรวจทานเนื้อหาที่กำลังนิยมและอัปเดตการตั้งค่าแฮชแท็ก manage_user_access: จัดการการเข้าถึงของผู้ใช้ manage_users: จัดการผู้ใช้ + manage_webhooks: จัดการเว็บฮุค + manage_webhooks_description: อนุญาตให้ผู้ใช้ตั้งค่าเว็บฮุคสำหรับเหตุการณ์การดูแล view_audit_log: ดูรายการบันทึกการตรวจสอบ view_audit_log_description: อนุญาตให้ผู้ใช้ดูประวัติการกระทำการดูแลในเซิร์ฟเวอร์ view_dashboard: ดูแดชบอร์ด @@ -771,6 +777,8 @@ th: desc_html: แสดงลิงก์ไปยังเส้นเวลาสาธารณะในหน้าเริ่มต้นและอนุญาตการเข้าถึง API ไปยังเส้นเวลาสาธารณะโดยไม่มีการรับรองความถูกต้อง title: อนุญาตการเข้าถึงเส้นเวลาสาธารณะที่ไม่ได้รับรองความถูกต้อง title: การตั้งค่าไซต์ + trendable_by_default: + title: อนุญาตแนวโน้มโดยไม่มีการตรวจทานล่วงหน้า trends: desc_html: แสดงเนื้อหาที่ตรวจทานแล้วก่อนหน้านี้ที่กำลังนิยมในปัจจุบันเป็นสาธารณะ title: แนวโน้ม @@ -800,8 +808,11 @@ th: suspend: "%{name} ได้ระงับบัญชีของ %{target}" appeal_approved: อุทธรณ์แล้ว system_checks: + elasticsearch_running_check: + message_html: ไม่สามารถเชื่อมต่อกับ Elasticsearch โปรดตรวจสอบว่าซอฟต์แวร์กำลังทำงาน หรือปิดใช้งานการค้นหาข้อความแบบเต็ม elasticsearch_version_check: message_html: 'รุ่น Elasticsearch ที่เข้ากันไม่ได้: %{value}' + version_comparison: Elasticsearch %{running_version} กำลังทำงานขณะที่ต้องการ %{required_version} rules_check: action: จัดการกฎของเซิร์ฟเวอร์ message_html: คุณไม่ได้กำหนดกฎของเซิร์ฟเวอร์ใด ๆ @@ -879,7 +890,10 @@ th: enabled_events: other: "%{count} เหตุการณ์ที่เปิดใช้งาน" events: เหตุการณ์ + new: เว็บฮุคใหม่ status: สถานะ + title: เว็บฮุค + webhook: เว็บฮุค admin_mailer: new_appeal: actions: @@ -978,6 +992,7 @@ th: setup: email_below_hint_html: หากที่อยู่อีเมลด้านล่างไม่ถูกต้อง คุณสามารถเปลี่ยนที่อยู่อีเมลที่นี่และรับอีเมลยืนยันใหม่ email_settings_hint_html: ส่งอีเมลยืนยันไปยัง %{email} แล้ว หากที่อยู่อีเมลนั้นไม่ถูกต้อง คุณสามารถเปลี่ยนที่อยู่อีเมลได้ในการตั้งค่าบัญชี + title: การตั้งค่า status: account_status: สถานะบัญชี confirming: กำลังรอการยืนยันอีเมลให้เสร็จสมบูรณ์ @@ -1152,6 +1167,10 @@ th: trending_now: กำลังนิยม generic: all: ทั้งหมด + all_items_on_page_selected_html: + other: เลือกอยู่ทั้งหมด %{count} รายการในหน้านี้ + all_matching_items_selected_html: + other: เลือกอยู่ทั้งหมด %{count} รายการที่ตรงกับการค้นหาของคุณ changes_saved_msg: บันทึกการเปลี่ยนแปลงสำเร็จ! copy: คัดลอก delete: ลบ @@ -1159,6 +1178,8 @@ th: none: ไม่มี order_by: เรียงลำดับตาม save_changes: บันทึกการเปลี่ยนแปลง + select_all_matching_items: + other: เลือกทั้งหมด %{count} รายการที่ตรงกับการค้นหาของคุณ today: วันนี้ validation_errors: other: ยังมีบางอย่างไม่ถูกต้อง! โปรดตรวจทาน %{count} ข้อผิดพลาดด้านล่าง diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 151cc57c8d2..82a00b7fc57 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1,7 +1,7 @@ --- tr: about: - about_hashtag_html: Bunlar #%{hashtag} ile etiketlenen genel tootlar. Fediverse içinde herhangi bir yerde bir hesabınız varsa, onlarla etkileşime geçebilirsiniz. + about_hashtag_html: Bunlar #%{hashtag} ile etiketlenen genel gönderiler. Fediverse içinde herhangi bir yerde bir hesabınız varsa, onlarla etkileşime geçebilirsiniz. about_mastodon_html: Mastodon ücretsiz ve açık kaynaklı bir sosyal ağdır. Merkezileştirilmemiş yapısı sayesinde diğer ticari sosyal platformların aksine iletişimininizin tek bir firmada tutulmasının/yönetilmesinin önüne geçer. Güvendiğiniz bir sunucuyu seçerek oradaki kişilerle etkileşimde bulunabilirsiniz. Herkes kendi Mastodon sunucusunu kurabilir ve sorunsuz bir şekilde Mastodon sosyal ağına dahil edebilir. about_this: Hakkında active_count_after: etkin diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 30e9f3e566a..18b09369c38 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -920,6 +920,7 @@ uk: tag_servers_dimension: Найуживаніші сервери tag_servers_measure: різні сервери tag_uses_measure: всього використань + description_html: Ці хештеґи, які бачить ваш сервер, в даний час з’являються у багатьох дописах. Це може допомогти вашим користувачам дізнатися про що люди в даний момент найбільше говорять. Жодні хештеґи публічно не відображаються, допоки ви їх не затвердите. listable: Може бути запропоновано not_listable: Не буде запропоновано not_trendable: Не показуватиметься серед популярних From 9ec25fd8dc3a9304930b9a79e92e0a0d20815ba4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Sep 2022 11:15:25 +0900 Subject: [PATCH 307/646] Bump @babel/preset-env from 7.19.0 to 7.19.1 (#19200) Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.19.0 to 7.19.1. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.19.1/packages/babel-preset-env) --- updated-dependencies: - dependency-name: "@babel/preset-env" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 117 ++++++++++----------------------------------------- 2 files changed, 24 insertions(+), 95 deletions(-) diff --git a/package.json b/package.json index 5a603d72381..9d6d9e1f771 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@babel/plugin-proposal-decorators": "^7.19.1", "@babel/plugin-transform-react-inline-elements": "^7.18.6", "@babel/plugin-transform-runtime": "^7.19.1", - "@babel/preset-env": "^7.19.0", + "@babel/preset-env": "^7.19.1", "@babel/preset-react": "^7.18.6", "@babel/runtime": "^7.19.0", "@gamestdio/websocket": "^0.3.2", diff --git a/yarn.lock b/yarn.lock index e16166482de..9d4c1f60653 100644 --- a/yarn.lock +++ b/yarn.lock @@ -37,12 +37,7 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8", "@babel/compat-data@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.0.tgz#2a592fd89bacb1fcde68de31bee4f2f2dacb0e86" - integrity sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw== - -"@babel/compat-data@^7.19.1": +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8", "@babel/compat-data@^7.19.1": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.1.tgz#72d647b4ff6a4f82878d184613353af1dd0290f9" integrity sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg== @@ -148,18 +143,6 @@ "@babel/helper-annotate-as-pure" "^7.18.6" regexpu-core "^5.1.0" -"@babel/helper-define-polyfill-provider@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz#bd10d0aca18e8ce012755395b05a79f45eca5073" - integrity sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg== - dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - "@babel/helper-define-polyfill-provider@^0.3.3": version "0.3.3" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" @@ -400,10 +383,10 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" "@babel/plugin-proposal-optional-chaining" "^7.18.9" -"@babel/plugin-proposal-async-generator-functions@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.0.tgz#cf5740194f170467df20581712400487efc79ff1" - integrity sha512-nhEByMUTx3uZueJ/QkJuSlCfN4FGg+xy+vRsfGQGzSauq5ks2Deid2+05Q3KhfaUjvec1IGhw/Zm3cFm8JigTQ== +"@babel/plugin-proposal-async-generator-functions@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz#34f6f5174b688529342288cd264f80c9ea9fb4a7" + integrity sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q== dependencies: "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-plugin-utils" "^7.19.0" @@ -837,10 +820,10 @@ "@babel/helper-module-transforms" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-named-capturing-groups-regex@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.0.tgz#58c52422e4f91a381727faed7d513c89d7f41ada" - integrity sha512-HDSuqOQzkU//kfGdiHBt71/hkDTApw4U/cMVgKgX7PqfB3LOaK+2GtCEsBu1dL9CkswDm0Gwehht1dCr421ULQ== +"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz#ec7455bab6cd8fb05c525a94876f435a48128888" + integrity sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.19.0" "@babel/helper-plugin-utils" "^7.19.0" @@ -993,18 +976,18 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.19.0.tgz#fd18caf499a67d6411b9ded68dc70d01ed1e5da7" - integrity sha512-1YUju1TAFuzjIQqNM9WsF4U6VbD/8t3wEAlw3LFYuuEr+ywqLRcSXxFKz4DCEj+sN94l/XTDiUXYRrsvMpz9WQ== +"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.19.1.tgz#9f04c916f9c0205a48ebe5cc1be7768eb1983f67" + integrity sha512-c8B2c6D16Lp+Nt6HcD+nHl0VbPKVnNPTpszahuxJJnurfMtKeZ80A+qUv48Y7wqvS+dTFuLuaM9oYxyNHbCLWA== dependencies: - "@babel/compat-data" "^7.19.0" - "@babel/helper-compilation-targets" "^7.19.0" + "@babel/compat-data" "^7.19.1" + "@babel/helper-compilation-targets" "^7.19.1" "@babel/helper-plugin-utils" "^7.19.0" "@babel/helper-validator-option" "^7.18.6" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-async-generator-functions" "^7.19.0" + "@babel/plugin-proposal-async-generator-functions" "^7.19.1" "@babel/plugin-proposal-class-properties" "^7.18.6" "@babel/plugin-proposal-class-static-block" "^7.18.6" "@babel/plugin-proposal-dynamic-import" "^7.18.6" @@ -1052,7 +1035,7 @@ "@babel/plugin-transform-modules-commonjs" "^7.18.6" "@babel/plugin-transform-modules-systemjs" "^7.19.0" "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1" "@babel/plugin-transform-new-target" "^7.18.6" "@babel/plugin-transform-object-super" "^7.18.6" "@babel/plugin-transform-parameters" "^7.18.8" @@ -1068,10 +1051,10 @@ "@babel/plugin-transform-unicode-regex" "^7.18.6" "@babel/preset-modules" "^0.1.5" "@babel/types" "^7.19.0" - babel-plugin-polyfill-corejs2 "^0.3.2" - babel-plugin-polyfill-corejs3 "^0.5.3" - babel-plugin-polyfill-regenerator "^0.4.0" - core-js-compat "^3.22.1" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + core-js-compat "^3.25.1" semver "^6.3.0" "@babel/preset-modules@^0.1.5": @@ -2715,7 +2698,7 @@ babel-plugin-macros@^3.0.1: cosmiconfig "^7.0.0" resolve "^1.19.0" -babel-plugin-polyfill-corejs2@^0.3.2, babel-plugin-polyfill-corejs2@^0.3.3: +babel-plugin-polyfill-corejs2@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== @@ -2724,14 +2707,6 @@ babel-plugin-polyfill-corejs2@^0.3.2, babel-plugin-polyfill-corejs2@^0.3.3: "@babel/helper-define-polyfill-provider" "^0.3.3" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7" - integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.2" - core-js-compat "^3.21.0" - babel-plugin-polyfill-corejs3@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" @@ -2740,7 +2715,7 @@ babel-plugin-polyfill-corejs3@^0.6.0: "@babel/helper-define-polyfill-provider" "^0.3.3" core-js-compat "^3.25.1" -babel-plugin-polyfill-regenerator@^0.4.0, babel-plugin-polyfill-regenerator@^0.4.1: +babel-plugin-polyfill-regenerator@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== @@ -3043,16 +3018,6 @@ browserslist@^4.0.0, browserslist@^4.12.0: escalade "^3.1.1" node-releases "^1.1.71" -browserslist@^4.21.0: - version "4.21.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.0.tgz#7ab19572361a140ecd1e023e2c1ed95edda0cefe" - integrity sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA== - dependencies: - caniuse-lite "^1.0.30001358" - electron-to-chromium "^1.4.164" - node-releases "^2.0.5" - update-browserslist-db "^1.0.0" - browserslist@^4.21.3, browserslist@^4.21.4: version "4.21.4" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" @@ -3251,11 +3216,6 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001310.tgz#da02cd07432c9eece6992689d1b84ca18139eea8" integrity sha512-cb9xTV8k9HTIUA3GnPUJCk0meUnrHL5gy5QePfDjxHyNBcnzPzrHFv5GqfP7ue5b1ZyzZL0RJboD6hQlPXjhjg== -caniuse-lite@^1.0.30001358: - version "1.0.30001359" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz#a1c1cbe1c2da9e689638813618b4219acbd4925e" - integrity sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw== - caniuse-lite@^1.0.30001400: version "1.0.30001406" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001406.tgz#d0146e7919635479f873b4507517b627f66ab269" @@ -3659,14 +3619,6 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.21.0, core-js-compat@^3.22.1: - version "3.23.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.23.3.tgz#7d8503185be76bb6d8d592c291a4457a8e440aa9" - integrity sha512-WSzUs2h2vvmKsacLHNTdpyOC9k43AEhcGoFlVgCY4L7aw98oSBKtPL6vD0/TqZjRWRQYdDSLkzZIni4Crbbiqw== - dependencies: - browserslist "^4.21.0" - semver "7.0.0" - core-js-compat@^3.25.1: version "3.25.2" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.25.2.tgz#7875573586809909c69e03ef310810c1969ee138" @@ -4391,11 +4343,6 @@ electron-to-chromium@^1.3.723: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.736.tgz#f632d900a1f788dab22fec9c62ec5c9c8f0c4052" integrity sha512-DY8dA7gR51MSo66DqitEQoUMQ0Z+A2DSXFi7tK304bdTVqczCAfUuyQw6Wdg8hIoo5zIxkU1L24RQtUce1Ioig== -electron-to-chromium@^1.4.164: - version "1.4.170" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.170.tgz#0415fc489402e09bfbe1f0c99bbf4d73f31d48d4" - integrity sha512-rZ8PZLhK4ORPjFqLp9aqC4/S1j4qWFsPPz13xmWdrbBkU/LlxMcok+f+6f8YnQ57MiZwKtOaW15biZZsY5Igvw== - electron-to-chromium@^1.4.251: version "1.4.254" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.254.tgz#c6203583890abf88dfc0be046cd72d3b48f8beb6" @@ -7883,11 +7830,6 @@ node-releases@^1.1.71: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== -node-releases@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666" - integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q== - node-releases@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" @@ -10029,11 +9971,6 @@ selfsigned@^1.10.8: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -11370,14 +11307,6 @@ upath@^1.1.1, upath@^1.2.0: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-browserslist-db@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz#dbfc5a789caa26b1db8990796c2c8ebbce304824" - integrity sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - update-browserslist-db@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz#2924d3927367a38d5c555413a7ce138fc95fcb18" From 04cd244a9a84e3c62cf3b4fa4c389db239ddfb0d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Sep 2022 11:21:51 +0900 Subject: [PATCH 308/646] Bump postcss-scss from 4.0.4 to 4.0.5 (#19198) Bumps [postcss-scss](https://github.com/postcss/postcss-scss) from 4.0.4 to 4.0.5. - [Release notes](https://github.com/postcss/postcss-scss/releases) - [Changelog](https://github.com/postcss/postcss-scss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss-scss/compare/4.0.4...4.0.5) --- updated-dependencies: - dependency-name: postcss-scss dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 9d6d9e1f771..2b8b203075d 100644 --- a/package.json +++ b/package.json @@ -155,7 +155,7 @@ "eslint-plugin-react": "~7.31.8", "jest": "^29.0.3", "jest-environment-jsdom": "^29.0.3", - "postcss-scss": "^4.0.4", + "postcss-scss": "^4.0.5", "prettier": "^2.7.1", "raf": "^3.4.1", "react-intl-translations-manager": "^5.0.3", diff --git a/yarn.lock b/yarn.lock index 9d4c1f60653..25c820d1321 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8823,10 +8823,10 @@ postcss-safe-parser@^6.0.0: resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1" integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== -postcss-scss@^4.0.2, postcss-scss@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.4.tgz#aa8f60e19ee18259bc193db9e4b96edfce3f3b1f" - integrity sha512-aBBbVyzA8b3hUL0MGrpydxxXKXFZc5Eqva0Q3V9qsBOLEMsjb6w49WfpsoWzpEgcqJGW4t7Rio8WXVU9Gd8vWg== +postcss-scss@^4.0.2, postcss-scss@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.5.tgz#8ee33c1dda8d9d4753b565ec79014803dc6edabf" + integrity sha512-F7xpB6TrXyqUh3GKdyB4Gkp3QL3DDW1+uI+gxx/oJnUt/qXI4trj5OGlp9rOKdoABGULuqtqeG+3HEVQk4DjmA== postcss-selector-parser@^3.0.0: version "3.1.2" From 0b5e8ae2684673127ad2ff08ab54a66f176f5f61 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Sep 2022 11:22:49 +0900 Subject: [PATCH 309/646] Bump stylelint from 14.11.0 to 14.12.0 (#19194) Bumps [stylelint](https://github.com/stylelint/stylelint) from 14.11.0 to 14.12.0. - [Release notes](https://github.com/stylelint/stylelint/releases) - [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md) - [Commits](https://github.com/stylelint/stylelint/compare/14.11.0...14.12.0) --- updated-dependencies: - dependency-name: stylelint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 2b8b203075d..8f61c70f5c7 100644 --- a/package.json +++ b/package.json @@ -160,7 +160,7 @@ "raf": "^3.4.1", "react-intl-translations-manager": "^5.0.3", "react-test-renderer": "^16.14.0", - "stylelint": "^14.11.0", + "stylelint": "^14.12.0", "stylelint-config-standard-scss": "^5.0.0", "webpack-dev-server": "^3.11.3", "yargs": "^17.5.1" diff --git a/yarn.lock b/yarn.lock index 25c820d1321..3c85d1580d3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4974,10 +4974,10 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.11, fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== +fast-glob@^3.2.12, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -10670,10 +10670,10 @@ stylelint-scss@^4.0.0: postcss-selector-parser "^6.0.6" postcss-value-parser "^4.1.0" -stylelint@^14.11.0: - version "14.11.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.11.0.tgz#e2ecb28bbacab05e1fbeb84cbba23883b27499cc" - integrity sha512-OTLjLPxpvGtojEfpESWM8Ir64Z01E89xsisaBMUP/ngOx1+4VG2DPRcUyCCiin9Rd3kPXPsh/uwHd9eqnvhsYA== +stylelint@^14.12.0: + version "14.12.0" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.12.0.tgz#86d5b60d0f30a6bd0b59e1d4c85a267f0caef97e" + integrity sha512-9Sa+IsT31PN9zf9q5ZVZNvhT6jMVu6YhpI38g3Akn7vONipGL0GNd9QCblwtJ3ysaoM80P/+9mOcFB1xnytiQQ== dependencies: "@csstools/selector-specificity" "^2.0.2" balanced-match "^2.0.0" @@ -10681,7 +10681,7 @@ stylelint@^14.11.0: cosmiconfig "^7.0.1" css-functions-list "^3.1.0" debug "^4.3.4" - fast-glob "^3.2.11" + fast-glob "^3.2.12" fastest-levenshtein "^1.0.16" file-entry-cache "^6.0.1" global-modules "^2.0.0" @@ -10708,7 +10708,7 @@ stylelint@^14.11.0: string-width "^4.2.3" strip-ansi "^6.0.1" style-search "^0.1.0" - supports-hyperlinks "^2.2.0" + supports-hyperlinks "^2.3.0" svg-tags "^1.0.0" table "^6.8.0" v8-compile-cache "^2.3.0" @@ -10764,10 +10764,10 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" - integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== +supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" From 303221db24d492e8ddd63c386f3ff43965ac7727 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Sep 2022 20:24:22 +0900 Subject: [PATCH 310/646] Bump classnames from 2.3.1 to 2.3.2 (#19197) Bumps [classnames](https://github.com/JedWatson/classnames) from 2.3.1 to 2.3.2. - [Release notes](https://github.com/JedWatson/classnames/releases) - [Changelog](https://github.com/JedWatson/classnames/blob/main/HISTORY.md) - [Commits](https://github.com/JedWatson/classnames/compare/v2.3.1...v2.3.2) --- updated-dependencies: - dependency-name: classnames dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 8f61c70f5c7..5472a41d8e4 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "babel-plugin-react-intl": "^6.2.0", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", "blurhash": "^2.0.0", - "classnames": "^2.3.1", + "classnames": "^2.3.2", "cocoon-js-vanilla": "^1.3.0", "color-blend": "^3.0.1", "compression-webpack-plugin": "^6.1.1", diff --git a/yarn.lock b/yarn.lock index 3c85d1580d3..a6a897626c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3341,10 +3341,10 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -classnames@^2.2.5, classnames@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" - integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== +classnames@^2.2.5, classnames@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== clean-stack@^2.0.0: version "2.2.0" From 1cc32dd50c88934b086ca20c36318b937d5ece04 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Sep 2022 20:24:53 +0900 Subject: [PATCH 311/646] Bump i18n-tasks from 1.0.11 to 1.0.12 (#19195) Bumps [i18n-tasks](https://github.com/glebm/i18n-tasks) from 1.0.11 to 1.0.12. - [Release notes](https://github.com/glebm/i18n-tasks/releases) - [Changelog](https://github.com/glebm/i18n-tasks/blob/main/CHANGES.md) - [Commits](https://github.com/glebm/i18n-tasks/compare/v1.0.11...v1.0.12) --- updated-dependencies: - dependency-name: i18n-tasks dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 8b8a15623d2..ae43ce254ac 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -110,12 +110,11 @@ GEM coderay (>= 1.0.0) erubi (>= 1.0.0) rack (>= 0.9.0) - better_html (1.0.16) - actionview (>= 4.0) - activesupport (>= 4.0) + better_html (2.0.1) + actionview (>= 6.0) + activesupport (>= 6.0) ast (~> 2.0) erubi (~> 1.4) - html_tokenizer (~> 0.0.6) parser (>= 2.4) smart_properties bindata (2.4.10) @@ -299,7 +298,6 @@ GEM highline (2.0.3) hiredis (0.6.3) hkdf (0.3.0) - html_tokenizer (0.0.7) htmlentities (4.3.4) http (5.1.0) addressable (~> 2.8) @@ -316,10 +314,10 @@ GEM rainbow (>= 2.0.0) i18n (1.12.0) concurrent-ruby (~> 1.0) - i18n-tasks (1.0.11) + i18n-tasks (1.0.12) activesupport (>= 4.0.2) ast (>= 2.1.0) - better_html (~> 1.0) + better_html (>= 1.0, < 3.0) erubi highline (>= 2.0.0) i18n @@ -384,7 +382,7 @@ GEM activesupport (>= 4) railties (>= 4) request_store (~> 1.0) - loofah (2.18.0) + loofah (2.19.0) crass (~> 1.0.2) nokogiri (>= 1.5.9) mail (2.7.1) @@ -452,7 +450,7 @@ GEM orm_adapter (0.5.0) ox (2.14.11) parallel (1.22.1) - parser (3.1.2.0) + parser (3.1.2.1) ast (~> 2.4.1) parslet (2.0.0) pastel (0.8.0) @@ -688,7 +686,7 @@ GEM unf (0.1.4) unf_ext unf_ext (0.0.8.2) - unicode-display_width (2.1.0) + unicode-display_width (2.3.0) uniform_notifier (1.16.0) validate_email (0.1.6) activemodel (>= 3.0) From 84aff598ea0b5670ef2a0d1009bca9c9136c2d50 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 21 Sep 2022 14:48:35 +0200 Subject: [PATCH 312/646] Fix typo in SignatureVerification (#19209) Fix regression from #15605 --- app/controllers/concerns/signature_verification.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/concerns/signature_verification.rb b/app/controllers/concerns/signature_verification.rb index 89dc828f455..4da068aed84 100644 --- a/app/controllers/concerns/signature_verification.rb +++ b/app/controllers/concerns/signature_verification.rb @@ -98,7 +98,7 @@ module SignatureVerification fail_with! e.message rescue HTTP::Error, OpenSSL::SSL::SSLError => e fail_with! "Failed to fetch remote data: #{e.message}" - rescue Mastodon::UnexptectedResponseError + rescue Mastodon::UnexpectedResponseError fail_with! 'Failed to fetch remote data (got unexpected reply from server)' rescue Stoplight::Error::RedLight fail_with! 'Fetching attempt skipped because of recent connection failure' From 8cf7006d4efbcfdd4a4ab688db1bcc73a2915a47 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 21 Sep 2022 22:45:57 +0200 Subject: [PATCH 313/646] Refactor ActivityPub handling to prepare for non-Account actors (#19212) * Move ActivityPub::FetchRemoteAccountService to ActivityPub::FetchRemoteActorService ActivityPub::FetchRemoteAccountService is kept as a wrapper for when the actor is specifically required to be an Account * Refactor SignatureVerification to allow non-Account actors * fixup! Move ActivityPub::FetchRemoteAccountService to ActivityPub::FetchRemoteActorService * Refactor ActivityPub::FetchRemoteKeyService to potentially return non-Account actors * Refactor inbound ActivityPub payload processing to accept non-Account actors * Refactor inbound ActivityPub processing to accept activities relayed through non-Account * Refactor how Account key URIs are built * Refactor Request and drop unused key_id_format parameter * Rename ActivityPub::Dereferencer `signature_account` to `signature_actor` --- app/controllers/accounts_controller.rb | 2 +- .../activitypub/claims_controller.rb | 2 +- .../activitypub/collections_controller.rb | 2 +- .../followers_synchronizations_controller.rb | 2 +- .../activitypub/inboxes_controller.rb | 10 +- .../activitypub/outboxes_controller.rb | 2 +- .../activitypub/replies_controller.rb | 2 +- .../concerns/signature_verification.rb | 52 +++-- .../follower_accounts_controller.rb | 2 +- .../following_accounts_controller.rb | 2 +- app/controllers/statuses_controller.rb | 2 +- app/controllers/tags_controller.rb | 2 +- app/lib/activitypub/activity.rb | 10 +- app/lib/activitypub/dereferencer.rb | 6 +- app/lib/activitypub/linked_data_signature.rb | 6 +- app/lib/activitypub/tag_manager.rb | 8 + app/lib/request.rb | 18 +- .../activitypub/public_key_serializer.rb | 2 +- .../fetch_remote_account_service.rb | 78 +------- .../activitypub/fetch_remote_actor_service.rb | 80 ++++++++ .../activitypub/fetch_remote_key_service.rb | 22 +-- .../activitypub/process_collection_service.rb | 11 +- app/services/fetch_resource_service.rb | 2 +- app/services/keys/claim_service.rb | 2 +- app/services/resolve_url_service.rb | 4 +- app/workers/activitypub/delivery_worker.rb | 2 +- app/workers/activitypub/processing_worker.rb | 12 +- spec/controllers/accounts_controller_spec.rb | 2 +- .../collections_controller_spec.rb | 2 +- ...lowers_synchronizations_controller_spec.rb | 2 +- .../activitypub/inboxes_controller_spec.rb | 2 +- .../activitypub/outboxes_controller_spec.rb | 2 +- .../activitypub/replies_controller_spec.rb | 2 +- .../concerns/signature_verification_spec.rb | 45 +++++ spec/controllers/statuses_controller_spec.rb | 2 +- .../lib/activitypub/activity/announce_spec.rb | 2 +- spec/lib/activitypub/dereferencer_spec.rb | 8 +- .../activitypub/linked_data_signature_spec.rb | 14 +- .../fetch_remote_actor_service_spec.rb | 180 ++++++++++++++++++ .../process_collection_service_spec.rb | 6 +- spec/services/fetch_resource_service_spec.rb | 2 +- 41 files changed, 436 insertions(+), 180 deletions(-) create mode 100644 app/services/activitypub/fetch_remote_actor_service.rb create mode 100644 spec/services/activitypub/fetch_remote_actor_service_spec.rb diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index fe7d934dc33..d92f91b3051 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -7,7 +7,7 @@ class AccountsController < ApplicationController include AccountControllerConcern include SignatureAuthentication - before_action :require_signature!, if: -> { request.format == :json && authorized_fetch_mode? } + before_action :require_account_signature!, if: -> { request.format == :json && authorized_fetch_mode? } before_action :set_cache_headers before_action :set_body_classes diff --git a/app/controllers/activitypub/claims_controller.rb b/app/controllers/activitypub/claims_controller.rb index 08ad952df14..339333e462c 100644 --- a/app/controllers/activitypub/claims_controller.rb +++ b/app/controllers/activitypub/claims_controller.rb @@ -6,7 +6,7 @@ class ActivityPub::ClaimsController < ActivityPub::BaseController skip_before_action :authenticate_user! - before_action :require_signature! + before_action :require_account_signature! before_action :set_claim_result def create diff --git a/app/controllers/activitypub/collections_controller.rb b/app/controllers/activitypub/collections_controller.rb index e4e994a9855..d94a285eaec 100644 --- a/app/controllers/activitypub/collections_controller.rb +++ b/app/controllers/activitypub/collections_controller.rb @@ -4,7 +4,7 @@ class ActivityPub::CollectionsController < ActivityPub::BaseController include SignatureVerification include AccountOwnedConcern - before_action :require_signature!, if: :authorized_fetch_mode? + before_action :require_account_signature!, if: :authorized_fetch_mode? before_action :set_items before_action :set_size before_action :set_type diff --git a/app/controllers/activitypub/followers_synchronizations_controller.rb b/app/controllers/activitypub/followers_synchronizations_controller.rb index 940b77cf0a1..4e445bcb1f9 100644 --- a/app/controllers/activitypub/followers_synchronizations_controller.rb +++ b/app/controllers/activitypub/followers_synchronizations_controller.rb @@ -4,7 +4,7 @@ class ActivityPub::FollowersSynchronizationsController < ActivityPub::BaseContro include SignatureVerification include AccountOwnedConcern - before_action :require_signature! + before_action :require_account_signature! before_action :set_items before_action :set_cache_headers diff --git a/app/controllers/activitypub/inboxes_controller.rb b/app/controllers/activitypub/inboxes_controller.rb index 92dcb5ac775..5ee85474e7e 100644 --- a/app/controllers/activitypub/inboxes_controller.rb +++ b/app/controllers/activitypub/inboxes_controller.rb @@ -6,7 +6,7 @@ class ActivityPub::InboxesController < ActivityPub::BaseController include AccountOwnedConcern before_action :skip_unknown_actor_activity - before_action :require_signature! + before_action :require_actor_signature! skip_before_action :authenticate_user! def create @@ -49,17 +49,17 @@ class ActivityPub::InboxesController < ActivityPub::BaseController end def upgrade_account - if signed_request_account.ostatus? + if signed_request_account&.ostatus? signed_request_account.update(last_webfingered_at: nil) ResolveAccountWorker.perform_async(signed_request_account.acct) end - DeliveryFailureTracker.reset!(signed_request_account.inbox_url) + DeliveryFailureTracker.reset!(signed_request_actor.inbox_url) end def process_collection_synchronization raw_params = request.headers['Collection-Synchronization'] - return if raw_params.blank? || ENV['DISABLE_FOLLOWERS_SYNCHRONIZATION'] == 'true' + return if raw_params.blank? || ENV['DISABLE_FOLLOWERS_SYNCHRONIZATION'] == 'true' || signed_request_account.nil? # Re-using the syntax for signature parameters tree = SignatureParamsParser.new.parse(raw_params) @@ -71,6 +71,6 @@ class ActivityPub::InboxesController < ActivityPub::BaseController end def process_payload - ActivityPub::ProcessingWorker.perform_async(signed_request_account.id, body, @account&.id) + ActivityPub::ProcessingWorker.perform_async(signed_request_actor.id, body, @account&.id, signed_request_actor.class.name) end end diff --git a/app/controllers/activitypub/outboxes_controller.rb b/app/controllers/activitypub/outboxes_controller.rb index cd3992502d7..60d201f763b 100644 --- a/app/controllers/activitypub/outboxes_controller.rb +++ b/app/controllers/activitypub/outboxes_controller.rb @@ -6,7 +6,7 @@ class ActivityPub::OutboxesController < ActivityPub::BaseController include SignatureVerification include AccountOwnedConcern - before_action :require_signature!, if: :authorized_fetch_mode? + before_action :require_account_signature!, if: :authorized_fetch_mode? before_action :set_statuses before_action :set_cache_headers diff --git a/app/controllers/activitypub/replies_controller.rb b/app/controllers/activitypub/replies_controller.rb index 4ff7cfa080f..8e0f9de2eeb 100644 --- a/app/controllers/activitypub/replies_controller.rb +++ b/app/controllers/activitypub/replies_controller.rb @@ -7,7 +7,7 @@ class ActivityPub::RepliesController < ActivityPub::BaseController DESCENDANTS_LIMIT = 60 - before_action :require_signature!, if: :authorized_fetch_mode? + before_action :require_account_signature!, if: :authorized_fetch_mode? before_action :set_status before_action :set_cache_headers before_action :set_replies diff --git a/app/controllers/concerns/signature_verification.rb b/app/controllers/concerns/signature_verification.rb index 4da068aed84..2394574b3be 100644 --- a/app/controllers/concerns/signature_verification.rb +++ b/app/controllers/concerns/signature_verification.rb @@ -45,10 +45,14 @@ module SignatureVerification end end - def require_signature! + def require_account_signature! render plain: signature_verification_failure_reason, status: signature_verification_failure_code unless signed_request_account end + def require_actor_signature! + render plain: signature_verification_failure_reason, status: signature_verification_failure_code unless signed_request_actor + end + def signed_request? request.headers['Signature'].present? end @@ -68,7 +72,11 @@ module SignatureVerification end def signed_request_account - return @signed_request_account if defined?(@signed_request_account) + signed_request_actor.is_a?(Account) ? signed_request_actor : nil + end + + def signed_request_actor + return @signed_request_actor if defined?(@signed_request_actor) raise SignatureVerificationError, 'Request not signed' unless signed_request? raise SignatureVerificationError, 'Incompatible request signature. keyId and signature are required' if missing_required_signature_parameters? @@ -78,22 +86,22 @@ module SignatureVerification verify_signature_strength! verify_body_digest! - account = account_from_key_id(signature_params['keyId']) + actor = actor_from_key_id(signature_params['keyId']) - raise SignatureVerificationError, "Public key not found for key #{signature_params['keyId']}" if account.nil? + raise SignatureVerificationError, "Public key not found for key #{signature_params['keyId']}" if actor.nil? signature = Base64.decode64(signature_params['signature']) compare_signed_string = build_signed_string - return account unless verify_signature(account, signature, compare_signed_string).nil? + return actor unless verify_signature(actor, signature, compare_signed_string).nil? - account = stoplight_wrap_request { account.possibly_stale? ? account.refresh! : account_refresh_key(account) } + actor = stoplight_wrap_request { actor_refresh_key!(actor) } - raise SignatureVerificationError, "Public key not found for key #{signature_params['keyId']}" if account.nil? + raise SignatureVerificationError, "Public key not found for key #{signature_params['keyId']}" if actor.nil? - return account unless verify_signature(account, signature, compare_signed_string).nil? + return actor unless verify_signature(actor, signature, compare_signed_string).nil? - fail_with! "Verification failed for #{account.username}@#{account.domain} #{account.uri} using rsa-sha256 (RSASSA-PKCS1-v1_5 with SHA-256)" + fail_with! "Verification failed for #{actor.to_log_human_identifier} #{actor.uri} using rsa-sha256 (RSASSA-PKCS1-v1_5 with SHA-256)" rescue SignatureVerificationError => e fail_with! e.message rescue HTTP::Error, OpenSSL::SSL::SSLError => e @@ -112,7 +120,7 @@ module SignatureVerification def fail_with!(message) @signature_verification_failure_reason = message - @signed_request_account = nil + @signed_request_actor = nil end def signature_params @@ -160,10 +168,10 @@ module SignatureVerification raise SignatureVerificationError, "Invalid Digest value. Computed SHA-256 digest: #{body_digest}; given: #{sha256[1]}" end - def verify_signature(account, signature, compare_signed_string) - if account.keypair.public_key.verify(OpenSSL::Digest.new('SHA256'), signature, compare_signed_string) - @signed_request_account = account - @signed_request_account + def verify_signature(actor, signature, compare_signed_string) + if actor.keypair.public_key.verify(OpenSSL::Digest.new('SHA256'), signature, compare_signed_string) + @signed_request_actor = actor + @signed_request_actor end rescue OpenSSL::PKey::RSAError nil @@ -226,7 +234,7 @@ module SignatureVerification signature_params['keyId'].blank? || signature_params['signature'].blank? end - def account_from_key_id(key_id) + def actor_from_key_id(key_id) domain = key_id.start_with?('acct:') ? key_id.split('@').last : key_id if domain_not_allowed?(domain) @@ -237,13 +245,13 @@ module SignatureVerification if key_id.start_with?('acct:') stoplight_wrap_request { ResolveAccountService.new.call(key_id.gsub(/\Aacct:/, ''), suppress_errors: false) } elsif !ActivityPub::TagManager.instance.local_uri?(key_id) - account = ActivityPub::TagManager.instance.uri_to_resource(key_id, Account) + account = ActivityPub::TagManager.instance.uri_to_actor(key_id) account ||= stoplight_wrap_request { ActivityPub::FetchRemoteKeyService.new.call(key_id, id: false, suppress_errors: false) } account end rescue Mastodon::PrivateNetworkAddressError => e raise SignatureVerificationError, "Requests to private network addresses are disallowed (tried to query #{e.host})" - rescue Mastodon::HostValidationError, ActivityPub::FetchRemoteAccountService::Error, ActivityPub::FetchRemoteKeyService::Error, Webfinger::Error => e + rescue Mastodon::HostValidationError, ActivityPub::FetchRemoteActorService::Error, ActivityPub::FetchRemoteKeyService::Error, Webfinger::Error => e raise SignatureVerificationError, e.message end @@ -255,12 +263,14 @@ module SignatureVerification .run end - def account_refresh_key(account) - return if account.local? || !account.activitypub? - ActivityPub::FetchRemoteAccountService.new.call(account.uri, only_key: true, suppress_errors: false) + def actor_refresh_key!(actor) + return if actor.local? || !actor.activitypub? + return actor.refresh! if actor.respond_to?(:refresh!) && actor.possibly_stale? + + ActivityPub::FetchRemoteActorService.new.call(actor.uri, only_key: true, suppress_errors: false) rescue Mastodon::PrivateNetworkAddressError => e raise SignatureVerificationError, "Requests to private network addresses are disallowed (tried to query #{e.host})" - rescue Mastodon::HostValidationError, ActivityPub::FetchRemoteAccountService::Error, Webfinger::Error => e + rescue Mastodon::HostValidationError, ActivityPub::FetchRemoteActorService::Error, Webfinger::Error => e raise SignatureVerificationError, e.message end end diff --git a/app/controllers/follower_accounts_controller.rb b/app/controllers/follower_accounts_controller.rb index f3f8336c95f..da7bb4ed23f 100644 --- a/app/controllers/follower_accounts_controller.rb +++ b/app/controllers/follower_accounts_controller.rb @@ -4,7 +4,7 @@ class FollowerAccountsController < ApplicationController include AccountControllerConcern include SignatureVerification - before_action :require_signature!, if: -> { request.format == :json && authorized_fetch_mode? } + before_action :require_account_signature!, if: -> { request.format == :json && authorized_fetch_mode? } before_action :set_cache_headers skip_around_action :set_locale, if: -> { request.format == :json } diff --git a/app/controllers/following_accounts_controller.rb b/app/controllers/following_accounts_controller.rb index 69f0321f835..c37e3b68c43 100644 --- a/app/controllers/following_accounts_controller.rb +++ b/app/controllers/following_accounts_controller.rb @@ -4,7 +4,7 @@ class FollowingAccountsController < ApplicationController include AccountControllerConcern include SignatureVerification - before_action :require_signature!, if: -> { request.format == :json && authorized_fetch_mode? } + before_action :require_account_signature!, if: -> { request.format == :json && authorized_fetch_mode? } before_action :set_cache_headers skip_around_action :set_locale, if: -> { request.format == :json } diff --git a/app/controllers/statuses_controller.rb b/app/controllers/statuses_controller.rb index c52170d0818..7d9db4d5b2a 100644 --- a/app/controllers/statuses_controller.rb +++ b/app/controllers/statuses_controller.rb @@ -8,7 +8,7 @@ class StatusesController < ApplicationController layout 'public' - before_action :require_signature!, only: [:show, :activity], if: -> { request.format == :json && authorized_fetch_mode? } + before_action :require_account_signature!, only: [:show, :activity], if: -> { request.format == :json && authorized_fetch_mode? } before_action :set_status before_action :set_instance_presenter before_action :set_link_headers diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb index b82da8f0cd9..6dbc2667a6c 100644 --- a/app/controllers/tags_controller.rb +++ b/app/controllers/tags_controller.rb @@ -8,7 +8,7 @@ class TagsController < ApplicationController layout 'public' - before_action :require_signature!, if: -> { request.format == :json && authorized_fetch_mode? } + before_action :require_account_signature!, if: -> { request.format == :json && authorized_fetch_mode? } before_action :authenticate_user!, if: :whitelist_mode? before_action :set_local before_action :set_tag diff --git a/app/lib/activitypub/activity.rb b/app/lib/activitypub/activity.rb index 7ff06ea390c..f4c67cccd73 100644 --- a/app/lib/activitypub/activity.rb +++ b/app/lib/activitypub/activity.rb @@ -116,12 +116,12 @@ class ActivityPub::Activity def dereference_object! return unless @object.is_a?(String) - dereferencer = ActivityPub::Dereferencer.new(@object, permitted_origin: @account.uri, signature_account: signed_fetch_account) + dereferencer = ActivityPub::Dereferencer.new(@object, permitted_origin: @account.uri, signature_actor: signed_fetch_actor) @object = dereferencer.object unless dereferencer.object.nil? end - def signed_fetch_account + def signed_fetch_actor return Account.find(@options[:delivered_to_account_id]) if @options[:delivered_to_account_id].present? first_mentioned_local_account || first_local_follower @@ -163,15 +163,15 @@ class ActivityPub::Activity end def followed_by_local_accounts? - @account.passive_relationships.exists? || @options[:relayed_through_account]&.passive_relationships&.exists? + @account.passive_relationships.exists? || (@options[:relayed_through_actor].is_a?(Account) && @options[:relayed_through_actor].passive_relationships&.exists?) end def requested_through_relay? - @options[:relayed_through_account] && Relay.find_by(inbox_url: @options[:relayed_through_account].inbox_url)&.enabled? + @options[:relayed_through_actor] && Relay.find_by(inbox_url: @options[:relayed_through_actor].inbox_url)&.enabled? end def reject_payload! - Rails.logger.info("Rejected #{@json['type']} activity #{@json['id']} from #{@account.uri}#{@options[:relayed_through_account] && "via #{@options[:relayed_through_account].uri}"}") + Rails.logger.info("Rejected #{@json['type']} activity #{@json['id']} from #{@account.uri}#{@options[:relayed_through_actor] && "via #{@options[:relayed_through_actor].uri}"}") nil end end diff --git a/app/lib/activitypub/dereferencer.rb b/app/lib/activitypub/dereferencer.rb index bea69608fe2..4d7756d71d8 100644 --- a/app/lib/activitypub/dereferencer.rb +++ b/app/lib/activitypub/dereferencer.rb @@ -3,10 +3,10 @@ class ActivityPub::Dereferencer include JsonLdHelper - def initialize(uri, permitted_origin: nil, signature_account: nil) + def initialize(uri, permitted_origin: nil, signature_actor: nil) @uri = uri @permitted_origin = permitted_origin - @signature_account = signature_account + @signature_actor = signature_actor end def object @@ -46,7 +46,7 @@ class ActivityPub::Dereferencer req.add_headers('Accept' => 'application/activity+json, application/ld+json') req.add_headers(headers) if headers - req.on_behalf_of(@signature_account) if @signature_account + req.on_behalf_of(@signature_actor) if @signature_actor req.perform do |res| if res.code == 200 diff --git a/app/lib/activitypub/linked_data_signature.rb b/app/lib/activitypub/linked_data_signature.rb index e853a970e81..f90adaf6c5f 100644 --- a/app/lib/activitypub/linked_data_signature.rb +++ b/app/lib/activitypub/linked_data_signature.rb @@ -9,7 +9,7 @@ class ActivityPub::LinkedDataSignature @json = json.with_indifferent_access end - def verify_account! + def verify_actor! return unless @json['signature'].is_a?(Hash) type = @json['signature']['type'] @@ -18,7 +18,7 @@ class ActivityPub::LinkedDataSignature return unless type == 'RsaSignature2017' - creator = ActivityPub::TagManager.instance.uri_to_resource(creator_uri, Account) + creator = ActivityPub::TagManager.instance.uri_to_actor(creator_uri) creator ||= ActivityPub::FetchRemoteKeyService.new.call(creator_uri, id: false) return if creator.nil? @@ -35,7 +35,7 @@ class ActivityPub::LinkedDataSignature def sign!(creator, sign_with: nil) options = { 'type' => 'RsaSignature2017', - 'creator' => [ActivityPub::TagManager.instance.uri_for(creator), '#main-key'].join, + 'creator' => ActivityPub::TagManager.instance.key_uri_for(creator), 'created' => Time.now.utc.iso8601, } diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb index f6b9741fa18..3d6b28ef581 100644 --- a/app/lib/activitypub/tag_manager.rb +++ b/app/lib/activitypub/tag_manager.rb @@ -44,6 +44,10 @@ class ActivityPub::TagManager end end + def key_uri_for(target) + [uri_for(target), '#main-key'].join + end + def uri_for_username(username) account_url(username: username) end @@ -155,6 +159,10 @@ class ActivityPub::TagManager path_params[param] end + def uri_to_actor(uri) + uri_to_resource(uri, Account) + end + def uri_to_resource(uri, klass) return if uri.nil? diff --git a/app/lib/request.rb b/app/lib/request.rb index eac04c798da..648aa30850d 100644 --- a/app/lib/request.rb +++ b/app/lib/request.rb @@ -40,12 +40,11 @@ class Request set_digest! if options.key?(:body) end - def on_behalf_of(account, key_id_format = :uri, sign_with: nil) - raise ArgumentError, 'account must not be nil' if account.nil? + def on_behalf_of(actor, sign_with: nil) + raise ArgumentError, 'actor must not be nil' if actor.nil? - @account = account - @keypair = sign_with.present? ? OpenSSL::PKey::RSA.new(sign_with) : @account.keypair - @key_id_format = key_id_format + @actor = actor + @keypair = sign_with.present? ? OpenSSL::PKey::RSA.new(sign_with) : @actor.keypair self end @@ -79,7 +78,7 @@ class Request end def headers - (@account ? @headers.merge('Signature' => signature) : @headers).without(REQUEST_TARGET) + (@actor ? @headers.merge('Signature' => signature) : @headers).without(REQUEST_TARGET) end class << self @@ -128,12 +127,7 @@ class Request end def key_id - case @key_id_format - when :acct - @account.to_webfinger_s - when :uri - [ActivityPub::TagManager.instance.uri_for(@account), '#main-key'].join - end + ActivityPub::TagManager.instance.key_uri_for(@actor) end def http_client diff --git a/app/serializers/activitypub/public_key_serializer.rb b/app/serializers/activitypub/public_key_serializer.rb index 62ed49e81d2..8621517e7cd 100644 --- a/app/serializers/activitypub/public_key_serializer.rb +++ b/app/serializers/activitypub/public_key_serializer.rb @@ -6,7 +6,7 @@ class ActivityPub::PublicKeySerializer < ActivityPub::Serializer attributes :id, :owner, :public_key_pem def id - [ActivityPub::TagManager.instance.uri_for(object), '#main-key'].join + ActivityPub::TagManager.instance.key_uri_for(object) end def owner diff --git a/app/services/activitypub/fetch_remote_account_service.rb b/app/services/activitypub/fetch_remote_account_service.rb index d7d739c592b..ca7a8c6ca89 100644 --- a/app/services/activitypub/fetch_remote_account_service.rb +++ b/app/services/activitypub/fetch_remote_account_service.rb @@ -1,80 +1,12 @@ # frozen_string_literal: true -class ActivityPub::FetchRemoteAccountService < BaseService - include JsonLdHelper - include DomainControlHelper - include WebfingerHelper - - class Error < StandardError; end - - SUPPORTED_TYPES = %w(Application Group Organization Person Service).freeze - +class ActivityPub::FetchRemoteAccountService < ActivityPub::FetchRemoteActorService # Does a WebFinger roundtrip on each call, unless `only_key` is true def call(uri, id: true, prefetched_body: nil, break_on_redirect: false, only_key: false, suppress_errors: true) - return if domain_not_allowed?(uri) - return ActivityPub::TagManager.instance.uri_to_resource(uri, Account) if ActivityPub::TagManager.instance.local_uri?(uri) + actor = super + return actor if actor.nil? || actor.is_a?(Account) - @json = begin - if prefetched_body.nil? - fetch_resource(uri, id) - else - body_to_json(prefetched_body, compare_id: id ? uri : nil) - end - rescue Oj::ParseError - raise Error, "Error parsing JSON-LD document #{uri}" - end - - raise Error, "Error fetching actor JSON at #{uri}" if @json.nil? - raise Error, "Unsupported JSON-LD context for document #{uri}" unless supported_context? - raise Error, "Unexpected object type for actor #{uri} (expected any of: #{SUPPORTED_TYPES})" unless expected_type? - raise Error, "Actor #{uri} has moved to #{@json['movedTo']}" if break_on_redirect && @json['movedTo'].present? - - @uri = @json['id'] - @username = @json['preferredUsername'] - @domain = Addressable::URI.parse(@uri).normalized_host - - check_webfinger! unless only_key - - ActivityPub::ProcessAccountService.new.call(@username, @domain, @json, only_key: only_key, verified_webfinger: !only_key) - rescue Error => e - Rails.logger.debug "Fetching account #{uri} failed: #{e.message}" - raise unless suppress_errors - end - - private - - def check_webfinger! - webfinger = webfinger!("acct:#{@username}@#{@domain}") - confirmed_username, confirmed_domain = split_acct(webfinger.subject) - - if @username.casecmp(confirmed_username).zero? && @domain.casecmp(confirmed_domain).zero? - raise Error, "Webfinger response for #{@username}@#{@domain} does not loop back to #{@uri}" if webfinger.link('self', 'href') != @uri - return - end - - webfinger = webfinger!("acct:#{confirmed_username}@#{confirmed_domain}") - @username, @domain = split_acct(webfinger.subject) - - unless confirmed_username.casecmp(@username).zero? && confirmed_domain.casecmp(@domain).zero? - raise Webfinger::RedirectError, "Too many webfinger redirects for URI #{uri} (stopped at #{@username}@#{@domain})" - end - - raise Error, "Webfinger response for #{@username}@#{@domain} does not loop back to #{@uri}" if webfinger.link('self', 'href') != @uri - rescue Webfinger::RedirectError => e - raise Error, e.message - rescue Webfinger::Error => e - raise Error, "Webfinger error when resolving #{@username}@#{@domain}: #{e.message}" - end - - def split_acct(acct) - acct.gsub(/\Aacct:/, '').split('@') - end - - def supported_context? - super(@json) - end - - def expected_type? - equals_or_includes_any?(@json['type'], SUPPORTED_TYPES) + Rails.logger.debug "Fetching account #{uri} failed: Expected Account, got #{actor.class.name}" + raise Error, "Expected Account, got #{actor.class.name}" unless suppress_errors end end diff --git a/app/services/activitypub/fetch_remote_actor_service.rb b/app/services/activitypub/fetch_remote_actor_service.rb new file mode 100644 index 00000000000..17bf2f2876a --- /dev/null +++ b/app/services/activitypub/fetch_remote_actor_service.rb @@ -0,0 +1,80 @@ +# frozen_string_literal: true + +class ActivityPub::FetchRemoteActorService < BaseService + include JsonLdHelper + include DomainControlHelper + include WebfingerHelper + + class Error < StandardError; end + + SUPPORTED_TYPES = %w(Application Group Organization Person Service).freeze + + # Does a WebFinger roundtrip on each call, unless `only_key` is true + def call(uri, id: true, prefetched_body: nil, break_on_redirect: false, only_key: false, suppress_errors: true) + return if domain_not_allowed?(uri) + return ActivityPub::TagManager.instance.uri_to_actor(uri) if ActivityPub::TagManager.instance.local_uri?(uri) + + @json = begin + if prefetched_body.nil? + fetch_resource(uri, id) + else + body_to_json(prefetched_body, compare_id: id ? uri : nil) + end + rescue Oj::ParseError + raise Error, "Error parsing JSON-LD document #{uri}" + end + + raise Error, "Error fetching actor JSON at #{uri}" if @json.nil? + raise Error, "Unsupported JSON-LD context for document #{uri}" unless supported_context? + raise Error, "Unexpected object type for actor #{uri} (expected any of: #{SUPPORTED_TYPES})" unless expected_type? + raise Error, "Actor #{uri} has moved to #{@json['movedTo']}" if break_on_redirect && @json['movedTo'].present? + + @uri = @json['id'] + @username = @json['preferredUsername'] + @domain = Addressable::URI.parse(@uri).normalized_host + + check_webfinger! unless only_key + + ActivityPub::ProcessAccountService.new.call(@username, @domain, @json, only_key: only_key, verified_webfinger: !only_key) + rescue Error => e + Rails.logger.debug "Fetching actor #{uri} failed: #{e.message}" + raise unless suppress_errors + end + + private + + def check_webfinger! + webfinger = webfinger!("acct:#{@username}@#{@domain}") + confirmed_username, confirmed_domain = split_acct(webfinger.subject) + + if @username.casecmp(confirmed_username).zero? && @domain.casecmp(confirmed_domain).zero? + raise Error, "Webfinger response for #{@username}@#{@domain} does not loop back to #{@uri}" if webfinger.link('self', 'href') != @uri + return + end + + webfinger = webfinger!("acct:#{confirmed_username}@#{confirmed_domain}") + @username, @domain = split_acct(webfinger.subject) + + unless confirmed_username.casecmp(@username).zero? && confirmed_domain.casecmp(@domain).zero? + raise Webfinger::RedirectError, "Too many webfinger redirects for URI #{uri} (stopped at #{@username}@#{@domain})" + end + + raise Error, "Webfinger response for #{@username}@#{@domain} does not loop back to #{@uri}" if webfinger.link('self', 'href') != @uri + rescue Webfinger::RedirectError => e + raise Error, e.message + rescue Webfinger::Error => e + raise Error, "Webfinger error when resolving #{@username}@#{@domain}: #{e.message}" + end + + def split_acct(acct) + acct.gsub(/\Aacct:/, '').split('@') + end + + def supported_context? + super(@json) + end + + def expected_type? + equals_or_includes_any?(@json['type'], SUPPORTED_TYPES) + end +end diff --git a/app/services/activitypub/fetch_remote_key_service.rb b/app/services/activitypub/fetch_remote_key_service.rb index 01008d8831b..fe8f60b55ce 100644 --- a/app/services/activitypub/fetch_remote_key_service.rb +++ b/app/services/activitypub/fetch_remote_key_service.rb @@ -5,7 +5,7 @@ class ActivityPub::FetchRemoteKeyService < BaseService class Error < StandardError; end - # Returns account that owns the key + # Returns actor that owns the key def call(uri, id: true, prefetched_body: nil, suppress_errors: true) raise Error, 'No key URI given' if uri.blank? @@ -27,7 +27,7 @@ class ActivityPub::FetchRemoteKeyService < BaseService raise Error, "Unable to fetch key JSON at #{uri}" if @json.nil? raise Error, "Unsupported JSON-LD context for document #{uri}" unless supported_context?(@json) raise Error, "Unexpected object type for key #{uri}" unless expected_type? - return find_account(@json['id'], @json, suppress_errors) if person? + return find_actor(@json['id'], @json, suppress_errors) if person? @owner = fetch_resource(owner_uri, true) @@ -36,7 +36,7 @@ class ActivityPub::FetchRemoteKeyService < BaseService raise Error, "Unexpected object type for actor #{owner_uri} (expected any of: #{SUPPORTED_TYPES})" unless expected_owner_type? raise Error, "publicKey id for #{owner_uri} does not correspond to #{@json['id']}" unless confirmed_owner? - find_account(owner_uri, @owner, suppress_errors) + find_actor(owner_uri, @owner, suppress_errors) rescue Error => e Rails.logger.debug "Fetching key #{uri} failed: #{e.message}" raise unless suppress_errors @@ -44,18 +44,18 @@ class ActivityPub::FetchRemoteKeyService < BaseService private - def find_account(uri, prefetched_body, suppress_errors) - account = ActivityPub::TagManager.instance.uri_to_resource(uri, Account) - account ||= ActivityPub::FetchRemoteAccountService.new.call(uri, prefetched_body: prefetched_body, suppress_errors: suppress_errors) - account + def find_actor(uri, prefetched_body, suppress_errors) + actor = ActivityPub::TagManager.instance.uri_to_actor(uri) + actor ||= ActivityPub::FetchRemoteActorService.new.call(uri, prefetched_body: prefetched_body, suppress_errors: suppress_errors) + actor end def expected_type? - person? || public_key? + actor? || public_key? end - def person? - equals_or_includes_any?(@json['type'], ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES) + def actor? + equals_or_includes_any?(@json['type'], ActivityPub::FetchRemoteActorService::SUPPORTED_TYPES) end def public_key? @@ -67,7 +67,7 @@ class ActivityPub::FetchRemoteKeyService < BaseService end def expected_owner_type? - equals_or_includes_any?(@owner['type'], ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES) + equals_or_includes_any?(@owner['type'], ActivityPub::FetchRemoteActorService::SUPPORTED_TYPES) end def confirmed_owner? diff --git a/app/services/activitypub/process_collection_service.rb b/app/services/activitypub/process_collection_service.rb index eb008c40a26..fffe3019570 100644 --- a/app/services/activitypub/process_collection_service.rb +++ b/app/services/activitypub/process_collection_service.rb @@ -3,8 +3,8 @@ class ActivityPub::ProcessCollectionService < BaseService include JsonLdHelper - def call(body, account, **options) - @account = account + def call(body, actor, **options) + @account = actor @json = original_json = Oj.load(body, mode: :strict) @options = options @@ -16,6 +16,7 @@ class ActivityPub::ProcessCollectionService < BaseService end return if !supported_context? || (different_actor? && verify_account!.nil?) || suspended_actor? || @account.local? + return unless @account.is_a?(Account) if @json['signature'].present? # We have verified the signature, but in the compaction step above, might @@ -66,8 +67,10 @@ class ActivityPub::ProcessCollectionService < BaseService end def verify_account! - @options[:relayed_through_account] = @account - @account = ActivityPub::LinkedDataSignature.new(@json).verify_account! + @options[:relayed_through_actor] = @account + @account = ActivityPub::LinkedDataSignature.new(@json).verify_actor! + @account = nil unless @account.is_a?(Account) + @account rescue JSON::LD::JsonLdError => e Rails.logger.debug "Could not verify LD-Signature for #{value_or_id(@json['actor'])}: #{e.message}" nil diff --git a/app/services/fetch_resource_service.rb b/app/services/fetch_resource_service.rb index 6c0093cd45e..73204e55db0 100644 --- a/app/services/fetch_resource_service.rb +++ b/app/services/fetch_resource_service.rb @@ -47,7 +47,7 @@ class FetchResourceService < BaseService body = response.body_with_limit json = body_to_json(body) - [json['id'], { prefetched_body: body, id: true }] if supported_context?(json) && (equals_or_includes_any?(json['type'], ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES) || expected_type?(json)) + [json['id'], { prefetched_body: body, id: true }] if supported_context?(json) && (equals_or_includes_any?(json['type'], ActivityPub::FetchRemoteActorService::SUPPORTED_TYPES) || expected_type?(json)) elsif !terminal link_header = response['Link'] && parse_link_header(response) diff --git a/app/services/keys/claim_service.rb b/app/services/keys/claim_service.rb index 69568a0d19b..ae9e24a24fe 100644 --- a/app/services/keys/claim_service.rb +++ b/app/services/keys/claim_service.rb @@ -72,7 +72,7 @@ class Keys::ClaimService < BaseService def build_post_request(uri) Request.new(:post, uri).tap do |request| - request.on_behalf_of(@source_account, :uri) + request.on_behalf_of(@source_account) request.add_headers(HEADERS) end end diff --git a/app/services/resolve_url_service.rb b/app/services/resolve_url_service.rb index e2c745673e5..37c856cf869 100644 --- a/app/services/resolve_url_service.rb +++ b/app/services/resolve_url_service.rb @@ -20,8 +20,8 @@ class ResolveURLService < BaseService private def process_url - if equals_or_includes_any?(type, ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES) - ActivityPub::FetchRemoteAccountService.new.call(resource_url, prefetched_body: body) + if equals_or_includes_any?(type, ActivityPub::FetchRemoteActorService::SUPPORTED_TYPES) + ActivityPub::FetchRemoteActorService.new.call(resource_url, prefetched_body: body) elsif equals_or_includes_any?(type, ActivityPub::Activity::Create::SUPPORTED_TYPES + ActivityPub::Activity::Create::CONVERTED_TYPES) status = FetchRemoteStatusService.new.call(resource_url, body) authorize_with @on_behalf_of, status, :show? unless status.nil? diff --git a/app/workers/activitypub/delivery_worker.rb b/app/workers/activitypub/delivery_worker.rb index 788f2cf8094..d9153132b31 100644 --- a/app/workers/activitypub/delivery_worker.rb +++ b/app/workers/activitypub/delivery_worker.rb @@ -37,7 +37,7 @@ class ActivityPub::DeliveryWorker def build_request(http_client) Request.new(:post, @inbox_url, body: @json, http_client: http_client).tap do |request| - request.on_behalf_of(@source_account, :uri, sign_with: @options[:sign_with]) + request.on_behalf_of(@source_account, sign_with: @options[:sign_with]) request.add_headers(HEADERS) request.add_headers({ 'Collection-Synchronization' => synchronization_header }) if ENV['DISABLE_FOLLOWERS_SYNCHRONIZATION'] != 'true' && @options[:synchronize_followers] end diff --git a/app/workers/activitypub/processing_worker.rb b/app/workers/activitypub/processing_worker.rb index 37e316354b9..4d06ad07960 100644 --- a/app/workers/activitypub/processing_worker.rb +++ b/app/workers/activitypub/processing_worker.rb @@ -5,11 +5,15 @@ class ActivityPub::ProcessingWorker sidekiq_options backtrace: true, retry: 8 - def perform(account_id, body, delivered_to_account_id = nil) - account = Account.find_by(id: account_id) - return if account.nil? + def perform(actor_id, body, delivered_to_account_id = nil, actor_type = 'Account') + case actor_type + when 'Account' + actor = Account.find_by(id: actor_id) + end - ActivityPub::ProcessCollectionService.new.call(body, account, override_timestamps: true, delivered_to_account_id: delivered_to_account_id, delivery: true) + return if actor.nil? + + ActivityPub::ProcessCollectionService.new.call(body, actor, override_timestamps: true, delivered_to_account_id: delivered_to_account_id, delivery: true) rescue ActiveRecord::RecordInvalid => e Rails.logger.debug "Error processing incoming ActivityPub object: #{e}" end diff --git a/spec/controllers/accounts_controller_spec.rb b/spec/controllers/accounts_controller_spec.rb index 662a89927d4..12266c800ba 100644 --- a/spec/controllers/accounts_controller_spec.rb +++ b/spec/controllers/accounts_controller_spec.rb @@ -420,7 +420,7 @@ RSpec.describe AccountsController, type: :controller do let(:remote_account) { Fabricate(:account, domain: 'example.com') } before do - allow(controller).to receive(:signed_request_account).and_return(remote_account) + allow(controller).to receive(:signed_request_actor).and_return(remote_account) get :show, params: { username: account.username, format: format } end diff --git a/spec/controllers/activitypub/collections_controller_spec.rb b/spec/controllers/activitypub/collections_controller_spec.rb index 4d87f80ced5..f78d9abbf03 100644 --- a/spec/controllers/activitypub/collections_controller_spec.rb +++ b/spec/controllers/activitypub/collections_controller_spec.rb @@ -24,7 +24,7 @@ RSpec.describe ActivityPub::CollectionsController, type: :controller do end before do - allow(controller).to receive(:signed_request_account).and_return(remote_account) + allow(controller).to receive(:signed_request_actor).and_return(remote_account) Fabricate(:status_pin, account: account) Fabricate(:status_pin, account: account) diff --git a/spec/controllers/activitypub/followers_synchronizations_controller_spec.rb b/spec/controllers/activitypub/followers_synchronizations_controller_spec.rb index e233bd56053..c19bb8cae76 100644 --- a/spec/controllers/activitypub/followers_synchronizations_controller_spec.rb +++ b/spec/controllers/activitypub/followers_synchronizations_controller_spec.rb @@ -15,7 +15,7 @@ RSpec.describe ActivityPub::FollowersSynchronizationsController, type: :controll end before do - allow(controller).to receive(:signed_request_account).and_return(remote_account) + allow(controller).to receive(:signed_request_actor).and_return(remote_account) end describe 'GET #show' do diff --git a/spec/controllers/activitypub/inboxes_controller_spec.rb b/spec/controllers/activitypub/inboxes_controller_spec.rb index 973ad83bb3e..2f023197be4 100644 --- a/spec/controllers/activitypub/inboxes_controller_spec.rb +++ b/spec/controllers/activitypub/inboxes_controller_spec.rb @@ -6,7 +6,7 @@ RSpec.describe ActivityPub::InboxesController, type: :controller do let(:remote_account) { nil } before do - allow(controller).to receive(:signed_request_account).and_return(remote_account) + allow(controller).to receive(:signed_request_actor).and_return(remote_account) end describe 'POST #create' do diff --git a/spec/controllers/activitypub/outboxes_controller_spec.rb b/spec/controllers/activitypub/outboxes_controller_spec.rb index 04f03644729..74bf46a5eb1 100644 --- a/spec/controllers/activitypub/outboxes_controller_spec.rb +++ b/spec/controllers/activitypub/outboxes_controller_spec.rb @@ -28,7 +28,7 @@ RSpec.describe ActivityPub::OutboxesController, type: :controller do end before do - allow(controller).to receive(:signed_request_account).and_return(remote_account) + allow(controller).to receive(:signed_request_actor).and_return(remote_account) end describe 'GET #show' do diff --git a/spec/controllers/activitypub/replies_controller_spec.rb b/spec/controllers/activitypub/replies_controller_spec.rb index a35957f24c2..aee1a8b1ad9 100644 --- a/spec/controllers/activitypub/replies_controller_spec.rb +++ b/spec/controllers/activitypub/replies_controller_spec.rb @@ -168,7 +168,7 @@ RSpec.describe ActivityPub::RepliesController, type: :controller do before do stub_const 'ActivityPub::RepliesController::DESCENDANTS_LIMIT', 5 - allow(controller).to receive(:signed_request_account).and_return(remote_querier) + allow(controller).to receive(:signed_request_actor).and_return(remote_querier) Fabricate(:status, thread: status, visibility: :public) Fabricate(:status, thread: status, visibility: :public) diff --git a/spec/controllers/concerns/signature_verification_spec.rb b/spec/controllers/concerns/signature_verification_spec.rb index 05fb1445b1a..6e73643b4d3 100644 --- a/spec/controllers/concerns/signature_verification_spec.rb +++ b/spec/controllers/concerns/signature_verification_spec.rb @@ -3,6 +3,16 @@ require 'rails_helper' describe ApplicationController, type: :controller do + class WrappedActor + attr_reader :wrapped_account + + def initialize(wrapped_account) + @wrapped_account = wrapped_account + end + + delegate :uri, :keypair, to: :wrapped_account + end + controller do include SignatureVerification @@ -73,6 +83,41 @@ describe ApplicationController, type: :controller do end end + context 'with a valid actor that is not an Account' do + let(:actor) { WrappedActor.new(author) } + + before do + get :success + + fake_request = Request.new(:get, request.url) + fake_request.on_behalf_of(author) + + request.headers.merge!(fake_request.headers) + + allow(ActivityPub::TagManager.instance).to receive(:uri_to_actor).with(anything) do + actor + end + end + + describe '#signed_request?' do + it 'returns true' do + expect(controller.signed_request?).to be true + end + end + + describe '#signed_request_account' do + it 'returns nil' do + expect(controller.signed_request_account).to be_nil + end + end + + describe '#signed_request_actor' do + it 'returns the expected actor' do + expect(controller.signed_request_actor).to eq actor + end + end + end + context 'with request older than a day' do before do get :success diff --git a/spec/controllers/statuses_controller_spec.rb b/spec/controllers/statuses_controller_spec.rb index 05fae67fab1..6ed5d4bbb6c 100644 --- a/spec/controllers/statuses_controller_spec.rb +++ b/spec/controllers/statuses_controller_spec.rb @@ -426,7 +426,7 @@ describe StatusesController do let(:remote_account) { Fabricate(:account, domain: 'example.com') } before do - allow(controller).to receive(:signed_request_account).and_return(remote_account) + allow(controller).to receive(:signed_request_actor).and_return(remote_account) end context 'when account blocks account' do diff --git a/spec/lib/activitypub/activity/announce_spec.rb b/spec/lib/activitypub/activity/announce_spec.rb index 41806b25829..e9cd6c68c1d 100644 --- a/spec/lib/activitypub/activity/announce_spec.rb +++ b/spec/lib/activitypub/activity/announce_spec.rb @@ -115,7 +115,7 @@ RSpec.describe ActivityPub::Activity::Announce do let(:object_json) { 'https://example.com/actor/hello-world' } - subject { described_class.new(json, sender, relayed_through_account: relay_account) } + subject { described_class.new(json, sender, relayed_through_actor: relay_account) } before do stub_request(:get, 'https://example.com/actor/hello-world').to_return(body: Oj.dump(unknown_object_json)) diff --git a/spec/lib/activitypub/dereferencer_spec.rb b/spec/lib/activitypub/dereferencer_spec.rb index ce30513d762..e50b497c7ec 100644 --- a/spec/lib/activitypub/dereferencer_spec.rb +++ b/spec/lib/activitypub/dereferencer_spec.rb @@ -4,10 +4,10 @@ RSpec.describe ActivityPub::Dereferencer do describe '#object' do let(:object) { { '@context': 'https://www.w3.org/ns/activitystreams', id: 'https://example.com/foo', type: 'Note', content: 'Hoge' } } let(:permitted_origin) { 'https://example.com' } - let(:signature_account) { nil } + let(:signature_actor) { nil } let(:uri) { nil } - subject { described_class.new(uri, permitted_origin: permitted_origin, signature_account: signature_account).object } + subject { described_class.new(uri, permitted_origin: permitted_origin, signature_actor: signature_actor).object } before do stub_request(:get, 'https://example.com/foo').to_return(body: Oj.dump(object), headers: { 'Content-Type' => 'application/activity+json' }) @@ -21,7 +21,7 @@ RSpec.describe ActivityPub::Dereferencer do end context 'with signature account' do - let(:signature_account) { Fabricate(:account) } + let(:signature_actor) { Fabricate(:account) } it 'makes signed request' do subject @@ -52,7 +52,7 @@ RSpec.describe ActivityPub::Dereferencer do end context 'with signature account' do - let(:signature_account) { Fabricate(:account) } + let(:signature_actor) { Fabricate(:account) } it 'makes signed request' do subject diff --git a/spec/lib/activitypub/linked_data_signature_spec.rb b/spec/lib/activitypub/linked_data_signature_spec.rb index 2222c46fb55..d55a7c7fa85 100644 --- a/spec/lib/activitypub/linked_data_signature_spec.rb +++ b/spec/lib/activitypub/linked_data_signature_spec.rb @@ -20,7 +20,7 @@ RSpec.describe ActivityPub::LinkedDataSignature do stub_jsonld_contexts! end - describe '#verify_account!' do + describe '#verify_actor!' do context 'when signature matches' do let(:raw_signature) do { @@ -32,7 +32,7 @@ RSpec.describe ActivityPub::LinkedDataSignature do let(:signature) { raw_signature.merge('type' => 'RsaSignature2017', 'signatureValue' => sign(sender, raw_signature, raw_json)) } it 'returns creator' do - expect(subject.verify_account!).to eq sender + expect(subject.verify_actor!).to eq sender end end @@ -40,7 +40,7 @@ RSpec.describe ActivityPub::LinkedDataSignature do let(:signature) { nil } it 'returns nil' do - expect(subject.verify_account!).to be_nil + expect(subject.verify_actor!).to be_nil end end @@ -55,7 +55,7 @@ RSpec.describe ActivityPub::LinkedDataSignature do let(:signature) { raw_signature.merge('type' => 'RsaSignature2017', 'signatureValue' => 's69F3mfddd99dGjmvjdjjs81e12jn121Gkm1') } it 'returns nil' do - expect(subject.verify_account!).to be_nil + expect(subject.verify_actor!).to be_nil end end end @@ -73,14 +73,14 @@ RSpec.describe ActivityPub::LinkedDataSignature do end it 'can be verified again' do - expect(described_class.new(subject).verify_account!).to eq sender + expect(described_class.new(subject).verify_actor!).to eq sender end end - def sign(from_account, options, document) + def sign(from_actor, options, document) options_hash = Digest::SHA256.hexdigest(canonicalize(options.merge('@context' => ActivityPub::LinkedDataSignature::CONTEXT))) document_hash = Digest::SHA256.hexdigest(canonicalize(document)) to_be_verified = options_hash + document_hash - Base64.strict_encode64(from_account.keypair.sign(OpenSSL::Digest.new('SHA256'), to_be_verified)) + Base64.strict_encode64(from_actor.keypair.sign(OpenSSL::Digest.new('SHA256'), to_be_verified)) end end diff --git a/spec/services/activitypub/fetch_remote_actor_service_spec.rb b/spec/services/activitypub/fetch_remote_actor_service_spec.rb new file mode 100644 index 00000000000..20117c66d04 --- /dev/null +++ b/spec/services/activitypub/fetch_remote_actor_service_spec.rb @@ -0,0 +1,180 @@ +require 'rails_helper' + +RSpec.describe ActivityPub::FetchRemoteActorService, type: :service do + subject { ActivityPub::FetchRemoteActorService.new } + + let!(:actor) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: 'https://example.com/alice', + type: 'Person', + preferredUsername: 'alice', + name: 'Alice', + summary: 'Foo bar', + inbox: 'http://example.com/alice/inbox', + } + end + + describe '#call' do + let(:account) { subject.call('https://example.com/alice', id: true) } + + shared_examples 'sets profile data' do + it 'returns an account' do + expect(account).to be_an Account + end + + it 'sets display name' do + expect(account.display_name).to eq 'Alice' + end + + it 'sets note' do + expect(account.note).to eq 'Foo bar' + end + + it 'sets URL' do + expect(account.url).to eq 'https://example.com/alice' + end + end + + context 'when the account does not have a inbox' do + let!(:webfinger) { { subject: 'acct:alice@example.com', links: [{ rel: 'self', href: 'https://example.com/alice' }] } } + + before do + actor[:inbox] = nil + + stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor)) + stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' }) + end + + it 'fetches resource' do + account + expect(a_request(:get, 'https://example.com/alice')).to have_been_made.once + end + + it 'looks up webfinger' do + account + expect(a_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com')).to have_been_made.once + end + + it 'returns nil' do + expect(account).to be_nil + end + end + + context 'when URI and WebFinger share the same host' do + let!(:webfinger) { { subject: 'acct:alice@example.com', links: [{ rel: 'self', href: 'https://example.com/alice' }] } } + + before do + stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor)) + stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' }) + end + + it 'fetches resource' do + account + expect(a_request(:get, 'https://example.com/alice')).to have_been_made.once + end + + it 'looks up webfinger' do + account + expect(a_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com')).to have_been_made.once + end + + it 'sets username and domain from webfinger' do + expect(account.username).to eq 'alice' + expect(account.domain).to eq 'example.com' + end + + include_examples 'sets profile data' + end + + context 'when WebFinger presents different domain than URI' do + let!(:webfinger) { { subject: 'acct:alice@iscool.af', links: [{ rel: 'self', href: 'https://example.com/alice' }] } } + + before do + stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor)) + stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' }) + stub_request(:get, 'https://iscool.af/.well-known/webfinger?resource=acct:alice@iscool.af').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' }) + end + + it 'fetches resource' do + account + expect(a_request(:get, 'https://example.com/alice')).to have_been_made.once + end + + it 'looks up webfinger' do + account + expect(a_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com')).to have_been_made.once + end + + it 'looks up "redirected" webfinger' do + account + expect(a_request(:get, 'https://iscool.af/.well-known/webfinger?resource=acct:alice@iscool.af')).to have_been_made.once + end + + it 'sets username and domain from final webfinger' do + expect(account.username).to eq 'alice' + expect(account.domain).to eq 'iscool.af' + end + + include_examples 'sets profile data' + end + + context 'when WebFinger returns a different URI' do + let!(:webfinger) { { subject: 'acct:alice@example.com', links: [{ rel: 'self', href: 'https://example.com/bob' }] } } + + before do + stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor)) + stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' }) + end + + it 'fetches resource' do + account + expect(a_request(:get, 'https://example.com/alice')).to have_been_made.once + end + + it 'looks up webfinger' do + account + expect(a_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com')).to have_been_made.once + end + + it 'does not create account' do + expect(account).to be_nil + end + end + + context 'when WebFinger returns a different URI after a redirection' do + let!(:webfinger) { { subject: 'acct:alice@iscool.af', links: [{ rel: 'self', href: 'https://example.com/bob' }] } } + + before do + stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor)) + stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' }) + stub_request(:get, 'https://iscool.af/.well-known/webfinger?resource=acct:alice@iscool.af').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' }) + end + + it 'fetches resource' do + account + expect(a_request(:get, 'https://example.com/alice')).to have_been_made.once + end + + it 'looks up webfinger' do + account + expect(a_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com')).to have_been_made.once + end + + it 'looks up "redirected" webfinger' do + account + expect(a_request(:get, 'https://iscool.af/.well-known/webfinger?resource=acct:alice@iscool.af')).to have_been_made.once + end + + it 'does not create account' do + expect(account).to be_nil + end + end + + context 'with wrong id' do + it 'does not create account' do + expect(subject.call('https://fake.address/@foo', prefetched_body: Oj.dump(actor))).to be_nil + end + end + end +end diff --git a/spec/services/activitypub/process_collection_service_spec.rb b/spec/services/activitypub/process_collection_service_spec.rb index 3eccaab5bba..093a188a219 100644 --- a/spec/services/activitypub/process_collection_service_spec.rb +++ b/spec/services/activitypub/process_collection_service_spec.rb @@ -68,7 +68,7 @@ RSpec.describe ActivityPub::ProcessCollectionService, type: :service do let(:forwarder) { Fabricate(:account, domain: 'example.com', uri: 'http://example.com/other_account') } it 'does not process payload if no signature exists' do - expect_any_instance_of(ActivityPub::LinkedDataSignature).to receive(:verify_account!).and_return(nil) + expect_any_instance_of(ActivityPub::LinkedDataSignature).to receive(:verify_actor!).and_return(nil) expect(ActivityPub::Activity).not_to receive(:factory) subject.call(json, forwarder) @@ -77,7 +77,7 @@ RSpec.describe ActivityPub::ProcessCollectionService, type: :service do it 'processes payload with actor if valid signature exists' do payload['signature'] = { 'type' => 'RsaSignature2017' } - expect_any_instance_of(ActivityPub::LinkedDataSignature).to receive(:verify_account!).and_return(actor) + expect_any_instance_of(ActivityPub::LinkedDataSignature).to receive(:verify_actor!).and_return(actor) expect(ActivityPub::Activity).to receive(:factory).with(instance_of(Hash), actor, instance_of(Hash)) subject.call(json, forwarder) @@ -86,7 +86,7 @@ RSpec.describe ActivityPub::ProcessCollectionService, type: :service do it 'does not process payload if invalid signature exists' do payload['signature'] = { 'type' => 'RsaSignature2017' } - expect_any_instance_of(ActivityPub::LinkedDataSignature).to receive(:verify_account!).and_return(nil) + expect_any_instance_of(ActivityPub::LinkedDataSignature).to receive(:verify_actor!).and_return(nil) expect(ActivityPub::Activity).not_to receive(:factory) subject.call(json, forwarder) diff --git a/spec/services/fetch_resource_service_spec.rb b/spec/services/fetch_resource_service_spec.rb index ded05ffbc70..c0c96ab69c9 100644 --- a/spec/services/fetch_resource_service_spec.rb +++ b/spec/services/fetch_resource_service_spec.rb @@ -66,7 +66,7 @@ RSpec.describe FetchResourceService, type: :service do it 'signs request' do subject - expect(a_request(:get, url).with(headers: { 'Signature' => /keyId="#{Regexp.escape(ActivityPub::TagManager.instance.uri_for(Account.representative) + '#main-key')}"/ })).to have_been_made + expect(a_request(:get, url).with(headers: { 'Signature' => /keyId="#{Regexp.escape(ActivityPub::TagManager.instance.key_uri_for(Account.representative))}"/ })).to have_been_made end context 'when content type is application/atom+xml' do From 26c51cfa07952b39802ce6de4c952c6adf56b748 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 21 Sep 2022 22:46:35 +0200 Subject: [PATCH 314/646] Fix various rspec warnings in ReportService tests (#19189) * Fix various rspec warnings in ReportService tests * Add tests to ReportService --- spec/services/report_service_spec.rb | 37 +++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/spec/services/report_service_spec.rb b/spec/services/report_service_spec.rb index ea68b3344dc..02bc42ac170 100644 --- a/spec/services/report_service_spec.rb +++ b/spec/services/report_service_spec.rb @@ -42,13 +42,44 @@ RSpec.describe ReportService, type: :service do end it 'creates a report' do - is_expected.to change { target_account.targeted_reports.count }.from(0).to(1) + expect { subject.call }.to change { target_account.targeted_reports.count }.from(0).to(1) + end + + it 'attaches the DM to the report' do + subject.call + expect(target_account.targeted_reports.pluck(:status_ids)).to eq [[status.id]] end end context 'when it is not addressed to the reporter' do it 'errors out' do - is_expected.to raise_error + expect { subject.call }.to raise_error(ActiveRecord::RecordNotFound) + end + end + + context 'when the reporter is remote' do + let(:source_account) { Fabricate(:account, domain: 'example.com', uri: 'https://example.com/users/1') } + + context 'when it is addressed to the reporter' do + before do + status.mentions.create(account: source_account) + end + + it 'creates a report' do + expect { subject.call }.to change { target_account.targeted_reports.count }.from(0).to(1) + end + + it 'attaches the DM to the report' do + subject.call + expect(target_account.targeted_reports.pluck(:status_ids)).to eq [[status.id]] + end + end + + context 'when it is not addressed to the reporter' do + it 'does not add the DM to the report' do + subject.call + expect(target_account.targeted_reports.pluck(:status_ids)).to eq [[]] + end end end end @@ -67,7 +98,7 @@ RSpec.describe ReportService, type: :service do end it 'does not send an e-mail' do - is_expected.to_not change(ActionMailer::Base.deliveries, :count).from(0) + expect { subject.call }.to_not change(ActionMailer::Base.deliveries, :count).from(0) end end end From d2f7e30a283a1dca1f7974884ac0c237b93903ad Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 21 Sep 2022 22:46:57 +0200 Subject: [PATCH 315/646] Add privacy icons to report modal (#19190) --- .../report/components/status_check_box.js | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/features/report/components/status_check_box.js b/app/javascript/mastodon/features/report/components/status_check_box.js index 373c60e21e2..5366da90be6 100644 --- a/app/javascript/mastodon/features/report/components/status_check_box.js +++ b/app/javascript/mastodon/features/report/components/status_check_box.js @@ -7,14 +7,25 @@ import DisplayName from 'mastodon/components/display_name'; import RelativeTimestamp from 'mastodon/components/relative_timestamp'; import Option from './option'; import MediaAttachments from 'mastodon/components/media_attachments'; +import { injectIntl, defineMessages } from 'react-intl'; +import Icon from 'mastodon/components/icon'; -export default class StatusCheckBox extends React.PureComponent { +const messages = defineMessages({ + public_short: { id: 'privacy.public.short', defaultMessage: 'Public' }, + unlisted_short: { id: 'privacy.unlisted.short', defaultMessage: 'Unlisted' }, + private_short: { id: 'privacy.private.short', defaultMessage: 'Followers-only' }, + direct_short: { id: 'privacy.direct.short', defaultMessage: 'Mentioned people only' }, +}); + +export default @injectIntl +class StatusCheckBox extends React.PureComponent { static propTypes = { id: PropTypes.string.isRequired, status: ImmutablePropTypes.map.isRequired, checked: PropTypes.bool, onToggle: PropTypes.func.isRequired, + intl: PropTypes.object.isRequired, }; handleStatusesToggle = (value, checked) => { @@ -23,12 +34,21 @@ export default class StatusCheckBox extends React.PureComponent { }; render () { - const { status, checked } = this.props; + const { status, checked, intl } = this.props; if (status.get('reblog')) { return null; } + const visibilityIconInfo = { + 'public': { icon: 'globe', text: intl.formatMessage(messages.public_short) }, + 'unlisted': { icon: 'unlock', text: intl.formatMessage(messages.unlisted_short) }, + 'private': { icon: 'lock', text: intl.formatMessage(messages.private_short) }, + 'direct': { icon: 'at', text: intl.formatMessage(messages.direct_short) }, + }; + + const visibilityIcon = visibilityIconInfo[status.get('visibility')]; + const labelComponent = (
    @@ -37,7 +57,7 @@ export default class StatusCheckBox extends React.PureComponent {
    - · + ·
    From 0d6b878808a02aa4a544e894f06419c0f612c163 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 23 Sep 2022 23:00:12 +0200 Subject: [PATCH 316/646] Add user content translations with configurable backends (#19218) --- .../v1/statuses/translations_controller.rb | 29 ++++++++++ app/javascript/mastodon/actions/statuses.js | 39 +++++++++++++- app/javascript/mastodon/components/status.js | 16 +++++- .../mastodon/components/status_content.js | 31 ++++++++--- .../mastodon/containers/status_container.js | 10 ++++ .../status/components/detailed_status.js | 13 ++++- .../mastodon/features/status/index.js | 13 +++++ app/javascript/mastodon/reducers/statuses.js | 6 +++ app/lib/translation_service.rb | 23 ++++++++ app/lib/translation_service/deepl.rb | 53 +++++++++++++++++++ .../translation_service/libre_translate.rb | 43 +++++++++++++++ app/lib/translation_service/translation.rb | 5 ++ .../rest/translation_serializer.rb | 9 ++++ app/services/translate_status_service.rb | 24 +++++++++ config/initializers/inflections.rb | 1 + config/routes.rb | 2 + 16 files changed, 306 insertions(+), 11 deletions(-) create mode 100644 app/controllers/api/v1/statuses/translations_controller.rb create mode 100644 app/lib/translation_service.rb create mode 100644 app/lib/translation_service/deepl.rb create mode 100644 app/lib/translation_service/libre_translate.rb create mode 100644 app/lib/translation_service/translation.rb create mode 100644 app/serializers/rest/translation_serializer.rb create mode 100644 app/services/translate_status_service.rb diff --git a/app/controllers/api/v1/statuses/translations_controller.rb b/app/controllers/api/v1/statuses/translations_controller.rb new file mode 100644 index 00000000000..540b17d0092 --- /dev/null +++ b/app/controllers/api/v1/statuses/translations_controller.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +class Api::V1::Statuses::TranslationsController < Api::BaseController + include Authorization + + before_action -> { doorkeeper_authorize! :read, :'read:statuses' } + before_action :set_status + before_action :set_translation + + rescue_from TranslationService::NotConfiguredError, with: :not_found + rescue_from TranslationService::UnexpectedResponseError, TranslationService::QuotaExceededError, TranslationService::TooManyRequestsError, with: :service_unavailable + + def create + render json: @translation, serializer: REST::TranslationSerializer + end + + private + + def set_status + @status = Status.find(params[:status_id]) + authorize @status, :show? + rescue Mastodon::NotPermittedError + not_found + end + + def set_translation + @translation = TranslateStatusService.new.call(@status, content_locale) + end +end diff --git a/app/javascript/mastodon/actions/statuses.js b/app/javascript/mastodon/actions/statuses.js index 32a4f1f8575..4ae1b21e011 100644 --- a/app/javascript/mastodon/actions/statuses.js +++ b/app/javascript/mastodon/actions/statuses.js @@ -34,6 +34,11 @@ export const STATUS_FETCH_SOURCE_REQUEST = 'STATUS_FETCH_SOURCE_REQUEST'; export const STATUS_FETCH_SOURCE_SUCCESS = 'STATUS_FETCH_SOURCE_SUCCESS'; export const STATUS_FETCH_SOURCE_FAIL = 'STATUS_FETCH_SOURCE_FAIL'; +export const STATUS_TRANSLATE_REQUEST = 'STATUS_TRANSLATE_REQUEST'; +export const STATUS_TRANSLATE_SUCCESS = 'STATUS_TRANSLATE_SUCCESS'; +export const STATUS_TRANSLATE_FAIL = 'STATUS_TRANSLATE_FAIL'; +export const STATUS_TRANSLATE_UNDO = 'STATUS_TRANSLATE_UNDO'; + export function fetchStatusRequest(id, skipLoading) { return { type: STATUS_FETCH_REQUEST, @@ -309,4 +314,36 @@ export function toggleStatusCollapse(id, isCollapsed) { id, isCollapsed, }; -} +}; + +export const translateStatus = id => (dispatch, getState) => { + dispatch(translateStatusRequest(id)); + + api(getState).post(`/api/v1/statuses/${id}/translate`).then(response => { + dispatch(translateStatusSuccess(id, response.data)); + }).catch(error => { + dispatch(translateStatusFail(id, error)); + }); +}; + +export const translateStatusRequest = id => ({ + type: STATUS_TRANSLATE_REQUEST, + id, +}); + +export const translateStatusSuccess = (id, translation) => ({ + type: STATUS_TRANSLATE_SUCCESS, + id, + translation, +}); + +export const translateStatusFail = (id, error) => ({ + type: STATUS_TRANSLATE_FAIL, + id, + error, +}); + +export const undoStatusTranslation = id => ({ + type: STATUS_TRANSLATE_UNDO, + id, +}); diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js index 6fc132bf504..0d3b51f07ad 100644 --- a/app/javascript/mastodon/components/status.js +++ b/app/javascript/mastodon/components/status.js @@ -85,6 +85,7 @@ class Status extends ImmutablePureComponent { onHeightChange: PropTypes.func, onToggleHidden: PropTypes.func, onToggleCollapsed: PropTypes.func, + onTranslate: PropTypes.func, muted: PropTypes.bool, hidden: PropTypes.bool, unread: PropTypes.bool, @@ -171,6 +172,10 @@ class Status extends ImmutablePureComponent { this.props.onToggleCollapsed(this._properStatus(), isCollapsed); } + handleTranslate = () => { + this.props.onTranslate(this._properStatus()); + } + renderLoadingMediaGallery () { return
    ; } @@ -512,7 +517,16 @@ class Status extends ImmutablePureComponent {
    - + {media} diff --git a/app/javascript/mastodon/components/status_content.js b/app/javascript/mastodon/components/status_content.js index 724165ada07..c8f7bc0956e 100644 --- a/app/javascript/mastodon/components/status_content.js +++ b/app/javascript/mastodon/components/status_content.js @@ -1,7 +1,7 @@ import React from 'react'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; -import { FormattedMessage } from 'react-intl'; +import { FormattedMessage, injectIntl } from 'react-intl'; import Permalink from './permalink'; import classnames from 'classnames'; import PollContainer from 'mastodon/containers/poll_container'; @@ -10,7 +10,8 @@ import { autoPlayGif } from 'mastodon/initial_state'; const MAX_HEIGHT = 642; // 20px * 32 (+ 2px padding at the top) -export default class StatusContent extends React.PureComponent { +export default @injectIntl +class StatusContent extends React.PureComponent { static contextTypes = { router: PropTypes.object, @@ -21,9 +22,11 @@ export default class StatusContent extends React.PureComponent { expanded: PropTypes.bool, showThread: PropTypes.bool, onExpandedToggle: PropTypes.func, + onTranslate: PropTypes.func, onClick: PropTypes.func, collapsable: PropTypes.bool, onCollapsedToggle: PropTypes.func, + intl: PropTypes.object, }; state = { @@ -163,20 +166,26 @@ export default class StatusContent extends React.PureComponent { } } + handleTranslate = () => { + this.props.onTranslate(); + } + setRef = (c) => { this.node = c; } render () { - const { status } = this.props; + const { status, intl } = this.props; const hidden = this.props.onExpandedToggle ? !this.props.expanded : this.state.hidden; const renderReadMore = this.props.onClick && status.get('collapsed'); const renderViewThread = this.props.showThread && status.get('in_reply_to_id') && status.get('in_reply_to_account_id') === status.getIn(['account', 'id']); + const renderTranslate = this.props.onTranslate && ['public', 'unlisted'].includes(status.get('visibility')) && intl.locale !== status.get('language'); + const languageNames = new Intl.DisplayNames([intl.locale], { type: 'language' }); - const content = { __html: status.get('contentHtml') }; + const content = { __html: status.get('translation') ? status.getIn(['translation', 'content']) : status.get('contentHtml') }; const spoilerContent = { __html: status.get('spoilerHtml') }; - const lang = status.get('language'); + const lang = status.get('translation') ? intl.locale : status.get('language'); const classNames = classnames('status__content', { 'status__content--with-action': this.props.onClick && this.context.router, 'status__content--with-spoiler': status.get('spoiler_text').length > 0, @@ -195,6 +204,12 @@ export default class StatusContent extends React.PureComponent { ); + const translateButton = ( + + ); + if (status.get('spoiler_text').length > 0) { let mentionsPlaceholder = ''; @@ -223,7 +238,7 @@ export default class StatusContent extends React.PureComponent {
    {!hidden && !!status.get('poll') && } - + {!hidden && renderTranslate && translateButton} {renderViewThread && showThreadButton}
    ); @@ -233,7 +248,7 @@ export default class StatusContent extends React.PureComponent {
    {!!status.get('poll') && } - + {renderTranslate && translateButton} {renderViewThread && showThreadButton}
    , ]; @@ -249,7 +264,7 @@ export default class StatusContent extends React.PureComponent {
    {!!status.get('poll') && } - + {renderTranslate && translateButton} {renderViewThread && showThreadButton}
    ); diff --git a/app/javascript/mastodon/containers/status_container.js b/app/javascript/mastodon/containers/status_container.js index 28698b082d6..9280a6ee3f4 100644 --- a/app/javascript/mastodon/containers/status_container.js +++ b/app/javascript/mastodon/containers/status_container.js @@ -25,6 +25,8 @@ import { revealStatus, toggleStatusCollapse, editStatus, + translateStatus, + undoStatusTranslation, } from '../actions/statuses'; import { unmuteAccount, @@ -150,6 +152,14 @@ const mapDispatchToProps = (dispatch, { intl, contextType }) => ({ dispatch(editStatus(status.get('id'), history)); }, + onTranslate (status) { + if (status.get('translation')) { + dispatch(undoStatusTranslation(status.get('id'))); + } else { + dispatch(translateStatus(status.get('id'))); + } + }, + onDirect (account, router) { dispatch(directCompose(account, router)); }, diff --git a/app/javascript/mastodon/features/status/components/detailed_status.js b/app/javascript/mastodon/features/status/components/detailed_status.js index 5c43c20388f..320a847f7ae 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.js +++ b/app/javascript/mastodon/features/status/components/detailed_status.js @@ -37,6 +37,7 @@ class DetailedStatus extends ImmutablePureComponent { onOpenMedia: PropTypes.func.isRequired, onOpenVideo: PropTypes.func.isRequired, onToggleHidden: PropTypes.func.isRequired, + onTranslate: PropTypes.func.isRequired, measureHeight: PropTypes.bool, onHeightChange: PropTypes.func, domain: PropTypes.string.isRequired, @@ -103,6 +104,11 @@ class DetailedStatus extends ImmutablePureComponent { window.open(href, 'mastodon-intent', 'width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes'); } + handleTranslate = () => { + const { onTranslate, status } = this.props; + onTranslate(status); + } + render () { const status = (this.props.status && this.props.status.get('reblog')) ? this.props.status.get('reblog') : this.props.status; const outerStyle = { boxSizing: 'border-box' }; @@ -260,7 +266,12 @@ class DetailedStatus extends ImmutablePureComponent { - + {media} diff --git a/app/javascript/mastodon/features/status/index.js b/app/javascript/mastodon/features/status/index.js index 4d7f24834e4..5ff7e060ef9 100644 --- a/app/javascript/mastodon/features/status/index.js +++ b/app/javascript/mastodon/features/status/index.js @@ -32,6 +32,8 @@ import { editStatus, hideStatus, revealStatus, + translateStatus, + undoStatusTranslation, } from '../../actions/statuses'; import { unblockAccount, @@ -339,6 +341,16 @@ class Status extends ImmutablePureComponent { } } + handleTranslate = status => { + const { dispatch } = this.props; + + if (status.get('translation')) { + dispatch(undoStatusTranslation(status.get('id'))); + } else { + dispatch(translateStatus(status.get('id'))); + } + } + handleBlockClick = (status) => { const { dispatch } = this.props; const account = status.get('account'); @@ -558,6 +570,7 @@ class Status extends ImmutablePureComponent { onOpenVideo={this.handleOpenVideo} onOpenMedia={this.handleOpenMedia} onToggleHidden={this.handleToggleHidden} + onTranslate={this.handleTranslate} domain={domain} showMedia={this.state.showMedia} onToggleMediaVisibility={this.handleToggleMediaVisibility} diff --git a/app/javascript/mastodon/reducers/statuses.js b/app/javascript/mastodon/reducers/statuses.js index 53dec95859d..7efb49d857e 100644 --- a/app/javascript/mastodon/reducers/statuses.js +++ b/app/javascript/mastodon/reducers/statuses.js @@ -13,6 +13,8 @@ import { STATUS_REVEAL, STATUS_HIDE, STATUS_COLLAPSE, + STATUS_TRANSLATE_SUCCESS, + STATUS_TRANSLATE_UNDO, } from '../actions/statuses'; import { TIMELINE_DELETE } from '../actions/timelines'; import { STATUS_IMPORT, STATUSES_IMPORT } from '../actions/importer'; @@ -77,6 +79,10 @@ export default function statuses(state = initialState, action) { return state.setIn([action.id, 'collapsed'], action.isCollapsed); case TIMELINE_DELETE: return deleteStatus(state, action.id, action.references); + case STATUS_TRANSLATE_SUCCESS: + return state.setIn([action.id, 'translation'], fromJS(action.translation)); + case STATUS_TRANSLATE_UNDO: + return state.deleteIn([action.id, 'translation']); default: return state; } diff --git a/app/lib/translation_service.rb b/app/lib/translation_service.rb new file mode 100644 index 00000000000..526e26ae592 --- /dev/null +++ b/app/lib/translation_service.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class TranslationService + class Error < StandardError; end + class NotConfiguredError < Error; end + class TooManyRequestsError < Error; end + class QuotaExceededError < Error; end + class UnexpectedResponseError < Error; end + + def self.configured + if ENV['DEEPL_API_KEY'].present? + TranslationService::DeepL.new(ENV.fetch('DEEPL_PLAN', 'free'), ENV['DEEPL_API_KEY']) + elsif ENV['LIBRE_TRANSLATE_ENDPOINT'].present? + TranslationService::LibreTranslate.new(ENV['LIBRE_TRANSLATE_ENDPOINT'], ENV['LIBRE_TRANSLATE_API_KEY']) + else + raise NotConfiguredError + end + end + + def translate(_text, _source_language, _target_language) + raise NotImplementedError + end +end diff --git a/app/lib/translation_service/deepl.rb b/app/lib/translation_service/deepl.rb new file mode 100644 index 00000000000..89ccf01e517 --- /dev/null +++ b/app/lib/translation_service/deepl.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +class TranslationService::DeepL < TranslationService + include JsonLdHelper + + def initialize(plan, api_key) + super() + + @plan = plan + @api_key = api_key + end + + def translate(text, source_language, target_language) + request(text, source_language, target_language).perform do |res| + case res.code + when 429 + raise TooManyRequestsError + when 456 + raise QuotaExceededError + when 200...300 + transform_response(res.body_with_limit) + else + raise UnexpectedResponseError + end + end + end + + private + + def request(text, source_language, target_language) + req = Request.new(:post, endpoint_url, form: { text: text, source_lang: source_language.upcase, target_lang: target_language, tag_handling: 'html' }) + req.add_headers('Authorization': "DeepL-Auth-Key #{@api_key}") + req + end + + def endpoint_url + if @plan == 'free' + 'https://api-free.deepl.com/v2/translate' + else + 'https://api.deepl.com/v2/translate' + end + end + + def transform_response(str) + json = Oj.load(str, mode: :strict) + + raise UnexpectedResponseError unless json.is_a?(Hash) + + Translation.new(text: json.dig('translations', 0, 'text'), detected_source_language: json.dig('translations', 0, 'detected_source_language')&.downcase) + rescue Oj::ParseError + raise UnexpectedResponseError + end +end diff --git a/app/lib/translation_service/libre_translate.rb b/app/lib/translation_service/libre_translate.rb new file mode 100644 index 00000000000..66acdeed7b9 --- /dev/null +++ b/app/lib/translation_service/libre_translate.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +class TranslationService::LibreTranslate < TranslationService + def initialize(base_url, api_key) + super() + + @base_url = base_url + @api_key = api_key + end + + def translate(text, source_language, target_language) + request(text, source_language, target_language).perform do |res| + case res.code + when 429 + raise TooManyRequestsError + when 403 + raise QuotaExceededError + when 200...300 + transform_response(res.body_with_limit, source_language) + else + raise UnexpectedResponseError + end + end + end + + private + + def request(text, source_language, target_language) + req = Request.new(:post, "#{@base_url}/translate", body: Oj.dump(q: text, source: source_language, target: target_language, format: 'html', api_key: @api_key)) + req.add_headers('Content-Type': 'application/json') + req + end + + def transform_response(str, source_language) + json = Oj.load(str, mode: :strict) + + raise UnexpectedResponseError unless json.is_a?(Hash) + + Translation.new(text: json['translatedText'], detected_source_language: source_language) + rescue Oj::ParseError + raise UnexpectedResponseError + end +end diff --git a/app/lib/translation_service/translation.rb b/app/lib/translation_service/translation.rb new file mode 100644 index 00000000000..a55b825749d --- /dev/null +++ b/app/lib/translation_service/translation.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +class TranslationService::Translation < ActiveModelSerializers::Model + attributes :text, :detected_source_language +end diff --git a/app/serializers/rest/translation_serializer.rb b/app/serializers/rest/translation_serializer.rb new file mode 100644 index 00000000000..a06f23f3278 --- /dev/null +++ b/app/serializers/rest/translation_serializer.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class REST::TranslationSerializer < ActiveModel::Serializer + attributes :content, :detected_source_language + + def content + object.text + end +end diff --git a/app/services/translate_status_service.rb b/app/services/translate_status_service.rb new file mode 100644 index 00000000000..b375226bec2 --- /dev/null +++ b/app/services/translate_status_service.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +class TranslateStatusService < BaseService + CACHE_TTL = 1.day.freeze + + def call(status, target_language) + raise Mastodon::NotPermittedError unless status.public_visibility? || status.unlisted_visibility? + + @status = status + @target_language = target_language + + Rails.cache.fetch("translations/#{@status.language}/#{@target_language}/#{content_hash}", expires_in: CACHE_TTL) { translation_backend.translate(@status.text, @status.language, @target_language) } + end + + private + + def translation_backend + TranslationService.configured + end + + def content_hash + Digest::SHA256.base64digest(@status.text) + end +end diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb index 3e5a5561761..a361cb0ec33 100644 --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -25,6 +25,7 @@ ActiveSupport::Inflector.inflections(:en) do |inflect| inflect.acronym 'REST' inflect.acronym 'URL' inflect.acronym 'ASCII' + inflect.acronym 'DeepL' inflect.singular 'data', 'data' end diff --git a/config/routes.rb b/config/routes.rb index 13a4a1618d0..9491c517770 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -393,6 +393,8 @@ Rails.application.routes.draw do resource :history, only: :show resource :source, only: :show + + post :translate, to: 'translations#create' end member do From 0c99c6c3df7882e4a5f6df5ad17e2823211158c0 Mon Sep 17 00:00:00 2001 From: Daniel Jakots Date: Fri, 23 Sep 2022 18:11:34 -0400 Subject: [PATCH 317/646] Update Node to 16.17.1 (#19224) See https://nodejs.org/en/blog/vulnerability/september-2022-security-releases/ for the details. --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 7757bd0e47c..42869d5dec8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ SHELL ["/bin/bash", "-c"] RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections # Install Node v16 (LTS) -ENV NODE_VER="16.16.0" +ENV NODE_VER="16.17.1" RUN ARCH= && \ dpkgArch="$(dpkg --print-architecture)" && \ case "${dpkgArch##*-}" in \ From 85890bc80fe622744f838b8f1ebdfa9278cb3d2b Mon Sep 17 00:00:00 2001 From: Claire Date: Sat, 24 Sep 2022 07:41:01 +0200 Subject: [PATCH 318/646] Fix crash in FetchRemoteKeyService (#19225) Fix regression from #19212 --- app/services/activitypub/fetch_remote_key_service.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/services/activitypub/fetch_remote_key_service.rb b/app/services/activitypub/fetch_remote_key_service.rb index fe8f60b55ce..32e82b47a58 100644 --- a/app/services/activitypub/fetch_remote_key_service.rb +++ b/app/services/activitypub/fetch_remote_key_service.rb @@ -12,7 +12,7 @@ class ActivityPub::FetchRemoteKeyService < BaseService if prefetched_body.nil? if id @json = fetch_resource_without_id_validation(uri) - if person? + if actor_type? @json = fetch_resource(@json['id'], true) elsif uri != @json['id'] raise Error, "Fetched URI #{uri} has wrong id #{@json['id']}" @@ -27,7 +27,7 @@ class ActivityPub::FetchRemoteKeyService < BaseService raise Error, "Unable to fetch key JSON at #{uri}" if @json.nil? raise Error, "Unsupported JSON-LD context for document #{uri}" unless supported_context?(@json) raise Error, "Unexpected object type for key #{uri}" unless expected_type? - return find_actor(@json['id'], @json, suppress_errors) if person? + return find_actor(@json['id'], @json, suppress_errors) if actor_type? @owner = fetch_resource(owner_uri, true) @@ -51,10 +51,10 @@ class ActivityPub::FetchRemoteKeyService < BaseService end def expected_type? - actor? || public_key? + actor_type? || public_key? end - def actor? + def actor_type? equals_or_includes_any?(@json['type'], ActivityPub::FetchRemoteActorService::SUPPORTED_TYPES) end From 7165e89362167eea79f3ab0d0251d56b300dd150 Mon Sep 17 00:00:00 2001 From: Claire Date: Sat, 24 Sep 2022 08:33:27 +0200 Subject: [PATCH 319/646] Add tests to ActivityPub::FetchRemoteKeyService (#19226) --- .../fetch_remote_key_service_spec.rb | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 spec/services/activitypub/fetch_remote_key_service_spec.rb diff --git a/spec/services/activitypub/fetch_remote_key_service_spec.rb b/spec/services/activitypub/fetch_remote_key_service_spec.rb new file mode 100644 index 00000000000..3186c4270d7 --- /dev/null +++ b/spec/services/activitypub/fetch_remote_key_service_spec.rb @@ -0,0 +1,83 @@ +require 'rails_helper' + +RSpec.describe ActivityPub::FetchRemoteKeyService, type: :service do + subject { ActivityPub::FetchRemoteKeyService.new } + + let(:webfinger) { { subject: 'acct:alice@example.com', links: [{ rel: 'self', href: 'https://example.com/alice' }] } } + + let(:public_key_pem) do + "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu3L4vnpNLzVH31MeWI39\n4F0wKeJFsLDAsNXGeOu0QF2x+h1zLWZw/agqD2R3JPU9/kaDJGPIV2Sn5zLyUA9S\n6swCCMOtn7BBR9g9sucgXJmUFB0tACH2QSgHywMAybGfmSb3LsEMNKsGJ9VsvYoh\n8lDET6X4Pyw+ZJU0/OLo/41q9w+OrGtlsTm/PuPIeXnxa6BLqnDaxC+4IcjG/FiP\nahNCTINl/1F/TgSSDZ4Taf4U9XFEIFw8wmgploELozzIzKq+t8nhQYkgAkt64euW\npva3qL5KD1mTIZQEP+LZvh3s2WHrLi3fhbdRuwQ2c0KkJA2oSTFPDpqqbPGZ3Qvu\nHQIDAQAB\n-----END PUBLIC KEY-----\n" + end + + let(:public_key_id) { 'https://example.com/alice#main-key' } + + let(:key_json) do + { + id: public_key_id, + owner: 'https://example.com/alice', + publicKeyPem: public_key_pem, + } + end + + let(:actor_public_key) { key_json } + + let(:actor) do + { + '@context': [ + 'https://www.w3.org/ns/activitystreams', + 'https://w3id.org/security/v1', + ], + id: 'https://example.com/alice', + type: 'Person', + preferredUsername: 'alice', + name: 'Alice', + summary: 'Foo bar', + inbox: 'http://example.com/alice/inbox', + publicKey: actor_public_key, + } + end + + before do + stub_request(:get, 'https://example.com/alice').to_return(body: Oj.dump(actor)) + stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:alice@example.com').to_return(body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' }) + end + + describe '#call' do + let(:account) { subject.call(public_key_id, id: false) } + + context 'when the key is a sub-object from the actor' do + before do + stub_request(:get, public_key_id).to_return(body: Oj.dump(actor)) + end + + it 'returns the expected account' do + expect(account.uri).to eq 'https://example.com/alice' + end + end + + context 'when the key is a separate document' do + let(:public_key_id) { 'https://example.com/alice-public-key.json' } + + before do + stub_request(:get, public_key_id).to_return(body: Oj.dump(key_json.merge({ '@context': ['https://www.w3.org/ns/activitystreams', 'https://w3id.org/security/v1'] }))) + end + + it 'returns the expected account' do + expect(account.uri).to eq 'https://example.com/alice' + end + end + + context 'when the key and owner do not match' do + let(:public_key_id) { 'https://example.com/fake-public-key.json' } + let(:actor_public_key) { 'https://example.com/alice-public-key.json' } + + before do + stub_request(:get, public_key_id).to_return(body: Oj.dump(key_json.merge({ '@context': ['https://www.w3.org/ns/activitystreams', 'https://w3id.org/security/v1'] }))) + end + + it 'returns the nil' do + expect(account).to be_nil + end + end + end +end From be05e6a37d2cfdeb8434ec2f2a0ed4526f3142ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 24 Sep 2022 19:37:14 +0900 Subject: [PATCH 320/646] Bump sidekiq from 6.5.6 to 6.5.7 (#19210) Bumps [sidekiq](https://github.com/mperham/sidekiq) from 6.5.6 to 6.5.7. - [Release notes](https://github.com/mperham/sidekiq/releases) - [Changelog](https://github.com/mperham/sidekiq/blob/main/Changes.md) - [Commits](https://github.com/mperham/sidekiq/compare/v6.5.6...v6.5.7) --- updated-dependencies: - dependency-name: sidekiq dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index ae43ce254ac..ff9db24d118 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -608,7 +608,7 @@ GEM activerecord (>= 4.0.0) railties (>= 4.0.0) semantic_range (3.0.0) - sidekiq (6.5.6) + sidekiq (6.5.7) connection_pool (>= 2.2.5) rack (~> 2.0) redis (>= 4.5.0, < 5) From bec214d090719ef98639072967ea6a22829c8eae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 24 Sep 2022 19:38:46 +0900 Subject: [PATCH 321/646] Bump httplog from 1.5.0 to 1.6.0 (#19192) Bumps [httplog](https://github.com/trusche/httplog) from 1.5.0 to 1.6.0. - [Release notes](https://github.com/trusche/httplog/releases) - [Changelog](https://github.com/trusche/httplog/blob/master/CHANGELOG.md) - [Commits](https://github.com/trusche/httplog/commits) --- updated-dependencies: - dependency-name: httplog dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index d90c17f14fa..c1811891638 100644 --- a/Gemfile +++ b/Gemfile @@ -55,7 +55,7 @@ gem 'redis-namespace', '~> 1.9' gem 'htmlentities', '~> 4.3' gem 'http', '~> 5.1' gem 'http_accept_language', '~> 2.1' -gem 'httplog', '~> 1.5.0' +gem 'httplog', '~> 1.6.0' gem 'idn-ruby', require: 'idn' gem 'kaminari', '~> 1.2' gem 'link_header', '~> 0.0' diff --git a/Gemfile.lock b/Gemfile.lock index ff9db24d118..aa41bea0b44 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -309,8 +309,8 @@ GEM http-form_data (2.3.0) http_accept_language (2.1.1) httpclient (2.8.3) - httplog (1.5.0) - rack (>= 1.0) + httplog (1.6.0) + rack (>= 2.0) rainbow (>= 2.0.0) i18n (1.12.0) concurrent-ruby (~> 1.0) @@ -775,7 +775,7 @@ DEPENDENCIES htmlentities (~> 4.3) http (~> 5.1) http_accept_language (~> 2.1) - httplog (~> 1.5.0) + httplog (~> 1.6.0) i18n-tasks (~> 1.0) idn-ruby json-ld From 911951e776beb951512d7ea282e369dc342f2ff2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 24 Sep 2022 19:55:44 +0900 Subject: [PATCH 322/646] Bump connection_pool from 2.2.5 to 2.3.0 (#19202) Bumps [connection_pool](https://github.com/mperham/connection_pool) from 2.2.5 to 2.3.0. - [Release notes](https://github.com/mperham/connection_pool/releases) - [Changelog](https://github.com/mperham/connection_pool/blob/main/Changes.md) - [Commits](https://github.com/mperham/connection_pool/compare/v2.2.5...v2.3.0) --- updated-dependencies: - dependency-name: connection_pool dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index aa41bea0b44..425970a5246 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -175,7 +175,7 @@ GEM coderay (1.1.3) color_diff (0.1) concurrent-ruby (1.1.10) - connection_pool (2.2.5) + connection_pool (2.3.0) cose (1.2.1) cbor (~> 0.5.9) openssl-signature_algorithm (~> 1.0) From 3e0999cd1139d638332d62129dbf0b37263802fd Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 24 Sep 2022 17:28:54 +0200 Subject: [PATCH 323/646] New Crowdin updates (#19208) * New translations en.json (Chinese Traditional) * New translations en.json (Spanish, Argentina) * New translations en.json (Galician) * New translations en.json (Ukrainian) * New translations en.json (Kurmanji (Kurdish)) * New translations en.json (Spanish) * New translations en.json (Arabic) * New translations en.json (Greek) * New translations en.json (Italian) * New translations en.json (Portuguese) * New translations en.json (Hungarian) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Icelandic) * New translations en.json (Albanian) * New translations en.json (Ukrainian) * New translations en.json (Russian) * New translations en.json (Spanish) * New translations en.json (Slovenian) * New translations en.json (Turkish) * New translations en.json (Latvian) * New translations en.json (Thai) * New translations en.json (Czech) * New translations en.json (Czech) * New translations en.yml (Ukrainian) * New translations en.json (Sinhala) * New translations en.yml (Sinhala) * New translations simple_form.en.yml (Sinhala) * New translations en.json (Vietnamese) * New translations en.json (German) * New translations activerecord.en.yml (Galician) * New translations en.json (Thai) * New translations en.yml (Thai) * New translations en.json (Vietnamese) * New translations en.yml (Vietnamese) * New translations en.json (Sinhala) * New translations en.json (Kurmanji (Kurdish)) * Run `yarn manage:translations` * Run `bundle exec i18n-tasks normalize` * New translations en.yml (Polish) * New translations simple_form.en.yml (Polish) * Run `bundle exec i18n-tasks normalize` Co-authored-by: Yamagishi Kazutoshi --- app/javascript/mastodon/locales/af.json | 3 ++ app/javascript/mastodon/locales/ar.json | 19 ++++++----- app/javascript/mastodon/locales/ast.json | 3 ++ app/javascript/mastodon/locales/bg.json | 3 ++ app/javascript/mastodon/locales/bn.json | 3 ++ app/javascript/mastodon/locales/br.json | 3 ++ app/javascript/mastodon/locales/ca.json | 3 ++ app/javascript/mastodon/locales/ckb.json | 3 ++ app/javascript/mastodon/locales/co.json | 3 ++ app/javascript/mastodon/locales/cs.json | 11 ++++--- app/javascript/mastodon/locales/cy.json | 3 ++ app/javascript/mastodon/locales/da.json | 3 ++ app/javascript/mastodon/locales/de.json | 11 ++++--- .../mastodon/locales/defaultMessages.json | 33 +++++++++++++++++++ app/javascript/mastodon/locales/el.json | 5 ++- app/javascript/mastodon/locales/en-GB.json | 3 ++ app/javascript/mastodon/locales/en.json | 3 ++ app/javascript/mastodon/locales/eo.json | 3 ++ app/javascript/mastodon/locales/es-AR.json | 9 +++-- app/javascript/mastodon/locales/es-MX.json | 3 ++ app/javascript/mastodon/locales/es.json | 11 ++++--- app/javascript/mastodon/locales/et.json | 3 ++ app/javascript/mastodon/locales/eu.json | 3 ++ app/javascript/mastodon/locales/fa.json | 3 ++ app/javascript/mastodon/locales/fi.json | 3 ++ app/javascript/mastodon/locales/fr.json | 3 ++ app/javascript/mastodon/locales/fy.json | 3 ++ app/javascript/mastodon/locales/ga.json | 3 ++ app/javascript/mastodon/locales/gd.json | 3 ++ app/javascript/mastodon/locales/gl.json | 11 ++++--- app/javascript/mastodon/locales/he.json | 3 ++ app/javascript/mastodon/locales/hi.json | 3 ++ app/javascript/mastodon/locales/hr.json | 3 ++ app/javascript/mastodon/locales/hu.json | 11 ++++--- app/javascript/mastodon/locales/hy.json | 3 ++ app/javascript/mastodon/locales/id.json | 3 ++ app/javascript/mastodon/locales/io.json | 3 ++ app/javascript/mastodon/locales/is.json | 11 ++++--- app/javascript/mastodon/locales/it.json | 11 ++++--- app/javascript/mastodon/locales/ja.json | 3 ++ app/javascript/mastodon/locales/ka.json | 3 ++ app/javascript/mastodon/locales/kab.json | 3 ++ app/javascript/mastodon/locales/kk.json | 3 ++ app/javascript/mastodon/locales/kn.json | 3 ++ app/javascript/mastodon/locales/ko.json | 3 ++ app/javascript/mastodon/locales/ku.json | 13 +++++--- app/javascript/mastodon/locales/kw.json | 3 ++ app/javascript/mastodon/locales/lt.json | 3 ++ app/javascript/mastodon/locales/lv.json | 11 ++++--- app/javascript/mastodon/locales/mk.json | 3 ++ app/javascript/mastodon/locales/ml.json | 3 ++ app/javascript/mastodon/locales/mr.json | 3 ++ app/javascript/mastodon/locales/ms.json | 3 ++ app/javascript/mastodon/locales/nl.json | 3 ++ app/javascript/mastodon/locales/nn.json | 3 ++ app/javascript/mastodon/locales/no.json | 3 ++ app/javascript/mastodon/locales/oc.json | 3 ++ app/javascript/mastodon/locales/pa.json | 3 ++ app/javascript/mastodon/locales/pl.json | 11 ++++--- app/javascript/mastodon/locales/pt-BR.json | 3 ++ app/javascript/mastodon/locales/pt-PT.json | 11 ++++--- app/javascript/mastodon/locales/ro.json | 3 ++ app/javascript/mastodon/locales/ru.json | 11 ++++--- app/javascript/mastodon/locales/sa.json | 3 ++ app/javascript/mastodon/locales/sc.json | 3 ++ app/javascript/mastodon/locales/si.json | 29 ++++++++-------- app/javascript/mastodon/locales/sk.json | 3 ++ app/javascript/mastodon/locales/sl.json | 11 ++++--- app/javascript/mastodon/locales/sq.json | 11 ++++--- app/javascript/mastodon/locales/sr-Latn.json | 3 ++ app/javascript/mastodon/locales/sr.json | 3 ++ app/javascript/mastodon/locales/sv.json | 3 ++ app/javascript/mastodon/locales/szl.json | 3 ++ app/javascript/mastodon/locales/ta.json | 3 ++ app/javascript/mastodon/locales/tai.json | 3 ++ app/javascript/mastodon/locales/te.json | 3 ++ app/javascript/mastodon/locales/th.json | 11 ++++--- app/javascript/mastodon/locales/tr.json | 11 ++++--- app/javascript/mastodon/locales/tt.json | 3 ++ app/javascript/mastodon/locales/ug.json | 3 ++ app/javascript/mastodon/locales/uk.json | 11 ++++--- app/javascript/mastodon/locales/ur.json | 3 ++ app/javascript/mastodon/locales/vi.json | 13 +++++--- app/javascript/mastodon/locales/zgh.json | 3 ++ app/javascript/mastodon/locales/zh-CN.json | 3 ++ app/javascript/mastodon/locales/zh-HK.json | 3 ++ app/javascript/mastodon/locales/zh-TW.json | 11 ++++--- config/locales/pl.yml | 10 ++++++ config/locales/si.yml | 8 ++--- config/locales/simple_form.pl.yml | 1 + config/locales/simple_form.si.yml | 2 +- config/locales/th.yml | 2 ++ config/locales/uk.yml | 7 +++- config/locales/vi.yml | 2 +- 94 files changed, 419 insertions(+), 110 deletions(-) diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json index 384e6feb2eb..8e236194166 100644 --- a/app/javascript/mastodon/locales/af.json +++ b/app/javascript/mastodon/locales/af.json @@ -519,7 +519,10 @@ "status.show_less_all": "Show less for all", "status.show_more": "Show more", "status.show_more_all": "Show more for all", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 65ec25be91f..81c1f810453 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -60,7 +60,7 @@ "alert.unexpected.title": "المعذرة!", "announcement.announcement": "إعلان", "attachments_list.unprocessed": "(غير معالَج)", - "audio.hide": "Hide audio", + "audio.hide": "إخفاء المقطع الصوتي", "autosuggest_hashtag.per_week": "{count} في الأسبوع", "boost_modal.combo": "يُمكنك الضّغط على {combo} لتخطي هذا في المرة المُقبلة", "bundle_column_error.body": "لقد حدث خطأ ما أثناء تحميل هذا العنصر.", @@ -204,7 +204,7 @@ "filter_modal.added.expired_title": "Expired filter!", "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", "filter_modal.added.review_and_configure_title": "Filter settings", - "filter_modal.added.settings_link": "settings page", + "filter_modal.added.settings_link": "صفحة الإعدادات", "filter_modal.added.short_explanation": "This post has been added to the following filter category: {title}.", "filter_modal.added.title": "Filter added!", "filter_modal.select_filter.context_mismatch": "does not apply to this context", @@ -348,7 +348,7 @@ "notification.update": "عدّلَ {name} منشورًا", "notifications.clear": "امسح الإخطارات", "notifications.clear_confirmation": "أمتأكد من أنك تود مسح جل الإخطارات الخاصة بك و المتلقاة إلى حد الآن ؟", - "notifications.column_settings.admin.report": "New reports:", + "notifications.column_settings.admin.report": "التقارير الجديدة:", "notifications.column_settings.admin.sign_up": "التسجيلات الجديدة:", "notifications.column_settings.alert": "إشعارات سطح المكتب", "notifications.column_settings.favourite": "المُفَضَّلة:", @@ -455,8 +455,8 @@ "report.unfollow": "إلغاء متابعة @{name}", "report.unfollow_explanation": "أنت تتابع هذا الحساب، لإزالة مَنشوراته من تغذيَتِكَ الرئيسة ألغ متابعته.", "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", - "report_notification.categories.other": "Other", - "report_notification.categories.spam": "Spam", + "report_notification.categories.other": "آخر", + "report_notification.categories.spam": "مزعج", "report_notification.categories.violation": "Rule violation", "report_notification.open": "Open report", "search.placeholder": "ابحث", @@ -490,7 +490,7 @@ "status.favourite": "أضف إلى المفضلة", "status.filter": "Filter this post", "status.filtered": "مُصفّى", - "status.hide": "Hide toot", + "status.hide": "اخف التبويق", "status.history.created": "أنشأه {name} {date}", "status.history.edited": "عدله {name} {date}", "status.load_more": "حمّل المزيد", @@ -514,17 +514,20 @@ "status.report": "ابلِغ عن @{name}", "status.sensitive_warning": "محتوى حساس", "status.share": "مشاركة", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "إظهار على أي حال", "status.show_less": "اعرض أقلّ", "status.show_less_all": "طي الكل", "status.show_more": "أظهر المزيد", "status.show_more_all": "توسيع الكل", + "status.show_original": "Show original", "status.show_thread": "الكشف عن المحادثة", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "غير متوفر", "status.unmute_conversation": "فك الكتم عن المحادثة", "status.unpin": "فك التدبيس من الصفحة التعريفية", "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", + "subscribed_languages.save": "حفظ التغييرات", "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "إلغاء الاقتراح", "suggestions.header": "يمكن أن يهمك…", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 5479563172d..5c128ef2005 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -519,7 +519,10 @@ "status.show_less_all": "Amosar menos en too", "status.show_more": "Amosar más", "status.show_more_all": "Amosar más en too", + "status.show_original": "Show original", "status.show_thread": "Amosar el filu", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Non disponible", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Desfixar del perfil", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 4135ff3cfed..84007763ce8 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -519,7 +519,10 @@ "status.show_less_all": "Покажи по-малко за всички", "status.show_more": "Покажи повече", "status.show_more_all": "Покажи повече за всички", + "status.show_original": "Show original", "status.show_thread": "Показване на тема", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Не е налично", "status.unmute_conversation": "Раззаглушаване на разговор", "status.unpin": "Разкачане от профил", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index dfa718ae01c..388b2a8141d 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -519,7 +519,10 @@ "status.show_less_all": "সবগুলোতে কম দেখতে", "status.show_more": "আরো দেখাতে", "status.show_more_all": "সবগুলোতে আরো দেখতে", + "status.show_original": "Show original", "status.show_thread": "আলোচনা দেখতে", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "পাওয়া যাচ্ছে না", "status.unmute_conversation": "আলোচনার প্রজ্ঞাপন চালু করতে", "status.unpin": "নিজের পাতা থেকে পিন করে রাখাটির পিন খুলতে", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index f3d19f9a29a..a1f703cb2bf 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -519,7 +519,10 @@ "status.show_less_all": "Diskouez nebeutoc'h evit an holl", "status.show_more": "Diskouez muioc'h", "status.show_more_all": "Diskouez miuoc'h evit an holl", + "status.show_original": "Show original", "status.show_thread": "Diskouez ar gaozeadenn", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Dihegerz", "status.unmute_conversation": "Diguzhat ar gaozeadenn", "status.unpin": "Dispilhennañ eus ar profil", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 32faea99aa5..81a69c4b022 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -519,7 +519,10 @@ "status.show_less_all": "Mostrar-ne menys per a tot", "status.show_more": "Mostrar-ne més", "status.show_more_all": "Mostrar-ne més per a tot", + "status.show_original": "Show original", "status.show_thread": "Mostra el fil", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "No està disponible", "status.unmute_conversation": "No silenciïs la conversa", "status.unpin": "No fixis al perfil", diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json index 1497e31a3de..638a58a1267 100644 --- a/app/javascript/mastodon/locales/ckb.json +++ b/app/javascript/mastodon/locales/ckb.json @@ -519,7 +519,10 @@ "status.show_less_all": "هەمووی بچووک بکەوە", "status.show_more": "زیاتر نیشان بدە", "status.show_more_all": "زیاتر نیشان بدە بۆ هەمووی", + "status.show_original": "Show original", "status.show_thread": "نیشاندانی گفتوگۆ", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "بەردەست نیە", "status.unmute_conversation": "گفتوگۆی بێدەنگ", "status.unpin": "لە سەرەوە لایبە", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index efc584c6682..7075784bc59 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -519,7 +519,10 @@ "status.show_less_all": "Ripiegà tuttu", "status.show_more": "Slibrà", "status.show_more_all": "Slibrà tuttu", + "status.show_original": "Show original", "status.show_thread": "Vede u filu", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Micca dispunibule", "status.unmute_conversation": "Ùn piattà più a cunversazione", "status.unpin": "Spuntarulà da u prufile", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index a5c512c0fe8..e3d2f30e8fd 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -24,7 +24,7 @@ "account.follows_you": "Sleduje vás", "account.hide_reblogs": "Skrýt boosty od @{name}", "account.joined": "Založen {date}", - "account.languages": "Change subscribed languages", + "account.languages": "Změnit odebírané jazyky", "account.link_verified_on": "Vlastnictví tohoto odkazu bylo zkontrolováno {date}", "account.locked_info": "Stav soukromí tohoto účtu je nastaven na zamčeno. Jeho vlastník ručně posuzuje, kdo ho může sledovat.", "account.media": "Média", @@ -519,13 +519,16 @@ "status.show_less_all": "Zobrazit méně pro všechny", "status.show_more": "Zobrazit více", "status.show_more_all": "Zobrazit více pro všechny", + "status.show_original": "Show original", "status.show_thread": "Zobrazit vlákno", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Nedostupné", "status.unmute_conversation": "Odkrýt konverzaci", "status.unpin": "Odepnout z profilu", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "Po změně se objeví pouze příspěvky ve vybraných jazycích na vašem domě a zobrazí se seznam časových os. Pro příjem příspěvků ve všech jazycích nevyber žádnou.", + "subscribed_languages.save": "Uložit změny", + "subscribed_languages.target": "Změnit odebírané jazyky na {target}", "suggestions.dismiss": "Odmítnout návrh", "suggestions.header": "Mohlo by vás zajímat…", "tabs_bar.federated_timeline": "Federovaná", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index de59b5ac51a..c777dcd6ab0 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -519,7 +519,10 @@ "status.show_less_all": "Dangos llai i bawb", "status.show_more": "Dangos mwy", "status.show_more_all": "Dangos mwy i bawb", + "status.show_original": "Show original", "status.show_thread": "Dangos edefyn", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Dim ar gael", "status.unmute_conversation": "Dad-dawelu sgwrs", "status.unpin": "Dadbinio o'r proffil", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index ffa6fdd15af..92dddbfe2e2 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -519,7 +519,10 @@ "status.show_less_all": "Vis mindre for alle", "status.show_more": "Vis mere", "status.show_more_all": "Vis mere for alle", + "status.show_original": "Show original", "status.show_thread": "Vis tråd", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Utilgængelig", "status.unmute_conversation": "Genaktivér samtale", "status.unpin": "Frigør fra profil", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index a8b841a26a5..b0a4ca5faff 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -24,7 +24,7 @@ "account.follows_you": "Folgt dir", "account.hide_reblogs": "Geteilte Beiträge von @{name} verbergen", "account.joined": "Beigetreten am {date}", - "account.languages": "Change subscribed languages", + "account.languages": "Abonnierte Sprachen ändern", "account.link_verified_on": "Diesem Profil folgt niemand", "account.locked_info": "Der Privatsphärenstatus dieses Accounts wurde auf „gesperrt“ gesetzt. Die Person bestimmt manuell, wer ihm/ihr folgen darf.", "account.media": "Medien", @@ -519,13 +519,16 @@ "status.show_less_all": "Alle Inhaltswarnungen zuklappen", "status.show_more": "Mehr anzeigen", "status.show_more_all": "Alle Inhaltswarnungen aufklappen", + "status.show_original": "Show original", "status.show_thread": "Zeige Konversation", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Nicht verfügbar", "status.unmute_conversation": "Stummschaltung von Konversation aufheben", "status.unpin": "Vom Profil lösen", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "Nur Beiträge in ausgewählten Sprachen werden nach der Änderung auf deiner Startseite und den Listen angezeigt. Wähle keine aus, um Beiträge in allen Sprachen zu erhalten.", + "subscribed_languages.save": "Änderungen speichern", + "subscribed_languages.target": "Abonnierte Sprachen für {target} ändern", "suggestions.dismiss": "Empfehlung ausblenden", "suggestions.header": "Du bist vielleicht interessiert an…", "tabs_bar.federated_timeline": "Föderation", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index 4c208c3cb1d..6b27f7877a3 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -653,6 +653,18 @@ "defaultMessage": "Read more", "id": "status.read_more" }, + { + "defaultMessage": "Translated from {lang}", + "id": "status.translated_from" + }, + { + "defaultMessage": "Show original", + "id": "status.show_original" + }, + { + "defaultMessage": "Translate", + "id": "status.translate" + }, { "defaultMessage": "Show more", "id": "status.show_more" @@ -3022,6 +3034,27 @@ ], "path": "app/javascript/mastodon/features/report/comment.json" }, + { + "descriptors": [ + { + "defaultMessage": "Public", + "id": "privacy.public.short" + }, + { + "defaultMessage": "Unlisted", + "id": "privacy.unlisted.short" + }, + { + "defaultMessage": "Followers-only", + "id": "privacy.private.short" + }, + { + "defaultMessage": "Mentioned people only", + "id": "privacy.direct.short" + } + ], + "path": "app/javascript/mastodon/features/report/components/status_check_box.json" + }, { "descriptors": [ { diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index d90455b519b..2a32dbcc6ec 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -519,12 +519,15 @@ "status.show_less_all": "Δείξε λιγότερα για όλα", "status.show_more": "Δείξε περισσότερα", "status.show_more_all": "Δείξε περισσότερα για όλα", + "status.show_original": "Show original", "status.show_thread": "Εμφάνιση νήματος", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Μη διαθέσιμα", "status.unmute_conversation": "Διέκοψε την αποσιώπηση της συζήτησης", "status.unpin": "Ξεκαρφίτσωσε από το προφίλ", "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", + "subscribed_languages.save": "Αποθήκευση αλλαγών", "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "Απόρριψη πρότασης", "suggestions.header": "Ίσως να ενδιαφέρεσαι για…", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index eab3be805bb..7dc245a383c 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -519,7 +519,10 @@ "status.show_less_all": "Show less for all", "status.show_more": "Show more", "status.show_more_all": "Show more for all", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 4f515b3214a..c7b31e6f445 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -519,7 +519,10 @@ "status.show_less_all": "Show less for all", "status.show_more": "Show more", "status.show_more_all": "Show more for all", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 0363f6715d9..bb770767cb5 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -519,7 +519,10 @@ "status.show_less_all": "Montri malpli ĉiun", "status.show_more": "Montri pli", "status.show_more_all": "Montri pli ĉiun", + "status.show_original": "Show original", "status.show_thread": "Montri la mesaĝaron", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Nedisponebla", "status.unmute_conversation": "Malsilentigi la konversacion", "status.unpin": "Depingli de profilo", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 8a7335ac02d..6246462bb91 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -519,13 +519,16 @@ "status.show_less_all": "Mostrar menos para todo", "status.show_more": "Mostrar más", "status.show_more_all": "Mostrar más para todo", + "status.show_original": "Show original", "status.show_thread": "Mostrar hilo", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "No disponible", "status.unmute_conversation": "Dejar de silenciar conversación", "status.unpin": "Dejar de fijar", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "Después del cambio, sólo los mensajes en los idiomas seleccionados aparecerán en tu línea temporal Principal y en las líneas de tiempo de lista. No seleccionés ningún idioma para poder recibir mensajes en todos los idiomas.", + "subscribed_languages.save": "Guardar cambios", + "subscribed_languages.target": "Cambiar idiomas suscritos para {target}", "suggestions.dismiss": "Descartar sugerencia", "suggestions.header": "Es posible que te interese…", "tabs_bar.federated_timeline": "Federada", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 2bcc3a55465..f9823a8a40d 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -519,7 +519,10 @@ "status.show_less_all": "Mostrar menos para todo", "status.show_more": "Mostrar más", "status.show_more_all": "Mostrar más para todo", + "status.show_original": "Show original", "status.show_thread": "Mostrar hilo", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "No disponible", "status.unmute_conversation": "Dejar de silenciar conversación", "status.unpin": "Dejar de fijar", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index ade9480d759..68cd972ab53 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -24,7 +24,7 @@ "account.follows_you": "Te sigue", "account.hide_reblogs": "Ocultar retoots de @{name}", "account.joined": "Se unió el {date}", - "account.languages": "Change subscribed languages", + "account.languages": "Cambiar idiomas suscritos", "account.link_verified_on": "El proprietario de este link fue comprobado el {date}", "account.locked_info": "El estado de privacidad de esta cuenta està configurado como bloqueado. El proprietario debe revisar manualmente quien puede seguirle.", "account.media": "Multimedia", @@ -519,13 +519,16 @@ "status.show_less_all": "Mostrar menos para todo", "status.show_more": "Mostrar más", "status.show_more_all": "Mostrar más para todo", + "status.show_original": "Show original", "status.show_thread": "Mostrar hilo", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "No disponible", "status.unmute_conversation": "Dejar de silenciar conversación", "status.unpin": "Dejar de fijar", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "Sólo los mensajes en los idiomas seleccionados aparecerán en su inicio y otras líneas de tiempo después del cambio. Seleccione ninguno para recibir mensajes en todos los idiomas.", + "subscribed_languages.save": "Guardar cambios", + "subscribed_languages.target": "Cambiar idiomas suscritos para {target}", "suggestions.dismiss": "Descartar sugerencia", "suggestions.header": "Es posible que te interese…", "tabs_bar.federated_timeline": "Federada", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 3eaaa12ec6e..86dc9549513 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -519,7 +519,10 @@ "status.show_less_all": "Näita vähem kõigile", "status.show_more": "Näita veel", "status.show_more_all": "Näita enam kõigile", + "status.show_original": "Show original", "status.show_thread": "Kuva lõim", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Pole saadaval", "status.unmute_conversation": "Ära vaigista vestlust", "status.unpin": "Kinnita profiililt lahti", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 5b72eeb2d65..77259248cfe 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -519,7 +519,10 @@ "status.show_less_all": "Erakutsi denetarik gutxiago", "status.show_more": "Erakutsi gehiago", "status.show_more_all": "Erakutsi denetarik gehiago", + "status.show_original": "Show original", "status.show_thread": "Erakutsi haria", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Ez eskuragarri", "status.unmute_conversation": "Desmututu elkarrizketa", "status.unpin": "Desfinkatu profiletik", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index f3e6fbc7240..7046b9a1438 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -519,7 +519,10 @@ "status.show_less_all": "نمایش کمتر همه", "status.show_more": "نمایش بیشتر", "status.show_more_all": "نمایش بیشتر همه", + "status.show_original": "Show original", "status.show_thread": "نمایش رشته", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "ناموجود", "status.unmute_conversation": "رفع خموشی گفت‌وگو", "status.unpin": "برداشتن سنجاق از نمایه", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 6920093f47a..1cbea98087a 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -519,7 +519,10 @@ "status.show_less_all": "Näytä vähemmän kaikista", "status.show_more": "Näytä lisää", "status.show_more_all": "Näytä lisää kaikista", + "status.show_original": "Show original", "status.show_thread": "Näytä ketju", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Ei saatavilla", "status.unmute_conversation": "Poista keskustelun mykistys", "status.unpin": "Irrota profiilista", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 9cbbc3c03dd..3172f6c72c9 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -519,7 +519,10 @@ "status.show_less_all": "Tout replier", "status.show_more": "Déplier", "status.show_more_all": "Tout déplier", + "status.show_original": "Show original", "status.show_thread": "Montrer le fil", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Indisponible", "status.unmute_conversation": "Ne plus masquer la conversation", "status.unpin": "Retirer du profil", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index 1e49a7e178b..b47dc584ce0 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -519,7 +519,10 @@ "status.show_less_all": "Foar alles minder sjen litte", "status.show_more": "Mear sjen litte", "status.show_more_all": "Foar alles mear sjen litte", + "status.show_original": "Show original", "status.show_thread": "Petear sjen litte", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Net beskikber", "status.unmute_conversation": "Petear net mear negearre", "status.unpin": "Unpin from profile", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index e9e1e96d46a..91f802f7049 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -519,7 +519,10 @@ "status.show_less_all": "Show less for all", "status.show_more": "Show more", "status.show_more_all": "Show more for all", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Díbhalbhaigh comhrá", "status.unpin": "Díphionnáil de do phróifíl", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 7f17df51ebf..93a53f960c9 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -519,7 +519,10 @@ "status.show_less_all": "Seall nas lugha dhen a h-uile", "status.show_more": "Seall barrachd dheth", "status.show_more_all": "Seall barrachd dhen a h-uile", + "status.show_original": "Show original", "status.show_thread": "Seall an snàithlean", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Chan eil seo ri fhaighinn", "status.unmute_conversation": "Dì-mhùch an còmhradh", "status.unpin": "Dì-phrìnich on phròifil", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 215956d4963..6b7cf5bedc0 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -24,7 +24,7 @@ "account.follows_you": "Séguete", "account.hide_reblogs": "Agochar repeticións de @{name}", "account.joined": "Uníuse {date}", - "account.languages": "Change subscribed languages", + "account.languages": "Modificar os idiomas subscritos", "account.link_verified_on": "A propiedade desta ligazón foi verificada o {date}", "account.locked_info": "Esta é unha conta privada. A propietaria revisa de xeito manual quen pode seguila.", "account.media": "Multimedia", @@ -519,13 +519,16 @@ "status.show_less_all": "Amosar menos para todos", "status.show_more": "Amosar máis", "status.show_more_all": "Amosar máis para todos", + "status.show_original": "Show original", "status.show_thread": "Amosar fío", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Non dispoñíbel", "status.unmute_conversation": "Deixar de silenciar conversa", "status.unpin": "Desafixar do perfil", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "Ao facer cambios só as publicacións nos idiomas seleccionados aparecerán nas túas cronoloxías. Non elixas ningún para poder ver publicacións en tódolos idiomas.", + "subscribed_languages.save": "Gardar cambios", + "subscribed_languages.target": "Cambiar a subscrición a idiomas para {target}", "suggestions.dismiss": "Rexeitar suxestión", "suggestions.header": "Poderíache interesar…", "tabs_bar.federated_timeline": "Federada", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 9c60de8ca79..a27e0e827f4 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -519,7 +519,10 @@ "status.show_less_all": "להציג פחות מהכל", "status.show_more": "הראה יותר", "status.show_more_all": "להציג יותר מהכל", + "status.show_original": "Show original", "status.show_thread": "הצג כחלק מפתיל", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "לא זמין", "status.unmute_conversation": "הסרת השתקת שיחה", "status.unpin": "לשחרר מקיבוע באודות", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index 6fab737f969..9c2b9e61870 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -519,7 +519,10 @@ "status.show_less_all": "Show less for all", "status.show_more": "और दिखाएँ", "status.show_more_all": "Show more for all", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "अनुपलब्ध", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 94ff9d3a3ce..ebb102b445b 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -519,7 +519,10 @@ "status.show_less_all": "Show less for all", "status.show_more": "Pokaži više", "status.show_more_all": "Show more for all", + "status.show_original": "Show original", "status.show_thread": "Prikaži nit", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Nije dostupno", "status.unmute_conversation": "Poništi utišavanje razgovora", "status.unpin": "Otkvači s profila", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index cc36029563b..c2679b35a12 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -24,7 +24,7 @@ "account.follows_you": "Követ téged", "account.hide_reblogs": "@{name} megtolásainak elrejtése", "account.joined": "Csatlakozott {date}", - "account.languages": "Change subscribed languages", + "account.languages": "Feliratkozott nyelvek módosítása", "account.link_verified_on": "A linket eredetiségét ebben az időpontban ellenőriztük: {date}", "account.locked_info": "Ennek a fióknak zárolt a láthatósága. A tulajdonos kézzel engedélyezi, hogy ki követheti őt.", "account.media": "Média", @@ -519,13 +519,16 @@ "status.show_less_all": "Kevesebbet mindenhol", "status.show_more": "Többet", "status.show_more_all": "Többet mindenhol", + "status.show_original": "Show original", "status.show_thread": "Szál mutatása", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Nem érhető el", "status.unmute_conversation": "Beszélgetés némításának feloldása", "status.unpin": "Kitűzés eltávolítása a profilodról", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "A változtatás után csak a kiválasztott nyelvű bejegyzések fognak megjelenni a kezdőlapon és az idővonalakon. Ha egy sincs kiválasztva, akkor minden nyelven megjelennek a bejegyzések.", + "subscribed_languages.save": "Változások mentése", + "subscribed_languages.target": "Feliratkozott nyelvek módosítása a következőnél: {target}", "suggestions.dismiss": "Javaslat elvetése", "suggestions.header": "Esetleg érdekelhet…", "tabs_bar.federated_timeline": "Föderációs", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index dc1bec6e4e4..44fd15696d1 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -519,7 +519,10 @@ "status.show_less_all": "Թաքցնել բոլոր նախազգուշացնումները", "status.show_more": "Աւելին", "status.show_more_all": "Ցուցադրել բոլոր նախազգուշացնումները", + "status.show_original": "Show original", "status.show_thread": "Բացել շղթան", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Անհասանելի", "status.unmute_conversation": "Ապալռեցնել խօսակցութիւնը", "status.unpin": "Հանել անձնական էջից", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 8b615038bea..986e06c2477 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -519,7 +519,10 @@ "status.show_less_all": "Tampilkan lebih sedikit", "status.show_more": "Tampilkan semua", "status.show_more_all": "Tampilkan lebih banyak", + "status.show_original": "Show original", "status.show_thread": "Tampilkan utas", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Tak tersedia", "status.unmute_conversation": "Bunyikan percakapan", "status.unpin": "Hapus sematan dari profil", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 312ef70aed8..8fe2f7c8c94 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -519,7 +519,10 @@ "status.show_less_all": "Montrez min por omno", "status.show_more": "Montrar plue", "status.show_more_all": "Montrez pluse por omno", + "status.show_original": "Show original", "status.show_thread": "Montrez postaro", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Nedisplonebla", "status.unmute_conversation": "Desilencigez konverso", "status.unpin": "Depinglagez de profilo", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index aa46b748bfd..73eafad061c 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -24,7 +24,7 @@ "account.follows_you": "Fylgir þér", "account.hide_reblogs": "Fela endurbirtingar fyrir @{name}", "account.joined": "Gerðist þátttakandi {date}", - "account.languages": "Change subscribed languages", + "account.languages": "Breyta tungumálum í áskrift", "account.link_verified_on": "Eignarhald á þessum tengli var athugað þann {date}", "account.locked_info": "Staða gagnaleyndar á þessum aðgangi er stillt á læsingu. Eigandinn yfirfer handvirkt hverjir geti fylgst með honum.", "account.media": "Myndskrár", @@ -519,13 +519,16 @@ "status.show_less_all": "Sýna minna fyrir allt", "status.show_more": "Sýna meira", "status.show_more_all": "Sýna meira fyrir allt", + "status.show_original": "Show original", "status.show_thread": "Birta þráð", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Ekki tiltækt", "status.unmute_conversation": "Hætta að þagga niður í samtali", "status.unpin": "Losa af notandasniði", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "Einungis færslur á völdum tungumálum munu birtast á upphafssíðu og tímalínum þínum eftir þessa breytingu. Veldu ekkert til að sjá færslur á öllum tungumálum.", + "subscribed_languages.save": "Vista breytingar", + "subscribed_languages.target": "Breyta tungumálum í áskrift fyrir {target}", "suggestions.dismiss": "Hafna tillögu", "suggestions.header": "Þú gætir haft áhuga á…", "tabs_bar.federated_timeline": "Sameiginlegt", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 28e9902a8a1..92fe389e4b6 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -24,7 +24,7 @@ "account.follows_you": "Ti segue", "account.hide_reblogs": "Nascondi condivisioni da @{name}", "account.joined": "Su questa istanza dal {date}", - "account.languages": "Change subscribed languages", + "account.languages": "Cambia le lingue di cui ricevere i post", "account.link_verified_on": "La proprietà di questo link è stata controllata il {date}", "account.locked_info": "Questo è un account privato. Il proprietario approva manualmente chi può seguirlo.", "account.media": "Media", @@ -519,13 +519,16 @@ "status.show_less_all": "Mostra meno per tutti", "status.show_more": "Mostra di più", "status.show_more_all": "Mostra di più per tutti", + "status.show_original": "Show original", "status.show_thread": "Mostra conversazione", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Non disponibile", "status.unmute_conversation": "Annulla silenzia conversazione", "status.unpin": "Non fissare in cima al profilo", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "Solo i messaggi nelle lingue selezionate appariranno nella tua home e nelle timeline dopo il cambiamento. Seleziona nessuno per ricevere messaggi in tutte le lingue.", + "subscribed_languages.save": "Salva modifiche", + "subscribed_languages.target": "Cambia le lingue di cui ricevere i post per {target}", "suggestions.dismiss": "Elimina suggerimento", "suggestions.header": "Ti potrebbe interessare…", "tabs_bar.federated_timeline": "Federazione", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 5de2a7abda4..1e49517f991 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -519,7 +519,10 @@ "status.show_less_all": "全て隠す", "status.show_more": "もっと見る", "status.show_more_all": "全て見る", + "status.show_original": "Show original", "status.show_thread": "スレッドを表示", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "利用できません", "status.unmute_conversation": "会話のミュートを解除", "status.unpin": "プロフィールへの固定を解除", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index 8021d8be250..f10c97e1c39 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -519,7 +519,10 @@ "status.show_less_all": "აჩვენე ნაკლები ყველაზე", "status.show_more": "აჩვენე მეტი", "status.show_more_all": "აჩვენე მეტი ყველაზე", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "საუბარზე გაჩუმების მოშორება", "status.unpin": "პროფილიდან პინის მოშორება", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 78f41c636cb..644dff4b552 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -519,7 +519,10 @@ "status.show_less_all": "Semẓi akk tisuffγin", "status.show_more": "Ssken-d ugar", "status.show_more_all": "Ẓerr ugar lebda", + "status.show_original": "Show original", "status.show_thread": "Ssken-d lxiḍ", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Ulac-it", "status.unmute_conversation": "Kkes asgugem n udiwenni", "status.unpin": "Kkes asenteḍ seg umaɣnu", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index 29b6aa16a1a..5e77a595939 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -519,7 +519,10 @@ "status.show_less_all": "Бәрін аздап көрсет", "status.show_more": "Толығырақ", "status.show_more_all": "Бәрін толығымен", + "status.show_original": "Show original", "status.show_thread": "Желіні көрсет", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Қолжетімді емес", "status.unmute_conversation": "Пікірталасты үнсіз қылмау", "status.unpin": "Профильден алып тастау", diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json index ed97bac6913..15cafe8f9aa 100644 --- a/app/javascript/mastodon/locales/kn.json +++ b/app/javascript/mastodon/locales/kn.json @@ -519,7 +519,10 @@ "status.show_less_all": "Show less for all", "status.show_more": "Show more", "status.show_more_all": "Show more for all", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index e175821896c..8dc82a3a8a8 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -519,7 +519,10 @@ "status.show_less_all": "모두 접기", "status.show_more": "더 보기", "status.show_more_all": "모두 펼치기", + "status.show_original": "Show original", "status.show_thread": "글타래 보기", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "사용할 수 없음", "status.unmute_conversation": "이 대화의 뮤트 해제하기", "status.unpin": "고정 해제", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index 105c45a2d90..6b5128f4dc3 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -24,9 +24,9 @@ "account.follows_you": "Te dişopîne", "account.hide_reblogs": "Bilindkirinên ji @{name} veşêre", "account.joined": "Di {date} de tevlî bû", - "account.languages": "Change subscribed languages", + "account.languages": "Zimanên beşdarbûyî biguherîne", "account.link_verified_on": "Xwedaniya li vê girêdanê di {date} de hatiye kontrolkirin", - "account.locked_info": "Rewşa vê ajimêrê wek kilît kirî hatiye saz kirin. Xwedî yê ajimêrê, kesên vê bişopîne bi dest vekolin dike.", + "account.locked_info": "Rewşa vê ajimêrê wek kilîtkirî hatiye sazkirin. Xwediyê ajimêrê, bi destan dinirxîne şopandinê dinirxîne.", "account.media": "Medya", "account.mention": "Qal @{name} bike", "account.moved_to": "{name} hate livandin bo:", @@ -519,13 +519,16 @@ "status.show_less_all": "Ji bo hemîyan kêmtir nîşan bide", "status.show_more": "Bêtir nîşan bide", "status.show_more_all": "Bêtir nîşan bide bo hemûyan", + "status.show_original": "Show original", "status.show_thread": "Mijarê nîşan bide", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Tune ye", "status.unmute_conversation": "Axaftinê bêdeng neke", "status.unpin": "Şandiya derzîkirî ji profîlê rake", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "Tenê şandiyên bi zimanên hilbijartî wê di rojev û demnameya te de wê xuya bibe û piştî guhertinê. Ji bo wergirtina şandiyan di hemû zimanan de ne yek hilbijêre.", + "subscribed_languages.save": "Guhertinan tomar bike", + "subscribed_languages.target": "Zimanên beşdarbûyî biguherîne ji bo {target}", "suggestions.dismiss": "Pêşniyarê paşguh bike", "suggestions.header": "Dibe ku bala te bikşîne…", "tabs_bar.federated_timeline": "Giştî", diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json index 6b901f70d6d..34f72a3655b 100644 --- a/app/javascript/mastodon/locales/kw.json +++ b/app/javascript/mastodon/locales/kw.json @@ -519,7 +519,10 @@ "status.show_less_all": "Diskwedhes le rag puptra", "status.show_more": "Diskwedhes moy", "status.show_more_all": "Diskwedhes moy rag puptra", + "status.show_original": "Show original", "status.show_thread": "Diskwedhes neusen", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Ankavadow", "status.unmute_conversation": "Antawhe kesklapp", "status.unpin": "Anfastya a brofil", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 0be6c4e68a5..e01e35714bc 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -519,7 +519,10 @@ "status.show_less_all": "Show less for all", "status.show_more": "Show more", "status.show_more_all": "Show more for all", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 3b538799eb3..b018c8d494c 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -24,7 +24,7 @@ "account.follows_you": "Seko tev", "account.hide_reblogs": "Paslēpt paceltos ierakstus no lietotāja @{name}", "account.joined": "Pievienojās {date}", - "account.languages": "Change subscribed languages", + "account.languages": "Mainīt abonētās valodas", "account.link_verified_on": "Šīs saites piederība ir pārbaudīta {date}", "account.locked_info": "Šī konta privātuma statuss ir slēgts. Īpašnieks izskatīs, kurš viņam drīkst sekot.", "account.media": "Multivide", @@ -519,13 +519,16 @@ "status.show_less_all": "Rādīt mazāk visiem", "status.show_more": "Rādīt vairāk", "status.show_more_all": "Rādīt vairāk visiem", + "status.show_original": "Show original", "status.show_thread": "Rādīt tematu", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Nav pieejams", "status.unmute_conversation": "Atvērt sarunu", "status.unpin": "Noņemt no profila", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "Pēc izmaiņu veikšanas tavā mājas lapā un saraksta laika skalās tiks rādītas tikai ziņas atlasītajās valodās. Neatlasi nevienu, lai saņemtu ziņas visās valodās.", + "subscribed_languages.save": "Saglabāt izmaiņas", + "subscribed_languages.target": "Mainīt abonētās valodas priekš {target}", "suggestions.dismiss": "Noraidīt ieteikumu", "suggestions.header": "Jūs varētu interesēt arī…", "tabs_bar.federated_timeline": "Federētā", diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json index 2c001c37c80..916a8e98a4c 100644 --- a/app/javascript/mastodon/locales/mk.json +++ b/app/javascript/mastodon/locales/mk.json @@ -519,7 +519,10 @@ "status.show_less_all": "Show less for all", "status.show_more": "Show more", "status.show_more_all": "Show more for all", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 44690137284..12196c123d0 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -519,7 +519,10 @@ "status.show_less_all": "Show less for all", "status.show_more": "കൂടുതകൽ കാണിക്കുക", "status.show_more_all": "എല്ലാവർക്കുമായി കൂടുതൽ കാണിക്കുക", + "status.show_original": "Show original", "status.show_thread": "ത്രെഡ് കാണിക്കുക", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "ലഭ്യമല്ല", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index 8c7f0ec1144..6f120c6fba1 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -519,7 +519,10 @@ "status.show_less_all": "Show less for all", "status.show_more": "Show more", "status.show_more_all": "Show more for all", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 4e50ef46543..4dd6ddb408a 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -519,7 +519,10 @@ "status.show_less_all": "Tunjukkan kurang untuk semua", "status.show_more": "Tunjukkan lebih", "status.show_more_all": "Tunjukkan lebih untuk semua", + "status.show_original": "Show original", "status.show_thread": "Tunjuk bebenang", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Tidak tersedia", "status.unmute_conversation": "Nyahbisukan perbualan", "status.unpin": "Nyahsemat daripada profil", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 7831310d841..eab9adbc79a 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -519,7 +519,10 @@ "status.show_less_all": "Alles minder tonen", "status.show_more": "Meer tonen", "status.show_more_all": "Alles meer tonen", + "status.show_original": "Show original", "status.show_thread": "Gesprek tonen", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Niet beschikbaar", "status.unmute_conversation": "Gesprek niet langer negeren", "status.unpin": "Van profielpagina losmaken", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 785662bb5d5..810f23be6a3 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -519,7 +519,10 @@ "status.show_less_all": "Vis mindre for alle", "status.show_more": "Vis meir", "status.show_more_all": "Vis meir for alle", + "status.show_original": "Show original", "status.show_thread": "Vis tråd", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Ikkje tilgjengeleg", "status.unmute_conversation": "Opphev målbinding av samtalen", "status.unpin": "Løys frå profil", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 29df0b2d4ef..7d00b48a711 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -519,7 +519,10 @@ "status.show_less_all": "Vis mindre for alle", "status.show_more": "Vis mer", "status.show_more_all": "Vis mer for alle", + "status.show_original": "Show original", "status.show_thread": "Vis tråden", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Ikke tilgjengelig", "status.unmute_conversation": "Ikke demp samtale", "status.unpin": "Angre festing på profilen", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 66ef6c76f7f..9ae4445fd8d 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -519,7 +519,10 @@ "status.show_less_all": "Los tornar plegar totes", "status.show_more": "Desplegar", "status.show_more_all": "Los desplegar totes", + "status.show_original": "Show original", "status.show_thread": "Mostrar lo fil", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Pas disponible", "status.unmute_conversation": "Tornar mostrar la conversacion", "status.unpin": "Tirar del perfil", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index bde5388c627..f8e7597e5fb 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -519,7 +519,10 @@ "status.show_less_all": "Show less for all", "status.show_more": "Show more", "status.show_more_all": "Show more for all", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index d68c2aaa115..617c81a6847 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -24,7 +24,7 @@ "account.follows_you": "Śledzi Cię", "account.hide_reblogs": "Ukryj podbicia od @{name}", "account.joined": "Dołączył(a) {date}", - "account.languages": "Change subscribed languages", + "account.languages": "Zmień subskrybowane języki", "account.link_verified_on": "Własność tego odnośnika została potwierdzona {date}", "account.locked_info": "To konto jest prywatne. Właściciel ręcznie wybiera kto może go śledzić.", "account.media": "Zawartość multimedialna", @@ -519,13 +519,16 @@ "status.show_less_all": "Zwiń wszystkie", "status.show_more": "Rozwiń", "status.show_more_all": "Rozwiń wszystkie", + "status.show_original": "Show original", "status.show_thread": "Pokaż wątek", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Niedostępne", "status.unmute_conversation": "Cofnij wyciszenie konwersacji", "status.unpin": "Odepnij z profilu", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "Tylko posty w wybranych językach pojawią się na Twojej osi czasu po zmianie. Nie wybieraj żadnego języka aby otrzymywać posty we wszystkich językach.", + "subscribed_languages.save": "Zapisz zmiany", + "subscribed_languages.target": "Zmień subskrybowane języki dla {target}", "suggestions.dismiss": "Odrzuć sugestię", "suggestions.header": "Może Cię zainteresować…", "tabs_bar.federated_timeline": "Globalne", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index ba349524e47..5e0f9058fe8 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -519,7 +519,10 @@ "status.show_less_all": "Mostrar menos em tudo", "status.show_more": "Mostrar mais", "status.show_more_all": "Mostrar mais em tudo", + "status.show_original": "Show original", "status.show_thread": "Mostrar conversa", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Não disponível", "status.unmute_conversation": "Dessilenciar conversa", "status.unpin": "Desafixar", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index d03e6657221..7f30581653e 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -24,7 +24,7 @@ "account.follows_you": "Segue-te", "account.hide_reblogs": "Esconder partilhas de @{name}", "account.joined": "Ingressou em {date}", - "account.languages": "Change subscribed languages", + "account.languages": "Alterar idiomas subscritos", "account.link_verified_on": "A posse deste link foi verificada em {date}", "account.locked_info": "Esta conta é privada. O proprietário revê manualmente quem a pode seguir.", "account.media": "Média", @@ -519,13 +519,16 @@ "status.show_less_all": "Mostrar menos para todas", "status.show_more": "Mostrar mais", "status.show_more_all": "Mostrar mais para todas", + "status.show_original": "Show original", "status.show_thread": "Mostrar conversa", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Não disponível", "status.unmute_conversation": "Deixar de silenciar esta conversa", "status.unpin": "Não fixar no perfil", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "Após a alteração, apenas as publicações nos idiomas selecionados aparecerão na sua página inicial e listas. Não selecione nenhuma para receber publicações de todos os idiomas.", + "subscribed_languages.save": "Guardar alterações", + "subscribed_languages.target": "Alterar idiomas subscritos para {target}", "suggestions.dismiss": "Dispensar a sugestão", "suggestions.header": "Tu podes estar interessado em…", "tabs_bar.federated_timeline": "Federada", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index 626a8a1ed6a..9ef230567cc 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -519,7 +519,10 @@ "status.show_less_all": "Arată mai puțin pentru toți", "status.show_more": "Arată mai mult", "status.show_more_all": "Arată mai mult pentru toți", + "status.show_original": "Show original", "status.show_thread": "Arată discuția", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Indisponibil", "status.unmute_conversation": "Repornește conversația", "status.unpin": "Eliberează din profil", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 51e2d61595e..957f64b856a 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -24,7 +24,7 @@ "account.follows_you": "Подписан(а) на вас", "account.hide_reblogs": "Скрыть продвижения от @{name}", "account.joined": "Зарегистрирован(а) с {date}", - "account.languages": "Change subscribed languages", + "account.languages": "Изменить языки подписки", "account.link_verified_on": "Владение этой ссылкой было проверено {date}", "account.locked_info": "Это закрытый аккаунт. Его владелец вручную одобряет подписчиков.", "account.media": "Медиа", @@ -519,13 +519,16 @@ "status.show_less_all": "Свернуть все спойлеры в ветке", "status.show_more": "Развернуть", "status.show_more_all": "Развернуть все спойлеры в ветке", + "status.show_original": "Show original", "status.show_thread": "Показать обсуждение", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Невозможно отобразить файл", "status.unmute_conversation": "Не игнорировать обсуждение", "status.unpin": "Открепить от профиля", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "Посты только на выбранных языках будут отображаться на вашей домашней странице и в списке лент после изменения. Выберите «Нет», чтобы получать посты на всех языках.", + "subscribed_languages.save": "Сохранить изменения", + "subscribed_languages.target": "Изменить языки подписки для {target}", "suggestions.dismiss": "Удалить предложение", "suggestions.header": "Вам может быть интересно…", "tabs_bar.federated_timeline": "Глобальная", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index e3037bde045..11d2b9e2f6b 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -519,7 +519,10 @@ "status.show_less_all": "Show less for all", "status.show_more": "Show more", "status.show_more_all": "Show more for all", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 4264eaacfdb..1623bacdc57 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -519,7 +519,10 @@ "status.show_less_all": "Ammustra·nde prus pagu pro totus", "status.show_more": "Ammustra·nde prus", "status.show_more_all": "Ammustra·nde prus pro totus", + "status.show_original": "Show original", "status.show_thread": "Ammustra su tema", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "No est a disponimentu", "status.unmute_conversation": "Torra a ativare s'arresonada", "status.unpin": "Boga dae pitzu de su profilu", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 3a26e967a45..a1205e3b44b 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -60,7 +60,7 @@ "alert.unexpected.title": "අපොයි!", "announcement.announcement": "නිවේදනය", "attachments_list.unprocessed": "(සැකසුම් නොකළ)", - "audio.hide": "Hide audio", + "audio.hide": "හඬපටය සඟවන්න", "autosuggest_hashtag.per_week": "සතියකට {count}", "boost_modal.combo": "ඊළඟ වතාවේ මෙය මඟ හැරීමට ඔබට {combo} එබිය හැක", "bundle_column_error.body": "මෙම සංරචකය පූරණය කිරීමේදී යම් දෙයක් වැරදී ඇත.", @@ -224,11 +224,11 @@ "getting_started.developers": "සංවර්ධකයින්", "getting_started.directory": "පැතිකඩ නාමාවලිය", "getting_started.documentation": "ප්‍රලේඛනය", - "getting_started.heading": "ඇරඹේ", + "getting_started.heading": "පටන් ගන්න", "getting_started.invite": "මිනිසුන්ට ආරාධනය", "getting_started.open_source_notice": "Mastodon යනු විවෘත කේත මෘදුකාංගයකි. ඔබට GitHub හි {github}ට දායක වීමට හෝ ගැටළු වාර්තා කිරීමට හැකිය.", "getting_started.security": "ගිණුමේ සැකසුම්", - "getting_started.terms": "සේවාවේ කොන්දේසි", + "getting_started.terms": "සේවාවේ නියම", "hashtag.column_header.tag_mode.all": "සහ {additional}", "hashtag.column_header.tag_mode.any": "හෝ {additional}", "hashtag.column_header.tag_mode.none": "{additional}නොමැතිව", @@ -249,7 +249,7 @@ "intervals.full.days": "{number, plural, one {# දින} other {# දින}}", "intervals.full.hours": "{number, plural, one {# පැය} other {# පැය}}", "intervals.full.minutes": "{number, plural, one {විනාඩි #} other {# මිනිත්තු}}", - "keyboard_shortcuts.back": "ආපසු සැරිසැරීමට", + "keyboard_shortcuts.back": "ආපසු යාත්‍රණය", "keyboard_shortcuts.blocked": "අවහිර කළ පරිශීලක ලැයිස්තුව විවෘත කිරීමට", "keyboard_shortcuts.boost": "වැඩි කිරීමට", "keyboard_shortcuts.column": "එක් තීරුවක තත්ත්වය නාභිගත කිරීමට", @@ -268,18 +268,18 @@ "keyboard_shortcuts.local": "දේශීය කාලරේඛාව විවෘත කිරීමට", "keyboard_shortcuts.mention": "කතුවරයා සඳහන් කිරීමට", "keyboard_shortcuts.muted": "නිශ්ශබ්ද පරිශීලක ලැයිස්තුව විවෘත කිරීමට", - "keyboard_shortcuts.my_profile": "ඔබගේ පැතිකඩ විවෘත කිරීමට", + "keyboard_shortcuts.my_profile": "ඔබගේ පැතිකඩ අරින්න", "keyboard_shortcuts.notifications": "දැනුම්දීම් තීරුව විවෘත කිරීමට", - "keyboard_shortcuts.open_media": "මාධ්‍ය විවෘත කිරීමට", + "keyboard_shortcuts.open_media": "මාධ්‍ය අරින්න", "keyboard_shortcuts.pinned": "පින් කළ මෙවලම් ලැයිස්තුව විවෘත කිරීමට", - "keyboard_shortcuts.profile": "කර්තෘගේ පැතිකඩ විවෘත කිරීමට", + "keyboard_shortcuts.profile": "කතෘගේ පැතිකඩ අරින්න", "keyboard_shortcuts.reply": "පිළිතුරු දීමට", "keyboard_shortcuts.requests": "පහත ඉල්ලීම් ලැයිස්තුව විවෘත කිරීමට", "keyboard_shortcuts.search": "සෙවුම් අවධානය යොමු කිරීමට", "keyboard_shortcuts.spoilers": "CW ක්ෂේත්‍රය පෙන්වීමට/සැඟවීමට", - "keyboard_shortcuts.start": "\"ආරම්භ කරන්න\" තීරුව විවෘත කිරීමට", + "keyboard_shortcuts.start": "\"පටන් ගන්න\" තීරුව අරින්න", "keyboard_shortcuts.toggle_hidden": "CW පිටුපස පෙළ පෙන්වීමට/සැඟවීමට", - "keyboard_shortcuts.toggle_sensitivity": "මාධ්‍ය පෙන්වීමට/සැඟවීමට", + "keyboard_shortcuts.toggle_sensitivity": "මාධ්‍ය පෙන්වන්න/සඟවන්න", "keyboard_shortcuts.toot": "අලුත්ම ටූට් එකක් පටන් ගන්න", "keyboard_shortcuts.unfocus": "අවධානය යොමු නොකිරීමට textarea/search රචනා කරන්න", "keyboard_shortcuts.up": "ලැයිස්තුවේ ඉහළට යාමට", @@ -428,7 +428,7 @@ "report.category.title_status": "තැපැල්", "report.close": "අහවරයි", "report.comment.title": "අප දැනගත යුතු යැයි ඔබ සිතන තවත් යමක් තිබේද?", - "report.forward": "{target}වෙත යොමු කරන්න", + "report.forward": "{target} වෙත හරවන්න", "report.forward_hint": "ගිණුම වෙනත් සේවාදායකයකින්. වාර්තාවේ නිර්නාමික පිටපතක් එතනටත් එවන්න?", "report.mute": "නිහඬ", "report.mute_explanation": "ඔබට ඔවුන්ගේ පෝස්ට් නොපෙනේ. ඔවුන්ට තවමත් ඔබව අනුගමනය කිරීමට සහ ඔබේ පළ කිරීම් දැකීමට හැකි අතර ඒවා නිශ්ශබ්ද කර ඇති බව නොදැනේ.", @@ -519,12 +519,15 @@ "status.show_less_all": "සියල්ල අඩුවෙන් පෙන්වන්න", "status.show_more": "තවත් පෙන්වන්න", "status.show_more_all": "සියල්ල වැඩියෙන් පෙන්වන්න", + "status.show_original": "Show original", "status.show_thread": "නූල් පෙන්වන්න", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "නොතිබේ", "status.unmute_conversation": "සංවාදය නොනිහඬ", "status.unpin": "පැතිකඩෙන් ගළවන්න", "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", + "subscribed_languages.save": "වෙනස්කම් සුරකින්න", "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "යෝජනාව ඉවතලන්න", "suggestions.header": "ඔබ…ගැන උනන්දු විය හැකිය", @@ -544,7 +547,7 @@ "timeline_hint.resources.statuses": "පරණ ලිපි", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "දැන් ප්‍රවණතාවය", - "ui.beforeunload": "ඔබ Mastodon හැර ගියහොත් ඔබේ කෙටුම්පත නැති වනු ඇත.", + "ui.beforeunload": "ඔබ මාස්ටඩන් හැර ගියහොත් කටුපිටපත අහිමි වේ.", "units.short.billion": "{count}බී", "units.short.million": "{count}එම්", "units.short.thousand": "{count}කි", @@ -554,7 +557,7 @@ "upload_error.poll": "මත විමසුම් සමඟ ගොනු යෙදීමට ඉඩ නොදේ.", "upload_form.audio_description": "නොඇසෙන අය සඳහා විස්තර කරන්න", "upload_form.description": "දෘශ්‍යාබාධිතයන් සඳහා විස්තර කරන්න", - "upload_form.description_missing": "විස්තරයක් එක් කර නැත", + "upload_form.description_missing": "සවිස්තරයක් නැත", "upload_form.edit": "සංස්කරණය", "upload_form.thumbnail": "සිඟිති රුව වෙනස් කරන්න", "upload_form.undo": "මකන්න", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 629c93ca98c..620b8dfc157 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -519,7 +519,10 @@ "status.show_less_all": "Všetkým ukáž menej", "status.show_more": "Ukáž viac", "status.show_more_all": "Všetkým ukáž viac", + "status.show_original": "Show original", "status.show_thread": "Ukáž diskusné vlákno", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Nedostupný/é", "status.unmute_conversation": "Prestaň si nevšímať konverzáciu", "status.unpin": "Odopni z profilu", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 1f1f0370fed..c4ce59e45f6 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -24,7 +24,7 @@ "account.follows_you": "Vam sledi", "account.hide_reblogs": "Skrij izpostavitve od @{name}", "account.joined": "Pridružen/a {date}", - "account.languages": "Change subscribed languages", + "account.languages": "Spremeni naročene jezike", "account.link_verified_on": "Lastništvo te povezave je bilo preverjeno {date}", "account.locked_info": "Stanje zasebnosti računa je nastavljeno na zaklenjeno. Lastnik ročno pregleda, kdo ga lahko spremlja.", "account.media": "Mediji", @@ -519,13 +519,16 @@ "status.show_less_all": "Prikaži manj za vse", "status.show_more": "Prikaži več", "status.show_more_all": "Prikaži več za vse", + "status.show_original": "Show original", "status.show_thread": "Prikaži objavo", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Ni na voljo", "status.unmute_conversation": "Odtišaj pogovor", "status.unpin": "Odpni iz profila", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "Po spremembi bodo na vaši domači in seznamski časovnici prikazane objave samo v izbranih jezikih.", + "subscribed_languages.save": "Shrani spremembe", + "subscribed_languages.target": "Spremeni naročene jezike za {target}", "suggestions.dismiss": "Zavrni predlog", "suggestions.header": "Morda bi vas zanimalo…", "tabs_bar.federated_timeline": "Združeno", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 0a485aaaefb..4be47edc6aa 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -24,7 +24,7 @@ "account.follows_you": "Ju ndjek", "account.hide_reblogs": "Fshih përforcime nga @{name}", "account.joined": "U bë pjesë më {date}", - "account.languages": "Change subscribed languages", + "account.languages": "Ndryshoni gjuhë pajtimesh", "account.link_verified_on": "Pronësia e kësaj lidhjeje qe kontrolluar më {date}", "account.locked_info": "Gjendja e privatësisë së kësaj llogarie është caktuar si e kyçur. I zoti merr dorazi në shqyrtim cilët mund ta ndjekin.", "account.media": "Media", @@ -519,13 +519,16 @@ "status.show_less_all": "Shfaq më pak për të tërë", "status.show_more": "Shfaq më tepër", "status.show_more_all": "Shfaq më tepër për të tërë", + "status.show_original": "Show original", "status.show_thread": "Shfaq rrjedhën", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Jo e passhme", "status.unmute_conversation": "Ktheji zërin bisedës", "status.unpin": "Shfiksoje nga profili", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "Pas ndryshimit, te kreu juaj dhe te rrjedha kohore liste do të shfaqen vetëm postime në gjuhët e përzgjedhura. Që të merrni postime në krejt gjuhë, mos përzgjidhni gjë.", + "subscribed_languages.save": "Ruaji ndryshimet", + "subscribed_languages.target": "Ndryshoni gjuhë pajtimesh për {target}", "suggestions.dismiss": "Mos e merr parasysh sugjerimin", "suggestions.header": "Mund t’ju interesonte…", "tabs_bar.federated_timeline": "E federuar", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 2487c27f99b..1bb6218a3dc 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -519,7 +519,10 @@ "status.show_less_all": "Show less for all", "status.show_more": "Prikaži više", "status.show_more_all": "Show more for all", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Uključi prepisku", "status.unpin": "Otkači sa profila", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 9683cafff15..5fa8b1b8956 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -519,7 +519,10 @@ "status.show_less_all": "Прикажи мање за све", "status.show_more": "Прикажи више", "status.show_more_all": "Прикажи више за све", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Није доступно", "status.unmute_conversation": "Укључи преписку", "status.unpin": "Откачи са налога", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index c9ae1b08cb0..78ff55cebca 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -519,7 +519,10 @@ "status.show_less_all": "Visa mindre för alla", "status.show_more": "Visa mer", "status.show_more_all": "Visa mer för alla", + "status.show_original": "Show original", "status.show_thread": "Visa tråd", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Ej tillgängligt", "status.unmute_conversation": "Öppna konversation", "status.unpin": "Ångra fäst i profil", diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json index bde5388c627..f8e7597e5fb 100644 --- a/app/javascript/mastodon/locales/szl.json +++ b/app/javascript/mastodon/locales/szl.json @@ -519,7 +519,10 @@ "status.show_less_all": "Show less for all", "status.show_more": "Show more", "status.show_more_all": "Show more for all", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 1d4531d897c..54ada2e2260 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -519,7 +519,10 @@ "status.show_less_all": "அனைத்தையும் குறைவாக காட்டு", "status.show_more": "மேலும் காட்ட", "status.show_more_all": "அனைவருக்கும் மேலும் காட்டு", + "status.show_original": "Show original", "status.show_thread": "நூல் காட்டு", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "கிடைக்கவில்லை", "status.unmute_conversation": "ஊமையாக உரையாடல் இல்லை", "status.unpin": "சுயவிவரத்திலிருந்து நீக்கவும்", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index 1e5f0ed343b..0ffc9e198e1 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -519,7 +519,10 @@ "status.show_less_all": "Show less for all", "status.show_more": "Show more", "status.show_more_all": "Show more for all", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index 265a3b48411..2ee3052c7e3 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -519,7 +519,10 @@ "status.show_less_all": "అన్నిటికీ తక్కువ చూపించు", "status.show_more": "ఇంకా చూపించు", "status.show_more_all": "అన్నిటికీ ఇంకా చూపించు", + "status.show_original": "Show original", "status.show_thread": "గొలుసును చూపించు", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "సంభాషణను అన్మ్యూట్ చేయి", "status.unpin": "ప్రొఫైల్ నుండి పీకివేయు", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 1c25ac04977..5ee8a8e3a7f 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -24,7 +24,7 @@ "account.follows_you": "ติดตามคุณ", "account.hide_reblogs": "ซ่อนการดันจาก @{name}", "account.joined": "เข้าร่วมเมื่อ {date}", - "account.languages": "Change subscribed languages", + "account.languages": "เปลี่ยนภาษาที่บอกรับ", "account.link_verified_on": "ตรวจสอบความเป็นเจ้าของของลิงก์นี้เมื่อ {date}", "account.locked_info": "มีการตั้งสถานะความเป็นส่วนตัวของบัญชีนี้เป็นล็อคอยู่ เจ้าของตรวจทานผู้ที่สามารถติดตามเขาด้วยตนเอง", "account.media": "สื่อ", @@ -519,13 +519,16 @@ "status.show_less_all": "แสดงน้อยลงทั้งหมด", "status.show_more": "แสดงเพิ่มเติม", "status.show_more_all": "แสดงเพิ่มเติมทั้งหมด", + "status.show_original": "Show original", "status.show_thread": "แสดงกระทู้", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "ไม่พร้อมใช้งาน", "status.unmute_conversation": "เลิกซ่อนการสนทนา", "status.unpin": "ถอนหมุดจากโปรไฟล์", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "เฉพาะโพสต์ในภาษาที่เลือกเท่านั้นที่จะปรากฏในเส้นเวลาหน้าแรกและรายการหลังจากการเปลี่ยนแปลง เลือก ไม่มี เพื่อรับโพสต์ในภาษาทั้งหมด", + "subscribed_languages.save": "บันทึกการเปลี่ยนแปลง", + "subscribed_languages.target": "เปลี่ยนภาษาที่บอกรับสำหรับ {target}", "suggestions.dismiss": "ปิดข้อเสนอแนะ", "suggestions.header": "คุณอาจสนใจ…", "tabs_bar.federated_timeline": "ที่ติดต่อกับภายนอก", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 0d8b0e46fa7..9f581a9f19d 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -24,7 +24,7 @@ "account.follows_you": "Seni takip ediyor", "account.hide_reblogs": "@{name} kişisinin boostlarını gizle", "account.joined": "{date} tarihinde katıldı", - "account.languages": "Change subscribed languages", + "account.languages": "Abone olunan dilleri değiştir", "account.link_verified_on": "Bu bağlantının sahipliği {date} tarihinde kontrol edildi", "account.locked_info": "Bu hesabın gizlilik durumu gizli olarak ayarlanmış. Sahibi, onu kimin takip edebileceğini manuel olarak onaylıyor.", "account.media": "Medya", @@ -519,13 +519,16 @@ "status.show_less_all": "Hepsi için daha az göster", "status.show_more": "Daha fazlasını göster", "status.show_more_all": "Hepsi için daha fazla göster", + "status.show_original": "Show original", "status.show_thread": "Konuyu göster", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Mevcut değil", "status.unmute_conversation": "Sohbet sesini aç", "status.unpin": "Profilden sabitlemeyi kaldır", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "Değişiklikten sonra ana akışınızda sadece seçili dillerdeki gönderiler görüntülenecek ve zaman akışları listelenecektir. Tüm dillerde gönderiler için hiçbirini seçin.", + "subscribed_languages.save": "Değişiklikleri kaydet", + "subscribed_languages.target": "{target} abone olduğu dilleri değiştir", "suggestions.dismiss": "Öneriyi görmezden gel", "suggestions.header": "Şuna ilgi duyuyor olabilirsiniz…", "tabs_bar.federated_timeline": "Federe", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index 71e68e3c40c..7bfa4488285 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -519,7 +519,10 @@ "status.show_less_all": "Show less for all", "status.show_more": "Күбрәк күрсәтү", "status.show_more_all": "Show more for all", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index bde5388c627..f8e7597e5fb 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -519,7 +519,10 @@ "status.show_less_all": "Show less for all", "status.show_more": "Show more", "status.show_more_all": "Show more for all", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 271a6f3305f..5fb6030d5ec 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -24,7 +24,7 @@ "account.follows_you": "Підписані на вас", "account.hide_reblogs": "Сховати поширення від @{name}", "account.joined": "Долучилися {date}", - "account.languages": "Change subscribed languages", + "account.languages": "Змінити підписані мови", "account.link_verified_on": "Права власності на це посилання були перевірені {date}", "account.locked_info": "Це закритий обліковий запис. Власник вручну обирає, хто може на нього підписуватися.", "account.media": "Медіа", @@ -519,13 +519,16 @@ "status.show_less_all": "Показувати менше для всіх", "status.show_more": "Розгорнути", "status.show_more_all": "Показувати більше для всіх", + "status.show_original": "Show original", "status.show_thread": "Показати ланцюжок", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Недоступно", "status.unmute_conversation": "Не ігнорувати діалог", "status.unpin": "Відкріпити від профілю", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "Лише дописи вибраними мовами з'являтимуться на вашій домівці та у списку стрічок після змін. Виберіть «none», щоб отримувати повідомлення всіма мовами.", + "subscribed_languages.save": "Зберегти зміни", + "subscribed_languages.target": "Змінити підписані мови для {target}", "suggestions.dismiss": "Відхилити пропозицію", "suggestions.header": "Вас може зацікавити…", "tabs_bar.federated_timeline": "Глобальна", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index a9ee2e87702..2460e36a0a2 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -519,7 +519,10 @@ "status.show_less_all": "Show less for all", "status.show_more": "Show more", "status.show_more_all": "Show more for all", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index ff2ba7e85b9..707a4a2850b 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -24,7 +24,7 @@ "account.follows_you": "Đang theo dõi bạn", "account.hide_reblogs": "Ẩn tút @{name} đăng lại", "account.joined": "Đã tham gia {date}", - "account.languages": "Change subscribed languages", + "account.languages": "Đổi ngôn ngữ mong muốn", "account.link_verified_on": "Liên kết này đã được xác minh vào {date}", "account.locked_info": "Đây là tài khoản riêng tư. Họ sẽ tự mình xét duyệt các yêu cầu theo dõi.", "account.media": "Media", @@ -423,7 +423,7 @@ "report.categories.spam": "Spam", "report.categories.violation": "Vi phạm quy tắc máy chủ", "report.category.subtitle": "Chọn mục gần khớp nhất", - "report.category.title": "Nói với họ chuyện gì xảy ra với {type}", + "report.category.title": "Có vấn đề gì với {type}", "report.category.title_account": "người dùng", "report.category.title_status": "tút", "report.close": "Xong", @@ -519,13 +519,16 @@ "status.show_less_all": "Thu gọn toàn bộ", "status.show_more": "Xem thêm", "status.show_more_all": "Hiển thị tất cả", + "status.show_original": "Show original", "status.show_thread": "Xem chuỗi tút này", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Uncached", "status.unmute_conversation": "Quan tâm", "status.unpin": "Bỏ ghim trên hồ sơ", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "Chỉ các tút đăng bằng các ngôn ngữ đã chọn mới được xuất hiện trên bảng tin của bạn. Không chọn gì cả để đọc tút đăng bằng mọi ngôn ngữ.", + "subscribed_languages.save": "Lưu thay đổi", + "subscribed_languages.target": "Đổi ngôn ngữ mong muốn cho {target}", "suggestions.dismiss": "Tắt đề xuất", "suggestions.header": "Có thể bạn quan tâm…", "tabs_bar.federated_timeline": "Thế giới", diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json index 4983489abdd..b83ef1786a6 100644 --- a/app/javascript/mastodon/locales/zgh.json +++ b/app/javascript/mastodon/locales/zgh.json @@ -519,7 +519,10 @@ "status.show_less_all": "ⵙⵎⴰⵍ ⴷⵔⵓⵙ ⵉ ⵎⴰⵕⵕⴰ", "status.show_more": "ⵙⵎⴰⵍ ⵓⴳⴳⴰⵔ", "status.show_more_all": "ⵙⵎⴰⵍ ⵓⴳⴳⴰⵔ ⵉ ⵎⴰⵕⵕⴰ", + "status.show_original": "Show original", "status.show_thread": "Show thread", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 243d127f4cc..9be0306637f 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -519,7 +519,10 @@ "status.show_less_all": "隐藏全部内容", "status.show_more": "显示更多", "status.show_more_all": "显示全部内容", + "status.show_original": "Show original", "status.show_thread": "显示全部对话", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "暂不可用", "status.unmute_conversation": "恢复此对话的通知提醒", "status.unpin": "在个人资料页面取消置顶", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 3b2dde692e8..47b21d52370 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -519,7 +519,10 @@ "status.show_less_all": "全部收起", "status.show_more": "展開", "status.show_more_all": "全部展開", + "status.show_original": "Show original", "status.show_thread": "顯示討論串", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "無法使用", "status.unmute_conversation": "對話解除靜音", "status.unpin": "解除置頂", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 62facfca299..200f31f66e4 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -24,7 +24,7 @@ "account.follows_you": "跟隨了您", "account.hide_reblogs": "隱藏來自 @{name} 的轉嘟", "account.joined": "加入於 {date}", - "account.languages": "Change subscribed languages", + "account.languages": "變更訂閱的語言", "account.link_verified_on": "已在 {date} 檢查此連結的擁有者權限", "account.locked_info": "此帳戶的隱私狀態被設為鎖定。該擁有者會手動審核能跟隨此帳號的人。", "account.media": "媒體", @@ -519,13 +519,16 @@ "status.show_less_all": "減少顯示這類嘟文", "status.show_more": "顯示更多", "status.show_more_all": "顯示更多這類嘟文", + "status.show_original": "Show original", "status.show_thread": "顯示討論串", + "status.translate": "Translate", + "status.translated_from": "Translated from {lang}", "status.uncached_media_warning": "無法使用", "status.unmute_conversation": "解除此對話的靜音", "status.unpin": "從個人檔案頁面解除釘選", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "僅選定語言的嘟文才會出現在您的首頁上,並在變更後列出時間軸。選取「無」以接收所有語言的嘟文。", + "subscribed_languages.save": "儲存變更", + "subscribed_languages.target": "變更 {target} 的訂閱語言", "suggestions.dismiss": "關閉建議", "suggestions.header": "您可能對這些東西有興趣…", "tabs_bar.federated_timeline": "聯邦宇宙", diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 99169454e97..4251f5510cb 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1246,6 +1246,16 @@ pl: many: "%{count} słów kluczowych" one: "%{count} słowo kluczowe" other: "%{count} słów kluczowych" + statuses: + few: "%{count} posty" + many: "%{count} postów" + one: "%{count} post" + other: "%{count} postów" + statuses_long: + few: "%{count} ukryte posty" + many: "%{count} ukrytych postów" + one: "%{count} ukryty post" + other: "%{count} postów ukrytych" title: Filtry new: save: Zapisz jako nowy filtr diff --git a/config/locales/si.yml b/config/locales/si.yml index fded19b175d..40909ab12ad 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -39,7 +39,7 @@ si: other: තත්ත්වයන් status_count_before: කවුද පළ කළේ tagline: විමධ්‍යගත සමාජ ජාලය - terms: සේවාවේ කොන්දේසි + terms: සේවාවේ නියම unavailable_content: මධ්‍යස්ථ සේවාදායකයන් unavailable_content_description: domain: සේවාදායකය @@ -1156,9 +1156,9 @@ si: expired: කල් ඉකුත් වී ඇත expires_in: '1800': විනාඩි 30 - '21600': හෝරා 6 - '3600': හෝරා 1 - '43200': හෝරා 12 + '21600': පැය 6 + '3600': පැය 1 + '43200': පැය 12 '604800': සති 1 '86400': දවස් 1 expires_in_prompt: කවදාවත් නැහැ diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index 91ded57a62e..665ac6af139 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -220,6 +220,7 @@ pl: ip: Adres IP severities: no_access: Zablokuj dostęp + sign_up_block: Zablokuj nowe rejestracje sign_up_requires_approval: Ogranicz rejestracje severity: Reguła notification_emails: diff --git a/config/locales/simple_form.si.yml b/config/locales/simple_form.si.yml index aa51438a9e7..4df9f619bf7 100644 --- a/config/locales/simple_form.si.yml +++ b/config/locales/simple_form.si.yml @@ -102,7 +102,7 @@ si: labels: account: fields: - name: ලේබලය + name: නම්පත value: අන්තර්ගතය account_alias: acct: පැරණි ගිණුමේ හැසිරවීම diff --git a/config/locales/th.yml b/config/locales/th.yml index b5dd9bc3685..be3c244825c 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -678,6 +678,7 @@ th: manage_invites: จัดการคำเชิญ manage_invites_description: อนุญาตให้ผู้ใช้เรียกดูและปิดใช้งานลิงก์เชิญ manage_reports: จัดการรายงาน + manage_reports_description: อนุญาตให้ผู้ใช้ตรวจทานรายงานและทำการกระทำการควบคุมกับรายงาน manage_roles: จัดการบทบาท manage_rules: จัดการกฎ manage_rules_description: อนุญาตให้ผู้ใช้เปลี่ยนกฎของเซิร์ฟเวอร์ @@ -687,6 +688,7 @@ th: manage_taxonomies_description: อนุญาตให้ผู้ใช้ตรวจทานเนื้อหาที่กำลังนิยมและอัปเดตการตั้งค่าแฮชแท็ก manage_user_access: จัดการการเข้าถึงของผู้ใช้ manage_users: จัดการผู้ใช้ + manage_users_description: อนุญาตให้ผู้ใช้ดูรายละเอียดของผู้ใช้อื่น ๆ และทำการกระทำการควบคุมกับผู้ใช้ manage_webhooks: จัดการเว็บฮุค manage_webhooks_description: อนุญาตให้ผู้ใช้ตั้งค่าเว็บฮุคสำหรับเหตุการณ์การดูแล view_audit_log: ดูรายการบันทึกการตรวจสอบ diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 18b09369c38..d423850c34e 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -911,6 +911,11 @@ uk: disallow: Заборонити допис disallow_account: Заборонити автора not_discoverable: Автор не вирішив бути видимим + shared_by: + few: Поділитись або додати в улюблені %{friendly_count} рази + many: Поділитись або додати в улюблені %{friendly_count} разів + one: Поділитись або додати в улюблені один раз + other: Поділитись або додати в улюблені %{friendly_count} рази title: Популярні дописи tags: current_score: Поточний результат %{score} @@ -920,7 +925,7 @@ uk: tag_servers_dimension: Найуживаніші сервери tag_servers_measure: різні сервери tag_uses_measure: всього використань - description_html: Ці хештеґи, які бачить ваш сервер, в даний час з’являються у багатьох дописах. Це може допомогти вашим користувачам дізнатися про що люди в даний момент найбільше говорять. Жодні хештеґи публічно не відображаються, допоки ви їх не затвердите. + description_html: Ці хештеґи, які бачить ваш сервер, в цей час з’являються у багатьох дописах. Це може допомогти вашим користувачам дізнатися про що люди наразі найбільше говорять. Жодні хештеґи публічно не показуються, доки ви їх не затвердите. listable: Може бути запропоновано not_listable: Не буде запропоновано not_trendable: Не показуватиметься серед популярних diff --git a/config/locales/vi.yml b/config/locales/vi.yml index dfc7623ddca..f5fe23795f6 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -5,7 +5,7 @@ vi: about_mastodon_html: 'Mạng xã hội của tương lai: Không quảng cáo, không bán thông tin người dùng và phi tập trung! Làm chủ dữ liệu của bạn với Mastodon!' about_this: Giới thiệu active_count_after: hoạt động - active_footnote: Người dùng hoạt động hàng tháng (MAU) + active_footnote: Người dùng hàng tháng (MAU) administered_by: 'Quản trị viên:' api: API apps: Apps From 5c9abdeff1d0cf3e14d84c5ae298e6a5beccaf18 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 27 Sep 2022 03:08:19 +0200 Subject: [PATCH 324/646] Add retention policy for cached content and media (#19232) --- app/lib/redis_configuration.rb | 6 +- app/lib/vacuum.rb | 3 + .../vacuum/access_tokens_vacuum.rb} | 17 ++++-- app/lib/vacuum/backups_vacuum.rb | 25 +++++++++ app/lib/vacuum/feeds_vacuum.rb | 34 +++++++++++ app/lib/vacuum/media_attachments_vacuum.rb | 40 +++++++++++++ app/lib/vacuum/preview_cards_vacuum.rb | 39 +++++++++++++ app/lib/vacuum/statuses_vacuum.rb | 54 ++++++++++++++++++ app/lib/vacuum/system_keys_vacuum.rb | 13 +++++ app/models/content_retention_policy.rb | 25 +++++++++ app/models/form/admin_settings.rb | 4 ++ app/views/admin/settings/edit.html.haml | 8 ++- .../scheduler/backup_cleanup_scheduler.rb | 17 ------ .../scheduler/feed_cleanup_scheduler.rb | 35 ------------ .../scheduler/media_cleanup_scheduler.rb | 17 ------ app/workers/scheduler/vacuum_scheduler.rb | 56 +++++++++++++++++++ config/locales/simple_form.en.yml | 8 +++ config/settings.yml | 1 + config/sidekiq.yml | 16 +----- spec/fabricators/access_grant_fabricator.rb | 6 ++ spec/fabricators/preview_card_fabricator.rb | 1 + spec/lib/vacuum/access_tokens_vacuum_spec.rb | 33 +++++++++++ spec/lib/vacuum/backups_vacuum_spec.rb | 24 ++++++++ spec/lib/vacuum/feeds_vacuum_spec.rb | 30 ++++++++++ .../vacuum/media_attachments_vacuum_spec.rb | 47 ++++++++++++++++ spec/lib/vacuum/preview_cards_vacuum_spec.rb | 36 ++++++++++++ spec/lib/vacuum/statuses_vacuum_spec.rb | 36 ++++++++++++ spec/lib/vacuum/system_keys_vacuum_spec.rb | 22 ++++++++ .../scheduler/feed_cleanup_scheduler_spec.rb | 26 --------- .../scheduler/media_cleanup_scheduler_spec.rb | 15 ----- 30 files changed, 559 insertions(+), 135 deletions(-) create mode 100644 app/lib/vacuum.rb rename app/{workers/scheduler/doorkeeper_cleanup_scheduler.rb => lib/vacuum/access_tokens_vacuum.rb} (56%) create mode 100644 app/lib/vacuum/backups_vacuum.rb create mode 100644 app/lib/vacuum/feeds_vacuum.rb create mode 100644 app/lib/vacuum/media_attachments_vacuum.rb create mode 100644 app/lib/vacuum/preview_cards_vacuum.rb create mode 100644 app/lib/vacuum/statuses_vacuum.rb create mode 100644 app/lib/vacuum/system_keys_vacuum.rb create mode 100644 app/models/content_retention_policy.rb delete mode 100644 app/workers/scheduler/backup_cleanup_scheduler.rb delete mode 100644 app/workers/scheduler/feed_cleanup_scheduler.rb delete mode 100644 app/workers/scheduler/media_cleanup_scheduler.rb create mode 100644 app/workers/scheduler/vacuum_scheduler.rb create mode 100644 spec/fabricators/access_grant_fabricator.rb create mode 100644 spec/lib/vacuum/access_tokens_vacuum_spec.rb create mode 100644 spec/lib/vacuum/backups_vacuum_spec.rb create mode 100644 spec/lib/vacuum/feeds_vacuum_spec.rb create mode 100644 spec/lib/vacuum/media_attachments_vacuum_spec.rb create mode 100644 spec/lib/vacuum/preview_cards_vacuum_spec.rb create mode 100644 spec/lib/vacuum/statuses_vacuum_spec.rb create mode 100644 spec/lib/vacuum/system_keys_vacuum_spec.rb delete mode 100644 spec/workers/scheduler/feed_cleanup_scheduler_spec.rb delete mode 100644 spec/workers/scheduler/media_cleanup_scheduler_spec.rb diff --git a/app/lib/redis_configuration.rb b/app/lib/redis_configuration.rb index e14d6c8b670..f0e86d985b8 100644 --- a/app/lib/redis_configuration.rb +++ b/app/lib/redis_configuration.rb @@ -7,9 +7,7 @@ class RedisConfiguration @pool = ConnectionPool.new(size: new_pool_size) { new.connection } end - def with - pool.with { |redis| yield redis } - end + delegate :with, to: :pool def pool @pool ||= establish_pool(pool_size) @@ -17,7 +15,7 @@ class RedisConfiguration def pool_size if Sidekiq.server? - Sidekiq.options[:concurrency] + Sidekiq[:concurrency] else ENV['MAX_THREADS'] || 5 end diff --git a/app/lib/vacuum.rb b/app/lib/vacuum.rb new file mode 100644 index 00000000000..9db1ec90bed --- /dev/null +++ b/app/lib/vacuum.rb @@ -0,0 +1,3 @@ +# frozen_string_literal: true + +module Vacuum; end diff --git a/app/workers/scheduler/doorkeeper_cleanup_scheduler.rb b/app/lib/vacuum/access_tokens_vacuum.rb similarity index 56% rename from app/workers/scheduler/doorkeeper_cleanup_scheduler.rb rename to app/lib/vacuum/access_tokens_vacuum.rb index 9303a352fb7..4f3878027ab 100644 --- a/app/workers/scheduler/doorkeeper_cleanup_scheduler.rb +++ b/app/lib/vacuum/access_tokens_vacuum.rb @@ -1,13 +1,18 @@ # frozen_string_literal: true -class Scheduler::DoorkeeperCleanupScheduler - include Sidekiq::Worker - - sidekiq_options retry: 0 - +class Vacuum::AccessTokensVacuum def perform + vacuum_revoked_access_tokens! + vacuum_revoked_access_grants! + end + + private + + def vacuum_revoked_access_tokens! Doorkeeper::AccessToken.where('revoked_at IS NOT NULL').where('revoked_at < NOW()').delete_all + end + + def vacuum_revoked_access_grants! Doorkeeper::AccessGrant.where('revoked_at IS NOT NULL').where('revoked_at < NOW()').delete_all - SystemKey.expired.delete_all end end diff --git a/app/lib/vacuum/backups_vacuum.rb b/app/lib/vacuum/backups_vacuum.rb new file mode 100644 index 00000000000..3b83072f369 --- /dev/null +++ b/app/lib/vacuum/backups_vacuum.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +class Vacuum::BackupsVacuum + def initialize(retention_period) + @retention_period = retention_period + end + + def perform + vacuum_expired_backups! if retention_period? + end + + private + + def vacuum_expired_backups! + backups_past_retention_period.in_batches.destroy_all + end + + def backups_past_retention_period + Backup.unscoped.where(Backup.arel_table[:created_at].lt(@retention_period.ago)) + end + + def retention_period? + @retention_period.present? + end +end diff --git a/app/lib/vacuum/feeds_vacuum.rb b/app/lib/vacuum/feeds_vacuum.rb new file mode 100644 index 00000000000..f46bcf75f7f --- /dev/null +++ b/app/lib/vacuum/feeds_vacuum.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +class Vacuum::FeedsVacuum + def perform + vacuum_inactive_home_feeds! + vacuum_inactive_list_feeds! + end + + private + + def vacuum_inactive_home_feeds! + inactive_users.select(:id, :account_id).find_in_batches do |users| + feed_manager.clean_feeds!(:home, users.map(&:account_id)) + end + end + + def vacuum_inactive_list_feeds! + inactive_users_lists.select(:id).find_in_batches do |lists| + feed_manager.clean_feeds!(:list, lists.map(&:id)) + end + end + + def inactive_users + User.confirmed.inactive + end + + def inactive_users_lists + List.where(account_id: inactive_users.select(:account_id)) + end + + def feed_manager + FeedManager.instance + end +end diff --git a/app/lib/vacuum/media_attachments_vacuum.rb b/app/lib/vacuum/media_attachments_vacuum.rb new file mode 100644 index 00000000000..7fb347ce4d5 --- /dev/null +++ b/app/lib/vacuum/media_attachments_vacuum.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +class Vacuum::MediaAttachmentsVacuum + TTL = 1.day.freeze + + def initialize(retention_period) + @retention_period = retention_period + end + + def perform + vacuum_cached_files! if retention_period? + vacuum_orphaned_records! + end + + private + + def vacuum_cached_files! + media_attachments_past_retention_period.find_each do |media_attachment| + media_attachment.file.destroy + media_attachment.thumbnail.destroy + media_attachment.save + end + end + + def vacuum_orphaned_records! + orphaned_media_attachments.in_batches.destroy_all + end + + def media_attachments_past_retention_period + MediaAttachment.unscoped.remote.cached.where(MediaAttachment.arel_table[:created_at].lt(@retention_period.ago)).where(MediaAttachment.arel_table[:updated_at].lt(@retention_period.ago)) + end + + def orphaned_media_attachments + MediaAttachment.unscoped.unattached.where(MediaAttachment.arel_table[:created_at].lt(TTL.ago)) + end + + def retention_period? + @retention_period.present? + end +end diff --git a/app/lib/vacuum/preview_cards_vacuum.rb b/app/lib/vacuum/preview_cards_vacuum.rb new file mode 100644 index 00000000000..84ef100ed94 --- /dev/null +++ b/app/lib/vacuum/preview_cards_vacuum.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +class Vacuum::PreviewCardsVacuum + TTL = 1.day.freeze + + def initialize(retention_period) + @retention_period = retention_period + end + + def perform + vacuum_cached_images! if retention_period? + vacuum_orphaned_records! + end + + private + + def vacuum_cached_images! + preview_cards_past_retention_period.find_each do |preview_card| + preview_card.image.destroy + preview_card.save + end + end + + def vacuum_orphaned_records! + orphaned_preview_cards.in_batches.destroy_all + end + + def preview_cards_past_retention_period + PreviewCard.cached.where(PreviewCard.arel_table[:updated_at].lt(@retention_period.ago)) + end + + def orphaned_preview_cards + PreviewCard.where('NOT EXISTS (SELECT 1 FROM preview_cards_statuses WHERE preview_cards_statuses.preview_card_id = preview_cards.id)').where(PreviewCard.arel_table[:created_at].lt(TTL.ago)) + end + + def retention_period? + @retention_period.present? + end +end diff --git a/app/lib/vacuum/statuses_vacuum.rb b/app/lib/vacuum/statuses_vacuum.rb new file mode 100644 index 00000000000..41d6ba270cc --- /dev/null +++ b/app/lib/vacuum/statuses_vacuum.rb @@ -0,0 +1,54 @@ +# frozen_string_literal: true + +class Vacuum::StatusesVacuum + include Redisable + + def initialize(retention_period) + @retention_period = retention_period + end + + def perform + vacuum_statuses! if retention_period? + end + + private + + def vacuum_statuses! + statuses_scope.find_in_batches do |statuses| + # Side-effects not covered by foreign keys, such + # as the search index, must be handled first. + + remove_from_account_conversations(statuses) + remove_from_search_index(statuses) + + # Foreign keys take care of most associated records + # for us. Media attachments will be orphaned. + + Status.where(id: statuses.map(&:id)).delete_all + end + end + + def statuses_scope + Status.unscoped.kept.where(account: Account.remote).where(Status.arel_table[:id].lt(retention_period_as_id)).select(:id, :visibility) + end + + def retention_period_as_id + Mastodon::Snowflake.id_at(@retention_period.ago, with_random: false) + end + + def analyze_statuses! + ActiveRecord::Base.connection.execute('ANALYZE statuses') + end + + def remove_from_account_conversations(statuses) + Status.where(id: statuses.select(&:direct_visibility?).map(&:id)).includes(:account, mentions: :account).each(&:unlink_from_conversations) + end + + def remove_from_search_index(statuses) + with_redis { |redis| redis.sadd('chewy:queue:StatusesIndex', statuses.map(&:id)) } if Chewy.enabled? + end + + def retention_period? + @retention_period.present? + end +end diff --git a/app/lib/vacuum/system_keys_vacuum.rb b/app/lib/vacuum/system_keys_vacuum.rb new file mode 100644 index 00000000000..ceee2fd164b --- /dev/null +++ b/app/lib/vacuum/system_keys_vacuum.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class Vacuum::SystemKeysVacuum + def perform + vacuum_expired_system_keys! + end + + private + + def vacuum_expired_system_keys! + SystemKey.expired.delete_all + end +end diff --git a/app/models/content_retention_policy.rb b/app/models/content_retention_policy.rb new file mode 100644 index 00000000000..b5e922c8c5f --- /dev/null +++ b/app/models/content_retention_policy.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +class ContentRetentionPolicy + def self.current + new + end + + def media_cache_retention_period + retention_period Setting.media_cache_retention_period + end + + def content_cache_retention_period + retention_period Setting.content_cache_retention_period + end + + def backups_retention_period + retention_period Setting.backups_retention_period + end + + private + + def retention_period(value) + value.days if value.is_a?(Integer) && value.positive? + end +end diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index 97fabc6ac97..3a71509162c 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -32,6 +32,9 @@ class Form::AdminSettings show_domain_blocks_rationale noindex require_invite_text + media_cache_retention_period + content_cache_retention_period + backups_retention_period ).freeze BOOLEAN_KEYS = %i( @@ -64,6 +67,7 @@ class Form::AdminSettings validates :bootstrap_timeline_accounts, existing_username: { multiple: true } validates :show_domain_blocks, inclusion: { in: %w(disabled users all) } validates :show_domain_blocks_rationale, inclusion: { in: %w(disabled users all) } + validates :media_cache_retention_period, :content_cache_retention_period, :backups_retention_period, numericality: { only_integer: true } def initialize(_attributes = {}) super diff --git a/app/views/admin/settings/edit.html.haml b/app/views/admin/settings/edit.html.haml index 64687b7a60f..1dfd216439d 100644 --- a/app/views/admin/settings/edit.html.haml +++ b/app/views/admin/settings/edit.html.haml @@ -45,7 +45,6 @@ .fields-group = f.input :require_invite_text, as: :boolean, wrapper: :with_label, label: t('admin.settings.registrations.require_invite_text.title'), hint: t('admin.settings.registrations.require_invite_text.desc_html'), disabled: !approved_registrations? - .fields-group %hr.spacer/ @@ -100,5 +99,12 @@ = f.input :site_terms, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_terms.title'), hint: t('admin.settings.site_terms.desc_html'), input_html: { rows: 8 } = f.input :custom_css, wrapper: :with_block_label, as: :text, input_html: { rows: 8 }, label: t('admin.settings.custom_css.title'), hint: t('admin.settings.custom_css.desc_html') + %hr.spacer/ + + .fields-group + = f.input :media_cache_retention_period, wrapper: :with_block_label, input_html: { pattern: '[0-9]+' } + = f.input :content_cache_retention_period, wrapper: :with_block_label, input_html: { pattern: '[0-9]+' } + = f.input :backups_retention_period, wrapper: :with_block_label, input_html: { pattern: '[0-9]+' } + .actions = f.button :button, t('generic.save_changes'), type: :submit diff --git a/app/workers/scheduler/backup_cleanup_scheduler.rb b/app/workers/scheduler/backup_cleanup_scheduler.rb deleted file mode 100644 index 85d5312c0ad..00000000000 --- a/app/workers/scheduler/backup_cleanup_scheduler.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -class Scheduler::BackupCleanupScheduler - include Sidekiq::Worker - - sidekiq_options retry: 0 - - def perform - old_backups.reorder(nil).find_each(&:destroy!) - end - - private - - def old_backups - Backup.where('created_at < ?', 7.days.ago) - end -end diff --git a/app/workers/scheduler/feed_cleanup_scheduler.rb b/app/workers/scheduler/feed_cleanup_scheduler.rb deleted file mode 100644 index aa0cc8b8df3..00000000000 --- a/app/workers/scheduler/feed_cleanup_scheduler.rb +++ /dev/null @@ -1,35 +0,0 @@ -# frozen_string_literal: true - -class Scheduler::FeedCleanupScheduler - include Sidekiq::Worker - include Redisable - - sidekiq_options retry: 0 - - def perform - clean_home_feeds! - clean_list_feeds! - end - - private - - def clean_home_feeds! - feed_manager.clean_feeds!(:home, inactive_account_ids) - end - - def clean_list_feeds! - feed_manager.clean_feeds!(:list, inactive_list_ids) - end - - def inactive_account_ids - @inactive_account_ids ||= User.confirmed.inactive.pluck(:account_id) - end - - def inactive_list_ids - List.where(account_id: inactive_account_ids).pluck(:id) - end - - def feed_manager - FeedManager.instance - end -end diff --git a/app/workers/scheduler/media_cleanup_scheduler.rb b/app/workers/scheduler/media_cleanup_scheduler.rb deleted file mode 100644 index 24d30a6be59..00000000000 --- a/app/workers/scheduler/media_cleanup_scheduler.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -class Scheduler::MediaCleanupScheduler - include Sidekiq::Worker - - sidekiq_options retry: 0 - - def perform - unattached_media.find_each(&:destroy) - end - - private - - def unattached_media - MediaAttachment.reorder(nil).unattached.where('created_at < ?', 1.day.ago) - end -end diff --git a/app/workers/scheduler/vacuum_scheduler.rb b/app/workers/scheduler/vacuum_scheduler.rb new file mode 100644 index 00000000000..ce88ff204d3 --- /dev/null +++ b/app/workers/scheduler/vacuum_scheduler.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +class Scheduler::VacuumScheduler + include Sidekiq::Worker + + sidekiq_options retry: 0 + + def perform + vacuum_operations.each do |operation| + operation.perform + rescue => e + Rails.logger.error("Error while running #{operation.class.name}: #{e}") + end + end + + private + + def vacuum_operations + [ + statuses_vacuum, + media_attachments_vacuum, + preview_cards_vacuum, + backups_vacuum, + access_tokens_vacuum, + feeds_vacuum, + ] + end + + def statuses_vacuum + Vacuum::StatusesVacuum.new(content_retention_policy.content_cache_retention_period) + end + + def media_attachments_vacuum + Vacuum::MediaAttachmentsVacuum.new(content_retention_policy.media_cache_retention_period) + end + + def preview_cards_vacuum + Vacuum::PreviewCardsVacuum.new(content_retention_policy.media_cache_retention_period) + end + + def backups_vacuum + Vacuum::BackupsVacuum.new(content_retention_policy.backups_retention_period) + end + + def access_tokens_vacuum + Vacuum::AccessTokensVacuum.new + end + + def feeds_vacuum + Vacuum::FeedsVacuum.new + end + + def content_retention_policy + ContentRetentionPolicy.current + end +end diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index ddc83e8965c..db5b45e4103 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -73,6 +73,10 @@ en: actions: hide: Completely hide the filtered content, behaving as if it did not exist warn: Hide the filtered content behind a warning mentioning the filter's title + form_admin_settings: + backups_retention_period: Keep generated user archives for the specified number of days. + content_cache_retention_period: Posts from other servers will be deleted after the specified number of days when set to a positive value. This may be irreversible. + media_cache_retention_period: Downloaded media files will be deleted after the specified number of days when set to a positive value, and re-downloaded on demand. form_challenge: current_password: You are entering a secure area imports: @@ -207,6 +211,10 @@ en: actions: hide: Hide completely warn: Hide with a warning + form_admin_settings: + backups_retention_period: User archive retention period + content_cache_retention_period: Content cache retention period + media_cache_retention_period: Media cache retention period interactions: must_be_follower: Block notifications from non-followers must_be_following: Block notifications from people you don't follow diff --git a/config/settings.yml b/config/settings.yml index eaa05071e11..41742118bc8 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -70,6 +70,7 @@ defaults: &defaults show_domain_blocks: 'disabled' show_domain_blocks_rationale: 'disabled' require_invite_text: false + backups_retention_period: 7 development: <<: *defaults diff --git a/config/sidekiq.yml b/config/sidekiq.yml index 9ec6eb5eca7..e3156aa346c 100644 --- a/config/sidekiq.yml +++ b/config/sidekiq.yml @@ -25,22 +25,14 @@ every: '5m' class: Scheduler::IndexingScheduler queue: scheduler - media_cleanup_scheduler: + vacuum_scheduler: cron: '<%= Random.rand(0..59) %> <%= Random.rand(3..5) %> * * *' - class: Scheduler::MediaCleanupScheduler - queue: scheduler - feed_cleanup_scheduler: - cron: '<%= Random.rand(0..59) %> <%= Random.rand(0..2) %> * * *' - class: Scheduler::FeedCleanupScheduler + class: Scheduler::VacuumScheduler queue: scheduler follow_recommendations_scheduler: cron: '<%= Random.rand(0..59) %> <%= Random.rand(6..9) %> * * *' class: Scheduler::FollowRecommendationsScheduler queue: scheduler - doorkeeper_cleanup_scheduler: - cron: '<%= Random.rand(0..59) %> <%= Random.rand(0..2) %> * * 0' - class: Scheduler::DoorkeeperCleanupScheduler - queue: scheduler user_cleanup_scheduler: cron: '<%= Random.rand(0..59) %> <%= Random.rand(4..6) %> * * *' class: Scheduler::UserCleanupScheduler @@ -49,10 +41,6 @@ cron: '<%= Random.rand(0..59) %> <%= Random.rand(3..5) %> * * *' class: Scheduler::IpCleanupScheduler queue: scheduler - backup_cleanup_scheduler: - cron: '<%= Random.rand(0..59) %> <%= Random.rand(3..5) %> * * *' - class: Scheduler::BackupCleanupScheduler - queue: scheduler pghero_scheduler: cron: '0 0 * * *' class: Scheduler::PgheroScheduler diff --git a/spec/fabricators/access_grant_fabricator.rb b/spec/fabricators/access_grant_fabricator.rb new file mode 100644 index 00000000000..ae1945f2bb1 --- /dev/null +++ b/spec/fabricators/access_grant_fabricator.rb @@ -0,0 +1,6 @@ +Fabricator :access_grant, from: 'Doorkeeper::AccessGrant' do + application + resource_owner_id { Fabricate(:user).id } + expires_in 3_600 + redirect_uri { Doorkeeper.configuration.native_redirect_uri } +end diff --git a/spec/fabricators/preview_card_fabricator.rb b/spec/fabricators/preview_card_fabricator.rb index f119c117d98..99b5edc4357 100644 --- a/spec/fabricators/preview_card_fabricator.rb +++ b/spec/fabricators/preview_card_fabricator.rb @@ -3,4 +3,5 @@ Fabricator(:preview_card) do title { Faker::Lorem.sentence } description { Faker::Lorem.paragraph } type 'link' + image { attachment_fixture('attachment.jpg') } end diff --git a/spec/lib/vacuum/access_tokens_vacuum_spec.rb b/spec/lib/vacuum/access_tokens_vacuum_spec.rb new file mode 100644 index 00000000000..0244c344926 --- /dev/null +++ b/spec/lib/vacuum/access_tokens_vacuum_spec.rb @@ -0,0 +1,33 @@ +require 'rails_helper' + +RSpec.describe Vacuum::AccessTokensVacuum do + subject { described_class.new } + + describe '#perform' do + let!(:revoked_access_token) { Fabricate(:access_token, revoked_at: 1.minute.ago) } + let!(:active_access_token) { Fabricate(:access_token) } + + let!(:revoked_access_grant) { Fabricate(:access_grant, revoked_at: 1.minute.ago) } + let!(:active_access_grant) { Fabricate(:access_grant) } + + before do + subject.perform + end + + it 'deletes revoked access tokens' do + expect { revoked_access_token.reload }.to raise_error ActiveRecord::RecordNotFound + end + + it 'deletes revoked access grants' do + expect { revoked_access_grant.reload }.to raise_error ActiveRecord::RecordNotFound + end + + it 'does not delete active access tokens' do + expect { active_access_token.reload }.to_not raise_error + end + + it 'does not delete active access grants' do + expect { active_access_grant.reload }.to_not raise_error + end + end +end diff --git a/spec/lib/vacuum/backups_vacuum_spec.rb b/spec/lib/vacuum/backups_vacuum_spec.rb new file mode 100644 index 00000000000..4e2de083f8c --- /dev/null +++ b/spec/lib/vacuum/backups_vacuum_spec.rb @@ -0,0 +1,24 @@ +require 'rails_helper' + +RSpec.describe Vacuum::BackupsVacuum do + let(:retention_period) { 7.days } + + subject { described_class.new(retention_period) } + + describe '#perform' do + let!(:expired_backup) { Fabricate(:backup, created_at: (retention_period + 1.day).ago) } + let!(:current_backup) { Fabricate(:backup) } + + before do + subject.perform + end + + it 'deletes backups past the retention period' do + expect { expired_backup.reload }.to raise_error ActiveRecord::RecordNotFound + end + + it 'does not delete backups within the retention period' do + expect { current_backup.reload }.to_not raise_error + end + end +end diff --git a/spec/lib/vacuum/feeds_vacuum_spec.rb b/spec/lib/vacuum/feeds_vacuum_spec.rb new file mode 100644 index 00000000000..0aec26740f3 --- /dev/null +++ b/spec/lib/vacuum/feeds_vacuum_spec.rb @@ -0,0 +1,30 @@ +require 'rails_helper' + +RSpec.describe Vacuum::FeedsVacuum do + subject { described_class.new } + + describe '#perform' do + let!(:active_user) { Fabricate(:user, current_sign_in_at: 2.days.ago) } + let!(:inactive_user) { Fabricate(:user, current_sign_in_at: 22.days.ago) } + + before do + redis.zadd(feed_key_for(inactive_user), 1, 1) + redis.zadd(feed_key_for(active_user), 1, 1) + redis.zadd(feed_key_for(inactive_user, 'reblogs'), 2, 2) + redis.sadd(feed_key_for(inactive_user, 'reblogs:2'), 3) + + subject.perform + end + + it 'clears feeds of inactive users and lists' do + expect(redis.zcard(feed_key_for(inactive_user))).to eq 0 + expect(redis.zcard(feed_key_for(active_user))).to eq 1 + expect(redis.exists?(feed_key_for(inactive_user, 'reblogs'))).to be false + expect(redis.exists?(feed_key_for(inactive_user, 'reblogs:2'))).to be false + end + end + + def feed_key_for(user, subtype = nil) + FeedManager.instance.key(:home, user.account_id, subtype) + end +end diff --git a/spec/lib/vacuum/media_attachments_vacuum_spec.rb b/spec/lib/vacuum/media_attachments_vacuum_spec.rb new file mode 100644 index 00000000000..be8458d9bf7 --- /dev/null +++ b/spec/lib/vacuum/media_attachments_vacuum_spec.rb @@ -0,0 +1,47 @@ +require 'rails_helper' + +RSpec.describe Vacuum::MediaAttachmentsVacuum do + let(:retention_period) { 7.days } + + subject { described_class.new(retention_period) } + + let(:remote_status) { Fabricate(:status, account: Fabricate(:account, domain: 'example.com')) } + let(:local_status) { Fabricate(:status) } + + describe '#perform' do + let!(:old_remote_media) { Fabricate(:media_attachment, remote_url: 'https://example.com/foo.png', status: remote_status, created_at: (retention_period + 1.day).ago, updated_at: (retention_period + 1.day).ago) } + let!(:old_local_media) { Fabricate(:media_attachment, status: local_status, created_at: (retention_period + 1.day).ago, updated_at: (retention_period + 1.day).ago) } + let!(:new_remote_media) { Fabricate(:media_attachment, remote_url: 'https://example.com/foo.png', status: remote_status) } + let!(:new_local_media) { Fabricate(:media_attachment, status: local_status) } + let!(:old_unattached_media) { Fabricate(:media_attachment, account_id: nil, created_at: 10.days.ago) } + let!(:new_unattached_media) { Fabricate(:media_attachment, account_id: nil, created_at: 1.hour.ago) } + + before do + subject.perform + end + + it 'deletes cache of remote media attachments past the retention period' do + expect(old_remote_media.reload.file).to be_blank + end + + it 'does not touch local media attachments past the retention period' do + expect(old_local_media.reload.file).to_not be_blank + end + + it 'does not delete cache of remote media attachments within the retention period' do + expect(new_remote_media.reload.file).to_not be_blank + end + + it 'does not touch local media attachments within the retention period' do + expect(new_local_media.reload.file).to_not be_blank + end + + it 'deletes unattached media attachments past TTL' do + expect { old_unattached_media.reload }.to raise_error(ActiveRecord::RecordNotFound) + end + + it 'does not delete unattached media attachments within TTL' do + expect(new_unattached_media.reload).to be_persisted + end + end +end diff --git a/spec/lib/vacuum/preview_cards_vacuum_spec.rb b/spec/lib/vacuum/preview_cards_vacuum_spec.rb new file mode 100644 index 00000000000..4a4a599fa47 --- /dev/null +++ b/spec/lib/vacuum/preview_cards_vacuum_spec.rb @@ -0,0 +1,36 @@ +require 'rails_helper' + +RSpec.describe Vacuum::PreviewCardsVacuum do + let(:retention_period) { 7.days } + + subject { described_class.new(retention_period) } + + describe '#perform' do + let!(:orphaned_preview_card) { Fabricate(:preview_card, created_at: 2.days.ago) } + let!(:old_preview_card) { Fabricate(:preview_card, updated_at: (retention_period + 1.day).ago) } + let!(:new_preview_card) { Fabricate(:preview_card) } + + before do + old_preview_card.statuses << Fabricate(:status) + new_preview_card.statuses << Fabricate(:status) + + subject.perform + end + + it 'deletes cache of preview cards last updated before the retention period' do + expect(old_preview_card.reload.image).to be_blank + end + + it 'does not delete cache of preview cards last updated within the retention period' do + expect(new_preview_card.reload.image).to_not be_blank + end + + it 'does not delete attached preview cards' do + expect(new_preview_card.reload).to be_persisted + end + + it 'deletes preview cards not attached to any status' do + expect { orphaned_preview_card.reload }.to raise_error ActiveRecord::RecordNotFound + end + end +end diff --git a/spec/lib/vacuum/statuses_vacuum_spec.rb b/spec/lib/vacuum/statuses_vacuum_spec.rb new file mode 100644 index 00000000000..83f3c5c9f14 --- /dev/null +++ b/spec/lib/vacuum/statuses_vacuum_spec.rb @@ -0,0 +1,36 @@ +require 'rails_helper' + +RSpec.describe Vacuum::StatusesVacuum do + let(:retention_period) { 7.days } + + let(:remote_account) { Fabricate(:account, domain: 'example.com') } + + subject { described_class.new(retention_period) } + + describe '#perform' do + let!(:remote_status_old) { Fabricate(:status, account: remote_account, created_at: (retention_period + 2.days).ago) } + let!(:remote_status_recent) { Fabricate(:status, account: remote_account, created_at: (retention_period - 2.days).ago) } + let!(:local_status_old) { Fabricate(:status, created_at: (retention_period + 2.days).ago) } + let!(:local_status_recent) { Fabricate(:status, created_at: (retention_period - 2.days).ago) } + + before do + subject.perform + end + + it 'deletes remote statuses past the retention period' do + expect { remote_status_old.reload }.to raise_error ActiveRecord::RecordNotFound + end + + it 'does not delete local statuses past the retention period' do + expect { local_status_old.reload }.to_not raise_error + end + + it 'does not delete remote statuses within the retention period' do + expect { remote_status_recent.reload }.to_not raise_error + end + + it 'does not delete local statuses within the retention period' do + expect { local_status_recent.reload }.to_not raise_error + end + end +end diff --git a/spec/lib/vacuum/system_keys_vacuum_spec.rb b/spec/lib/vacuum/system_keys_vacuum_spec.rb new file mode 100644 index 00000000000..565892f0252 --- /dev/null +++ b/spec/lib/vacuum/system_keys_vacuum_spec.rb @@ -0,0 +1,22 @@ +require 'rails_helper' + +RSpec.describe Vacuum::SystemKeysVacuum do + subject { described_class.new } + + describe '#perform' do + let!(:expired_system_key) { Fabricate(:system_key, created_at: (SystemKey::ROTATION_PERIOD * 4).ago) } + let!(:current_system_key) { Fabricate(:system_key) } + + before do + subject.perform + end + + it 'deletes the expired key' do + expect { expired_system_key.reload }.to raise_error ActiveRecord::RecordNotFound + end + + it 'does not delete the current key' do + expect { current_system_key.reload }.to_not raise_error + end + end +end diff --git a/spec/workers/scheduler/feed_cleanup_scheduler_spec.rb b/spec/workers/scheduler/feed_cleanup_scheduler_spec.rb deleted file mode 100644 index 82d7945946c..00000000000 --- a/spec/workers/scheduler/feed_cleanup_scheduler_spec.rb +++ /dev/null @@ -1,26 +0,0 @@ -require 'rails_helper' - -describe Scheduler::FeedCleanupScheduler do - subject { described_class.new } - - let!(:active_user) { Fabricate(:user, current_sign_in_at: 2.days.ago) } - let!(:inactive_user) { Fabricate(:user, current_sign_in_at: 22.days.ago) } - - it 'clears feeds of inactives' do - redis.zadd(feed_key_for(inactive_user), 1, 1) - redis.zadd(feed_key_for(active_user), 1, 1) - redis.zadd(feed_key_for(inactive_user, 'reblogs'), 2, 2) - redis.sadd(feed_key_for(inactive_user, 'reblogs:2'), 3) - - subject.perform - - expect(redis.zcard(feed_key_for(inactive_user))).to eq 0 - expect(redis.zcard(feed_key_for(active_user))).to eq 1 - expect(redis.exists?(feed_key_for(inactive_user, 'reblogs'))).to be false - expect(redis.exists?(feed_key_for(inactive_user, 'reblogs:2'))).to be false - end - - def feed_key_for(user, subtype = nil) - FeedManager.instance.key(:home, user.account_id, subtype) - end -end diff --git a/spec/workers/scheduler/media_cleanup_scheduler_spec.rb b/spec/workers/scheduler/media_cleanup_scheduler_spec.rb deleted file mode 100644 index 8a0da67e1b6..00000000000 --- a/spec/workers/scheduler/media_cleanup_scheduler_spec.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'rails_helper' - -describe Scheduler::MediaCleanupScheduler do - subject { described_class.new } - - let!(:old_media) { Fabricate(:media_attachment, account_id: nil, created_at: 10.days.ago) } - let!(:new_media) { Fabricate(:media_attachment, account_id: nil, created_at: 1.hour.ago) } - - it 'removes old media records' do - subject.perform - - expect { old_media.reload }.to raise_error(ActiveRecord::RecordNotFound) - expect(new_media.reload).to be_persisted - end -end From 1d5196918ae8803cfb07903aff8cd5cfa0b979be Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Sep 2022 02:31:33 +0900 Subject: [PATCH 325/646] Bump tzinfo-data from 1.2022.3 to 1.2022.4 (#19238) Bumps [tzinfo-data](https://github.com/tzinfo/tzinfo-data) from 1.2022.3 to 1.2022.4. - [Release notes](https://github.com/tzinfo/tzinfo-data/releases) - [Commits](https://github.com/tzinfo/tzinfo-data/compare/v1.2022.3...v1.2022.4) --- updated-dependencies: - dependency-name: tzinfo-data dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 425970a5246..21579f1f1f5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -681,7 +681,7 @@ GEM unf (~> 0.1.0) tzinfo (2.0.5) concurrent-ruby (~> 1.0) - tzinfo-data (1.2022.3) + tzinfo-data (1.2022.4) tzinfo (>= 1.0.0) unf (0.1.4) unf_ext From 97d34c51177c0c8a1b6bdb804cb371a79d45d6c5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Sep 2022 02:31:46 +0900 Subject: [PATCH 326/646] Bump sass from 1.54.9 to 1.55.0 (#19239) Bumps [sass](https://github.com/sass/dart-sass) from 1.54.9 to 1.55.0. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.54.9...1.55.0) --- updated-dependencies: - dependency-name: sass dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5472a41d8e4..224fbd40962 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "requestidlecallback": "^0.3.0", "reselect": "^4.1.6", "rimraf": "^3.0.2", - "sass": "^1.54.9", + "sass": "^1.55.0", "sass-loader": "^10.2.0", "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", diff --git a/yarn.lock b/yarn.lock index a6a897626c7..e351f6b7e7b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9890,10 +9890,10 @@ sass-loader@^10.2.0: schema-utils "^3.0.0" semver "^7.3.2" -sass@^1.54.9: - version "1.54.9" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.9.tgz#b05f14ed572869218d1a76961de60cd647221762" - integrity sha512-xb1hjASzEH+0L0WI9oFjqhRi51t/gagWnxLiwUNMltA0Ab6jIDkAacgKiGYKM9Jhy109osM7woEEai6SXeJo5Q== +sass@^1.55.0: + version "1.55.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.55.0.tgz#0c4d3c293cfe8f8a2e8d3b666e1cf1bff8065d1c" + integrity sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From 950900b9689437a5eeb6b92f32c538a68b8dbdc9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Sep 2022 02:32:25 +0900 Subject: [PATCH 327/646] Bump ws from 8.8.1 to 8.9.0 (#19240) Bumps [ws](https://github.com/websockets/ws) from 8.8.1 to 8.9.0. - [Release notes](https://github.com/websockets/ws/releases) - [Commits](https://github.com/websockets/ws/compare/8.8.1...8.9.0) --- updated-dependencies: - dependency-name: ws dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 224fbd40962..967833a95c8 100644 --- a/package.json +++ b/package.json @@ -141,7 +141,7 @@ "workbox-strategies": "^6.5.4", "workbox-webpack-plugin": "^6.5.4", "workbox-window": "^6.5.4", - "ws": "^8.8.1" + "ws": "^8.9.0" }, "devDependencies": { "@babel/eslint-parser": "^7.19.1", diff --git a/yarn.lock b/yarn.lock index e351f6b7e7b..90f0e233b13 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12019,10 +12019,10 @@ ws@^7.3.1: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -ws@^8.8.0, ws@^8.8.1: - version "8.8.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" - integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== +ws@^8.8.0, ws@^8.9.0: + version "8.9.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.9.0.tgz#2a994bb67144be1b53fe2d23c53c028adeb7f45e" + integrity sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg== xml-name-validator@^4.0.0: version "4.0.0" From 88b3a0681c059d98e89c8bf8e1dcb47039d0742c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Sep 2022 02:33:59 +0900 Subject: [PATCH 328/646] Bump stylelint from 14.12.0 to 14.12.1 (#19241) Bumps [stylelint](https://github.com/stylelint/stylelint) from 14.12.0 to 14.12.1. - [Release notes](https://github.com/stylelint/stylelint/releases) - [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md) - [Commits](https://github.com/stylelint/stylelint/compare/14.12.0...14.12.1) --- updated-dependencies: - dependency-name: stylelint dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 967833a95c8..30eaf9430fa 100644 --- a/package.json +++ b/package.json @@ -160,7 +160,7 @@ "raf": "^3.4.1", "react-intl-translations-manager": "^5.0.3", "react-test-renderer": "^16.14.0", - "stylelint": "^14.12.0", + "stylelint": "^14.12.1", "stylelint-config-standard-scss": "^5.0.0", "webpack-dev-server": "^3.11.3", "yargs": "^17.5.1" diff --git a/yarn.lock b/yarn.lock index 90f0e233b13..ebd66fca0eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10670,10 +10670,10 @@ stylelint-scss@^4.0.0: postcss-selector-parser "^6.0.6" postcss-value-parser "^4.1.0" -stylelint@^14.12.0: - version "14.12.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.12.0.tgz#86d5b60d0f30a6bd0b59e1d4c85a267f0caef97e" - integrity sha512-9Sa+IsT31PN9zf9q5ZVZNvhT6jMVu6YhpI38g3Akn7vONipGL0GNd9QCblwtJ3ysaoM80P/+9mOcFB1xnytiQQ== +stylelint@^14.12.1: + version "14.12.1" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.12.1.tgz#7fac1578662ca12330c32a61c8583be7fad4a530" + integrity sha512-ZEM4TuksChMBfuPadQsHUkbOoRySAT9QMfDvvYxdAchOJl0p+csTMBXOu6ORAAxKhwBmxqJiep8V88bXfNs3EQ== dependencies: "@csstools/selector-specificity" "^2.0.2" balanced-match "^2.0.0" From 2635c8dc5c19ea976b9fc787169244d7e8cec90a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Sep 2022 02:34:29 +0900 Subject: [PATCH 329/646] Bump react-redux from 7.2.8 to 7.2.9 (#19242) Bumps [react-redux](https://github.com/reduxjs/react-redux) from 7.2.8 to 7.2.9. - [Release notes](https://github.com/reduxjs/react-redux/releases) - [Changelog](https://github.com/reduxjs/react-redux/blob/master/CHANGELOG.md) - [Commits](https://github.com/reduxjs/react-redux/compare/v7.2.8...v7.2.9) --- updated-dependencies: - dependency-name: react-redux dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 30eaf9430fa..ca17860383c 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "react-motion": "^0.5.2", "react-notification": "^6.8.5", "react-overlays": "^0.9.3", - "react-redux": "^7.2.8", + "react-redux": "^7.2.9", "react-redux-loading-bar": "^5.0.4", "react-router-dom": "^4.1.1", "react-router-scroll-4": "^1.0.0-beta.1", diff --git a/yarn.lock b/yarn.lock index ebd66fca0eb..90302b284a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9310,10 +9310,10 @@ react-redux-loading-bar@^5.0.4: prop-types "^15.7.2" react-lifecycles-compat "^3.0.4" -react-redux@^7.2.8: - version "7.2.8" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.8.tgz#a894068315e65de5b1b68899f9c6ee0923dd28de" - integrity sha512-6+uDjhs3PSIclqoCk0kd6iX74gzrGc3W5zcAjbrFgEdIjRSQObdIwfx80unTkVUYvbQ95Y8Av3OvFHq1w5EOUw== +react-redux@^7.2.9: + version "7.2.9" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.9.tgz#09488fbb9416a4efe3735b7235055442b042481d" + integrity sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ== dependencies: "@babel/runtime" "^7.15.4" "@types/react-redux" "^7.1.20" From d86dd067ceb1dc05e67417fa1d7f1e84519b2fca Mon Sep 17 00:00:00 2001 From: Yamagishi Kazutoshi Date: Wed, 28 Sep 2022 06:33:56 +0900 Subject: [PATCH 330/646] Fix auto detect language for translate service (#19244) --- .devcontainer/devcontainer.json | 2 +- .devcontainer/docker-compose.yml | 7 +++++++ app/lib/translation_service/deepl.rb | 2 +- app/lib/translation_service/libre_translate.rb | 3 ++- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 9d9e54d4f8c..47497794fb6 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -20,7 +20,7 @@ "forwardPorts": [3000, 4000], // Use 'postCreateCommand' to run commands after the container is created. - "postCreateCommand": "bundle install --path vendor/bundle && yarn install && ./bin/rails db:setup", + "postCreateCommand": "bundle install --path vendor/bundle && yarn install && git checkout -- Gemfile.lock && ./bin/rails db:setup", // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. "remoteUser": "vscode" diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 538f6cccde8..46f42c45493 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -27,6 +27,7 @@ services: ES_ENABLED: 'true' ES_HOST: es ES_PORT: '9200' + LIBRE_TRANSLATE_ENDPOINT: http://libretranslate:5000 # Overrides default command so things don't shut down after the process ends. command: sleep infinity networks: @@ -72,6 +73,12 @@ services: soft: -1 hard: -1 + libretranslate: + image: libretranslate/libretranslate:v1.2.9 + restart: unless-stopped + networks: + - internal_network + volumes: postgres-data: redis-data: diff --git a/app/lib/translation_service/deepl.rb b/app/lib/translation_service/deepl.rb index 89ccf01e517..b75b604a81d 100644 --- a/app/lib/translation_service/deepl.rb +++ b/app/lib/translation_service/deepl.rb @@ -28,7 +28,7 @@ class TranslationService::DeepL < TranslationService private def request(text, source_language, target_language) - req = Request.new(:post, endpoint_url, form: { text: text, source_lang: source_language.upcase, target_lang: target_language, tag_handling: 'html' }) + req = Request.new(:post, endpoint_url, form: { text: text, source_lang: source_language&.upcase, target_lang: target_language, tag_handling: 'html' }) req.add_headers('Authorization': "DeepL-Auth-Key #{@api_key}") req end diff --git a/app/lib/translation_service/libre_translate.rb b/app/lib/translation_service/libre_translate.rb index 66acdeed7b9..8cf26f8684a 100644 --- a/app/lib/translation_service/libre_translate.rb +++ b/app/lib/translation_service/libre_translate.rb @@ -26,7 +26,8 @@ class TranslationService::LibreTranslate < TranslationService private def request(text, source_language, target_language) - req = Request.new(:post, "#{@base_url}/translate", body: Oj.dump(q: text, source: source_language, target: target_language, format: 'html', api_key: @api_key)) + body = Oj.dump(q: text, source: source_language.presence || 'auto', target: target_language, format: 'html', api_key: @api_key) + req = Request.new(:post, "#{@base_url}/translate", body: body) req.add_headers('Content-Type': 'application/json') req end From 55a2e9b5beb1fc923c42257edee3df738e208b38 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 28 Sep 2022 01:02:01 +0200 Subject: [PATCH 331/646] Fix translations not being formatted, other issues in web UI (#19245) Fix #19237 --- app/javascript/mastodon/components/status_content.js | 9 +++++---- app/services/translate_status_service.rb | 7 +++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/app/javascript/mastodon/components/status_content.js b/app/javascript/mastodon/components/status_content.js index c8f7bc0956e..43e938d4e3d 100644 --- a/app/javascript/mastodon/components/status_content.js +++ b/app/javascript/mastodon/components/status_content.js @@ -6,7 +6,7 @@ import Permalink from './permalink'; import classnames from 'classnames'; import PollContainer from 'mastodon/containers/poll_container'; import Icon from 'mastodon/components/icon'; -import { autoPlayGif } from 'mastodon/initial_state'; +import { autoPlayGif, languages as preloadedLanguages } from 'mastodon/initial_state'; const MAX_HEIGHT = 642; // 20px * 32 (+ 2px padding at the top) @@ -180,8 +180,9 @@ class StatusContent extends React.PureComponent { const hidden = this.props.onExpandedToggle ? !this.props.expanded : this.state.hidden; const renderReadMore = this.props.onClick && status.get('collapsed'); const renderViewThread = this.props.showThread && status.get('in_reply_to_id') && status.get('in_reply_to_account_id') === status.getIn(['account', 'id']); - const renderTranslate = this.props.onTranslate && ['public', 'unlisted'].includes(status.get('visibility')) && intl.locale !== status.get('language'); - const languageNames = new Intl.DisplayNames([intl.locale], { type: 'language' }); + const renderTranslate = this.props.onTranslate && ['public', 'unlisted'].includes(status.get('visibility')) && status.get('contentHtml').length > 0 && intl.locale !== status.get('language'); + const language = preloadedLanguages.find(lang => lang[0] === status.get('language')); + const languageName = language ? language[2] : status.get('language'); const content = { __html: status.get('translation') ? status.getIn(['translation', 'content']) : status.get('contentHtml') }; const spoilerContent = { __html: status.get('spoilerHtml') }; @@ -206,7 +207,7 @@ class StatusContent extends React.PureComponent { const translateButton = ( ); diff --git a/app/services/translate_status_service.rb b/app/services/translate_status_service.rb index b375226bec2..539a0d9db5f 100644 --- a/app/services/translate_status_service.rb +++ b/app/services/translate_status_service.rb @@ -3,13 +3,16 @@ class TranslateStatusService < BaseService CACHE_TTL = 1.day.freeze + include FormattingHelper + def call(status, target_language) raise Mastodon::NotPermittedError unless status.public_visibility? || status.unlisted_visibility? @status = status + @content = status_content_format(@status) @target_language = target_language - Rails.cache.fetch("translations/#{@status.language}/#{@target_language}/#{content_hash}", expires_in: CACHE_TTL) { translation_backend.translate(@status.text, @status.language, @target_language) } + Rails.cache.fetch("translations/#{@status.language}/#{@target_language}/#{content_hash}", expires_in: CACHE_TTL) { translation_backend.translate(@content, @status.language, @target_language) } end private @@ -19,6 +22,6 @@ class TranslateStatusService < BaseService end def content_hash - Digest::SHA256.base64digest(@status.text) + Digest::SHA256.base64digest(@content) end end From 0d0f3c15d3b510b7e6bd975f3725aaf63b52d971 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 28 Sep 2022 01:02:15 +0200 Subject: [PATCH 332/646] Fix language dropdown sometimes not appearing in web UI (#19246) When user has no locale preference saved (such as never changing it from the default), the preferred posting language is nil, and the dropdown is not visible --- app/models/user.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/user.rb b/app/models/user.rb index 342f5e6ccd0..4767189a073 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -282,7 +282,7 @@ class User < ApplicationRecord end def preferred_posting_language - valid_locale_cascade(settings.default_language, locale) + valid_locale_cascade(settings.default_language, locale, I18n.locale) end def setting_default_privacy From ce5d092a86997194db3eaeecc12aa4aba185b231 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 28 Sep 2022 17:22:49 +0200 Subject: [PATCH 333/646] New Crowdin updates (#19229) * New translations en.json (Romanian) * New translations en.json (French) * New translations en.json (Afrikaans) * New translations en.json (Spanish) * New translations en.json (Korean) * New translations en.json (Lithuanian) * New translations en.json (Macedonian) * New translations en.json (Norwegian) * New translations en.json (Punjabi) * New translations en.json (Polish) * New translations en.json (Portuguese) * New translations en.json (Russian) * New translations en.json (Hebrew) * New translations en.json (Italian) * New translations en.json (Slovak) * New translations en.json (Slovenian) * New translations en.json (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.json (Turkish) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations en.json (Chinese Traditional) * New translations en.json (Urdu (Pakistan)) * New translations en.json (Vietnamese) * New translations en.json (Galician) * New translations en.json (Georgian) * New translations en.json (Irish) * New translations en.json (Armenian) * New translations en.json (Indonesian) * New translations en.json (Bulgarian) * New translations en.json (Ido) * New translations en.json (German) * New translations en.json (Tamil) * New translations en.json (Esperanto) * New translations en.json (Czech) * New translations en.json (Dutch) * New translations en.json (Albanian) * New translations en.json (Japanese) * New translations en.json (Sinhala) * New translations en.json (Hungarian) * New translations en.json (Arabic) * New translations en.json (Catalan) * New translations en.yml (Catalan) * New translations en.json (Danish) * New translations en.json (Greek) * New translations en.json (Frisian) * New translations en.json (Basque) * New translations en.json (Finnish) * New translations en.json (Thai) * New translations en.json (Icelandic) * New translations en.json (Portuguese, Brazilian) * New translations en.json (Kurmanji (Kurdish)) * New translations en.json (Cornish) * New translations en.json (Kannada) * New translations en.json (Scottish Gaelic) * New translations en.json (Asturian) * New translations en.json (Occitan) * New translations en.json (Serbian (Latin)) * New translations en.json (Sorani (Kurdish)) * New translations en.json (Malayalam) * New translations en.json (Corsican) * New translations en.json (Sardinian) * New translations en.json (Sanskrit) * New translations en.json (Kabyle) * New translations en.json (Taigi) * New translations en.json (Silesian) * New translations en.json (Breton) * New translations en.json (Tatar) * New translations en.json (Persian) * New translations en.json (Kazakh) * New translations en.json (Spanish, Argentina) * New translations en.json (Spanish, Mexico) * New translations en.json (Bengali) * New translations en.json (Marathi) * New translations en.json (Croatian) * New translations en.json (Norwegian Nynorsk) * New translations en.json (Estonian) * New translations en.json (Chinese Traditional, Hong Kong) * New translations en.json (Latvian) * New translations en.json (Hindi) * New translations en.json (Malay) * New translations en.json (Telugu) * New translations en.json (English, United Kingdom) * New translations en.json (Welsh) * New translations en.json (Uyghur) * New translations en.json (Standard Moroccan Tamazight) * New translations en.json (Greek) * New translations en.json (Portuguese) * New translations en.json (Kurmanji (Kurdish)) * New translations en.yml (Chinese Simplified) * New translations en.yml (Ukrainian) * New translations en.json (Spanish) * New translations en.json (Korean) * New translations en.json (Ukrainian) * New translations en.json (Chinese Simplified) * New translations simple_form.en.yml (Chinese Simplified) * New translations en.json (Danish) * New translations en.json (Italian) * New translations en.json (Russian) * New translations en.json (Chinese Traditional) * New translations en.json (Czech) * New translations en.json (Hungarian) * New translations en.json (Latvian) * New translations en.json (Turkish) * New translations en.json (Albanian) * New translations en.json (German) * New translations en.json (Polish) * New translations en.json (Slovenian) * New translations en.json (Vietnamese) * New translations en.json (Ido) * New translations en.json (French) * New translations en.json (Icelandic) * Run `yarn manage:translations` * Run `bundle exec i18n-tasks normalize` Co-authored-by: Yamagishi Kazutoshi --- app/javascript/mastodon/locales/ca.json | 6 +++--- app/javascript/mastodon/locales/cs.json | 6 +++--- app/javascript/mastodon/locales/da.json | 6 +++--- app/javascript/mastodon/locales/de.json | 6 +++--- app/javascript/mastodon/locales/el.json | 6 +++--- app/javascript/mastodon/locales/es-AR.json | 6 +++--- app/javascript/mastodon/locales/es-MX.json | 14 +++++++------- app/javascript/mastodon/locales/es.json | 6 +++--- app/javascript/mastodon/locales/fr.json | 12 ++++++------ app/javascript/mastodon/locales/hu.json | 6 +++--- app/javascript/mastodon/locales/io.json | 6 +++--- app/javascript/mastodon/locales/is.json | 6 +++--- app/javascript/mastodon/locales/it.json | 6 +++--- app/javascript/mastodon/locales/ja.json | 8 ++++---- app/javascript/mastodon/locales/ko.json | 6 +++--- app/javascript/mastodon/locales/ku.json | 6 +++--- app/javascript/mastodon/locales/lv.json | 6 +++--- app/javascript/mastodon/locales/pl.json | 6 +++--- app/javascript/mastodon/locales/pt-PT.json | 6 +++--- app/javascript/mastodon/locales/ru.json | 6 +++--- app/javascript/mastodon/locales/sl.json | 6 +++--- app/javascript/mastodon/locales/sq.json | 6 +++--- app/javascript/mastodon/locales/tr.json | 6 +++--- app/javascript/mastodon/locales/uk.json | 6 +++--- app/javascript/mastodon/locales/vi.json | 6 +++--- app/javascript/mastodon/locales/zh-CN.json | 14 +++++++------- app/javascript/mastodon/locales/zh-TW.json | 6 +++--- config/locales/ca.yml | 2 +- config/locales/simple_form.zh-CN.yml | 1 + config/locales/uk.yml | 4 ++++ config/locales/zh-CN.yml | 7 +++++++ 31 files changed, 106 insertions(+), 94 deletions(-) diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 81a69c4b022..5dbad8d94d4 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -519,10 +519,10 @@ "status.show_less_all": "Mostrar-ne menys per a tot", "status.show_more": "Mostrar-ne més", "status.show_more_all": "Mostrar-ne més per a tot", - "status.show_original": "Show original", + "status.show_original": "Mostra l'original", "status.show_thread": "Mostra el fil", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Tradueix", + "status.translated_from": "Traduït del: {lang}", "status.uncached_media_warning": "No està disponible", "status.unmute_conversation": "No silenciïs la conversa", "status.unpin": "No fixis al perfil", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index e3d2f30e8fd..ccadcec262f 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -519,10 +519,10 @@ "status.show_less_all": "Zobrazit méně pro všechny", "status.show_more": "Zobrazit více", "status.show_more_all": "Zobrazit více pro všechny", - "status.show_original": "Show original", + "status.show_original": "Zobrazit původní", "status.show_thread": "Zobrazit vlákno", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Přeložit", + "status.translated_from": "Přeloženo z {lang}", "status.uncached_media_warning": "Nedostupné", "status.unmute_conversation": "Odkrýt konverzaci", "status.unpin": "Odepnout z profilu", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 92dddbfe2e2..e57b301dcf8 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -519,10 +519,10 @@ "status.show_less_all": "Vis mindre for alle", "status.show_more": "Vis mere", "status.show_more_all": "Vis mere for alle", - "status.show_original": "Show original", + "status.show_original": "Vis original", "status.show_thread": "Vis tråd", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Oversæt", + "status.translated_from": "Oversat fra {lang}", "status.uncached_media_warning": "Utilgængelig", "status.unmute_conversation": "Genaktivér samtale", "status.unpin": "Frigør fra profil", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index b0a4ca5faff..a2f8f087d12 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -519,10 +519,10 @@ "status.show_less_all": "Alle Inhaltswarnungen zuklappen", "status.show_more": "Mehr anzeigen", "status.show_more_all": "Alle Inhaltswarnungen aufklappen", - "status.show_original": "Show original", + "status.show_original": "Original anzeigen", "status.show_thread": "Zeige Konversation", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Übersetzen", + "status.translated_from": "Aus {lang} übersetzt", "status.uncached_media_warning": "Nicht verfügbar", "status.unmute_conversation": "Stummschaltung von Konversation aufheben", "status.unpin": "Vom Profil lösen", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 2a32dbcc6ec..02f071ede9c 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -519,10 +519,10 @@ "status.show_less_all": "Δείξε λιγότερα για όλα", "status.show_more": "Δείξε περισσότερα", "status.show_more_all": "Δείξε περισσότερα για όλα", - "status.show_original": "Show original", + "status.show_original": "Εμφάνιση αρχικού", "status.show_thread": "Εμφάνιση νήματος", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Μετάφραση", + "status.translated_from": "Μεταφράστηκε από {lang}", "status.uncached_media_warning": "Μη διαθέσιμα", "status.unmute_conversation": "Διέκοψε την αποσιώπηση της συζήτησης", "status.unpin": "Ξεκαρφίτσωσε από το προφίλ", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 6246462bb91..bbaa3591eb0 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -519,10 +519,10 @@ "status.show_less_all": "Mostrar menos para todo", "status.show_more": "Mostrar más", "status.show_more_all": "Mostrar más para todo", - "status.show_original": "Show original", + "status.show_original": "Mostrar original", "status.show_thread": "Mostrar hilo", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Traducir", + "status.translated_from": "Traducido desde el {lang}", "status.uncached_media_warning": "No disponible", "status.unmute_conversation": "Dejar de silenciar conversación", "status.unpin": "Dejar de fijar", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index f9823a8a40d..36ac226b588 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -24,7 +24,7 @@ "account.follows_you": "Te sigue", "account.hide_reblogs": "Ocultar retoots de @{name}", "account.joined": "Se unió el {date}", - "account.languages": "Change subscribed languages", + "account.languages": "Cambiar idiomas suscritos", "account.link_verified_on": "El proprietario de este link fue comprobado el {date}", "account.locked_info": "El estado de privacidad de esta cuenta està configurado como bloqueado. El proprietario debe revisar manualmente quien puede seguirle.", "account.media": "Multimedia", @@ -519,16 +519,16 @@ "status.show_less_all": "Mostrar menos para todo", "status.show_more": "Mostrar más", "status.show_more_all": "Mostrar más para todo", - "status.show_original": "Show original", + "status.show_original": "Mostrar original", "status.show_thread": "Mostrar hilo", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Traducir", + "status.translated_from": "Traducido de {lang}", "status.uncached_media_warning": "No disponible", "status.unmute_conversation": "Dejar de silenciar conversación", "status.unpin": "Dejar de fijar", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "Sólo los mensajes en los idiomas seleccionados aparecerán en su inicio y otras líneas de tiempo después del cambio. Seleccione ninguno para recibir mensajes en todos los idiomas.", + "subscribed_languages.save": "Guardar cambios", + "subscribed_languages.target": "Cambiar idiomas suscritos para {target}", "suggestions.dismiss": "Descartar sugerencia", "suggestions.header": "Es posible que te interese…", "tabs_bar.federated_timeline": "Federado", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 68cd972ab53..af6a2ba970e 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -519,10 +519,10 @@ "status.show_less_all": "Mostrar menos para todo", "status.show_more": "Mostrar más", "status.show_more_all": "Mostrar más para todo", - "status.show_original": "Show original", + "status.show_original": "Mostrar original", "status.show_thread": "Mostrar hilo", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Traducir", + "status.translated_from": "Traducido del {lang}", "status.uncached_media_warning": "No disponible", "status.unmute_conversation": "Dejar de silenciar conversación", "status.unpin": "Dejar de fijar", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 3172f6c72c9..5c615041fa2 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -24,7 +24,7 @@ "account.follows_you": "Vous suit", "account.hide_reblogs": "Masquer les partages de @{name}", "account.joined": "Ici depuis {date}", - "account.languages": "Change subscribed languages", + "account.languages": "Changer les langues abonnées", "account.link_verified_on": "La propriété de ce lien a été vérifiée le {date}", "account.locked_info": "Ce compte est privé. Son ou sa propriétaire approuve manuellement qui peut le suivre.", "account.media": "Médias", @@ -60,7 +60,7 @@ "alert.unexpected.title": "Oups !", "announcement.announcement": "Annonce", "attachments_list.unprocessed": "(non traité)", - "audio.hide": "Hide audio", + "audio.hide": "Masquer l'audio", "autosuggest_hashtag.per_week": "{count} par semaine", "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour passer ceci la prochaine fois", "bundle_column_error.body": "Une erreur s’est produite lors du chargement de ce composant.", @@ -198,10 +198,10 @@ "explore.trending_links": "Actualité", "explore.trending_statuses": "Messages", "explore.trending_tags": "Hashtags", - "filter_modal.added.context_mismatch_explanation": "This filter category does not apply to the context in which you have accessed this post. If you want the post to be filtered in this context too, you will have to edit the filter.", - "filter_modal.added.context_mismatch_title": "Context mismatch!", - "filter_modal.added.expired_explanation": "This filter category has expired, you will need to change the expiration date for it to apply.", - "filter_modal.added.expired_title": "Expired filter!", + "filter_modal.added.context_mismatch_explanation": "Cette catégorie de filtre ne s'applique pas au contexte dans lequel vous avez accédé à ce message. Si vous voulez que le message soit filtré dans ce contexte également, vous devrez modifier le filtre.", + "filter_modal.added.context_mismatch_title": "Incompatibilité du contexte !", + "filter_modal.added.expired_explanation": "Cette catégorie de filtre a expiré, vous devrez modifier la date d'expiration pour qu'elle soit appliquée.", + "filter_modal.added.expired_title": "Filtre expiré !", "filter_modal.added.review_and_configure": "To review and further configure this filter category, go to the {settings_link}.", "filter_modal.added.review_and_configure_title": "Filter settings", "filter_modal.added.settings_link": "settings page", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index c2679b35a12..08df3cbc98c 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -519,10 +519,10 @@ "status.show_less_all": "Kevesebbet mindenhol", "status.show_more": "Többet", "status.show_more_all": "Többet mindenhol", - "status.show_original": "Show original", + "status.show_original": "Eredeti mutatása", "status.show_thread": "Szál mutatása", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Fordítás", + "status.translated_from": "{lang} nyelvből fordítva", "status.uncached_media_warning": "Nem érhető el", "status.unmute_conversation": "Beszélgetés némításának feloldása", "status.unpin": "Kitűzés eltávolítása a profilodról", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 8fe2f7c8c94..485b35f1bb0 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -519,10 +519,10 @@ "status.show_less_all": "Montrez min por omno", "status.show_more": "Montrar plue", "status.show_more_all": "Montrez pluse por omno", - "status.show_original": "Show original", + "status.show_original": "Montrez originalo", "status.show_thread": "Montrez postaro", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Tradukez", + "status.translated_from": "Tradukesis de {lang}", "status.uncached_media_warning": "Nedisplonebla", "status.unmute_conversation": "Desilencigez konverso", "status.unpin": "Depinglagez de profilo", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 73eafad061c..c58085f1e44 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -519,10 +519,10 @@ "status.show_less_all": "Sýna minna fyrir allt", "status.show_more": "Sýna meira", "status.show_more_all": "Sýna meira fyrir allt", - "status.show_original": "Show original", + "status.show_original": "Sýna upprunalega", "status.show_thread": "Birta þráð", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Þýða", + "status.translated_from": "Þýtt úr {lang}", "status.uncached_media_warning": "Ekki tiltækt", "status.unmute_conversation": "Hætta að þagga niður í samtali", "status.unpin": "Losa af notandasniði", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 92fe389e4b6..4376c0cfffd 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -519,10 +519,10 @@ "status.show_less_all": "Mostra meno per tutti", "status.show_more": "Mostra di più", "status.show_more_all": "Mostra di più per tutti", - "status.show_original": "Show original", + "status.show_original": "Mostra originale", "status.show_thread": "Mostra conversazione", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Traduci", + "status.translated_from": "Tradotto da {lang}", "status.uncached_media_warning": "Non disponibile", "status.unmute_conversation": "Annulla silenzia conversazione", "status.unpin": "Non fissare in cima al profilo", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 1e49517f991..9fcd8094763 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -519,15 +519,15 @@ "status.show_less_all": "全て隠す", "status.show_more": "もっと見る", "status.show_more_all": "全て見る", - "status.show_original": "Show original", + "status.show_original": "原文を表示", "status.show_thread": "スレッドを表示", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "翻訳", + "status.translated_from": "{lang}からの翻訳", "status.uncached_media_warning": "利用できません", "status.unmute_conversation": "会話のミュートを解除", "status.unpin": "プロフィールへの固定を解除", "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", + "subscribed_languages.save": "変更を保存", "subscribed_languages.target": "Change subscribed languages for {target}", "suggestions.dismiss": "隠す", "suggestions.header": "興味あるかもしれません…", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 8dc82a3a8a8..4d2d5e4494b 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -519,10 +519,10 @@ "status.show_less_all": "모두 접기", "status.show_more": "더 보기", "status.show_more_all": "모두 펼치기", - "status.show_original": "Show original", + "status.show_original": "원본 보기", "status.show_thread": "글타래 보기", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "번역", + "status.translated_from": "{lang}에서 번역됨", "status.uncached_media_warning": "사용할 수 없음", "status.unmute_conversation": "이 대화의 뮤트 해제하기", "status.unpin": "고정 해제", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index 6b5128f4dc3..41e5124320e 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -519,10 +519,10 @@ "status.show_less_all": "Ji bo hemîyan kêmtir nîşan bide", "status.show_more": "Bêtir nîşan bide", "status.show_more_all": "Bêtir nîşan bide bo hemûyan", - "status.show_original": "Show original", + "status.show_original": "A resen nîşan bide", "status.show_thread": "Mijarê nîşan bide", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Wergerîne", + "status.translated_from": "Ji {lang} hate wergerandin", "status.uncached_media_warning": "Tune ye", "status.unmute_conversation": "Axaftinê bêdeng neke", "status.unpin": "Şandiya derzîkirî ji profîlê rake", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index b018c8d494c..83d30aa0f26 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -519,10 +519,10 @@ "status.show_less_all": "Rādīt mazāk visiem", "status.show_more": "Rādīt vairāk", "status.show_more_all": "Rādīt vairāk visiem", - "status.show_original": "Show original", + "status.show_original": "Rādīt oriģinālu", "status.show_thread": "Rādīt tematu", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Tulkot", + "status.translated_from": "Tulkot no {lang}", "status.uncached_media_warning": "Nav pieejams", "status.unmute_conversation": "Atvērt sarunu", "status.unpin": "Noņemt no profila", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 617c81a6847..71ae209f3ea 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -519,10 +519,10 @@ "status.show_less_all": "Zwiń wszystkie", "status.show_more": "Rozwiń", "status.show_more_all": "Rozwiń wszystkie", - "status.show_original": "Show original", + "status.show_original": "Pokaż oryginał", "status.show_thread": "Pokaż wątek", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Przetłumacz", + "status.translated_from": "Przetłumaczone z {lang}", "status.uncached_media_warning": "Niedostępne", "status.unmute_conversation": "Cofnij wyciszenie konwersacji", "status.unpin": "Odepnij z profilu", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 7f30581653e..7c9936c6df4 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -519,10 +519,10 @@ "status.show_less_all": "Mostrar menos para todas", "status.show_more": "Mostrar mais", "status.show_more_all": "Mostrar mais para todas", - "status.show_original": "Show original", + "status.show_original": "Mostrar original", "status.show_thread": "Mostrar conversa", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Traduzir", + "status.translated_from": "Traduzido de {lang}", "status.uncached_media_warning": "Não disponível", "status.unmute_conversation": "Deixar de silenciar esta conversa", "status.unpin": "Não fixar no perfil", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 957f64b856a..47a0a79532f 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -519,10 +519,10 @@ "status.show_less_all": "Свернуть все спойлеры в ветке", "status.show_more": "Развернуть", "status.show_more_all": "Развернуть все спойлеры в ветке", - "status.show_original": "Show original", + "status.show_original": "Показать оригинал", "status.show_thread": "Показать обсуждение", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Перевод", + "status.translated_from": "Переведено с {lang}", "status.uncached_media_warning": "Невозможно отобразить файл", "status.unmute_conversation": "Не игнорировать обсуждение", "status.unpin": "Открепить от профиля", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index c4ce59e45f6..d2e2fdbab5f 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -519,10 +519,10 @@ "status.show_less_all": "Prikaži manj za vse", "status.show_more": "Prikaži več", "status.show_more_all": "Prikaži več za vse", - "status.show_original": "Show original", + "status.show_original": "Pokaži izvirnik", "status.show_thread": "Prikaži objavo", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Prevedi", + "status.translated_from": "Prevedeno iz jezika: {lang}", "status.uncached_media_warning": "Ni na voljo", "status.unmute_conversation": "Odtišaj pogovor", "status.unpin": "Odpni iz profila", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 4be47edc6aa..5e971ce6e95 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -519,10 +519,10 @@ "status.show_less_all": "Shfaq më pak për të tërë", "status.show_more": "Shfaq më tepër", "status.show_more_all": "Shfaq më tepër për të tërë", - "status.show_original": "Show original", + "status.show_original": "Shfaq origjinalin", "status.show_thread": "Shfaq rrjedhën", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Përktheje", + "status.translated_from": "Përkthyer nga {lang}", "status.uncached_media_warning": "Jo e passhme", "status.unmute_conversation": "Ktheji zërin bisedës", "status.unpin": "Shfiksoje nga profili", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 9f581a9f19d..4ddcef55aed 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -519,10 +519,10 @@ "status.show_less_all": "Hepsi için daha az göster", "status.show_more": "Daha fazlasını göster", "status.show_more_all": "Hepsi için daha fazla göster", - "status.show_original": "Show original", + "status.show_original": "Orijinali göster", "status.show_thread": "Konuyu göster", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Çevir", + "status.translated_from": "{lang} dilinden çevrildi", "status.uncached_media_warning": "Mevcut değil", "status.unmute_conversation": "Sohbet sesini aç", "status.unpin": "Profilden sabitlemeyi kaldır", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 5fb6030d5ec..a81cefe3212 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -519,10 +519,10 @@ "status.show_less_all": "Показувати менше для всіх", "status.show_more": "Розгорнути", "status.show_more_all": "Показувати більше для всіх", - "status.show_original": "Show original", + "status.show_original": "Показати оригінал", "status.show_thread": "Показати ланцюжок", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Перекласти", + "status.translated_from": "Перекладено з {lang}", "status.uncached_media_warning": "Недоступно", "status.unmute_conversation": "Не ігнорувати діалог", "status.unpin": "Відкріпити від профілю", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 707a4a2850b..a69a1830fd2 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -519,10 +519,10 @@ "status.show_less_all": "Thu gọn toàn bộ", "status.show_more": "Xem thêm", "status.show_more_all": "Hiển thị tất cả", - "status.show_original": "Show original", + "status.show_original": "Bản gốc", "status.show_thread": "Xem chuỗi tút này", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Dịch", + "status.translated_from": "Dịch từ {lang}", "status.uncached_media_warning": "Uncached", "status.unmute_conversation": "Quan tâm", "status.unpin": "Bỏ ghim trên hồ sơ", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 9be0306637f..40d9168a9b2 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -24,7 +24,7 @@ "account.follows_you": "关注了你", "account.hide_reblogs": "隐藏来自 @{name} 的转贴", "account.joined": "加入于 {date}", - "account.languages": "Change subscribed languages", + "account.languages": "更改订阅语言", "account.link_verified_on": "此链接的所有权已在 {date} 检查", "account.locked_info": "此账户已锁嘟。账户所有者会手动审核关注者。", "account.media": "媒体", @@ -519,16 +519,16 @@ "status.show_less_all": "隐藏全部内容", "status.show_more": "显示更多", "status.show_more_all": "显示全部内容", - "status.show_original": "Show original", + "status.show_original": "显示原文", "status.show_thread": "显示全部对话", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "翻译", + "status.translated_from": "翻译自 {lang}", "status.uncached_media_warning": "暂不可用", "status.unmute_conversation": "恢复此对话的通知提醒", "status.unpin": "在个人资料页面取消置顶", - "subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.", - "subscribed_languages.save": "Save changes", - "subscribed_languages.target": "Change subscribed languages for {target}", + "subscribed_languages.lead": "更改此选择后,仅选定语言的嘟文会出现在您的主页和列表时间轴上。选择「无」将接收所有语言的嘟文。", + "subscribed_languages.save": "保存更改", + "subscribed_languages.target": "为 {target} 更改订阅语言", "suggestions.dismiss": "关闭建议", "suggestions.header": "你可能会感兴趣…", "tabs_bar.federated_timeline": "跨站", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 200f31f66e4..8189e896c5f 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -519,10 +519,10 @@ "status.show_less_all": "減少顯示這類嘟文", "status.show_more": "顯示更多", "status.show_more_all": "顯示更多這類嘟文", - "status.show_original": "Show original", + "status.show_original": "顯示原文", "status.show_thread": "顯示討論串", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "翻譯", + "status.translated_from": "翻譯自 {lang}", "status.uncached_media_warning": "無法使用", "status.unmute_conversation": "解除此對話的靜音", "status.unpin": "從個人檔案頁面解除釘選", diff --git a/config/locales/ca.yml b/config/locales/ca.yml index a03e37cc674..43d77f636d3 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -1754,7 +1754,7 @@ ca: details: 'Aquí estan els detalls del inici de sessió:' explanation: Hem detectat un inici de sessió del teu compte des d'una nova adreça IP. further_actions_html: Si no has estat tu, recomanem que tu %{action} immediatament i activis l'autenticació de dos-factors per a mantenir el teu compte segur. - subject: El teu compte ha estat accedit des d'una nova adreça IP + subject: S'ha accedit al teu compte des d'una adreça IP nova title: Un nou inici de sessió warning: appeal: Envia una apel·lació diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index 0239304b100..e8bddf3321c 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -253,6 +253,7 @@ zh-CN: events: 已启用事件 url: 端点网址 'no': 否 + not_recommended: 不推荐 recommended: 推荐 required: mark: "*" diff --git a/config/locales/uk.yml b/config/locales/uk.yml index d423850c34e..58abba1bd53 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -498,6 +498,7 @@ uk: resolve: Розв'язати домен title: Нове блокування поштового домену no_email_domain_block_selected: Жодні налаштування блокування доменів електронної пошти не було змінено, оскільки жоден з них не було обрано + resolved_dns_records_hint_html: Ім'я домену резолвиться в наступні домени MX, які в кінцевому рахунку відповідають за прийняття електронної пошти. Блокування домену MX заблокує реєстрацію з будь-якої e-mail адреси, яка використовує однаковий домен MX, навіть якщо доменне ім'я буде інакше. Будьте обережні, щоб не блокувати великих поштових провайдерів. resolved_through_html: Розв'язано через %{domain} title: Чорний список поштових доменів follow_recommendations: @@ -889,6 +890,7 @@ uk: links: allow: Дозволити посилання allow_provider: Дозволити публікатора + description_html: Це посилання, з яких наразі багаторазово поширюються записи, з яких Ваш сервер бачить пости. Це може допомогти вашим користувачам дізнатися, що відбувається в світі. Посилання не відображається публічно, поки ви не затверджуєте його публікацію. Ви також можете дозволити або відхилити окремі посилання. disallow: Заборонити посилання disallow_provider: Заборонити публікатора shared_by_over_week: @@ -902,12 +904,14 @@ uk: pending_review: Очікує перевірки preview_card_providers: allowed: Посилання цього публікатора можуть бути популярними + description_html: Це домени, з яких часто передаються посилання на вашому сервері. Посилання не будуть публічно приходити, якщо домен посилання не буде затверджено. Ваше затвердження (або відхилення) поширюється на піддомени. rejected: Посилання цього публікатора можуть не будуть популярними title: Публікатори rejected: Відхилено statuses: allow: Дозволити оприлюднення allow_account: Дозволити автора + description_html: Це дописи, про які ваш сервер знає як такі, що в даний час є спільні і навіть ті, які зараз є дуже популярними. Це може допомогти вашим новим та старим користувачам, щоб знайти більше людей для слідування. Жоден запис не відображається публічно, поки ви не затверджуєте автора, і автор дозволяє іншим користувачам підписатися на це. Ви також можете дозволити або відхилити окремі повідомлення. disallow: Заборонити допис disallow_account: Заборонити автора not_discoverable: Автор не вирішив бути видимим diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index e3eacca16e0..ceffecd2762 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -234,6 +234,7 @@ zh-CN: confirm_user: 确认用户 create_account_warning: 创建警告 create_announcement: 创建公告 + create_canonical_email_block: 新增 E-mail 屏蔽 create_custom_emoji: 创建自定义表情符号 create_domain_allow: 允许新域名 create_domain_block: 封禁新域名 @@ -243,6 +244,7 @@ zh-CN: create_user_role: 创建角色 demote_user: 给用户降职 destroy_announcement: 删除公告 + destroy_canonical_email_block: 删除 E-mail 封禁 destroy_custom_emoji: 删除自定义表情符号 destroy_domain_allow: 解除域名允许 destroy_domain_block: 解除域名封禁 @@ -278,6 +280,7 @@ zh-CN: update_announcement: 更新公告 update_custom_emoji: 更新自定义表情符号 update_domain_block: 更新域名屏蔽 + update_ip_block: 编辑 IP 封禁规则 update_status: 更新嘟文 update_user_role: 更新角色 actions: @@ -289,6 +292,7 @@ zh-CN: confirm_user_html: "%{name} 确认了用户 %{target} 的电子邮件地址" create_account_warning_html: "%{name} 向 %{target} 发送了警告" create_announcement_html: "%{name} 创建了新公告 %{target}" + create_canonical_email_block_html: "%{name} 屏蔽了 hash 为 %{target} 的电子邮箱" create_custom_emoji_html: "%{name} 添加了新的自定义表情 %{target}" create_domain_allow_html: "%{name} 允许了和域名 %{target} 的跨站交互" create_domain_block_html: "%{name} 屏蔽了域名 %{target}" @@ -298,6 +302,7 @@ zh-CN: create_user_role_html: "%{name} 创建了 %{target} 角色" demote_user_html: "%{name} 对用户 %{target} 进行了降任操作" destroy_announcement_html: "%{name} 删除了公告 %{target}" + destroy_canonical_email_block_html: "%{name} 解除屏蔽了 hash 为 %{target} 的电子邮箱" destroy_custom_emoji_html: "%{name} 删除了自定义表情 %{target}" destroy_domain_allow_html: "%{name} 拒绝了和 %{target} 跨站交互" destroy_domain_block_html: "%{name} 解除了对域名 %{target} 的屏蔽" @@ -333,6 +338,7 @@ zh-CN: update_announcement_html: "%{name} 更新了公告 %{target}" update_custom_emoji_html: "%{name} 更新了自定义表情 %{target}" update_domain_block_html: "%{name} 更新了对 %{target} 的域名屏蔽" + update_ip_block_html: "%{name} 修改了对 IP %{target} 的规则" update_status_html: "%{name} 刷新了 %{target} 的嘟文" update_user_role_html: "%{name} 更改了 %{target} 角色" empty: 没有找到日志 @@ -786,6 +792,7 @@ zh-CN: title: 时间轴预览 title: 网站设置 trendable_by_default: + desc_html: 特定的热门内容仍可以被明确地禁止 title: 允许在未审查的情况下将话题置为热门 trends: desc_html: 公开显示先前已通过审核的当前热门话题 From 1a5150e9c364635b989cd0983dac259f94dbbea9 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 29 Sep 2022 01:15:09 +0200 Subject: [PATCH 334/646] Fix content retention policy settings not accepting a blank value (#19248) --- app/models/form/admin_settings.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index 3a71509162c..1e606127762 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -67,7 +67,7 @@ class Form::AdminSettings validates :bootstrap_timeline_accounts, existing_username: { multiple: true } validates :show_domain_blocks, inclusion: { in: %w(disabled users all) } validates :show_domain_blocks_rationale, inclusion: { in: %w(disabled users all) } - validates :media_cache_retention_period, :content_cache_retention_period, :backups_retention_period, numericality: { only_integer: true } + validates :media_cache_retention_period, :content_cache_retention_period, :backups_retention_period, numericality: { only_integer: true }, allow_blank: true def initialize(_attributes = {}) super From 43b5d5e38d2b8ad8f1d1ad0911c3c1718159c912 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 29 Sep 2022 04:39:33 +0200 Subject: [PATCH 335/646] Add logged-out access to the web UI (#18961) --- app/controllers/home_controller.rb | 18 ++-- app/javascript/mastodon/actions/accounts.js | 6 +- app/javascript/mastodon/actions/markers.js | 10 ++- app/javascript/mastodon/components/logo.js | 4 +- .../mastodon/containers/mastodon.js | 2 +- .../features/account/components/header.js | 30 +++++-- .../features/community_timeline/index.js | 6 ++ .../mastodon/features/directory/index.js | 6 ++ .../mastodon/features/explore/index.js | 6 ++ .../mastodon/features/explore/links.js | 11 +++ .../mastodon/features/explore/results.js | 18 +++- .../mastodon/features/explore/suggestions.js | 11 +++ .../mastodon/features/explore/tags.js | 11 +++ .../features/hashtag_timeline/index.js | 18 +++- .../features/public_timeline/index.js | 6 ++ .../mastodon/features/status/index.js | 24 +++++- .../features/ui/components/columns_area.js | 4 +- .../features/ui/components/compose_panel.js | 22 ++++- .../features/ui/components/document_title.js | 41 --------- .../features/ui/components/link_footer.js | 46 +++++++--- .../ui/components/navigation_panel.js | 83 ++++++++++++++----- .../features/ui/components/sign_in_banner.js | 11 +++ app/javascript/mastodon/features/ui/index.js | 43 ++++++++-- app/javascript/mastodon/initial_state.js | 2 + app/javascript/styles/mastodon/_mixins.scss | 1 + .../styles/mastodon/components.scss | 56 ++++++++++++- app/lib/permalink_redirector.rb | 4 - app/serializers/initial_state_serializer.rb | 11 ++- app/views/home/index.html.haml | 12 ++- package.json | 1 + spec/controllers/home_controller_spec.rb | 20 ++--- spec/lib/permalink_redirector_spec.rb | 4 +- yarn.lock | 20 +++++ 33 files changed, 423 insertions(+), 145 deletions(-) delete mode 100644 app/javascript/mastodon/features/ui/components/document_title.js create mode 100644 app/javascript/mastodon/features/ui/components/sign_in_banner.js diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 7e443eb9e74..29478209dbf 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -2,8 +2,8 @@ class HomeController < ApplicationController before_action :redirect_unauthenticated_to_permalinks! - before_action :authenticate_user! before_action :set_referrer_policy_header + before_action :set_instance_presenter def index @body_classes = 'app-body' @@ -14,20 +14,16 @@ class HomeController < ApplicationController def redirect_unauthenticated_to_permalinks! return if user_signed_in? - redirect_to(PermalinkRedirector.new(request.path).redirect_path || default_redirect_path) - end + redirect_path = PermalinkRedirector.new(request.path).redirect_path - def default_redirect_path - if request.path.start_with?('/web') || whitelist_mode? - new_user_session_path - elsif single_user_mode? - short_account_path(Account.local.without_suspended.where('id > 0').first) - else - about_path - end + redirect_to(redirect_path) if redirect_path.present? end def set_referrer_policy_header response.headers['Referrer-Policy'] = 'origin' end + + def set_instance_presenter + @instance_presenter = InstancePresenter.new + end end diff --git a/app/javascript/mastodon/actions/accounts.js b/app/javascript/mastodon/actions/accounts.js index eedf61dc99e..f61f06e408f 100644 --- a/app/javascript/mastodon/actions/accounts.js +++ b/app/javascript/mastodon/actions/accounts.js @@ -536,10 +536,12 @@ export function expandFollowingFail(id, error) { export function fetchRelationships(accountIds) { return (dispatch, getState) => { - const loadedRelationships = getState().get('relationships'); + const state = getState(); + const loadedRelationships = state.get('relationships'); const newAccountIds = accountIds.filter(id => loadedRelationships.get(id, null) === null); + const signedIn = !!state.getIn(['meta', 'me']); - if (newAccountIds.length === 0) { + if (!signedIn || newAccountIds.length === 0) { return; } diff --git a/app/javascript/mastodon/actions/markers.js b/app/javascript/mastodon/actions/markers.js index 16a3df8f638..b7f406cb86b 100644 --- a/app/javascript/mastodon/actions/markers.js +++ b/app/javascript/mastodon/actions/markers.js @@ -1,6 +1,7 @@ import api from '../api'; import { debounce } from 'lodash'; import compareId from '../compare_id'; +import { List as ImmutableList } from 'immutable'; export const MARKERS_FETCH_REQUEST = 'MARKERS_FETCH_REQUEST'; export const MARKERS_FETCH_SUCCESS = 'MARKERS_FETCH_SUCCESS'; @@ -11,7 +12,7 @@ export const synchronouslySubmitMarkers = () => (dispatch, getState) => { const accessToken = getState().getIn(['meta', 'access_token'], ''); const params = _buildParams(getState()); - if (Object.keys(params).length === 0) { + if (Object.keys(params).length === 0 || accessToken === '') { return; } @@ -63,7 +64,7 @@ export const synchronouslySubmitMarkers = () => (dispatch, getState) => { const _buildParams = (state) => { const params = {}; - const lastHomeId = state.getIn(['timelines', 'home', 'items']).find(item => item !== null); + const lastHomeId = state.getIn(['timelines', 'home', 'items'], ImmutableList()).find(item => item !== null); const lastNotificationId = state.getIn(['notifications', 'lastReadId']); if (lastHomeId && compareId(lastHomeId, state.getIn(['markers', 'home'])) > 0) { @@ -82,9 +83,10 @@ const _buildParams = (state) => { }; const debouncedSubmitMarkers = debounce((dispatch, getState) => { - const params = _buildParams(getState()); + const accessToken = getState().getIn(['meta', 'access_token'], ''); + const params = _buildParams(getState()); - if (Object.keys(params).length === 0) { + if (Object.keys(params).length === 0 || accessToken === '') { return; } diff --git a/app/javascript/mastodon/components/logo.js b/app/javascript/mastodon/components/logo.js index d1c7f08a91d..3570b3644b7 100644 --- a/app/javascript/mastodon/components/logo.js +++ b/app/javascript/mastodon/components/logo.js @@ -1,8 +1,8 @@ import React from 'react'; const Logo = () => ( - - + + ); diff --git a/app/javascript/mastodon/containers/mastodon.js b/app/javascript/mastodon/containers/mastodon.js index f4bef46863a..08241522cf6 100644 --- a/app/javascript/mastodon/containers/mastodon.js +++ b/app/javascript/mastodon/containers/mastodon.js @@ -26,7 +26,7 @@ const createIdentityContext = state => ({ signedIn: !!state.meta.me, accountId: state.meta.me, accessToken: state.meta.access_token, - permissions: state.role.permissions, + permissions: state.role ? state.role.permissions : 0, }); export default class Mastodon extends React.PureComponent { diff --git a/app/javascript/mastodon/features/account/components/header.js b/app/javascript/mastodon/features/account/components/header.js index 8f2753c35ef..e407a0d55c6 100644 --- a/app/javascript/mastodon/features/account/components/header.js +++ b/app/javascript/mastodon/features/account/components/header.js @@ -4,7 +4,7 @@ import PropTypes from 'prop-types'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import Button from 'mastodon/components/button'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { autoPlayGif, me } from 'mastodon/initial_state'; +import { autoPlayGif, me, title, domain } from 'mastodon/initial_state'; import classNames from 'classnames'; import Icon from 'mastodon/components/icon'; import IconButton from 'mastodon/components/icon_button'; @@ -15,6 +15,7 @@ import { NavLink } from 'react-router-dom'; import DropdownMenuContainer from 'mastodon/containers/dropdown_menu_container'; import AccountNoteContainer from '../containers/account_note_container'; import { PERMISSION_MANAGE_USERS } from 'mastodon/permissions'; +import { Helmet } from 'react-helmet'; const messages = defineMessages({ unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' }, @@ -54,6 +55,14 @@ const messages = defineMessages({ languages: { id: 'account.languages', defaultMessage: 'Change subscribed languages' }, }); +const titleFromAccount = account => { + const displayName = account.get('display_name'); + const acct = account.get('acct') === account.get('username') ? `${account.get('username')}@${domain}` : account.get('acct'); + const prefix = displayName.trim().length === 0 ? account.get('username') : displayName; + + return `${prefix} (@${acct})`; +}; + const dateFormatOptions = { month: 'short', day: 'numeric', @@ -132,6 +141,7 @@ class Header extends ImmutablePureComponent { render () { const { account, hidden, intl, domain } = this.props; + const { signedIn } = this.context.identity; if (!account) { return null; @@ -162,12 +172,12 @@ class Header extends ImmutablePureComponent { } if (me !== account.get('id')) { - if (!account.get('relationship')) { // Wait until the relationship is loaded + if (signedIn && !account.get('relationship')) { // Wait until the relationship is loaded actionBtn = ''; } else if (account.getIn(['relationship', 'requested'])) { actionBtn = ; } else if (!account.getIn(['relationship', 'blocking'])) { - actionBtn = ; + actionBtn = ; } else if (account.getIn(['relationship', 'blocking'])) { actionBtn = ; } @@ -183,7 +193,7 @@ class Header extends ImmutablePureComponent { lockedIcon = ; } - if (account.get('id') !== me) { + if (signedIn && account.get('id') !== me) { menu.push({ text: intl.formatMessage(messages.mention, { name: account.get('username') }), action: this.props.onMention }); menu.push({ text: intl.formatMessage(messages.direct, { name: account.get('username') }), action: this.props.onDirect }); menu.push(null); @@ -206,7 +216,7 @@ class Header extends ImmutablePureComponent { menu.push({ text: intl.formatMessage(messages.mutes), to: '/mutes' }); menu.push({ text: intl.formatMessage(messages.blocks), to: '/blocks' }); menu.push({ text: intl.formatMessage(messages.domain_blocks), to: '/domain_blocks' }); - } else { + } else if (signedIn) { if (account.getIn(['relationship', 'following'])) { if (!account.getIn(['relationship', 'muting'])) { if (account.getIn(['relationship', 'showing_reblogs'])) { @@ -239,7 +249,7 @@ class Header extends ImmutablePureComponent { menu.push({ text: intl.formatMessage(messages.report, { name: account.get('username') }), action: this.props.onReport }); } - if (account.get('acct') !== account.get('username')) { + if (signedIn && account.get('acct') !== account.get('username')) { const domain = account.get('acct').split('@')[1]; menu.push(null); @@ -298,7 +308,7 @@ class Header extends ImmutablePureComponent { )} - +
    )}
    @@ -327,7 +337,7 @@ class Header extends ImmutablePureComponent {
    )} - {account.get('id') !== me && } + {(account.get('id') !== me && signedIn) && } {account.get('note').length > 0 && account.get('note') !== '

    ' &&
    } @@ -359,6 +369,10 @@ class Header extends ImmutablePureComponent {
    )}
    + + + {titleFromAccount(account)} - {title} +
    ); } diff --git a/app/javascript/mastodon/features/community_timeline/index.js b/app/javascript/mastodon/features/community_timeline/index.js index 30f77604867..f9d50e64cec 100644 --- a/app/javascript/mastodon/features/community_timeline/index.js +++ b/app/javascript/mastodon/features/community_timeline/index.js @@ -9,6 +9,8 @@ import { expandCommunityTimeline } from '../../actions/timelines'; import { addColumn, removeColumn, moveColumn } from '../../actions/columns'; import ColumnSettingsContainer from './containers/column_settings_container'; import { connectCommunityStream } from '../../actions/streaming'; +import { Helmet } from 'react-helmet'; +import { title } from 'mastodon/initial_state'; const messages = defineMessages({ title: { id: 'column.community', defaultMessage: 'Local timeline' }, @@ -128,6 +130,10 @@ class CommunityTimeline extends React.PureComponent { emptyMessage={} bindToDocument={!multiColumn} /> + + + {intl.formatMessage(messages.title)} - {title} + ); } diff --git a/app/javascript/mastodon/features/directory/index.js b/app/javascript/mastodon/features/directory/index.js index 94d7d1a9c54..36f46c510e0 100644 --- a/app/javascript/mastodon/features/directory/index.js +++ b/app/javascript/mastodon/features/directory/index.js @@ -13,6 +13,8 @@ import RadioButton from 'mastodon/components/radio_button'; import LoadMore from 'mastodon/components/load_more'; import ScrollContainer from 'mastodon/containers/scroll_container'; import LoadingIndicator from 'mastodon/components/loading_indicator'; +import { title } from 'mastodon/initial_state'; +import { Helmet } from 'react-helmet'; const messages = defineMessages({ title: { id: 'column.directory', defaultMessage: 'Browse profiles' }, @@ -165,6 +167,10 @@ class Directory extends React.PureComponent { /> {multiColumn && !pinned ? {scrollableArea} : scrollableArea} + + + {intl.formatMessage(messages.title)} - {title} + ); } diff --git a/app/javascript/mastodon/features/explore/index.js b/app/javascript/mastodon/features/explore/index.js index 8082f2d99cb..e1d1eb563f2 100644 --- a/app/javascript/mastodon/features/explore/index.js +++ b/app/javascript/mastodon/features/explore/index.js @@ -11,6 +11,8 @@ import Statuses from './statuses'; import Suggestions from './suggestions'; import Search from 'mastodon/features/compose/containers/search_container'; import SearchResults from './results'; +import { Helmet } from 'react-helmet'; +import { title } from 'mastodon/initial_state'; const messages = defineMessages({ title: { id: 'explore.title', defaultMessage: 'Explore' }, @@ -81,6 +83,10 @@ class Explore extends React.PureComponent { + + + {intl.formatMessage(messages.title)} - {title} + )}
    diff --git a/app/javascript/mastodon/features/explore/links.js b/app/javascript/mastodon/features/explore/links.js index 6649fb6e471..d3aaa9cddf7 100644 --- a/app/javascript/mastodon/features/explore/links.js +++ b/app/javascript/mastodon/features/explore/links.js @@ -5,6 +5,7 @@ import Story from './components/story'; import LoadingIndicator from 'mastodon/components/loading_indicator'; import { connect } from 'react-redux'; import { fetchTrendingLinks } from 'mastodon/actions/trends'; +import { FormattedMessage } from 'react-intl'; const mapStateToProps = state => ({ links: state.getIn(['trends', 'links', 'items']), @@ -28,6 +29,16 @@ class Links extends React.PureComponent { render () { const { isLoading, links } = this.props; + if (!isLoading && links.isEmpty()) { + return ( +
    +
    + +
    +
    + ); + } + return (
    {isLoading ? () : links.map(link => ( diff --git a/app/javascript/mastodon/features/explore/results.js b/app/javascript/mastodon/features/explore/results.js index 1286020f54c..0dc108918d2 100644 --- a/app/javascript/mastodon/features/explore/results.js +++ b/app/javascript/mastodon/features/explore/results.js @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; -import { FormattedMessage } from 'react-intl'; +import { injectIntl, defineMessages, FormattedMessage } from 'react-intl'; import { connect } from 'react-redux'; import { expandSearch } from 'mastodon/actions/search'; import Account from 'mastodon/containers/account_container'; @@ -10,10 +10,17 @@ import { ImmutableHashtag as Hashtag } from 'mastodon/components/hashtag'; import { List as ImmutableList } from 'immutable'; import LoadMore from 'mastodon/components/load_more'; import LoadingIndicator from 'mastodon/components/loading_indicator'; +import { title } from 'mastodon/initial_state'; +import { Helmet } from 'react-helmet'; + +const messages = defineMessages({ + title: { id: 'search_results.title', defaultMessage: 'Search for {q}' }, +}); const mapStateToProps = state => ({ isLoading: state.getIn(['search', 'isLoading']), results: state.getIn(['search', 'results']), + q: state.getIn(['search', 'searchTerm']), }); const appendLoadMore = (id, list, onLoadMore) => { @@ -37,6 +44,7 @@ const renderStatuses = (results, onLoadMore) => appendLoadMore('statuses', resul )), onLoadMore); export default @connect(mapStateToProps) +@injectIntl class Results extends React.PureComponent { static propTypes = { @@ -44,6 +52,8 @@ class Results extends React.PureComponent { isLoading: PropTypes.bool, multiColumn: PropTypes.bool, dispatch: PropTypes.func.isRequired, + q: PropTypes.string, + intl: PropTypes.object, }; state = { @@ -64,7 +74,7 @@ class Results extends React.PureComponent { } render () { - const { isLoading, results } = this.props; + const { intl, isLoading, q, results } = this.props; const { type } = this.state; let filteredResults = ImmutableList(); @@ -106,6 +116,10 @@ class Results extends React.PureComponent {
    {isLoading ? : filteredResults}
    + + + {intl.formatMessage(messages.title, { q })} - {title} + ); } diff --git a/app/javascript/mastodon/features/explore/suggestions.js b/app/javascript/mastodon/features/explore/suggestions.js index 0c6a7ef8a3b..e6ad09974c8 100644 --- a/app/javascript/mastodon/features/explore/suggestions.js +++ b/app/javascript/mastodon/features/explore/suggestions.js @@ -5,6 +5,7 @@ import AccountCard from 'mastodon/features/directory/components/account_card'; import LoadingIndicator from 'mastodon/components/loading_indicator'; import { connect } from 'react-redux'; import { fetchSuggestions } from 'mastodon/actions/suggestions'; +import { FormattedMessage } from 'react-intl'; const mapStateToProps = state => ({ suggestions: state.getIn(['suggestions', 'items']), @@ -28,6 +29,16 @@ class Suggestions extends React.PureComponent { render () { const { isLoading, suggestions } = this.props; + if (!isLoading && suggestions.isEmpty()) { + return ( +
    +
    + +
    +
    + ); + } + return (
    {isLoading ? : suggestions.map(suggestion => ( diff --git a/app/javascript/mastodon/features/explore/tags.js b/app/javascript/mastodon/features/explore/tags.js index c0ad9fc6ec9..6cd3a6fb106 100644 --- a/app/javascript/mastodon/features/explore/tags.js +++ b/app/javascript/mastodon/features/explore/tags.js @@ -5,6 +5,7 @@ import { ImmutableHashtag as Hashtag } from 'mastodon/components/hashtag'; import LoadingIndicator from 'mastodon/components/loading_indicator'; import { connect } from 'react-redux'; import { fetchTrendingHashtags } from 'mastodon/actions/trends'; +import { FormattedMessage } from 'react-intl'; const mapStateToProps = state => ({ hashtags: state.getIn(['trends', 'tags', 'items']), @@ -28,6 +29,16 @@ class Tags extends React.PureComponent { render () { const { isLoading, hashtags } = this.props; + if (!isLoading && hashtags.isEmpty()) { + return ( +
    +
    + +
    +
    + ); + } + return (
    {isLoading ? () : hashtags.map(hashtag => ( diff --git a/app/javascript/mastodon/features/hashtag_timeline/index.js b/app/javascript/mastodon/features/hashtag_timeline/index.js index dc8a6164099..7069e034117 100644 --- a/app/javascript/mastodon/features/hashtag_timeline/index.js +++ b/app/javascript/mastodon/features/hashtag_timeline/index.js @@ -14,6 +14,8 @@ import { isEqual } from 'lodash'; import { fetchHashtag, followHashtag, unfollowHashtag } from 'mastodon/actions/tags'; import Icon from 'mastodon/components/icon'; import classNames from 'classnames'; +import { title } from 'mastodon/initial_state'; +import { Helmet } from 'react-helmet'; const messages = defineMessages({ followHashtag: { id: 'hashtag.follow', defaultMessage: 'Follow hashtag' }, @@ -31,6 +33,10 @@ class HashtagTimeline extends React.PureComponent { disconnects = []; + static contextTypes = { + identity: PropTypes.object, + }; + static propTypes = { params: PropTypes.object.isRequired, columnId: PropTypes.string, @@ -158,6 +164,11 @@ class HashtagTimeline extends React.PureComponent { handleFollow = () => { const { dispatch, params, tag } = this.props; const { id } = params; + const { signedIn } = this.context.identity; + + if (!signedIn) { + return; + } if (tag.get('following')) { dispatch(unfollowHashtag(id)); @@ -170,6 +181,7 @@ class HashtagTimeline extends React.PureComponent { const { hasUnread, columnId, multiColumn, tag, intl } = this.props; const { id, local } = this.props.params; const pinned = !!columnId; + const { signedIn } = this.context.identity; let followButton; @@ -177,7 +189,7 @@ class HashtagTimeline extends React.PureComponent { const following = tag.get('following'); followButton = ( - ); @@ -208,6 +220,10 @@ class HashtagTimeline extends React.PureComponent { emptyMessage={} bindToDocument={!multiColumn} /> + + + {`#${id}`} - {title} + ); } diff --git a/app/javascript/mastodon/features/public_timeline/index.js b/app/javascript/mastodon/features/public_timeline/index.js index b1d5518af55..2f926678c28 100644 --- a/app/javascript/mastodon/features/public_timeline/index.js +++ b/app/javascript/mastodon/features/public_timeline/index.js @@ -9,6 +9,8 @@ import { expandPublicTimeline } from '../../actions/timelines'; import { addColumn, removeColumn, moveColumn } from '../../actions/columns'; import ColumnSettingsContainer from './containers/column_settings_container'; import { connectPublicStream } from '../../actions/streaming'; +import { Helmet } from 'react-helmet'; +import { title } from 'mastodon/initial_state'; const messages = defineMessages({ title: { id: 'column.public', defaultMessage: 'Federated timeline' }, @@ -131,6 +133,10 @@ class PublicTimeline extends React.PureComponent { emptyMessage={} bindToDocument={!multiColumn} /> + + + {intl.formatMessage(messages.title)} - {title} + ); } diff --git a/app/javascript/mastodon/features/status/index.js b/app/javascript/mastodon/features/status/index.js index 5ff7e060ef9..748dc7a9275 100644 --- a/app/javascript/mastodon/features/status/index.js +++ b/app/javascript/mastodon/features/status/index.js @@ -56,10 +56,11 @@ import { openModal } from '../../actions/modal'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { HotKeys } from 'react-hotkeys'; -import { boostModal, deleteModal } from '../../initial_state'; +import { boostModal, deleteModal, title } from '../../initial_state'; import { attachFullscreenListener, detachFullscreenListener, isFullscreen } from '../ui/util/fullscreen'; import { textForScreenReader, defaultMediaVisibility } from '../../components/status'; import Icon from 'mastodon/components/icon'; +import { Helmet } from 'react-helmet'; const messages = defineMessages({ deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' }, @@ -156,6 +157,23 @@ const makeMapStateToProps = () => { return mapStateToProps; }; +const truncate = (str, num) => { + if (str.length > num) { + return str.slice(0, num) + '…'; + } else { + return str; + } +}; + +const titleFromStatus = status => { + const displayName = status.getIn(['account', 'display_name']); + const username = status.getIn(['account', 'username']); + const prefix = displayName.trim().length === 0 ? username : displayName; + const text = status.get('search_index'); + + return `${prefix}: "${truncate(text, 30)}"`; +}; + export default @injectIntl @connect(makeMapStateToProps) class Status extends ImmutablePureComponent { @@ -605,6 +623,10 @@ class Status extends ImmutablePureComponent { {descendants}
    + + + {titleFromStatus(status)} - {title} + ); } diff --git a/app/javascript/mastodon/features/ui/components/columns_area.js b/app/javascript/mastodon/features/ui/components/columns_area.js index 68017a5f1ef..83e10e003a2 100644 --- a/app/javascript/mastodon/features/ui/components/columns_area.js +++ b/app/javascript/mastodon/features/ui/components/columns_area.js @@ -60,6 +60,7 @@ class ColumnsArea extends ImmutablePureComponent { static contextTypes = { router: PropTypes.object.isRequired, + identity: PropTypes.object.isRequired, }; static propTypes = { @@ -212,11 +213,12 @@ class ColumnsArea extends ImmutablePureComponent { render () { const { columns, children, singleColumn, isModalOpen, intl } = this.props; const { shouldAnimate, renderComposePanel } = this.state; + const { signedIn } = this.context.identity; const columnIndex = getIndex(this.context.router.history.location.pathname); if (singleColumn) { - const floatingActionButton = shouldHideFAB(this.context.router.history.location.pathname) ? null : ; + const floatingActionButton = (!signedIn || shouldHideFAB(this.context.router.history.location.pathname)) ? null : ; const content = columnIndex !== -1 ? ( diff --git a/app/javascript/mastodon/features/ui/components/compose_panel.js b/app/javascript/mastodon/features/ui/components/compose_panel.js index 3d0c48c7a96..1c128188fcf 100644 --- a/app/javascript/mastodon/features/ui/components/compose_panel.js +++ b/app/javascript/mastodon/features/ui/components/compose_panel.js @@ -10,6 +10,10 @@ import { changeComposing } from 'mastodon/actions/compose'; export default @connect() class ComposePanel extends React.PureComponent { + static contextTypes = { + identity: PropTypes.object.isRequired, + }; + static propTypes = { dispatch: PropTypes.func.isRequired, }; @@ -23,11 +27,25 @@ class ComposePanel extends React.PureComponent { } render() { + const { signedIn } = this.context.identity; + return (
    - - + + {!signedIn && ( + +
    + + )} + + {signedIn && ( + + + + + )} +
    ); diff --git a/app/javascript/mastodon/features/ui/components/document_title.js b/app/javascript/mastodon/features/ui/components/document_title.js deleted file mode 100644 index cd081b20c7e..00000000000 --- a/app/javascript/mastodon/features/ui/components/document_title.js +++ /dev/null @@ -1,41 +0,0 @@ -import { PureComponent } from 'react'; -import { connect } from 'react-redux'; -import PropTypes from 'prop-types'; -import { title } from 'mastodon/initial_state'; - -const mapStateToProps = state => ({ - unread: state.getIn(['missed_updates', 'unread']), -}); - -export default @connect(mapStateToProps) -class DocumentTitle extends PureComponent { - - static propTypes = { - unread: PropTypes.number.isRequired, - }; - - componentDidMount () { - this._sideEffects(); - } - - componentDidUpdate() { - this._sideEffects(); - } - - _sideEffects () { - const { unread } = this.props; - - if (unread > 99) { - document.title = `(*) ${title}`; - } else if (unread > 0) { - document.title = `(${unread}) ${title}`; - } else { - document.title = title; - } - } - - render () { - return null; - } - -} diff --git a/app/javascript/mastodon/features/ui/components/link_footer.js b/app/javascript/mastodon/features/ui/components/link_footer.js index bbb9b122a31..95cd6cf8ea2 100644 --- a/app/javascript/mastodon/features/ui/components/link_footer.js +++ b/app/javascript/mastodon/features/ui/components/link_footer.js @@ -49,20 +49,46 @@ class LinkFooter extends React.PureComponent { render () { const { withHotkeys } = this.props; + const { signedIn, permissions } = this.context.identity; + const items = []; + + if ((permissions & PERMISSION_INVITE_USERS) === PERMISSION_INVITE_USERS) { + items.push(); + } + + if (withHotkeys) { + items.push(); + } + + if (signedIn) { + items.push(); + } + + if (!limitedFederationMode) { + items.push(); + } + + if (profileDirectory) { + items.push(); + } + + items.push(); + items.push(); + + if (signedIn) { + items.push(); + } + + items.push(); + + if (signedIn) { + items.push(); + } return (
      - {((this.context.identity.permissions & PERMISSION_INVITE_USERS) === PERMISSION_INVITE_USERS) &&
    • ·
    • } - {withHotkeys &&
    • ·
    • } -
    • ·
    • - {!limitedFederationMode &&
    • ·
    • } - {profileDirectory &&
    • ·
    • } -
    • ·
    • -
    • ·
    • -
    • ·
    • -
    • ·
    • -
    • +
    • {items.reduce((prev, curr) => [prev, ' · ', curr])}

    diff --git a/app/javascript/mastodon/features/ui/components/navigation_panel.js b/app/javascript/mastodon/features/ui/components/navigation_panel.js index fe4ed5d7721..00ae0476101 100644 --- a/app/javascript/mastodon/features/ui/components/navigation_panel.js +++ b/app/javascript/mastodon/features/ui/components/navigation_panel.js @@ -1,5 +1,6 @@ import React from 'react'; -import { NavLink, withRouter } from 'react-router-dom'; +import PropTypes from 'prop-types'; +import { NavLink, Link } from 'react-router-dom'; import { FormattedMessage } from 'react-intl'; import Icon from 'mastodon/components/icon'; import { showTrends } from 'mastodon/initial_state'; @@ -7,30 +8,68 @@ import NotificationsCounterIcon from './notifications_counter_icon'; import FollowRequestsNavLink from './follow_requests_nav_link'; import ListPanel from './list_panel'; import TrendsContainer from 'mastodon/features/getting_started/containers/trends_container'; +import Logo from 'mastodon/components/logo'; +import SignInBanner from './sign_in_banner'; -const NavigationPanel = () => ( -

    - - - - - - - - - - +export default class NavigationPanel extends React.Component { - + static contextTypes = { + router: PropTypes.object.isRequired, + identity: PropTypes.object.isRequired, + }; -
    + render () { + const { signedIn } = this.context.identity; - - + return ( +
    + - {showTrends &&
    } - {showTrends && } -
    -); +
    -export default withRouter(NavigationPanel); + {signedIn && ( + + + + + + )} + + + + + + {!signedIn && ( + +
    + +
    + )} + + {signedIn && ( + + + + + + + + +
    + + + +
    + )} + + {showTrends && ( + +
    + + + )} +
    + ); + } + +} diff --git a/app/javascript/mastodon/features/ui/components/sign_in_banner.js b/app/javascript/mastodon/features/ui/components/sign_in_banner.js new file mode 100644 index 00000000000..c8403a8adbd --- /dev/null +++ b/app/javascript/mastodon/features/ui/components/sign_in_banner.js @@ -0,0 +1,11 @@ +import React from 'react'; +import { FormattedMessage } from 'react-intl'; + +const SignInBanner = () => ( +
    +

    + +
    +); + +export default SignInBanner; diff --git a/app/javascript/mastodon/features/ui/index.js b/app/javascript/mastodon/features/ui/index.js index 9a901f12a65..5825db1e40f 100644 --- a/app/javascript/mastodon/features/ui/index.js +++ b/app/javascript/mastodon/features/ui/index.js @@ -20,7 +20,6 @@ import { synchronouslySubmitMarkers, submitMarkers, fetchMarkers } from 'mastodo import { WrappedSwitch, WrappedRoute } from './util/react_router_helpers'; import UploadArea from './components/upload_area'; import ColumnsAreaContainer from './containers/columns_area_container'; -import DocumentTitle from './components/document_title'; import PictureInPicture from 'mastodon/features/picture_in_picture'; import { Compose, @@ -53,8 +52,9 @@ import { Explore, FollowRecommendations, } from './util/async-components'; -import { me } from '../../initial_state'; +import { me, title } from '../../initial_state'; import { closeOnboarding, INTRODUCTION_VERSION } from 'mastodon/actions/onboarding'; +import { Helmet } from 'react-helmet'; // Dummy import, to make sure that ends up in the application bundle. // Without this it ends up in ~8 very commonly used bundles. @@ -110,6 +110,10 @@ const keyMap = { class SwitchingColumnsArea extends React.PureComponent { + static contextTypes = { + identity: PropTypes.object, + }; + static propTypes = { children: PropTypes.node, location: PropTypes.object, @@ -145,12 +149,25 @@ class SwitchingColumnsArea extends React.PureComponent { render () { const { children, mobile } = this.props; - const redirect = mobile ? : ; + const { signedIn } = this.context.identity; + + let redirect; + + if (signedIn) { + if (mobile) { + redirect = ; + } else { + redirect = ; + } + } else { + redirect = ; + } return ( {redirect} + @@ -208,6 +225,7 @@ class UI extends React.PureComponent { static contextTypes = { router: PropTypes.object.isRequired, + identity: PropTypes.object.isRequired, }; static propTypes = { @@ -343,6 +361,8 @@ class UI extends React.PureComponent { } componentDidMount () { + const { signedIn } = this.context.identity; + window.addEventListener('focus', this.handleWindowFocus, false); window.addEventListener('blur', this.handleWindowBlur, false); window.addEventListener('beforeunload', this.handleBeforeUnload, false); @@ -359,16 +379,18 @@ class UI extends React.PureComponent { } // On first launch, redirect to the follow recommendations page - if (this.props.firstLaunch) { + if (signedIn && this.props.firstLaunch) { this.context.router.history.replace('/start'); this.props.dispatch(closeOnboarding()); } - this.props.dispatch(fetchMarkers()); - this.props.dispatch(expandHomeTimeline()); - this.props.dispatch(expandNotifications()); + if (signedIn) { + this.props.dispatch(fetchMarkers()); + this.props.dispatch(expandHomeTimeline()); + this.props.dispatch(expandNotifications()); - setTimeout(() => this.props.dispatch(fetchRules()), 3000); + setTimeout(() => this.props.dispatch(fetchRules()), 3000); + } this.hotkeys.__mousetrap__.stopCallback = (e, element) => { return ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName); @@ -546,7 +568,10 @@ class UI extends React.PureComponent { - + + + {title} +
    ); diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js index 7099752702f..9cc75b6cbf2 100644 --- a/app/javascript/mastodon/initial_state.js +++ b/app/javascript/mastodon/initial_state.js @@ -3,6 +3,7 @@ const initialState = element && JSON.parse(element.textContent); const getMeta = (prop) => initialState && initialState.meta && initialState.meta[prop]; +export const domain = getMeta('domain'); export const reduceMotion = getMeta('reduce_motion'); export const autoPlayGif = getMeta('auto_play_gif'); export const displayMedia = getMeta('display_media'); @@ -26,5 +27,6 @@ export const title = getMeta('title'); export const cropImages = getMeta('crop_images'); export const disableSwiping = getMeta('disable_swiping'); export const languages = initialState && initialState.languages; +export const server = initialState && initialState.server; export default initialState; diff --git a/app/javascript/styles/mastodon/_mixins.scss b/app/javascript/styles/mastodon/_mixins.scss index 68cad0fde31..dcfab6bd015 100644 --- a/app/javascript/styles/mastodon/_mixins.scss +++ b/app/javascript/styles/mastodon/_mixins.scss @@ -20,6 +20,7 @@ font-family: inherit; background: $ui-base-color; color: $darker-text-color; + border-radius: 4px; font-size: 14px; margin: 0; } diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index f5377a85896..1f1a5a5ca2f 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -126,6 +126,7 @@ &:hover { border-color: lighten($ui-primary-color, 4%); color: lighten($darker-text-color, 4%); + text-decoration: none; } &:disabled { @@ -700,6 +701,15 @@ transition: height 0.4s ease, opacity 0.4s ease; } +.sign-in-banner { + padding: 10px; + + p { + color: $darker-text-color; + margin-bottom: 20px; + } +} + .emojione { font-size: inherit; vertical-align: middle; @@ -2214,6 +2224,7 @@ a.account__display-name { > .scrollable { background: $ui-base-color; + border-radius: 0 0 4px 4px; } } @@ -2660,6 +2671,26 @@ a.account__display-name { height: calc(100% - 10px); overflow-y: hidden; + .hero-widget { + box-shadow: none; + + &__text, + &__img, + &__img img { + border-radius: 0; + } + + &__text { + padding: 15px; + color: $secondary-text-color; + + strong { + font-weight: 700; + color: $primary-text-color; + } + } + } + .navigation-bar { padding-top: 20px; padding-bottom: 20px; @@ -2667,10 +2698,6 @@ a.account__display-name { min-height: 20px; } - .flex-spacer { - background: transparent; - } - .compose-form { flex: 1; overflow-y: hidden; @@ -2709,6 +2736,14 @@ a.account__display-name { flex: 0 0 auto; } + .logo { + height: 30px; + width: auto; + } +} + +.navigation-panel, +.compose-panel { hr { flex: 0 0 auto; border: 0; @@ -2836,6 +2871,7 @@ a.account__display-name { box-sizing: border-box; width: 100%; background: lighten($ui-base-color, 4%); + border-radius: 4px 4px 0 0; color: $highlight-text-color; cursor: pointer; flex: 0 0 auto; @@ -3031,6 +3067,17 @@ a.account__display-name { color: $highlight-text-color; } } + + &--logo { + background: transparent; + padding: 10px; + + &:hover, + &:focus, + &:active { + background: transparent; + } + } } .column-link__icon { @@ -3551,6 +3598,7 @@ a.status-card.compact:hover { display: flex; font-size: 16px; background: lighten($ui-base-color, 4%); + border-radius: 4px 4px 0 0; flex: 0 0 auto; cursor: pointer; position: relative; diff --git a/app/lib/permalink_redirector.rb b/app/lib/permalink_redirector.rb index e48bce06099..6d15f39638b 100644 --- a/app/lib/permalink_redirector.rb +++ b/app/lib/permalink_redirector.rb @@ -17,10 +17,6 @@ class PermalinkRedirector find_status_url_by_id(path_segments[2]) elsif path_segments[1] == 'accounts' && path_segments[2] =~ /\d/ find_account_url_by_id(path_segments[2]) - elsif path_segments[1] == 'timelines' && path_segments[2] == 'tag' && path_segments[3].present? - find_tag_url_by_name(path_segments[3]) - elsif path_segments[1] == 'tags' && path_segments[2].present? - find_tag_url_by_name(path_segments[2]) end end end diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb index 5eda877579f..df076ffc622 100644 --- a/app/serializers/initial_state_serializer.rb +++ b/app/serializers/initial_state_serializer.rb @@ -1,9 +1,11 @@ # frozen_string_literal: true class InitialStateSerializer < ActiveModel::Serializer + include RoutingHelper + attributes :meta, :compose, :accounts, :media_attachments, :settings, - :languages + :languages, :server has_one :push_subscription, serializer: REST::WebPushSubscriptionSerializer has_one :role, serializer: REST::RoleSerializer @@ -82,6 +84,13 @@ class InitialStateSerializer < ActiveModel::Serializer LanguagesHelper::SUPPORTED_LOCALES.map { |(key, value)| [key, value[0], value[1]] } end + def server + { + hero: instance_presenter.hero&.file&.url || instance_presenter.thumbnail&.file&.url || asset_pack_path('media/images/preview.png'), + description: instance_presenter.site_short_description.presence || I18n.t('about.about_mastodon_html'), + } + end + private def instance_presenter diff --git a/app/views/home/index.html.haml b/app/views/home/index.html.haml index 3d6283fba1e..19c5191d8d1 100644 --- a/app/views/home/index.html.haml +++ b/app/views/home/index.html.haml @@ -1,10 +1,14 @@ - content_for :header_tags do - = preload_pack_asset 'features/getting_started.js', crossorigin: 'anonymous' - = preload_pack_asset 'features/compose.js', crossorigin: 'anonymous' - = preload_pack_asset 'features/home_timeline.js', crossorigin: 'anonymous' - = preload_pack_asset 'features/notifications.js', crossorigin: 'anonymous' + - if user_signed_in? + = preload_pack_asset 'features/getting_started.js', crossorigin: 'anonymous' + = preload_pack_asset 'features/compose.js', crossorigin: 'anonymous' + = preload_pack_asset 'features/home_timeline.js', crossorigin: 'anonymous' + = preload_pack_asset 'features/notifications.js', crossorigin: 'anonymous' + + = render partial: 'shared/og' %meta{name: 'applicationServerKey', content: Rails.configuration.x.vapid_public_key} + = render_initial_state = javascript_pack_tag 'application', crossorigin: 'anonymous' diff --git a/package.json b/package.json index ca17860383c..bef027d2664 100644 --- a/package.json +++ b/package.json @@ -92,6 +92,7 @@ "punycode": "^2.1.0", "react": "^16.14.0", "react-dom": "^16.14.0", + "react-helmet": "^6.1.0", "react-hotkeys": "^1.1.4", "react-immutable-proptypes": "^2.2.0", "react-immutable-pure-component": "^2.2.2", diff --git a/spec/controllers/home_controller_spec.rb b/spec/controllers/home_controller_spec.rb index 70c5c42c5c9..d845ae01d7d 100644 --- a/spec/controllers/home_controller_spec.rb +++ b/spec/controllers/home_controller_spec.rb @@ -7,27 +7,21 @@ RSpec.describe HomeController, type: :controller do subject { get :index } context 'when not signed in' do - context 'when requested path is tag timeline' do - it 'redirects to the tag\'s permalink' do - @request.path = '/web/timelines/tag/name' - is_expected.to redirect_to '/tags/name' - end - end - - it 'redirects to about page' do + it 'returns http success' do @request.path = '/' - is_expected.to redirect_to(about_path) + is_expected.to have_http_status(:success) end end context 'when signed in' do let(:user) { Fabricate(:user) } - before { sign_in(user) } + before do + sign_in(user) + end - it 'assigns @body_classes' do - subject - expect(assigns(:body_classes)).to eq 'app-body' + it 'returns http success' do + is_expected.to have_http_status(:success) end end end diff --git a/spec/lib/permalink_redirector_spec.rb b/spec/lib/permalink_redirector_spec.rb index b916b33b22c..abda57da497 100644 --- a/spec/lib/permalink_redirector_spec.rb +++ b/spec/lib/permalink_redirector_spec.rb @@ -21,7 +21,7 @@ describe PermalinkRedirector do it 'returns path for legacy tag links' do redirector = described_class.new('web/timelines/tag/hoge') - expect(redirector.redirect_path).to eq '/tags/hoge' + expect(redirector.redirect_path).to be_nil end it 'returns path for pretty account links' do @@ -36,7 +36,7 @@ describe PermalinkRedirector do it 'returns path for pretty tag links' do redirector = described_class.new('web/tags/hoge') - expect(redirector.redirect_path).to eq '/tags/hoge' + expect(redirector.redirect_path).to be_nil end end end diff --git a/yarn.lock b/yarn.lock index 90302b284a0..3628dd56084 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9194,6 +9194,21 @@ react-event-listener@^0.6.0: prop-types "^15.6.0" warning "^4.0.1" +react-fast-compare@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" + integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== + +react-helmet@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-6.1.0.tgz#a750d5165cb13cf213e44747502652e794468726" + integrity sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw== + dependencies: + object-assign "^4.1.1" + prop-types "^15.7.2" + react-fast-compare "^3.1.1" + react-side-effect "^2.1.0" + react-hotkeys@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/react-hotkeys/-/react-hotkeys-1.1.4.tgz#a0712aa2e0c03a759fd7885808598497a4dace72" @@ -9368,6 +9383,11 @@ react-select@^5.4.0: prop-types "^15.6.0" react-transition-group "^4.3.0" +react-side-effect@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.2.tgz#dc6345b9e8f9906dc2eeb68700b615e0b4fe752a" + integrity sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw== + react-sparklines@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/react-sparklines/-/react-sparklines-1.7.0.tgz#9b1d97e8c8610095eeb2ad658d2e1fcf91f91a60" From e623c302d5d4dfc05689eb8fb8e051e30fc38ec8 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 29 Sep 2022 06:21:51 +0200 Subject: [PATCH 336/646] Add sign-up button to logged-out web UI (#19250) --- .../mastodon/components/column_header.js | 3 +- app/javascript/mastodon/components/poll.js | 6 +++- .../mastodon/components/status_content.js | 3 +- .../features/ui/components/link_footer.js | 2 +- .../features/ui/components/sign_in_banner.js | 2 ++ app/javascript/mastodon/initial_state.js | 1 + .../styles/mastodon/components.scss | 29 +++++++++++++++++++ app/serializers/initial_state_serializer.rb | 1 + 8 files changed, 43 insertions(+), 4 deletions(-) diff --git a/app/javascript/mastodon/components/column_header.js b/app/javascript/mastodon/components/column_header.js index cbbc490a83b..5b2e166276e 100644 --- a/app/javascript/mastodon/components/column_header.js +++ b/app/javascript/mastodon/components/column_header.js @@ -17,6 +17,7 @@ class ColumnHeader extends React.PureComponent { static contextTypes = { router: PropTypes.object, + identity: PropTypes.object, }; static propTypes = { @@ -145,7 +146,7 @@ class ColumnHeader extends React.PureComponent { collapsedContent.push(moveButtons); } - if (children || (multiColumn && this.props.onPin)) { + if (this.context.identity.signedIn && (children || (multiColumn && this.props.onPin))) { collapseButton = (
    - {loading ? ( - + <> +
    + +
    + + ) : ( Date: Wed, 20 Jul 2022 20:57:25 +0900 Subject: [PATCH 123/646] Bump ws from 8.8.0 to 8.8.1 (#18836) Bumps [ws](https://github.com/websockets/ws) from 8.8.0 to 8.8.1. - [Release notes](https://github.com/websockets/ws/releases) - [Commits](https://github.com/websockets/ws/compare/8.8.0...8.8.1) --- updated-dependencies: - dependency-name: ws dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index b842800c975..9b933a59da4 100644 --- a/package.json +++ b/package.json @@ -136,7 +136,7 @@ "webpack-cli": "^3.3.12", "webpack-merge": "^5.8.0", "wicg-inert": "^3.1.2", - "ws": "^8.8.0" + "ws": "^8.8.1" }, "devDependencies": { "@babel/eslint-parser": "^7.18.9", diff --git a/yarn.lock b/yarn.lock index c539879bf41..2168c1230e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11653,10 +11653,10 @@ ws@^7.3.1: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -ws@^8.2.3, ws@^8.8.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.0.tgz#8e71c75e2f6348dbf8d78005107297056cb77769" - integrity sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ== +ws@^8.2.3, ws@^8.8.0, ws@^8.8.1: + version "8.8.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" + integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== xml-name-validator@^4.0.0: version "4.0.0" From f8b3e3692932ddfd69bc0a631256ac78411e818a Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 20 Jul 2022 14:21:57 +0200 Subject: [PATCH 124/646] New Crowdin updates (#18810) * New translations en.yml (Esperanto) * New translations en.yml (Esperanto) * New translations en.yml (Chinese Simplified) * New translations en.yml (Esperanto) * New translations en.json (Chinese Simplified) * New translations simple_form.en.yml (Chinese Simplified) * New translations en.yml (Chinese Simplified) * New translations en.json (Chinese Simplified) * New translations simple_form.en.yml (Chinese Simplified) * New translations activerecord.en.yml (Chinese Simplified) * New translations en.json (Thai) * New translations en.json (Thai) * New translations simple_form.en.yml (Thai) * New translations activerecord.en.yml (Thai) * New translations doorkeeper.en.yml (Thai) * New translations en.yml (Thai) * New translations en.yml (Thai) * New translations activerecord.en.yml (Dutch) * New translations activerecord.en.yml (Turkish) * New translations activerecord.en.yml (Polish) * New translations activerecord.en.yml (Portuguese) * New translations activerecord.en.yml (Russian) * New translations activerecord.en.yml (Slovak) * New translations activerecord.en.yml (Slovenian) * New translations activerecord.en.yml (Albanian) * New translations activerecord.en.yml (Serbian (Cyrillic)) * New translations activerecord.en.yml (Swedish) * New translations activerecord.en.yml (Ukrainian) * New translations activerecord.en.yml (Chinese Traditional) * New translations activerecord.en.yml (Vietnamese) * New translations activerecord.en.yml (Galician) * New translations activerecord.en.yml (Icelandic) * New translations activerecord.en.yml (Indonesian) * New translations activerecord.en.yml (Persian) * New translations activerecord.en.yml (Tamil) * New translations activerecord.en.yml (Spanish, Argentina) * New translations activerecord.en.yml (Norwegian) * New translations activerecord.en.yml (Portuguese, Brazilian) * New translations activerecord.en.yml (German) * New translations activerecord.en.yml (Sinhala) * New translations activerecord.en.yml (Romanian) * New translations activerecord.en.yml (French) * New translations activerecord.en.yml (Spanish) * New translations activerecord.en.yml (Afrikaans) * New translations activerecord.en.yml (Arabic) * New translations activerecord.en.yml (Bulgarian) * New translations activerecord.en.yml (Catalan) * New translations activerecord.en.yml (Czech) * New translations activerecord.en.yml (Danish) * New translations activerecord.en.yml (Greek) * New translations activerecord.en.yml (Korean) * New translations activerecord.en.yml (Frisian) * New translations activerecord.en.yml (Basque) * New translations activerecord.en.yml (Finnish) * New translations activerecord.en.yml (Hebrew) * New translations activerecord.en.yml (Hungarian) * New translations activerecord.en.yml (Armenian) * New translations activerecord.en.yml (Italian) * New translations activerecord.en.yml (Japanese) * New translations activerecord.en.yml (Georgian) * New translations activerecord.en.yml (Spanish, Mexico) * New translations activerecord.en.yml (Bengali) * New translations activerecord.en.yml (Sorani (Kurdish)) * New translations activerecord.en.yml (Scottish Gaelic) * New translations activerecord.en.yml (Asturian) * New translations activerecord.en.yml (Occitan) * New translations activerecord.en.yml (Serbian (Latin)) * New translations activerecord.en.yml (Kurmanji (Kurdish)) * New translations activerecord.en.yml (Corsican) * New translations activerecord.en.yml (Breton) * New translations activerecord.en.yml (Sardinian) * New translations activerecord.en.yml (Kabyle) * New translations activerecord.en.yml (Ido) * New translations activerecord.en.yml (Malayalam) * New translations activerecord.en.yml (Marathi) * New translations activerecord.en.yml (Hindi) * New translations activerecord.en.yml (Croatian) * New translations activerecord.en.yml (Norwegian Nynorsk) * New translations activerecord.en.yml (Kazakh) * New translations activerecord.en.yml (Estonian) * New translations activerecord.en.yml (Latvian) * New translations activerecord.en.yml (Tatar) * New translations activerecord.en.yml (Welsh) * New translations activerecord.en.yml (Esperanto) * New translations activerecord.en.yml (Chinese Traditional, Hong Kong) * New translations activerecord.en.yml (Standard Moroccan Tamazight) * New translations activerecord.en.yml (Catalan) * New translations activerecord.en.yml (Danish) * New translations activerecord.en.yml (Greek) * New translations activerecord.en.yml (Latvian) * New translations en.yml (Polish) * New translations simple_form.en.yml (Polish) * New translations activerecord.en.yml (Afrikaans) * New translations activerecord.en.yml (Korean) * New translations activerecord.en.yml (Polish) * New translations en.yml (Esperanto) * New translations activerecord.en.yml (Russian) * New translations activerecord.en.yml (Italian) * New translations activerecord.en.yml (Ukrainian) * New translations activerecord.en.yml (Slovenian) * New translations activerecord.en.yml (Portuguese) * New translations activerecord.en.yml (Chinese Traditional) * New translations activerecord.en.yml (Spanish, Argentina) * New translations activerecord.en.yml (Galician) * New translations activerecord.en.yml (Polish) * New translations activerecord.en.yml (Hungarian) * New translations activerecord.en.yml (Albanian) * New translations en.yml (Icelandic) * New translations simple_form.en.yml (Icelandic) * New translations activerecord.en.yml (Icelandic) * New translations en.yml (Korean) * New translations simple_form.en.yml (Korean) * New translations devise.en.yml (Korean) * New translations activerecord.en.yml (Ido) * New translations activerecord.en.yml (Spanish) * New translations activerecord.en.yml (Chinese Simplified) * Run `bundle exec i18n-tasks normalize` * Fix syntax Co-authored-by: Yamagishi Kazutoshi --- app/javascript/mastodon/locales/th.json | 6 +- app/javascript/mastodon/locales/zh-CN.json | 10 ++-- config/locales/activerecord.af.yml | 6 ++ config/locales/activerecord.ca.yml | 2 + config/locales/activerecord.da.yml | 1 + config/locales/activerecord.el.yml | 6 ++ config/locales/activerecord.es-AR.yml | 2 + config/locales/activerecord.es-MX.yml | 9 +++ config/locales/activerecord.es.yml | 2 + config/locales/activerecord.gl.yml | 2 + config/locales/activerecord.hu.yml | 2 + config/locales/activerecord.io.yml | 2 + config/locales/activerecord.is.yml | 2 + config/locales/activerecord.it.yml | 2 + config/locales/activerecord.ko.yml | 2 + config/locales/activerecord.lv.yml | 2 + config/locales/activerecord.pl.yml | 9 +++ config/locales/activerecord.pt-PT.yml | 2 + config/locales/activerecord.ru.yml | 1 + config/locales/activerecord.sl.yml | 2 + config/locales/activerecord.sq.yml | 2 + config/locales/activerecord.th.yml | 9 +++ config/locales/activerecord.uk.yml | 2 + config/locales/activerecord.zh-CN.yml | 14 +++++ config/locales/activerecord.zh-TW.yml | 2 + config/locales/devise.ko.yml | 2 +- config/locales/doorkeeper.th.yml | 9 +++ config/locales/eo.yml | 24 ++++---- config/locales/is.yml | 22 ++++++- config/locales/ko.yml | 2 + config/locales/pl.yml | 8 +++ config/locales/simple_form.is.yml | 2 + config/locales/simple_form.ko.yml | 1 + config/locales/simple_form.pl.yml | 8 +++ config/locales/simple_form.th.yml | 26 ++++++++ config/locales/simple_form.zh-CN.yml | 31 ++++++++++ config/locales/th.yml | 14 +++++ config/locales/zh-CN.yml | 69 ++++++++++++++++++++++ 38 files changed, 299 insertions(+), 20 deletions(-) diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 74bbf0446b5..3bcae61b876 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -198,7 +198,7 @@ "explore.trending_tags": "แฮชแท็ก", "follow_recommendations.done": "เสร็จสิ้น", "follow_recommendations.heading": "ติดตามผู้คนที่คุณต้องการเห็นโพสต์! นี่คือข้อเสนอแนะบางส่วน", - "follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!", + "follow_recommendations.lead": "โพสต์จากคนที่คุณติดตามจะแสดงตามลำดับเวลาบนฟีดหลักของคุณ อย่ากลัวที่จะทำผิดพลาด คุณสามารถเลิกติดตามผู้คนได้ง่ายๆ ทุกเมื่อ!", "follow_request.authorize": "อนุญาต", "follow_request.reject": "ปฏิเสธ", "follow_requests.unlocked_explanation": "แม้ว่าไม่มีการล็อคบัญชีของคุณ พนักงานของ {domain} คิดว่าคุณอาจต้องการตรวจทานคำขอติดตามจากบัญชีเหล่านี้ด้วยตนเอง", @@ -268,7 +268,7 @@ "lightbox.next": "ถัดไป", "lightbox.previous": "ก่อนหน้า", "limited_account_hint.action": "แสดงโปรไฟล์ต่อไป", - "limited_account_hint.title": "This profile has been hidden by the moderators of your server.", + "limited_account_hint.title": "โปรไฟล์นี้ถูกซ่อนไว้โดยโมเดอเรเตอร์ของเซิร์ฟเวอร์ของคุณ", "lists.account.add": "เพิ่มไปยังรายการ", "lists.account.remove": "เอาออกจากรายการ", "lists.delete": "ลบรายการ", @@ -360,7 +360,7 @@ "notifications.permission_denied_alert": "ไม่สามารถเปิดใช้งานการแจ้งเตือนบนเดสก์ท็อป เนื่องจากมีการปฏิเสธสิทธิอนุญาตเบราว์เซอร์ก่อนหน้านี้", "notifications.permission_required": "การแจ้งเตือนบนเดสก์ท็อปไม่พร้อมใช้งานเนื่องจากไม่ได้ให้สิทธิอนุญาตที่จำเป็น", "notifications_permission_banner.enable": "เปิดใช้งานการแจ้งเตือนบนเดสก์ท็อป", - "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", + "notifications_permission_banner.how_to_control": "หากต้องการรับการแจ้งเตือนเมื่อไม่ได้เปิด Mastodon ให้เปิดใช้การแจ้งเตือนบนเดสก์ท็อป คุณสามารถควบคุมได้ตามความต้องการด้วยการโต้ตอบประเภทที่สร้างการแจ้งเตือนบนเดสก์ท็อปผ่านปุ่ม {icon} ด้านบนเมื่อเปิดใช้งาน", "notifications_permission_banner.title": "ไม่พลาดสิ่งใด", "picture_in_picture.restore": "นำกลับมา", "poll.closed": "ปิดแล้ว", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index e92227f7284..dcb54735fcf 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -314,7 +314,7 @@ "navigation_bar.preferences": "首选项", "navigation_bar.public_timeline": "跨站公共时间轴", "navigation_bar.security": "安全", - "notification.admin.report": "{name} reported {target}", + "notification.admin.report": "{name} 已报告 {target}", "notification.admin.sign_up": "{name} 注册了", "notification.favourite": "{name} 喜欢了你的嘟文", "notification.follow": "{name} 开始关注你", @@ -327,7 +327,7 @@ "notification.update": "{name} 编辑了嘟文", "notifications.clear": "清空通知列表", "notifications.clear_confirmation": "你确定要永久清空通知列表吗?", - "notifications.column_settings.admin.report": "New reports:", + "notifications.column_settings.admin.report": "新报告", "notifications.column_settings.admin.sign_up": "新注册:", "notifications.column_settings.alert": "桌面通知", "notifications.column_settings.favourite": "喜欢:", @@ -433,7 +433,7 @@ "report.thanks.title_actionable": "感谢提交举报,我们将会进行处理。", "report.unfollow": "取消关注 @{name}", "report.unfollow_explanation": "你正在关注此账户。如果要想在你的主页上不再看到他们的帖子,取消对他们的关注即可。", - "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} posts}} attached", + "report_notification.attached_statuses": "{count, plural, one {{count} 嘟文} other {{count} 嘟文}} 附件", "report_notification.categories.other": "其他", "report_notification.categories.spam": "骚扰", "report_notification.categories.violation": "违反规则", @@ -468,7 +468,7 @@ "status.embed": "嵌入", "status.favourite": "喜欢", "status.filtered": "已过滤", - "status.hide": "Hide toot", + "status.hide": "屏蔽嘟文", "status.history.created": "{name} 创建于 {date}", "status.history.edited": "{name} 编辑于 {date}", "status.load_more": "加载更多", @@ -492,7 +492,7 @@ "status.report": "举报 @{name}", "status.sensitive_warning": "敏感内容", "status.share": "分享", - "status.show_filter_reason": "Show anyway", + "status.show_filter_reason": "继续显示", "status.show_less": "隐藏内容", "status.show_less_all": "隐藏全部内容", "status.show_more": "显示更多", diff --git a/config/locales/activerecord.af.yml b/config/locales/activerecord.af.yml index c41e2341d0d..dff778d5719 100644 --- a/config/locales/activerecord.af.yml +++ b/config/locales/activerecord.af.yml @@ -38,3 +38,9 @@ af: email: blocked: maak gebruik van 'n e-pos verskaffer wat nie toegelaat word nie unreachable: blyk nie te bestaan nie + user_role: + attributes: + permissions_as_keys: + own_role: kan nie verander word met jou huidige rol nie + position: + own_role: kan nie verander word met jou huidige rol nie diff --git a/config/locales/activerecord.ca.yml b/config/locales/activerecord.ca.yml index 08fa1cb5a99..ddf3fed4efd 100644 --- a/config/locales/activerecord.ca.yml +++ b/config/locales/activerecord.ca.yml @@ -45,5 +45,7 @@ ca: permissions_as_keys: dangerous: inclou permisos que no són segurs per al rol base elevated: no pot incloure permisos que el teu rol actual no té + own_role: no es pot canviar amb el teu rol actual position: elevated: no pot ser superior al teu rol actual + own_role: no pot ser canviat amb el teu rol actual diff --git a/config/locales/activerecord.da.yml b/config/locales/activerecord.da.yml index a8fe65498c0..33d86e2962a 100644 --- a/config/locales/activerecord.da.yml +++ b/config/locales/activerecord.da.yml @@ -45,5 +45,6 @@ da: permissions_as_keys: dangerous: omfat tilladelser, som ikke er sikre for basisrollen elevated: kan ikke omfatte tilladelser, din aktuelle rolle ikke besidder + own_role: kan ikke ændres med din aktuelle rolle position: elevated: kan ikke være højere end din aktuelle rolle diff --git a/config/locales/activerecord.el.yml b/config/locales/activerecord.el.yml index 67ce1758e51..77d0c2716a6 100644 --- a/config/locales/activerecord.el.yml +++ b/config/locales/activerecord.el.yml @@ -30,3 +30,9 @@ el: email: blocked: χρησιμοποιεί μη επιτρεπόμενο πάροχο e-mail unreachable: δεν φαίνεται να υπάρχει + user_role: + attributes: + permissions_as_keys: + own_role: δεν μπορεί να αλλάξει με τον τρέχοντα ρόλο σας + position: + own_role: δεν μπορεί να αλλάξει με τον τρέχοντα ρόλο σας diff --git a/config/locales/activerecord.es-AR.yml b/config/locales/activerecord.es-AR.yml index f5b8221d1a8..d1eda34062b 100644 --- a/config/locales/activerecord.es-AR.yml +++ b/config/locales/activerecord.es-AR.yml @@ -45,5 +45,7 @@ es-AR: permissions_as_keys: dangerous: incluir permisos que no son seguros para el rol base elevated: no se pueden incluir permisos que tu rol actual no posea + own_role: no se puede cambiar con tu rol actual position: elevated: no puede ser mayor que tu rol actual + own_role: no se puede cambiar con tu rol actual diff --git a/config/locales/activerecord.es-MX.yml b/config/locales/activerecord.es-MX.yml index 83632be4309..37b9b05dffe 100644 --- a/config/locales/activerecord.es-MX.yml +++ b/config/locales/activerecord.es-MX.yml @@ -38,3 +38,12 @@ es-MX: email: blocked: utiliza un proveedor de correo no autorizado unreachable: no parece existir + role_id: + elevated: no puede ser mayor que tu rol actual + user_role: + attributes: + permissions_as_keys: + dangerous: incluir permisos que no son seguros para el rol base + elevated: no se pueden incluir permisos que tu rol actual no posea + position: + elevated: no puede ser mayor que tu rol actual diff --git a/config/locales/activerecord.es.yml b/config/locales/activerecord.es.yml index 8cdfcfcc01b..4aec0f074fd 100644 --- a/config/locales/activerecord.es.yml +++ b/config/locales/activerecord.es.yml @@ -45,5 +45,7 @@ es: permissions_as_keys: dangerous: incluir permisos que no son seguros para el rol base elevated: no se pueden incluir permisos que tu rol actual no posea + own_role: no se puede cambiar con tu rol actual position: elevated: no puede ser mayor que tu rol actual + own_role: no se puede cambiar con tu rol actual diff --git a/config/locales/activerecord.gl.yml b/config/locales/activerecord.gl.yml index 6b225137ab7..a80e3ece526 100644 --- a/config/locales/activerecord.gl.yml +++ b/config/locales/activerecord.gl.yml @@ -45,5 +45,7 @@ gl: permissions_as_keys: dangerous: inclúe permisos que non son seguros para o rol básico elevated: non pode incluir permisos que o teu rol actual non posúe + own_role: non pode ser modificado co teu rol actual position: elevated: non pode superar ao teu rol actual + own_role: non pode ser modificado co teu rol actual diff --git a/config/locales/activerecord.hu.yml b/config/locales/activerecord.hu.yml index 5b055bfa275..44340b3e910 100644 --- a/config/locales/activerecord.hu.yml +++ b/config/locales/activerecord.hu.yml @@ -45,5 +45,7 @@ hu: permissions_as_keys: dangerous: tartalmaz olyan engedélyeket is, melyek az alap szerephez nem biztonságosak elevated: nem tartalmazhat olyan engedélyeket, melyek nincsenek benne a jelenlegi szerepedben + own_role: nem megváltoztatható a jelenlegi szerepköröddel position: elevated: nem lehet magasabb, mint a jelenlegi szereped + own_role: nem megváltoztatható a jelenlegi szerepköröddel diff --git a/config/locales/activerecord.io.yml b/config/locales/activerecord.io.yml index 545c32d5fbd..5c809ce2e13 100644 --- a/config/locales/activerecord.io.yml +++ b/config/locales/activerecord.io.yml @@ -45,5 +45,7 @@ io: permissions_as_keys: dangerous: inkluzas permisi quo ne esas segura por bazrolo elevated: ne povas inkluzar permisi quon vua nuna rolo ne havas + own_role: ne povas divenesar kun vua nuna rolo position: elevated: ne povas divenar plu alta kam vua nuna rolo + own_role: ne povas divenesar kun vua nuna rolo diff --git a/config/locales/activerecord.is.yml b/config/locales/activerecord.is.yml index 25c30fe4c22..1fe54032265 100644 --- a/config/locales/activerecord.is.yml +++ b/config/locales/activerecord.is.yml @@ -45,5 +45,7 @@ is: permissions_as_keys: dangerous: hefur heimildir sem ekki eru öruggar fyrir grunnhlutverk elevated: getur ekki haft heimildir sem núverandi hlutverk þitt er ekki með + own_role: er ekki hægt að breyta með þinu hlutverki position: elevated: getur ekki verið veigameiri en núverandi hlutverk þitt + own_role: er ekki hægt að breyta með þinu hlutverki diff --git a/config/locales/activerecord.it.yml b/config/locales/activerecord.it.yml index 53acb7d0209..388c354aef7 100644 --- a/config/locales/activerecord.it.yml +++ b/config/locales/activerecord.it.yml @@ -45,5 +45,7 @@ it: permissions_as_keys: dangerous: include i permessi non sicuri per il ruolo di base elevated: non è possibile includere i permessi che il tuo ruolo attuale non possiede + own_role: non può essere modificato con il tuo ruolo attuale position: elevated: non può essere superiore al tuo ruolo attuale + own_role: non può essere modificato con il tuo ruolo attuale diff --git a/config/locales/activerecord.ko.yml b/config/locales/activerecord.ko.yml index 7dcdad9f3f6..8ce4c070139 100644 --- a/config/locales/activerecord.ko.yml +++ b/config/locales/activerecord.ko.yml @@ -45,5 +45,7 @@ ko: permissions_as_keys: dangerous: 기본 역할로 사용하기에 안전하지 않은 권한을 포함하고 있습니다 elevated: 당신의 현재 역할이 가지고 있지 않은 권한은 포함할 수 없습니다 + own_role: 당신의 현재 역할을 변경할 수 없습니다 position: elevated: 당신의 현재 역할보다 높을 수 없습니다 + own_role: 당신의 현재 역할을 변경할 수 없습니다 diff --git a/config/locales/activerecord.lv.yml b/config/locales/activerecord.lv.yml index db551900570..ba31a8b3c4d 100644 --- a/config/locales/activerecord.lv.yml +++ b/config/locales/activerecord.lv.yml @@ -45,5 +45,7 @@ lv: permissions_as_keys: dangerous: ietver atļaujas, kas nav drošas pamata lomai elevated: nevar ietvert atļaujas, kas nepieder tavai pašreizējai lomai + own_role: nevar mainīt pert tavu pašreizējo lomu position: elevated: nevar būt augstāka par tavu pašreizējo lomu + own_role: nevar mainīt pert tavu pašreizējo lomu diff --git a/config/locales/activerecord.pl.yml b/config/locales/activerecord.pl.yml index e9af762449e..78ee745e284 100644 --- a/config/locales/activerecord.pl.yml +++ b/config/locales/activerecord.pl.yml @@ -38,3 +38,12 @@ pl: email: blocked: używa niedozwolonego dostawcy poczty elektronicznej unreachable: wydaje się nie istnieć + role_id: + elevated: nie może być wyższa niż twoja bieżąca rola + user_role: + attributes: + permissions_as_keys: + own_role: nie można zmienić z aktualną rolą + position: + elevated: nie może być wyższa niż twoja bieżąca rola + own_role: nie można zmienić z aktualną rolą diff --git a/config/locales/activerecord.pt-PT.yml b/config/locales/activerecord.pt-PT.yml index ceeaa909e42..b730eaf6786 100644 --- a/config/locales/activerecord.pt-PT.yml +++ b/config/locales/activerecord.pt-PT.yml @@ -45,5 +45,7 @@ pt-PT: permissions_as_keys: dangerous: incluir permissões que não são seguras para a função base elevated: não pode incluir permissões que a sua função atual não possui + own_role: não pode ser alterado com a sua função atual position: elevated: não pode ser maior que o da sua função atual + own_role: não pode ser alterado com a sua função atual diff --git a/config/locales/activerecord.ru.yml b/config/locales/activerecord.ru.yml index 2324b6bf9fb..2a267cfd2b7 100644 --- a/config/locales/activerecord.ru.yml +++ b/config/locales/activerecord.ru.yml @@ -44,3 +44,4 @@ ru: attributes: permissions_as_keys: dangerous: включить разрешения, небезопасные для базовой роли + own_role: невозможно изменить с вашей текущей ролью diff --git a/config/locales/activerecord.sl.yml b/config/locales/activerecord.sl.yml index 591c126d370..255f5e1ed91 100644 --- a/config/locales/activerecord.sl.yml +++ b/config/locales/activerecord.sl.yml @@ -45,5 +45,7 @@ sl: permissions_as_keys: dangerous: vključi pravice, ki niso varne za osnovno vlogo elevated: ni mogoče vključiti pravic, ki jih vaša trenutna vloga ne vsebuje + own_role: ni mogoče spremeniti z vašo trenutno vlogo position: elevated: ne more biti višje od vaše trenutne vloge + own_role: ni mogoče spremeniti z vašo trenutno vlogo diff --git a/config/locales/activerecord.sq.yml b/config/locales/activerecord.sq.yml index 1255b79a24d..a4c8af15f83 100644 --- a/config/locales/activerecord.sq.yml +++ b/config/locales/activerecord.sq.yml @@ -45,5 +45,7 @@ sq: permissions_as_keys: dangerous: përfshi leje që s’janë të parrezik për rolin bazë elevated: s’mund të përfshijë leje të cilat roli juaj i tanishëm s’i përfshin + own_role: s’mund të ndryshohet me rolin tuaj të tanishëm position: elevated: s’mund të jetë më i lartë sesa roli juaj i tanishëm + own_role: s’mund të ndryshohet me rolin tuaj të tanishëm diff --git a/config/locales/activerecord.th.yml b/config/locales/activerecord.th.yml index 60908144f80..716c003e948 100644 --- a/config/locales/activerecord.th.yml +++ b/config/locales/activerecord.th.yml @@ -38,3 +38,12 @@ th: email: blocked: ใช้ผู้ให้บริการอีเมลที่ไม่ได้รับอนุญาต unreachable: ดูเหมือนว่าจะไม่มีอยู่ + role_id: + elevated: ไม่สามารถสูงกว่าบทบาทปัจจุบันของคุณ + user_role: + attributes: + permissions_as_keys: + dangerous: รวมสิทธิ์ที่ไม่ปลอดภัยสำหรับบทบาทพื้นฐาน + elevated: ไม่สามารถรวบรวมสิทธิ์ในบทบาทปัจจุบันของคุณไม่ได้ + position: + elevated: ไม่สามารถสูงกว่าบทบาทปัจจุบันของคุณ diff --git a/config/locales/activerecord.uk.yml b/config/locales/activerecord.uk.yml index 58e549b5337..159f6d40a14 100644 --- a/config/locales/activerecord.uk.yml +++ b/config/locales/activerecord.uk.yml @@ -45,5 +45,7 @@ uk: permissions_as_keys: dangerous: включити небезпечні для базової ролі дозволи elevated: не можна включити права, якими не володіє ваша поточна роль + own_role: не можна змінити у вашій поточній ролі position: elevated: не може бути вищою за поточну роль + own_role: не можна змінити у вашій поточній ролі diff --git a/config/locales/activerecord.zh-CN.yml b/config/locales/activerecord.zh-CN.yml index 855e79de6c8..27ec73ab96d 100644 --- a/config/locales/activerecord.zh-CN.yml +++ b/config/locales/activerecord.zh-CN.yml @@ -25,6 +25,10 @@ zh-CN: attributes: url: invalid: 不是有效的 URL。 + doorkeeper/application: + attributes: + website: + invalid: 网址无效 status: attributes: reblog: @@ -34,3 +38,13 @@ zh-CN: email: blocked: 使用了被封禁的电子邮件提供商 unreachable: 似乎不存在 + role_id: + elevated: 不能高于您当前的角色 + user_role: + attributes: + permissions_as_keys: + dangerous: 包含对基本角色不安全的权限 + elevated: 不能包含您当前角色不拥有的权限 + own_role: 无法以您当前的身份更改 + position: + elevated: 不能高于您当前的角色 diff --git a/config/locales/activerecord.zh-TW.yml b/config/locales/activerecord.zh-TW.yml index 554f6047d3e..2ebb4460c19 100644 --- a/config/locales/activerecord.zh-TW.yml +++ b/config/locales/activerecord.zh-TW.yml @@ -45,5 +45,7 @@ zh-TW: permissions_as_keys: dangerous: 包含對基本角色不安全的權限 elevated: 不能包含您目前角色不具備的權限 + own_role: 無法被您目前的角色更改 position: elevated: 不能高於您目前的角色 + own_role: 無法被您目前的角色更改 diff --git a/config/locales/devise.ko.yml b/config/locales/devise.ko.yml index 570377f8a49..cd949d772dd 100644 --- a/config/locales/devise.ko.yml +++ b/config/locales/devise.ko.yml @@ -7,7 +7,7 @@ ko: send_paranoid_instructions: 당신의 이메일이 우리의 DB에 있을 경우 몇 분 이내로 확인 메일이 발송 됩니다. 이메일을 받지 못 한 경우, 스팸 폴더를 확인하세요. failure: already_authenticated: 이미 로그인 된 상태입니다. - inactive: 계정이 활성화 되지 않았습니다. + inactive: 계정이 아직 활성화 되지 않았습니다. invalid: 올바르지 않은 %{authentication_keys} 혹은 패스워드입니다. last_attempt: 계정이 잠기기까지 한 번의 시도가 남았습니다. locked: 계정이 잠겼습니다. diff --git a/config/locales/doorkeeper.th.yml b/config/locales/doorkeeper.th.yml index 5c1e1582f6c..963b2361dae 100644 --- a/config/locales/doorkeeper.th.yml +++ b/config/locales/doorkeeper.th.yml @@ -81,16 +81,25 @@ th: errors: messages: access_denied: เจ้าของทรัพยากรหรือเซิร์ฟเวอร์การอนุญาตปฏิเสธคำขอ + credential_flow_not_configured: การไหลของข้อมูลรับรองรหัสผ่านเจ้าของทรัพยากรล้มเหลวเนื่องจาก Doorkeeper.configure.resource_owner_from_credentials ไม่ได้ถูกกำหนดค่า + invalid_client: การตรวจสอบสิทธิ์ไคลเอ็นต์ล้มเหลวเนื่องจากไคลเอ็นต์ที่ไม่รู้จัก ไม่รวมการตรวจสอบไคลเอ็นต์ หรือวิธีการตรวจสอบสิทธิ์ที่ไม่รองรับ + invalid_grant: การให้สิทธิ์ที่ระบุไม่ถูกต้อง หมดอายุ เพิกถอน ไม่ตรงกับ URI การเปลี่ยนเส้นทางที่ใช้ในคำขอการให้สิทธิ์ หรือออกให้ไคลเอ็นต์อื่น invalid_redirect_uri: URI การเปลี่ยนเส้นทางที่รวมอยู่ไม่ถูกต้อง invalid_request: missing_param: 'พารามิเตอร์ที่จำเป็นขาดหายไป: %{value}' + request_not_authorized: คำขอต้องได้รับอนุญาต พารามิเตอร์ที่จำเป็นสำหรับการให้สิทธิ์คำขอขาดหายไปหรือไม่ถูกต้อง + unknown: คำขอไม่มีพารามิเตอร์ที่จำเป็น มีค่าพารามิเตอร์ที่ไม่รองรับ หรืออยู่ในรูปแบบที่ไม่ถูกต้อง + invalid_resource_owner: ข้อมูลรับรองเจ้าของทรัพยากรที่ระบุไม่ถูกต้อง หรือไม่พบเจ้าของทรัพยากร invalid_scope: ขอบเขตที่ขอไม่ถูกต้อง ไม่รู้จัก หรือผิดรูปแบบ invalid_token: expired: โทเคนการเข้าถึงหมดอายุแล้ว revoked: เพิกถอนโทเคนการเข้าถึงแล้ว unknown: โทเคนการเข้าถึงไม่ถูกต้อง resource_owner_authenticator_not_configured: การค้นหาเจ้าของทรัพยากรล้มเหลวเนื่องจากไม่ได้กำหนดค่า Doorkeeper.configure.resource_owner_authenticator + server_error: เซิร์ฟเวอร์การให้สิทธิ์พบสภาวะที่ไม่คาดคิดซึ่งทำให้ไม่สามารถดำเนินการตามคำขอได้ + temporarily_unavailable: ขณะนี้เซิร์ฟเวอร์การให้สิทธิ์ไม่สามารถจัดการตามคำขอได้ เนื่องจากการโอเวอร์โหลดหรือมีการบำรุงรักษาเซิร์ฟเวอร์ชั่วคราว unauthorized_client: ไคลเอ็นต์ไม่ได้รับอนุญาตให้ทำคำขอนี้โดยใช้วิธีการนี้ + unsupported_grant_type: ประเภทการให้สิทธิ์ไม่ได้รับการสนับสนุนโดยเซิร์ฟเวอร์การให้สิทธิ์นะ unsupported_response_type: เซิร์ฟเวอร์การอนุญาตไม่รองรับชนิดการตอบสนองนี้ flash: applications: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 8d71055a97f..5fbde142b90 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -2,15 +2,15 @@ eo: about: about_hashtag_html: Ĉi tiuj estas la publikaj mesaĝoj markitaj per #%{hashtag}. Vi povas interagi kun ili se vi havas konton ie ajn en la fediverse. - about_mastodon_html: Mastodon estas socia reto bazita sur malfermitaj retaj protokoloj kaj sur libera malfermitkoda programo. Ĝi estas sencentra kiel retmesaĝoj. + about_mastodon_html: 'Mastodon estas socia retejo de la estonteco: sen reklamo, sen kompania gvato, etika dezajno kaj malcentraligo! Vi regu viajn datumojn kun Mastodon!' about_this: Pri - active_count_after: aktiva + active_count_after: aktivaj active_footnote: Monate Aktivaj Uzantoj (MAU) administered_by: 'Administrata de:' api: API apps: Poŝtelefonaj aplikaĵoj - apps_platforms: Uzu Mastodon ĉe iOS, Android kaj aliajn platformojn - browse_directory: Esplori profilujo kaj filtri per interesoj + apps_platforms: Uzu Mastodon de iOS, Android, kaj aliaj substratoj + browse_directory: Esplori la profilujon kaj filtri en interesoj browse_local_posts: Vidi vivantan fluon de publikaj mesaĝoj al Mastodon browse_public_posts: Vidi vivantan fluon de publikaj mesaĝoj al Mastodon contact: Kontakto @@ -40,11 +40,12 @@ eo: unavailable_content: Moderigitaj serviloj unavailable_content_description: domain: Servilo - reason: 'Kialo:' + reason: Motivo rejecting_media: 'La aŭdovidaj dosieroj de ĉi tiuj serviloj ne estos prilaboritaj aŭ stokitaj, kaj neniu bildeto estos montrita, do necesas klaki permane por vidi la originalan afiŝon:' rejecting_media_title: Filtritaj aŭdovidaĵoj silenced: 'La mesaĝoj de tiuj serviloj estos kaŝitaj de publikaj templinio kaj konversacioj, kaj la interagoj de la uzantoj donas neniun sciigon, ĝis vi sekvos ilin:' - silenced_title: Silentigitaj serviloj + silenced_title: Limigitaj serviloj + suspended: 'Neniu datumo de ĉi tiuj serviloj estos prilaboritaj, stokitaj, aŭ interŝanĝitaj, neeble fari interagon aŭ komunikon kun la uzantoj de ĉi tiuj serviloj:' suspended_title: Suspenditaj serviloj user_count_after: one: uzanto @@ -154,8 +155,9 @@ eo: push_subscription_expires: Eksvalidiĝo de la abono al PuSH redownload: Aktualigi profilon reject: Malakcepti - remove_avatar: Forigi la rolfigron + remove_avatar: Forigi la rolfiguron remove_header: Forigi kapan bildon + removed_avatar_msg: La bildo de la rolfiguro de %{username} estas sukcese forigita resend_confirmation: already_confirmed: Ĉi tiu uzanto jam estas konfirmita send: Resendi konfirman retmesaĝon @@ -227,7 +229,7 @@ eo: memorialize_account: Memorigu Konton promote_user: Promocii Uzanton reject_user: Malakcepti Uzanton - remove_avatar_user: Forigi la rolfigron + remove_avatar_user: Forigi la rolfiguron reopen_report: Remalfermi signalon reset_password_user: Restarigi pasvorton resolve_report: Solvitaj reporto @@ -518,6 +520,8 @@ eo: view_profile: Vidi profilon roles: everyone: Implicitaj permesoj + privileges: + delete_user_data: Forviŝi la datumojn de la uzanto rules: add_new: Aldoni regulon delete: Forigi @@ -1117,7 +1121,7 @@ eo: ios: iOS linux: Linux mac: Mac - other: nekonata platformo + other: nekonata substrato windows: Windows windows_mobile: Windows Mobile windows_phone: Windows Phone @@ -1262,7 +1266,7 @@ eo: suspend: Konto suspendita welcome: edit_profile_action: Agordi profilon - edit_profile_step: Vi povas proprigi vian profilon per alŝuto de profilbildo, fonbildo, ŝanĝo de via afiŝita nomo kaj pli. Se vi ŝatus kontroli novajn sekvantojn antaŭ ol ili rajtas sekvi vin, vi povas ŝlosi vian konton. + edit_profile_step: Vi povas personecigi vian profilon en alŝuto de rolfiguro, paĝokapa bildo, en ŝanĝo de via vidiga nomo kaj pli. Se vi volas ekzameni novajn sekvantojn antaŭ ol permesi al ili aboni vin, vi povas agordi vian konton kiel privata. explanation: Jen kelkaj konsiloj por helpi vin komenci final_action: Ekmesaĝi final_step: 'Ekmesaĝu! Eĉ sen sekvantoj, viaj publikaj mesaĝoj povas esti vidataj de aliaj, ekzemple en la loka templinio kaj en la kradvortoj. Eble vi ŝatus prezenti vin per la kradvorto #introductions.' diff --git a/config/locales/is.yml b/config/locales/is.yml index 1a13e322230..943fff632cf 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -538,7 +538,7 @@ is: public_comment: Opinber athugasemd purge: Henda purge_description_html: Ef þú heldur að þetta lén sé farið endanlega af netinu, geturðu eytt öllum færslum aðganga og tengdum gögnum frá þessu léni úr gagnageymslum þínum. Þetta gæti tekið þó nokkra stund. - title: Samband + title: Netþjónasambönd total_blocked_by_us: Útilokað af okkur total_followed_by_them: Fylgt af þeim total_followed_by_us: Fylgt af okkur @@ -681,10 +681,30 @@ is: manage_appeals_description: Leyfir notendum að yfirfara áfrýjanir vegna aðgerða umsjónarfólks manage_blocks: Sýsla með útilokanir manage_blocks_description: Leyfir notendum að loka á tölvupóstþjónustur og IP-vistföng + manage_custom_emojis: Sýsla með sérsniðin tjáningartákn + manage_custom_emojis_description: Leyfir notendum að sýsla með sérsniðin tjáningartákn á netþjóninum + manage_federation: Sýsla með netþjónasambönd + manage_federation_description: Leyfir notendum að loka á eða leyfa samþættingu við önnur lén (federation) og stýra afhendingu skilaboða + manage_invites: Sýsla með boðsgesti + manage_invites_description: Leyfir notendum að vafra um og gera boðstengla óvirka + manage_reports: Sýsla með kærur + manage_reports_description: Leyfir notendum að yfirfara kærur og framkvæma umsýsluaðgerðir sem byggjast á þeim + manage_roles: Sýsla með hlutverk + manage_roles_description: Leyfir notendum að sýsla með hlutverk og úthluta hlutverkum sem eru réttminni en þeirra eigið manage_rules: Sýsla með reglur manage_rules_description: Leyfir notendum að breyta reglum á netþjóninum manage_settings: Sýsla með stillingar manage_settings_description: Leyfir notendum að breyta stillingum vefsvæðisins + manage_taxonomies: Sýsla með vægi efnis + manage_taxonomies_description: Leyfir notendum að yfirfara vinsælt efni og uppfæra stillingar myllumerkja + manage_user_access: Sýsla með notendaaðgang + manage_user_access_description: Leyfir notendum að gera tveggja-þátta auðkenningu annarra notenda óvirka, breyta tölvupóstfangi þeirra og endurstilla lykilorð + manage_users: Sýsla með notendur + manage_users_description: Leyfir notendum að sýsla með nánari upplýsingar um aðra notendur og framkvæma umsýsluaðgerðir gagnvart þeim + manage_webhooks: Sýsla með Webhook-vefkrækjur + manage_webhooks_description: Leyfir notendum að setja upp webhook-vefkrækjur vagna stjórnunartengdra atburða + view_audit_log: Skoða atvikaskráningu + view_audit_log_description: Leyfir notendum að skoða feril stjórnunaraðgerða á netþjóninum view_dashboard: Skoða stjórnborð view_dashboard_description: Leyfir notendum að skoða stjórnborðið og sjá ýmsar mælingar view_devops: Kerfisstjórar diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 4109bfb4a7f..f290318a64f 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -648,8 +648,10 @@ ko: moderation: 중재 special: 특수 delete: 삭제 + description_html: "사용자 역할을 통해, 사용자들이 마스토돈의 어떤 기능과 영역에 접근할 수 있을지 설정할 수 있습니다." edit: "%{name} 역할 수정" everyone: 기본 권한 + everyone_full_description_html: 이것은 모든 사용자에게 적용될 기본 역할이며, 역할을 지정하지 않아도 적용됩니다. 다른 모든 역할들은 여기에서 권한을 상속합니다. permissions_count: other: "%{count} 개의 권한" privileges: diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 0044771fb34..2d49d756d47 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -725,6 +725,14 @@ pl: manage_taxonomies: Zarządzaj taksonomiami manage_taxonomies_description: Pozwala użytkownikom przeglądać najpopularniejsze treści i aktualizować ustawienia hasztagów manage_user_access: Zarządzaj dostępem użytkownika + manage_users: Zarządzanie użytkownikami + manage_webhooks: Zarządzanie webhookami + view_audit_log: Wyświetl dziennik zdarzeń + view_audit_log_description: Pozwala użytkownikom zobaczyć historię działań administracyjnych na serwerze + view_dashboard: Wyświetl panel + view_devops: Devops + view_devops_description: Pozwala użytkownikom na dostęp do paneli Sidekiq i pgHero + title: Role rules: add_new: Dodaj zasadę delete: Usuń diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml index f0fd23d5e6b..facef6f18b8 100644 --- a/config/locales/simple_form.is.yml +++ b/config/locales/simple_form.is.yml @@ -98,9 +98,11 @@ is: chosen_languages: Þegar merkt er við þetta, birtast einungis færslur á völdum tungumálum á opinberum tímalínum role: Hlutverk stýrir hvaða heimildir notandinn hefur user_role: + color: Litur sem notaður er fyrir hlutverkið allsstaðar í viðmótinu, sem RGB-gildi á hex-sniði highlighted: Þetta gerir hlutverk sýnilegt opinberlega name: Opinbert heiti hlutverks, ef birta á hlutverk sem merki permissions_as_keys: Notendur með þetta hlutverk munu hafa aðgang að... + position: Rétthærra hlutverk ákvarðar lausn árekstra í ákveðnum tilfellum. Sumar aðgerðir er aðeins hægt að framkvæma á hlutverk með lægri forgangi webhook: events: Veldu atburði sem á að senda url: Hvert atburðir verða sendir diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index 19f164e0037..79c28b4fc17 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -102,6 +102,7 @@ ko: highlighted: 이 역할이 공개적으로 보이도록 설정합니다 name: 역할이 배지로 표시될 경우, 그 역할에 대한 공개적인 이름입니다 permissions_as_keys: 이 역할을 가진 사용자는 다음에 접근할 수 있게 됩니다... + position: 특정 상황에서 충돌이 발생할 경우 더 높은 역할이 충돌을 해결합니다. 특정 작업은 우선순위가 낮은 역할에 대해서만 수행될 수 있습니다 webhook: events: 전송할 이벤트를 선택하세요 url: 이벤트가 어디로 전송될 지 diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index 1db60d3fab6..1be350dcae2 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -234,6 +234,14 @@ pl: name: Hashtag trendable: Pozwól na wyświetlanie tego hashtagu w „Na czasie” usable: Pozwól na umieszczanie tego hashtagu we wpisach + user: + role: Rola + user_role: + color: Kolor odznaki + highlighted: Wyświetl rolę jako odznakę na profilach użytkowników + name: Nazwa + permissions_as_keys: Uprawnienia + position: Priorytet webhook: events: Włączone zdarzenia url: Endpoint URL diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index 3de5753e1dd..b542eba54e3 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -64,9 +64,15 @@ th: domain_allow: domain: โดเมนนี้จะสามารถดึงข้อมูลจากเซิร์ฟเวอร์นี้และจะประมวลผลและจัดเก็บข้อมูลขาเข้าจากโดเมน email_domain_block: + domain: อาจเป็นชื่อโดเมนที่แสดงในที่อยู่อีเมลหรือทะเบียน MX ที่ใช้อยู่ พวกเขาอาจจะได้รับการตรวจสอบเมื่อมีการสมัคร with_dns_records: จะทำการพยายามแปลงที่อยู่ระเบียน DNS ของโดเมนที่กำหนดและจะปิดกั้นผลลัพธ์เช่นกัน featured_tag: name: 'คุณอาจต้องการใช้หนึ่งในนี้:' + filters: + action: เลือกการดำเนินการเมื่อโพสต์ตรงกับตัวกรอง + actions: + hide: ซ่อนเนื้อหาที่ถูกกรองโดยสิ้นเชิง ทำตัวราวกับว่าไม่มีอยู่จริง + warn: ซ่อนเนื้อหาที่ถูกกรองไว้ด้านหลังคำเตือนที่กล่าวถึงชื่อตัวกรอง form_challenge: current_password: คุณกำลังเข้าสู่พื้นที่ปลอดภัย imports: @@ -75,6 +81,7 @@ th: text: นี่จะช่วยให้เราตรวจทานใบสมัครของคุณ ip_block: comment: ไม่จำเป็น จดจำเหตุผลที่คุณเพิ่มกฎนี้ + expires_in: ที่อยู่ IP เป็นทรัพยากร บางครั้งมีการแบ่งปันและมักเปลี่ยนมือ ด้วยเหตุผลนี้ จึงไม่แนะนำให้บล็อก IP ip: ป้อนที่อยู่ IPv4 หรือ IPv6 คุณสามารถปิดกั้นทั้งช่วงได้โดยใช้ไวยากรณ์ CIDR ระวังอย่าล็อคตัวคุณเองออก! severities: no_access: ปิดกั้นการเข้าถึงทรัพยากรทั้งหมด @@ -84,12 +91,21 @@ th: text: อธิบายกฎหรือข้อกำหนดสำหรับผู้ใช้ในเซิร์ฟเวอร์นี้ พยายามทำให้กฎหรือข้อกำหนดสั้นและเรียบง่าย sessions: otp: 'ป้อนรหัสสองปัจจัยที่สร้างโดยแอปในโทรศัพท์ของคุณหรือใช้หนึ่งในรหัสกู้คืนของคุณ:' + webauthn: หากเป็นคีย์ USB อย่าลืมเสียบไว้ และหากจำเป็น ให้แตะคีย์นั้นไว้นะ tag: name: คุณสามารถเปลี่ยนได้เฉพาะตัวพิมพ์ใหญ่เล็กของตัวอักษรเท่านั้น ตัวอย่างเช่น เพื่อทำให้ตัวอักษรอ่านได้ง่ายขึ้น user: chosen_languages: เมื่อกาเครื่องหมาย จะแสดงเฉพาะโพสต์ในภาษาที่เลือกในเส้นเวลาสาธารณะเท่านั้น + role: ควบคุมบทบาท ว่าผู้ใช้มีสิทธิใดบ้าง + user_role: + color: สีที่จะใช้สำหรับบทบาทตลอดทั้ง UI เป็น RGB ในรูปแบบฐานสิบหก + highlighted: ทำให้บทบาทนี้ปรากฏต่อสู่สาธารณะ + name: ชื่อสาธารณะของบทบาท หากกำหนดบทบาทให้แสดงเป็นตราสัญลักษณ์ + permissions_as_keys: ผู้ใช้ที่มีบทบาทนี้จะมีสิทธิ์เข้าถึง... + position: บทบาทที่สูงขึ้นอาจจะตัดสินใจแก้ไขข้อขัดแย้งในบางสถานการณ์ การดำเนินการบางอย่างสามารถทำได้เฉพาะกับบทบาทที่มีลำดับความสำคัญต่ำกว่า webhook: events: เลือกเหตุการณ์ที่จะส่ง + url: กิจกรรมจะถูกส่งไปที่ labels: account: fields: @@ -120,6 +136,8 @@ th: scheduled_at: จัดกำหนดการเผยแพร่ starts_at: การเริ่มต้นเหตุการณ์ text: ประกาศ + appeal: + text: อธิบายว่าเหตุใดจึงควรกลับคำตัดสินนี้ defaults: autofollow: เชิญให้ติดตามบัญชีของคุณ avatar: ภาพประจำตัว @@ -184,6 +202,10 @@ th: with_dns_records: รวมระเบียน MX และ IP ของโดเมน featured_tag: name: แฮชแท็ก + filters: + actions: + hide: ซ่อนอย่างสมบูรณ์ + warn: ซ่อนพร้อมคำเตือน interactions: must_be_follower: ปิดกั้นการแจ้งเตือนจากผู้ที่ไม่ใช่ผู้ติดตาม must_be_following: ปิดกั้นการแจ้งเตือนจากผู้คนที่คุณไม่ได้ติดตาม @@ -220,9 +242,13 @@ th: user: role: บทบาท user_role: + color: สีของตรา + highlighted: แสดงบทบาทเป็นเครื่องหมายบนโปรไฟล์ผู้ใช้ name: ชื่อ permissions_as_keys: สิทธิอนุญาต + position: ระดับความสำคัญ webhook: + events: เปิดใช้งานอีเว้น url: URL ปลายทาง 'no': ไม่ recommended: แนะนำ diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index 33602885c77..703c200c9a9 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -68,6 +68,11 @@ zh-CN: with_dns_records: Mastodon 会尝试解析所给域名的 DNS 记录,然后把解析结果一并封禁 featured_tag: name: 你可能想要使用以下之一: + filters: + action: 选择在帖子匹配过滤器时要执行的操作 + actions: + hide: 彻底屏蔽过滤内容,犹如它不曾存在过一般 + warn: 在警告中提及过滤器标题后,隐藏过滤内容 form_challenge: current_password: 你正在进入安全区域 imports: @@ -91,6 +96,16 @@ zh-CN: name: 你只能改变字母的大小写,让它更易读 user: chosen_languages: 仅选中语言的嘟文会出现在公共时间轴上(全不选则显示所有语言的嘟文) + role: 角色决定该用户拥有的权限 + user_role: + color: 整个用户界面中,该角色使用的颜色,以RGB 十六进制格式 + highlighted: 这使角色公开可见 + name: 角色的公开名称,如果角色设置为展示的徽章 + permissions_as_keys: 具有此角色的用户将有权访问... + position: 较高的角色决定在某些情况下解决冲突。某些行动只能对优先级较低的角色执行 + webhook: + events: 选择要发送的事件 + url: 事件将发送到哪个地点 labels: account: fields: @@ -178,6 +193,7 @@ zh-CN: setting_use_pending_items: 慢速模式 severity: 级别 sign_in_token_attempt: 安全码 + title: 标题 type: 导入数据类型 username: 用户名 username_or_email: 用户名或电子邮件地址 @@ -186,6 +202,10 @@ zh-CN: with_dns_records: 包括该域名的 MX 记录和 IP 地址 featured_tag: name: 话题标签 + filters: + actions: + hide: 完全隐藏 + warn: 隐藏时显示警告信息 interactions: must_be_follower: 屏蔽来自未关注我的用户的通知 must_be_following: 屏蔽来自我未关注的用户的通知 @@ -219,6 +239,17 @@ zh-CN: name: 话题标签 trendable: 允许在热门下显示此话题 usable: 允许嘟文使用此话题标签 + user: + role: 角色 + user_role: + color: 徽章颜色 + highlighted: 用户配置中以徽章显示角色 + name: 名称 + permissions_as_keys: 权限设置 + position: 优先权 + webhook: + events: 已启用事件 + url: 端点网址 'no': 否 recommended: 推荐 required: diff --git a/config/locales/th.yml b/config/locales/th.yml index d48d4ddb34a..e2f1db85519 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -22,6 +22,9 @@ th: federation_hint_html: ด้วยบัญชีที่ %{instance} คุณจะสามารถติดตามผู้คนในเซิร์ฟเวอร์ Mastodon และอื่น ๆ get_apps: ลองแอปมือถือ hosted_on: Mastodon ที่โฮสต์ที่ %{domain} + instance_actor_flash: 'บัญชีนี้เป็นนักแสดงเสมือนที่ใช้เพื่อเป็นตัวแทนของเซิร์ฟเวอร์เอง ไม่ใช่ผู้ใช้รายบุคคล แต่มันก็ถูกใช้เพื่อวัตถุประสงค์ในการรวมกลุ่มและไม่ควรถูกบล็อก เว้นแต่คุณต้องการบล็อกทั้งอินสแตนซ์นั้น ซึ่งในกรณีนี้คุณควรใช้บล็อกโดเมนนะ + + ' learn_more: เรียนรู้เพิ่มเติม logged_in_as_html: คุณกำลังเข้าสู่ระบบเป็น %{username} ในปัจจุบัน logout_before_registering: คุณได้เข้าสู่ระบบอยู่แล้ว @@ -46,6 +49,7 @@ th: silenced_title: เซิร์ฟเวอร์ที่จำกัดอยู่ suspended: 'จะไม่ประมวลผล จัดเก็บ หรือแลกเปลี่ยนข้อมูลจากเซิร์ฟเวอร์เหล่านี้ ทำให้การโต้ตอบหรือการสื่อสารใด ๆ กับผู้ใช้จากเซิร์ฟเวอร์เหล่านี้เป็นไปไม่ได้:' suspended_title: เซิร์ฟเวอร์ที่ระงับอยู่ + unavailable_content_html: โดยทั่วไปแล้ว Mastodon อนุญาตให้คุณดูเนื้อหาและโต้ตอบกับผู้ใช้งานจากเซิร์ฟเวอร์อื่นใน fediverse เหล่านี้เป็นข้อยกเว้นที่เกิดขึ้นบนเซิร์ฟเวอร์นี้โดยเฉพาะ user_count_after: other: ผู้ใช้ user_count_before: บ้านของ @@ -58,6 +62,7 @@ th: followers: other: ผู้ติดตาม following: กำลังติดตาม + instance_actor_flash: บัญชีนี้เป็นนักแสดงเสมือนที่ใช้เพื่อเป็นตัวแทนของเซิร์ฟเวอร์เอง แต่ก็ไม่ใช่ผู้ใช้รายบุคคล แต่มันถูกใช้เพื่อวัตถุประสงค์ของการรวมกลุ่มและไม่ควรถูกระงับ joined: เข้าร่วมเมื่อ %{date} last_active: ใช้งานล่าสุด link_verified_on: ตรวจสอบความเป็นเจ้าของของลิงก์นี้เมื่อ %{date} @@ -156,6 +161,7 @@ th: most_recent_ip: IP ล่าสุด no_account_selected: ไม่มีการเปลี่ยนแปลงบัญชีเนื่องจากไม่มีการเลือก no_limits_imposed: ไม่มีการกำหนดขีดจำกัด + no_role_assigned: ไม่มีการกำหนดบทบาท not_subscribed: ไม่ได้บอกรับ pending: การตรวจทานที่รอดำเนินการ perform_full_suspension: ระงับ @@ -201,6 +207,8 @@ th: subscribe: บอกรับ suspend: ระงับ suspended: ระงับอยู่ + suspension_irreversible: ข้อมูลของบัญชีนี้ถูกลบไม่สามารถย้อนกลับได้ คุณสามารถระงับบัญชีเพื่อให้ใช้งานได้ แต่จะไม่กู้คืนข้อมูลใดๆทั้งสิ้น ที่เคยมีอยู่ก่อนหน้านี้ + suspension_reversible_hint_html: บัญชีถูกระงับ และข้อมูลจะถูกลบออกอย่างสมบูรณ์ในวันที่ %{date} ก่อนหน้านั้น บัญชีสามารถกู้คืนได้โดยไม่มีผลร้ายใดๆทั้งสิ้น ถ้าหากคุณต้องการลบข้อมูลของบัญชีทั้งหมดในทันที คุณสามารถทำได้ด้านล่างนี้ title: บัญชี unblock_email: เลิกปิดกั้นที่อยู่อีเมล unblocked_email_msg: เลิกปิดกั้นที่อยู่อีเมลของ %{username} สำเร็จ @@ -291,6 +299,7 @@ th: destroy_instance_html: "%{name} ได้ล้างข้อมูลโดเมน %{target}" destroy_ip_block_html: "%{name} ได้ลบกฎสำหรับ IP %{target}" destroy_status_html: "%{name} ได้เอาโพสต์โดย %{target} ออก" + destroy_unavailable_domain_html: "%{name} ได้พักการจัดส่งไปยังโดเมน %{target}" disable_2fa_user_html: "%{name} ได้ปิดใช้งานความต้องการสองปัจจัยสำหรับผู้ใช้ %{target}" disable_custom_emoji_html: "%{name} ได้ปิดใช้งานอีโมจิ %{target}" disable_sign_in_token_auth_user_html: "%{name} ได้ปิดใช้งานการรับรองความถูกต้องด้วยโทเคนอีเมลสำหรับ %{target}" @@ -410,6 +419,8 @@ th: destroyed_msg: เลิกทำการปิดกั้นโดเมนแล้ว domain: โดเมน edit: แก้ไขการปิดกั้นโดเมน + existing_domain_block: คุณได้กำหนดขีดจำกัดที่เข้มงวดขึ้นแล้วบน %{name} + existing_domain_block_html: คุณได้กำหนดขีดจำกัดที่เข้มงวดขึ้นใน %{name} แล้วคุณต้อง unblock ก่อน new: create: สร้างการปิดกั้น hint: การปิดกั้นโดเมนจะไม่ป้องกันการสร้างรายการบัญชีในฐานข้อมูล แต่จะใช้วิธีการควบคุมที่เฉพาะเจาะจงกับบัญชีเหล่านั้นย้อนหลังและโดยอัตโนมัติ @@ -420,8 +431,11 @@ th: suspend: ระงับ title: การปิดกั้นโดเมนใหม่ obfuscate: ทำให้ชื่อโดเมนคลุมเครือ + obfuscate_hint: อาจมีผลทำให้ชื่อโดเมนสับสนบางส่วนในรายการหากเปิดใช้งานการโฆษณารายการข้อจำกัดของโดเมน private_comment: ความคิดเห็นส่วนตัว + private_comment_hint: แสดงความคิดเห็นเกี่ยวกับข้อจำกัดของโดเมนนี้สำหรับการใช้งานภายในโดยผู้ดูแล public_comment: ความคิดเห็นสาธารณะ + public_comment_hint: แสดงความคิดเห็นเกี่ยวกับข้อจำกัดโดเมนนี้สำหรับบุคคลทั่วไป หากต้องการโฆษณารายการข้อจำกัดโดเมนเปิดใช้งานอยู่ reject_media: ปฏิเสธไฟล์สื่อ reject_media_hint: เอาไฟล์สื่อที่จัดเก็บไว้ในเซิร์ฟเวอร์ออกและปฏิเสธที่จะดาวน์โหลดไฟล์ใด ๆ ในอนาคต ไม่เกี่ยวข้องกับการระงับ reject_reports: ปฏิเสธรายงาน diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 9ccabc99836..47a1ab29f31 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -99,11 +99,17 @@ zh-CN: avatar: 头像 by_domain: 域名 change_email: + changed_msg: 已成功更改电子邮件地址! current_email: 当前的电子邮箱 label: 更改电子邮箱 new_email: 新的电子邮箱 submit: 更改电子邮件地址 title: 为 %{username} 更改电子邮箱 + change_role: + changed_msg: 已成功更改角色! + label: 更改角色 + no_role: 未设置角色 + title: 为 %{username} 更改角色 confirm: 确认 confirmed: 已确认 confirming: 等待确认 @@ -147,6 +153,7 @@ zh-CN: active: 活跃 all: 全部 pending: 待审核 + silenced: 受限 suspended: 已封禁 title: 管理 moderation_notes: 管理员备注 @@ -154,6 +161,7 @@ zh-CN: most_recent_ip: 最后一次活跃的 IP 地址 no_account_selected: 因为没有选中任何账号,所以没有更改 no_limits_imposed: 无限制 + no_role_assigned: 未定角色 not_subscribed: 未订阅 pending: 待审核 perform_full_suspension: 封禁 @@ -179,6 +187,7 @@ zh-CN: reset: 重置 reset_password: 重置密码 resubscribe: 重新订阅 + role: 角色 search: 搜索 search_same_email_domain: 其他具有相同电子邮箱域名的用户 search_same_ip: 具有相同IP的其他用户 @@ -626,6 +635,57 @@ zh-CN: unresolved: 未处理 updated_at: 更新时间 view_profile: 查看资料 + roles: + add_new: 添加角色 + assigned_users: + other: "%{count} 用户" + categories: + administration: 管理 + devops: 开发运维 + invites: 邀请 + moderation: 监察 + special: 特殊 + delete: 刪除 + description_html: 使用 用户角色,您可以自定义您的用户可以访问的功能和区域。 + edit: 编辑 '%{name}' 角色 + everyone: 默认权限 + everyone_full_description_html: 这是影响到 所有用户基础角色,包括未指定角色的用户。 其他所有的角色都继承着它的权限。 + permissions_count: + other: "%{count} 权限" + privileges: + administrator: 管理员 + administrator_description: 拥有此权限的用户将绕过每个权限 + delete_user_data: 删除用户数据 + delete_user_data_description: 允许用户立即删除其他用户的数据 + invite_users: 邀请用户 + invite_users_description: 允许用户邀请新人加入服务器 + manage_announcements: 管理公告 + manage_announcements_description: 允许用户管理服务器上的通知 + manage_appeals: 管理申诉 + manage_appeals_description: 允许用户审查对适度动作的上诉 + manage_blocks: 管理版块 + manage_blocks_description: 允许用户屏蔽电子邮件提供商和IP地址 + manage_custom_emojis: 管理自定义表情 + manage_custom_emojis_description: 允许用户管理服务器上的自定义表情 + manage_federation: 管理联邦 + manage_invites: 管理邀请 + manage_invites_description: 允许用户浏览和停用邀请链接 + manage_reports: 管理报告 + manage_reports_description: 允许用户查看报告并对其执行审核操作 + manage_roles: 管理角色 + manage_roles_description: 允许用户管理和分配比他们权限低的角色 + manage_rules: 管理规则 + manage_rules_description: 允许用户更改服务器规则 + manage_settings: 管理设置 + manage_settings_description: 允许用户更改站点设置 + manage_users: 管理用户 + manage_users_description: 允许用户查看其他用户信息并对他们执行审核操作 + manage_webhooks: 管理网钩 + manage_webhooks_description: 允许用户为管理事件设置网钩 + view_audit_log: 查看审核日志 + view_audit_log_description: 允许用户在服务器上查看管理操作历史 + view_dashboard: 查看仪表板 + view_dashboard_description: 允许用户访问仪表盘和各种指标 rules: add_new: 添加规则 delete: 删除 @@ -823,7 +883,11 @@ zh-CN: webhooks: delete: 删除 disable: 禁用 + disabled: 已禁用 enable: 启用 + status: 状态 + title: 网钩 + webhook: 网钩 admin_mailer: new_appeal: actions: @@ -1084,8 +1148,11 @@ zh-CN: index: delete: 删除 empty: 你没有过滤器。 + keywords: + other: "%{count} 关键词" title: 过滤器 new: + save: 保存新过滤器 title: 添加新的过滤器 footer: developers: 开发者 @@ -1202,6 +1269,8 @@ zh-CN: copy_account_note_text: 这个用户迁移自 %{acct},你曾为其添加备注: notification_mailer: admin: + report: + subject: "%{name} 提交了报告" sign_up: subject: "%{name} 注册了" digest: From 726931fe4a8202c64fd1a72a6043f80fe075fda7 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 20 Jul 2022 17:06:52 +0200 Subject: [PATCH 125/646] Fix /api/v1/tags/:id route constraints (#18854) The constraint was applied prior to decoding, and rejected anything containing the '%' character, which would be used for anything with non-ASCII unicode characters. --- app/controllers/api/v1/tags_controller.rb | 1 + config/routes.rb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/v1/tags_controller.rb b/app/controllers/api/v1/tags_controller.rb index d45015ff5a0..9e5c53330a5 100644 --- a/app/controllers/api/v1/tags_controller.rb +++ b/app/controllers/api/v1/tags_controller.rb @@ -24,6 +24,7 @@ class Api::V1::TagsController < Api::BaseController private def set_or_create_tag + return not_found unless /\A(#{Tag::HASHTAG_NAME_RE})\z/.match?(params[:id]) @tag = Tag.find_normalized(params[:id]) || Tag.new(name: Tag.normalize(params[:id]), display_name: params[:id]) end end diff --git a/config/routes.rb b/config/routes.rb index 7a902b1f032..7dc9f391db2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -530,7 +530,7 @@ Rails.application.routes.draw do resource :note, only: :create, controller: 'accounts/notes' end - resources :tags, only: [:show], constraints: { id: /#{Tag::HASHTAG_NAME_RE}/ } do + resources :tags, only: [:show] do member do post :follow post :unfollow From f5d8501138c2bb0058cca41fd76f2c8d9a7593ab Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 22 Jul 2022 03:17:41 +0200 Subject: [PATCH 126/646] Change hashtag numbers to have clearer labels in web UI (#18864) --- app/javascript/mastodon/components/hashtag.js | 18 ++++++++++++------ .../mastodon/locales/defaultMessages.json | 8 ++++++-- app/javascript/mastodon/locales/en.json | 3 ++- app/javascript/styles/mastodon/components.scss | 7 +++++++ 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/app/javascript/mastodon/components/hashtag.js b/app/javascript/mastodon/components/hashtag.js index 7f442d189ca..4e9cd3569c0 100644 --- a/app/javascript/mastodon/components/hashtag.js +++ b/app/javascript/mastodon/components/hashtag.js @@ -1,7 +1,7 @@ // @ts-check import React from 'react'; import { Sparklines, SparklinesCurve } from 'react-sparklines'; -import { FormattedMessage } from 'react-intl'; +import { FormattedMessage, injectIntl, defineMessages } from 'react-intl'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import Permalink from './permalink'; @@ -9,6 +9,10 @@ import ShortNumber from 'mastodon/components/short_number'; import Skeleton from 'mastodon/components/skeleton'; import classNames from 'classnames'; +const messages = defineMessages({ + totalVolume: { id: 'hashtag.total_volume', defaultMessage: 'Total volume in the last {days, plural, one {day} other {{days} days}}' }, +}); + class SilentErrorBoundary extends React.Component { static propTypes = { @@ -41,10 +45,11 @@ class SilentErrorBoundary extends React.Component { export const accountsCountRenderer = (displayNumber, pluralReady) => ( {displayNumber}
    , + days: 2, }} /> ); @@ -64,7 +69,7 @@ ImmutableHashtag.propTypes = { hashtag: ImmutablePropTypes.map.isRequired, }; -const Hashtag = ({ name, href, to, people, uses, history, className }) => ( +const Hashtag = injectIntl(({ name, href, to, people, uses, history, className, intl }) => (
    @@ -74,9 +79,10 @@ const Hashtag = ({ name, href, to, people, uses, history, className }) => ( {typeof people !== 'undefined' ? : }
    -
    + {typeof uses !== 'undefined' ? : } -
    + * +
    @@ -86,7 +92,7 @@ const Hashtag = ({ name, href, to, people, uses, history, className }) => (
    -); +)); Hashtag.propTypes = { name: PropTypes.string, diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index 28618104a53..d86cddc9bf1 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -290,7 +290,11 @@ { "descriptors": [ { - "defaultMessage": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "defaultMessage": "Total volume in the last {days, plural, one {day} other {{days} days}}", + "id": "hashtag.total_volume" + }, + { + "defaultMessage": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "id": "trends.counter_by_accounts" } ], @@ -3752,4 +3756,4 @@ ], "path": "app/javascript/mastodon/features/video/index.json" } -] \ No newline at end of file +] diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index b6bc2ac976b..c668cefc6fe 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -220,6 +220,7 @@ "hashtag.column_settings.tag_mode.any": "Any of these", "hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_toggle": "Include additional tags for this column", + "hashtag.total_volume": "Total volume in the last {days, plural, one {day} other {{days} days}}", "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", @@ -517,7 +518,7 @@ "timeline_hint.resources.followers": "Followers", "timeline_hint.resources.follows": "Follows", "timeline_hint.resources.statuses": "Older posts", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking", + "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}", "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "units.short.billion": "{count}B", diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 19d3f2426bc..3e202841b09 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -7243,6 +7243,13 @@ noscript { padding-right: 15px; margin-left: 5px; color: $secondary-text-color; + text-decoration: none; + + &__asterisk { + color: $darker-text-color; + font-size: 18px; + vertical-align: super; + } } &__sparkline { From 76ff45230630c32dd01fd45c89557e092a81b27f Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 22 Jul 2022 03:17:56 +0200 Subject: [PATCH 127/646] Fix unicode regression in #18809 (#18863) --- app/models/account.rb | 2 +- app/models/tag.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/account.rb b/app/models/account.rb index fe77eaec457..628692d22e3 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -62,7 +62,7 @@ class Account < ApplicationRecord ) USERNAME_RE = /[a-z0-9_]+([a-z0-9_\.-]+[a-z0-9_]+)?/i - MENTION_RE = /(?<=^|[^\/[:word:]])@((#{USERNAME_RE})(?:@[[:alnum:]\.\-]+[[:alnum:]]+)?)/i + MENTION_RE = /(?<=^|[^\/[:word:]])@((#{USERNAME_RE})(?:@[[:word:]\.\-]+[[:word:]]+)?)/i URL_PREFIX_RE = /\Ahttp(s?):\/\/[^\/]+/ include Attachmentable diff --git a/app/models/tag.rb b/app/models/tag.rb index eebf3b47dde..8929baf66f0 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -27,7 +27,7 @@ class Tag < ApplicationRecord has_many :followers, through: :passive_relationships, source: :account HASHTAG_SEPARATORS = "_\u00B7\u200c" - HASHTAG_NAME_RE = "([[:alnum:]_][[:alnum:]#{HASHTAG_SEPARATORS}]*[[:alpha:]#{HASHTAG_SEPARATORS}][[:alnum:]#{HASHTAG_SEPARATORS}]*[[:alnum:]_])|([[:alnum:]_]*[[:alpha:]][[:alnum:]_]*)" + HASHTAG_NAME_RE = "([[:word:]_][[:word:]#{HASHTAG_SEPARATORS}]*[[:alpha:]#{HASHTAG_SEPARATORS}][[:word:]#{HASHTAG_SEPARATORS}]*[[:word:]_])|([[:word:]_]*[[:alpha:]][[:word:]_]*)" HASHTAG_RE = /(?:^|[^\/\)\w])#(#{HASHTAG_NAME_RE})/i validates :name, presence: true, format: { with: /\A(#{HASHTAG_NAME_RE})\z/i } From 9608e720a4e5f977c0e2db0de7b264574b0ddeac Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 22 Jul 2022 15:52:06 +0200 Subject: [PATCH 128/646] Add ability to follow hashtags in web UI (#18862) --- app/javascript/mastodon/actions/tags.js | 92 +++++++++++++++++++ .../features/hashtag_timeline/index.js | 87 ++++++++++++++---- app/javascript/mastodon/reducers/index.js | 2 + app/javascript/mastodon/reducers/tags.js | 25 +++++ 4 files changed, 188 insertions(+), 18 deletions(-) create mode 100644 app/javascript/mastodon/actions/tags.js create mode 100644 app/javascript/mastodon/reducers/tags.js diff --git a/app/javascript/mastodon/actions/tags.js b/app/javascript/mastodon/actions/tags.js new file mode 100644 index 00000000000..216e5b54133 --- /dev/null +++ b/app/javascript/mastodon/actions/tags.js @@ -0,0 +1,92 @@ +import api from '../api'; + +export const HASHTAG_FETCH_REQUEST = 'HASHTAG_FETCH_REQUEST'; +export const HASHTAG_FETCH_SUCCESS = 'HASHTAG_FETCH_SUCCESS'; +export const HASHTAG_FETCH_FAIL = 'HASHTAG_FETCH_FAIL'; + +export const HASHTAG_FOLLOW_REQUEST = 'HASHTAG_FOLLOW_REQUEST'; +export const HASHTAG_FOLLOW_SUCCESS = 'HASHTAG_FOLLOW_SUCCESS'; +export const HASHTAG_FOLLOW_FAIL = 'HASHTAG_FOLLOW_FAIL'; + +export const HASHTAG_UNFOLLOW_REQUEST = 'HASHTAG_UNFOLLOW_REQUEST'; +export const HASHTAG_UNFOLLOW_SUCCESS = 'HASHTAG_UNFOLLOW_SUCCESS'; +export const HASHTAG_UNFOLLOW_FAIL = 'HASHTAG_UNFOLLOW_FAIL'; + +export const fetchHashtag = name => (dispatch, getState) => { + dispatch(fetchHashtagRequest()); + + api(getState).get(`/api/v1/tags/${name}`).then(({ data }) => { + dispatch(fetchHashtagSuccess(name, data)); + }).catch(err => { + dispatch(fetchHashtagFail(err)); + }); +}; + +export const fetchHashtagRequest = () => ({ + type: HASHTAG_FETCH_REQUEST, +}); + +export const fetchHashtagSuccess = (name, tag) => ({ + type: HASHTAG_FETCH_SUCCESS, + name, + tag, +}); + +export const fetchHashtagFail = error => ({ + type: HASHTAG_FETCH_FAIL, + error, +}); + +export const followHashtag = name => (dispatch, getState) => { + dispatch(followHashtagRequest(name)); + + api(getState).post(`/api/v1/tags/${name}/follow`).then(({ data }) => { + dispatch(followHashtagSuccess(name, data)); + }).catch(err => { + dispatch(followHashtagFail(name, err)); + }); +}; + +export const followHashtagRequest = name => ({ + type: HASHTAG_FOLLOW_REQUEST, + name, +}); + +export const followHashtagSuccess = (name, tag) => ({ + type: HASHTAG_FOLLOW_SUCCESS, + name, + tag, +}); + +export const followHashtagFail = (name, error) => ({ + type: HASHTAG_FOLLOW_FAIL, + name, + error, +}); + +export const unfollowHashtag = name => (dispatch, getState) => { + dispatch(unfollowHashtagRequest(name)); + + api(getState).post(`/api/v1/tags/${name}/unfollow`).then(({ data }) => { + dispatch(unfollowHashtagSuccess(name, data)); + }).catch(err => { + dispatch(unfollowHashtagFail(name, err)); + }); +}; + +export const unfollowHashtagRequest = name => ({ + type: HASHTAG_FETCH_REQUEST, + name, +}); + +export const unfollowHashtagSuccess = (name, tag) => ({ + type: HASHTAG_FETCH_SUCCESS, + name, + tag, +}); + +export const unfollowHashtagFail = (name, error) => ({ + type: HASHTAG_FETCH_FAIL, + name, + error, +}); diff --git a/app/javascript/mastodon/features/hashtag_timeline/index.js b/app/javascript/mastodon/features/hashtag_timeline/index.js index 6a808eb306c..dc8a6164099 100644 --- a/app/javascript/mastodon/features/hashtag_timeline/index.js +++ b/app/javascript/mastodon/features/hashtag_timeline/index.js @@ -1,21 +1,32 @@ import React from 'react'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; +import ImmutablePropTypes from 'react-immutable-proptypes'; import StatusListContainer from '../ui/containers/status_list_container'; -import Column from '../../components/column'; -import ColumnHeader from '../../components/column_header'; +import Column from 'mastodon/components/column'; +import ColumnHeader from 'mastodon/components/column_header'; import ColumnSettingsContainer from './containers/column_settings_container'; -import { expandHashtagTimeline, clearTimeline } from '../../actions/timelines'; -import { addColumn, removeColumn, moveColumn } from '../../actions/columns'; -import { FormattedMessage } from 'react-intl'; -import { connectHashtagStream } from '../../actions/streaming'; +import { expandHashtagTimeline, clearTimeline } from 'mastodon/actions/timelines'; +import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; +import { injectIntl, FormattedMessage, defineMessages } from 'react-intl'; +import { connectHashtagStream } from 'mastodon/actions/streaming'; import { isEqual } from 'lodash'; +import { fetchHashtag, followHashtag, unfollowHashtag } from 'mastodon/actions/tags'; +import Icon from 'mastodon/components/icon'; +import classNames from 'classnames'; + +const messages = defineMessages({ + followHashtag: { id: 'hashtag.follow', defaultMessage: 'Follow hashtag' }, + unfollowHashtag: { id: 'hashtag.unfollow', defaultMessage: 'Unfollow hashtag' }, +}); const mapStateToProps = (state, props) => ({ hasUnread: state.getIn(['timelines', `hashtag:${props.params.id}${props.params.local ? ':local' : ''}`, 'unread']) > 0, + tag: state.getIn(['tags', props.params.id]), }); export default @connect(mapStateToProps) +@injectIntl class HashtagTimeline extends React.PureComponent { disconnects = []; @@ -25,7 +36,9 @@ class HashtagTimeline extends React.PureComponent { columnId: PropTypes.string, dispatch: PropTypes.func.isRequired, hasUnread: PropTypes.bool, + tag: ImmutablePropTypes.map, multiColumn: PropTypes.bool, + intl: PropTypes.object, }; handlePin = () => { @@ -39,7 +52,8 @@ class HashtagTimeline extends React.PureComponent { } title = () => { - let title = [this.props.params.id]; + const { id } = this.props.params; + const title = [id]; if (this.additionalFor('any')) { title.push(' ', ); @@ -95,23 +109,34 @@ class HashtagTimeline extends React.PureComponent { this.disconnects = []; } - componentDidMount () { + _unload () { + const { dispatch } = this.props; + const { id, local } = this.props.params; + + this._unsubscribe(); + dispatch(clearTimeline(`hashtag:${id}${local ? ':local' : ''}`)); + } + + _load() { const { dispatch } = this.props; const { id, tags, local } = this.props.params; this._subscribe(dispatch, id, tags, local); dispatch(expandHashtagTimeline(id, { tags, local })); + dispatch(fetchHashtag(id)); } - componentWillReceiveProps (nextProps) { - const { dispatch, params } = this.props; - const { id, tags, local } = nextProps.params; + componentDidMount () { + this._load(); + } + + componentDidUpdate (prevProps) { + const { params } = this.props; + const { id, tags, local } = prevProps.params; if (id !== params.id || !isEqual(tags, params.tags) || !isEqual(local, params.local)) { - this._unsubscribe(); - this._subscribe(dispatch, id, tags, local); - dispatch(clearTimeline(`hashtag:${id}${local ? ':local' : ''}`)); - dispatch(expandHashtagTimeline(id, { tags, local })); + this._unload(); + this._load(); } } @@ -124,15 +149,40 @@ class HashtagTimeline extends React.PureComponent { } handleLoadMore = maxId => { - const { id, tags, local } = this.props.params; - this.props.dispatch(expandHashtagTimeline(id, { maxId, tags, local })); + const { dispatch, params } = this.props; + const { id, tags, local } = params; + + dispatch(expandHashtagTimeline(id, { maxId, tags, local })); + } + + handleFollow = () => { + const { dispatch, params, tag } = this.props; + const { id } = params; + + if (tag.get('following')) { + dispatch(unfollowHashtag(id)); + } else { + dispatch(followHashtag(id)); + } } render () { - const { hasUnread, columnId, multiColumn } = this.props; + const { hasUnread, columnId, multiColumn, tag, intl } = this.props; const { id, local } = this.props.params; const pinned = !!columnId; + let followButton; + + if (tag) { + const following = tag.get('following'); + + followButton = ( + + ); + } + return ( {columnId && } diff --git a/app/javascript/mastodon/reducers/index.js b/app/javascript/mastodon/reducers/index.js index 0219d8a5e1b..d3d0303dfcc 100644 --- a/app/javascript/mastodon/reducers/index.js +++ b/app/javascript/mastodon/reducers/index.js @@ -39,6 +39,7 @@ import markers from './markers'; import picture_in_picture from './picture_in_picture'; import accounts_map from './accounts_map'; import history from './history'; +import tags from './tags'; const reducers = { announcements, @@ -81,6 +82,7 @@ const reducers = { markers, picture_in_picture, history, + tags, }; export default combineReducers(reducers); diff --git a/app/javascript/mastodon/reducers/tags.js b/app/javascript/mastodon/reducers/tags.js new file mode 100644 index 00000000000..d24098e3941 --- /dev/null +++ b/app/javascript/mastodon/reducers/tags.js @@ -0,0 +1,25 @@ +import { + HASHTAG_FETCH_SUCCESS, + HASHTAG_FOLLOW_REQUEST, + HASHTAG_FOLLOW_FAIL, + HASHTAG_UNFOLLOW_REQUEST, + HASHTAG_UNFOLLOW_FAIL, +} from 'mastodon/actions/tags'; +import { Map as ImmutableMap, fromJS } from 'immutable'; + +const initialState = ImmutableMap(); + +export default function tags(state = initialState, action) { + switch(action.type) { + case HASHTAG_FETCH_SUCCESS: + return state.set(action.name, fromJS(action.tag)); + case HASHTAG_FOLLOW_REQUEST: + case HASHTAG_UNFOLLOW_FAIL: + return state.setIn([action.name, 'following'], true); + case HASHTAG_FOLLOW_FAIL: + case HASHTAG_UNFOLLOW_REQUEST: + return state.setIn([action.name, 'following'], false); + default: + return state; + } +}; From 969d805e86dfa458eb21c7a45954f00a7f81df03 Mon Sep 17 00:00:00 2001 From: Yamagishi Kazutoshi Date: Wed, 20 Jul 2022 20:56:44 +0900 Subject: [PATCH 129/646] [Glitch] Bump react-redux-loading-bar from 4.0.8 to 5.0.4 Port d5ca204e89377ebce72a06eaf318c9ff848b2187 to glitch-soc Signed-off-by: Claire --- .../features/ui/components/image_loader.js | 26 +++++++++++-------- .../glitch/styles/components/index.scss | 6 ++++- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/app/javascript/flavours/glitch/features/ui/components/image_loader.js b/app/javascript/flavours/glitch/features/ui/components/image_loader.js index c6f16a79237..dfa0efe49b7 100644 --- a/app/javascript/flavours/glitch/features/ui/components/image_loader.js +++ b/app/javascript/flavours/glitch/features/ui/components/image_loader.js @@ -1,10 +1,10 @@ -import React from 'react'; -import PropTypes from 'prop-types'; import classNames from 'classnames'; +import PropTypes from 'prop-types'; +import React, { PureComponent } from 'react'; import { LoadingBar } from 'react-redux-loading-bar'; import ZoomableImage from './zoomable_image'; -export default class ImageLoader extends React.PureComponent { +export default class ImageLoader extends PureComponent { static propTypes = { alt: PropTypes.string, @@ -43,7 +43,7 @@ export default class ImageLoader extends React.PureComponent { this.loadImage(this.props); } - componentWillReceiveProps (nextProps) { + UNSAFE_componentWillReceiveProps (nextProps) { if (this.props.src !== nextProps.src) { this.loadImage(nextProps); } @@ -139,14 +139,18 @@ export default class ImageLoader extends React.PureComponent { return (
    - {loading ? ( - + <> +
    + +
    + + ) : ( Date: Fri, 22 Jul 2022 03:17:41 +0200 Subject: [PATCH 130/646] [Glitch] Change hashtag numbers to have clearer labels in web UI Port f5d8501138c2bb0058cca41fd76f2c8d9a7593ab to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/components/hashtag.js | 18 ++++++++++++------ .../glitch/styles/components/search.scss | 7 +++++++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/app/javascript/flavours/glitch/components/hashtag.js b/app/javascript/flavours/glitch/components/hashtag.js index 769185a2b5b..5bbf32c87eb 100644 --- a/app/javascript/flavours/glitch/components/hashtag.js +++ b/app/javascript/flavours/glitch/components/hashtag.js @@ -1,7 +1,7 @@ // @ts-check import React from 'react'; import { Sparklines, SparklinesCurve } from 'react-sparklines'; -import { FormattedMessage } from 'react-intl'; +import { FormattedMessage, injectIntl, defineMessages } from 'react-intl'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import Permalink from './permalink'; @@ -9,6 +9,10 @@ import ShortNumber from 'flavours/glitch/components/short_number'; import Skeleton from 'flavours/glitch/components/skeleton'; import classNames from 'classnames'; +const messages = defineMessages({ + totalVolume: { id: 'hashtag.total_volume', defaultMessage: 'Total volume in the last {days, plural, one {day} other {{days} days}}' }, +}); + class SilentErrorBoundary extends React.Component { static propTypes = { @@ -41,10 +45,11 @@ class SilentErrorBoundary extends React.Component { const accountsCountRenderer = (displayNumber, pluralReady) => ( {displayNumber}, + days: 2, }} /> ); @@ -64,7 +69,7 @@ ImmutableHashtag.propTypes = { hashtag: ImmutablePropTypes.map.isRequired, }; -const Hashtag = ({ name, href, to, people, uses, history, className }) => ( +const Hashtag = injectIntl(({ name, href, to, people, uses, history, className, intl }) => (
    @@ -74,9 +79,10 @@ const Hashtag = ({ name, href, to, people, uses, history, className }) => ( {typeof people !== 'undefined' ? : }
    -
    + {typeof uses !== 'undefined' ? : } -
    + * +
    @@ -86,7 +92,7 @@ const Hashtag = ({ name, href, to, people, uses, history, className }) => (
    -); +)); Hashtag.propTypes = { name: PropTypes.string, diff --git a/app/javascript/flavours/glitch/styles/components/search.scss b/app/javascript/flavours/glitch/styles/components/search.scss index f7415368b82..17a34db62e3 100644 --- a/app/javascript/flavours/glitch/styles/components/search.scss +++ b/app/javascript/flavours/glitch/styles/components/search.scss @@ -176,6 +176,13 @@ padding-right: 15px; margin-left: 5px; color: $secondary-text-color; + text-decoration: none; + + &__asterisk { + color: $darker-text-color; + font-size: 18px; + vertical-align: super; + } } &__sparkline { From 3f4e27ab6f33ab1a18954a3046e6e9abdc2d5e12 Mon Sep 17 00:00:00 2001 From: Claire Date: Sun, 24 Jul 2022 11:10:49 +0200 Subject: [PATCH 131/646] Add local setting toggle to move media attachments outside CWs Fixes #1812 --- .../flavours/glitch/components/status.js | 30 ++++++++++++++----- .../features/local_settings/page/index.js | 9 ++++++ .../status/components/detailed_status.js | 27 +++++++++++++---- .../glitch/reducers/local_settings.js | 3 +- 4 files changed, 55 insertions(+), 14 deletions(-) diff --git a/app/javascript/flavours/glitch/components/status.js b/app/javascript/flavours/glitch/components/status.js index 8a5fda67644..d3bdcdc9146 100644 --- a/app/javascript/flavours/glitch/components/status.js +++ b/app/javascript/flavours/glitch/components/status.js @@ -508,8 +508,21 @@ class Status extends ImmutablePureComponent { const { isExpanded, isCollapsed, forceFilter } = this.state; let background = null; let attachments = null; - let media = []; - let mediaIcons = []; + + // Depending on user settings, some media are considered as parts of the + // contents (affected by CW) while other will be displayed outside of the + // CW. + let contentMedia = []; + let contentMediaIcons = []; + let extraMedia = []; + let extraMediaIcons = []; + let media = contentMedia; + let mediaIcons = contentMediaIcons; + + if (settings.getIn(['content_warnings', 'media_outside'])) { + media = extraMedia; + mediaIcons = extraMediaIcons; + } if (status === null) { return null; @@ -681,8 +694,8 @@ class Status extends ImmutablePureComponent { } if (status.get('poll')) { - media.push(); - mediaIcons.push('tasks'); + contentMedia.push(); + contentMediaIcons.push('tasks'); } // Here we prepare extra data-* attributes for CSS selectors. @@ -748,7 +761,7 @@ class Status extends ImmutablePureComponent { + + {extraMedia} + {!isCollapsed || !(muted || !settings.getIn(['collapsed', 'show_action_bar'])) ? ( (

    + + + + ); - mediaIcons.push('tasks'); + contentMedia.push(); + contentMediaIcons.push('tasks'); } if (status.get('application')) { @@ -282,8 +295,8 @@ class DetailedStatus extends ImmutablePureComponent { + {extraMedia} +
    diff --git a/app/javascript/flavours/glitch/reducers/local_settings.js b/app/javascript/flavours/glitch/reducers/local_settings.js index d4cdc124f0f..6d8feaf66fa 100644 --- a/app/javascript/flavours/glitch/reducers/local_settings.js +++ b/app/javascript/flavours/glitch/reducers/local_settings.js @@ -25,7 +25,8 @@ const initialState = ImmutableMap({ tag_misleading_links: true, rewrite_mentions: 'no', content_warnings : ImmutableMap({ - filter : null, + filter : null, + media_outside: false, }), collapsed : ImmutableMap({ enabled : true, From db5b44330d3139132645fda99682caa15aae2768 Mon Sep 17 00:00:00 2001 From: Claire Date: Sun, 24 Jul 2022 11:11:38 +0200 Subject: [PATCH 132/646] Add explanation for some options in the local settings dialog --- .../flavours/glitch/features/local_settings/page/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/javascript/flavours/glitch/features/local_settings/page/index.js b/app/javascript/flavours/glitch/features/local_settings/page/index.js index 44d0221c666..2f16ed50c4f 100644 --- a/app/javascript/flavours/glitch/features/local_settings/page/index.js +++ b/app/javascript/flavours/glitch/features/local_settings/page/index.js @@ -375,6 +375,7 @@ class LocalSettingsPage extends React.PureComponent { onChange={onChange} > + +
    From a5f81e1abd82cb66e590b73af83c720d6410fafd Mon Sep 17 00:00:00 2001 From: Claire Date: Sun, 24 Jul 2022 13:16:03 +0200 Subject: [PATCH 133/646] Improve interaction between out-of-CW attachments and collapsed toots --- app/javascript/flavours/glitch/components/status.js | 3 +-- app/javascript/flavours/glitch/components/status_content.js | 6 ++++++ .../glitch/features/status/components/detailed_status.js | 3 +-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/javascript/flavours/glitch/components/status.js b/app/javascript/flavours/glitch/components/status.js index d3bdcdc9146..219f7de7abf 100644 --- a/app/javascript/flavours/glitch/components/status.js +++ b/app/javascript/flavours/glitch/components/status.js @@ -771,6 +771,7 @@ class Status extends ImmutablePureComponent { - {extraMedia} - {!isCollapsed || !(muted || !settings.getIn(['collapsed', 'show_action_bar'])) ? ( + {extraMedia} +
    ); } else if (parseClick) { @@ -372,6 +376,7 @@ export default class StatusContent extends React.PureComponent { lang={lang} /> {media} + {extraMedia}
    ); } else { @@ -391,6 +396,7 @@ export default class StatusContent extends React.PureComponent { lang={lang} /> {media} + {extraMedia}
- {!showResults && } + {!showResults && } {showResults && !this.props.disabled && · } {votesCount} {poll.get('expires_at') && · {timeRemaining}} diff --git a/app/javascript/mastodon/components/status_content.js b/app/javascript/mastodon/components/status_content.js index 43e938d4e3d..a88c5f08416 100644 --- a/app/javascript/mastodon/components/status_content.js +++ b/app/javascript/mastodon/components/status_content.js @@ -15,6 +15,7 @@ class StatusContent extends React.PureComponent { static contextTypes = { router: PropTypes.object, + identity: PropTypes.object, }; static propTypes = { @@ -180,7 +181,7 @@ class StatusContent extends React.PureComponent { const hidden = this.props.onExpandedToggle ? !this.props.expanded : this.state.hidden; const renderReadMore = this.props.onClick && status.get('collapsed'); const renderViewThread = this.props.showThread && status.get('in_reply_to_id') && status.get('in_reply_to_account_id') === status.getIn(['account', 'id']); - const renderTranslate = this.props.onTranslate && ['public', 'unlisted'].includes(status.get('visibility')) && status.get('contentHtml').length > 0 && intl.locale !== status.get('language'); + const renderTranslate = this.context.identity.signedIn && this.props.onTranslate && ['public', 'unlisted'].includes(status.get('visibility')) && status.get('contentHtml').length > 0 && intl.locale !== status.get('language'); const language = preloadedLanguages.find(lang => lang[0] === status.get('language')); const languageName = language ? language[2] : status.get('language'); diff --git a/app/javascript/mastodon/features/ui/components/link_footer.js b/app/javascript/mastodon/features/ui/components/link_footer.js index 95cd6cf8ea2..8817bb6c166 100644 --- a/app/javascript/mastodon/features/ui/components/link_footer.js +++ b/app/javascript/mastodon/features/ui/components/link_footer.js @@ -56,7 +56,7 @@ class LinkFooter extends React.PureComponent { items.push(); } - if (withHotkeys) { + if (signedIn && withHotkeys) { items.push(); } diff --git a/app/javascript/mastodon/features/ui/components/sign_in_banner.js b/app/javascript/mastodon/features/ui/components/sign_in_banner.js index c8403a8adbd..5ff4ee2a868 100644 --- a/app/javascript/mastodon/features/ui/components/sign_in_banner.js +++ b/app/javascript/mastodon/features/ui/components/sign_in_banner.js @@ -1,10 +1,12 @@ import React from 'react'; import { FormattedMessage } from 'react-intl'; +import { registrationsOpen } from 'mastodon/initial_state'; const SignInBanner = () => (

+
); diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js index 9cc75b6cbf2..81607a03b2d 100644 --- a/app/javascript/mastodon/initial_state.js +++ b/app/javascript/mastodon/initial_state.js @@ -14,6 +14,7 @@ export const deleteModal = getMeta('delete_modal'); export const me = getMeta('me'); export const searchEnabled = getMeta('search_enabled'); export const limitedFederationMode = getMeta('limited_federation_mode'); +export const registrationsOpen = getMeta('registrations_open'); export const repository = getMeta('repository'); export const source_url = getMeta('source_url'); export const version = getMeta('version'); diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 1f1a5a5ca2f..87ec6bb8a90 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -134,6 +134,26 @@ } } + &.button-tertiary { + background: transparent; + padding: 6px 17px; + color: $highlight-text-color; + border: 1px solid $highlight-text-color; + + &:active, + &:focus, + &:hover { + background: $ui-highlight-color; + color: $primary-text-color; + border: 0; + padding: 7px 18px; + } + + &:disabled { + opacity: 0.5; + } + } + &.button--block { display: block; width: 100%; @@ -708,6 +728,10 @@ color: $darker-text-color; margin-bottom: 20px; } + + .button { + margin-bottom: 10px; + } } .emojione { @@ -3671,6 +3695,11 @@ a.status-card.compact:hover { background: lighten($ui-base-color, 8%); } } + + &:disabled { + color: $dark-text-color; + cursor: default; + } } .column-header__collapsible { diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb index df076ffc622..87f4db83d2a 100644 --- a/app/serializers/initial_state_serializer.rb +++ b/app/serializers/initial_state_serializer.rb @@ -26,6 +26,7 @@ class InitialStateSerializer < ActiveModel::Serializer mascot: instance_presenter.mascot&.file&.url, profile_directory: Setting.profile_directory, trends: Setting.trends, + registrations_open: Setting.registrations_mode != 'none' && !Rails.configuration.x.single_user_mode, } if object.current_account From 36f4c32a38ed85e5e658b34d36eac40a6147bc0c Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 29 Sep 2022 06:22:12 +0200 Subject: [PATCH 337/646] Change path of privacy policy page (#19249) --- app/controllers/about_controller.rb | 6 ++--- app/controllers/privacy_controller.rb | 22 +++++++++++++++++++ .../features/ui/components/link_footer.js | 2 +- app/views/layouts/public.html.haml | 5 ++--- .../show.html.haml} | 0 app/views/settings/deletes/show.html.haml | 2 +- .../confirmation_instructions.html.haml | 2 +- .../confirmation_instructions.text.erb | 4 ++-- config/locales/en.yml | 9 ++++---- config/routes.rb | 4 +++- spec/controllers/about_controller_spec.rb | 10 --------- 11 files changed, 38 insertions(+), 28 deletions(-) create mode 100644 app/controllers/privacy_controller.rb rename app/views/{about/terms.html.haml => privacy/show.html.haml} (100%) diff --git a/app/controllers/about_controller.rb b/app/controllers/about_controller.rb index d7e78d6b917..4fc2fbe3401 100644 --- a/app/controllers/about_controller.rb +++ b/app/controllers/about_controller.rb @@ -8,10 +8,10 @@ class AboutController < ApplicationController before_action :require_open_federation!, only: [:show, :more] before_action :set_body_classes, only: :show before_action :set_instance_presenter - before_action :set_expires_in, only: [:more, :terms] + before_action :set_expires_in, only: [:more] before_action :set_registration_form_time, only: :show - skip_before_action :require_functional!, only: [:more, :terms] + skip_before_action :require_functional!, only: [:more] def show; end @@ -26,8 +26,6 @@ class AboutController < ApplicationController @blocks = DomainBlock.with_user_facing_limitations.by_severity if display_blocks? end - def terms; end - helper_method :display_blocks? helper_method :display_blocks_rationale? helper_method :public_fetch_mode? diff --git a/app/controllers/privacy_controller.rb b/app/controllers/privacy_controller.rb new file mode 100644 index 00000000000..ced84dbe5e2 --- /dev/null +++ b/app/controllers/privacy_controller.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +class PrivacyController < ApplicationController + layout 'public' + + before_action :set_instance_presenter + before_action :set_expires_in + + skip_before_action :require_functional! + + def show; end + + private + + def set_instance_presenter + @instance_presenter = InstancePresenter.new + end + + def set_expires_in + expires_in 0, public: true + end +end diff --git a/app/javascript/mastodon/features/ui/components/link_footer.js b/app/javascript/mastodon/features/ui/components/link_footer.js index 8817bb6c166..dd05d03dd93 100644 --- a/app/javascript/mastodon/features/ui/components/link_footer.js +++ b/app/javascript/mastodon/features/ui/components/link_footer.js @@ -73,7 +73,7 @@ class LinkFooter extends React.PureComponent { } items.push(); - items.push(); + items.push(); if (signedIn) { items.push(); diff --git a/app/views/layouts/public.html.haml b/app/views/layouts/public.html.haml index 83640de1a9d..14f86c97079 100644 --- a/app/views/layouts/public.html.haml +++ b/app/views/layouts/public.html.haml @@ -33,8 +33,7 @@ .column-0 %h4= t 'footer.resources' %ul - %li= link_to t('about.terms'), terms_path - %li= link_to t('about.privacy_policy'), terms_path + %li= link_to t('about.privacy_policy'), privacy_policy_path .column-1 %h4= t 'footer.developers' %ul @@ -57,6 +56,6 @@ .legal-xs = link_to "v#{Mastodon::Version.to_s}", Mastodon::Version.source_url · - = link_to t('about.privacy_policy'), terms_path + = link_to t('about.privacy_policy'), privacy_policy_path = render template: 'layouts/application' diff --git a/app/views/about/terms.html.haml b/app/views/privacy/show.html.haml similarity index 100% rename from app/views/about/terms.html.haml rename to app/views/privacy/show.html.haml diff --git a/app/views/settings/deletes/show.html.haml b/app/views/settings/deletes/show.html.haml index 08792e0afde..ddf0908794e 100644 --- a/app/views/settings/deletes/show.html.haml +++ b/app/views/settings/deletes/show.html.haml @@ -16,7 +16,7 @@ %li.positive-hint= t('deletes.warning.email_contact_html', email: Setting.site_contact_email) %li.positive-hint= t('deletes.warning.username_available') - %p.hint= t('deletes.warning.more_details_html', terms_path: terms_path) + %p.hint= t('deletes.warning.more_details_html', terms_path: privacy_policy_path) %hr.spacer/ diff --git a/app/views/user_mailer/confirmation_instructions.html.haml b/app/views/user_mailer/confirmation_instructions.html.haml index 39a83faff83..447e689b407 100644 --- a/app/views/user_mailer/confirmation_instructions.html.haml +++ b/app/views/user_mailer/confirmation_instructions.html.haml @@ -77,4 +77,4 @@ %tbody %tr %td.column-cell.text-center - %p= t 'devise.mailer.confirmation_instructions.extra_html', terms_path: about_more_url, policy_path: terms_url + %p= t 'devise.mailer.confirmation_instructions.extra_html', terms_path: about_more_url, policy_path: privacy_policy_url diff --git a/app/views/user_mailer/confirmation_instructions.text.erb b/app/views/user_mailer/confirmation_instructions.text.erb index aad91cd9d6a..a1b2ba7d2e4 100644 --- a/app/views/user_mailer/confirmation_instructions.text.erb +++ b/app/views/user_mailer/confirmation_instructions.text.erb @@ -6,7 +6,7 @@ => <%= confirmation_url(@resource, confirmation_token: @token, redirect_to_app: @resource.created_by_application ? 'true' : nil) %> -<%= strip_tags(t('devise.mailer.confirmation_instructions.extra_html', terms_path: about_more_url, policy_path: terms_url)) %> +<%= strip_tags(t('devise.mailer.confirmation_instructions.extra_html', terms_path: about_more_url, policy_path: privacy_policy_url)) %> => <%= about_more_url %> -=> <%= terms_url %> +=> <%= privacy_policy_url %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 9f047f523a2..dd341e0c891 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -28,7 +28,7 @@ en: learn_more: Learn more logged_in_as_html: You are currently logged in as %{username}. logout_before_registering: You are already logged in. - privacy_policy: Privacy policy + privacy_policy: Privacy Policy rules: Server rules rules_html: 'Below is a summary of rules you need to follow if you want to have an account on this server of Mastodon:' see_whats_happening: See what's happening @@ -39,7 +39,6 @@ en: other: posts status_count_before: Who published tagline: Decentralized social network - terms: Terms of service unavailable_content: Moderated servers unavailable_content_description: domain: Server @@ -797,8 +796,8 @@ en: desc_html: Displayed in sidebar and meta tags. Describe what Mastodon is and what makes this server special in a single paragraph. title: Short server description site_terms: - desc_html: You can write your own privacy policy, terms of service or other legalese. You can use HTML tags - title: Custom terms of service + desc_html: You can write your own privacy policy. You can use HTML tags + title: Custom privacy policy site_title: Server name thumbnail: desc_html: Used for previews via OpenGraph and API. 1200x630px recommended @@ -1720,7 +1719,7 @@ en:

This document is CC-BY-SA. It was last updated May 26, 2022.

Originally adapted from the Discourse privacy policy.

- title: "%{instance} Terms of Service and Privacy Policy" + title: "%{instance} Privacy Policy" themes: contrast: Mastodon (High contrast) default: Mastodon (Dark) diff --git a/config/routes.rb b/config/routes.rb index 9491c517770..5d0b3004bbb 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -640,7 +640,9 @@ Rails.application.routes.draw do get '/about', to: 'about#show' get '/about/more', to: 'about#more' - get '/terms', to: 'about#terms' + + get '/privacy-policy', to: 'privacy#show', as: :privacy_policy + get '/terms', to: redirect('/privacy-policy') match '/', via: [:post, :put, :patch, :delete], to: 'application#raise_not_found', format: false match '*unmatched_route', via: :all, to: 'application#raise_not_found', format: false diff --git a/spec/controllers/about_controller_spec.rb b/spec/controllers/about_controller_spec.rb index 03dddd8c134..40e395a647a 100644 --- a/spec/controllers/about_controller_spec.rb +++ b/spec/controllers/about_controller_spec.rb @@ -31,16 +31,6 @@ RSpec.describe AboutController, type: :controller do end end - describe 'GET #terms' do - before do - get :terms - end - - it 'returns http success' do - expect(response).to have_http_status(200) - end - end - describe 'helper_method :new_user' do it 'returns a new User' do user = @controller.view_context.new_user From c8245e64c5173f34401c562fe32551dcab8e68b7 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 29 Sep 2022 08:55:14 +0200 Subject: [PATCH 338/646] Fix wrong logo on start screen in web UI (#19254) --- .../mastodon/features/follow_recommendations/index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/follow_recommendations/index.js b/app/javascript/mastodon/features/follow_recommendations/index.js index b5a71aef5b3..32b55eeb37e 100644 --- a/app/javascript/mastodon/features/follow_recommendations/index.js +++ b/app/javascript/mastodon/features/follow_recommendations/index.js @@ -10,7 +10,6 @@ import { requestBrowserPermission } from 'mastodon/actions/notifications'; import { markAsPartial } from 'mastodon/actions/timelines'; import Column from 'mastodon/features/ui/components/column'; import Account from './components/account'; -import Logo from 'mastodon/components/logo'; import imageGreeting from 'mastodon/../images/elephant_ui_greeting.svg'; import Button from 'mastodon/components/button'; @@ -78,7 +77,10 @@ class FollowRecommendations extends ImmutablePureComponent {
- + + + +

From cf5d27c3b72742b0e59b0a45d0c088d37a9db051 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 29 Sep 2022 16:27:50 +0200 Subject: [PATCH 339/646] New Crowdin updates (#19252) * New translations en.yml (Thai) * New translations en.yml (Greek) * New translations en.yml (Afrikaans) * New translations en.json (Arabic) * New translations en.yml (Arabic) * New translations en.yml (Bulgarian) * New translations en.yml (Catalan) * New translations en.json (Danish) * New translations en.yml (Danish) * New translations en.json (Greek) * New translations en.json (Frisian) * New translations en.yml (Frisian) * New translations en.json (Basque) * New translations en.yml (Basque) * New translations en.json (Finnish) * New translations en.yml (Finnish) * New translations en.json (Irish) * New translations en.yml (Irish) * New translations en.yml (Hebrew) * New translations en.yml (Hungarian) * New translations en.json (Afrikaans) * New translations en.yml (French) * New translations en.json (Hebrew) * New translations en.json (Czech) * New translations en.json (Thai) * New translations en.yml (German) * New translations en.yml (Czech) * New translations en.yml (Chinese Simplified) * New translations en.yml (Ido) * New translations en.json (Bulgarian) * New translations en.json (Tamil) * New translations en.json (Esperanto) * New translations en.yml (Spanish) * New translations en.json (French) * New translations en.yml (Turkish) * New translations en.json (Dutch) * New translations en.yml (Albanian) * New translations en.yml (Ukrainian) * New translations en.json (Japanese) * New translations en.json (Indonesian) * New translations en.json (Sinhala) * New translations en.json (Romanian) * New translations en.yml (Romanian) * New translations en.json (Armenian) * New translations en.yml (Armenian) * New translations en.yml (Urdu (Pakistan)) * New translations en.yml (Serbian (Cyrillic)) * New translations en.json (Swedish) * New translations en.yml (Swedish) * New translations en.yml (Chinese Traditional) * New translations en.json (Urdu (Pakistan)) * New translations en.yml (Slovenian) * New translations en.yml (Vietnamese) * New translations en.json (Galician) * New translations en.yml (Galician) * New translations en.yml (Icelandic) * New translations en.json (Portuguese, Brazilian) * New translations en.yml (Portuguese, Brazilian) * New translations en.yml (Indonesian) * New translations en.json (Persian) * New translations en.yml (Persian) * New translations en.json (Serbian (Cyrillic)) * New translations en.yml (Dutch) * New translations en.yml (Italian) * New translations en.yml (Japanese) * New translations en.json (Georgian) * New translations en.yml (Georgian) * New translations en.yml (Korean) * New translations en.json (Lithuanian) * New translations en.yml (Lithuanian) * New translations en.json (Macedonian) * New translations en.yml (Macedonian) * New translations en.json (Norwegian) * New translations en.yml (Slovak) * New translations en.yml (Norwegian) * New translations en.json (Punjabi) * New translations en.yml (Punjabi) * New translations en.yml (Polish) * New translations en.yml (Portuguese) * New translations en.yml (Russian) * New translations en.json (Slovak) * New translations en.yml (Tamil) * New translations en.json (Breton) * New translations en.yml (Esperanto) * New translations en.json (Uyghur) * New translations en.yml (Uyghur) * New translations en.json (Chinese Traditional, Hong Kong) * New translations en.yml (Chinese Traditional, Hong Kong) * New translations en.json (Tatar) * New translations en.yml (Tatar) * New translations en.json (Malayalam) * New translations en.yml (Malayalam) * New translations en.yml (Breton) * New translations en.json (Welsh) * New translations en.yml (Sinhala) * New translations en.json (Cornish) * New translations en.yml (Cornish) * New translations en.json (Kannada) * New translations en.yml (Kannada) * New translations en.json (Scottish Gaelic) * New translations en.yml (Scottish Gaelic) * New translations en.json (Asturian) * New translations en.yml (Asturian) * New translations en.json (Occitan) * New translations en.yml (Welsh) * New translations en.yml (English, United Kingdom) * New translations en.yml (Spanish, Argentina) * New translations en.json (Kazakh) * New translations en.json (Spanish, Mexico) * New translations en.yml (Spanish, Mexico) * New translations en.json (Bengali) * New translations en.yml (Bengali) * New translations en.json (Marathi) * New translations en.yml (Marathi) * New translations en.json (Croatian) * New translations en.yml (Croatian) * New translations en.json (Norwegian Nynorsk) * New translations en.yml (Norwegian Nynorsk) * New translations en.yml (Kazakh) * New translations en.json (English, United Kingdom) * New translations en.json (Estonian) * New translations en.yml (Estonian) * New translations en.yml (Latvian) * New translations en.json (Hindi) * New translations en.yml (Hindi) * New translations en.json (Malay) * New translations en.yml (Malay) * New translations en.json (Telugu) * New translations en.yml (Telugu) * New translations en.yml (Occitan) * New translations en.json (Serbian (Latin)) * New translations en.json (Sardinian) * New translations en.yml (Kabyle) * New translations en.json (Kabyle) * New translations en.yml (Sanskrit) * New translations en.yml (Serbian (Latin)) * New translations en.yml (Sardinian) * New translations en.json (Sanskrit) * New translations en.yml (Corsican) * New translations en.json (Corsican) * New translations en.yml (Sorani (Kurdish)) * New translations en.json (Sorani (Kurdish)) * New translations en.yml (Kurmanji (Kurdish)) * New translations en.json (Taigi) * New translations en.yml (Taigi) * New translations en.json (Silesian) * New translations en.yml (Silesian) * New translations en.json (Standard Moroccan Tamazight) * New translations en.yml (Standard Moroccan Tamazight) * New translations en.yml (Ido) * New translations en.yml (Ukrainian) * New translations en.yml (Chinese Traditional) * New translations en.yml (Spanish, Argentina) * New translations en.yml (Catalan) * New translations en.yml (Greek) * New translations en.yml (Korean) * New translations en.json (Galician) * New translations en.yml (Galician) * New translations en.yml (Italian) * New translations en.yml (Chinese Simplified) * New translations en.yml (Albanian) * New translations en.yml (Russian) * New translations en.yml (Slovenian) * New translations en.yml (Polish) * New translations en.yml (Vietnamese) * New translations en.yml (Icelandic) * New translations en.yml (Latvian) * New translations en.yml (Czech) * New translations simple_form.en.yml (Czech) * New translations activerecord.en.yml (Czech) * New translations en.yml (Kurmanji (Kurdish)) * New translations en.yml (Turkish) * New translations en.yml (Danish) * New translations en.yml (Japanese) * Run `yarn manage:translations` * Run `bundle exec i18n-tasks normalize` Co-authored-by: Yamagishi Kazutoshi --- app/javascript/mastodon/locales/af.json | 6 ++- app/javascript/mastodon/locales/ar.json | 6 ++- app/javascript/mastodon/locales/ast.json | 6 ++- app/javascript/mastodon/locales/bg.json | 6 ++- app/javascript/mastodon/locales/bn.json | 6 ++- app/javascript/mastodon/locales/br.json | 6 ++- app/javascript/mastodon/locales/ca.json | 6 ++- app/javascript/mastodon/locales/ckb.json | 6 ++- app/javascript/mastodon/locales/co.json | 6 ++- app/javascript/mastodon/locales/cs.json | 6 ++- app/javascript/mastodon/locales/cy.json | 6 ++- app/javascript/mastodon/locales/da.json | 6 ++- app/javascript/mastodon/locales/de.json | 6 ++- .../mastodon/locales/defaultMessages.json | 52 ++++++++++++++++++- app/javascript/mastodon/locales/el.json | 6 ++- app/javascript/mastodon/locales/en-GB.json | 6 ++- app/javascript/mastodon/locales/en.json | 6 ++- app/javascript/mastodon/locales/eo.json | 6 ++- app/javascript/mastodon/locales/es-AR.json | 6 ++- app/javascript/mastodon/locales/es-MX.json | 8 ++- app/javascript/mastodon/locales/es.json | 6 ++- app/javascript/mastodon/locales/et.json | 6 ++- app/javascript/mastodon/locales/eu.json | 6 ++- app/javascript/mastodon/locales/fa.json | 6 ++- app/javascript/mastodon/locales/fi.json | 6 ++- app/javascript/mastodon/locales/fr.json | 6 ++- app/javascript/mastodon/locales/fy.json | 6 ++- app/javascript/mastodon/locales/ga.json | 6 ++- app/javascript/mastodon/locales/gd.json | 6 ++- app/javascript/mastodon/locales/gl.json | 12 +++-- app/javascript/mastodon/locales/he.json | 6 ++- app/javascript/mastodon/locales/hi.json | 6 ++- app/javascript/mastodon/locales/hr.json | 6 ++- app/javascript/mastodon/locales/hu.json | 6 ++- app/javascript/mastodon/locales/hy.json | 6 ++- app/javascript/mastodon/locales/id.json | 6 ++- app/javascript/mastodon/locales/io.json | 6 ++- app/javascript/mastodon/locales/is.json | 6 ++- app/javascript/mastodon/locales/it.json | 6 ++- app/javascript/mastodon/locales/ja.json | 6 ++- app/javascript/mastodon/locales/ka.json | 6 ++- app/javascript/mastodon/locales/kab.json | 6 ++- app/javascript/mastodon/locales/kk.json | 6 ++- app/javascript/mastodon/locales/kn.json | 6 ++- app/javascript/mastodon/locales/ko.json | 6 ++- app/javascript/mastodon/locales/ku.json | 6 ++- app/javascript/mastodon/locales/kw.json | 6 ++- app/javascript/mastodon/locales/lt.json | 6 ++- app/javascript/mastodon/locales/lv.json | 6 ++- app/javascript/mastodon/locales/mk.json | 6 ++- app/javascript/mastodon/locales/ml.json | 6 ++- app/javascript/mastodon/locales/mr.json | 6 ++- app/javascript/mastodon/locales/ms.json | 6 ++- app/javascript/mastodon/locales/nl.json | 6 ++- app/javascript/mastodon/locales/nn.json | 6 ++- app/javascript/mastodon/locales/no.json | 6 ++- app/javascript/mastodon/locales/oc.json | 6 ++- app/javascript/mastodon/locales/pa.json | 6 ++- app/javascript/mastodon/locales/pl.json | 6 ++- app/javascript/mastodon/locales/pt-BR.json | 6 ++- app/javascript/mastodon/locales/pt-PT.json | 6 ++- app/javascript/mastodon/locales/ro.json | 6 ++- app/javascript/mastodon/locales/ru.json | 6 ++- app/javascript/mastodon/locales/sa.json | 6 ++- app/javascript/mastodon/locales/sc.json | 6 ++- app/javascript/mastodon/locales/si.json | 6 ++- app/javascript/mastodon/locales/sk.json | 6 ++- app/javascript/mastodon/locales/sl.json | 6 ++- app/javascript/mastodon/locales/sq.json | 6 ++- app/javascript/mastodon/locales/sr-Latn.json | 6 ++- app/javascript/mastodon/locales/sr.json | 6 ++- app/javascript/mastodon/locales/sv.json | 6 ++- app/javascript/mastodon/locales/szl.json | 6 ++- app/javascript/mastodon/locales/ta.json | 6 ++- app/javascript/mastodon/locales/tai.json | 6 ++- app/javascript/mastodon/locales/te.json | 6 ++- app/javascript/mastodon/locales/th.json | 6 ++- app/javascript/mastodon/locales/tr.json | 6 ++- app/javascript/mastodon/locales/tt.json | 6 ++- app/javascript/mastodon/locales/ug.json | 6 ++- app/javascript/mastodon/locales/uk.json | 6 ++- app/javascript/mastodon/locales/ur.json | 6 ++- app/javascript/mastodon/locales/vi.json | 6 ++- app/javascript/mastodon/locales/zgh.json | 6 ++- app/javascript/mastodon/locales/zh-CN.json | 6 ++- app/javascript/mastodon/locales/zh-HK.json | 6 ++- app/javascript/mastodon/locales/zh-TW.json | 6 ++- config/locales/activerecord.cs.yml | 9 ++++ config/locales/ar.yml | 7 --- config/locales/ast.yml | 2 - config/locales/bg.yml | 2 - config/locales/bn.yml | 2 - config/locales/br.yml | 2 - config/locales/ca.yml | 9 ++-- config/locales/ckb.yml | 7 --- config/locales/co.yml | 7 --- config/locales/cs.yml | 32 ++++++++++-- config/locales/cy.yml | 7 --- config/locales/da.yml | 7 ++- config/locales/de.yml | 6 --- config/locales/el.yml | 9 ++-- config/locales/eo.yml | 7 --- config/locales/es-AR.yml | 7 ++- config/locales/es-MX.yml | 6 --- config/locales/es.yml | 6 --- config/locales/et.yml | 7 --- config/locales/eu.yml | 7 --- config/locales/fa.yml | 7 --- config/locales/fi.yml | 7 --- config/locales/fr.yml | 6 --- config/locales/ga.yml | 1 - config/locales/gd.yml | 6 --- config/locales/gl.yml | 9 ++-- config/locales/he.yml | 6 --- config/locales/hi.yml | 1 - config/locales/hr.yml | 2 - config/locales/hu.yml | 6 --- config/locales/hy.yml | 5 -- config/locales/id.yml | 7 --- config/locales/io.yml | 7 ++- config/locales/is.yml | 7 ++- config/locales/it.yml | 9 ++-- config/locales/ja.yml | 49 ++++++++++------- config/locales/ka.yml | 7 --- config/locales/kab.yml | 4 -- config/locales/kk.yml | 7 --- config/locales/ko.yml | 9 ++-- config/locales/ku.yml | 9 ++-- config/locales/lt.yml | 7 --- config/locales/lv.yml | 9 ++-- config/locales/ml.yml | 2 - config/locales/ms.yml | 2 - config/locales/nl.yml | 6 --- config/locales/nn.yml | 7 --- config/locales/no.yml | 7 --- config/locales/oc.yml | 7 --- config/locales/pl.yml | 7 ++- config/locales/pt-BR.yml | 7 --- config/locales/pt-PT.yml | 6 --- config/locales/ro.yml | 4 -- config/locales/ru.yml | 7 ++- config/locales/sc.yml | 7 --- config/locales/si.yml | 7 --- config/locales/simple_form.cs.yml | 2 + config/locales/sk.yml | 7 --- config/locales/sl.yml | 7 ++- config/locales/sq.yml | 9 ++-- config/locales/sr-Latn.yml | 5 -- config/locales/sr.yml | 7 --- config/locales/sv.yml | 7 --- config/locales/ta.yml | 2 - config/locales/te.yml | 2 - config/locales/th.yml | 7 --- config/locales/tr.yml | 9 ++-- config/locales/tt.yml | 1 - config/locales/uk.yml | 11 ++-- config/locales/vi.yml | 7 ++- config/locales/zh-CN.yml | 7 ++- config/locales/zh-HK.yml | 7 --- config/locales/zh-TW.yml | 7 ++- 160 files changed, 623 insertions(+), 468 deletions(-) diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json index 8e236194166..54780cc9fbc 100644 --- a/app/javascript/mastodon/locales/af.json +++ b/app/javascript/mastodon/locales/af.json @@ -227,8 +227,8 @@ "getting_started.heading": "Getting started", "getting_started.invite": "Invite people", "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Security", - "getting_started.terms": "Terms of service", "hashtag.column_header.tag_mode.all": "and {additional}", "hashtag.column_header.tag_mode.any": "or {additional}", "hashtag.column_header.tag_mode.none": "without {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 81c1f810453..d2709c95778 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -227,8 +227,8 @@ "getting_started.heading": "استعدّ للبدء", "getting_started.invite": "دعوة أشخاص", "getting_started.open_source_notice": "ماستدون برنامج مفتوح المصدر. يمكنك المساهمة، أو الإبلاغ عن تقارير الأخطاء، على جيت هب {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "الأمان", - "getting_started.terms": "شروط الخدمة", "hashtag.column_header.tag_mode.all": "و {additional}", "hashtag.column_header.tag_mode.any": "أو {additional}", "hashtag.column_header.tag_mode.none": "بدون {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "تعذر العثور على نتائج تتضمن هذه المصطلحات", "search_results.statuses": "المنشورات", "search_results.statuses_fts_disabled": "البحث عن المنشورات عن طريق المحتوى ليس مفعل في خادم ماستدون هذا.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, zero {} one {نتيجة} two {نتيجتين} few {نتائج} many {نتائج} other {نتائج}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "افتح الواجهة الإدارية لـ @{name}", "status.admin_status": "افتح هذا المنشور على واجهة الإشراف", "status.block": "احجب @{name}", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 5c128ef2005..acf1495b4c2 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -227,8 +227,8 @@ "getting_started.heading": "Entamu", "getting_started.invite": "Convidar a persones", "getting_started.open_source_notice": "Mastodon ye software de códigu abiertu. Pues collaborar o informar de fallos en GitHub: {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Axustes de la cuenta", - "getting_started.terms": "Términos del serviciu", "hashtag.column_header.tag_mode.all": "y {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.none": "ensin {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Nun se pudo atopar nada con esos términos de busca", "search_results.statuses": "Barritos", "search_results.statuses_fts_disabled": "Esti sirvidor de Mastodon tien activada la gueta de barritos pol so conteníu.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {resultáu} other {resultaos}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Bloquiar a @{name}", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 84007763ce8..992d906d32e 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -227,8 +227,8 @@ "getting_started.heading": "Първи стъпки", "getting_started.invite": "Поканване на хора", "getting_started.open_source_notice": "Mastodon е софтуер с отворен код. Можеш да помогнеш или да докладваш за проблеми в Github: {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Security", - "getting_started.terms": "Условия за ползване", "hashtag.column_header.tag_mode.all": "и {additional}", "hashtag.column_header.tag_mode.any": "или {additional}", "hashtag.column_header.tag_mode.none": "без {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Не е намерено нищо за това търсене", "search_results.statuses": "Публикации", "search_results.statuses_fts_disabled": "Търсенето на публикации по тяхното съдържание не е активирано за този Mastodon сървър.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {резултат} other {резултата}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Отваряне на интерфейс за модериране за @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Блокиране на @{name}", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index 388b2a8141d..6157928e209 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -227,8 +227,8 @@ "getting_started.heading": "শুরু করা", "getting_started.invite": "অন্যদের আমন্ত্রণ করুন", "getting_started.open_source_notice": "মাস্টাডন একটি মুক্ত সফটওয়্যার। তৈরিতে সাহায্য করতে বা কোনো সমস্যা সম্পর্কে জানাতে আমাদের গিটহাবে যেতে পারেন {github}।", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "নিরাপত্তা", - "getting_started.terms": "ব্যবহারের নিয়মাবলী", "hashtag.column_header.tag_mode.all": "এবং {additional}", "hashtag.column_header.tag_mode.any": "অথবা {additional}", "hashtag.column_header.tag_mode.none": "বাদ দিয়ে {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "টুট", "search_results.statuses_fts_disabled": "তাদের সামগ্রী দ্বারা টুটগুলি অনুসন্ধান এই মস্তোডন সার্ভারে সক্ষম নয়।", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {ফলাফল} other {ফলাফল}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "@{name} র জন্য পরিচালনার ইন্টারফেসে ঢুকুন", "status.admin_status": "যায় লেখাটি পরিচালনার ইন্টারফেসে খুলুন", "status.block": "@{name} কে ব্লক করুন", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index a1f703cb2bf..4d5a943e387 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -227,8 +227,8 @@ "getting_started.heading": "Loc'hañ", "getting_started.invite": "Pediñ tud", "getting_started.open_source_notice": "Mastodoñ zo ur meziant digor e darzh. Gallout a rit kenoberzhiañ dezhañ pe danevellañ kudennoù war GitHub e {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Arventennoù ar gont", - "getting_started.terms": "Divizoù gwerzhañ hollek", "hashtag.column_header.tag_mode.all": "ha {additional}", "hashtag.column_header.tag_mode.any": "pe {additional}", "hashtag.column_header.tag_mode.none": "hep {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "a doudoù", "search_results.statuses_fts_disabled": "Klask toudoù dre oc'h endalc'h n'eo ket aotreet war ar servijer-mañ.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {disoc'h} other {a zisoc'h}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Digeriñ etrefas evezherezh evit @{name}", "status.admin_status": "Digeriñ an toud e-barzh an etrefas evezherezh", "status.block": "Berzañ @{name}", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 5dbad8d94d4..2a218ea8467 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -227,8 +227,8 @@ "getting_started.heading": "Primers passos", "getting_started.invite": "Convidar gent", "getting_started.open_source_notice": "Mastodon és un programari de codi obert. Pots contribuir-hi o informar de problemes a GitHub a {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Configuració del compte", - "getting_started.terms": "Condicions de servei", "hashtag.column_header.tag_mode.all": "i {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.none": "sense {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "No s'ha pogut trobar res per a aquests termes de cerca", "search_results.statuses": "Publicacions", "search_results.statuses_fts_disabled": "La cerca de publicacions pel seu contingut no està habilitada en aquest servidor Mastodon.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Obre l'interfície de moderació per a @{name}", "status.admin_status": "Obrir aquesta publicació a la interfície de moderació", "status.block": "Bloqueja @{name}", diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json index 638a58a1267..0eca1dab48c 100644 --- a/app/javascript/mastodon/locales/ckb.json +++ b/app/javascript/mastodon/locales/ckb.json @@ -227,8 +227,8 @@ "getting_started.heading": "دەست پێکردن", "getting_started.invite": "بانگهێشتکردنی خەڵک", "getting_started.open_source_notice": "ماستۆدۆن نەرمەکالایەکی سەرچاوەی کراوەیە. دەتوانیت بەشداری بکەیت یان گوزارشت بکەیت لەسەر کێشەکانی لە پەڕەی گیتهاب {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "ڕێکخستنەکانی هەژمارە", - "getting_started.terms": "مەرجەکانی خزمەتگوزاری", "hashtag.column_header.tag_mode.all": "و {additional}", "hashtag.column_header.tag_mode.any": "یا {additional}", "hashtag.column_header.tag_mode.none": "بەبێ {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "توتەکان", "search_results.statuses_fts_disabled": "گەڕانی توتەکان بە ناوەڕۆکیان لەسەر ئەم ڕاژەی ماستۆدۆن چالاک نەکراوە.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {دەرئەنجام} other {دەرئەنجام}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "کردنەوەی میانڕەوی بەڕێوەبەر بۆ @{name}", "status.admin_status": "ئەم توتە بکەوە لە ناو ڕووکاری بەڕیوەبەر", "status.block": "@{name} ئاستەنگ بکە", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 7075784bc59..8b659240179 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -227,8 +227,8 @@ "getting_started.heading": "Per principià", "getting_started.invite": "Invità ghjente", "getting_started.open_source_notice": "Mastodon ghjè un lugiziale liberu. Pudete cuntribuisce à u codice o a traduzione, o palisà un bug, nant'à GitHub: {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Sicurità", - "getting_started.terms": "Cundizione di u serviziu", "hashtag.column_header.tag_mode.all": "è {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.none": "senza {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Statuti", "search_results.statuses_fts_disabled": "A ricerca di i cuntinuti di i statuti ùn hè micca attivata nant'à stu servore Mastodon.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {risultatu} other {risultati}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Apre l'interfaccia di muderazione per @{name}", "status.admin_status": "Apre stu statutu in l'interfaccia di muderazione", "status.block": "Bluccà @{name}", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index ccadcec262f..c83e0b5b59a 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -227,8 +227,8 @@ "getting_started.heading": "Začínáme", "getting_started.invite": "Pozvat lidi", "getting_started.open_source_notice": "Mastodon je otevřený software. Přispět do jeho vývoje nebo hlásit chyby můžete na GitHubu {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Nastavení účtu", - "getting_started.terms": "Podmínky používání", "hashtag.column_header.tag_mode.all": "a {additional}", "hashtag.column_header.tag_mode.any": "nebo {additional}", "hashtag.column_header.tag_mode.none": "bez {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Pro tyto hledané výrazy nebylo nic nenalezeno", "search_results.statuses": "Příspěvky", "search_results.statuses_fts_disabled": "Vyhledávání příspěvků podle jejich obsahu není na tomto Mastodon serveru povoleno.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {výsledek} few {výsledky} many {výsledků} other {výsledků}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Otevřít moderátorské rozhraní pro @{name}", "status.admin_status": "Otevřít tento příspěvek v moderátorském rozhraní", "status.block": "Zablokovat @{name}", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index c777dcd6ab0..f73b8cb4862 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -227,8 +227,8 @@ "getting_started.heading": "Dechrau", "getting_started.invite": "Gwahodd pobl", "getting_started.open_source_notice": "Mae Mastodon yn feddalwedd côd agored. Mae modd cyfrannu neu adrodd materion ar GitHUb ar {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Diogelwch", - "getting_started.terms": "Telerau Gwasanaeth", "hashtag.column_header.tag_mode.all": "a {additional}", "hashtag.column_header.tag_mode.any": "neu {additional}", "hashtag.column_header.tag_mode.none": "heb {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Methu dod o hyd i unrhyw beth ar gyfer y termau chwilio hyn", "search_results.statuses": "Postiadau", "search_results.statuses_fts_disabled": "Nid yw chwilio postiadau yn ôl eu cynnwys wedi'i alluogi ar y gweinydd Mastodon hwn.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, zero {canlyniad} one {canlyniad} two {ganlyniad} other {o ganlyniadau}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Agor rhyngwyneb goruwchwylio ar gyfer @{name}", "status.admin_status": "Agor y post hwn yn y rhyngwyneb goruwchwylio", "status.block": "Blocio @{name}", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index e57b301dcf8..5ae3983a325 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -227,8 +227,8 @@ "getting_started.heading": "Startmenu", "getting_started.invite": "Invitér folk", "getting_started.open_source_notice": "Mastodon er open-source software. Du kan bidrage eller anmelde fejl via GitHub {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Kontoindstillinger", - "getting_started.terms": "Tjenestevilkår", "hashtag.column_header.tag_mode.all": "og {additional}", "hashtag.column_header.tag_mode.any": "eller {additional}", "hashtag.column_header.tag_mode.none": "uden {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Ingen resultater for disse søgeord", "search_results.statuses": "Indlæg", "search_results.statuses_fts_disabled": "Søgning på indlæg efter deres indhold ikke aktiveret på denne Mastodon-server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultater}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Åbn modereringsbrugerflade for @{name}", "status.admin_status": "Åbn dette indlæg i modereringsbrugerfladen", "status.block": "Blokér @{name}", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index a2f8f087d12..6c72c3afcb2 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -227,8 +227,8 @@ "getting_started.heading": "Erste Schritte", "getting_started.invite": "Leute einladen", "getting_started.open_source_notice": "Mastodon ist quelloffene Software. Du kannst auf GitHub unter {github} dazu beitragen oder Probleme melden.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Konto & Sicherheit", - "getting_started.terms": "Nutzungsbedingungen", "hashtag.column_header.tag_mode.all": "und {additional}", "hashtag.column_header.tag_mode.any": "oder {additional}", "hashtag.column_header.tag_mode.none": "ohne {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Nichts für diese Suchbegriffe gefunden", "search_results.statuses": "Beiträge", "search_results.statuses_fts_disabled": "Die Suche für Beiträge nach ihrem Inhalt ist auf diesem Mastodon-Server deaktiviert.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {Ergebnis} other {Ergebnisse}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Öffne Moderationsoberfläche für @{name}", "status.admin_status": "Öffne Beitrag in der Moderationsoberfläche", "status.block": "Blockiere @{name}", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index 6b27f7877a3..eba878bbd6d 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -1842,6 +1842,19 @@ }, { "descriptors": [ + { + "defaultMessage": "Nothing is trending right now. Check back later!", + "id": "empty_column.explore_statuses" + } + ], + "path": "app/javascript/mastodon/features/explore/links.json" + }, + { + "descriptors": [ + { + "defaultMessage": "Search for {q}", + "id": "search_results.title" + }, { "defaultMessage": "Could not find anything for these search terms", "id": "search_results.nothing_found" @@ -1874,6 +1887,24 @@ ], "path": "app/javascript/mastodon/features/explore/statuses.json" }, + { + "descriptors": [ + { + "defaultMessage": "Nothing is trending right now. Check back later!", + "id": "empty_column.explore_statuses" + } + ], + "path": "app/javascript/mastodon/features/explore/suggestions.json" + }, + { + "descriptors": [ + { + "defaultMessage": "Nothing is trending right now. Check back later!", + "id": "empty_column.explore_statuses" + } + ], + "path": "app/javascript/mastodon/features/explore/tags.json" + }, { "descriptors": [ { @@ -3678,8 +3709,8 @@ "id": "navigation_bar.apps" }, { - "defaultMessage": "Terms of service", - "id": "getting_started.terms" + "defaultMessage": "Privacy Policy", + "id": "getting_started.privacy_policy" }, { "defaultMessage": "Developers", @@ -3824,6 +3855,23 @@ ], "path": "app/javascript/mastodon/features/ui/components/report_modal.json" }, + { + "descriptors": [ + { + "defaultMessage": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", + "id": "sign_in_banner.text" + }, + { + "defaultMessage": "Sign in", + "id": "sign_in_banner.sign_in" + }, + { + "defaultMessage": "Create account", + "id": "sign_in_banner.create_account" + } + ], + "path": "app/javascript/mastodon/features/ui/components/sign_in_banner.json" + }, { "descriptors": [ { diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 02f071ede9c..c03a93076c0 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -227,8 +227,8 @@ "getting_started.heading": "Αφετηρία", "getting_started.invite": "Προσκάλεσε κόσμο", "getting_started.open_source_notice": "Το Mastodon είναι ελεύθερο λογισμικό. Μπορείς να συνεισφέρεις ή να αναφέρεις ζητήματα στο GitHub στο {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Ασφάλεια", - "getting_started.terms": "Όροι χρήσης", "hashtag.column_header.tag_mode.all": "και {additional}", "hashtag.column_header.tag_mode.any": "ή {additional}", "hashtag.column_header.tag_mode.none": "χωρίς {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Τουτ", "search_results.statuses_fts_disabled": "Η αναζήτηση τουτ βάσει του περιεχόμενού τους δεν είναι ενεργοποιημένη σε αυτό τον κόμβο.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, zero {αποτελέσματα} one {αποτέλεσμα} other {αποτελέσματα}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Άνοιγμα λειτουργίας διαμεσολάβησης για τον/την @{name}", "status.admin_status": "Άνοιγμα αυτής της δημοσίευσης στη λειτουργία διαμεσολάβησης", "status.block": "Αποκλεισμός @{name}", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 7dc245a383c..3e418b9d36a 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -227,8 +227,8 @@ "getting_started.heading": "Getting started", "getting_started.invite": "Invite people", "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Security", - "getting_started.terms": "Terms of service", "hashtag.column_header.tag_mode.all": "and {additional}", "hashtag.column_header.tag_mode.any": "or {additional}", "hashtag.column_header.tag_mode.none": "without {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Posts", "search_results.statuses_fts_disabled": "Searching posts by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index c7b31e6f445..b4bba186306 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -227,8 +227,8 @@ "getting_started.heading": "Getting started", "getting_started.invite": "Invite people", "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Account settings", - "getting_started.terms": "Terms of service", "hashtag.column_header.tag_mode.all": "and {additional}", "hashtag.column_header.tag_mode.any": "or {additional}", "hashtag.column_header.tag_mode.none": "without {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Posts", "search_results.statuses_fts_disabled": "Searching posts by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this post in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index bb770767cb5..b86fcb70311 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -227,8 +227,8 @@ "getting_started.heading": "Por komenci", "getting_started.invite": "Inviti homojn", "getting_started.open_source_notice": "Mastodon estas malfermitkoda programo. Vi povas kontribui aŭ raporti problemojn en GitHub je {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Sekureco", - "getting_started.terms": "Kondiĉoj de la servo", "hashtag.column_header.tag_mode.all": "kaj {additional}", "hashtag.column_header.tag_mode.any": "aŭ {additional}", "hashtag.column_header.tag_mode.none": "sen {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Povis trovi nenion por ĉi tiuj serĉaj terminoj", "search_results.statuses": "Mesaĝoj", "search_results.statuses_fts_disabled": "Serĉi mesaĝojn laŭ enhavo ne estas ebligita en ĉi tiu Mastodon-servilo.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {rezulto} other {rezultoj}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Malfermi la kontrolan interfacon por @{name}", "status.admin_status": "Malfermi ĉi tiun mesaĝon en la kontrola interfaco", "status.block": "Bloki @{name}", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index bbaa3591eb0..9d1477d8677 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -227,8 +227,8 @@ "getting_started.heading": "Introducción", "getting_started.invite": "Invitar gente", "getting_started.open_source_notice": "Mastodon es software libre. Podés contribuir o informar errores en {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Configuración de la cuenta", - "getting_started.terms": "Términos del servicio", "hashtag.column_header.tag_mode.all": "y {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.none": "sin {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "No se pudo encontrar nada para estos términos de búsqueda", "search_results.statuses": "Mensajes", "search_results.statuses_fts_disabled": "No se pueden buscar mensajes por contenido en este servidor de Mastodon.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Abrir interface de moderación para @{name}", "status.admin_status": "Abrir este mensaje en la interface de moderación", "status.block": "Bloquear a @{name}", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 36ac226b588..48424f74e8d 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -227,8 +227,8 @@ "getting_started.heading": "Primeros pasos", "getting_started.invite": "Invitar usuarios", "getting_started.open_source_notice": "Mastodon es software libre. Puedes contribuir o reportar errores en {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Seguridad", - "getting_started.terms": "Términos de servicio", "hashtag.column_header.tag_mode.all": "y {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.none": "sin {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "No se pudo encontrar nada para estos términos de busqueda", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Buscar toots por su contenido no está disponible en este servidor de Mastodon.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Abrir interfaz de moderación para @{name}", "status.admin_status": "Abrir este estado en la interfaz de moderación", "status.block": "Bloquear a @{name}", @@ -522,7 +526,7 @@ "status.show_original": "Mostrar original", "status.show_thread": "Mostrar hilo", "status.translate": "Traducir", - "status.translated_from": "Traducido de {lang}", + "status.translated_from": "Traducido del {lang}", "status.uncached_media_warning": "No disponible", "status.unmute_conversation": "Dejar de silenciar conversación", "status.unpin": "Dejar de fijar", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index af6a2ba970e..b65dbbbd826 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -227,8 +227,8 @@ "getting_started.heading": "Primeros pasos", "getting_started.invite": "Invitar usuarios", "getting_started.open_source_notice": "Mastodon es software libre. Puedes contribuir o reportar errores en {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Seguridad", - "getting_started.terms": "Términos de servicio", "hashtag.column_header.tag_mode.all": "y {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.none": "sin {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "No se pudo encontrar nada para estos términos de búsqueda", "search_results.statuses": "Publicaciones", "search_results.statuses_fts_disabled": "Buscar publicaciones por su contenido no está disponible en este servidor de Mastodon.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Abrir interfaz de moderación para @{name}", "status.admin_status": "Abrir este estado en la interfaz de moderación", "status.block": "Bloquear a @{name}", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 86dc9549513..11c93234655 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -227,8 +227,8 @@ "getting_started.heading": "Alustamine", "getting_started.invite": "Kutsu inimesi", "getting_started.open_source_notice": "Mastodon on avatud lähtekoodiga tarkvara. Saate panustada või teatada probleemidest GitHubis {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Turvalisus", - "getting_started.terms": "Kasutustingimused", "hashtag.column_header.tag_mode.all": "ja {additional}", "hashtag.column_header.tag_mode.any": "või {additional}", "hashtag.column_header.tag_mode.none": "ilma {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Tuudid", "search_results.statuses_fts_disabled": "Tuutsude otsimine nende sisu järgi ei ole sellel Mastodoni serveril sisse lülitatud.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {tulemus} other {tulemust}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Ava moderaatoriliides kasutajale @{name}", "status.admin_status": "Ava see staatus moderaatoriliites", "status.block": "Blokeeri @{name}", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 77259248cfe..e4ffd223453 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -227,8 +227,8 @@ "getting_started.heading": "Menua", "getting_started.invite": "Gonbidatu jendea", "getting_started.open_source_notice": "Mastodon software librea da. Ekarpenak egin ditzakezu edo akatsen berri eman GitHub bidez: {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Segurtasuna", - "getting_started.terms": "Erabilera baldintzak", "hashtag.column_header.tag_mode.all": "eta {osagarria}", "hashtag.column_header.tag_mode.any": "edo {osagarria}", "hashtag.column_header.tag_mode.none": "gabe {osagarria}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Ez da emaitzarik aurkitu bilaketa-termino horientzat", "search_results.statuses": "Bidalketak", "search_results.statuses_fts_disabled": "Mastodon zerbitzari honek ez du bidalketen edukiaren bilaketa gaitu.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {emaitza} other {emaitza}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Ireki @{name} erabiltzailearen moderazio interfazea", "status.admin_status": "Ireki bidalketa hau moderazio interfazean", "status.block": "Blokeatu @{name}", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 7046b9a1438..25b2fb3b4b1 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -227,8 +227,8 @@ "getting_started.heading": "آغاز کنید", "getting_started.invite": "دعوت از دیگران", "getting_started.open_source_notice": "ماستودون نرم‌افزاری آزاد است. می‌توانید روی {github} در آن مشارکت کرده یا مشکلاتش را گزارش دهید.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "تنظیمات حساب", - "getting_started.terms": "شرایط خدمات", "hashtag.column_header.tag_mode.all": "و {additional}", "hashtag.column_header.tag_mode.any": "یا {additional}", "hashtag.column_header.tag_mode.none": "بدون {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "چیزی برای این عبارت جست‌وجو یافت نشد", "search_results.statuses": "فرسته‌ها", "search_results.statuses_fts_disabled": "جست‌وجوی محتوای فرسته‌ها در این کارساز ماستودون به کار انداخته نشده است.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {نتیجه} other {نتیجه}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "گشودن واسط مدیریت برای ‎@{name}", "status.admin_status": "گشودن این فرسته در واسط مدیریت", "status.block": "مسدود کردن ‎@{name}", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 1cbea98087a..d3829ae9101 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -227,8 +227,8 @@ "getting_started.heading": "Näin pääset alkuun", "getting_started.invite": "Kutsu ihmisiä", "getting_started.open_source_notice": "Mastodon on avoimen lähdekoodin ohjelma. Voit avustaa tai raportoida ongelmia GitHubissa: {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Tiliasetukset", - "getting_started.terms": "Käyttöehdot", "hashtag.column_header.tag_mode.all": "ja {additional}", "hashtag.column_header.tag_mode.any": "tai {additional}", "hashtag.column_header.tag_mode.none": "ilman {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Näille hakusanoille ei löytynyt mitään", "search_results.statuses": "Viestit", "search_results.statuses_fts_disabled": "Viestien haku sisällön perusteella ei ole käytössä tällä Mastodon-palvelimella.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {tulos} other {tulokset}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Avaa moderaattorinäkymä tilistä @{name}", "status.admin_status": "Avaa julkaisu moderointinäkymässä", "status.block": "Estä @{name}", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 5c615041fa2..2befc94cb92 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -227,8 +227,8 @@ "getting_started.heading": "Pour commencer", "getting_started.invite": "Inviter des gens", "getting_started.open_source_notice": "Mastodon est un logiciel libre. Vous pouvez contribuer ou faire des rapports de bogues via {github} sur GitHub.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Sécurité", - "getting_started.terms": "Conditions d’utilisation", "hashtag.column_header.tag_mode.all": "et {additional}", "hashtag.column_header.tag_mode.any": "ou {additional}", "hashtag.column_header.tag_mode.none": "sans {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Aucun résultat avec ces mots-clefs", "search_results.statuses": "Messages", "search_results.statuses_fts_disabled": "La recherche de messages par leur contenu n'est pas activée sur ce serveur Mastodon.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {résultat} other {résultats}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Ouvrir l’interface de modération pour @{name}", "status.admin_status": "Ouvrir ce message dans l’interface de modération", "status.block": "Bloquer @{name}", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index b47dc584ce0..2c740bf856d 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -227,8 +227,8 @@ "getting_started.heading": "Utein sette", "getting_started.invite": "Minsken útnûgje", "getting_started.open_source_notice": "Mastodon is iepen boarne software. Jo kinne sels bydrage of problemen oanjaan troch GitHub op {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Account ynstellings", - "getting_started.terms": "Terms of service", "hashtag.column_header.tag_mode.all": "en {additional}", "hashtag.column_header.tag_mode.any": "of {additional}", "hashtag.column_header.tag_mode.none": "sûnder {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Posts", "search_results.statuses_fts_disabled": "Searching posts by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 91f802f7049..9e80119714e 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -227,8 +227,8 @@ "getting_started.heading": "Getting started", "getting_started.invite": "Invite people", "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Security", - "getting_started.terms": "Terms of service", "hashtag.column_header.tag_mode.all": "and {additional}", "hashtag.column_header.tag_mode.any": "or {additional}", "hashtag.column_header.tag_mode.none": "without {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Postálacha", "search_results.statuses_fts_disabled": "Searching posts by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 93a53f960c9..70ec2cbb03b 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -227,8 +227,8 @@ "getting_started.heading": "Toiseach", "getting_started.invite": "Thoir cuireadh do dhaoine", "getting_started.open_source_notice": "’S e bathar-bog le bun-tùs fosgailte a th’ ann am Mastodon. ’S urrainn dhut cuideachadh leis no aithris a dhèanamh air duilgheadasan air GitHub fo {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Roghainnean a’ chunntais", - "getting_started.terms": "Teirmichean na seirbheise", "hashtag.column_header.tag_mode.all": "agus {additional}", "hashtag.column_header.tag_mode.any": "no {additional}", "hashtag.column_header.tag_mode.none": "às aonais {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Cha do lorg sinn dad dha na h-abairtean-luirg seo", "search_results.statuses": "Postaichean", "search_results.statuses_fts_disabled": "Chan eil lorg phostaichean a-rèir an susbaint an comas air an fhrithealaiche Mastodon seo.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {toradh} two {thoradh} few {toraidhean} other {toradh}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Fosgail eadar-aghaidh na maorsainneachd dha @{name}", "status.admin_status": "Fosgail am post seo ann an eadar-aghaidh na maorsainneachd", "status.block": "Bac @{name}", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 6b7cf5bedc0..9ed8c287295 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -227,8 +227,8 @@ "getting_started.heading": "Primeiros pasos", "getting_started.invite": "Convidar persoas", "getting_started.open_source_notice": "Mastodon é software de código aberto. Podes contribuír ou informar de fallos en GitHub en {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Seguranza", - "getting_started.terms": "Termos do servizo", "hashtag.column_header.tag_mode.all": "e {additional}", "hashtag.column_header.tag_mode.any": "ou {additional}", "hashtag.column_header.tag_mode.none": "sen {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Non atopamos nada con estos termos de busca", "search_results.statuses": "Publicacións", "search_results.statuses_fts_disabled": "Procurar publicacións polo seu contido non está activado neste servidor do Mastodon.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Abrir interface de moderación para @{name}", "status.admin_status": "Abrir esta publicación na interface de moderación", "status.block": "Bloquear a @{name}", @@ -519,10 +523,10 @@ "status.show_less_all": "Amosar menos para todos", "status.show_more": "Amosar máis", "status.show_more_all": "Amosar máis para todos", - "status.show_original": "Show original", + "status.show_original": "Mostrar o orixinal", "status.show_thread": "Amosar fío", - "status.translate": "Translate", - "status.translated_from": "Translated from {lang}", + "status.translate": "Traducir", + "status.translated_from": "Traducido do {lang}", "status.uncached_media_warning": "Non dispoñíbel", "status.unmute_conversation": "Deixar de silenciar conversa", "status.unpin": "Desafixar do perfil", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index a27e0e827f4..5e032358510 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -227,8 +227,8 @@ "getting_started.heading": "בואו נתחיל", "getting_started.invite": "להזמין אנשים", "getting_started.open_source_notice": "מסטודון היא תוכנה חופשית (בקוד פתוח). ניתן לתרום או לדווח על בעיות בגיטהאב: {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "הגדרות חשבון", - "getting_started.terms": "תנאי שימוש", "hashtag.column_header.tag_mode.all": "ו- {additional}", "hashtag.column_header.tag_mode.any": "או {additional}", "hashtag.column_header.tag_mode.none": "ללא {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "לא נמצא דבר עבור תנאי חיפוש אלה", "search_results.statuses": "פוסטים", "search_results.statuses_fts_disabled": "חיפוש פוסטים לפי תוכן לא מאופשר בשרת מסטודון זה.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {תוצאה} other {תוצאות}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "פתח/י ממשק ניהול עבור @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "חסימת @{name}", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index 9c2b9e61870..2d222d4cb24 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -227,8 +227,8 @@ "getting_started.heading": "पहले कदम रखें", "getting_started.invite": "दोस्तों को आमंत्रित करें", "getting_started.open_source_notice": "मास्टोडॉन एक मुक्त स्रोत सॉफ्टवेयर है. आप गिटहब {github} पर इस सॉफ्टवेयर में योगदान या किसी भी समस्या को सूचित कर सकते है.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "अकाउंट सेटिंग्स", - "getting_started.terms": "सेवा की शर्तें", "hashtag.column_header.tag_mode.all": "और {additional}", "hashtag.column_header.tag_mode.any": "या {additional}", "hashtag.column_header.tag_mode.none": "बिना {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index ebb102b445b..4356fd2978f 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -227,8 +227,8 @@ "getting_started.heading": "Počnimo", "getting_started.invite": "Pozovi ljude", "getting_started.open_source_notice": "Mastodon je softver otvorenog kôda. Možete pridonijeti ili prijaviti probleme na GitHubu na {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Postavke računa", - "getting_started.terms": "Uvjeti pružanja usluga", "hashtag.column_header.tag_mode.all": "i {additional}", "hashtag.column_header.tag_mode.any": "ili {additional}", "hashtag.column_header.tag_mode.none": "bez {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 08df3cbc98c..3a183f3045a 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -227,8 +227,8 @@ "getting_started.heading": "Első lépések", "getting_started.invite": "Mások meghívása", "getting_started.open_source_notice": "A Mastodon nyílt forráskódú szoftver. Közreműködhetsz vagy problémákat jelenthetsz a GitHubon: {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Fiókbeállítások", - "getting_started.terms": "Felhasználási feltételek", "hashtag.column_header.tag_mode.all": "és {additional}", "hashtag.column_header.tag_mode.any": "vagy {additional}", "hashtag.column_header.tag_mode.none": "{additional} nélkül", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Nincs találat ezekre a keresési kifejezésekre", "search_results.statuses": "Bejegyzések", "search_results.statuses_fts_disabled": "Ezen a Mastodon szerveren nem engedélyezett a bejegyzések tartalom szerinti keresése.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {találat} other {találat}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Moderációs felület megnyitása @{name} fiókhoz", "status.admin_status": "Bejegyzés megnyitása a moderációs felületen", "status.block": "@{name} letiltása", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 44fd15696d1..48e5bc53f81 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -227,8 +227,8 @@ "getting_started.heading": "Ինչպէս սկսել", "getting_started.invite": "Հրաւիրել մարդկանց", "getting_started.open_source_notice": "Մաստոդոնը բաց ելատեքստով ծրագրակազմ է։ Կարող ես ներդրում անել կամ վրէպներ զեկուցել ԳիթՀաբում՝ {github}։", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Հաշուի կարգաւորումներ", - "getting_started.terms": "Ծառայութեան պայմանները", "hashtag.column_header.tag_mode.all": "եւ {additional}", "hashtag.column_header.tag_mode.any": "կամ {additional}", "hashtag.column_header.tag_mode.none": "առանց {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Գրառումներ", "search_results.statuses_fts_disabled": "Այս հանգոյցում միացուած չէ ըստ բովանդակութեան գրառում փնտրելու հնարաւորութիւնը։", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {արդիւնք} other {արդիւնք}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Բացել @{name} օգտատիրոջ մոդերացիայի դիմերէսը։", "status.admin_status": "Բացել այս գրառումը մոդերատորի դիմերէսի մէջ", "status.block": "Արգելափակել @{name}֊ին", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 986e06c2477..f81b7d9ad47 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -227,8 +227,8 @@ "getting_started.heading": "Mulai", "getting_started.invite": "Undang orang", "getting_started.open_source_notice": "Mastodon adalah perangkat lunak yang bersifat terbuka. Anda dapat berkontribusi atau melaporkan permasalahan/bug di Github {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Keamanan", - "getting_started.terms": "Ketentuan layanan", "hashtag.column_header.tag_mode.all": "dan {additional}", "hashtag.column_header.tag_mode.any": "atau {additional}", "hashtag.column_header.tag_mode.none": "tanpa {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Tidak dapat menemukan apapun untuk istilah-istilah pencarian ini", "search_results.statuses": "Toot", "search_results.statuses_fts_disabled": "Pencarian toot berdasarkan konten tidak diaktifkan di server Mastadon ini.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {hasil} other {hasil}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Buka antar muka moderasi untuk @{name}", "status.admin_status": "Buka status ini dalam antar muka moderasi", "status.block": "Blokir @{name}", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 485b35f1bb0..9f61d8297de 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -227,8 +227,8 @@ "getting_started.heading": "Debuto", "getting_started.invite": "Invitez personi", "getting_started.open_source_notice": "Mastodon esas programaro kun apertita kodexo. Tu povas kontributar o signalar problemi en GitHub ye {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Kontoopcioni", - "getting_started.terms": "Servkondicioni", "hashtag.column_header.tag_mode.all": "e {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.none": "sen {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Ne povas ganar irgo per ca trovvorti", "search_results.statuses": "Posti", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {rezulto} other {rezulti}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Apertez jerintervizajo por @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Restriktez @{name}", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index c58085f1e44..d5ed6300dd6 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -227,8 +227,8 @@ "getting_started.heading": "Komast í gang", "getting_started.invite": "Bjóða fólki", "getting_started.open_source_notice": "Mastodon er opinn og frjáls hugbúnaður. Þú getur lagt þitt af mörkum eða tilkynnt um vandamál á GitHub á slóðinni {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Stillingar notandaaðgangs", - "getting_started.terms": "Þjónustuskilmálar", "hashtag.column_header.tag_mode.all": "og {additional}", "hashtag.column_header.tag_mode.any": "eða {additional}", "hashtag.column_header.tag_mode.none": "án {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Gat ekki fundið neitt sem samsvarar þessum leitarorðum", "search_results.statuses": "Færslur", "search_results.statuses_fts_disabled": "Að leita í efni færslna er ekki virkt á þessum Mastodon-þjóni.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {niðurstaða} other {niðurstöður}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Opna umsjónarviðmót fyrir @{name}", "status.admin_status": "Opna þessa færslu í umsjónarviðmótinu", "status.block": "Útiloka @{name}", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 4376c0cfffd..6e2b974633a 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -227,8 +227,8 @@ "getting_started.heading": "Come iniziare", "getting_started.invite": "Invita qualcuno", "getting_started.open_source_notice": "Mastodon è un software open source. Puoi contribuire o segnalare errori su GitHub all'indirizzo {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Sicurezza", - "getting_started.terms": "Condizioni del servizio", "hashtag.column_header.tag_mode.all": "e {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.none": "senza {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Impossibile trovare qualcosa per questi termini di ricerca", "search_results.statuses": "Post", "search_results.statuses_fts_disabled": "La ricerca di post per il loro contenuto non è abilitata su questo server Mastodon.", + "search_results.title": "Search for {q}", "search_results.total": "{count} {count, plural, one {risultato} other {risultati}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Apri interfaccia di moderazione per @{name}", "status.admin_status": "Apri questo post nell'interfaccia di moderazione", "status.block": "Blocca @{name}", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 9fcd8094763..06f0e320ea2 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -227,8 +227,8 @@ "getting_started.heading": "スタート", "getting_started.invite": "招待", "getting_started.open_source_notice": "Mastodonはオープンソースソフトウェアです。誰でもGitHub ({github}) から開発に参加したり、問題を報告したりできます。", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "アカウント設定", - "getting_started.terms": "プライバシーポリシー", "hashtag.column_header.tag_mode.all": "と{additional}", "hashtag.column_header.tag_mode.any": "か{additional}", "hashtag.column_header.tag_mode.none": "({additional} を除く)", @@ -472,7 +472,11 @@ "search_results.nothing_found": "この検索条件では何も見つかりませんでした", "search_results.statuses": "投稿", "search_results.statuses_fts_disabled": "このサーバーでは投稿本文の検索は利用できません。", + "search_results.title": "Search for {q}", "search_results.total": "{count, number}件の結果", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "@{name}さんのモデレーション画面を開く", "status.admin_status": "この投稿をモデレーション画面で開く", "status.block": "@{name}さんをブロック", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index f10c97e1c39..941c2e83282 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -227,8 +227,8 @@ "getting_started.heading": "დაწყება", "getting_started.invite": "ხალხის მოწვევა", "getting_started.open_source_notice": "მასტოდონი ღია პროგრამაა. შეგიძლიათ შეუწყოთ ხელი ან შექმნათ პრობემის რეპორტი {github}-ზე.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "უსაფრთხოება", - "getting_started.terms": "მომსახურების პირობები", "hashtag.column_header.tag_mode.all": "and {additional}", "hashtag.column_header.tag_mode.any": "or {additional}", "hashtag.column_header.tag_mode.none": "without {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "ტუტები", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "დაბლოკე @{name}", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 644dff4b552..11603156c6b 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -227,8 +227,8 @@ "getting_started.heading": "Bdu", "getting_started.invite": "Snebgi-d imdanen", "getting_started.open_source_notice": "Maṣṭudun d aseɣzan s uɣbalu yeldin. Tzemreḍ ad tɛiwneḍ neɣ ad temmleḍ uguren deg GitHub {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Iɣewwaṛen n umiḍan", - "getting_started.terms": "Tiwetlin n useqdec", "hashtag.column_header.tag_mode.all": "d {additional}", "hashtag.column_header.tag_mode.any": "neɣ {additional}", "hashtag.column_header.tag_mode.none": "war {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Tibeṛṛaniyin", "search_results.statuses_fts_disabled": "Anadi ɣef tjewwiqin s ugbur-nsent ur yermid ara deg uqeddac-agi n Maṣṭudun.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {n ugemmuḍ} other {n yigemmuḍen}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Seḥbes @{name}", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index 5e77a595939..d7d63fae734 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -227,8 +227,8 @@ "getting_started.heading": "Желіде", "getting_started.invite": "Адам шақыру", "getting_started.open_source_notice": "Mastodon - ашық кодты құрылым. Түзету енгізу немесе ұсыныстарды GitHub арқылы жасаңыз {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Қауіпсіздік", - "getting_started.terms": "Қызмет көрсету шарттары", "hashtag.column_header.tag_mode.all": "және {additional}", "hashtag.column_header.tag_mode.any": "немесе {additional}", "hashtag.column_header.tag_mode.none": "{additional} болмай", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Жазбалар", "search_results.statuses_fts_disabled": "Mastodon серверінде постты толық мәтінмен іздей алмайсыз.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {нәтиже} other {нәтиже}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "@{name} үшін модерация интерфейсін аш", "status.admin_status": "Бұл жазбаны модерация интерфейсінде аш", "status.block": "Бұғаттау @{name}", diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json index 15cafe8f9aa..c91aac86775 100644 --- a/app/javascript/mastodon/locales/kn.json +++ b/app/javascript/mastodon/locales/kn.json @@ -227,8 +227,8 @@ "getting_started.heading": "Getting started", "getting_started.invite": "Invite people", "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Security", - "getting_started.terms": "Terms of service", "hashtag.column_header.tag_mode.all": "and {additional}", "hashtag.column_header.tag_mode.any": "or {additional}", "hashtag.column_header.tag_mode.none": "without {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 4d2d5e4494b..4910b9a8874 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -227,8 +227,8 @@ "getting_started.heading": "시작", "getting_started.invite": "초대", "getting_started.open_source_notice": "Mastodon은 오픈 소스 소프트웨어입니다. 누구나 GitHub({github})에서 개발에 참여하거나, 문제를 보고할 수 있습니다.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "계정 설정", - "getting_started.terms": "이용 약관", "hashtag.column_header.tag_mode.all": "그리고 {additional}", "hashtag.column_header.tag_mode.any": "또는 {additional}", "hashtag.column_header.tag_mode.none": "{additional}를 제외하고", @@ -472,7 +472,11 @@ "search_results.nothing_found": "검색어에 대한 결과를 찾을 수 없습니다", "search_results.statuses": "게시물", "search_results.statuses_fts_disabled": "이 마스토돈 서버에선 게시물의 내용을 통한 검색이 활성화 되어 있지 않습니다.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number}건의 결과", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "@{name}에 대한 중재 화면 열기", "status.admin_status": "중재 화면에서 이 게시물 열기", "status.block": "@{name} 차단", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index 41e5124320e..19d960a0ab6 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -227,8 +227,8 @@ "getting_started.heading": "Destpêkirin", "getting_started.invite": "Kesan vexwîne", "getting_started.open_source_notice": "Mastodon nermalava çavkaniya vekirî ye. Tu dikarî pirsgirêkan li ser GitHub-ê ragihînî di {github} de an jî dikarî tevkariyê bikî.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Sazkariyên ajimêr", - "getting_started.terms": "Mercên karûberan", "hashtag.column_header.tag_mode.all": "û {additional}", "hashtag.column_header.tag_mode.any": "an {additional}", "hashtag.column_header.tag_mode.none": "bêyî {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Ji bo van peyvên lêgerînê tiştek nehate dîtin", "search_results.statuses": "Şandî", "search_results.statuses_fts_disabled": "Di vê rajekara Mastodonê da lêgerîna şandîyên li gorî naveroka wan ne çalak e.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {encam} other {encam}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Ji bo @{name} navrûya venihêrtinê veke", "status.admin_status": "Vê şandîyê di navrûya venihêrtinê de veke", "status.block": "@{name} asteng bike", diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json index 34f72a3655b..b63008eaad2 100644 --- a/app/javascript/mastodon/locales/kw.json +++ b/app/javascript/mastodon/locales/kw.json @@ -227,8 +227,8 @@ "getting_started.heading": "Dhe dhalleth", "getting_started.invite": "Gelwel tus", "getting_started.open_source_notice": "Mastodon yw medhelweyth a fenten ygor. Hwi a yll kevri po reportya kudynnow dre GitHub dhe {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Dewisyow akont", - "getting_started.terms": "Ambosow an gonis", "hashtag.column_header.tag_mode.all": "ha(g) {additional}", "hashtag.column_header.tag_mode.any": "po {additional}", "hashtag.column_header.tag_mode.none": "heb {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Postow", "search_results.statuses_fts_disabled": "Nyns yw hwilas postow der aga dalgh gweythresys y'n leuren Mastodon ma.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {sewyans} other {sewyans}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Ygeri ynterfas koswa rag @{name}", "status.admin_status": "Ygeri an post ma y'n ynterfas koswa", "status.block": "Lettya @{name}", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index e01e35714bc..2c8bf82a515 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -227,8 +227,8 @@ "getting_started.heading": "Getting started", "getting_started.invite": "Invite people", "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Security", - "getting_started.terms": "Terms of service", "hashtag.column_header.tag_mode.all": "and {additional}", "hashtag.column_header.tag_mode.any": "or {additional}", "hashtag.column_header.tag_mode.none": "without {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 83d30aa0f26..d2fe1b745b4 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -227,8 +227,8 @@ "getting_started.heading": "Darba sākšana", "getting_started.invite": "Uzaicini cilvēkus", "getting_started.open_source_notice": "Mastodon ir atvērtā koda programmatūra. Tu vari dot savu ieguldījumu vai arī ziņot par problēmām {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Konta iestatījumi", - "getting_started.terms": "Pakalpojuma noteikumi", "hashtag.column_header.tag_mode.all": "un {additional}", "hashtag.column_header.tag_mode.any": "vai {additional}", "hashtag.column_header.tag_mode.none": "bez {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Nevarēja atrast neko šiem meklēšanas vienumiem", "search_results.statuses": "Ziņas", "search_results.statuses_fts_disabled": "Šajā Mastodon serverī nav iespējota ziņu meklēšana pēc to satura.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {rezultāts} other {rezultāti}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Atvērt @{name} moderēšanas saskarni", "status.admin_status": "Atvērt šo ziņu moderācijas saskarnē", "status.block": "Bloķēt @{name}", diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json index 916a8e98a4c..829251daa46 100644 --- a/app/javascript/mastodon/locales/mk.json +++ b/app/javascript/mastodon/locales/mk.json @@ -227,8 +227,8 @@ "getting_started.heading": "Започни", "getting_started.invite": "Покани луѓе", "getting_started.open_source_notice": "Мастодон е софтвер со отворен код. Можете да придонесувате или пријавувате проблеми во GitHub на {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Поставки на сметката", - "getting_started.terms": "Услови на користење", "hashtag.column_header.tag_mode.all": "и {additional}", "hashtag.column_header.tag_mode.any": "или {additional}", "hashtag.column_header.tag_mode.none": "без {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 12196c123d0..d8bfee5d27c 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -227,8 +227,8 @@ "getting_started.heading": "തുടക്കം കുറിക്കുക", "getting_started.invite": "ആളുകളെ ക്ഷണിക്കുക", "getting_started.open_source_notice": "മാസ്റ്റഡോൺ ഒരു സ്വതന്ത്ര സോഫ്ട്‍വെയർ ആണ്. നിങ്ങൾക്ക് {github} GitHub ൽ സംഭാവന ചെയ്യുകയോ പ്രശ്നങ്ങൾ അറിയിക്കുകയോ ചെയ്യാം.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "അംഗത്വ ക്രമീകരണങ്ങൾ", - "getting_started.terms": "സേവന വ്യവസ്ഥകൾ", "hashtag.column_header.tag_mode.all": "{additional} ഉം കൂടെ", "hashtag.column_header.tag_mode.any": "അല്ലെങ്കിൽ {additional}", "hashtag.column_header.tag_mode.none": "{additional} ഇല്ലാതെ", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "ടൂട്ടുകൾ", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "@{name} -നെ തടയുക", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index 6f120c6fba1..4e44813b2bd 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -227,8 +227,8 @@ "getting_started.heading": "Getting started", "getting_started.invite": "Invite people", "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Security", - "getting_started.terms": "Terms of service", "hashtag.column_header.tag_mode.all": "and {additional}", "hashtag.column_header.tag_mode.any": "or {additional}", "hashtag.column_header.tag_mode.none": "without {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 4dd6ddb408a..8457b4dc7e6 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -227,8 +227,8 @@ "getting_started.heading": "Mari bermula", "getting_started.invite": "Undang orang", "getting_started.open_source_notice": "Mastodon itu perisian bersumber terbuka. Anda boleh menyumbang atau melaporkan masalah di GitHub menerusi {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Tetapan akaun", - "getting_started.terms": "Terma perkhidmatan", "hashtag.column_header.tag_mode.all": "dan {additional}", "hashtag.column_header.tag_mode.any": "atau {additional}", "hashtag.column_header.tag_mode.none": "tanpa {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Hantaran", "search_results.statuses_fts_disabled": "Menggelintar hantaran menggunakan kandungannya tidak didayakan di pelayan Mastodon ini.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, other {hasil}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Buka antara muka penyederhanaan untuk @{name}", "status.admin_status": "Buka hantaran ini dalam antara muka penyederhanaan", "status.block": "Sekat @{name}", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index eab9adbc79a..db8c6957ac0 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -227,8 +227,8 @@ "getting_started.heading": "Aan de slag", "getting_started.invite": "Mensen uitnodigen", "getting_started.open_source_notice": "Mastodon is vrije software. Je kunt bijdragen of problemen melden op GitHub via {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Accountinstellingen", - "getting_started.terms": "Voorwaarden", "hashtag.column_header.tag_mode.all": "en {additional}", "hashtag.column_header.tag_mode.any": "of {additional}", "hashtag.column_header.tag_mode.none": "zonder {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Deze zoektermen leveren geen resultaat op", "search_results.statuses": "Berichten", "search_results.statuses_fts_disabled": "Het zoeken in berichten is op deze Mastodon-server niet ingeschakeld.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {resultaat} other {resultaten}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Moderatie-omgeving van @{name} openen", "status.admin_status": "Dit bericht in de moderatie-omgeving openen", "status.block": "@{name} blokkeren", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 810f23be6a3..03db34b65c4 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -227,8 +227,8 @@ "getting_started.heading": "Kom i gang", "getting_started.invite": "Byd folk inn", "getting_started.open_source_notice": "Mastodon er fri programvare. Du kan bidraga eller rapportera problem med GitHub på {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Kontoinnstillingar", - "getting_started.terms": "Brukarvilkår", "hashtag.column_header.tag_mode.all": "og {additional}", "hashtag.column_header.tag_mode.any": "eller {additional}", "hashtag.column_header.tag_mode.none": "utan {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Kunne ikkje finne noko for desse søkeorda", "search_results.statuses": "Tut", "search_results.statuses_fts_disabled": "På denne Matsodon-tenaren kan du ikkje søkja på tut etter innhaldet deira.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {treff} other {treff}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Opne moderasjonsgrensesnitt for @{name}", "status.admin_status": "Opne denne statusen i moderasjonsgrensesnittet", "status.block": "Blokker @{name}", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 7d00b48a711..640a34f9efa 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -227,8 +227,8 @@ "getting_started.heading": "Kom i gang", "getting_started.invite": "Inviter folk", "getting_started.open_source_notice": "Mastodon er fri programvare. Du kan bidra eller rapportere problemer på GitHub på {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Kontoinnstillinger", - "getting_started.terms": "Bruksvilkår", "hashtag.column_header.tag_mode.all": "og {additional}", "hashtag.column_header.tag_mode.any": "eller {additional}", "hashtag.column_header.tag_mode.none": "uten {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Tuter", "search_results.statuses_fts_disabled": "Å søke i tuter etter innhold er ikke skrudd på i denne Mastodon-tjeneren.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultater}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Åpne moderatorgrensesnittet for @{name}", "status.admin_status": "Åpne denne statusen i moderatorgrensesnittet", "status.block": "Blokkér @{name}", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 9ae4445fd8d..28e8228b1f6 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -227,8 +227,8 @@ "getting_started.heading": "Per començar", "getting_started.invite": "Convidar de mond", "getting_started.open_source_notice": "Mastodon es un logicial liure. Podètz contribuir e mandar vòstres comentaris e rapòrt de bug via {github} sus GitHub.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Seguretat", - "getting_started.terms": "Condicions d’utilizacion", "hashtag.column_header.tag_mode.all": "e {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.none": "sens {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Tuts", "search_results.statuses_fts_disabled": "La recèrca de tuts per lor contengut es pas activada sus aqueste servidor Mastodon.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Dobrir l’interfàcia de moderacion per @{name}", "status.admin_status": "Dobrir aqueste estatut dins l’interfàcia de moderacion", "status.block": "Blocar @{name}", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index f8e7597e5fb..7e3bba2df06 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -227,8 +227,8 @@ "getting_started.heading": "Getting started", "getting_started.invite": "Invite people", "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Security", - "getting_started.terms": "Terms of service", "hashtag.column_header.tag_mode.all": "and {additional}", "hashtag.column_header.tag_mode.any": "or {additional}", "hashtag.column_header.tag_mode.none": "without {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 71ae209f3ea..3748053f4eb 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -227,8 +227,8 @@ "getting_started.heading": "Rozpocznij", "getting_started.invite": "Zaproś znajomych", "getting_started.open_source_notice": "Mastodon jest oprogramowaniem o otwartym źródle. Możesz pomóc w rozwoju lub zgłaszać błędy na GitHubie tutaj: {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Bezpieczeństwo", - "getting_started.terms": "Zasady użytkowania", "hashtag.column_header.tag_mode.all": "i {additional}", "hashtag.column_header.tag_mode.any": "lub {additional}", "hashtag.column_header.tag_mode.none": "bez {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Nie znaleziono innych wyników dla tego wyszukania", "search_results.statuses": "Wpisy", "search_results.statuses_fts_disabled": "Szukanie wpisów przy pomocy ich zawartości nie jest włączone na tym serwerze Mastodona.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {wynik} few {wyniki} many {wyników} other {wyników}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Otwórz interfejs moderacyjny dla @{name}", "status.admin_status": "Otwórz ten wpis w interfejsie moderacyjnym", "status.block": "Zablokuj @{name}", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 5e0f9058fe8..f6442086ee4 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -227,8 +227,8 @@ "getting_started.heading": "Primeiros passos", "getting_started.invite": "Convidar pessoas", "getting_started.open_source_notice": "Mastodon é um software de código aberto. Você pode contribuir ou reportar problemas na página do projeto no GitHub em {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Configurações da conta", - "getting_started.terms": "Termos de serviço", "hashtag.column_header.tag_mode.all": "e {additional}", "hashtag.column_header.tag_mode.any": "ou {additional}", "hashtag.column_header.tag_mode.none": "sem {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Não foi possível encontrar nada para estes termos de busca", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Pesquisar toots por seu conteúdo não está ativado nesta instância Mastodon.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Abrir interface de moderação para @{name}", "status.admin_status": "Abrir este toot na interface de moderação", "status.block": "Bloquear @{name}", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 7c9936c6df4..56a08516c50 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -227,8 +227,8 @@ "getting_started.heading": "Primeiros passos", "getting_started.invite": "Convidar pessoas", "getting_started.open_source_notice": "Mastodon é um software de código aberto. Podes contribuir ou reportar problemas no GitHub do projeto: {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Segurança", - "getting_started.terms": "Termos de serviço", "hashtag.column_header.tag_mode.all": "e {additional}", "hashtag.column_header.tag_mode.any": "ou {additional}", "hashtag.column_header.tag_mode.none": "sem {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Não foi possível encontrar resultados para as expressões pesquisadas", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "A pesquisa de toots pelo seu conteúdo não está disponível nesta instância Mastodon.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Abrir a interface de moderação para @{name}", "status.admin_status": "Abrir esta publicação na interface de moderação", "status.block": "Bloquear @{name}", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index 9ef230567cc..a301aeade2b 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -227,8 +227,8 @@ "getting_started.heading": "Primii pași", "getting_started.invite": "Invită persoane", "getting_started.open_source_notice": "Mastodon este un software cu sursă deschisă (open source). Poți contribui la dezvoltarea lui sau raporta probleme pe GitHub la {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Setări cont", - "getting_started.terms": "Termeni și condiții", "hashtag.column_header.tag_mode.all": "și {additional}", "hashtag.column_header.tag_mode.any": "sau {additional}", "hashtag.column_header.tag_mode.none": "fără {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Postări", "search_results.statuses_fts_disabled": "Căutarea de postări după conținutul lor nu este activată pe acest server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {rezultat} other {rezultate}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Deschide interfața de moderare pentru @{name}", "status.admin_status": "Deschide această stare în interfața de moderare", "status.block": "Blochează pe @{name}", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 47a0a79532f..e8e7c4d3ec4 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -227,8 +227,8 @@ "getting_started.heading": "Начать", "getting_started.invite": "Пригласить людей", "getting_started.open_source_notice": "Mastodon — сервис с открытым исходным кодом. Вы можете внести вклад или сообщить о проблемах на GitHub: {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Настройки учётной записи", - "getting_started.terms": "Условия использования", "hashtag.column_header.tag_mode.all": "и {additional}", "hashtag.column_header.tag_mode.any": "или {additional}", "hashtag.column_header.tag_mode.none": "без {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Ничего не найдено по этому запросу", "search_results.statuses": "Посты", "search_results.statuses_fts_disabled": "Поиск постов по их содержанию не поддерживается данным сервером Mastodon.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {результат} few {результата} many {результатов} other {результатов}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Открыть интерфейс модератора для @{name}", "status.admin_status": "Открыть этот пост в интерфейсе модератора", "status.block": "Заблокировать @{name}", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index 11d2b9e2f6b..062aa51e870 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -227,8 +227,8 @@ "getting_started.heading": "Getting started", "getting_started.invite": "Invite people", "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Security", - "getting_started.terms": "Terms of service", "hashtag.column_header.tag_mode.all": "and {additional}", "hashtag.column_header.tag_mode.any": "or {additional}", "hashtag.column_header.tag_mode.none": "without {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 1623bacdc57..30e66f39632 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -227,8 +227,8 @@ "getting_started.heading": "Comente cumintzare", "getting_started.invite": "Invita gente", "getting_started.open_source_notice": "Mastodon est de còdighe abertu. Bi podes contribuire o sinnalare faddinas in {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Cunfiguratziones de su contu", - "getting_started.terms": "Cunditziones de su servìtziu", "hashtag.column_header.tag_mode.all": "e {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.none": "sena {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Publicatziones", "search_results.statuses_fts_disabled": "Sa chirca de publicatziones pro su cuntenutu issoro no est abilitada in custu serbidore de Mastodon.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {resurtadu} other {resurtados}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Aberi s'interfache de moderatzione pro @{name}", "status.admin_status": "Aberi custa publicatzione in s'interfache de moderatzione", "status.block": "Bloca a @{name}", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index a1205e3b44b..28738ccb5d8 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -227,8 +227,8 @@ "getting_started.heading": "පටන් ගන්න", "getting_started.invite": "මිනිසුන්ට ආරාධනය", "getting_started.open_source_notice": "Mastodon යනු විවෘත කේත මෘදුකාංගයකි. ඔබට GitHub හි {github}ට දායක වීමට හෝ ගැටළු වාර්තා කිරීමට හැකිය.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "ගිණුමේ සැකසුම්", - "getting_started.terms": "සේවාවේ නියම", "hashtag.column_header.tag_mode.all": "සහ {additional}", "hashtag.column_header.tag_mode.any": "හෝ {additional}", "hashtag.column_header.tag_mode.none": "{additional}නොමැතිව", @@ -472,7 +472,11 @@ "search_results.nothing_found": "මෙම සෙවුම් පද සඳහා කිසිවක් සොයාගත නොහැකි විය", "search_results.statuses": "ලිපි", "search_results.statuses_fts_disabled": "මෙම Mastodon සේවාදායකයේ ඒවායේ අන්තර්ගතය අනුව මෙවලම් සෙවීම සබල නොවේ.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {ප්රතිඵලය} other {ප්රතිපල}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "@{name}සඳහා මධ්‍යස්ථ අතුරුමුහුණත විවෘත කරන්න", "status.admin_status": "මධ්‍යස්ථ අතුරුමුහුණතෙහි මෙම තත්ත්වය විවෘත කරන්න", "status.block": "@{name} අවහිර", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 620b8dfc157..f44495a82aa 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -227,8 +227,8 @@ "getting_started.heading": "Začni tu", "getting_started.invite": "Pozvi ľudí", "getting_started.open_source_notice": "Mastodon je softvér s otvoreným kódom. Nahlásiť chyby, alebo prispievať môžeš na GitHube v {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Zabezpečenie", - "getting_started.terms": "Podmienky prevozu", "hashtag.column_header.tag_mode.all": "a {additional}", "hashtag.column_header.tag_mode.any": "alebo {additional}", "hashtag.column_header.tag_mode.none": "bez {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Príspevky", "search_results.statuses_fts_disabled": "Vyhľadávanie v obsahu príspevkov nieje na tomto Mastodon serveri povolené.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {výsledok} many {výsledkov} other {výsledky}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Otvor moderovacie rozhranie užívateľa @{name}", "status.admin_status": "Otvor tento príspevok v moderovacom rozhraní", "status.block": "Blokuj @{name}", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index d2e2fdbab5f..a33fb8b8912 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -227,8 +227,8 @@ "getting_started.heading": "Kako začeti", "getting_started.invite": "Povabite osebe", "getting_started.open_source_notice": "Mastodon je odprtokodna programska oprema. Na GitHubu na {github} lahko prispevate ali poročate o napakah.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Varnost", - "getting_started.terms": "Pogoji uporabe", "hashtag.column_header.tag_mode.all": "in {additional}", "hashtag.column_header.tag_mode.any": "ali {additional}", "hashtag.column_header.tag_mode.none": "brez {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Za ta iskalni niz ni zadetkov", "search_results.statuses": "Objave", "search_results.statuses_fts_disabled": "Iskanje objav po njihovi vsebini ni omogočeno na tem strežniku Mastodon.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {rezultat} other {rezultatov}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Odpri vmesnik za moderiranje za @{name}", "status.admin_status": "Odpri status v vmesniku za moderiranje", "status.block": "Blokiraj @{name}", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 5e971ce6e95..344d76344d3 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -227,8 +227,8 @@ "getting_started.heading": "Si t’ia fillohet", "getting_started.invite": "Ftoni njerëz", "getting_started.open_source_notice": "Mastodon-i është software me burim të hapur. Mund të jepni ndihmesë ose të njoftoni probleme në GitHub, te {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Rregullime llogarie", - "getting_started.terms": "Kushte shërbimi", "hashtag.column_header.tag_mode.all": "dhe {additional}", "hashtag.column_header.tag_mode.any": "ose {additional}", "hashtag.column_header.tag_mode.none": "pa {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "S’u gjet gjë për këto terma kërkimi", "search_results.statuses": "Mesazhe", "search_results.statuses_fts_disabled": "Kërkimi i mesazheve sipas lëndës së tyre s’është i aktivizuar në këtë shërbyes Mastodon.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {përfundim} other {përfundime}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Hap ndërfaqe moderimi për @{name}", "status.admin_status": "Hape këtë mesazh te ndërfaqja e moderimit", "status.block": "Blloko @{name}", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 1bb6218a3dc..d5aa1151183 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -227,8 +227,8 @@ "getting_started.heading": "Da počnete", "getting_started.invite": "Invite people", "getting_started.open_source_notice": "Mastodont je softver otvorenog koda. Možete mu doprineti ili prijaviti probleme preko GitHub-a na {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Security", - "getting_started.terms": "Terms of service", "hashtag.column_header.tag_mode.all": "and {additional}", "hashtag.column_header.tag_mode.any": "or {additional}", "hashtag.column_header.tag_mode.none": "without {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {rezultat} few {rezultata} other {rezultata}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 5fa8b1b8956..19c79920d2e 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -227,8 +227,8 @@ "getting_started.heading": "Да почнете", "getting_started.invite": "Позовите људе", "getting_started.open_source_notice": "Мастoдон је софтвер отвореног кода. Можете му допринети или пријавити проблеме преко ГитХаба на {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Безбедност", - "getting_started.terms": "Услови коришћења", "hashtag.column_header.tag_mode.all": "и {additional}", "hashtag.column_header.tag_mode.any": "или {additional}", "hashtag.column_header.tag_mode.none": "без {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Трубе", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {резултат} few {резултата} other {резултата}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Отвори модераторски интерфејс за @{name}", "status.admin_status": "Отвори овај статус у модераторском интерфејсу", "status.block": "Блокирај @{name}", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 78ff55cebca..ea98863e79c 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -227,8 +227,8 @@ "getting_started.heading": "Kom igång", "getting_started.invite": "Skicka inbjudningar", "getting_started.open_source_notice": "Mastodon är programvara med öppen källkod. Du kan bidra eller rapportera problem via GitHub på {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Kontoinställningar", - "getting_started.terms": "Användarvillkor", "hashtag.column_header.tag_mode.all": "och {additional}", "hashtag.column_header.tag_mode.any": "eller {additional}", "hashtag.column_header.tag_mode.none": "utan {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Kunde inte hitta något för dessa sökord", "search_results.statuses": "Inlägg", "search_results.statuses_fts_disabled": "Att söka toots med deras innehåll är inte möjligt på denna Mastodon-server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Öppet modereringsgränssnitt för @{name}", "status.admin_status": "Öppna denna status i modereringsgränssnittet", "status.block": "Blockera @{name}", diff --git a/app/javascript/mastodon/locales/szl.json b/app/javascript/mastodon/locales/szl.json index f8e7597e5fb..7e3bba2df06 100644 --- a/app/javascript/mastodon/locales/szl.json +++ b/app/javascript/mastodon/locales/szl.json @@ -227,8 +227,8 @@ "getting_started.heading": "Getting started", "getting_started.invite": "Invite people", "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Security", - "getting_started.terms": "Terms of service", "hashtag.column_header.tag_mode.all": "and {additional}", "hashtag.column_header.tag_mode.any": "or {additional}", "hashtag.column_header.tag_mode.none": "without {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 54ada2e2260..4d12bb1ccb2 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -227,8 +227,8 @@ "getting_started.heading": "முதன்மைப் பக்கம்", "getting_started.invite": "நண்பர்களை அழைக்க", "getting_started.open_source_notice": "மாஸ்டடான் ஒரு open source மென்பொருள் ஆகும். {github} -இன் மூலம் உங்களால் இதில் பங்களிக்கவோ, சிக்கல்களைத் தெரியப்படுத்தவோ முடியும்.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "கணக்கு அமைப்புகள்", - "getting_started.terms": "சேவை விதிமுறைகள்", "hashtag.column_header.tag_mode.all": "மற்றும் {additional}", "hashtag.column_header.tag_mode.any": "அல்லது {additional}", "hashtag.column_header.tag_mode.none": "{additional} தவிர்த்து", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "டூட்டுகள்", "search_results.statuses_fts_disabled": "டூட்டுகளின் வார்த்தைகளைக்கொண்டு தேடுவது இந்த மச்டோடன் வழங்கியில் இயல்விக்கப்படவில்லை.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} மற்ற {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "மிதமான இடைமுகத்தை திறக்க @{name}", "status.admin_status": "மிதமான இடைமுகத்தில் இந்த நிலையை திறக்கவும்", "status.block": "@{name} -ஐத் தடு", diff --git a/app/javascript/mastodon/locales/tai.json b/app/javascript/mastodon/locales/tai.json index 0ffc9e198e1..79ed5943469 100644 --- a/app/javascript/mastodon/locales/tai.json +++ b/app/javascript/mastodon/locales/tai.json @@ -227,8 +227,8 @@ "getting_started.heading": "Getting started", "getting_started.invite": "Invite people", "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Security", - "getting_started.terms": "Terms of service", "hashtag.column_header.tag_mode.all": "and {additional}", "hashtag.column_header.tag_mode.any": "or {additional}", "hashtag.column_header.tag_mode.none": "without {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index 2ee3052c7e3..e327c38599a 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -227,8 +227,8 @@ "getting_started.heading": "మొదలుపెడదాం", "getting_started.invite": "వ్యక్తులను ఆహ్వానించండి", "getting_started.open_source_notice": "మాస్టొడొన్ ఓపెన్ సోర్స్ సాఫ్ట్వేర్. మీరు {github} వద్ద GitHub పై సమస్యలను నివేదించవచ్చు లేదా తోడ్పడచ్చు.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "భద్రత", - "getting_started.terms": "సేవా నిబంధనలు", "hashtag.column_header.tag_mode.all": "మరియు {additional}", "hashtag.column_header.tag_mode.any": "లేదా {additional}", "hashtag.column_header.tag_mode.none": "{additional} లేకుండా", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "టూట్లు", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "@{name} కొరకు సమన్వయ వినిమయసీమను తెరువు", "status.admin_status": "సమన్వయ వినిమయసీమలో ఈ స్టేటస్ ను తెరవండి", "status.block": "@{name} ను బ్లాక్ చేయి", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 5ee8a8e3a7f..287448bf496 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -227,8 +227,8 @@ "getting_started.heading": "เริ่มต้นใช้งาน", "getting_started.invite": "เชิญผู้คน", "getting_started.open_source_notice": "Mastodon เป็นซอฟต์แวร์โอเพนซอร์ส คุณสามารถมีส่วนร่วมหรือรายงานปัญหาได้ใน GitHub ที่ {github}", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "การตั้งค่าบัญชี", - "getting_started.terms": "เงื่อนไขการให้บริการ", "hashtag.column_header.tag_mode.all": "และ {additional}", "hashtag.column_header.tag_mode.any": "หรือ {additional}", "hashtag.column_header.tag_mode.none": "โดยไม่มี {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "ไม่พบสิ่งใดสำหรับคำค้นหาเหล่านี้", "search_results.statuses": "โพสต์", "search_results.statuses_fts_disabled": "ไม่มีการเปิดใช้งานการค้นหาโพสต์โดยเนื้อหาของโพสต์ในเซิร์ฟเวอร์ Mastodon นี้", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, other {ผลลัพธ์}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "เปิดส่วนติดต่อการควบคุมสำหรับ @{name}", "status.admin_status": "เปิดโพสต์นี้ในส่วนติดต่อการควบคุม", "status.block": "ปิดกั้น @{name}", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 4ddcef55aed..b3b539f68f5 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -227,8 +227,8 @@ "getting_started.heading": "Başlarken", "getting_started.invite": "İnsanları davet et", "getting_started.open_source_notice": "Mastodon açık kaynaklı bir yazılımdır. GitHub'taki {github} üzerinden katkıda bulunabilir veya sorunları bildirebilirsiniz.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Hesap ayarları", - "getting_started.terms": "Kullanım şartları", "hashtag.column_header.tag_mode.all": "ve {additional}", "hashtag.column_header.tag_mode.any": "ya da {additional}", "hashtag.column_header.tag_mode.none": "{additional} olmadan", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Bu arama seçenekleriyle bir sonuç bulunamadı", "search_results.statuses": "Gönderiler", "search_results.statuses_fts_disabled": "Bu Mastodon sunucusunda gönderi içeriğine göre arama etkin değil.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {sonuç} other {sonuç}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "@{name} için denetim arayüzünü açın", "status.admin_status": "Denetim arayüzünde bu gönderiyi açın", "status.block": "@{name} adlı kişiyi engelle", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index 7bfa4488285..0bc6dee6291 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -227,8 +227,8 @@ "getting_started.heading": "Getting started", "getting_started.invite": "Invite people", "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Security", - "getting_started.terms": "Terms of service", "hashtag.column_header.tag_mode.all": "and {additional}", "hashtag.column_header.tag_mode.any": "or {additional}", "hashtag.column_header.tag_mode.none": "without {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "@{name} блоклау", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index f8e7597e5fb..7e3bba2df06 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -227,8 +227,8 @@ "getting_started.heading": "Getting started", "getting_started.invite": "Invite people", "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Security", - "getting_started.terms": "Terms of service", "hashtag.column_header.tag_mode.all": "and {additional}", "hashtag.column_header.tag_mode.any": "or {additional}", "hashtag.column_header.tag_mode.none": "without {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index a81cefe3212..1001222c2b5 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -227,8 +227,8 @@ "getting_started.heading": "Розпочати", "getting_started.invite": "Запросити людей", "getting_started.open_source_notice": "Mastodon — програма з відкритим сирцевим кодом. Ви можете допомогти проєкту, або повідомити про проблеми на GitHub: {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Налаштування облікового запису", - "getting_started.terms": "Умови використання", "hashtag.column_header.tag_mode.all": "та {additional}", "hashtag.column_header.tag_mode.any": "або {additional}", "hashtag.column_header.tag_mode.none": "без {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Нічого не вдалося знайти за цими пошуковими термінами", "search_results.statuses": "Дмухів", "search_results.statuses_fts_disabled": "Пошук дописів за вмістом недоступний на даному сервері Mastodon.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {результат} few {результати} many {результатів} other {результатів}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Відкрити інтерфейс модерації для @{name}", "status.admin_status": "Відкрити цей статус в інтерфейсі модерації", "status.block": "Заблокувати @{name}", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index 2460e36a0a2..b79391be0ea 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -227,8 +227,8 @@ "getting_started.heading": "آغاز کریں", "getting_started.invite": "دوستوں کو دعوت دیں", "getting_started.open_source_notice": "ماسٹوڈون آزاد منبع سوفٹویر ہے. آپ {github} گِٹ ہب پر مسائل میں معاونت یا مشکلات کی اطلاع دے سکتے ہیں.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "ترتیباتِ اکاؤنٹ", - "getting_started.terms": "شرائط خدمات", "hashtag.column_header.tag_mode.all": "اور {additional}", "hashtag.column_header.tag_mode.any": "یا {additional}", "hashtag.column_header.tag_mode.none": "بغیر {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index a69a1830fd2..c349fcf8c4a 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -227,8 +227,8 @@ "getting_started.heading": "Quản lý", "getting_started.invite": "Mời bạn bè", "getting_started.open_source_notice": "Mastodon là phần mềm mã nguồn mở. Bạn có thể đóng góp hoặc báo lỗi trên GitHub tại {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "Bảo mật", - "getting_started.terms": "Điều khoản dịch vụ", "hashtag.column_header.tag_mode.all": "và {additional}", "hashtag.column_header.tag_mode.any": "hoặc {additional}", "hashtag.column_header.tag_mode.none": "mà không {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Không tìm thấy kết quả trùng khớp", "search_results.statuses": "Tút", "search_results.statuses_fts_disabled": "Máy chủ của bạn không bật tính năng tìm kiếm tút.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {kết quả} other {kết quả}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Mở giao diện quản trị @{name}", "status.admin_status": "Mở tút này trong giao diện quản trị", "status.block": "Chặn @{name}", diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json index b83ef1786a6..9d551e30a33 100644 --- a/app/javascript/mastodon/locales/zgh.json +++ b/app/javascript/mastodon/locales/zgh.json @@ -227,8 +227,8 @@ "getting_started.heading": "Getting started", "getting_started.invite": "Invite people", "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "ⵜⵉⵙⵖⴰⵍ ⵏ ⵓⵎⵉⴹⴰⵏ", - "getting_started.terms": "Terms of service", "hashtag.column_header.tag_mode.all": "ⴷ {additional}", "hashtag.column_header.tag_mode.any": "ⵏⵖ {additional}", "hashtag.column_header.tag_mode.none": "without {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "Toots", "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "ⴳⴷⵍ @{name}", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 40d9168a9b2..dfddf0a6650 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -227,8 +227,8 @@ "getting_started.heading": "开始使用", "getting_started.invite": "邀请用户", "getting_started.open_source_notice": "Mastodon 是开源软件。欢迎前往 GitHub({github})贡献代码或反馈问题。", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "账号设置", - "getting_started.terms": "使用条款", "hashtag.column_header.tag_mode.all": "以及 {additional}", "hashtag.column_header.tag_mode.any": "或是 {additional}", "hashtag.column_header.tag_mode.none": "而不用 {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "无法找到符合这些搜索词的任何内容", "search_results.statuses": "嘟文", "search_results.statuses_fts_disabled": "此 Mastodon 服务器未启用帖子内容搜索。", + "search_results.title": "Search for {q}", "search_results.total": "共 {count, number} 个结果", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "打开 @{name} 的管理界面", "status.admin_status": "打开此帖的管理界面", "status.block": "屏蔽 @{name}", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 47b21d52370..65c366a01bb 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -227,8 +227,8 @@ "getting_started.heading": "開始使用", "getting_started.invite": "邀請使用者", "getting_started.open_source_notice": "Mastodon(萬象)是一個開放源碼的軟件。你可以在官方 GitHub {github} 貢獻或者回報問題。", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "帳戶設定", - "getting_started.terms": "服務條款", "hashtag.column_header.tag_mode.all": "以及{additional}", "hashtag.column_header.tag_mode.any": "或是{additional}", "hashtag.column_header.tag_mode.none": "而無需{additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "Could not find anything for these search terms", "search_results.statuses": "文章", "search_results.statuses_fts_disabled": "此 Mastodon 伺服器並未啟用「搜尋文章內章」功能。", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} 項結果", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "開啟 @{name} 的管理介面", "status.admin_status": "在管理介面開啟這篇文章", "status.block": "封鎖 @{name}", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 8189e896c5f..42ee6528112 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -227,8 +227,8 @@ "getting_started.heading": "開始使用", "getting_started.invite": "邀請使用者", "getting_started.open_source_notice": "Mastodon 是開源軟體。您可以在 GitHub {github} 上貢獻或是回報問題。", + "getting_started.privacy_policy": "Privacy Policy", "getting_started.security": "帳號安全性設定", - "getting_started.terms": "服務條款", "hashtag.column_header.tag_mode.all": "以及 {additional}", "hashtag.column_header.tag_mode.any": "或是 {additional}", "hashtag.column_header.tag_mode.none": "而無需 {additional}", @@ -472,7 +472,11 @@ "search_results.nothing_found": "無法找到符合搜尋條件之結果", "search_results.statuses": "嘟文", "search_results.statuses_fts_disabled": "「依內容搜尋嘟文」未在此 Mastodon 伺服器啟用。", + "search_results.title": "Search for {q}", "search_results.total": "{count, number} 項結果", + "sign_in_banner.create_account": "Create account", + "sign_in_banner.sign_in": "Sign in", + "sign_in_banner.text": "Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.", "status.admin_account": "開啟 @{name} 的管理介面", "status.admin_status": "在管理介面開啟此嘟文", "status.block": "封鎖 @{name}", diff --git a/config/locales/activerecord.cs.yml b/config/locales/activerecord.cs.yml index 50c4fc8c3cb..5505254e5fa 100644 --- a/config/locales/activerecord.cs.yml +++ b/config/locales/activerecord.cs.yml @@ -40,3 +40,12 @@ cs: unreachable: pravděpodobně neexistuje role_id: elevated: nemůže být vyšší než vaše aktuální role + user_role: + attributes: + permissions_as_keys: + dangerous: obsahuje oprávnění, která nejsou bezpečná pro základní roli + elevated: nemůže obsahovat oprávnění, která vaše aktuální role nemá + own_role: nelze změnit s vaší aktuální rolí + position: + elevated: nemůže být vyšší než vaše aktuální role + own_role: nelze změnit s vaší aktuální rolí diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 432c10ce0a9..691cc868907 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -28,7 +28,6 @@ ar: learn_more: تعلم المزيد logged_in_as_html: أنت متصل حالياً كـ %{username}. logout_before_registering: أنت متصل سلفًا. - privacy_policy: سياسة الخصوصية rules: قوانين الخادم rules_html: 'فيما يلي ملخص للقوانين التي تحتاج إلى اتباعها إذا كنت تريد أن يكون لديك حساب على هذا الخادم من ماستدون:' see_whats_happening: اطّلع على ما يجري @@ -42,7 +41,6 @@ ar: two: منشورات zero: منشورات status_count_before: نشروا - terms: شروط الخدمة unavailable_content: محتوى غير متوفر unavailable_content_description: domain: الخادم @@ -675,9 +673,6 @@ ar: site_short_description: desc_html: يتم عرضه في لوحة جانبية و في البيانات الوصفية. قم بوصف ماستدون و ما يميز هذا السيرفر عن الآخرين في فقرة موجزة. إن تركت الحقل فارغا فسوف يتم عرض الوصف الافتراضي لمثيل الخادوم. title: مقدمة وصفية قصيرة عن مثيل الخادوم - site_terms: - desc_html: يمكنك كتابة سياسة الخصوصية الخاصة بك ، شروط الخدمة أو غيرها من القوانين. يمكنك استخدام علامات HTML - title: شروط الخدمة المخصصة site_title: اسم مثيل الخادم thumbnail: desc_html: يستخدم للعروض السابقة عبر Open Graph و API. 1200x630px موصى به @@ -1436,8 +1431,6 @@ ar: sensitive_content: محتوى حساس tags: does_not_match_previous_name: لا يطابق الإسم السابق - terms: - title: شروط الخدمة وسياسة الخصوصية على %{instance} themes: contrast: ماستدون (تباين عالٍ) default: ماستدون (داكن) diff --git a/config/locales/ast.yml b/config/locales/ast.yml index 2d175592bbe..2ab79c6fc44 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -17,14 +17,12 @@ ast: get_apps: En preseos móviles hosted_on: Mastodon ta agospiáu en %{domain} learn_more: Saber más - privacy_policy: Política de privacidá server_stats: 'Estadístiques del sirvidor:' source_code: Códigu fonte status_count_after: one: artículu other: artículos status_count_before: Que crearon - terms: Términos del serviciu unavailable_content_description: domain: Sirvidor reason: Motivu diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 43b8a13baf8..23c11e54314 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -21,7 +21,6 @@ bg: get_apps: Опитайте мобилно приложение hosted_on: Mastodon е хостван на %{domain} learn_more: Още информация - privacy_policy: Политика за поверителност see_whats_happening: Вижте какво се случва server_stats: 'Сървърна статистика:' source_code: Програмен код @@ -29,7 +28,6 @@ bg: one: състояние other: състояния status_count_before: Написали - terms: Условия за ползване unavailable_content: Модерирани сървъри unavailable_content_description: domain: Сървър diff --git a/config/locales/bn.yml b/config/locales/bn.yml index bbeab865571..a30d933e596 100644 --- a/config/locales/bn.yml +++ b/config/locales/bn.yml @@ -23,7 +23,6 @@ bn: hosted_on: এই মাস্টাডনটি আছে %{domain} এ instance_actor_flash: "এই অ্যাকাউন্টটি ভার্চুয়াল এক্টর যা নিজে কোনও সার্ভারের প্রতিনিধিত্ব করতে ব্যবহৃত হয় এবং কোনও পৃথক ব্যবহারকারী নয়। এটি ফেডারেশনের উদ্দেশ্যে ব্যবহৃত হয় এবং আপনি যদি পুরো ইনস্ট্যান্স ব্লক করতে না চান তবে অবরুদ্ধ করা উচিত নয়, সেক্ষেত্রে আপনার ডোমেন ব্লক ব্যবহার করা উচিত। \n" learn_more: বিস্তারিত জানুন - privacy_policy: গোপনীয়তা নীতি see_whats_happening: কী কী হচ্ছে দেখুন server_stats: 'সার্ভারের অবস্থা:' source_code: আসল তৈরীপত্র @@ -31,7 +30,6 @@ bn: one: অবস্থা other: স্থিতিগুলি status_count_before: কে লিখেছে - terms: ব্যবহারের শর্তাবলী unavailable_content: অনুপলব্ধ সামগ্রী unavailable_content_description: domain: সার্ভার diff --git a/config/locales/br.yml b/config/locales/br.yml index 4d34f338846..0e9b9d1ee02 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -9,7 +9,6 @@ br: contact: Darempred discover_users: Dizoleiñ implijer·ien·ezed learn_more: Gouzout hiroc'h - privacy_policy: Reolennoù prevezded rules: Reolennoù ar servijer server_stats: 'Stadegoù ar servijer:' source_code: Boneg tarzh @@ -19,7 +18,6 @@ br: one: toud other: toud two: toud - terms: Divizoù gwerzhañ hollek unavailable_content_description: domain: Dafariad user_count_after: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 43d77f636d3..3f381d76cb9 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -28,7 +28,7 @@ ca: learn_more: Aprèn més logged_in_as_html: Actualment has iniciat sessió com a %{username}. logout_before_registering: Ja has iniciat sessió. - privacy_policy: Política de privadesa + privacy_policy: Política de Privacitat rules: Normes del servidor rules_html: 'A continuació, es mostra un resum de les normes que has de seguir si vols tenir un compte en aquest servidor de Mastodon:' see_whats_happening: Mira què està passant @@ -39,7 +39,6 @@ ca: other: publicacions status_count_before: Qui ha publicat tagline: Xarxa social descentralitzada - terms: Condicions de servei unavailable_content: Servidors moderats unavailable_content_description: domain: Servidor @@ -797,8 +796,8 @@ ca: desc_html: Es mostra a la barra lateral i a metaetiquetes. Descriu en un únic paràgraf què és Mastodon i què fa que aquest servidor sigui especial. title: Descripció curta del servidor site_terms: - desc_html: Pots escriure la teva pròpia política de privadesa, els termes del servei o d'altres normes legals. Pots utilitzar etiquetes HTML - title: Termes del servei personalitzats + desc_html: Pots escriure la teva pròpia política de privacitat. Pots fer servir etiquetes HTML + title: Política de privacitat personalitzada site_title: Nom del servidor thumbnail: desc_html: S'utilitza per obtenir visualitzacions prèvies a través d'OpenGraph i API. Es recomana 1200x630px @@ -1710,7 +1709,7 @@ ca:

Atribució

This text is free to be adapted and remixed under the terms of the CC-BY (Attribution 4.0 International) license. - title: "%{instance} Condicions del servei i política de privadesa" + title: Política de Privacitat de %{instance} themes: contrast: Mastodon (alt contrast) default: Mastodon (fosc) diff --git a/config/locales/ckb.yml b/config/locales/ckb.yml index 6c91b571a32..fe2dffcc187 100644 --- a/config/locales/ckb.yml +++ b/config/locales/ckb.yml @@ -27,7 +27,6 @@ ckb: learn_more: زیاتر فێربه logged_in_as_html: لە ئێستادا تۆ وەک %{username} چوویتە ژوورەوە. logout_before_registering: تۆ پێشتر چوویتە ژوورەوە. - privacy_policy: ڕامیاری تایبەتێتی rules: یاساکانی سێرڤەر rules_html: 'لە خوارەوە کورتەیەک لەو یاسایانە دەخەینەڕوو کە پێویستە پەیڕەوی لێبکەیت ئەگەر بتەوێت ئەکاونتێکت هەبێت لەسەر ئەم سێرڤەرەی ماستۆدۆن:' see_whats_happening: بزانە چی ڕوودەدات @@ -37,7 +36,6 @@ ckb: one: دۆخ other: پۆست status_count_before: لە لایەن یەکەوە - terms: مەرجەکانی خزمەتگوزاری unavailable_content: ڕاژەی چاودێریکراو unavailable_content_description: domain: ڕاژەکار @@ -631,9 +629,6 @@ ckb: site_short_description: desc_html: نیشان لە شریتی لاتەنیشت و مێتا تاگەکان. لە پەرەگرافێک دا وەسفی بکە کە ماستۆدۆن چیە و چی وا لە ڕاژە کە دەکات تایبەت بێت. title: دەربارەی ئەم ڕاژە - site_terms: - desc_html: دەتوانیت سیاسەتی تایبەتیێتی خۆت بنووسیت، مەرجەکانی خزمەتگوزاری یان یاسایی تر. دەتوانیت تاگەکانی HTML بەکاربێنیت - title: مەرجەکانی خزمەتگوزاری ئاسایی site_title: ناوی ڕاژە thumbnail: desc_html: بۆ پێشبینین بەکارهاتووە لە ڕێگەی OpenGraph وە API. ڕووناکی بینین ١٢٠٠x٦٣٠پیکسێڵ پێشنیارکراوە @@ -1177,8 +1172,6 @@ ckb: sensitive_content: ناوەڕۆکی هەستیار tags: does_not_match_previous_name: لەگەڵ ناوی پێشوو یەک ناگرێتەوە - terms: - title: "%{instance} مەرجەکانی خزمەتگوزاری و سیاسەتی تایبەتیێتی" themes: contrast: ماستۆدۆن (کۆنتراستی بەرز) default: ماستۆدۆن (ڕەش) diff --git a/config/locales/co.yml b/config/locales/co.yml index 9844cb8c188..bb03394403b 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -25,7 +25,6 @@ co: Stu contu ghjè un'attore virtuale chì ghjove à riprisentà u servore sanu è micca un veru utilizatore. Hè utilizatu da a federazione è ùn deve micca esse bluccatu eccettu s'e voi vulete bluccà tuttu u servore, in quellu casu duvereste utilizà un blucchime di duminiu. learn_more: Amparà di più - privacy_policy: Pulitica di vita privata rules: Regule di u servore rules_html: 'Eccu un riassuntu di e regule da siguità s''e voi vulete creà un contu nant''à quessu servore di Mastodon:' see_whats_happening: Vede cio chì si passa @@ -35,7 +34,6 @@ co: one: statutu other: statuti status_count_before: Chì anu pubblicatu - terms: Cundizione di u serviziu unavailable_content: Cuntinutu micca dispunibule unavailable_content_description: domain: Servore @@ -589,9 +587,6 @@ co: site_short_description: desc_html: Mustratu indè a barra laterala è i tag meta. Spiegate quale hè Mastodon è ciò chì rende u vostru servore speciale in un paragrafu. S'ella hè lasciata viota, a discrizzione di u servore sarà utilizata. title: Descrizzione corta di u servore - site_terms: - desc_html: Quì pudete scrive e vostre regule di cunfidenzialità, cundizione d’usu o altre menzione legale. Pudete fà usu di marchi HTML - title: Termini persunalizati site_title: Nome di u servore thumbnail: desc_html: Utilizatu per viste cù OpenGraph è l’API. Ricumandemu 1200x630px @@ -1211,8 +1206,6 @@ co: sensitive_content: Cuntenutu sensibile tags: does_not_match_previous_name: ùn currisponde micca à l'anzianu nome - terms: - title: Termini d’usu è di cunfidenzialità per %{instance} themes: contrast: Mastodon (Cuntrastu altu) default: Mastodon (Scuru) diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 4478d242042..fbde9e051e5 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -28,7 +28,7 @@ cs: learn_more: Zjistit více logged_in_as_html: Aktuálně jste přihlášeni jako %{username}. logout_before_registering: Již jste přihlášeni. - privacy_policy: Zásady ochrany osobních údajů + privacy_policy: Ochrana osobních údajů rules: Pravidla serveru rules_html: 'Níže je shrnutí pravidel, která musíte dodržovat, pokud chcete mít účet na tomto Mastodon serveru:' see_whats_happening: Podívejte se, co se děje @@ -41,7 +41,6 @@ cs: other: příspěvků status_count_before: Kteří napsali tagline: Decentralizovaná sociální síť - terms: Podmínky používání unavailable_content: Moderované servery unavailable_content_description: domain: Server @@ -696,8 +695,10 @@ cs: moderation: Moderování special: Speciální delete: Smazat + description_html: Pomocí uživatelských rolímůžete upravit, ke kterým funkcím a oblastem mají přístup uživatelé Mastodon. edit: Upravit roli „%{name}“ everyone: Výchozí oprávnění + everyone_full_description_html: Toto je základní role ovlivňující všechny uživatele, a to i bez přiřazené role. Všechny ostatní role od ní dědí oprávnění. permissions_count: few: "%{count} oprávnění" many: "%{count} oprávnění" @@ -705,27 +706,41 @@ cs: other: "%{count} oprávnění" privileges: administrator: Správce + administrator_description: Uživatelé s tímto oprávněním obejdou všechna oprávnění delete_user_data: Mazat uživatelská data delete_user_data_description: Umožňuje uživatelům bezodkladně mazat data jiných uživatelů invite_users: Zvát uživatele invite_users_description: Umožňuje uživatelům zvát na server nové lidi manage_announcements: Spravovat oznámení + manage_announcements_description: Umožňuje uživatelům spravovat oznámení na serveru manage_appeals: Spravovat odvolání manage_appeals_description: Umožňuje uživatelům posuzovat odvolání proti moderátorským zásahům manage_blocks: Spravovat blokace + manage_blocks_description: Umožňuje uživatelům blokovat poskytovatele e-mailů a IP adresy manage_custom_emojis: Spravovat vlastní emoji manage_custom_emojis_description: Umožňuje uživatelům spravovat vlastní emoji na serveru + manage_federation: Spravovat federaci + manage_federation_description: Umožňuje uživatelům blokovat nebo povolit federaci s jinými doménami a ovládat doručování manage_invites: Spravovat pozvánky + manage_invites_description: Umožňuje uživatelům procházet a deaktivovat pozvánky manage_reports: Spravovat hlášení + manage_reports_description: Umožňuje uživatelům kontrolovat přehledy a provádět moderovací akce proti nim manage_roles: Spravovat role + manage_roles_description: Umožňuje uživatelům spravovat a přiřazovat role pod nimi manage_rules: Spravovat pravidla + manage_rules_description: Umožňuje uživatelům změnit pravidla serveru manage_settings: Spravovat nastavení + manage_settings_description: Umožňuje uživatelům změnit nastavení webu manage_taxonomies: Správa taxonomií + manage_taxonomies_description: Umožňuje uživatelům zkontrolovat populární obsah a aktualizovat nastavení hashtag manage_user_access: Spravovat uživatelské přístupy manage_user_access_description: Umožňuje uživatelům rušit jiným uživatelům dvoufázové ověřování, měnit jejich e-mailovou adresu a obnovovat jim hesla manage_users: Spravovat uživatele + manage_users_description: Umožňuje uživatelům zobrazit podrobnosti ostatních uživatelů a provádět moderování proti nim manage_webhooks: Spravovat webhooky + manage_webhooks_description: Umožňuje uživatelům nastavit webhooky pro administrativní události view_audit_log: Zobrazovat protokol auditu + view_audit_log_description: Umožňuje uživatelům vidět historii administrativních akcí na serveru view_dashboard: Zobrazit ovládací panel view_dashboard_description: Umožňuje uživatelům přístup k ovládacímu panelu a různým metrikám view_devops: Devops @@ -805,8 +820,8 @@ cs: desc_html: Zobrazeno v postranním panelu a meta značkách. V jednom odstavci popište, co je Mastodon a čím se tento server odlišuje od ostatních. title: Krátký popis serveru site_terms: - desc_html: Můžete si napsat vlastní zásady ochrany osobních údajů, podmínky používání či jiné právní dokumenty. Můžete použít HTML značky - title: Vlastní podmínky používání + desc_html: Můžete napsat své vlastní zásady ochrany osobních údajů. HTML tagy můžete použít + title: Vlastní zásady ochrany osobních údajů site_title: Název serveru thumbnail: desc_html: Používáno pro náhledy přes OpenGraph a API. Doporučujeme rozlišení 1200x630px @@ -1211,6 +1226,7 @@ cs: add_keyword: Přidat klíčové slovo keywords: Klíčová slova statuses: Individuální příspěvky + statuses_hint_html: Tento filtr platí pro výběr jednotlivých příspěvků bez ohledu na to, zda odpovídají klíčovým slovům níže. Zkontrolujte nebo odeberte příspěvky z filtru. title: Upravit filtr errors: deprecated_api_multiple_keywords: Tyto parametry nelze změnit z této aplikace, protože se vztahují na více než jedno klíčové slovo filtru. Použijte novější aplikaci nebo webové rozhraní. @@ -1226,6 +1242,11 @@ cs: many: "%{count} klíčových slov" one: "%{count} klíčové slovo" other: "%{count} klíčových slov" + statuses: + few: "%{count} příspěvků" + many: "%{count} příspěvků" + one: "%{count} příspěvek" + other: "%{count} příspěvků" title: Filtry new: save: Uložit nový filtr @@ -1235,6 +1256,7 @@ cs: batch: remove: Odstranit z filtru index: + hint: Tento filtr se vztahuje na výběr jednotlivých příspěvků bez ohledu na jiná kritéria. Do tohoto filtru můžete přidat více příspěvků z webového rozhraní. title: Filtrované příspěvky footer: developers: Vývojáři @@ -1736,7 +1758,7 @@ cs:

Tento dokument je dostupný pod licencí CC-BY-SA. Byl naposledy aktualizován 26. května 2022.

Původně adaptováno ze zásad ochrany osobních údajů projektu Discourse.

- title: Podmínky používání a zásady ochrany osobních údajů na serveru %{instance} + title: Zásady ochrany osobních údajů %{instance} themes: contrast: Mastodon (vysoký kontrast) default: Mastodon (tmavý) diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 7b6a0ef70e8..86a134a2632 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -28,7 +28,6 @@ cy: learn_more: Dysgu mwy logged_in_as_html: Rydych chi wedi mewngofnodi fel %{username}. logout_before_registering: Rydych chi eisoes wedi mewngofnodi. - privacy_policy: Polisi preifatrwydd rules: Rheolau gweinydd rules_html: 'Isod mae crynodeb o''r rheolau y mae angen i chi eu dilyn os ydych chi am gael cyfrif ar y gweinydd hwn o Mastodon:' see_whats_happening: Gweld beth sy'n digwydd @@ -42,7 +41,6 @@ cy: two: statwsau zero: statwsau status_count_before: Ysgrifennwyd gan - terms: Telerau gwasanaeth unavailable_content: Cynnwys nad yw ar gael unavailable_content_description: domain: Gweinydd @@ -498,9 +496,6 @@ cy: site_short_description: desc_html: Yn cael ei ddangos yn bar ar yr ochr a tagiau meto. Digrifiwch beth yw Mastodon a beth sy'n gwneud y gweinydd hwn mewn un paragraff. Os yn wag, wedi ei ragosod i ddangos i disgrifiad yr achos. title: Disgrifiad byr o'r achos - site_terms: - desc_html: Mae modd i chi ysgrifennu polisi preifatrwydd, termau gwasanaeth a cyfreitheg arall eich hun. Mae modd defnyddio tagiau HTML - title: Termau gwasanaeth wedi eu haddasu site_title: Enw'r achos thumbnail: desc_html: Ceith ei ddefnyddio ar gyfer rhagolygon drwy OpenGraph a'r API. Argymhellir 1200x630px @@ -1047,8 +1042,6 @@ cy: too_late: Mae'n rhy hwyr i apelio yn erbyn y rhybudd hwn tags: does_not_match_previous_name: ddim yn cyfateb i'r enw blaenorol - terms: - title: "%{instance} Termau Gwasanaeth a Polisi Preifatrwydd" themes: contrast: Mastodon (Cyferbyniad uchel) default: Mastodon (Tywyll) diff --git a/config/locales/da.yml b/config/locales/da.yml index 9b6250ad342..3379b82c3b7 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -39,7 +39,6 @@ da: other: indlæg status_count_before: Som har postet tagline: Decentraliseret socialt netværk - terms: Tjenestevilkår unavailable_content: Modererede servere unavailable_content_description: domain: Server @@ -796,8 +795,8 @@ da: desc_html: Vises på sidebjælke og metatags. Beskriv i et enkelt afsnit, hvad Mastodon er, og hvad der gør denne server speciel. title: Kort serverbeskrivelse site_terms: - desc_html: Der kan angives egen fortrolighedspolitik, tjenestevilkår el.lign. HTML-tags kan bruges - title: Tilpassede tjenestevilkår + desc_html: Man kan skrive sin egen fortrolighedspolitik. HTML-tags understøttes + title: Tilpasset fortrolighedspolitik site_title: Servernavn thumbnail: desc_html: Bruges til forhåndsvisninger via OpenGraph og API. 1200x630px anbefales @@ -1717,7 +1716,7 @@ da:

Dette dokument er CC-BY-SA. Det er senest opdateret 26. maj 2022.

Oprindeligt tilpasset fra Discourse-fortrolighedspolitik.

- title: Tjenestevilkår og Fortrolighedspolitik for %{instance} + title: "%{instance}-fortrolighedspolitik" themes: contrast: Mastodon (høj kontrast) default: Mastodont (mørkt) diff --git a/config/locales/de.yml b/config/locales/de.yml index d411886bf63..b84604a687e 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -28,7 +28,6 @@ de: learn_more: Mehr erfahren logged_in_as_html: Du bist derzeit als %{username} eingeloggt. logout_before_registering: Du bist bereits angemeldet. - privacy_policy: Datenschutzerklärung rules: Server-Regeln rules_html: 'Unten ist eine Zusammenfassung der Regeln, denen du folgen musst, wenn du ein Konto auf diesem Mastodon-Server haben möchtest:' see_whats_happening: Finde heraus, was gerade in der Welt los ist @@ -39,7 +38,6 @@ de: other: Beiträge status_count_before: mit tagline: Dezentrales soziales Netzwerk - terms: Nutzungsbedingungen unavailable_content: Nicht verfügbarer Inhalt unavailable_content_description: domain: Server @@ -796,9 +794,6 @@ de: site_short_description: desc_html: Wird in der Seitenleiste und in Meta-Tags angezeigt. Beschreibe in einem einzigen Abschnitt, was Mastodon ist und was diesen Server von anderen unterscheidet. Falls leer, wird die Server-Beschreibung verwendet. title: Kurze Beschreibung des Servers - site_terms: - desc_html: Hier kannst du deine eigenen Geschäftsbedingungen, Datenschutzerklärung und anderes rechtlich Relevante eintragen. Du kannst HTML-Tags nutzen - title: Benutzerdefinierte Geschäftsbedingungen site_title: Name des Servers thumbnail: desc_html: Wird für die Vorschau via OpenGraph und API verwendet. 1200×630 px wird empfohlen @@ -1687,7 +1682,6 @@ de:

Dies ist eine Übersetzung, Irrtümer und Übersetzungsfehler vorbehalten. Im Zweifelsfall gilt die englische Originalversion.

Dieses Dokument ist CC-BY-SA. Es wurde zuletzt aktualisiert am 26. Mai 2022.

Ursprünglich übernommen von der Discourse-Datenschutzerklärung.

- title: "%{instance} Nutzungsbedingungen und Datenschutzerklärung" themes: contrast: Mastodon (Hoher Kontrast) default: Mastodon (Dunkel) diff --git a/config/locales/el.yml b/config/locales/el.yml index 8c7c29ac23a..7b23b5f9f94 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -26,7 +26,7 @@ el: Χρησιμεύει στη λειτουργία της ομοσπονδίας και δε θα πρέπει να αποκλειστεί, εκτός κι αν είναι επιθυμητός ο αποκλεισμός ολόκληρου του κόμβου. Σε αυτή την περίπτωση θα πρέπει να χρησιμοποιηθεί η λειτουργία αποκλεισμού τομέα. learn_more: Μάθε περισσότερα logout_before_registering: Είστε ήδη συνδεδεμένοι. - privacy_policy: Πολιτική απορρήτου + privacy_policy: Πολιτική Απορρήτου rules: Κανόνες διακομιστή rules_html: 'Παρακάτω είναι μια σύνοψη των κανόνων που πρέπει να ακολουθήσετε αν θέλετε να έχετε ένα λογαριασμό σε αυτόν τον διακομιστή Mastodon:' see_whats_happening: Μάθε τι συμβαίνει @@ -37,7 +37,6 @@ el: other: δημοσιεύσεις status_count_before: Που έγραψαν tagline: Αποκεντρωμένο κοινωνικό δίκτυο - terms: Όροι χρήσης unavailable_content: Μη διαθέσιμο unavailable_content_description: domain: Διακομιστής @@ -570,8 +569,8 @@ el: desc_html: Εμφανίζεται στην πλαϊνή μπάρα και στα meta tags. Περιέγραψε τι είναι το Mastodon και τι κάνει αυτό τον διακομιστή ιδιαίτερο σε μια παράγραφο. Αν μείνει κενό, θα χρησιμοποιήσει την προκαθορισμένη περιγραφή του κόμβου. title: Σύντομη περιγραφή του κόμβου site_terms: - desc_html: Μπορείς να γράψεις τη δική σου πολιτική απορρήτου, όρους χρήσης ή άλλους νομικούς όρους. Μπορείς να χρησιμοποιήσεις HTML tags - title: Προσαρμοσμένοι όροι χρήσης της υπηρεσίας + desc_html: Μπορείτε να γράψετε τη δική σας πολιτική απορρήτου. Μπορείτε να χρησιμοποιήσετε ετικέτες HTML + title: Προσαρμοσμένη πολιτική απορρήτου site_title: Όνομα κόμβου thumbnail: desc_html: Χρησιμοποιείται για προεπισκοπήσεις μέσω του OpenGraph και του API. Συστήνεται 1200x630px @@ -1152,7 +1151,7 @@ el: tags: does_not_match_previous_name: δεν ταιριάζει με το προηγούμενο όνομα terms: - title: Όροι Χρήσης και Πολιτική Απορρήτου του κόμβου %{instance} + title: "%{instance} Πολιτική Απορρήτου" themes: contrast: Mastodon (Υψηλή αντίθεση) default: Mastodon (Σκοτεινό) diff --git a/config/locales/eo.yml b/config/locales/eo.yml index cca9b053112..c8a7534acc9 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -28,7 +28,6 @@ eo: learn_more: Lerni pli logged_in_as_html: Vi nun salutis kiel %{username}. logout_before_registering: Vi jam salutis. - privacy_policy: Politiko de privateco rules: Reguloj de la servilo see_whats_happening: Vidi kio okazas server_stats: 'Statistikoj de la servilo:' @@ -38,7 +37,6 @@ eo: other: mesaĝoj status_count_before: Kie skribiĝis tagline: Malcentrigita socia retejo - terms: Kondiĉoj de la servo unavailable_content: Moderigitaj serviloj unavailable_content_description: domain: Servilo @@ -587,9 +585,6 @@ eo: site_short_description: desc_html: Afiŝita en la flankpanelo kaj metadatumaj etikedoj. Priskribu kio estas Mastodon, kaj kio specialas en ĉi tiu nodo, per unu alineo. Se malplena, la priskribo de la servilo estos uzata. title: Mallonga priskribo de la servilo - site_terms: - desc_html: Vi povas skribi vian propran privatecan politikon, viajn uzkondiĉojn aŭ aliajn leĝaĵojn. Vi povas uzi HTML-etikedojn - title: Propraj kondiĉoj de la servo site_title: Nomo de la servilo thumbnail: desc_html: Uzata por antaŭvidoj per OpenGraph kaj per API. 1200x630px rekomendita @@ -1212,8 +1207,6 @@ eo: sensitive_content: Tikla enhavo tags: does_not_match_previous_name: ne kongruas kun la antaŭa nomo - terms: - title: Uzkondiĉoj kaj privateca politiko de %{instance} themes: contrast: Mastodon (Forta kontrasto) default: Mastodon (Malluma) diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 21c2dde6cab..469ca27d9c4 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -39,7 +39,6 @@ es-AR: other: mensajes status_count_before: Que enviaron tagline: Red social descentralizada - terms: Términos del servicio unavailable_content: Servidores moderados unavailable_content_description: domain: Servidor @@ -797,8 +796,8 @@ es-AR: desc_html: Mostrado en la barra lateral y las etiquetas de metadatos. Describe qué es Mastodon y qué hace especial a este servidor en un solo párrafo. title: Descripción corta del servidor site_terms: - desc_html: Podés escribir tus propias políticas de privacidad, términos del servicio u otras cuestiones legales. Podés usar etiquetas HTML - title: Términos del servicio personalizados + desc_html: Podés escribir tu propia política de privacidad. Podés usar etiquetas HTML + title: Política de privacidad personalizada site_title: Nombre del servidor thumbnail: desc_html: Usado para previsualizaciones vía OpenGraph y APIs. Se recomienda 1200x630 píxeles @@ -1719,7 +1718,7 @@ es-AR:

Este documento se publica bajo la licencia CC-BY-SA (Creative Commons - Atribución - CompartirIgual) y fue actualizado por última vez el 26 de mayo de 2022.

Originalmente adaptado de la Política de privacidad de Discourse.

- title: Términos del servicio y Políticas de privacidad de %{instance} + title: Política de privacidad de %{instance} themes: contrast: Alto contraste default: Oscuro diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 31e10c6fab4..92de8c872a3 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -28,7 +28,6 @@ es-MX: learn_more: Aprende más logged_in_as_html: Actualmente estás conectado como %{username}. logout_before_registering: Actualmente ya has iniciado sesión. - privacy_policy: Política de privacidad rules: Normas del servidor rules_html: 'A continuación hay un resumen de las normas que debes seguir si quieres tener una cuenta en este servidor de Mastodon:' see_whats_happening: Ver lo que está pasando @@ -39,7 +38,6 @@ es-MX: other: estados status_count_before: Qué han escrito tagline: Red social descentralizada - terms: Condiciones de servicio unavailable_content: Contenido no disponible unavailable_content_description: domain: Servidor @@ -796,9 +794,6 @@ es-MX: site_short_description: desc_html: Mostrado en la barra lateral y las etiquetas de metadatos. Describe lo que es Mastodon y qué hace especial a este servidor en un solo párrafo. si está vacío, pone por defecto la descripción de la instancia. title: Descripción corta de la instancia - site_terms: - desc_html: Puedes escribir tus propias políticas de privacidad, términos de servicio u otras legalidades. Puedes usar tags HTML - title: Términos de servicio personalizados site_title: Nombre de instancia thumbnail: desc_html: Se usa para muestras con OpenGraph y APIs. Se recomienda 1200x630px @@ -1686,7 +1681,6 @@ es-MX:

Si decidimos cambiar nuestra política de privacidad, publicaremos esos cambios en esta página.

Este documento es CC-BY-SA. Fue actualizado por última vez el 26 de mayo de 2022.

Adaptado originalmente desde la política de privacidad de Discourse.

- title: Términos del Servicio y Políticas de Privacidad de %{instance} themes: contrast: Alto contraste default: Mastodon diff --git a/config/locales/es.yml b/config/locales/es.yml index 8d9c2bbb347..14e9cc6653c 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -28,7 +28,6 @@ es: learn_more: Aprende más logged_in_as_html: Actualmente has iniciado sesión como %{username}. logout_before_registering: Ya has iniciado sesión. - privacy_policy: Política de privacidad rules: Normas del servidor rules_html: 'A continuación hay un resumen de las normas que debes seguir si quieres tener una cuenta en este servidor de Mastodon:' see_whats_happening: Ver lo que está pasando @@ -39,7 +38,6 @@ es: other: estados status_count_before: Qué han escrito tagline: Red social descentralizada - terms: Condiciones de servicio unavailable_content: Contenido no disponible unavailable_content_description: domain: Servidor @@ -796,9 +794,6 @@ es: site_short_description: desc_html: Mostrado en la barra lateral y las etiquetas de metadatos. Describe lo que es Mastodon y qué hace especial a este servidor en un solo párrafo. si está vacío, pone por defecto la descripción de la instancia. title: Descripción corta de la instancia - site_terms: - desc_html: Puedes escribir tus propias políticas de privacidad, términos de servicio u otras legalidades. Puedes usar tags HTML - title: Términos de servicio personalizados site_title: Nombre de instancia thumbnail: desc_html: Se usa para muestras con OpenGraph y APIs. Se recomienda 1200x630px @@ -1686,7 +1681,6 @@ es:

Si decidimos cambiar nuestra política de privacidad, publicaremos esos cambios en esta página.

Este documento es CC-BY-SA. Fue actualizado por última vez el 26 de mayo de 2022.

Adaptado originalmente desde la política de privacidad de Discourse.

- title: Términos del Servicio y Políticas de Privacidad de %{instance} themes: contrast: Alto contraste default: Mastodon diff --git a/config/locales/et.yml b/config/locales/et.yml index 5b354afd937..f6df72ee012 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -25,7 +25,6 @@ et: See konto on virtuaalne näitleja, mis esindab tervet serverit ning mitte ühtegi kindlat isikut. Seda kasutatakse föderatiivsetel põhjustel ning seda ei tohiks blokeerida, välja arvatud juhul, kui soovite blokeerida tervet serverit, kuid sellel juhul soovitame hoopis kasutada domeeni blokeerimist. learn_more: Lisateave - privacy_policy: Privaatsuspoliitika rules: Serveri reeglid rules_html: 'Järgneb kokkuvõte reeglitest, mida pead järgima, kui lood endale siin Mastodoni serveris konto:' see_whats_happening: Vaata, mis toimub @@ -35,7 +34,6 @@ et: one: postitust other: staatuseid status_count_before: Kes on avaldanud - terms: Kasutustingimused unavailable_content: Sisu pole saadaval unavailable_content_description: reason: Põhjus @@ -451,9 +449,6 @@ et: site_short_description: desc_html: Kuvatud küljeribal ja metasiltides. Kirjelda, mis on Mastodon ja mis on selles serveris erilist ühes lõigus. title: Serveri lühikirjeldus - site_terms: - desc_html: Te saate kirjutada oma privaatsuspoliitika, kasutustingimused jm seaduslikku infot. Te saate kasutada HTMLi silte - title: Kasutustingimused site_title: Serveri nimi thumbnail: desc_html: Kasutatud OpenGraph ja API eelvaadeteks. 1200x630px soovitatud @@ -938,8 +933,6 @@ et: sensitive_content: Tundlik sisu tags: does_not_match_previous_name: ei ühti eelmise nimega - terms: - title: "%{instance} Kasutustingimused ja Privaatsuspoliitika" themes: contrast: Mastodon (Kõrge kontrast) default: Mastodon (Tume) diff --git a/config/locales/eu.yml b/config/locales/eu.yml index f0910aaba3e..9d783724cbd 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -26,7 +26,6 @@ eu: learn_more: Ikasi gehiago logged_in_as_html: "%{username} bezala saioa hasita zaude." logout_before_registering: Saioa hasi duzu jada. - privacy_policy: Pribatutasun politika rules: Zerbitzariaren arauak rules_html: 'Behean Mastodon zerbitzari honetan kontua eduki nahi baduzu jarraitu beharreko arauen laburpena daukazu:' see_whats_happening: Ikusi zer gertatzen ari den @@ -36,7 +35,6 @@ eu: one: bidalketa other: bidalketa status_count_before: Hauek - terms: Erabilera baldintzak unavailable_content: Eduki eskuraezina unavailable_content_description: domain: Zerbitzaria @@ -684,9 +682,6 @@ eu: site_short_description: desc_html: Albo-barra eta meta etiketetan bistaratua. Deskribatu zerk egiten duen Mastodon zerbitzari hau berezia paragrafo batean. Hutsik lagatzekotan lehenetsitako deskripzioa agertuko da. title: Zerbitzariaren deskripzio laburra - site_terms: - desc_html: Zure pribatutasun politika, erabilera baldintzak eta bestelako testu legalak idatzi ditzakezu. HTML etiketak erabili ditzakezu - title: Erabilera baldintza pertsonalizatuak site_title: Zerbitzariaren izena thumbnail: desc_html: Aurrebistetarako erabilia OpenGraph eta API bidez. 1200x630px aholkatzen da @@ -1385,8 +1380,6 @@ eu: sensitive_content: 'Kontuz: Eduki hunkigarria' tags: does_not_match_previous_name: ez dator aurreko izenarekin bat - terms: - title: "%{instance} instantziaren erabilera baldintzak eta pribatutasun politika" themes: contrast: Mastodon (Kontraste altua) default: Mastodon (Iluna) diff --git a/config/locales/fa.yml b/config/locales/fa.yml index fa6448770e8..39424f3d6af 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -28,7 +28,6 @@ fa: learn_more: بیشتر بدانید logged_in_as_html: شما هم‌اکنون به عنوان %{username} وارد شده‌اید. logout_before_registering: شما هم‌اکنون وارد شده‌اید. - privacy_policy: سیاست رازداری rules: قوانین کارساز rules_html: 'در زیر خلاصه‌ای از قوانینی که در صورت علاقه به داشتن حسابی روی این کارساز ماستودون، باید رعایت کنید آمده است:' see_whats_happening: ببینید چه خبر است @@ -38,7 +37,6 @@ fa: one: چیز نوشته‌اند other: چیز نوشته‌اند status_count_before: که در کنار هم - terms: شرایط خدمت unavailable_content: محتوای ناموجود unavailable_content_description: domain: کارساز @@ -664,9 +662,6 @@ fa: site_short_description: desc_html: روی نوار کناری و همچنین به عنوان فرادادهٔ صفحه‌ها نمایش می‌یابد. در یک بند توضیح دهید که ماستودون چیست و چرا این کارساز با بقیه فرق دارد. title: توضیح کوتاه دربارهٔ سرور - site_terms: - desc_html: می‌توانید سیاست رازداری، شرایط استفاده، یا سایر مسائل قانونی را به دلخواه خود بنویسید. تگ‌های HTML هم مجاز است - title: شرایط استفادهٔ سفارشی site_title: نام سرور thumbnail: desc_html: برای دیدن با OpenGraph و رابط برنامه‌نویسی. وضوح پیشنهادی ۱۲۰۰×۶۳۰ پیکسل @@ -1352,8 +1347,6 @@ fa: sensitive_content: محتوای حساس tags: does_not_match_previous_name: با نام پیشین مطابق نیست - terms: - title: شرایط استفاده و سیاست رازداری %{instance} themes: contrast: ماستودون (سایه‌روشن بالا) default: ماستودون (تیره) diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 397a40e694c..1416c12501f 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -28,7 +28,6 @@ fi: learn_more: Lisätietoja logged_in_as_html: Olet kirjautunut sisään nimellä %{username}. logout_before_registering: Olet jo kirjautunut sisään. - privacy_policy: Tietosuojakäytäntö rules: Palvelimen säännöt rules_html: 'Alla on yhteenveto säännöistä, joita sinun on noudatettava, jos haluat olla tili tällä Mastodonin palvelimella:' see_whats_happening: Näe mitä tapahtuu @@ -39,7 +38,6 @@ fi: other: julkaisua status_count_before: Julkaistu tagline: Hajautettu sosiaalinen verkosto - terms: Käyttöehdot unavailable_content: Moderoidut palvelimet unavailable_content_description: domain: Palvelin @@ -790,9 +788,6 @@ fi: site_short_description: desc_html: Näytetään sivupalkissa ja kuvauksessa. Kerro yhdessä kappaleessa, mitä Mastodon on ja mikä tekee palvelimesta erityisen. title: Lyhyt instanssin kuvaus - site_terms: - desc_html: Tähän voit kirjoittaa tietosuojakäytännöistä, käyttöehdoista ja sen sellaisista asioista. Voit käyttää HTML-tageja - title: Omavalintaiset käyttöehdot site_title: Instanssin nimi thumbnail: desc_html: Käytetään esikatseluissa OpenGraphin ja API:n kautta. Suosituskoko 1200x630 pikseliä @@ -1618,8 +1613,6 @@ fi: too_late: On liian myöhäistä vedota tähän varoitukseen tags: does_not_match_previous_name: ei vastaa edellistä nimeä - terms: - title: "%{instance}, käyttöehdot ja tietosuojakäytäntö" themes: contrast: Mastodon (Korkea kontrasti) default: Mastodon (Tumma) diff --git a/config/locales/fr.yml b/config/locales/fr.yml index a0409693c62..ff10ff636a1 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -28,7 +28,6 @@ fr: learn_more: En savoir plus logged_in_as_html: Vous êtes actuellement connecté·e en tant que %{username}. logout_before_registering: Vous êtes déjà connecté·e. - privacy_policy: Politique de confidentialité rules: Règles du serveur rules_html: 'Voici un résumé des règles que vous devez suivre si vous voulez avoir un compte sur ce serveur de Mastodon :' see_whats_happening: Quoi de neuf @@ -39,7 +38,6 @@ fr: other: messages status_count_before: Ayant publié tagline: Réseau social décentralisé - terms: Conditions d’utilisation unavailable_content: Serveurs modérés unavailable_content_description: domain: Serveur @@ -781,9 +779,6 @@ fr: site_short_description: desc_html: Affichée dans la barre latérale et dans les méta-tags. Décrivez ce qui rend spécifique ce serveur Mastodon en un seul paragraphe. Si laissée vide, la description du serveur sera affiché par défaut. title: Description courte du serveur - site_terms: - desc_html: Vous pouvez écrire votre propre politique de confidentialité, conditions d’utilisation ou autre jargon juridique. Vous pouvez utiliser des balises HTML - title: Politique de confidentialité site_title: Nom du serveur thumbnail: desc_html: Utilisée pour les prévisualisations via OpenGraph et l’API. 1200x630px recommandé @@ -1676,7 +1671,6 @@ fr:

Ce document est publié sous licence CC-BY-SA. Il a été mis à jour pour la dernière fois le 26 mai 2022.

Initialement adapté de la politique de confidentialité de Discourse.

- title: Conditions d’utilisation et politique de confidentialité de %{instance} themes: contrast: Mastodon (Contraste élevé) default: Mastodon (Sombre) diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 19a67a8ec3a..4656b83db8e 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -2,7 +2,6 @@ ga: about: api: API - privacy_policy: Polasaí príobháideachais unavailable_content_description: domain: Freastalaí reason: Fáth diff --git a/config/locales/gd.yml b/config/locales/gd.yml index 7c8df8f6b7c..2f0639990fb 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -28,7 +28,6 @@ gd: learn_more: Barrachd fiosrachaidh logged_in_as_html: Tha thu air do chlàradh a-steach an-dràsta mar %{username}. logout_before_registering: Tha thu air clàradh a-steach mu thràth. - privacy_policy: Poileasaidh prìobhaideachd rules: Riaghailtean an fhrithealaiche rules_html: 'Tha geàrr-chunntas air na riaghailtean a dh’fheumas tu gèilleadh riutha ma tha thu airson cunntas fhaighinn air an fhrithealaiche Mastodon seo gu h-ìosal:' see_whats_happening: Faic dè tha dol @@ -41,7 +40,6 @@ gd: two: phost status_count_before: A dh’fhoillsich tagline: Lìonra sòisealta sgaoilte - terms: Teirmichean na seirbheise unavailable_content: Frithealaichean fo mhaorsainneachd unavailable_content_description: domain: Frithealaiche @@ -813,9 +811,6 @@ gd: site_short_description: desc_html: Nochdaidh seo air a’ bhàr-taoibh agus sna meata-thagaichean. Mìnich dè th’ ann am Mastodon agus dè tha sònraichte mun fhrithealaiche agad ann an aon earrann a-mhàin. title: Tuairisgeul goirid an fhrithealaiche - site_terms: - desc_html: "’S urrainn dhut am poileasaidh prìobhaideachd no teirmichean na seirbheise agad fhèin no fiosrachadh laghail sa bith eile a sgrìobhadh. ‘S urrainn dhut tagaichean HTML a chleachdadh" - title: Teirmichean gnàthaichte na seirbheise site_title: Ainm an fhrithealaiche thumbnail: desc_html: Thèid seo a chleachdadh airson ro-sheallaidhean slighe OpenGraph no API. Mholamaid 1200x630px @@ -1748,7 +1743,6 @@ gd:

Tha an sgrìobhainn seo fo cheadachas CC-BY-SA. Chaidh ùrachadh an turas mu dheireadh an t-26mh dhen Chèitean 2022.

Chaidh a fhreagarrachadh o thùs o phoileasaidh prìobhaideachd Discourse.

- title: Teirmichean na seirbheise ⁊ poileasaidh prìobhaideachd %{instance} themes: contrast: Mastodon (iomsgaradh àrd) default: Mastodon (dorcha) diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 6c32fcaf3da..23b3d52ae7b 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -28,7 +28,7 @@ gl: learn_more: Saber máis logged_in_as_html: Entraches como %{username}. logout_before_registering: Xa iniciaches sesión. - privacy_policy: Política de privacidade + privacy_policy: Política de Privacidade rules: Regras do servidor rules_html: 'Aquí tes un resumo das regras que debes seguir se queres ter unha conta neste servidor de Mastodon:' see_whats_happening: Mira o que acontece @@ -39,7 +39,6 @@ gl: other: publicacións status_count_before: Que publicaron tagline: Rede social descentralizada - terms: Termos do servizo unavailable_content: Contido non dispoñíbel unavailable_content_description: domain: Servidor @@ -797,8 +796,8 @@ gl: desc_html: Amosado na barra lateral e nos cancelos meta. Describe o que é Mastodon e que fai especial a este servidor nun só parágrafo. Se está baleiro, amosará a descrición do servidor. title: Descrición curta do servidor site_terms: - desc_html: Podes escribir a túa propia política de privacidade, termos de servizo ou aclaracións legais. Podes empregar cancelos HTML - title: Termos de servizo personalizados + desc_html: Podes escribir a túa propia Política de Privacidade e usar etiquetas HTML + title: Política de Privacidade propia site_title: Nome do servidor thumbnail: desc_html: Utilizado para vistas previsas vía OpenGraph e API. Recoméndase 1200x630px @@ -1686,7 +1685,7 @@ gl:

Se decidimos cambiar a nosa política de privacidade publicaremos os cambios nesta páxina.

Este documento ten licenza CC-BY-SA. Actualizouse o 26 de maio de 2022.

Adaptado do orixinal política de privacidade de Discourse.

- title: "%{instance} Termos do Servizo e Política de Intimidade" + title: Política de Privacidade de %{instance} themes: contrast: Mastodon (Alto contraste) default: Mastodon (Escuro) diff --git a/config/locales/he.yml b/config/locales/he.yml index c340f6e6c7e..3ec99349ad4 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -28,7 +28,6 @@ he: learn_more: מידע נוסף logged_in_as_html: הנך מחובר/ת כרגע כ-%{username}. logout_before_registering: חשבון זה כבר מחובר. - privacy_policy: מדיניות פרטיות rules: כללי השרת rules_html: 'להלן סיכום הכללים שעליך לעקוב אחריהם על מנת להשתמש בחשבון בשרת מסטודון זה:' see_whats_happening: מה קורה כעת @@ -41,7 +40,6 @@ he: two: פוסטים status_count_before: שכתבו tagline: רשת חברתית מבוזרת - terms: תנאי שימוש unavailable_content: שרתים מוגבלים unavailable_content_description: domain: שרת @@ -822,9 +820,6 @@ he: site_short_description: desc_html: מוצג בעמודה הצידית ובמטא תגים. מתאר מהו מסטודון ומה מיחד שרת זה בפסקה בודדת. title: תאור שרת קצר - site_terms: - desc_html: ניתן לכתוב מדיניות פרטיות, תנאי שירות ושאר מסמכים חוקיים בעצמך. ניתן להשתמש בתגי HTML - title: תנאי שירות יחודיים site_title: כותרת האתר thumbnail: desc_html: משמש לתצוגה מקדימה דרך OpenGraph והממשק. מומלץ 1200x630px @@ -1751,7 +1746,6 @@ he:

This document is CC-BY-SA. It was last updated May 26, 2022.

Originally adapted from the Discourse privacy policy.

- title: תנאי שימוש ומדיניות פרטיות ב-%{instance} themes: contrast: מסטודון (ניגודיות גבוהה) default: מסטודון (כהה) diff --git a/config/locales/hi.yml b/config/locales/hi.yml index d0b1082fcd7..9a9e3aa7b52 100644 --- a/config/locales/hi.yml +++ b/config/locales/hi.yml @@ -5,7 +5,6 @@ hi: active_count_after: सक्रिय contact: संपर्क learn_more: अधिक जानें - privacy_policy: गोपनीयता नीति status_count_after: one: स्थिति other: स्थितियां diff --git a/config/locales/hr.yml b/config/locales/hr.yml index 6f2d4139982..89ce1b62552 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -14,11 +14,9 @@ hr: documentation: Dokumentacija get_apps: Isprobajte mobilnu aplikaciju learn_more: Saznajte više - privacy_policy: Politika privatnosti server_stats: 'Statistika poslužitelja:' source_code: Izvorni kôd status_count_before: Koji su objavili - terms: Uvjeti pružanja usluga unavailable_content: Moderirani poslužitelji accounts: follow: Prati diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 53e514f153e..582eb7d828e 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -28,7 +28,6 @@ hu: learn_more: Tudj meg többet logged_in_as_html: Belépve, mint %{username}. logout_before_registering: Már be vagy jelentkezve. - privacy_policy: Adatvédelmi szabályzat rules: Szerverünk szabályai rules_html: 'Alább látod azon követendő szabályok összefoglalóját, melyet be kell tartanod, ha szeretnél fiókot ezen a szerveren:' see_whats_happening: Nézd, mi történik @@ -39,7 +38,6 @@ hu: other: bejegyzést írt status_count_before: Eddig tagline: Decentralizált szociális hálózat - terms: Felhasználási feltételek unavailable_content: Kimoderált szerverek unavailable_content_description: domain: Szerver @@ -798,9 +796,6 @@ hu: site_short_description: desc_html: Oldalsávban és meta tag-ekben jelenik meg. Írd le, mi teszi ezt a szervert különlegessé egyetlen bekezdésben. title: Rövid leírás - site_terms: - desc_html: Megírhatod saját adatkezelési szabályzatodat, felhasználási feltételeidet vagy más hasonló jellegű dokumentumodat. HTML-tageket is használhatsz - title: Egyéni felhasználási feltételek site_title: A szerver neve thumbnail: desc_html: Az OpenGraph-on és API-n keresztüli előnézetekhez használatos. Ajánlott mérete 1200×630 képpont. @@ -1721,7 +1716,6 @@ hu:

Ez a dokumentum CC-BY-SA. Utoljára 2022.05.26-án frissült.

Eredetileg innen adaptálva Discourse privacy policy.

- title: "%{instance} Felhasználási feltételek és Adatkezelési nyilatkozat" themes: contrast: Mastodon (Nagy kontrasztú) default: Mastodon (Sötét) diff --git a/config/locales/hy.yml b/config/locales/hy.yml index 61b08d6e00a..164bafbbe2e 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -23,7 +23,6 @@ hy: hosted_on: Մաստոդոնը տեղակայուած է %{domain}ում instance_actor_flash: "Այս հաշիւ վիրտուալ դերասան է, օգտագործուում է սպասարկիչը, այլ ոչ անհատ օգտատիրոջը ներկայացնելու, համար։ Օգտագործուում է ֆեդերացիայի նպատակով, ու չպէտք է արգելափակուի, եթէ չէք ցանկանում արգելափակել ողջ հանգոյցը, որի դէպքում պէտք է օգտագործէք տիրոյթի արգելափակումը։ \n" learn_more: Իմանալ ավելին - privacy_policy: Գաղտնիության քաղաքականություն rules: Սերուերի կանոնները rules_html: Այս սերուերում հաշիւ ունենալու համար անհրաժեշտ է պահպանել ստորեւ նշուած կանոնները։ see_whats_happening: Տես ինչ կը կատարուի @@ -33,7 +32,6 @@ hy: one: գրառում other: ստատուս status_count_before: Որոնք արել են՝ - terms: Ծառայութեան պայմանները unavailable_content: Մոդերացուող սպասարկիչներ unavailable_content_description: domain: Սպասարկիչ @@ -466,9 +464,6 @@ hy: title: Կայքի նկարագրութիւն site_short_description: title: Կայքի հակիրճ նկարագրութիւն - site_terms: - desc_html: Դու կարող ես գրել քո սեփական գաղտնիութեան քաղաքականութիւնը, օգտագործման պայմանները եւ այլ կանոններ։ Կարող ես օգտագործել HTML թեգեր - title: Սեփական օգտագործման կանոնները site_title: Սպասարկչի անուն thumbnail: title: Հանգոյցի նկարը diff --git a/config/locales/id.yml b/config/locales/id.yml index a66b62d5205..516ba321acc 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -26,7 +26,6 @@ id: learn_more: Pelajari selengkapnya logged_in_as_html: Anda sedang masuk sebagai %{username}. logout_before_registering: Anda sudah masuk. - privacy_policy: Kebijakan Privasi rules: Aturan server rules_html: 'Di bawah ini adalah ringkasan aturan yang perlu Anda ikuti jika Anda ingin memiliki akun di server Mastodon ini:' see_whats_happening: Lihat apa yang sedang terjadi @@ -36,7 +35,6 @@ id: other: status status_count_before: Yang telah menulis tagline: Jejaring sosial terdesentralisasi - terms: Kebijakan layanan unavailable_content: Konten tak tersedia unavailable_content_description: domain: Server @@ -700,9 +698,6 @@ id: site_short_description: desc_html: Ditampilkan pada bilah samping dan tag meta. Jelaskan apa itu Mastodon dan yang membuat server ini spesial dalam satu paragraf. title: Deskripsi server pendek - site_terms: - desc_html: Anda dapat menulis kebijakan privasi, ketentuan layanan, atau hal legal lainnya sendiri. Anda dapat menggunakan tag HTML - title: Ketentuan layanan kustom site_title: Judul Situs thumbnail: desc_html: Dipakai sebagai pratinjau via OpenGraph dan API. Direkomendasikan 1200x630px @@ -1485,8 +1480,6 @@ id: too_late: Terlambat untuk mengajukan banding hukuman ini tags: does_not_match_previous_name: tidak cocok dengan nama sebelumnya - terms: - title: "%{instance} Ketentuan Layanan dan Kebijakan Privasi" themes: contrast: Mastodon (Kontras tinggi) default: Mastodon (Gelap) diff --git a/config/locales/io.yml b/config/locales/io.yml index 56258e6460b..6cb06d24974 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -39,7 +39,6 @@ io: other: posti status_count_before: Qua publikigis tagline: Necentralizita sociala reto - terms: Serveskondicioni unavailable_content: Jerata servili unavailable_content_description: domain: Servilo @@ -797,8 +796,8 @@ io: desc_html: Montresas en flankobaro e metatagi. Deskriptez Mastodon e por quo ca servilo esas specala per 1 paragrafo. title: Kurta servildeskripto site_terms: - desc_html: Vu povas skribar sua privatesguidilo, serveskondicioni e altra legi. Vu povas uzar HTML-tagi - title: Kustumizita serveskondicioni + desc_html: Vu povas adjuntar sua privatesguidilo. Vu povas uzar tagi di HTML + title: Kustumizita privatesguidilo site_title: Site title thumbnail: desc_html: Uzesis por previdi tra OpenGraph e API. 1200x630px rekomendesas @@ -1720,7 +1719,7 @@ io:

Ca dokumento esas CC-BY-SA.

Tradukesis e modifikesis de Angla de Discourse privacy policy.

- title: Serveskondiconi e Privatesguidilo di %{instance} + title: Privatesguidilo di %{instance} themes: contrast: Mastodon (Alta kontrasteso) default: Mastodon (Obskura) diff --git a/config/locales/is.yml b/config/locales/is.yml index 841645c91d3..2448647fa66 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -39,7 +39,6 @@ is: other: færslur status_count_before: Sem stóðu fyrir tagline: Dreift samfélagsnet - terms: Þjónustuskilmálar unavailable_content: Ekki tiltækt efni unavailable_content_description: domain: Vefþjónn @@ -797,8 +796,8 @@ is: desc_html: Birt á hliðarspjaldi og í lýsigögnum. Lýstu því hvað Mastodon gerir og hvað það er sem geri þennan vefþjón sérstakan, í einni málsgrein. title: Stutt lýsing á netþjóninum site_terms: - desc_html: Þú getur skrifað þína eigin persónuverndarstefnu, þjónustuskilmála eða annað lagatæknilegt. Þú getur notað HTML-einindi - title: Sérsniðnir þjónustuskilmálar + desc_html: Þú getur skrifað þína eigin persónuverndarstefnu. Nota má HTML-einindi + title: Sérsniðin persónuverndarstefna site_title: Heiti vefþjóns thumbnail: desc_html: Notað við forskoðun í gegnum OpenGraph og API-kerfisviðmót. Mælt með 1200×630 mynddílum @@ -1719,7 +1718,7 @@ is:

Þetta skjal er CC-BY-SA nptkunarleyfi. Það var síðast uppfært 26. maí 2022.

Upphaflega aðlagað frá persónuverndarstefnu Discourse.

- title: "%{instance} - Þjónustuskilmálar og persónuverndarstefna" + title: Persónuverndarstefna á %{instance} themes: contrast: Mastodon (mikil birtuskil) default: Mastodon (dökkt) diff --git a/config/locales/it.yml b/config/locales/it.yml index ff3120f34c3..5e670cb077f 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -28,7 +28,7 @@ it: learn_more: Scopri altro logged_in_as_html: Sei correntemente connesso come %{username}. logout_before_registering: Hai già effettuato l'accesso. - privacy_policy: Politica della privacy + privacy_policy: Politica sulla Privacy rules: Regole del server rules_html: 'Di seguito è riportato un riassunto delle regole che devi seguire se vuoi avere un account su questo server di Mastodon:' see_whats_happening: Guarda cosa succede @@ -39,7 +39,6 @@ it: other: stati status_count_before: Che hanno pubblicato tagline: Social network decentralizzato - terms: Termini di Servizio unavailable_content: Server moderati unavailable_content_description: domain: Server @@ -797,8 +796,8 @@ it: desc_html: Mostrato nella barra laterale e nei tag meta. Descrive in un paragrafo che cos'è Mastodon e che cosa rende questo server speciale. Se vuoto, sarà usata la descrizione predefinita del server. title: Breve descrizione del server site_terms: - desc_html: Potete scrivere la vostra politica sulla privacy, condizioni del servizio o altre informazioni legali. Potete usare tag HTML - title: Termini di servizio personalizzati + desc_html: Puoi scrivere la tua politica sulla privacy. Puoi usare i tag HTML + title: Politica sulla privacy personalizzata site_title: Nome del server thumbnail: desc_html: Usato per anteprime tramite OpenGraph e API. 1200x630px consigliati @@ -1721,7 +1720,7 @@ it:

Questo documento è CC-BY-SA. L'ultimo aggiornamento è del 26 maggio 2022.

Adattato originalmente dal Discorso Politica della Privacy.

- title: "%{instance} Termini di servizio e politica della privacy" + title: Politica sulla privacy di %{instance} themes: contrast: Mastodon (contrasto elevato) default: Mastodon (scuro) diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 133835b5899..ae71d992499 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -36,7 +36,6 @@ ja: other: 投稿 status_count_before: 投稿数 tagline: 分散型ソーシャルネットワーク - terms: 利用規約 unavailable_content: 制限中のサーバー unavailable_content_description: domain: サーバー @@ -97,11 +96,17 @@ ja: avatar: アイコン by_domain: ドメイン change_email: + changed_msg: メールアドレスを変更しました! current_email: 現在のメールアドレス label: メールアドレスを変更 new_email: 新しいメールアドレス submit: メールアドレスの変更 title: "%{username}さんのメールアドレスを変更" + change_role: + changed_msg: ロールを変更しました! + label: ロールを変更 + no_role: ロールがありません + title: "%{username}さんのロールを変更" confirm: 確認 confirmed: 確認済み confirming: 確認中 @@ -179,7 +184,7 @@ ja: reset: リセット reset_password: パスワード再設定 resubscribe: 再講読 - role: 役割 + role: ロール search: 検索 search_same_email_domain: 同じドメインのメールアドレスを使用しているユーザー search_same_ip: 同じIPのユーザーを検索 @@ -222,17 +227,21 @@ ja: approve_user: ユーザーの承認 assigned_to_self_report: 通報の担当者に設定 change_email_user: ユーザーのメールアドレスを変更 + change_role_user: ユーザーのロールを変更 confirm_user: ユーザーの確認 create_account_warning: 警告を作成 create_announcement: お知らせを作成 + create_canonical_email_block: メールブロックを作成 create_custom_emoji: カスタム絵文字を作成 create_domain_allow: 連合を許可 create_domain_block: ドメインブロックを作成 create_email_domain_block: メールドメインブロックを作成 create_ip_block: IPルールを作成 create_unavailable_domain: 配送できないドメインを作成 + create_user_role: ロールを作成 demote_user: ユーザーを降格 destroy_announcement: お知らせを削除 + destroy_canonical_email_block: メールブロックを削除 destroy_custom_emoji: カスタム絵文字を削除 destroy_domain_allow: 連合許可を外す destroy_domain_block: ドメインブロックを削除 @@ -241,6 +250,7 @@ ja: destroy_ip_block: IPルールを削除 destroy_status: 投稿を削除 destroy_unavailable_domain: 配送できないドメインを削除 + destroy_user_role: ロールを削除 disable_2fa_user: 二要素認証を無効化 disable_custom_emoji: カスタム絵文字を無効化 disable_sign_in_token_auth_user: ユーザーのメールトークン認証を無効にする @@ -267,7 +277,9 @@ ja: update_announcement: お知らせを更新 update_custom_emoji: カスタム絵文字を更新 update_domain_block: ドメインブロックを更新 + update_ip_block: IPルールを更新 update_status: 投稿を更新 + update_user_role: ロールを更新 actions: approve_appeal_html: "%{name}さんが%{target}さんからの抗議を承認しました" approve_user_html: "%{target}から登録された%{name}さんを承認しました" @@ -622,9 +634,9 @@ ja: updated_at: 更新日時 view_profile: プロフィールを表示 roles: - add_new: 役割を追加 + add_new: ロールを追加 assigned_users: - other: "%{count} 人" + other: "%{count}人" categories: administration: 管理 devops: 開発者 @@ -632,24 +644,24 @@ ja: moderation: モデレーション delete: 削除 description_html: "ユーザー ロールを使用すると、ユーザーがアクセスできる Mastodon の機能や領域をカスタマイズできます。" - edit: "'%{name}' の役割を編集" + edit: "『%{name}』のロールを編集" everyone: デフォルトの権限 everyone_full_description_html: これは、割り当てられたロールを持っていないものであっても、 すべてのユーザー に影響を与える 基本ロールです。 他のすべてのロールは、そこから権限を継承します。 permissions_count: - other: "%{count} つの権限" + other: "%{count}件の権限" privileges: administrator: 管理者 administrator_description: この権限を持つユーザーはすべての権限をバイパスします delete_user_data: ユーザーデータの削除 delete_user_data_description: ユーザーは、遅滞なく他のユーザーのデータを削除することができます invite_users: ユーザーを招待 - invite_users_description: ユーザーがサーバーに新しい人を招待できるようにします + invite_users_description: ユーザーが新しい人を招待できるようにします manage_announcements: お知らせの管理 - manage_announcements_description: ユーザーがサーバー上のアナウンスを管理できるようにします + manage_announcements_description: ユーザーがアナウンスを管理できるようにします manage_appeals: 抗議の管理 manage_appeals_description: ユーザーはモデレーションアクションに対する抗議を確認できます manage_blocks: ブロックの管理 - manage_blocks_description: ユーザーが電子メールプロバイダとIPアドレスをブロックできるようにします + manage_blocks_description: ユーザーがメールプロバイダとIPアドレスをブロックできるようにします manage_custom_emojis: カスタム絵文字を管理 manage_custom_emojis_description: ユーザーがサーバー上のカスタム絵文字を管理できるようにします manage_federation: 連合の管理 @@ -657,7 +669,7 @@ ja: manage_invites: 招待を管理 manage_reports: レポートの管理 manage_reports_description: ユーザーがレポートを確認したり、モデレーションアクションを実行したりできます。 - manage_roles: 役職の管理 + manage_roles: ロールの管理 manage_rules: ルールの管理 manage_rules_description: ユーザーがサーバールールを変更できるようにします manage_settings: 設定の管理 @@ -666,7 +678,7 @@ ja: manage_user_access: アクセス権を管理 manage_user_access_description: 他のユーザーの2段階認証を無効にしたり、メールアドレスを変更したり、パスワードをリセットしたりすることができます。 manage_users: ユーザーの管理 - manage_webhooks: Webhook の管理 + manage_webhooks: Webhookの管理 manage_webhooks_description: 管理者イベントのWebhookを設定できます。 view_audit_log: 監査ログの表示 view_audit_log_description: ユーザーがサーバー上で管理アクションの履歴を表示できるようにします @@ -674,7 +686,7 @@ ja: view_dashboard_description: ユーザーがダッシュボードやさまざまなメトリクスにアクセスできるようにします view_devops: 開発者 view_devops_description: Sidekiq と pgHero ダッシュボードにアクセスできるようにします - title: 権限 + title: ロール rules: add_new: ルールを追加 delete: 削除 @@ -749,8 +761,7 @@ ja: desc_html: サイドバーとmetaタグに表示されます。Mastodonとは何か、そしてこのサーバーの特別な何かを1段落で記述してください。空欄の場合、サーバーの説明が使用されます。 title: 短いサーバーの説明 site_terms: - desc_html: 独自のプライバシーポリシーや利用規約、その他の法的根拠を記述できます。HTMLタグが使えます - title: カスタム利用規約 + title: カスタムプライバシーポリシー site_title: サーバーの名前 thumbnail: desc_html: OpenGraphとAPIによるプレビューに使用されます。サイズは1200×630px推奨です @@ -1129,13 +1140,15 @@ ja: errors: invalid_context: 対象がないか無効です index: - contexts: "%{contexts} のフィルター" + contexts: "%{contexts}のフィルター" delete: 削除 empty: フィルターはありません。 - expires_in: "%{distance} で期限切れ" + expires_in: "%{distance}で期限切れ" expires_on: 有効期限 %{date} keywords: other: "%{count}件のキーワード" + statuses: + other: "%{count}件の投稿" title: フィルター new: save: 新規フィルターを保存 @@ -1256,7 +1269,7 @@ ja: notification_mailer: admin: report: - subject: "%{name} がレポートを送信しました" + subject: "%{name}さんがレポートを送信しました" sign_up: subject: "%{name}さんがサインアップしました" favourite: @@ -1612,7 +1625,7 @@ ja:

この文章のライセンスはCC-BY-SAです。最終更新日は2021年6月1日です。

オリジナルの出典: Discourse privacy policy

- title: "%{instance} 利用規約・プライバシーポリシー" + title: "%{instance}のプライバシーポリシー" themes: contrast: Mastodon (ハイコントラスト) default: Mastodon (ダーク) diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 288e50edd6b..64b0419ed2e 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -13,10 +13,8 @@ ka: documentation: დოკუმენტაცია hosted_on: მასტოდონს მასპინძლობს %{domain} learn_more: გაიგე მეტი - privacy_policy: კონფიდენციალურობის პოლიტიკა source_code: კოდი status_count_before: ვინც უავტორა - terms: მომსახურების პირობები user_count_before: სახლი what_is_mastodon: რა არის მასტოდონი? accounts: @@ -256,9 +254,6 @@ ka: site_short_description: desc_html: გამოჩნდება გვერდით ბარში და მეტა ტეგებში. აღწერეთ თუ რა არის მასტოდონი და რა ხდის ამ სერვერს უნიკალურს ერთ პარაგრაფში. თუ ცარიელია, გამოჩნდება ინსტანციის აღწერილობა. title: აჩვენეთ ინსტანციის აღწერილობა - site_terms: - desc_html: შეგიძლიათ დაწეროთ საკუთარი კონფიდენციალურობის პოლიტიკა, მომსახურების პირობები ან სხვა იურიდიული დოკუმენტი. შეგიძლიათ გამოიყენოთ ჰტმლ ტეგები - title: პერსონალიზირებული მომსახურების პირობები site_title: ინსტანციის სახელი thumbnail: desc_html: გამოიყენება პრევიუებისთვის ოუფენ-გრეფში და აპი-ში. 1200/630პიქს. რეკომენდირებული @@ -567,8 +562,6 @@ ka: pinned: აპინული ტუტი reblogged: გაზრდილი sensitive_content: მგრძნობიარე კონტენტი - terms: - title: "%{instance} მომსახურების პირობები და კონფიდენციალურობის პოლიტიკა" themes: contrast: მაღალი კონტრასტი default: მასტოდონი diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 8096b95f4d8..cda77cb6e15 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -20,7 +20,6 @@ kab: get_apps: Ɛreḍ asnas aziraz hosted_on: Maṣṭudun yersen deg %{domain} learn_more: Issin ugar - privacy_policy: Tasertit tabaḍnit rules: Ilugan n uqeddac see_whats_happening: Ẓer d acu i iḍerrun server_stats: 'Tidaddanin n uqeddac:' @@ -29,7 +28,6 @@ kab: one: n tsuffeɣt other: n tsuffiɣin status_count_before: I d-yessuffɣen - terms: Tiwetlin n useqdec unavailable_content: Ulac agbur unavailable_content_description: domain: Aqeddac @@ -789,8 +787,6 @@ kab: stream_entries: pinned: Tijewwiqt yettwasentḍen sensitive_content: Agbur amḥulfu - terms: - title: Tiwtilin n useqdec akked tsertit tabaḍnit n %{instance} themes: contrast: Maṣṭudun (agnil awriran) default: Maṣṭudun (Aberkan) diff --git a/config/locales/kk.yml b/config/locales/kk.yml index b1c92f7eb16..939e3c52017 100644 --- a/config/locales/kk.yml +++ b/config/locales/kk.yml @@ -24,7 +24,6 @@ kk: Бұл аккаунт кез-келген жеке пайдаланушыны емес, сервердің өзін көрсету үшін қолданылатын виртуалды актер. Ол федерация мақсаттарында қолданылады және сіз барлығын бұғаттағыңыз келмейінше, бұғатталмауы керек, бұл жағдайда сіз домен блогын қолданған жөн. learn_more: Көбірек білу - privacy_policy: Құпиялылық саясаты see_whats_happening: Не болып жатқанын қараңыз server_stats: 'Сервер статистикасы:' source_code: Ашық коды @@ -32,7 +31,6 @@ kk: one: жазба other: жазба status_count_before: Барлығы - terms: Қолдану шарттары unavailable_content: Қолжетімсіз контент unavailable_content_description: domain: Сервер @@ -393,9 +391,6 @@ kk: site_short_description: desc_html: Displayed in sidebar and meta tags. Describe what Mastodon is and what makes this server special in a single paragraph. If empty, defaults to сервер description. title: Short сервер description - site_terms: - desc_html: You can write your own privacy policy, terms of service or other legalese. You can use HTML тег - title: Қолдану шарттары мен ережелер site_title: Сервер аты thumbnail: desc_html: Used for previews via OpenGraph and API. 1200x630px рекоменделеді @@ -880,8 +875,6 @@ kk: sensitive_content: Нәзік мазмұн tags: does_not_match_previous_name: алдыңғы атқа сәйкес келмейді - terms: - title: "%{instance} Қызмет көрсету шарттары және Құпиялылық саясаты" themes: contrast: Mastodon (Жоғары контраст) default: Mastodon (Қою) diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 102d853938b..946784a0380 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -28,7 +28,7 @@ ko: learn_more: 자세히 logged_in_as_html: 현재 %{username}으로 로그인 했습니다. logout_before_registering: 이미 로그인 했습니다. - privacy_policy: 개인정보 정책 + privacy_policy: 개인정보 처리방침 rules: 서버 규칙 rules_html: '아래의 글은 이 마스토돈 서버에 계정이 있다면 따라야 할 규칙의 요약입니다:' see_whats_happening: 무슨 일이 일어나는 지 보기 @@ -38,7 +38,6 @@ ko: other: 개 status_count_before: 게시물 수 tagline: 분산화된 소셜 네트워크 - terms: 이용약관 unavailable_content: 이용 불가능한 컨텐츠 unavailable_content_description: domain: 서버 @@ -783,8 +782,8 @@ ko: desc_html: 사이드바와 메타 태그에 나타납니다. 마스토돈이 무엇이고 이 서버의 특징은 무엇인지 한 문장으로 설명하세요. title: 짧은 서버 설명 site_terms: - desc_html: 당신은 독자적인 개인정보 취급 방침이나 이용약관, 그 외의 법적 근거를 작성할 수 있습니다. HTML태그를 사용할 수 있습니다 - title: 커스텀 서비스 이용 약관 + desc_html: 자신만의 개인정보 처리방침을 작성할 수 있습니다. HTML 태그를 사용할 수 있습니다 + title: 사용자 지정 개인정보 처리방침 site_title: 서버 이름 thumbnail: desc_html: OpenGraph와 API의 미리보기로 사용 됩니다. 1200x630px을 권장합니다 @@ -1687,7 +1686,7 @@ ko:

이 문서는 CC-BY-SA 라이센스입니다. 마지막 업데이트는 2012년 5월 26일입니다.

Originally adapted from the Discourse privacy policy.

- title: "%{instance} 이용약관과 개인정보 취급 방침" + title: "%{instance} 개인정보 처리방침" themes: contrast: 마스토돈 (고대비) default: 마스토돈 (어두움) diff --git a/config/locales/ku.yml b/config/locales/ku.yml index b43e205d278..2dcba64ddb0 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -28,7 +28,7 @@ ku: learn_more: Bêtir fêr bibe logged_in_as_html: Tu niha wekî %{username} têketî ye. logout_before_registering: Jixwe te berê têketin kiriye. - privacy_policy: Polîtikaya nihêniyê + privacy_policy: Politîka taybetiyê rules: Rêbazên rajekar rules_html: 'Heger tu bixwazî ajimêrekî li ser rajekarê mastodon vebikî, li jêrê de kurtasî ya qaîdeyên ku tu guh bidî heye:' see_whats_happening: Binêre ka çi diqewime @@ -39,7 +39,6 @@ ku: other: şandî status_count_before: Hatin weşan tagline: Tora civakî ya nenavendî - terms: Peyama mercan unavailable_content: Rajekarên li hev kirî unavailable_content_description: domain: Rajekar @@ -799,8 +798,8 @@ ku: desc_html: Ew di alavdanka kêlekê û tagên meta de tên xuyakirin. Di yek paragrafê de rave bike ka Mastodon çi ye û ya ku ev rajekar taybetî dike. title: Danasîna rajekarê kurt site_terms: - desc_html: Tu dikarî polîtika nihêniyê xwe, mercên karûbar an nameyên din binvisîne. Tu dikarî nîşanên HTML-ê bi kar bîne - title: Mercên bikaranîn a kesanekirî + desc_html: Tu dikarî politîkaya taybetiyê ya xwe binivîsînî. Tu dikarî tagên HTML bi kar bînî + title: Politîka taybetiyê ya kesane site_title: Navê rajekar thumbnail: desc_html: Ji bo pêşdîtinên bi riya OpenGraph û API-yê têne bikaranîn. 1200x630px tê pêşniyar kirin @@ -1721,7 +1720,7 @@ ku:

This document is CC-BY-SA. It was last updated May 26, 2022.

Originally adapted from the Discourse privacy policy.

- title: "%{instance} mercên bikaranîn û politîkayên nehêniyê" + title: Politîka taybetiyê ya %{instance} themes: contrast: Mastodon (Dijberiya bilind) default: Mastodon (Tarî) diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 4e79ca1887f..56bcccf673d 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -11,10 +11,8 @@ lt: documentation: Dokumentacija hosted_on: Mastodon palaikomas naudojantis %{domain} talpinimu learn_more: Daugiau - privacy_policy: Privatumo Politika source_code: Šaltinio kodas status_count_before: Autorius - terms: Naudojimo sąlygos user_count_before: Namai what_is_mastodon: Kas tai, Mastodon? accounts: @@ -299,9 +297,6 @@ lt: site_short_description: desc_html: Rodoma šoniniame meniu ir meta žymėse. Apibūdink kas yra Mastodon, ir kas daro šį serverį išskirtiniu, vienu paragrafu. Jeigu tuščias, naudojamas numatytasis tekstas. title: Trumpas serverio apibūdinimas - site_terms: - desc_html: Jūs galite parašyti savo pačio privatumo politika, naudojimo sąlygas ar kita informacija. Galite naudoti HTML žymes - title: Išskirtinės naudojimosi taisyklės site_title: Serverio pavadinimas thumbnail: desc_html: Naudojama OpenGraph peržiūroms ir API. Rekomenduojama 1200x630px @@ -592,8 +587,6 @@ lt: pinned: Prisegtas toot'as reblogged: pakeltas sensitive_content: Jautrus turinys - terms: - title: "%{instance} Naudojimosi Sąlygos ir Privatumo Politika" themes: contrast: Mastodon (Didelio Kontrasto) default: Mastodon (Tamsus) diff --git a/config/locales/lv.yml b/config/locales/lv.yml index ae208739048..c645539c8a0 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -28,7 +28,7 @@ lv: learn_more: Uzzināt vairāk logged_in_as_html: Tu pašlaik esi pieteicies kā %{username}. logout_before_registering: Tu jau esi pieteicies. - privacy_policy: Privātuma politika + privacy_policy: Privātuma Politika rules: Servera noteikumi rules_html: 'Tālāk ir sniegts noteikumu kopsavilkums, kas jāievēro, ja vēlies izveidot kontu šajā Mastodon serverī:' see_whats_happening: Redzēt, kas notiek @@ -40,7 +40,6 @@ lv: zero: nav status_count_before: Kurš publicējis tagline: Decentralizēts sociālais tīkls - terms: Pakalpojuma noteikumi unavailable_content: Moderētie serveri unavailable_content_description: domain: Serveris @@ -813,8 +812,8 @@ lv: desc_html: Tiek parādīts sānjoslā un metatagos. Vienā rindkopā apraksti, kas ir Mastodon un ar ko šis serveris ir īpašs. title: Īss servera apraksts site_terms: - desc_html: Tu vari uzrakstīt savu privātuma politiku, pakalpojumu sniegšanas noteikumus vai citu likumīgu. Tu vari izmantot HTML tagus - title: Pielāgoti pakalpojuma sniegšanas noteikumi + desc_html: Tu vari uzrakstīt pats savu privātuma politiku. Vari izmantot HTML tagus + title: Pielāgot privātuma politiku site_title: Servera nosaukums thumbnail: desc_html: Izmanto priekšskatījumiem, izmantojot OpenGraph un API. Ieteicams 1200x630 pikseļi @@ -1753,7 +1752,7 @@ lv:

Šis dokuments ir CC-BY-SA. Pēdējo reizi tas tika atjaunināts 2022. gada 26. maijā.

Sākotnēji adaptēts no Discourse konfidencialitātes politikas.

- title: "%{instance} Pakalpojuma Noteikumi un Privātuma Politika" + title: "%{instance} Privātuma Politika" themes: contrast: Mastodon (Augsts kontrasts) default: Mastodon (Tumšs) diff --git a/config/locales/ml.yml b/config/locales/ml.yml index ea05859ac48..df5be9c1ec5 100644 --- a/config/locales/ml.yml +++ b/config/locales/ml.yml @@ -11,11 +11,9 @@ ml: documentation: വിവരണം get_apps: മൊബൈൽ ആപ്പ് പരീക്ഷിക്കുക learn_more: കൂടുതൽ പഠിക്കുക - privacy_policy: സ്വകാര്യതാ നയം see_whats_happening: എന്തൊക്കെ സംഭവിക്കുന്നു എന്ന് കാണുക source_code: സോഴ്സ് കോഡ് status_count_before: ആരാൽ എഴുതപ്പെട്ടു - terms: സേവന വ്യവസ്ഥകൾ unavailable_content: ലഭ്യമല്ലാത്ത ഉള്ളടക്കം unavailable_content_description: domain: സെർവർ diff --git a/config/locales/ms.yml b/config/locales/ms.yml index b80a0d5c9af..7f090b00d5b 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -25,7 +25,6 @@ ms: Akaun ini ialah pelaku maya yang digunakan untuk mewakili pelayan itu sendiri dan bukannya mana-mana pengguna individu. Ia digunakan untuk tujuan persekutuan dan tidak patut disekat melainkan anda ingin menyekat keseluruhan tika, yang mana anda sepatutnya gunakan sekatan domain. learn_more: Ketahui lebih lanjut - privacy_policy: Polisi privasi rules: Peraturan pelayan rules_html: 'Di bawah ini ringkasan peraturan yang anda perlu ikuti jika anda ingin mempunyai akaun di pelayan Mastodon yang ini:' see_whats_happening: Lihat apa yang sedang berlaku @@ -34,7 +33,6 @@ ms: status_count_after: other: hantaran status_count_before: Siapa terbitkan - terms: Terma perkhidmatan unavailable_content: Pelayan disederhanakan unavailable_content_description: domain: Pelayan diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 4dabcf789e4..fed0785c8ba 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -26,7 +26,6 @@ nl: learn_more: Meer leren logged_in_as_html: Je bent momenteel ingelogd als %{username}. logout_before_registering: Je bent al ingelogd. - privacy_policy: Privacybeleid rules: Serverregels rules_html: 'Hieronder vind je een samenvatting van de regels die je op deze Mastodon-server moet opvolgen:' see_whats_happening: Kijk wat er aan de hand is @@ -37,7 +36,6 @@ nl: other: berichten status_count_before: Zij schreven tagline: Decentraal sociaal netwerk - terms: Gebruiksvoorwaarden unavailable_content: Gemodereerde servers unavailable_content_description: domain: Server @@ -706,9 +704,6 @@ nl: site_short_description: desc_html: Dit wordt gebruikt op de voorpagina, in de zijbalk op profielpagina's en als metatag in de paginabron. Beschrijf in één alinea wat Mastodon is en wat deze server speciaal maakt. title: Omschrijving Mastodonserver (website) - site_terms: - desc_html: Je kan hier jouw eigen privacybeleid, gebruiksvoorwaarden en ander juridisch jargon kwijt. Je kan HTML gebruiken - title: Aangepaste gebruiksvoorwaarden site_title: Naam Mastodonserver thumbnail: desc_html: Gebruikt als voorvertoning voor OpenGraph en de API. 1200x630px aanbevolen @@ -1491,7 +1486,6 @@ nl:

This document is CC-BY-SA. It was last updated May 26, 2022.

Originally adapted from the Discourse privacy policy.

- title: Gebruiksvoorwaarden en privacybeleid van %{instance} themes: contrast: Mastodon (hoog contrast) default: Mastodon (donker) diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 44025936969..baf20ad7233 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -24,7 +24,6 @@ nn: instance_actor_flash: "Denne brukeren er en virtuell aktør brukt til å representere selve serveren og ingen individuell bruker. Det brukes til foreningsformål og bør ikke blokkeres med mindre du vil blokkere hele instansen, hvor domeneblokkering bør brukes i stedet. \n" learn_more: Lær meir logout_before_registering: Du er allereie logga inn. - privacy_policy: Personvernsreglar rules: Tenarreglar rules_html: 'Nedanfor er eit samandrag av reglar du må fylgje dersom du vil ha ein konto på denne Mastodontenaren:' see_whats_happening: Sjå kva som skjer @@ -32,7 +31,6 @@ nn: source_code: Kjeldekode status_count_before: Som skreiv tagline: Desentralisert sosialt nettverk - terms: Brukarvilkår unavailable_content: Utilgjengeleg innhald unavailable_content_description: domain: Sørvar @@ -546,9 +544,6 @@ nn: site_short_description: desc_html: Vist i sidelinjen og i metastempler. Beskriv hva Mastodon er og hva som gjør denne tjeneren spesiell i én enkelt paragraf. title: Stutt om tenaren - site_terms: - desc_html: Du kan skrive din egen personverns-strategi, bruksviklår og andre regler. Du kan bruke HTML tagger - title: Eigne brukarvilkår site_title: Tenarnamn thumbnail: desc_html: Brukes ved forhandsvisning via OpenGraph og API. 1200x630px anbefales @@ -1104,8 +1099,6 @@ nn: sensitive_content: Følsomt innhold tags: does_not_match_previous_name: stemmar ikkje med det førre namnet - terms: - title: Tenestevilkår og personvernsvilkår for %{instance} themes: contrast: Mastodon (Høg kontrast) default: Mastodon (Mørkt) diff --git a/config/locales/no.yml b/config/locales/no.yml index 27b7be807f5..b93bd0a2cca 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -23,7 +23,6 @@ hosted_on: Mastodon driftet på %{domain} instance_actor_flash: "Denne brukeren er en virtuell aktør brukt til å representere selve serveren og ingen individuell bruker. Det brukes til foreningsformål og bør ikke blokkeres med mindre du vil blokkere hele instansen, hvor domeneblokkering bør brukes i stedet. \n" learn_more: Lær mer - privacy_policy: Privatlivsretningslinjer rules: Server regler rules_html: 'Nedenfor er et sammendrag av reglene du må følge om du vil ha en konto på denne serveren av Mastodon:' see_whats_happening: Se hva som skjer @@ -33,7 +32,6 @@ one: innlegg other: statuser status_count_before: Som skrev - terms: Bruksvilkår unavailable_content: Utilgjengelig innhold unavailable_content_description: domain: Tjener @@ -539,9 +537,6 @@ site_short_description: desc_html: Vist i sidelinjen og i metastempler. Beskriv hva Mastodon er og hva som gjør denne tjeneren spesiell i én enkelt paragraf. title: Kort tjenerbeskrivelse - site_terms: - desc_html: Du kan skrive din egen personverns-strategi, bruksviklår og andre regler. Du kan bruke HTML tagger - title: Skreddersydde bruksvilkår site_title: Nettstedstittel thumbnail: desc_html: Brukes ved forhandsvisning via OpenGraph og API. 1200x630px anbefales @@ -1087,8 +1082,6 @@ sensitive_content: Følsomt innhold tags: does_not_match_previous_name: samsvarer ikke med det forrige navnet - terms: - title: "%{instance} Personvern og villkår for bruk av nettstedet" themes: contrast: Mastodon (Høykontrast) default: Mastodon diff --git a/config/locales/oc.yml b/config/locales/oc.yml index d8560fd1c53..6fbe1c9c3ef 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -22,7 +22,6 @@ oc: get_apps: Ensajatz una aplicacion mobil hosted_on: Mastodon albergat sus %{domain} learn_more: Ne saber mai - privacy_policy: Politica de confidencialitat rules: Règlas del servidor see_whats_happening: Agachatz çò qu’arriba server_stats: 'Estatisticas del servidor :' @@ -31,7 +30,6 @@ oc: one: estatut other: estatuts status_count_before: qu’an escrich - terms: Condicions d’utilizacion unavailable_content: Contengut pas disponible unavailable_content_description: domain: Servidor @@ -483,9 +481,6 @@ oc: site_short_description: desc_html: Mostrat dins la barra laterala e dins las meta balisas. Explica çò qu’es Mastodon e perque aqueste servidor es especial en un solet paragraf. S’es void, serà garnit amb la descripcion del servidor. title: Descripcion corta del servidor - site_terms: - desc_html: Afichada sus la pagina de las condicions d’utilizacion
Podètz utilizar de balisas HTML - title: Politica de confidencialitat del site site_title: Títol del servidor thumbnail: desc_html: Servís pels apercebuts via OpenGraph e las API. Talha de 1200x630px recomandada @@ -1014,8 +1009,6 @@ oc: sensitive_content: Contengut sensible tags: does_not_match_previous_name: correspond pas al nom precedent - terms: - title: Condicions d’utilizacion e politica de confidencialitat de %{instance} themes: contrast: Mastodon (Fòrt contrast) default: Mastodon (Escur) diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 4251f5510cb..3f53575df80 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -41,7 +41,6 @@ pl: other: wpisów status_count_before: Są autorami tagline: Zdecentralizowana sieć społecznościowa - terms: Zasady użytkowania unavailable_content: Niedostępne treści unavailable_content_description: domain: Serwer @@ -824,8 +823,8 @@ pl: desc_html: Wyświetlany na pasku bocznym i w znacznikach meta. Opisz w jednym akapicie, czym jest Mastodon i czym wyróżnia się ten serwer. Jeżeli pusty, zostanie użyty opis serwera. title: Krótki opis serwera site_terms: - desc_html: Miejsce na własną politykę prywatności, zasady użytkowania i inne unormowania prawne. Możesz korzystać ze znaczników HTML - title: Niestandardowe zasady użytkowania + desc_html: Możesz stworzyć własną politykę prywatności. Możesz używać tagów HTML + title: Własna polityka prywatności site_title: Nazwa serwera thumbnail: desc_html: 'Używana w podglądzie przez OpenGraph i API. Zalecany rozmiar: 1200x630 pikseli' @@ -1766,7 +1765,7 @@ pl:

Ten dokument jest CC-BY-SA. Data ostatniej aktualizacji: 26 maja 2022.

Oryginalnie zaadaptowany z Discourse privacy policy.

- title: Zasady korzystania i polityka prywatności %{instance} + title: Polityka prywatności %{instance} themes: contrast: Mastodon (Wysoki kontrast) default: Mastodon (Ciemny) diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 9460d651fbf..b6da1a3ff1e 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -28,7 +28,6 @@ pt-BR: learn_more: Saiba mais logged_in_as_html: Você está atualmente logado como %{username}. logout_before_registering: Já está logado. - privacy_policy: Política de Privacidade rules: Regras do servidor rules_html: 'Abaixo está um resumo das regras que você precisa seguir se você quer ter uma conta neste servidor do Mastodon:' see_whats_happening: Veja o que está acontecendo @@ -39,7 +38,6 @@ pt-BR: other: toots status_count_before: Autores de tagline: Rede social descentralizada - terms: Termos de serviço unavailable_content: Conteúdo indisponível unavailable_content_description: domain: Instância @@ -771,9 +769,6 @@ pt-BR: site_short_description: desc_html: Mostrada na barra lateral e em etiquetas de metadados. Descreve o que é o Mastodon e o que torna esta instância especial num único parágrafo. Se deixada em branco, é substituído pela descrição da instância. title: Descrição curta da instância - site_terms: - desc_html: Você pode escrever a sua própria Política de Privacidade, Termos de Serviço, entre outras coisas. Você pode usar tags HTML - title: Termos de serviço personalizados site_title: Nome da instância thumbnail: desc_html: Usada para prévias via OpenGraph e API. Recomenda-se 1200x630px @@ -1520,8 +1515,6 @@ pt-BR: sensitive_content: Conteúdo sensível tags: does_not_match_previous_name: não corresponde ao nome anterior - terms: - title: Termos de Serviço e Política de Privacidade de %{instance} themes: contrast: Mastodon (Alto contraste) default: Mastodon (Noturno) diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index fd151b73aeb..dc518a2f6e0 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -28,7 +28,6 @@ pt-PT: learn_more: Saber mais logged_in_as_html: Está de momento ligado como %{username}. logout_before_registering: Já tem sessão iniciada. - privacy_policy: Política de privacidade rules: Regras da instância rules_html: 'Abaixo está um resumo das regras que precisa seguir se pretender ter uma conta nesta instância do Mastodon:' see_whats_happening: Veja o que está a acontecer @@ -39,7 +38,6 @@ pt-PT: other: publicações status_count_before: Que fizeram tagline: Rede social descentralizada - terms: Termos de serviço unavailable_content: Conteúdo indisponível unavailable_content_description: domain: Instância @@ -796,9 +794,6 @@ pt-PT: site_short_description: desc_html: Mostrada na barra lateral e em etiquetas de metadados. Descreve o que o Mastodon é e o que torna esta instância especial num único parágrafo. Se deixada em branco, remete para a descrição da instância. title: Breve descrição da instância - site_terms: - desc_html: Podes escrever a sua própria política de privacidade, termos de serviço, entre outras coisas. Pode utilizar etiquetas HTML - title: Termos de serviço personalizados site_title: Título do site thumbnail: desc_html: Usada para visualizações via OpenGraph e API. Recomenda-se 1200x630px @@ -1719,7 +1714,6 @@ pt-PT:

Este documento é CC-BY-SA. Ele foi actualizado pela última vez em 26 de Maio 2022.

Originalmente adaptado de Discourse privacy policy.

- title: "%{instance} Termos de Serviço e Política de Privacidade" themes: contrast: Mastodon (Elevado contraste) default: Mastodon diff --git a/config/locales/ro.yml b/config/locales/ro.yml index 8ed812e5b85..8f7d42fd405 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -25,7 +25,6 @@ ro: Acest cont este un actor virtual folosit pentru a reprezenta serverul în sine și nu un utilizator individual. Acesta este folosit în scopuri de federație și nu ar trebui blocat decât dacă doriți să blocați întreaga instanță, în ce caz trebuie să utilizaţi un bloc de domeniu. learn_more: Află mai multe - privacy_policy: Politica de confidenţialitate rules: Regulile serverului rules_html: 'Mai jos este un rezumat al regulilor pe care trebuie să le urmezi dacă vrei să ai un cont pe acest server de Mastodon:' see_whats_happening: Vezi ce se întâmplă @@ -36,7 +35,6 @@ ro: one: stare other: de stări status_count_before: Care au postat - terms: Termeni de serviciu unavailable_content: Conținut indisponibil unavailable_content_description: domain: Server @@ -592,8 +590,6 @@ ro: sensitive_content: Conținut sensibil tags: does_not_match_previous_name: nu se potrivește cu numele anterior - terms: - title: "%{instance} Termeni de utilizare și Politica de confidențialitate" themes: contrast: Mastodon (contrast mare) default: Mastodon (Întunecat) diff --git a/config/locales/ru.yml b/config/locales/ru.yml index b129c890125..4d5c6dfe89f 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -41,7 +41,6 @@ ru: other: поста status_count_before: И опубликовано tagline: Децентрализованная социальная сеть - terms: Условия использования unavailable_content: Недоступный контент unavailable_content_description: domain: Сервер @@ -779,8 +778,8 @@ ru: desc_html: Отображается в боковой панели и в тегах. Опишите, что такое Mastodon и что делает именно этот узел особенным. Если пусто, используется описание узла по умолчанию. title: Краткое описание узла site_terms: - desc_html: Вы можете добавить сюда собственную политику конфиденциальности, пользовательское соглашение и другие документы. Можно использовать теги HTML - title: Условия использования + desc_html: Вы можете написать собственную политику конфиденциальности. Вы можете использовать теги HTML + title: Собственная политика конфиденциальности site_title: Название сайта thumbnail: desc_html: Используется для предпросмотра с помощью OpenGraph и API. Рекомендуется разрешение 1200x630px @@ -1605,7 +1604,7 @@ ru: tags: does_not_match_previous_name: не совпадает с предыдущим именем terms: - title: Условия обслуживания и политика конфиденциальности %{instance} + title: Политика конфиденциальности %{instance} themes: contrast: Mastodon (высококонтрастная) default: Mastodon (тёмная) diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 60dcbbc9e34..a031b27adda 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -25,7 +25,6 @@ sc: ' learn_more: Àteras informatziones - privacy_policy: Polìtica de riservadesa rules: Règulas de su serbidore rules_html: 'Depes sighire is règulas imbenientes si boles tènnere unu contu in custu serbidore de Mastodon:' see_whats_happening: Càstia su chi est acontessende @@ -35,7 +34,6 @@ sc: one: istadu other: istados status_count_before: Atributzione de - terms: Cunditziones de su servìtziu unavailable_content: Serbidores moderados unavailable_content_description: domain: Serbidore @@ -558,9 +556,6 @@ sc: site_short_description: desc_html: Ammustradu in sa barra laterale e in is meta-etichetas. Descrie ite est Mastodon e pro ite custu serbidore est ispetziale in unu paràgrafu. title: Descritzione curtza de su serbidore - site_terms: - desc_html: Podes iscrìere sa normativa de riservadesa tua, cunditziones de servìtziu e àteras normas legales. Podes impreare etichetas HTML - title: Cunditziones de su servìtziu personalizadas site_title: Nòmine de su serbidore thumbnail: desc_html: Impreadu pro otènnere pre-visualizatziones pro mèdiu de OpenGraph e API. Cussigiadu 1200x630px @@ -1141,8 +1136,6 @@ sc: sensitive_content: Cuntenutu sensìbile tags: does_not_match_previous_name: non cointzidet cun su nòmine anteriore - terms: - title: "%{instance} Cunditziones de su servìtziu e polìtica de riservadesa" themes: contrast: Mastodon (cuntrastu artu) default: Mastodon (iscuru) diff --git a/config/locales/si.yml b/config/locales/si.yml index 40909ab12ad..1806801eb2c 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -28,7 +28,6 @@ si: learn_more: තව දැනගන්න logged_in_as_html: ඔබ දැනට %{username}ලෙස පුරනය වී ඇත. logout_before_registering: ඔබ දැනටමත් පුරනය වී ඇත. - privacy_policy: රහස්‍යතා ප්‍රතිපත්තිය rules: සේවාදායකයේ නීති rules_html: 'ඔබට Mastodon හි මෙම සේවාදායකයේ ගිණුමක් ඇති කර ගැනීමට අවශ්‍ය නම් ඔබ අනුගමනය කළ යුතු නීති වල සාරාංශයක් පහත දැක්වේ:' see_whats_happening: මොකද වෙන්නේ කියලා බලන්න @@ -39,7 +38,6 @@ si: other: තත්ත්වයන් status_count_before: කවුද පළ කළේ tagline: විමධ්‍යගත සමාජ ජාලය - terms: සේවාවේ නියම unavailable_content: මධ්‍යස්ථ සේවාදායකයන් unavailable_content_description: domain: සේවාදායකය @@ -711,9 +709,6 @@ si: site_short_description: desc_html: පැති තීරුවේ සහ මෙටා ටැග්වල පෙන්වයි. Mastodon යනු කුමක්ද සහ මෙම සේවාදායකය විශේෂ වන්නේ කුමක්ද යන්න තනි ඡේදයකින් විස්තර කරන්න. title: සේවාදායකයේ කෙටි සවිස්තරය - site_terms: - desc_html: ඔබට ඔබේම රහස්‍යතා ප්‍රතිපත්තියක්, සේවා කොන්දේසි හෝ වෙනත් නීත්‍යානුකූල භාවයක් ලිවිය හැක. ඔබට HTML ටැග් භාවිතා කළ හැකිය - title: අභිරුචි සේවා කොන්දේසි site_title: සේවාදායකයේ නම thumbnail: desc_html: OpenGraph සහ API හරහා පෙරදසුන් සඳහා භාවිතා වේ. 1200x630px නිර්දේශිතයි @@ -1514,8 +1509,6 @@ si: too_late: මෙම වර්ජනයට අභියාචනයක් ඉදිරිපත් කිරීමට ප්‍රමාද වැඩියි tags: does_not_match_previous_name: පෙර නමට නොගැලපේ - terms: - title: "%{instance} සේවා නියම සහ රහස්‍යතා ප්‍රතිපත්තිය" themes: contrast: Mastodon (ඉහළ වෙනස) default: මැස්ටෝඩන් (අඳුරු) diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml index bd7039399f5..e90d9a09323 100644 --- a/config/locales/simple_form.cs.yml +++ b/config/locales/simple_form.cs.yml @@ -101,7 +101,9 @@ cs: user_role: color: Barva, která má být použita pro roli v celém UI, jako RGB v hex formátu highlighted: Toto roli učiní veřejně viditelnou + name: Veřejný název role, pokud má být role zobrazena jako odznak permissions_as_keys: Uživatelé s touto rolí budou moci... + position: Vyšší role rozhoduje o řešení konfliktů v určitých situacích. Některé akce lze provádět pouze na rolích s nižší prioritou webhook: events: Zvolte odesílané události url: Kam budou události odesílány diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 4ed611b18c8..6c12a07f45b 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -27,7 +27,6 @@ sk: learn_more: Zisti viac logged_in_as_html: Práve si prihlásený/á ako %{username}. logout_before_registering: Už si prihlásený/á. - privacy_policy: Zásady súkromia rules: Serverové pravidlá see_whats_happening: Pozoruj, čo sa deje server_stats: 'Serverové štatistiky:' @@ -39,7 +38,6 @@ sk: other: príspevky status_count_before: Ktorí napísali tagline: Decentralizovaná sociálna sieť - terms: Podmienky užitia unavailable_content: Nedostupný obsah unavailable_content_description: reason: 'Dôvod:' @@ -563,9 +561,6 @@ sk: site_short_description: desc_html: Zobrazené na bočnom paneli a pri meta tagoch. Popíš čo je Mastodon, a čo robí tento server iným, v jednom paragrafe. Pokiaľ toto necháš prázdne, bude tu zobrazený základný popis servera. title: Krátky popis serveru - site_terms: - desc_html: Môžeš si napísať svoje vlastné pravidla o súkromí, prevádzke, alebo aj iné legality. Môžeš tu používať HTML kód - title: Vlastné pravidlá prevádzky site_title: Názov servera thumbnail: desc_html: Používané pre náhľady cez OpenGraph a API. Doporučuje sa rozlišenie 1200x630px @@ -1104,8 +1099,6 @@ sk: sensitive_content: Senzitívny obsah tags: does_not_match_previous_name: nezhoduje sa s predošlým názvom - terms: - title: Podmienky užívania, a pravidlá súkromia pre %{instance} themes: contrast: Mastodon (vysoký kontrast) default: Mastodon (tmavý) diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 1b1aa1b6ac2..2c1f11afa12 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -41,7 +41,6 @@ sl: two: stanja status_count_before: Ki so avtorji tagline: Decentralizirano družbeno omrežje - terms: Pogoji storitve unavailable_content: Moderirani strežniki unavailable_content_description: domain: Strežnik @@ -829,8 +828,8 @@ sl: desc_html: Prikazano v stranski vrstici in metaoznakah. V enem odstavku opišite, kaj je Mastodon in kaj naredi ta strežnik poseben. title: Kratek opis strežnika site_terms: - desc_html: Lahko napišete svojo pravilnik o zasebnosti, pogoje storitve ali druge pravne dokumente. Lahko uporabite oznake HTML - title: Pogoji storitve po meri + desc_html: Napišete lahko svoj pravilnik o zasebnosti. Uporabite lahko značke HTML. + title: Pravilnik o zasebnosti po meri site_title: Ime strežnika thumbnail: desc_html: Uporablja se za predogled prek OpenGrapha in API-ja. Priporočamo 1200x630px @@ -1787,7 +1786,7 @@ sl:

Ta dokument je CC-BY-SA. Zadnja posodobitev je bila 7. marca 2018.

Prvotno je bila prilagojena v skladu s politiko zasebnost Discourse.

- title: "%{instance} Pogoji storitve in pravilnik o zasebnosti" + title: Pravilnik o zasebnosti %{instance} themes: contrast: Mastodon (Visok kontrast) default: Mastodon (Temna) diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 3beca5f53d5..e90449495e2 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -28,7 +28,7 @@ sq: learn_more: Mësoni më tepër logged_in_as_html: Aktualisht jeni i futur si %{username}. logout_before_registering: Jeni i futur tashmë. - privacy_policy: Rregulla privatësie + privacy_policy: Rregulla Privatësie rules: Rregulla shërbyesi rules_html: 'Më poshtë keni një përmbledhje të rregullave që duhet të ndiqni, nëse doni të keni një llogari në këtë shërbyes Mastodon:' see_whats_happening: Shihni ç'ndodh @@ -39,7 +39,6 @@ sq: other: mesazhe status_count_before: Që kanë krijuar tagline: Rrjet shoqëror i decentralizuar - terms: Kushte shërbimi unavailable_content: Shërbyes të moderuar unavailable_content_description: domain: Shërbyes @@ -794,8 +793,8 @@ sq: desc_html: E shfaqur në anështyllë dhe etiketa meta. Përshkruani në një paragraf të vetëm ç’është Mastodon-i dhe ç’e bën special këtë shërbyes. Në u lëntë i zbrazët, për shërbyesin do të përdoret përshkrimi parazgjedhje. title: Përshkrim i shkurtër shërbyesi site_terms: - desc_html: Mund të shkruani rregullat tuaja të privatësisë, kushtet e shërbimit ose gjëra të tjera ligjore. Mund të përdorni etiketa HTML - title: Kushte vetjake shërbimi + desc_html: Mund të shkruani rregullat tuaja të privatësisë. Mundeni të përdorni etiketa HTML + title: Rregulla vetjake privatësie site_title: Emër shërbyesi thumbnail: desc_html: I përdorur për paraparje përmes OpenGraph-it dhe API-t. Këshillohet 1200x630px @@ -1713,7 +1712,7 @@ sq:

Ky dokument licencohet sipas CC-BY-SA. Qe përditësuar së fundi më 26 maj 2022.

Përshtatur fillimisht prej rregulave të privatësisë së Discourse-it.

- title: Kushte Shërbimi dhe Rregulla Privatësie te %{instance} + title: Rregulla Privatësie të %{instance} themes: contrast: Mastodon (Me shumë kontrast) default: Mastodon (I errët) diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index 692db061a3b..0596d4b68e4 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -179,9 +179,6 @@ sr-Latn: site_description_extended: desc_html: Dobro mesto za vaš kod ponašanja, pravila, smernice i druge stvari po kojima se Vaša instanca razlikuje. Možete koristiti HTML tagove title: Proizvoljne dodatne informacije - site_terms: - desc_html: Možete pisati Vašu politiku privatnosti, uslove korišćenja i ostale legalne stvari. Možete koristiti HTML tagove - title: Proizvoljni uslovi korišćenja site_title: Ime instance thumbnail: desc_html: Koristi se za preglede kroz OpenGraph i API. Preporučuje se 1200x630px @@ -396,8 +393,6 @@ sr-Latn: pinned: Prikačeni tut reblogged: podržano sensitive_content: Osetljiv sadržaj - terms: - title: Uslovi korišćenja i politika privatnosti instance %{instance} themes: default: Mastodont two_factor_authentication: diff --git a/config/locales/sr.yml b/config/locales/sr.yml index e6cbb26d25f..fb2c86cff04 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -12,14 +12,12 @@ sr: documentation: Документација hosted_on: Мастодонт хостован на %{domain} learn_more: Сазнајте више - privacy_policy: Полиса приватности source_code: Изворни код status_count_after: few: статуси one: статус other: статуса status_count_before: Који су написали - terms: Услови коришћења user_count_after: few: корисници one: корисник @@ -314,9 +312,6 @@ sr: site_short_description: desc_html: Приказано у изборнику са стране и у мета ознакама. Опиши шта је Мастодон и шта чини овај сервер посебним у једном пасусу. Ако остане празно, вратиће се првобитни опис инстанце. title: Кратак опис инстанце - site_terms: - desc_html: Можете писати Вашу политику приватности, услове коришћења и остале легалне ствари. Можете користити HTML тагове - title: Произвољни услови коришћења site_title: Име инстанце thumbnail: desc_html: Користи се за прегледе кроз OpenGraph и API. Препоручује се 1200x630px @@ -642,8 +637,6 @@ sr: pinned: Прикачена труба reblogged: подржано sensitive_content: Осетљив садржај - terms: - title: Услови коришћења и политика приватности инстанце %{instance} themes: contrast: Велики контраст default: Мастодон diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 77a44b75def..6ea6bbfb7ed 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -26,7 +26,6 @@ sv: learn_more: Lär dig mer logged_in_as_html: Inloggad som %{username}. logout_before_registering: Du är redan inloggad. - privacy_policy: Integritetspolicy rules: Serverns regler rules_html: 'Nedan en sammanfattning av kontoreglerna för denna Mastodonserver:' see_whats_happening: Se vad som händer @@ -36,7 +35,6 @@ sv: one: status other: statusar status_count_before: Som skapat - terms: Användarvillkor unavailable_content: Otillgängligt innehåll unavailable_content_description: domain: Server @@ -574,9 +572,6 @@ sv: title: Egentillverkad utökad information site_short_description: title: Kort beskrivning av servern - site_terms: - desc_html: Du kan skriva din egen integritetspolicy, användarvillkor eller andra regler. Du kan använda HTML-taggar - title: Egentillverkad villkor för tjänster site_title: Namn på instans thumbnail: desc_html: Används för förhandsgranskningar via OpenGraph och API. 1200x630px rekommenderas @@ -1155,8 +1150,6 @@ sv: too_late: Det är för sent att överklaga denna strejk tags: does_not_match_previous_name: matchar inte det föregående namnet - terms: - title: "%{instance} Användarvillkor och Sekretesspolicy" themes: contrast: Hög kontrast default: Mastodon diff --git a/config/locales/ta.yml b/config/locales/ta.yml index d2b753cf3b8..ea17883020f 100644 --- a/config/locales/ta.yml +++ b/config/locales/ta.yml @@ -20,7 +20,6 @@ ta: get_apps: கைப்பேசி செயலியை முயற்சி செய்யவும் hosted_on: மாஸ்டோடாண் %{domain} இனையத்தில் இயங்குகிறது learn_more: மேலும் அறிய - privacy_policy: தனியுரிமை கொள்கை see_whats_happening: என்ன நடக்கிறது என்று பார்க்க server_stats: 'வழங்கியின் புள்ளிவிவரங்கள்:' source_code: நிரல் மூலம் @@ -28,7 +27,6 @@ ta: one: பதிவு other: பதிவுகள் status_count_before: எழுதிய - terms: சேவை விதிமுறைகள் unavailable_content: விசயங்கள் இல்லை unavailable_content_description: domain: வழங்கி diff --git a/config/locales/te.yml b/config/locales/te.yml index fe39bb75250..3f0c80980ff 100644 --- a/config/locales/te.yml +++ b/config/locales/te.yml @@ -12,13 +12,11 @@ te: documentation: పత్రీకరణ hosted_on: మాస్టొడాన్ %{domain} లో హోస్టు చేయబడింది learn_more: మరింత తెలుసుకోండి - privacy_policy: గోప్యత విధానము source_code: సోర్సు కోడ్ status_count_after: one: స్థితి other: స్థితులు status_count_before: ఎవరు రాశారు - terms: సేవా నిబంధనలు user_count_after: one: వినియోగదారు other: వినియోగదారులు diff --git a/config/locales/th.yml b/config/locales/th.yml index be3c244825c..dd04aefa11c 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -28,7 +28,6 @@ th: learn_more: เรียนรู้เพิ่มเติม logged_in_as_html: คุณกำลังเข้าสู่ระบบเป็น %{username} ในปัจจุบัน logout_before_registering: คุณได้เข้าสู่ระบบอยู่แล้ว - privacy_policy: นโยบายความเป็นส่วนตัว rules: กฎของเซิร์ฟเวอร์ rules_html: 'ด้านล่างคือข้อมูลสรุปของกฎที่คุณจำเป็นต้องปฏิบัติตามหากคุณต้องการมีบัญชีในเซิร์ฟเวอร์ Mastodon นี้:' see_whats_happening: ดูสิ่งที่กำลังเกิดขึ้น @@ -38,7 +37,6 @@ th: other: โพสต์ status_count_before: ผู้เผยแพร่ tagline: เครือข่ายสังคมแบบกระจายศูนย์ - terms: เงื่อนไขการให้บริการ unavailable_content: เซิร์ฟเวอร์ที่มีการควบคุม unavailable_content_description: domain: เซิร์ฟเวอร์ @@ -768,9 +766,6 @@ th: site_short_description: desc_html: แสดงในแถบข้างและแท็กเมตา อธิบายว่า Mastodon คืออะไรและสิ่งที่ทำให้เซิร์ฟเวอร์นี้พิเศษในย่อหน้าเดียว title: คำอธิบายเซิร์ฟเวอร์แบบสั้น - site_terms: - desc_html: คุณสามารถเขียนนโยบายความเป็นส่วนตัว, เงื่อนไขการให้บริการ หรือภาษากฎหมายอื่น ๆ ของคุณเอง คุณสามารถใช้แท็ก HTML - title: เงื่อนไขการให้บริการที่กำหนดเอง site_title: ชื่อเซิร์ฟเวอร์ thumbnail: desc_html: ใช้สำหรับการแสดงตัวอย่างผ่าน OpenGraph และ API 1200x630px ที่แนะนำ @@ -1536,8 +1531,6 @@ th: sensitive_content: เนื้อหาที่ละเอียดอ่อน tags: does_not_match_previous_name: ไม่ตรงกับชื่อก่อนหน้านี้ - terms: - title: เงื่อนไขการให้บริการและนโยบายความเป็นส่วนตัวของ %{instance} themes: contrast: Mastodon (ความคมชัดสูง) default: Mastodon (มืด) diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 82a00b7fc57..74fbf4be2ee 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -28,7 +28,7 @@ tr: learn_more: Daha fazla bilgi edinin logged_in_as_html: Şu an %{username} olarak oturum açmışsınız. logout_before_registering: Zaten oturumunuz açık. - privacy_policy: Gizlilik politikası + privacy_policy: Gizlilik Politikası rules: Sunucu kuralları rules_html: 'Aşağıda, bu Mastodon sunucusu üzerinde bir hesap açmak istiyorsanız uymanız gereken kuralların bir özeti var:' see_whats_happening: Neler olduğunu görün @@ -39,7 +39,6 @@ tr: other: durum yazıldı status_count_before: Şu ana kadar tagline: Merkezi olmayan sosyal ağ - terms: Kullanım şartları unavailable_content: Denetlenen sunucular unavailable_content_description: domain: Sunucu @@ -797,8 +796,8 @@ tr: desc_html: Kenar çubuğunda ve meta etiketlerinde görüntülenir. Mastodon'un ne olduğunu ve bu sunucuyu özel kılan şeyleri tek bir paragrafta açıklayın. title: Kısa sunucu açıklaması site_terms: - desc_html: Kendi gizlilik politikanızı, hizmet şartlarınızı ya da diğer hukuki metinlerinizi yazabilirsiniz. HTML etiketleri kullanabilirsiniz - title: Özel hizmet şartları + desc_html: Kendi gizlilik politikanızı yazabilirsiniz. HTML etiketlerini kullanabilirsiniz + title: Özel gizlilik politikası site_title: Site başlığı thumbnail: desc_html: OpenGraph ve API ile ön izlemeler için kullanılır. 1200x630px tavsiye edilir @@ -1718,7 +1717,7 @@ tr:

Bu belge CC-BY-SA altında lisanslanmıştır. En son 26 Mayıs 2022 tarihinde güncellenmiştir.

Discourse gizlilik politikasından uyarlanmıştır.

- title: "%{instance} Hizmet Şartları ve Gizlilik Politikası" + title: "%{instance} Gizlilik Politikası" themes: contrast: Mastodon (Yüksek karşıtlık) default: Mastodon (Karanlık) diff --git a/config/locales/tt.yml b/config/locales/tt.yml index a520e4d2b5d..f762424e5bf 100644 --- a/config/locales/tt.yml +++ b/config/locales/tt.yml @@ -4,7 +4,6 @@ tt: about_this: Хакында api: API contact_unavailable: Юк - privacy_policy: Хосусыйлык сәясәте unavailable_content_description: domain: Сервер user_count_after: diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 58abba1bd53..6d411bf8d91 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -26,7 +26,7 @@ uk: learn_more: Дізнатися більше logged_in_as_html: Зараз ви увійшли як %{username}. logout_before_registering: Ви вже увійшли. - privacy_policy: Політика приватності + privacy_policy: Політика конфіденційності rules: Правила сервера rules_html: 'Внизу наведено підсумок правил, яких ви повинні дотримуватися, якщо хочете мати обліковий запис на цьому сервері Mastodon:' see_whats_happening: Погляньте, що відбувається @@ -39,7 +39,6 @@ uk: other: статуси status_count_before: Опубліковано tagline: Децентралізована соціальна мережа - terms: Правила використання unavailable_content: Недоступний вміст unavailable_content_description: domain: Сервер @@ -822,10 +821,8 @@ uk: desc_html: Відображається в бічній панелі та мета-тегах. Опишіть, що таке Mastodon і що робить цей сервер особливим, в одному абзаці. title: Короткий опис сервера site_terms: - desc_html: |- - Ви можене написати власну політику приватності, умови використанні та інші законні штуки
- Можете використовувати HTML теги - title: Особливі умови використання + desc_html: Ви можете писати власну політику конфіденційності самостійно. Ви можете використовувати HTML-теги + title: Особлива політика конфіденційності site_title: Назва сайту thumbnail: desc_html: Використовується для передпоказів через OpenGraph та API. Бажано розміром 1200х640 пікселів @@ -1701,7 +1698,7 @@ uk: tags: does_not_match_previous_name: не збігається з попереднім ім'ям terms: - title: Умови використання та Політика приватності %{instance} + title: "%{instance} Політика конфіденційності" themes: contrast: Висока контрасність default: Mastodon diff --git a/config/locales/vi.yml b/config/locales/vi.yml index f5fe23795f6..1e4b9e0b836 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -36,7 +36,6 @@ vi: other: tút status_count_before: Nơi lưu giữ tagline: Mạng xã hội liên hợp - terms: Điều khoản dịch vụ unavailable_content: Giới hạn chung unavailable_content_description: domain: Máy chủ @@ -779,8 +778,8 @@ vi: desc_html: Hiển thị trong thanh bên và thẻ meta. Mô tả Mastodon là gì và điều gì làm cho máy chủ này trở nên đặc biệt trong một đoạn văn duy nhất. title: Mô tả máy chủ ngắn site_terms: - desc_html: Bạn có thể viết điều khoản dịch vụ, quyền riêng tư hoặc các vấn đề pháp lý khác. Dùng thẻ HTML - title: Điều khoản dịch vụ tùy chỉnh + desc_html: Bạn có thể tự soạn chính sách bảo mật của riêng bạn. Sử dụng HTML + title: Sửa chính sách bảo mật site_title: Tên máy chủ thumbnail: desc_html: Bản xem trước thông qua OpenGraph và API. Khuyến nghị 1200x630px @@ -1649,7 +1648,7 @@ vi:

Nếu có thay đổi chính sách bảo mật, chúng tôi sẽ đăng những thay đổi đó ở mục này.

Tài liệu này phát hành dưới giấy phép CC-BY-SA và được cập nhật lần cuối vào ngày 26 tháng 5 năm 2022.

Chỉnh sửa và hoàn thiện từ Discourse.

- title: Quy tắc của %{instance} + title: Chính sách bảo mật %{instance} themes: contrast: Mastodon (Độ tương phản cao) default: Mastodon (Tối) diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index ceffecd2762..e0f968db82e 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -38,7 +38,6 @@ zh-CN: other: 条嘟文 status_count_before: 他们共嘟出了 tagline: 分布式社交网络 - terms: 使用条款 unavailable_content: 被限制的服务器 unavailable_content_description: domain: 服务器 @@ -781,8 +780,8 @@ zh-CN: desc_html: 会在在侧栏和元数据标签中显示。可以用一小段话描述 Mastodon 是什么,以及本服务器的特点。 title: 服务器一句话介绍 site_terms: - desc_html: 可以填写自己的隐私权政策、使用条款或其他法律文本。可以使用 HTML 标签 - title: 自定义使用条款 + desc_html: 您可以写自己的隐私政策。您可以使用 HTML 标签 + title: 自定义隐私政策 site_title: 本站名称 thumbnail: desc_html: 用于在 OpenGraph 和 API 中显示预览图。推荐分辨率 1200×630px @@ -1685,7 +1684,7 @@ zh-CN:

此文件以 CC-BY-SA 授权。最后更新时间为 2022 年 5 月 26 日。

最初改编自 Discourse 隐私政策.

- title: "%{instance} 使用条款和隐私权政策" + title: "%{instance} 的隐私政策" themes: contrast: Mastodon(高对比度) default: Mastodon(暗色主题) diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index 39dfc93563d..8696b40d253 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -25,7 +25,6 @@ zh-HK: 這個帳戶是代表伺服器,而非代表任何個人用戶的虛擬帳號。 此帳戶是為聯盟協定而設。除非你想封鎖整個伺服器的話,否則請不要封鎖這個帳戶。如果你想封鎖伺服器,請使用網域封鎖以達到相同效果。 learn_more: 了解更多 - privacy_policy: 隱私權政策 rules: 系統規則 rules_html: 如果你想要在本站開一個新帳戶,以下是你需要遵守的規則: see_whats_happening: 看看發生什麼事 @@ -34,7 +33,6 @@ zh-HK: status_count_after: other: 篇文章 status_count_before: 共發佈了 - terms: 使用條款 unavailable_content: 受限制的伺服器 unavailable_content_description: domain: 伺服器 @@ -578,9 +576,6 @@ zh-HK: site_short_description: desc_html: "顯示在側邊欄和網頁標籤(meta tags)。以一句話描述Mastodon是甚麼,有甚麼令這個伺服器脫𩓙而出。" title: 伺服器短描述 - site_terms: - desc_html: 可以填寫自己的隱私權政策、使用條款或其他法律文本。可以使用 HTML 標籤 - title: 自訂使用條款 site_title: 本站名稱 thumbnail: desc_html: 用於在 OpenGraph 和 API 中顯示預覽圖。推薦大小 1200×630px @@ -1191,8 +1186,6 @@ zh-HK: sensitive_content: 敏感內容 tags: does_not_match_previous_name: 和舊有名稱並不符合 - terms: - title: "%{instance} 使用條款和隱私權政策" themes: contrast: 高對比 default: 萬象 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index c59df907a30..29af27c66ab 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -38,7 +38,6 @@ zh-TW: other: 條嘟文 status_count_before: 他們共嘟出了 tagline: 去中心化社群網路 - terms: 使用條款 unavailable_content: 無法取得的內容 unavailable_content_description: domain: 伺服器 @@ -783,8 +782,8 @@ zh-TW: desc_html: 顯示在側邊欄和網頁標籤 (meta tags)。以一段話描述 Mastodon 是甚麼,以及這個伺服器的特色。 title: 伺服器短描述 site_terms: - desc_html: 可以填寫自己的隱私權政策、使用條款或其他法律文本。可以使用 HTML 標籤 - title: 自訂使用條款 + desc_html: 您可以撰寫自己的隱私權政策。您可以使用 HTML 標籤。 + title: 客製的隱私權政策 site_title: 伺服器名稱 thumbnail: desc_html: 用於在 OpenGraph 和 API 中顯示預覽圖。推薦大小 1200×630px @@ -1690,7 +1689,7 @@ zh-TW:

此文件以 CC-BY-SA 授權。最後更新時間為 2022 年 5 月 26 日。

最初改編自 Discourse 隱私權政策.

- title: "%{instance} 使用條款和隱私權政策" + title: "%{instance} 隱私權政策" themes: contrast: Mastodon(高對比) default: Mastodon(深色) From 5cf056fdb0b16c3d8e093c28c3bcd8e54dc544ae Mon Sep 17 00:00:00 2001 From: Yamagishi Kazutoshi Date: Thu, 29 Sep 2022 23:36:14 +0900 Subject: [PATCH 340/646] Install python3 when building with Docker (#18072) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 42869d5dec8..cf311fef235 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,7 +19,7 @@ RUN ARCH= && \ esac && \ echo "Etc/UTC" > /etc/localtime && \ apt-get update && \ - apt-get install -y --no-install-recommends ca-certificates wget python apt-utils && \ + apt-get install -y --no-install-recommends ca-certificates wget python3 apt-utils && \ cd ~ && \ wget -q https://nodejs.org/download/release/v$NODE_VER/node-v$NODE_VER-linux-$ARCH.tar.gz && \ tar xf node-v$NODE_VER-linux-$ARCH.tar.gz && \ From c55219efa811b3c6347774bec1b174d325e5f300 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 30 Sep 2022 01:14:37 +0200 Subject: [PATCH 341/646] Remove volume number from hashtags in web UI (#19253) --- app/javascript/mastodon/components/hashtag.js | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/app/javascript/mastodon/components/hashtag.js b/app/javascript/mastodon/components/hashtag.js index 4e9cd3569c0..4a5a4bb57a0 100644 --- a/app/javascript/mastodon/components/hashtag.js +++ b/app/javascript/mastodon/components/hashtag.js @@ -1,7 +1,7 @@ // @ts-check import React from 'react'; import { Sparklines, SparklinesCurve } from 'react-sparklines'; -import { FormattedMessage, injectIntl, defineMessages } from 'react-intl'; +import { FormattedMessage } from 'react-intl'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import Permalink from './permalink'; @@ -9,10 +9,6 @@ import ShortNumber from 'mastodon/components/short_number'; import Skeleton from 'mastodon/components/skeleton'; import classNames from 'classnames'; -const messages = defineMessages({ - totalVolume: { id: 'hashtag.total_volume', defaultMessage: 'Total volume in the last {days, plural, one {day} other {{days} days}}' }, -}); - class SilentErrorBoundary extends React.Component { static propTypes = { @@ -69,7 +65,7 @@ ImmutableHashtag.propTypes = { hashtag: ImmutablePropTypes.map.isRequired, }; -const Hashtag = injectIntl(({ name, href, to, people, uses, history, className, intl }) => ( +const Hashtag = ({ name, href, to, people, history, className }) => (
@@ -79,11 +75,6 @@ const Hashtag = injectIntl(({ name, href, to, people, uses, history, className, {typeof people !== 'undefined' ? : }
- - {typeof uses !== 'undefined' ? : } - * - -
0)}> @@ -92,7 +83,7 @@ const Hashtag = injectIntl(({ name, href, to, people, uses, history, className,
-)); +); Hashtag.propTypes = { name: PropTypes.string, From 4500504ec2be89bdedaef27bbf1cf82f77483ccd Mon Sep 17 00:00:00 2001 From: Claire Date: Sun, 2 Oct 2022 18:10:49 +0200 Subject: [PATCH 342/646] Revert "Change search API to be accessible without being logged in (#18963)" This reverts commit c57907737a35d05d4bb936acd662df6ce725456f. --- app/controllers/api/v2/search_controller.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/v2/search_controller.rb b/app/controllers/api/v2/search_controller.rb index d14cd5627e0..77eeab5b0ba 100644 --- a/app/controllers/api/v2/search_controller.rb +++ b/app/controllers/api/v2/search_controller.rb @@ -5,7 +5,8 @@ class Api::V2::SearchController < Api::BaseController RESULTS_LIMIT = (ENV['MAX_SEARCH_RESULTS'] || 20).to_i - before_action -> { authorize_if_got_token! :read, :'read:search' } + before_action -> { doorkeeper_authorize! :read, :'read:search' } + before_action :require_user! def index @search = Search.new(search_results) @@ -23,7 +24,7 @@ class Api::V2::SearchController < Api::BaseController params[:q], current_account, limit_param(RESULTS_LIMIT), - search_params.merge(resolve: user_signed_in? ? truthy_param?(:resolve) : false, exclude_unreviewed: truthy_param?(:exclude_unreviewed)) + search_params.merge(resolve: truthy_param?(:resolve), exclude_unreviewed: truthy_param?(:exclude_unreviewed)) ) end From bfc539cfb4f040fcffac740b36791c26c2a74119 Mon Sep 17 00:00:00 2001 From: Claire Date: Sun, 2 Oct 2022 18:11:46 +0200 Subject: [PATCH 343/646] Revert "Change "Allow trends without prior review" setting to include statuses (#17977)" This reverts commit 546672e292dc3218e996048464c4c52e5d00f766. --- app/javascript/styles/mastodon/accounts.scss | 9 +-------- app/javascript/styles/mastodon/forms.scss | 3 +-- app/models/account.rb | 4 ---- app/views/admin/settings/edit.html.haml | 2 +- config/i18n-tasks.yml | 2 +- config/initializers/simple_form.rb | 5 +---- config/locales/en.yml | 4 ++-- config/locales/simple_form.en.yml | 1 - 8 files changed, 7 insertions(+), 23 deletions(-) diff --git a/app/javascript/styles/mastodon/accounts.scss b/app/javascript/styles/mastodon/accounts.scss index c007eb4b57e..54b65bfc8c2 100644 --- a/app/javascript/styles/mastodon/accounts.scss +++ b/app/javascript/styles/mastodon/accounts.scss @@ -202,8 +202,7 @@ } .account-role, -.simple_form .recommended, -.simple_form .not_recommended { +.simple_form .recommended { display: inline-block; padding: 4px 6px; cursor: default; @@ -228,12 +227,6 @@ } } -.simple_form .not_recommended { - color: lighten($error-red, 12%); - background-color: rgba(lighten($error-red, 12%), 0.1); - border-color: rgba(lighten($error-red, 12%), 0.5); -} - .account__header__fields { max-width: 100vw; padding: 0; diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index a6419821f4c..99090385901 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -102,8 +102,7 @@ code { } } - .recommended, - .not_recommended { + .recommended { position: absolute; margin: 0 4px; margin-top: -2px; diff --git a/app/models/account.rb b/app/models/account.rb index 33870beda48..f75750838c9 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -262,10 +262,6 @@ class Account < ApplicationRecord update!(memorial: true) end - def trendable - boolean_with_default('trendable', Setting.trendable_by_default) - end - def sign? true end diff --git a/app/views/admin/settings/edit.html.haml b/app/views/admin/settings/edit.html.haml index c8ebb336052..f2fdab90d07 100644 --- a/app/views/admin/settings/edit.html.haml +++ b/app/views/admin/settings/edit.html.haml @@ -81,7 +81,7 @@ = f.input :trends, as: :boolean, wrapper: :with_label, label: t('admin.settings.trends.title'), hint: t('admin.settings.trends.desc_html') .fields-group - = f.input :trendable_by_default, as: :boolean, wrapper: :with_label, label: t('admin.settings.trendable_by_default.title'), hint: t('admin.settings.trendable_by_default.desc_html'), recommended: :not_recommended + = f.input :trendable_by_default, as: :boolean, wrapper: :with_label, label: t('admin.settings.trendable_by_default.title'), hint: t('admin.settings.trendable_by_default.desc_html') .fields-group = f.input :trending_status_cw, as: :boolean, wrapper: :with_label, label: t('admin.settings.trending_status_cw.title'), hint: t('admin.settings.trending_status_cw.desc_html') diff --git a/config/i18n-tasks.yml b/config/i18n-tasks.yml index cc607f72af9..7139bcea7c6 100644 --- a/config/i18n-tasks.yml +++ b/config/i18n-tasks.yml @@ -51,7 +51,7 @@ ignore_unused: - 'activerecord.errors.*' - '{devise,pagination,doorkeeper}.*' - '{date,datetime,time,number}.*' - - 'simple_form.{yes,no,recommended,not_recommended}' + - 'simple_form.{yes,no,recommended}' - 'simple_form.{placeholders,hints,labels}.*' - 'simple_form.{error_notification,required}.:' - 'errors.messages.*' diff --git a/config/initializers/simple_form.rb b/config/initializers/simple_form.rb index 92cffc5a2a4..3a2097d2fb9 100644 --- a/config/initializers/simple_form.rb +++ b/config/initializers/simple_form.rb @@ -11,10 +11,7 @@ end module RecommendedComponent def recommended(_wrapper_options = nil) return unless options[:recommended] - - key = options[:recommended].is_a?(Symbol) ? options[:recommended] : :recommended - options[:label_text] = ->(raw_label_text, _required_label_text, _label_present) { safe_join([raw_label_text, ' ', content_tag(:span, I18n.t(key, scope: 'simple_form'), class: key)]) } - + options[:label_text] = ->(raw_label_text, _required_label_text, _label_present) { safe_join([raw_label_text, ' ', content_tag(:span, I18n.t('simple_form.recommended'), class: 'recommended')]) } nil end end diff --git a/config/locales/en.yml b/config/locales/en.yml index dd341e0c891..6f0f3e9539c 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -807,8 +807,8 @@ en: title: Allow unauthenticated access to public timeline title: Site settings trendable_by_default: - desc_html: Specific trending content can still be explicitly disallowed - title: Allow trends without prior review + desc_html: Affects hashtags that have not been previously disallowed + title: Allow hashtags to trend without prior review trends: desc_html: Publicly display previously reviewed content that is currently trending title: Trends diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index db5b45e4103..ec4c445e856 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -261,7 +261,6 @@ en: events: Enabled events url: Endpoint URL 'no': 'No' - not_recommended: Not recommended recommended: Recommended required: mark: "*" From e7ab476db240bb2fa09f975734923e2c6d04c3ee Mon Sep 17 00:00:00 2001 From: Claire Date: Sun, 2 Oct 2022 19:03:24 +0200 Subject: [PATCH 344/646] Revert server-side part of "Add logged-out access to the web UI" --- app/lib/permalink_redirector.rb | 4 ++++ app/views/home/index.html.haml | 12 ++++-------- spec/lib/permalink_redirector_spec.rb | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/lib/permalink_redirector.rb b/app/lib/permalink_redirector.rb index 6d15f39638b..e48bce06099 100644 --- a/app/lib/permalink_redirector.rb +++ b/app/lib/permalink_redirector.rb @@ -17,6 +17,10 @@ class PermalinkRedirector find_status_url_by_id(path_segments[2]) elsif path_segments[1] == 'accounts' && path_segments[2] =~ /\d/ find_account_url_by_id(path_segments[2]) + elsif path_segments[1] == 'timelines' && path_segments[2] == 'tag' && path_segments[3].present? + find_tag_url_by_name(path_segments[3]) + elsif path_segments[1] == 'tags' && path_segments[2].present? + find_tag_url_by_name(path_segments[2]) end end end diff --git a/app/views/home/index.html.haml b/app/views/home/index.html.haml index 437c3371546..568b23effc5 100644 --- a/app/views/home/index.html.haml +++ b/app/views/home/index.html.haml @@ -1,14 +1,10 @@ - content_for :header_tags do - - if user_signed_in? - = preload_pack_asset 'features/getting_started.js', crossorigin: 'anonymous' - = preload_pack_asset 'features/compose.js', crossorigin: 'anonymous' - = preload_pack_asset 'features/home_timeline.js', crossorigin: 'anonymous' - = preload_pack_asset 'features/notifications.js', crossorigin: 'anonymous' - - = render partial: 'shared/og' + = preload_pack_asset 'features/getting_started.js', crossorigin: 'anonymous' + = preload_pack_asset 'features/compose.js', crossorigin: 'anonymous' + = preload_pack_asset 'features/home_timeline.js', crossorigin: 'anonymous' + = preload_pack_asset 'features/notifications.js', crossorigin: 'anonymous' %meta{name: 'applicationServerKey', content: Rails.configuration.x.vapid_public_key} - = render_initial_state .notranslate.app-holder#mastodon{ data: { props: Oj.dump(default_props) } } diff --git a/spec/lib/permalink_redirector_spec.rb b/spec/lib/permalink_redirector_spec.rb index abda57da497..b916b33b22c 100644 --- a/spec/lib/permalink_redirector_spec.rb +++ b/spec/lib/permalink_redirector_spec.rb @@ -21,7 +21,7 @@ describe PermalinkRedirector do it 'returns path for legacy tag links' do redirector = described_class.new('web/timelines/tag/hoge') - expect(redirector.redirect_path).to be_nil + expect(redirector.redirect_path).to eq '/tags/hoge' end it 'returns path for pretty account links' do @@ -36,7 +36,7 @@ describe PermalinkRedirector do it 'returns path for pretty tag links' do redirector = described_class.new('web/tags/hoge') - expect(redirector.redirect_path).to be_nil + expect(redirector.redirect_path).to eq '/tags/hoge' end end end From e18ba67727efc0160dd49348f0e38c106d50d7af Mon Sep 17 00:00:00 2001 From: Claire Date: Sun, 2 Oct 2022 18:23:14 +0200 Subject: [PATCH 345/646] [Glitch] Add privacy icons to report modal Port d2f7e30a283a1dca1f7974884ac0c237b93903ad to glitch-soc --- .../glitch/features/report/components/status_check_box.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/features/report/components/status_check_box.js b/app/javascript/flavours/glitch/features/report/components/status_check_box.js index 76bf0eb8517..2231fc0ce2a 100644 --- a/app/javascript/flavours/glitch/features/report/components/status_check_box.js +++ b/app/javascript/flavours/glitch/features/report/components/status_check_box.js @@ -7,6 +7,7 @@ import DisplayName from 'flavours/glitch/components/display_name'; import RelativeTimestamp from 'flavours/glitch/components/relative_timestamp'; import Option from './option'; import MediaAttachments from 'flavours/glitch/components/media_attachments'; +import VisibilityIcon from 'flavours/glitch/components/status_visibility_icon'; export default class StatusCheckBox extends React.PureComponent { @@ -36,7 +37,7 @@ export default class StatusCheckBox extends React.PureComponent {
-
·
+
·
} /> From d25de7f01ee04498c13a433f6c3044fa50392dc0 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 29 Sep 2022 06:22:12 +0200 Subject: [PATCH 346/646] [Glitch] Change path of privacy policy page Port 36f4c32a38ed85e5e658b34d36eac40a6147bc0c to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/features/ui/components/link_footer.js | 4 ++-- app/javascript/flavours/glitch/util/backend_links.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/javascript/flavours/glitch/features/ui/components/link_footer.js b/app/javascript/flavours/glitch/features/ui/components/link_footer.js index 3abdaad4bdd..d91f9b8c403 100644 --- a/app/javascript/flavours/glitch/features/ui/components/link_footer.js +++ b/app/javascript/flavours/glitch/features/ui/components/link_footer.js @@ -4,7 +4,7 @@ import PropTypes from 'prop-types'; import { FormattedMessage, defineMessages, injectIntl } from 'react-intl'; import { Link } from 'react-router-dom'; import { limitedFederationMode, version, repository, source_url } from 'flavours/glitch/util/initial_state'; -import { signOutLink, securityLink } from 'flavours/glitch/util/backend_links'; +import { signOutLink, securityLink, privacyPolicyLink } from 'flavours/glitch/util/backend_links'; import { logOut } from 'flavours/glitch/util/log_out'; import { openModal } from 'flavours/glitch/actions/modal'; import { PERMISSION_INVITE_USERS } from 'flavours/glitch/permissions'; @@ -55,7 +55,7 @@ class LinkFooter extends React.PureComponent { {!!securityLink &&
  • ·
  • } {!limitedFederationMode &&
  • ·
  • }
  • ·
  • -
  • ·
  • +
  • ·
  • ·
  • ·
  • diff --git a/app/javascript/flavours/glitch/util/backend_links.js b/app/javascript/flavours/glitch/util/backend_links.js index 5b2dd8dbff0..d0ae6341965 100644 --- a/app/javascript/flavours/glitch/util/backend_links.js +++ b/app/javascript/flavours/glitch/util/backend_links.js @@ -1,7 +1,7 @@ export const preferencesLink = '/settings/preferences'; export const profileLink = '/settings/profile'; export const signOutLink = '/auth/sign_out'; -export const termsLink = '/terms'; +export const privacyPolicyLink = '/privacy-policy'; export const accountAdminLink = (id) => `/admin/accounts/${id}`; export const statusAdminLink = (account_id, status_id) => `/admin/accounts/${account_id}/statuses?id=${status_id}`; export const filterEditLink = (id) => `/filters/${id}/edit`; From f416e36f0fb68379cbb0cd019c5a8f435f9ab988 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 20 Sep 2022 23:51:21 +0200 Subject: [PATCH 347/646] [Glitch] Add ability to filter followed accounts' posts by language Port 50948b46aabc0756d85bc6641f0bd3bcc09bf7d4 to glitch-soc Signed-off-by: Claire --- .../features/account/components/header.js | 5 + .../account_timeline/components/header.js | 6 + .../containers/header_container.js | 8 +- .../subscribed_languages_modal/index.js | 121 ++++++++++++++++++ .../features/ui/components/modal_root.js | 2 + 5 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 app/javascript/flavours/glitch/features/subscribed_languages_modal/index.js diff --git a/app/javascript/flavours/glitch/features/account/components/header.js b/app/javascript/flavours/glitch/features/account/components/header.js index 53170b7a6e0..cc2a7d4d45a 100644 --- a/app/javascript/flavours/glitch/features/account/components/header.js +++ b/app/javascript/flavours/glitch/features/account/components/header.js @@ -51,6 +51,7 @@ const messages = defineMessages({ add_or_remove_from_list: { id: 'account.add_or_remove_from_list', defaultMessage: 'Add or Remove from lists' }, admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' }, add_account_note: { id: 'account.add_account_note', defaultMessage: 'Add note for @{name}' }, + languages: { id: 'account.languages', defaultMessage: 'Change subscribed languages' }, }); const dateFormatOptions = { @@ -85,6 +86,7 @@ class Header extends ImmutablePureComponent { onEndorseToggle: PropTypes.func.isRequired, onAddToList: PropTypes.func.isRequired, onEditAccountNote: PropTypes.func.isRequired, + onChangeLanguages: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, domain: PropTypes.string.isRequired, hidden: PropTypes.bool, @@ -215,6 +217,9 @@ class Header extends ImmutablePureComponent { } else { menu.push({ text: intl.formatMessage(messages.showReblogs, { name: account.get('username') }), action: this.props.onReblogToggle }); } + + menu.push({ text: intl.formatMessage(messages.languages), action: this.props.onChangeLanguages }); + menu.push(null); } menu.push({ text: intl.formatMessage(account.getIn(['relationship', 'endorsed']) ? messages.unendorse : messages.endorse), action: this.props.onEndorseToggle }); diff --git a/app/javascript/flavours/glitch/features/account_timeline/components/header.js b/app/javascript/flavours/glitch/features/account_timeline/components/header.js index 645ff29ea45..783d318f985 100644 --- a/app/javascript/flavours/glitch/features/account_timeline/components/header.js +++ b/app/javascript/flavours/glitch/features/account_timeline/components/header.js @@ -23,6 +23,7 @@ export default class Header extends ImmutablePureComponent { onUnblockDomain: PropTypes.func.isRequired, onEndorseToggle: PropTypes.func.isRequired, onAddToList: PropTypes.func.isRequired, + onChangeLanguages: PropTypes.func.isRequired, hideTabs: PropTypes.bool, domain: PropTypes.string.isRequired, hidden: PropTypes.bool, @@ -92,6 +93,10 @@ export default class Header extends ImmutablePureComponent { this.props.onEditAccountNote(this.props.account); } + handleChangeLanguages = () => { + this.props.onChangeLanguages(this.props.account); + } + render () { const { account, hidden, hideTabs } = this.props; @@ -118,6 +123,7 @@ export default class Header extends ImmutablePureComponent { onEndorseToggle={this.handleEndorseToggle} onAddToList={this.handleAddToList} onEditAccountNote={this.handleEditAccountNote} + onChangeLanguages={this.handleChangeLanguages} domain={this.props.domain} hidden={hidden} /> diff --git a/app/javascript/flavours/glitch/features/account_timeline/containers/header_container.js b/app/javascript/flavours/glitch/features/account_timeline/containers/header_container.js index 3fa7c1448b1..dc8b2d55a5c 100644 --- a/app/javascript/flavours/glitch/features/account_timeline/containers/header_container.js +++ b/app/javascript/flavours/glitch/features/account_timeline/containers/header_container.js @@ -130,12 +130,18 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ dispatch(unblockDomain(domain)); }, - onAddToList(account){ + onAddToList (account) { dispatch(openModal('LIST_ADDER', { accountId: account.get('id'), })); }, + onChangeLanguages (account) { + dispatch(openModal('SUBSCRIBED_LANGUAGES', { + accountId: account.get('id'), + })); + }, + }); export default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(Header)); diff --git a/app/javascript/flavours/glitch/features/subscribed_languages_modal/index.js b/app/javascript/flavours/glitch/features/subscribed_languages_modal/index.js new file mode 100644 index 00000000000..55404c184c0 --- /dev/null +++ b/app/javascript/flavours/glitch/features/subscribed_languages_modal/index.js @@ -0,0 +1,121 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import { connect } from 'react-redux'; +import { createSelector } from 'reselect'; +import { is, List as ImmutableList, Set as ImmutableSet } from 'immutable'; +import { languages as preloadedLanguages } from 'flavours/glitch/util/initial_state'; +import Option from 'flavours/glitch/features/report/components/option'; +import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; +import IconButton from 'flavours/glitch/components/icon_button'; +import Button from 'flavours/glitch/components/button'; +import { followAccount } from 'flavours/glitch/actions/accounts'; + +const messages = defineMessages({ + close: { id: 'lightbox.close', defaultMessage: 'Close' }, +}); + +const getAccountLanguages = createSelector([ + (state, accountId) => state.getIn(['timelines', `account:${accountId}`, 'items'], ImmutableList()), + state => state.get('statuses'), +], (statusIds, statuses) => + new ImmutableSet(statusIds.map(statusId => statuses.get(statusId)).filter(status => !status.get('reblog')).map(status => status.get('language')))); + +const mapStateToProps = (state, { accountId }) => ({ + acct: state.getIn(['accounts', accountId, 'acct']), + availableLanguages: getAccountLanguages(state, accountId), + selectedLanguages: ImmutableSet(state.getIn(['relationships', accountId, 'languages']) || ImmutableList()), +}); + +const mapDispatchToProps = (dispatch, { accountId }) => ({ + + onSubmit (languages) { + dispatch(followAccount(accountId, { languages })); + }, + +}); + +export default @connect(mapStateToProps, mapDispatchToProps) +@injectIntl +class SubscribedLanguagesModal extends ImmutablePureComponent { + + static propTypes = { + accountId: PropTypes.string.isRequired, + acct: PropTypes.string.isRequired, + availableLanguages: ImmutablePropTypes.setOf(PropTypes.string), + selectedLanguages: ImmutablePropTypes.setOf(PropTypes.string), + onClose: PropTypes.func.isRequired, + languages: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)), + intl: PropTypes.object.isRequired, + submit: PropTypes.func.isRequired, + }; + + static defaultProps = { + languages: preloadedLanguages, + }; + + state = { + selectedLanguages: this.props.selectedLanguages, + }; + + handleLanguageToggle = (value, checked) => { + const { selectedLanguages } = this.state; + + if (checked) { + this.setState({ selectedLanguages: selectedLanguages.add(value) }); + } else { + this.setState({ selectedLanguages: selectedLanguages.delete(value) }); + } + }; + + handleSubmit = () => { + this.props.onSubmit(this.state.selectedLanguages.toArray()); + this.props.onClose(); + } + + renderItem (value) { + const language = this.props.languages.find(language => language[0] === value); + const checked = this.state.selectedLanguages.includes(value); + + return ( +