diff --git a/.circleci/config.yml b/.circleci/config.yml index 65f4e5df5..1b7f1db42 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -13,6 +13,9 @@ aliases: ALLOW_NOPAM: true CONTINUOUS_INTEGRATION: true DISABLE_SIMPLECOV: true + PAM_ENABLED: true + PAM_DEFAULT_SERVICE: pam_test + PAM_CONTROLLED_SERVICE: pam_test_controlled working_directory: ~/projects/mastodon/ - &attach_workspace diff --git a/.env.test b/.env.test index 726351c5e..fa4e1d91f 100644 --- a/.env.test +++ b/.env.test @@ -3,7 +3,3 @@ NODE_ENV=test # Federation LOCAL_DOMAIN=cb6e6126.ngrok.io LOCAL_HTTPS=true -# test pam authentication -PAM_ENABLED=true -PAM_DEFAULT_SERVICE=pam_test -PAM_CONTROLLED_SERVICE=pam_test_controlled diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 46602fd2c..3890729e2 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,11 +1,17 @@ --- name: Feature Request -about: Suggest an idea for this project +about: I have a suggestion --- -[Issue text goes here]. + -* * * * + -- [ ] I searched or browsed the repo’s other issues to ensure this is not a duplicate. +### Pitch + + + +### Motivation + + diff --git a/.github/ISSUE_TEMPLATE/support.md b/.github/ISSUE_TEMPLATE/support.md new file mode 100644 index 000000000..7fbc86ff1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/support.md @@ -0,0 +1,10 @@ +--- +name: Support +about: Ask for help with your deployment + +--- + +We primarily use GitHub as a bug and feature tracker. For usage questions, troubleshooting of deployments and other individual technical assistance, please use one of the resources below: + +- https://discourse.joinmastodon.org +- #mastodon on irc.freenode.net diff --git a/.ruby-version b/.ruby-version index 73462a5a1..aedc15bb0 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.5.1 +2.5.3 diff --git a/AUTHORS.md b/AUTHORS.md index abcc24384..277683a00 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -5,44 +5,46 @@ and provided thanks to the work of the following contributors: * [ykzts](https://github.com/ykzts) * [akihikodaki](https://github.com/akihikodaki) * [mjankowski](https://github.com/mjankowski) -* [unarist](https://github.com/unarist) * [ThibG](https://github.com/ThibG) +* [unarist](https://github.com/unarist) * [m4sk1n](https://github.com/m4sk1n) * [yiskah](https://github.com/yiskah) * [nolanlawson](https://github.com/nolanlawson) * [sorin-davidoi](https://github.com/sorin-davidoi) * [abcang](https://github.com/abcang) * [lynlynlynx](https://github.com/lynlynlynx) +* [dependabot[bot]](https://github.com/apps/dependabot) * [alpaca-tc](https://github.com/alpaca-tc) * [nclm](https://github.com/nclm) * [ineffyble](https://github.com/ineffyble) * [renatolond](https://github.com/renatolond) * [jeroenpraat](https://github.com/jeroenpraat) +* [mayaeh](https://github.com/mayaeh) * [blackle](https://github.com/blackle) * [Quent-in](https://github.com/Quent-in) * [JantsoP](https://github.com/JantsoP) * [nullkal](https://github.com/nullkal) * [yookoala](https://github.com/yookoala) -* [mayaeh](https://github.com/mayaeh) * [ysksn](https://github.com/ysksn) * [shuheiktgw](https://github.com/shuheiktgw) * [ashfurrow](https://github.com/ashfurrow) +* [mabkenar](https://github.com/mabkenar) * [zunda](https://github.com/zunda) -* [eramdam](https://github.com/eramdam) * [Kjwon15](https://github.com/Kjwon15) +* [eramdam](https://github.com/eramdam) * [masarakki](https://github.com/masarakki) * [ticky](https://github.com/ticky) +* [takayamaki](https://github.com/takayamaki) * [Quenty31](https://github.com/Quenty31) * [danhunsaker](https://github.com/danhunsaker) * [ThisIsMissEm](https://github.com/ThisIsMissEm) * [hcmiya](https://github.com/hcmiya) * [stephenburgess8](https://github.com/stephenburgess8) * [Wonderfall](https://github.com/Wonderfall) -* [takayamaki](https://github.com/takayamaki) * [matteoaquila](https://github.com/matteoaquila) * [rkarabut](https://github.com/rkarabut) -* [Artoria2e5](https://github.com/Artoria2e5) * [yukimochi](https://github.com/yukimochi) +* [Artoria2e5](https://github.com/Artoria2e5) * [marrus-sh](https://github.com/marrus-sh) * [krainboltgreene](https://github.com/krainboltgreene) * [patf](https://github.com/patf) @@ -56,7 +58,7 @@ and provided thanks to the work of the following contributors: * [MasterGroosha](https://github.com/MasterGroosha) * [JeanGauthier](https://github.com/JeanGauthier) * [kschaper](https://github.com/kschaper) -* [mabkenar](https://github.com/mabkenar) +* [MaciekBaron](https://github.com/MaciekBaron) * [MitarashiDango](mailto:mitarashidango@users.noreply.github.com) * [beatrix-bitrot](https://github.com/beatrix-bitrot) * [adbelle](https://github.com/adbelle) @@ -64,9 +66,9 @@ and provided thanks to the work of the following contributors: * [MightyPork](https://github.com/MightyPork) * [yhirano55](https://github.com/yhirano55) * [camponez](https://github.com/camponez) -* [MaciekBaron](https://github.com/MaciekBaron) * [SerCom-KC](https://github.com/SerCom-KC) * [aschmitz](https://github.com/aschmitz) +* [devkral](https://github.com/devkral) * [fpiesche](https://github.com/fpiesche) * [gandaro](https://github.com/gandaro) * [johnsudaar](https://github.com/johnsudaar) @@ -75,8 +77,6 @@ and provided thanks to the work of the following contributors: * [lindwurm](https://github.com/lindwurm) * [victorhck](mailto:victorhck@geeko.site) * [voidsatisfaction](https://github.com/voidsatisfaction) -* [valentin2105](https://github.com/valentin2105) -* [devkral](https://github.com/devkral) * [hikari-no-yume](https://github.com/hikari-no-yume) * [angristan](https://github.com/angristan) * [seefood](https://github.com/seefood) @@ -93,6 +93,7 @@ and provided thanks to the work of the following contributors: * [tsuwatch](https://github.com/tsuwatch) * [victorhck](https://github.com/victorhck) * [puckipedia](https://github.com/puckipedia) +* [fvh-P](https://github.com/fvh-P) * [contraexemplo](https://github.com/contraexemplo) * [hugogameiro](https://github.com/hugogameiro) * [kazu9su](https://github.com/kazu9su) @@ -102,11 +103,11 @@ and provided thanks to the work of the following contributors: * [Neetshin](mailto:neetshin@neetsh.in) * [rainyday](https://github.com/rainyday) * [ProgVal](https://github.com/ProgVal) +* [valentin2105](https://github.com/valentin2105) * [yuntan](https://github.com/yuntan) * [goofy-bz](mailto:goofy@babelzilla.org) * [kadiix](https://github.com/kadiix) * [kodacs](https://github.com/kodacs) -* [fvh-P](https://github.com/fvh-P) * [rtucker](https://github.com/rtucker) * [KScl](https://github.com/KScl) * [sterdev](https://github.com/sterdev) @@ -116,6 +117,7 @@ and provided thanks to the work of the following contributors: * [cpytel](https://github.com/cpytel) * [northerner](https://github.com/northerner) * [fhemberger](https://github.com/fhemberger) +* [greysteil](https://github.com/greysteil) * [hnrysmth](https://github.com/hnrysmth) * [d6rkaiz](https://github.com/d6rkaiz) * [JMendyk](https://github.com/JMendyk) @@ -125,12 +127,14 @@ and provided thanks to the work of the following contributors: * [reneklacan](https://github.com/reneklacan) * [ekiru](https://github.com/ekiru) * [tcitworld](https://github.com/tcitworld) +* [ashleyhull-versent](https://github.com/ashleyhull-versent) * [geta6](https://github.com/geta6) * [happycoloredbanana](https://github.com/happycoloredbanana) * [leopku](https://github.com/leopku) * [SansPseudoFix](https://github.com/SansPseudoFix) * [tomfhowe](https://github.com/tomfhowe) * [noraworld](https://github.com/noraworld) +* [theboss](https://github.com/theboss) * [178inaba](https://github.com/178inaba) * [alyssais](https://github.com/alyssais) * [kodnaplakal](https://github.com/kodnaplakal) @@ -140,6 +144,7 @@ and provided thanks to the work of the following contributors: * [halkeye](https://github.com/halkeye) * [hinaloe](https://github.com/hinaloe) * [treby](https://github.com/treby) +* [Reverite](https://github.com/Reverite) * [jpdevries](https://github.com/jpdevries) * [00x9d](https://github.com/00x9d) * [Kurtis Rainbolt-Greene](mailto:me@kurtisrainboltgreene.name) @@ -147,15 +152,16 @@ and provided thanks to the work of the following contributors: * [nevillepark](https://github.com/nevillepark) * [ornithocoder](https://github.com/ornithocoder) * [pierreozoux](https://github.com/pierreozoux) +* [qguv](https://github.com/qguv) * [Ram Lmn](mailto:ramlmn@users.noreply.github.com) * [harukasan](https://github.com/harukasan) * [stamak](https://github.com/stamak) -* [theboss](https://github.com/theboss) * [Technowix](mailto:technowix@users.noreply.github.com) * [Eychics](https://github.com/Eychics) * [Thor Harald Johansen](mailto:thj@thj.no) * [0x70b1a5](https://github.com/0x70b1a5) * [gled-rs](https://github.com/gled-rs) +* [Valentin_NC](mailto:valentin.ouvrard@nautile.sarl) * [R0ckweb](https://github.com/R0ckweb) * [caasi](https://github.com/caasi) * [esetomo](https://github.com/esetomo) @@ -168,6 +174,7 @@ and provided thanks to the work of the following contributors: * [vahnj](https://github.com/vahnj) * [ikuradon](https://github.com/ikuradon) * [AndreLewin](https://github.com/AndreLewin) +* [rinsuki](https://github.com/rinsuki) * [redtachyons](https://github.com/redtachyons) * [thurloat](https://github.com/thurloat) * [aaribaud](https://github.com/aaribaud) @@ -188,14 +195,12 @@ and provided thanks to the work of the following contributors: * [Fjoerfoks](https://github.com/Fjoerfoks) * [fmauNeko](https://github.com/fmauNeko) * [gloaec](https://github.com/gloaec) -* [greysteil](https://github.com/greysteil) * [unstabler](https://github.com/unstabler) * [potato4d](https://github.com/potato4d) * [h-izumi](https://github.com/h-izumi) * [ErikXXon](https://github.com/ErikXXon) * [ian-kelling](https://github.com/ian-kelling) * [immae](https://github.com/immae) -* [Reverite](https://github.com/Reverite) * [foozmeat](https://github.com/foozmeat) * [jasonrhodes](https://github.com/jasonrhodes) * [Jason Snell](mailto:jason@newrelic.com) @@ -232,6 +237,8 @@ and provided thanks to the work of the following contributors: * [zacanger](https://github.com/zacanger) * [amazedkoumei](https://github.com/amazedkoumei) * [anon5r](https://github.com/anon5r) +* [aus-social](https://github.com/aus-social) +* [imbsky](https://github.com/imbsky) * [bsky](mailto:me@imbsky.net) * [chr-1x](https://github.com/chr-1x) * [codl](https://github.com/codl) @@ -249,12 +256,12 @@ and provided thanks to the work of the following contributors: * [oliverkeeble](https://github.com/oliverkeeble) * [pinfort](https://github.com/pinfort) * [rbaumert](https://github.com/rbaumert) +* [rhoio](https://github.com/rhoio) * [trwnh](https://github.com/trwnh) * [usagi-f](https://github.com/usagi-f) * [vidarlee](https://github.com/vidarlee) * [vjackson725](https://github.com/vjackson725) * [wxcafe](https://github.com/wxcafe) -* [rinsuki](https://github.com/rinsuki) * [新都心(Neet Shin)](mailto:nucx@dio-vox.com) * [cygnan](https://github.com/cygnan) * [Awea](https://github.com/Awea) @@ -282,6 +289,7 @@ and provided thanks to the work of the following contributors: * [ameliavoncat](https://github.com/ameliavoncat) * [ilpianista](https://github.com/ilpianista) * [Andreas Drop](mailto:andy@remline.de) +* [andi1984](https://github.com/andi1984) * [schas002](https://github.com/schas002) * [abackstrom](https://github.com/abackstrom) * [jumbosushi](https://github.com/jumbosushi) @@ -303,8 +311,9 @@ and provided thanks to the work of the following contributors: * [chriswk](https://github.com/chriswk) * [csu](https://github.com/csu) * [kklleemm](https://github.com/kklleemm) +* [colindean](https://github.com/colindean) * [dachinat](https://github.com/dachinat) -* [monsterpit-daggertooth](https://github.com/monsterpit-daggertooth) +* [multiple-creatures](https://github.com/multiple-creatures) * [watilde](https://github.com/watilde) * [daprice](https://github.com/daprice) * [dar5hak](https://github.com/dar5hak) @@ -328,14 +337,17 @@ and provided thanks to the work of the following contributors: * [espenronnevik](https://github.com/espenronnevik) * [Finariel](https://github.com/Finariel) * [siuying](https://github.com/siuying) +* [GenbuHase](https://github.com/GenbuHase) * [hattori6789](https://github.com/hattori6789) * [algernon](https://github.com/algernon) * [Fastbyte01](https://github.com/Fastbyte01) +* [Gomasy](https://github.com/Gomasy) * [myfreeweb](https://github.com/myfreeweb) * [gfaivre](https://github.com/gfaivre) * [Fiaxhs](https://github.com/Fiaxhs) * [reedcourty](https://github.com/reedcourty) * [anneau](https://github.com/anneau) +* [lanodan](https://github.com/lanodan) * [Harmon758](https://github.com/Harmon758) * [HellPie](https://github.com/HellPie) * [Habu-Kagumba](https://github.com/Habu-Kagumba) @@ -360,6 +372,7 @@ and provided thanks to the work of the following contributors: * [jguerder](https://github.com/jguerder) * [Jehops](https://github.com/Jehops) * [joshuap](https://github.com/joshuap) +* [YuleZ](https://github.com/YuleZ) * [Tiwy57](https://github.com/Tiwy57) * [xuv](https://github.com/xuv) * [Jnsll](https://github.com/Jnsll) @@ -388,6 +401,7 @@ and provided thanks to the work of the following contributors: * [otsune](https://github.com/otsune) * [Mathias B](mailto:10813340+mathias-b@users.noreply.github.com) * [matt-auckland](https://github.com/matt-auckland) +* [webroo](https://github.com/webroo) * [matthiasbeyer](https://github.com/matthiasbeyer) * [mattjmattj](https://github.com/mattjmattj) * [mtparet](https://github.com/mtparet) @@ -400,6 +414,7 @@ and provided thanks to the work of the following contributors: * [mike-burns](https://github.com/mike-burns) * [verymilan](https://github.com/verymilan) * [milmazz](https://github.com/milmazz) +* [premist](https://github.com/premist) * [Mnkai](https://github.com/Mnkai) * [mitchhentges](https://github.com/mitchhentges) * [moritzheiber](https://github.com/moritzheiber) @@ -413,7 +428,7 @@ and provided thanks to the work of the following contributors: * [vonneudeck](https://github.com/vonneudeck) * [Ninetailed](https://github.com/Ninetailed) * [k24](https://github.com/k24) -* [Noiob](mailto:noiob@users.noreply.github.com) +* [noiob](https://github.com/noiob) * [kwaio](https://github.com/kwaio) * [norayr](https://github.com/norayr) * [joyeusenoelle](https://github.com/joyeusenoelle) @@ -425,7 +440,6 @@ and provided thanks to the work of the following contributors: * [Pangoraw](https://github.com/Pangoraw) * [peterkeen](https://github.com/peterkeen) * [pgate](https://github.com/pgate) -* [qguv](https://github.com/qguv) * [remram44](https://github.com/remram44) * [retokromer](https://github.com/retokromer) * [rfwatson](https://github.com/rfwatson) @@ -436,6 +450,7 @@ and provided thanks to the work of the following contributors: * [staticsafe](https://github.com/staticsafe) * [snwh](https://github.com/snwh) * [sts10](https://github.com/sts10) +* [sascha-sl](https://github.com/sascha-sl) * [skoji](https://github.com/skoji) * [ScienJus](https://github.com/ScienJus) * [larkinscott](https://github.com/larkinscott) @@ -450,20 +465,20 @@ and provided thanks to the work of the following contributors: * [Sina Mashek](mailto:sina@mashek.xyz) * [sossii](https://github.com/sossii) * [SpankyWorks](https://github.com/SpankyWorks) -* [StefOfficiel](https://github.com/StefOfficiel) -* [svetlik](https://github.com/svetlik) -* [dereckson](https://github.com/dereckson) -* [phaedryx](https://github.com/phaedryx) -* [takp](https://github.com/takp) -* [tkusano](https://github.com/tkusano) -* [TakesxiSximada](https://github.com/TakesxiSximada) -* [TheInventrix](https://github.com/TheInventrix) -* [shug0](https://github.com/shug0) -* [Fortyseven](https://github.com/Fortyseven) -* [tobypinder](https://github.com/tobypinder) -* [tomosm](https://github.com/tomosm) -* [TomoyaShibata](https://github.com/TomoyaShibata) -* [treyssatvincent](https://github.com/treyssatvincent) +* [StefOfficiel](mailto:pichard.stephane@free.fr) +* [Svetlozar Todorov](mailto:svetlik@users.noreply.github.com) +* [Sébastien Santoro](mailto:dereckson@espace-win.org) +* [Tad Thorley](mailto:phaedryx@users.noreply.github.com) +* [Takayoshi Nishida](mailto:takayoshi.nishida@gmail.com) +* [Takayuki KUSANO](mailto:github@tkusano.jp) +* [TakesxiSximada](mailto:takesxi.sximada@gmail.com) +* [TheInventrix](mailto:theinventrix@users.noreply.github.com) +* [Thomas Alberola](mailto:thomas@needacoffee.fr) +* [Toby Deshane](mailto:fortyseven@users.noreply.github.com) +* [Toby Pinder](mailto:gigitrix@gmail.com) +* [Tomonori Murakami](mailto:crosslife777@gmail.com) +* [TomoyaShibata](mailto:wind.of.hometown@gmail.com) +* [Treyssat-Vincent Nino](mailto:treyssatvincent@users.noreply.github.com) * [Udo Kramer](mailto:optik@fluffel.io) * [Una](mailto:una@unascribed.com) * [Ushitora Anqou](mailto:ushitora_anqou@yahoo.co.jp) @@ -489,6 +504,7 @@ and provided thanks to the work of the following contributors: * [benklop](mailto:benklop@gmail.com) * [bsky](mailto:git@imbsky.net) * [caesarologia](mailto:lopesgemelli.1@gmail.com) +* [cbayerlein](mailto:c.bayerlein@gmail.com) * [chrolis](mailto:chrolis@users.noreply.github.com) * [cormo](mailto:cormorant2+github@gmail.com) * [d0p1](mailto:dopi-sama@hush.com) @@ -500,19 +516,23 @@ and provided thanks to the work of the following contributors: * [hakoai](mailto:hk--76@qa2.so-net.ne.jp) * [haosbvnker](mailto:github@chaosbunker.com) * [isati](mailto:phil@juchnowi.cz) +* [jacob](mailto:jacobherringtondeveloper@gmail.com) * [jenn kaplan](mailto:me@jkap.io) * [jirayudech](mailto:jirayudech@gmail.com) +* [jooops](mailto:joops@autistici.org) * [jukper](mailto:jukkaperanto@gmail.com) * [jumoru](mailto:jumoru@mailbox.org) * [karlyeurl](mailto:karl.yeurl@gmail.com) * [kedama](mailto:32974885+kedamadq@users.noreply.github.com) * [kuro5hin](mailto:rusty@kuro5hin.org) +* [luzpaz](mailto:luzpaz@users.noreply.github.com) * [maxypy](mailto:maxime@mpigou.fr) * [mhe](mailto:mail@marcus-herrmann.com) * [mimikun](mailto:dzdzble_effort_311@outlook.jp) * [mshrtkch](mailto:mshrtkch@users.noreply.github.com) * [muan](mailto:muan@github.com) * [neetshin](mailto:neetshin@neetsh.in) +* [nightpool](mailto:nightpool@users.noreply.github.com) * [rch850](mailto:rich850@gmail.com) * [roikale](mailto:roikale@users.noreply.github.com) * [rysiekpl](mailto:rysiek@hackerspace.pl) @@ -524,6 +544,7 @@ and provided thanks to the work of the following contributors: * [tackeyy](mailto:mailto.takita.yusuke@gmail.com) * [tateisu](mailto:tateisu@gmail.com) * [tmyt](mailto:shigure@refy.net) +* [trevDev()](mailto:trev@trevdev.ca) * [utam0k](mailto:k0ma@utam0k.jp) * [vpzomtrrfrt](mailto:vpzomtrrfrt@gmail.com) * [walfie](mailto:walfington@gmail.com) diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..666ccd14b --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,107 @@ +Changelog +========= + +All notable changes to this project will be documented in this file. + +## [Unreleased] +### Added + +- Add link ownership verification (#8703) +- Add conversations API (#8832) +- Add limit for the number of people that can be followed from one account (#8807) +- Add admin setting to customize mascot (#8766) +- Add support for more granular ActivityPub audiences from other software, i.e. circles (#8950) +- Add option to block all reports from a domain (#8830) +- Add user preference to always expand toots marked with content warnings (#8762) +- Add user preference to always hide all media (#8569) +- Add `force_login` param to OAuth authorize page (#8655) +- Add `tootctl accounts backup` (#8642, #8811) +- Add `tootctl accounts create` (#8642, #8811) +- Add `tootctl accounts cull` (#8642, #8811) +- Add `tootctl accounts delete` (#8642, #8811) +- Add `tootctl accounts modify` (#8642, #8811) +- Add `tootctl accounts refresh` (#8642, #8811) +- Add `tootctl feeds build` (#8642, #8811) +- Add `tootctl feeds clear` (#8642, #8811) +- Add `tootctl settings registrations open` (#8642, #8811) +- Add `tootctl settings registrations close` (#8642, #8811) +- Add `min_id` param to REST API to support backwards pagination (#8736) +- Add a confirmation dialog when hitting reply and the compose box isn't empty (#8893) +- Add PostgreSQL disk space growth tracking in PGHero (#8906) +- Add button for disabling local account to report quick actions bar (#9024) +- Add Czech language (#8594) +- Add `Clear-Site-Data` header when logging out (#8627) +- Add `same-site` (`lax`) attribute to cookies (#8626) +- Add support for styled scrollbars in Firefox Nightly (#8653) +- Add highlight to the active tab in web UI profiles (#8673) +- Add auto-focus for comment textarea in report modal (#8689) +- Add auto-focus for emoji picker's search field (#8688) +- Add nginx and systemd templates to `dist/` directory (#8770) +- Add support for `/.well-known/change-password` (#8828) +- Add option to override FFMPEG binary path (#8855) +- Add `dns-prefetch` tag when using different host for assets or uploads (#8942) +- Add `description` meta tag (#8941) +- Add `Content-Security-Policy` header (#8957) +- Add cache for the instance info API (#8765) + +### Changed + +- Change forms design (#8703) +- Change reports overview to group by target account (#8674) +- Change web UI to show "read more" link on overly long in-stream statuses (#8205) +- Change design of direct messages column (#8832, #9022) +- Change home timelines to exclude DMs (#8940) +- Change list timelines to exclude all replies (#8683) +- Change admin accounts UI default sort to most recent (#8813) +- Change documentation URL in the UI (#8898) +- Change style of success and failure messages (#8973) +- Change DM filtering to always allow DMs from staff (#8993) +- Change recommended Ruby version to 2.5.3 (#9003) + +### Deprecated + +- `GET /api/v1/timelines/direct` → `GET /api/v1/conversations` (#8832) +- `POST /api/v1/notifications/dismiss` → `POST /api/v1/notifications/:id/dismiss` (#8905) + +### Removed + +- Remove "on this device" label in column push settings (#8704) +- Remove rake tasks in favour of tootctl commands (#8675) + +### Fixed + +- Fix remote statuses using instance's default locale if no language given (#8861) +- Fix streaming API not exiting when port or socket is unavailable (#9023) +- Fix network calls being performed in database transaction in ActivityPub handler (#8951) +- Fix dropdown arrow position (#8637) +- Fix first element of dropdowns being focused even if not using keyboard (#8679) +- Fix tootctl requiring `bundle exec` invocation (#8619) +- Fix public pages not using animation preference for avatars (#8614) +- Fix OEmbed/OpenGraph cards not understanding relative URLs (#8669) +- Fix some dark emojis not having a white outline (#8597) +- Fix media description not being displayed in various media modals (#8678) +- Fix generated URLs of desktop notifications missing base URL (#8758) +- Fix RTL styles (#8764, #8767, #8823, #8897, #9005, #9007, #9018, #9021) +- Fix crash in streaming API when tag param missing (#8955) +- Fix hotkeys not working when no element is focused (#8998) +- Fix some hotkeys not working on detailed status view (#9006) + +## [2.5.2] - 2018-10-12 +### Security + +- Fix XSS vulnerability (#8959) + +## [2.5.1] - 2018-10-07 +### Fixed + +- Fix database migrations for PostgreSQL below 9.5 (#8903) +- Fix class autoloading issue in ActivityPub Create handler (#8820) +- Fix cache statistics not being sent via statsd when statsd enabled (#8831) +- Bump puma from 3.11.4 to 3.12.0 (#8883) + +### Security + +- Fix some local images not having their EXIF metadata stripped on upload (#8714) +- Fix being able to enable a disabled relay via ActivityPub Accept handler (#8864) +- Bump nokogiri from 1.8.4 to 1.8.5 (#8881) +- Fix being able to report statuses not belonging to the reported account (#8916) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ddf303103..8044d04f7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -32,60 +32,42 @@ You should also try to follow the guidelines set out in the original `CONTRIBUTI
CONTRIBUTING -============ +======= +Contributing -There are three ways in which you can contribute to this repository: +Thank you for considering contributing to Mastodon 🐘 -1. By improving the documentation -2. By working on the back-end application -3. By working on the front-end application +You can contribute in the following ways: -Choosing what to work on in a large open source project is not easy. The list of [GitHub issues](https://github.com/tootsuite/mastodon/issues) may provide some ideas, but not every feature request has been greenlit. Likewise, not every change or feature that resolves a personal itch will be merged into the main repository. Some communication ahead of time may be wise. If your addition creates a new feature or setting, or otherwise changes how things work in some substantial way, please remember to submit a correlating pull request to document your changes in the [documentation](http://github.com/tootsuite/documentation). +- Finding and reporting bugs +- Translating the Mastodon interface into various languages +- Contributing code to Mastodon by fixing bugs or implementing features +- Improving the documentation -Below are the guidelines for working on pull requests: +## Bug reports -## General +Bug reports and feature suggestions can be submitted to [GitHub Issues](https://github.com/tootsuite/mastodon/issues). Please make sure that you are not submitting duplicates, and that a similar report or request has not already been resolved or rejected in the past using the search function. Please also use descriptive, concise titles. -- 2 spaces indentation +## Translations + +You can submit translations via [Weblate](https://weblate.joinmastodon.org/). They are periodically merged into the codebase. + +[![Mastodon translation statistics by language](https://weblate.joinmastodon.org/widgets/mastodon/-/multi-auto.svg)](https://weblate.joinmastodon.org/) + +## Pull requests + +Please use clean, concise titles for your pull requests. We use commit squashing, so the final commit in the master branch will carry the title of the pull request. + +The smaller the set of changes in the pull request is, the quicker it can be reviewed and merged. Splitting tasks into multiple smaller pull requests is often preferable. + +**Pull requests that do not pass automated checks may not be reviewed**. In particular, you need to keep in mind: + +- Unit and integration tests (rspec, jest) +- Code style rules (rubocop, eslint) +- Normalization of locale files (i18n-tasks) ## Documentation -- No spelling mistakes -- No orthographic mistakes -- No Markdown syntax errors - -## Requirements - -- Ruby -- Node.js -- PostgreSQL -- Redis -- Nginx (optional) - -## Back-end application - -It is expected that you have a working development environment set up. The development environment includes [rubocop](https://github.com/bbatsov/rubocop), which checks your Ruby code for compliance with our style guide and best practices. Sublime Text, likely like other editors, has a [Rubocop plugin](https://github.com/pderichs/sublime_rubocop) that runs checks on files as you edit them. The codebase also has a test suite. - -* The codebase is not perfect, at the time of writing, but it is expected that you do not introduce new code style violations -* The rspec test suite must pass -* To the extent that it is possible, verify your changes. In the best case, by adding new tests to the test suite. At the very least, by running the server or console and checking it manually -* If you are introducing new strings to the user interface, they must be using localization methods - -If your code has syntax errors that won't let it run, it's a good sign that the pull request isn't ready for submission yet. - -## Front-end application - -It is expected that you have a working development environment set up (see back-end application section). This project includes an ESLint configuration file, with which you can lint your changes. - -* Avoid grave ESLint violations -* Verify that your changes work -* If you are introducing new strings, they must be using localization methods - -If the JavaScript or CSS assets won't compile due to a syntax error, it's a good sign that the pull request isn't ready for submission yet. - -## Translate - -You can contribute to translating Mastodon via Weblate at [weblate.joinmastodon.org](https://weblate.joinmastodon.org/). -[![Mastodon translation statistics by language](https://weblate.joinmastodon.org/widgets/mastodon/-/multi-auto.svg)](https://weblate.joinmastodon.org/) +The [Mastodon documentation](https://docs.joinmastodon.org) is a statically generated site. You can [submit merge requests to mastodon/docs](https://source.joinmastodon.org/mastodon/docs).diff --git a/Dockerfile b/Dockerfile index bdc10c4ab..3e54b6555 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM node:8.12.0-alpine as node -FROM ruby:2.4.4-alpine3.7 +FROM ruby:2.4.5-alpine3.8 LABEL maintainer="https://github.com/tootsuite/mastodon" \ description="Your self-hosted, globally interconnected microblogging community" diff --git a/Gemfile b/Gemfile index b417a8d2e..ee9b746a6 100644 --- a/Gemfile +++ b/Gemfile @@ -16,8 +16,8 @@ gem 'pghero', '~> 2.2' gem 'dotenv-rails', '~> 2.5' gem 'aws-sdk-s3', '~> 1.21', require: false -gem 'fog-core', '~> 2.1' -gem 'fog-openstack', '~> 1.0', require: false +gem 'fog-core', '<= 2.1.0' +gem 'fog-openstack', '~> 0.3', require: false gem 'paperclip', '~> 6.0' gem 'paperclip-av-transcoder', '~> 0.6' gem 'streamio-ffmpeg', '~> 3.0' @@ -64,7 +64,7 @@ gem 'oj', '~> 3.6' gem 'ostatus2', '~> 2.0' gem 'ox', '~> 2.10' gem 'posix-spawn', git: 'https://github.com/rtomayko/posix-spawn', ref: '58465d2e213991f8afb13b984854a49fcdcc980c' -gem 'pundit', '~> 1.1' +gem 'pundit', '~> 2.0' gem 'premailer-rails' gem 'rack-attack', '~> 5.4' gem 'rack-cors', '~> 1.0', require: 'rack/cors' @@ -82,7 +82,7 @@ gem 'simple-navigation', '~> 4.0' gem 'simple_form', '~> 4.0' gem 'sprockets-rails', '~> 3.2', require: 'sprockets/railtie' gem 'stoplight', '~> 2.1.3' -gem 'strong_migrations', '~> 0.2' +gem 'strong_migrations', '~> 0.3' gem 'tty-command', '~> 0.8', require: false gem 'tty-prompt', '~> 0.17', require: false gem 'twitter-text', '~> 1.14' @@ -115,7 +115,7 @@ group :test do gem 'rspec-sidekiq', '~> 3.0' gem 'simplecov', '~> 0.16', require: false gem 'webmock', '~> 3.4' - gem 'parallel_tests', '~> 2.23' + gem 'parallel_tests', '~> 2.24' end group :development do diff --git a/Gemfile.lock b/Gemfile.lock index 13c1127b0..283a6c25d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -182,7 +182,7 @@ GEM docile (1.3.0) domain_name (0.5.20180417) unf (>= 0.0.5, < 1.0.0) - doorkeeper (5.0.0) + doorkeeper (5.0.1) railties (>= 4.2) dotenv (2.5.0) dotenv-rails (2.5.0) @@ -211,7 +211,7 @@ GEM fast_blank (1.0.0) fastimage (2.1.4) ffi (1.9.25) - fog-core (2.1.2) + fog-core (2.1.0) builder excon (~> 0.58) formatador (~> 0.2) @@ -219,8 +219,8 @@ GEM fog-json (1.2.0) fog-core multi_json (~> 1.10) - fog-openstack (1.0.3) - fog-core (~> 2.1) + fog-openstack (0.3.7) + fog-core (>= 1.45, <= 2.1.0) fog-json (>= 1.0) ipaddress (>= 0.8) formatador (0.2.5) @@ -271,7 +271,7 @@ GEM httplog (1.1.1) rack (>= 1.0) rainbow (>= 2.0.0) - i18n (1.1.0) + i18n (1.1.1) concurrent-ruby (~> 1.0) i18n-tasks (0.9.25) activesupport (>= 4.0.2) @@ -360,7 +360,7 @@ GEM concurrent-ruby (~> 1.0.0) sidekiq (>= 3.5.0) statsd-ruby (~> 1.2.0) - oj (3.6.11) + oj (3.6.12) omniauth (1.8.1) hashie (>= 3.4.6, < 3.6.0) rack (>= 1.6.2, < 3) @@ -387,7 +387,7 @@ GEM av (~> 0.9.0) paperclip (>= 2.5.2) parallel (1.12.1) - parallel_tests (2.23.0) + parallel_tests (2.24.0) parallel parser (2.5.1.2) ast (~> 2.4.0) @@ -417,7 +417,7 @@ GEM pry (>= 0.10.4) public_suffix (3.0.3) puma (3.12.0) - pundit (1.1.0) + pundit (2.0.0) activesupport (>= 3.0.0) raabro (1.1.6) rack (2.0.5) @@ -587,7 +587,7 @@ GEM stoplight (2.1.3) streamio-ffmpeg (3.0.2) multi_json (~> 1.8) - strong_migrations (0.2.3) + strong_migrations (0.3.1) activerecord (>= 3.2.0) temple (0.8.0) terminal-table (1.8.0) @@ -618,7 +618,7 @@ GEM unf (~> 0.1.0) tzinfo (1.2.5) thread_safe (~> 0.1) - tzinfo-data (1.2018.5) + tzinfo-data (1.2018.6) tzinfo (>= 1.0.0) unf (0.1.4) unf_ext @@ -680,8 +680,8 @@ DEPENDENCIES faker (~> 1.9) fast_blank (~> 1.0) fastimage - fog-core (~> 2.1) - fog-openstack (~> 1.0) + fog-core (<= 2.1.0) + fog-openstack (~> 0.3) fuubar (~> 2.3) goldfinger (~> 2.1) hamlit-rails (~> 0.2) @@ -717,7 +717,7 @@ DEPENDENCIES ox (~> 2.10) paperclip (~> 6.0) paperclip-av-transcoder (~> 0.6) - parallel_tests (~> 2.23) + parallel_tests (~> 2.24) pg (~> 1.1) pghero (~> 2.2) pkg-config (~> 1.3) @@ -727,7 +727,7 @@ DEPENDENCIES pry-byebug (~> 3.6) pry-rails (~> 0.3) puma (~> 3.12) - pundit (~> 1.1) + pundit (~> 2.0) rack-attack (~> 5.4) rack-cors (~> 1.0) rails (~> 5.2.1) @@ -755,7 +755,7 @@ DEPENDENCIES stackprof stoplight (~> 2.1.3) streamio-ffmpeg (~> 3.0) - strong_migrations (~> 0.2) + strong_migrations (~> 0.3) thor (~> 0.20) tty-command (~> 0.8) tty-prompt (~> 0.17) @@ -766,7 +766,7 @@ DEPENDENCIES webpush RUBY VERSION - ruby 2.5.0p0 + ruby 2.5.3p105 BUNDLED WITH - 1.16.5 + 1.16.6 diff --git a/app/controllers/admin/domain_blocks_controller.rb b/app/controllers/admin/domain_blocks_controller.rb index 64de2cbf0..90c70275a 100644 --- a/app/controllers/admin/domain_blocks_controller.rb +++ b/app/controllers/admin/domain_blocks_controller.rb @@ -46,7 +46,7 @@ module Admin end def resource_params - params.require(:domain_block).permit(:domain, :severity, :reject_media, :retroactive) + params.require(:domain_block).permit(:domain, :severity, :reject_media, :reject_reports, :retroactive) end def retroactive_unblock? diff --git a/app/controllers/admin/reports_controller.rb b/app/controllers/admin/reports_controller.rb index 5d7f43e00..e97ddb9b6 100644 --- a/app/controllers/admin/reports_controller.rb +++ b/app/controllers/admin/reports_controller.rb @@ -44,6 +44,14 @@ module Admin when 'resolve' @report.resolve!(current_account) log_action :resolve, @report + when 'disable' + @report.resolve!(current_account) + @report.target_account.user.disable! + + log_action :resolve, @report + log_action :disable, @report.target_account.user + + resolve_all_target_account_reports when 'silence' @report.resolve!(current_account) @report.target_account.update!(silenced: true) @@ -55,6 +63,7 @@ module Admin else raise ActiveRecord::RecordNotFound end + @report.reload end diff --git a/app/controllers/api/v1/conversations_controller.rb b/app/controllers/api/v1/conversations_controller.rb index 736cb21ca..b19f27ebf 100644 --- a/app/controllers/api/v1/conversations_controller.rb +++ b/app/controllers/api/v1/conversations_controller.rb @@ -3,9 +3,11 @@ class Api::V1::ConversationsController < Api::BaseController LIMIT = 20 - before_action -> { doorkeeper_authorize! :read, :'read:statuses' } + before_action -> { doorkeeper_authorize! :read, :'read:statuses' }, only: :index + before_action -> { doorkeeper_authorize! :write, :'write:conversations' }, except: :index before_action :require_user! - after_action :insert_pagination_headers + before_action :set_conversation, except: :index + after_action :insert_pagination_headers, only: :index respond_to :json @@ -14,8 +16,22 @@ class Api::V1::ConversationsController < Api::BaseController render json: @conversations, each_serializer: REST::ConversationSerializer end + def read + @conversation.update!(unread: false) + render json: @conversation, serializer: REST::ConversationSerializer + end + + def destroy + @conversation.destroy! + render_empty + end + private + def set_conversation + @conversation = AccountConversation.where(account: current_account).find(params[:id]) + end + def paginated_conversations AccountConversation.where(account: current_account) .paginate_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id)) diff --git a/app/controllers/api/v1/reports_controller.rb b/app/controllers/api/v1/reports_controller.rb index 726817927..e182a9c6c 100644 --- a/app/controllers/api/v1/reports_controller.rb +++ b/app/controllers/api/v1/reports_controller.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true class Api::V1::ReportsController < Api::BaseController - before_action -> { doorkeeper_authorize! :read, :'read:reports' }, except: [:create] before_action -> { doorkeeper_authorize! :write, :'write:reports' }, only: [:create] before_action :require_user! diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index e9b48fa98..5e7fdffb0 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -84,7 +84,7 @@ module ApplicationHelper end def cdn_host - ENV['CDN_HOST'].presence + Rails.configuration.action_controller.asset_host end def cdn_host? @@ -92,10 +92,10 @@ module ApplicationHelper end def storage_host - ENV['S3_ALIAS_HOST'].presence || ENV['S3_CLOUDFRONT_HOST'].presence + "https://#{ENV['S3_ALIAS_HOST'].presence || ENV['S3_CLOUDFRONT_HOST']}" end def storage_host? - storage_host.present? + ENV['S3_ALIAS_HOST'].present? || ENV['S3_CLOUDFRONT_HOST'].present? end end diff --git a/app/javascript/core/admin.js b/app/javascript/core/admin.js index 0c26dc18d..3f6f187bc 100644 --- a/app/javascript/core/admin.js +++ b/app/javascript/core/admin.js @@ -2,18 +2,6 @@ import { delegate } from 'rails-ujs'; -function handleDeleteStatus(event) { - const [data] = event.detail; - const element = document.querySelector(`[data-id="${data.id}"]`); - if (element) { - element.parentNode.removeChild(element); - } -} - -[].forEach.call(document.querySelectorAll('.trash-button'), (content) => { - content.addEventListener('ajax:success', handleDeleteStatus); -}); - const batchCheckboxClassName = '.batch-checkbox input[type="checkbox"]'; delegate(document, '#batch_checkbox_all', 'change', ({ target }) => { @@ -24,6 +12,7 @@ delegate(document, '#batch_checkbox_all', 'change', ({ target }) => { delegate(document, batchCheckboxClassName, 'change', () => { const checkAllElement = document.querySelector('#batch_checkbox_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); @@ -43,8 +32,14 @@ delegate(document, '.media-spoiler-hide-button', 'click', () => { }); delegate(document, '#domain_block_severity', 'change', ({ target }) => { - const rejectMediaDiv = document.querySelector('.input.with_label.domain_block_reject_media'); + const rejectMediaDiv = document.querySelector('.input.with_label.domain_block_reject_media'); + const rejectReportsDiv = document.querySelector('.input.with_label.domain_block_reject_reports'); + if (rejectMediaDiv) { rejectMediaDiv.style.display = (target.value === 'suspend') ? 'none' : 'block'; } + + if (rejectReportsDiv) { + rejectReportsDiv.style.display = (target.value === 'suspend') ? 'none' : 'block'; + } }); diff --git a/app/javascript/flavours/glitch/components/display_name.js b/app/javascript/flavours/glitch/components/display_name.js index 4c65aaefa..d6ac4907d 100644 --- a/app/javascript/flavours/glitch/components/display_name.js +++ b/app/javascript/flavours/glitch/components/display_name.js @@ -15,7 +15,7 @@ export default function DisplayName ({ // The result. return account ? ( - + {inline ? ' ' : null} @{account.get('acct')} diff --git a/app/javascript/flavours/glitch/features/account_timeline/components/moved_note.js b/app/javascript/flavours/glitch/features/account_timeline/components/moved_note.js index 1c0e081cc..280389bba 100644 --- a/app/javascript/flavours/glitch/features/account_timeline/components/moved_note.js +++ b/app/javascript/flavours/glitch/features/account_timeline/components/moved_note.js @@ -34,7 +34,7 @@ export default class MovedNote extends ImmutablePureComponent {
rel="me"
. U cuntenutu di u testu di u ligame ùn hè micca impurtante. Eccu un''esempiu:'
+ verification: Verificazione
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index 5408c2472..67bda70f1 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -1,13 +1,13 @@
---
cs:
about:
- about_hashtag_html: Toto jsou veřejné tooty označené hashtagem #%{hashtag}. Pokud máte účet kdekoliv na fediverse, můžete s nimi interagovat.
+ about_hashtag_html: Tohle jsou veřejné tooty označené hashtagem #%{hashtag}. Pokud máte účet kdekoliv na fediverse, můžete s nimi interagovat.
about_mastodon_html: Mastodon je sociální síť založená na otevřených webových protokolech a svobodném, otevřeném softwaru. Je decentrovalizovaná jako e-mail.
about_this: O této instanci
- administered_by: 'Server spravuje:'
+ administered_by: 'Instanci spravuje:'
api: API
apps: Mobilní aplikace
- closed_registrations: Registrace na této instanci jsou momentálně uzavřené. Můžete si však najít jinou instanci, vytvořit si na ní účet a získat z ní přístup do naprosto stejné sítě.
+ closed_registrations: Registrace na této instanci jsou momentálně uzavřené. Ale pozor! Můžete si najít jinou instanci, vytvořit si na ní účet a získat z ní přístup do naprosto stejné sítě.
contact: Kontakt
contact_missing: Nenastaveno
contact_unavailable: Neuvedeno
@@ -46,8 +46,9 @@ cs:
followers:
one: Sledovatel
other: Sledovatelé
- following: Sleduje
+ following: Sledovaní
joined: Připojil/a se v %{date}
+ link_verified_on: Vlastnictví tohoto odkazu bylo zkontrolováno %{date}
media: Média
moved_html: 'Účet %{name} byl přesunut na %{new_profile_link}:'
network_hidden: Tato informace není k dispozici
@@ -114,12 +115,13 @@ cs:
memorialize: Změnit na "in memoriam"
moderation:
all: Vše
- silenced: Utišen
- suspended: Suspendován
+ silenced: Utišen/a
+ suspended: Suspendován/a
title: Moderace
moderation_notes: Moderační poznámky
most_recent_activity: Nejnovější aktivita
most_recent_ip: Nejnovější IP
+ no_limits_imposed: Nejsou nastavena žádná omezení
not_subscribed: Neodebírá
order:
alphabetic: Abecedně
@@ -155,8 +157,10 @@ cs:
report: nahlášení
targeted_reports: Nahlášení vytvořena o tomto účtu
silence: Utišit
+ silenced: Utišen/a
statuses: Příspěvky
subscribe: Odebírat
+ suspended: Suspendován/a
title: Účty
unconfirmed_email: Nepotvrzený e-mail
undo_silenced: Zrušit utišení
@@ -300,8 +304,13 @@ cs:
title: Pozvánky
relays:
add_new: Přidat nový most
+ delete: Smazat
description_html: "Federovací most je přechodný server, který vyměňuje velká množství veřejných tootů mezi servery, které z něj odebírají a poblikují na něj. Může pomoci malým a středně velkým serverům objevovat obsah z fediverse, což by jinak vyžadovalo, aby místní uživatelé manuálně sledovali jiné lidi na vzdálených serverech."
+ disable: Zakázat
+ disabled: Zakázáno
+ enable: Povolit
enable_hint: Je-li tohle povoleno, začne váš server odebírat všechny veřejné tooty z tohoto mostu a odesílat na něj své vlastní veřejné tooty.
+ enabled: Povoleno
inbox_url: URL mostu
pending: Čekám na souhlas mostu
save_and_enable: Uložit a povolit
@@ -336,9 +345,7 @@ cs:
reported_by: Nahlášeno uživatelem
resolved: Vyřešeno
resolved_msg: Nahlášení úspěšně vyřešeno!
- silence_account: Utišit účet
status: Stav
- suspend_account: Suspendovat účet
title: Nahlášení
unassign: Odebrat
unresolved: Nevyřešeno
@@ -452,7 +459,7 @@ cs:
warning: Buďte s těmito daty velmi opatrní. Nikdy je s nikým nesdílejte!
your_token: Váš přístupový token
auth:
- agreement_html: Registrací souhlasíte s následováním pravidel této instance a našich podmínek používání.
+ agreement_html: Kliknutím na tlačítko „Registrovat“ souhlasíte s následováním pravidel této instance a našich podmínek používání.
change_password: Heslo
confirm_email: Potvrdit e-mail
delete_account: Odstranit účet
@@ -759,7 +766,7 @@ cs:
over_character_limit: limit %{max} znaků byl překročen
pin_errors:
limit: Už jste si připnul/a maximální počet tootů
- ownership: Nelže připnout toot někoho jiného
+ ownership: Nelze připnout toot někoho jiného
private: Nelze připnout neveřejné tooty
reblog: Nelze připnout boostnutí
show_more: Zobrazit více
@@ -912,3 +919,6 @@ cs:
otp_lost_help_html: Pokud jste ztratil/a přístup k oběma, můžete se spojit %{email}
seamless_external_login: Jste přihlášen/a přes externí službu, nastavení hesla a e-mailu proto nejsou dostupná.
signed_in_as: 'Přihlášen/a jako:'
+ verification:
+ explanation_html: 'Můžete se ověřit jako vlastník odkazů v metadatech profilu. Pro tento účel musí stránka v odkazu obsahovat odkaz zpět na váš profil na Mastodonu. Odkaz zpět musí mít atribut rel="me"
. Na textu odkazu nezáleží. Zde je příklad:'
+ verification: Ověření
diff --git a/config/locales/cy.yml b/config/locales/cy.yml
index 8b923ec87..8b16949a5 100644
--- a/config/locales/cy.yml
+++ b/config/locales/cy.yml
@@ -7,7 +7,7 @@ cy:
administered_by: 'Gweinyddir gan:'
api: API
apps: Apiau symudol
- closed_registrations: Mae Mastodon yn rwydwaith cymdeithasol sy'n seiliedig ar brotocolau gwe a meddalwedd cod agored rhad ac am ddim. Mae'n ddatganoledig fel e-bost.
+ closed_registrations: ''
contact: Cyswllt
contact_missing: Heb ei osod
contact_unavailable: Ddim yn berthnasol
@@ -155,7 +155,7 @@ cy:
report: adrodd
targeted_reports: Adroddiadau am y cyfri hwn
silence: Tawelu
- statuses: ''
+ statuses: Statysau
subscribe: Tanysgrifio
title: Cyfrifon
unconfirmed_email: E-bost heb ei gadarnhau
@@ -192,7 +192,7 @@ cy:
unsilence_account: Terfynodd %{name} dawelu cyfrif %{target}
unsuspend_account: Terfynodd %{name} yr ataliad ar gyfrif %{target}
update_custom_emoji: Diweddarodd %{name} emoji %{target}
- update_status: Diweddarodd %{name} statws gan %{taget}
+ update_status: Diweddarodd %{name} statws gan %{target}
deleted_status: "(statws wedi ei ddileu)"
title: Log archwilio
custom_emojis:
@@ -287,7 +287,7 @@ cy:
domain_name: Parth
reset: Ailosod
search: Chwilio
- title: INSTANCES hysbys
+ title: Achosion hysbys
invites:
filter:
all: Pob
@@ -311,6 +311,8 @@ cy:
report: adroddiad
action_taken_by: Gwnathpwyd hyn gan
are_you_sure: Ydych chi'n sicr?
+ assign_to_self: Aseinio i mi
+ assigned: Cymedrolwr wedi'i aseinio
comment:
none: Dim
created_at: Adroddwyd
@@ -327,7 +329,6 @@ cy:
reported_by: Adroddwyd gan
resolved: Wedi ei ddatrys
resolved_msg: Llwyddwyd i ddatrys yr adroddiad!
- silence_account: Tawelwch y cyfrif
status: Statws
title: Adroddiadau
unassign: Dadneilltuo
@@ -336,10 +337,19 @@ cy:
settings:
activity_api_enabled:
title: Cyhoeddwch ystatedgau agregau am weithgaredd defnyddwyr
+ bootstrap_timeline_accounts:
+ title: Dilyn diofyn i ddefnyddwyr newydd
contact_information:
email: E-bost busnes
+ username: Enw defnyddiwr cyswllt
+ custom_css:
+ desc_html: Addaswch wedd gyda CSS wedi lwytho ar bob tudalen
hero:
+ desc_html: Yn cael ei arddangos ar y dudadlen flaen. Awgrymir 600x100px oleia. Pan nad yw wedi ei osod, mae'n ymddangos fel mân-lun yr achos
title: Delwedd arwr
+ peers_api_enabled:
+ desc_html: Enwau parth y mae'r achos hwn wedi dod ar ei draws yn y ffedysawd
+ title: Cyhoeddi rhestr o achosion dargynfyddiedig
registrations:
deletion:
desc_html: Caniatewch i unrhywun i ddileu eu cyfrif
@@ -351,6 +361,15 @@ cy:
title: Agorwch cofrestru
show_staff_badge:
title: Dangos bathodyn staff
+ site_description:
+ title: Disgrifiad achos
+ site_description_extended:
+ desc_html: Lle da ar gyfer eich côd ymddygiad, rheolau, canllawiau a phethau eraill sy'n gwneud eich achos yn whanol. Mae modd i chi ddefnyddio tagiau HTML
+ site_short_description:
+ title: Disgrifiad byr o'r achos
+ site_title: Enw'r achos
+ thumbnail:
+ title: Mân-lun yr achos
timeline_preview:
title: Rhagolwg o'r ffrwd
title: Gosodiadau'r wefan
@@ -493,6 +512,8 @@ cy:
one: Mae rhywbeth o'i le o hyd! Edrychwch ar y gwall isod os gwelwch yn dda
other: Mae rhywbeth o'i le o hyd! Edrychwch ar y %{count} gwall isod os gwelwch yn dda
imports:
+ preface: Mae modd mewnforio data yr ydych wedi allforio o achos arall, megis rhestr o bobl yr ydych yn ei ddilyn neu yn blocio.
+ success: Uwchlwyddwyd eich data yn llwyddiannus ac fe fydd yn cael ei brosesu mewn da bryd
types:
blocking: Rhestr blocio
following: Rhestr dilyn
@@ -504,9 +525,11 @@ cy:
expires_in:
'86400': 1 dydd
max_uses_prompt: Dim terfyn
+ prompt: Cynhyrchwch a rhannwch ddolenni gyda eraill i ganiatau mynediad i'r achos hwn
table:
uses: Defnyddiau
migrations:
+ currently_redirecting: ''
proceed: Cadw
moderation:
title: Cymedroli
diff --git a/config/locales/da.yml b/config/locales/da.yml
index 7cda5cbca..0cd3e78f7 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -336,9 +336,7 @@ da:
reported_by: Anmeldt af
resolved: Løst
resolved_msg: Anmeldelse er sat til at være løst!
- silence_account: Dæmp konto
status: Status
- suspend_account: Udeluk konto
title: Anmeldelser
unassign: Utildel
unresolved: Uløst
diff --git a/config/locales/de.yml b/config/locales/de.yml
index efd350e98..67166f31c 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -36,8 +36,8 @@ de:
status_count_before: mit
terms: Nutzungsbedingungen
user_count_after:
- one: Benutzer
- other: Benutzer
+ one: Benutzer:in
+ other: Benutzer:innen
user_count_before: Zuhause für
what_is_mastodon: Was ist Mastodon?
accounts:
@@ -48,6 +48,7 @@ de:
other: Follower
following: Folgt
joined: Beigetreten am %{date}
+ link_verified_on: Besitz des Links wurde überprüft am %{date}
media: Medien
moved_html: "%{name} ist auf %{new_profile_link} umgezogen:"
network_hidden: Diese Informationen sind nicht verfügbar
@@ -135,7 +136,7 @@ de:
redownload: Avatar neu laden
remove_avatar: Profilbild entfernen
resend_confirmation:
- already_confirmed: Dieser Benutzer wurde bereits bestätigt
+ already_confirmed: Diese:r Benutzer:in wurde bereits bestätigt
send: Bestätigungsmail erneut senden
success: Bestätigungs-E-Mail erfolgreich gesendet!
reset: Zurücksetzen
@@ -144,7 +145,7 @@ de:
role: Berechtigungen
roles:
admin: Administrator
- moderator: Moderator
+ moderator: Moderator:in
staff: Mitarbeiter
user: Nutzer
salmon_url: Salmon-URL
@@ -155,8 +156,10 @@ de:
report: Meldung
targeted_reports: Meldungen über dieses Konto
silence: Stummschalten
+ silenced: Stummgeschaltet
statuses: Beiträge
subscribe: Abonnieren
+ suspended: Gesperrt
title: Konten
unconfirmed_email: Unbestätigte E-Mail-Adresse
undo_silenced: Stummschaltung zurücknehmen
@@ -172,20 +175,20 @@ de:
create_custom_emoji: "%{name} hat neues Emoji %{target} hochgeladen"
create_domain_block: "%{name} hat die Domain %{target} blockiert"
create_email_domain_block: "%{name} hat die E-Mail-Domain %{target} geblacklistet"
- demote_user: "%{name} stufte Benutzer %{target} herunter"
+ demote_user: "%{name} stufte Benutzer:in %{target} herunter"
destroy_domain_block: "%{name} hat die Domain %{target} entblockt"
destroy_email_domain_block: "%{name} hat die E-Mail-Domain %{target} gewhitelistet"
destroy_status: "%{name} hat Status von %{target} entfernt"
- disable_2fa_user: "%{name} hat Zwei-Faktor-Anforderung für Benutzer %{target} deaktiviert"
+ disable_2fa_user: "%{name} hat Zwei-Faktor-Anforderung für Benutzer:in %{target} deaktiviert"
disable_custom_emoji: "%{name} hat das %{target} Emoji deaktiviert"
- disable_user: "%{name} hat den Login für Benutzer %{target} deaktiviert"
+ disable_user: "%{name} hat den Login für Benutzer:in %{target} deaktiviert"
enable_custom_emoji: "%{name} hat das %{target} Emoji aktiviert"
- enable_user: "%{name} hat die Anmeldung für den Benutzer %{target} aktiviert"
+ enable_user: "%{name} hat die Anmeldung für di:en Benutzer:in %{target} aktiviert"
memorialize_account: "%{name} hat %{target}s Profil in eine Gedenkseite umgewandelt"
promote_user: "%{name} hat %{target} befördert"
remove_avatar_user: "%{name} hat das Profilbild von %{target} entfernt"
reopen_report: "%{name} hat die Meldung %{target} wieder geöffnet"
- reset_password_user: "%{name} hat das Passwort für den Benutzer %{target} zurückgesetzt"
+ reset_password_user: "%{name} hat das Passwort für di:en Benutzer:in %{target} zurückgesetzt"
resolve_report: "%{name} hat die Meldung %{target} bearbeitet"
silence_account: "%{name} hat %{target}s Account stummgeschaltet"
suspend_account: "%{name} hat %{target}s Account gesperrt"
@@ -237,11 +240,11 @@ de:
software: Software
space: Speicherverbrauch
title: Übersicht
- total_users: Benutzer Insgesamt
+ total_users: Benutzer:innen insgesamt
trends: Trends
week_interactions: Interaktionen diese Woche
week_users_active: Aktiv diese Woche
- week_users_new: Benutzer diese Woche
+ week_users_new: Benutzer:innen diese Woche
domain_blocks:
add_new: Neu hinzufügen
created_msg: Die Domain-Blockade wird nun durchgeführt
@@ -300,8 +303,13 @@ de:
title: Einladungen
relays:
add_new: Neues Relay hinzufügen
+ delete: Löschen
description_html: Ein Föderierungsrelay ist ein vermittelnder Server, der eine große Anzahl öffentlicher Beiträge zwischen Servern austauscht, die es abonnieren und zu ihm veröffentlichen. Es kann kleinen und mittleren Servern dabei helfen, Inhalte des Fediverse zu entdecken, was andernfalls das manuelle Folgen anderer Leute auf entfernten Servern durch lokale Nutzer erfordern würde.
+ 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.
+ enabled: Eingeschaltet
inbox_url: Relay-URL
pending: Warte auf Zustimmung des Relays
save_and_enable: Speichern und aktivieren
@@ -336,9 +344,7 @@ de:
reported_by: Gemeldet von
resolved: Gelöst
resolved_msg: Meldung erfolgreich gelöst!
- silence_account: Konto stummschalten
status: Status
- suspend_account: Konto sperren
title: Meldungen
unassign: Zuweisung entfernen
unresolved: Ungelöst
@@ -452,7 +458,7 @@ de:
warning: Sei mit diesen Daten sehr vorsichtig. Teile sie mit niemandem!
your_token: Dein Zugangs-Token
auth:
- agreement_html: Indem du dich registrierst, erklärst du dich mit den Regeln, die auf dieser Instanz gelten und der Datenschutzerklärung einverstanden.
+ agreement_html: Indem du dich registrierst, erklärst du dich mit den untenstehenden Regeln dieser Instanz und der Datenschutzerklärung einverstanden.
change_password: Passwort
confirm_email: E-Mail bestätigen
delete_account: Konto löschen
@@ -783,9 +789,9 @@ de:
Du kannst ein Archiv deines Inhalts anfordern und herunterladen, inkludierend deiner Beiträge, Medienanhänge, Profilbilder und Headerbilder.
@@ -914,3 +920,5 @@ de: otp_lost_help_html: Wenn Du beides nicht mehr weißt, melde Dich bei uns unter der E-Mailadresse %{email} seamless_external_login: Du bist angemeldet über einen Drittanbieter-Dienst, weswegen Passwort- und E-Maileinstellungen nicht verfügbar sind. signed_in_as: 'Angemeldet als:' + verification: + explanation_html: 'Du kannst bestätigen, dass die Links in deinen Profil-Metadaten dir gehören. Dafür muss die verlinkte Website einen Link zurück auf dein Mastodon-Profil enthalten. Dieser Link muss einrel="me"
-Attribut enthalten. Der Linktext is dabei egal. Hier ist ein Beispiel:'
diff --git a/config/locales/el.yml b/config/locales/el.yml
index fc14d62cd..fbd8a6461 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -48,6 +48,7 @@ el:
other: Ακόλουθοι
following: Ακολουθεί
joined: Εγγράφηκε στις %{date}
+ link_verified_on: Η κυριότητα αυτού του συνδέσμου ελέγχθηκε στις %{date}
media: Πολυμέσα
moved_html: 'Ο/Η %{name} μετακόμισε στο %{new_profile_link}:'
network_hidden: Αυτή η πληροφορία δεν είναι διαθέσιμη
@@ -120,6 +121,7 @@ el:
moderation_notes: Σημειώσεις μεσολάβησης
most_recent_activity: Πιο πρόσφατη δραστηριότητα
most_recent_ip: Πιο πρόσφατη IP
+ no_limits_imposed: Χωρίς όρια
not_subscribed: Άνευ συνδρομής
order:
alphabetic: Αλφαβητικά
@@ -155,8 +157,10 @@ el:
report: καταγγελία
targeted_reports: Αναφορές για αυτόν το λογαριασμό
silence: Αποσιώπησε
+ silenced: Αποσιωπημένοι
statuses: Καταστάσεις
subscribe: Εγγραφή
+ suspended: Σε αναστολή
title: Λογαριασμοί
unconfirmed_email: Ανεπιβεβαίωτο email
undo_silenced: Αναίρεση αποσιώπησης
@@ -300,8 +304,13 @@ el:
title: Προσκλήσεις
relays:
add_new: Πρόσθεσε νέο ανταποκριτή (relay)
+ delete: Διαγραφή
description_html: Ο ομοσπονδιακός ανταποκριτής είναι ένας ενδιάμεσος εξυπηρετητής (server) που ανταλλάσσει μεγάλους όγκους δημόσιων τουτ μεταξύ εξυπηρετητών που εγγράφονται και δημοσιεύουν σε αυτόν. Βοηθάει μικρούς και μεσαίους εξυπηρετητές να ανακαλύψουν περιεχόμενο στο fediverse, που υπό άλλες συνθήκες θα χρειαζόταν κάποιους τοπικούς χρήστες που να ακολουθούν χρήστες σε απομακρυσμένους εξυπηρετητές.
+ disable: Απενεργοποίηση
+ disabled: Απενεργοποιημένο
+ enable: Ενεργοποίηση
enable_hint: Μόλις ενεργοποιηθεί, ο εξυπηρετητής (server) σου θα εγγραφεί σε όλα τα δημόσια τουτ αυτού του ανταποκριτή (relay) και θα αρχίσει να προωθεί τα δικά του δημόσια τουτ σε αυτόν.
+ enabled: Ενεργοποιημένο
inbox_url: URL ανταποκριτή
pending: Περιμένοντας την έγκριση του ανταποκριτή
save_and_enable: Αποθήκευση και ενεργοποίηση
@@ -336,9 +345,7 @@ el:
reported_by: Αναφέρθηκε από
resolved: Επιλύθηκε
resolved_msg: Η καταγγελία επιλύθηκε επιτυχώς!
- silence_account: Αποσιώπηση λογαριασμού
status: Κατάσταση
- suspend_account: Ανέστειλε λογαριασμό
title: Αναφορές
unassign: Αποσύνδεση
unresolved: Άλυτη
@@ -912,3 +919,6 @@ el:
otp_lost_help_html: Αν χάσεις και τα δύο, μπορείς να επικοινωνήσεις με τον/την %{email}
seamless_external_login: Επειδή έχεις συνδεθεί μέσω τρίτης υπηρεσίας, οι ρυθμίσεις συνθηματικού και email δεν είναι διαθέσιμες.
signed_in_as: 'Έχεις συνδεθεί ως:'
+ verification:
+ explanation_html: 'Μπορείς να πιστοποιήσεις τον εαυτό σου ως ιδιοκτήτη των συνδέσμων που εμφανίζεις στα μεταδεδομένα του προφίλ σου. Για να συμβεί αυτό, ο συνδεδεμένος ιστότοπος πρέπει να περιέχει ένα σύνδεσμο που να επιστρέφει προς το προφίλ σου στο Mastodon. Ο σύνδεσμος επιστροφής πρέπει περιέχει την ιδιότητα (attribute) rel="me"
. Το κείμενο κειμένου δεν έχει σημασία. Για παράδειγμα:'
+ verification: Πιστοποίηση
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 6172af1b8..2c679061e 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -128,7 +128,7 @@ en:
most_recent: Most recent
title: Order
outbox_url: Outbox URL
- perform_full_suspension: Perform full suspension
+ perform_full_suspension: Suspend
profile_url: Profile URL
promote: Promote
protocol: Protocol
@@ -177,6 +177,7 @@ en:
create_domain_block: "%{name} blocked domain %{target}"
create_email_domain_block: "%{name} blacklisted e-mail domain %{target}"
demote_user: "%{name} demoted user %{target}"
+ destroy_custom_emoji: "%{name} destroyed emoji %{target}"
destroy_domain_block: "%{name} unblocked domain %{target}"
destroy_email_domain_block: "%{name} whitelisted e-mail domain %{target}"
destroy_status: "%{name} removed status by %{target}"
@@ -262,6 +263,8 @@ en:
title: New domain block
reject_media: Reject media files
reject_media_hint: Removes locally stored media files and refuses to download any in the future. Irrelevant for suspensions
+ reject_reports: Reject reports
+ reject_reports_hint: Ignore all reports coming from this domain. Irrelevant for suspensions
severities:
noop: None
silence: Silence
@@ -345,9 +348,7 @@ en:
reported_by: Reported by
resolved: Resolved
resolved_msg: Report successfully resolved!
- silence_account: Silence account
status: Status
- suspend_account: Suspend account
title: Reports
unassign: Unassign
unresolved: Unresolved
@@ -369,7 +370,7 @@ en:
desc_html: Displayed on the frontpage. At least 600x100px recommended. When not set, falls back to instance thumbnail
title: Hero image
mascot:
- desc_html: Displayed on multiple pages. At least 293×205px recommended. When not set, falls back to instance thumbnail
+ desc_html: Displayed on multiple pages. At least 293×205px recommended. When not set, falls back to default mascot
title: Mascot image
peers_api_enabled:
desc_html: Domain names this instance has encountered in the fediverse
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index 454eeae9d..72628a944 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -325,9 +325,7 @@ eo:
reported_by: Signalita de
resolved: Solvita
resolved_msg: Signalo sukcese solvita!
- silence_account: Kaŝi konton
status: Mesaĝoj
- suspend_account: Haltigi konton
title: Signaloj
unassign: Malasigni
unresolved: Nesolvita
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 3b9e93947..da8febd19 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -336,9 +336,7 @@ es:
reported_by: Reportado por
resolved: Resuelto
resolved_msg: "¡La denuncia se ha resuelto correctamente!"
- silence_account: Silenciar cuenta
status: Estado
- suspend_account: Suspender cuenta
title: Reportes
unassign: Desasignar
unresolved: No resuelto
diff --git a/config/locales/eu.yml b/config/locales/eu.yml
index 1a6558d9f..f0ddb6adb 100644
--- a/config/locales/eu.yml
+++ b/config/locales/eu.yml
@@ -336,9 +336,7 @@ eu:
reported_by: Salatzailea
resolved: Konponduta
resolved_msg: Salaketa ongi konpondu da!
- silence_account: Isilarazi kontua
status: Mezua
- suspend_account: Kanporatu kontua
title: Salaketak
unassign: Kendu esleipena
unresolved: Konpondu gabea
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index d620dcf4b..a9cf5868f 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -336,9 +336,7 @@ fa:
reported_by: گزارش از طرف
resolved: حلشده
resolved_msg: گزارش با موفقیت حل شد!
- silence_account: بیصدا کردن حساب
status: نوشته
- suspend_account: معلقکردن حساب
title: گزارشها
unassign: پسگرفتن مسئولیت
unresolved: حلنشده
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index c2552b539..e62931129 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -282,9 +282,7 @@ fi:
reported_by: Raportoija
resolved: Ratkaistut
resolved_msg: Raportti onnistuneesti ratkaistu!
- silence_account: Hiljennä tili
status: Tila
- suspend_account: Siirrä tili jäähylle
title: Raportit
unresolved: Ratkaisemattomat
updated_at: Päivitetty
@@ -609,7 +607,7 @@ fi:
uc_browser: UCBrowser
weibo: Weibo
current_session: Nykyinen istunto
- description: "%{selain}, %{platform}"
+ description: "%{browser}, %{platform}"
explanation: Nämä verkkoselaimet ovat tällä hetkellä kirjautuneet Mastodon-tilillesi.
ip: IP
platforms:
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index ba3c90195..f0eaf8d3f 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -48,6 +48,7 @@ fr:
other: Abonné⋅e⋅s
following: Abonnements
joined: Inscrit·e en %{date}
+ link_verified_on: La propriété de ce lien a été vérifiée le %{date}
media: Médias
moved_html: "%{name} a changé de compte pour %{new_profile_link} :"
network_hidden: Cette information n’est pas disponible
@@ -120,6 +121,7 @@ fr:
moderation_notes: Notes de modération
most_recent_activity: Dernière activité
most_recent_ip: Adresse IP la plus récente
+ no_limits_imposed: Aucune limite imposée
not_subscribed: Non abonné
order:
alphabetic: Alphabétique
@@ -155,8 +157,10 @@ fr:
report: signalement
targeted_reports: Signalements créés visant ce compte
silence: Masquer
+ silenced: Silencié
statuses: Statuts
subscribe: S’abonner
+ suspended: Suspendu
title: Comptes
unconfirmed_email: Courriel non-confirmé
undo_silenced: Démasquer
@@ -300,8 +304,13 @@ fr:
title: Invitations
relays:
add_new: Ajouter un nouveau relais
+ delete: Effacer
description_html: Un relai de fédération est un serveur intermédiaire qui échange de grandes quantités de pouets entre les serveurs qui publient dessus et ceux qui y sont abonnés. Il peut aider les petites et moyennes instances à découvrir du contenu sur le fediverse, ce qui normalement nécessiterait que les membres locaux suivent des gens inscrits sur des serveurs distants.
+ disable: Désactiver
+ disabled: Désactivé
+ enable: Activé
enable_hint: Une fois activé, votre serveur souscrira à tous les pouets publics présents sur ce relais et y enverra ses propres pouets publics.
+ enabled: Activé
inbox_url: URL de relais
pending: En attente de l'approbation du relai
save_and_enable: Sauvegarder et activer
@@ -336,9 +345,7 @@ fr:
reported_by: Signalé par
resolved: Résolus
resolved_msg: Signalement résolu avec succès !
- silence_account: Masquer le compte
status: Statut
- suspend_account: Suspendre le compte
title: Signalements
unassign: Dés-assigner
unresolved: Non résolus
@@ -452,7 +459,7 @@ fr:
warning: Soyez prudent⋅e avec ces données. Ne les partagez pas !
your_token: Votre jeton d’accès
auth:
- agreement_html: En vous inscrivant, vous souscrivez aux règles de l’instance et à nos conditions d’utilisation.
+ agreement_html: En cliquant sur "S'inscrire" ci-dessous, vous souscrivez aux règles de l’instance et à nos conditions d’utilisation.
change_password: Mot de passe
confirm_email: Confirmer mon adresse mail
delete_account: Supprimer le compte
@@ -619,7 +626,7 @@ fr:
notification_mailer:
digest:
action: Voir toutes les notifications
- body: 'Voici ce que vous avez raté sur ${instance} depuis votre dernière visite le %{since} :'
+ body: Voici un bref résumé des messages que vous auriez raté depuis votre dernière visite le %{since}
mention: "%{name} vous a mentionné⋅e dans :"
new_followers_summary:
one: Vous avez un⋅e nouvel⋅le abonné⋅e ! Youpi !
@@ -913,3 +920,6 @@ fr:
otp_lost_help_html: Si vous perdez accès aux deux, vous pouvez contacter %{email}
seamless_external_login: Vous êtes connecté via un service externe, donc les paramètres concernant le mot de passe et le courriel ne sont pas disponibles.
signed_in_as: 'Connecté·e en tant que :'
+ verification:
+ explanation_html: 'Vous pouvez vérifier vous-même que vous êtes le propriétaire des liens dans les métadonnées de votre profil. Pour cela, le site Web lié doit contenir un lien vers votre profil Mastodon. Le lien de retour doitavoir un attribut rel="me"
. Le contenu textuel du lien n''a pas d''importance. En voici un exemple :'
+ verification: Vérification
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index ad7dbf502..44eda815b 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -48,6 +48,7 @@ gl:
other: Seguidoras
following: Seguindo
joined: Uneuse %{date}
+ link_verified_on: A propiedade de esta ligazón foi comprobada en %{date}
media: Medios
moved_html: "%{name} mudouse a %{new_profile_link}:"
network_hidden: A información non está dispoñible
@@ -120,6 +121,7 @@ gl:
moderation_notes: Notas de moderación
most_recent_activity: Actividade máis recente
most_recent_ip: IP máis recente
+ no_limits_imposed: Sen límites impostos
not_subscribed: Non suscrita
order:
alphabetic: Alfabética
@@ -155,8 +157,10 @@ gl:
report: informar
targeted_reports: Informes feitos sobre esta conta
silence: Acalar
+ silenced: Acalada
statuses: Estados
subscribe: Subscribir
+ suspended: Suspendida
title: Contas
unconfirmed_email: Correo-e non confirmado
undo_silenced: Desfacer acalar
@@ -300,8 +304,13 @@ gl:
title: Convida
relays:
add_new: Engadir un novo repetidor
+ delete: Eliminar
description_html: Un repetidor da federación é un servidor intermedio que intercambia grandes volumes de toots públicos entre servidores que se suscriban e publiquen nel. Pode axudar a servidores pequenos e medios a descubrir contido no fediverso, o que de outro xeito precisaría que as usuarias locais seguisen a outra xente en servidores remotos.
+ disable: Desactivar
+ disabled: Desactivada
+ enable: Activar
enable_hint: Unha vez activado, o seu servidor suscribirase a todos os toots públicos de este servidor, e tamén comezará a eviar a el os toots públicos do servidor.
+ enabled: Activada
inbox_url: URL do repetidor
pending: Agardando polo permiso do repetidor
save_and_enable: Gardar e activar
@@ -336,9 +345,7 @@ gl:
reported_by: Reportada por
resolved: Resolto
resolved_msg: Resolveuse con éxito o informe!
- silence_account: Acalar conta
status: Estado
- suspend_account: Suspender conta
title: Informes
unassign: Non asignar
unresolved: Non resolto
@@ -452,7 +459,7 @@ gl:
warning: Teña moito tino con estos datos. Nunca os comparta con ninguén!
your_token: O seu testemuño de acceso
auth:
- agreement_html: Rexistrándose acorda seguir as normas da instancia e os termos do servizo.
+ agreement_html: Ao pulsar "Rexistrar" vostede acorda seguir as normas da instancia e os termos do servizo.
change_password: Contrasinal
confirm_email: Confirmar correo-e
delete_account: Eliminar conta
@@ -912,3 +919,6 @@ gl:
otp_lost_help_html: Si perde o acceso a ambos, pode contactar con %{email}
seamless_external_login: Está conectado a través de un servizo externo, polo que os axustes de contrasinal e correo-e non están dispoñibles.
signed_in_as: 'Rexistrada como:'
+ verification:
+ explanation_html: 'Pode validarse a vostede mesma como a dona das ligazóns nos metadatos do seu perfil. Para esto, o sitio web ligado debe conter unha ligazón de retorno ao perfil de Mastodon. Esta ligazón de retorno ten que ter un atributo rel="me"
. O texto da ligazón non importa. Aquí ten un exemplo:'
+ verification: Validación
diff --git a/config/locales/he.yml b/config/locales/he.yml
index 3d24f22d2..09d57da3b 100644
--- a/config/locales/he.yml
+++ b/config/locales/he.yml
@@ -189,9 +189,7 @@ he:
reported_account: חשבון מדווח
reported_by: דווח על ידי
resolved: פתור
- silence_account: השתקת חשבון
status: הודעה
- suspend_account: השעיית חשבון
title: דיווחים
unresolved: לא פתור
settings:
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index 0c4046785..92d11f0d8 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -249,9 +249,7 @@ hu:
reported_account: Bejelentett fiók
reported_by: 'Jelentette:'
resolved: Megoldott
- silence_account: Felhasználó némítása
status: Állapot
- suspend_account: Felhasználó felfüggesztése
title: Jelentések
unresolved: Megoldatlan
settings:
diff --git a/config/locales/id.yml b/config/locales/id.yml
index b186b7652..3da3583f6 100644
--- a/config/locales/id.yml
+++ b/config/locales/id.yml
@@ -114,9 +114,7 @@ id:
reported_account: Akun yang dilaporkan
reported_by: Dilaporkan oleh
resolved: Terseleseikan
- silence_account: Akun yang didiamkan
status: Status
- suspend_account: Akun yang disuspen
title: Laporan
unresolved: Belum Terseleseikan
settings:
diff --git a/config/locales/io.yml b/config/locales/io.yml
index be8a87acd..b739df3af 100644
--- a/config/locales/io.yml
+++ b/config/locales/io.yml
@@ -107,9 +107,7 @@ io:
reported_account: Reported account
reported_by: Reported by
resolved: Resolved
- silence_account: Silence account
status: Status
- suspend_account: Suspend account
title: Reports
unresolved: Unresolved
settings:
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 5780f1e0c..6a831ab2c 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -324,9 +324,7 @@ it:
report: 'Rapporto #%{id}'
reported_by: Inviato da
resolved: Risolto
- silence_account: Silenzia account
status: Stato
- suspend_account: Sospendi account
title: Rapporti
unassign: Non assegnare
unresolved: Non risolto
@@ -535,6 +533,7 @@ it:
generate: Genera
invited_by: 'Sei stato invitato da:'
max_uses:
+ one: un uso
other: "%{count} utilizzi"
max_uses_prompt: Nessun limite
prompt: Genera e condividi dei link ad altri per garantire l'accesso a questa istanza
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 630898104..60e1109c5 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -48,6 +48,7 @@ ja:
other: フォロワー
following: フォロー中
joined: "%{date} に登録"
+ link_verified_on: このリンクの所有権は %{date} に確認されました
media: メディア
moved_html: "%{name} さんは引っ越しました %{new_profile_link}:"
network_hidden: この情報は利用できません
@@ -176,6 +177,7 @@ ja:
create_domain_block: "%{name} さんがドメイン %{target} をブロックしました"
create_email_domain_block: "%{name} さんがドメイン %{target} をメールアドレス用ブラックリストに追加しました"
demote_user: "%{name} さんが %{target} さんを降格しました"
+ destroy_custom_emoji: "%{name} さんがカスタム絵文字 %{target} を削除しました"
destroy_domain_block: "%{name} さんがドメイン %{target} のブロックを外しました"
destroy_email_domain_block: "%{name} さんがドメイン %{target} をメールアドレス用ブラックリストから外しました"
destroy_status: "%{name} さんが %{target} さんの投稿を削除しました"
@@ -344,9 +346,7 @@ ja:
reported_by: 報告者
resolved: 解決済み
resolved_msg: レポートを解決済みにしました!
- silence_account: アカウントをサイレンス
status: ステータス
- suspend_account: アカウントを停止
title: レポート
unassign: 担当を外す
unresolved: 未解決
@@ -368,7 +368,7 @@ ja:
desc_html: フロントページに表示されます。サイズは600x100px以上推奨です。未設定の場合、インスタンスのサムネイルが使用されます
title: ヒーローイメージ
mascot:
- desc_html: 複数のページに表示されます。サイズは293x205px以上推奨です。未設定の場合、インスタンスのサムネイルが使用されます
+ desc_html: 複数のページに表示されます。サイズは293x205px以上推奨です。未設定の場合、標準のマスコットが使用されます
title: マスコットイメージ
peers_api_enabled:
desc_html: 連合内でこのインスタンスが遭遇したドメインの名前
@@ -463,7 +463,7 @@ ja:
warning: このデータは気をつけて取り扱ってください。他の人と共有しないでください!
your_token: アクセストークン
auth:
- agreement_html: 登録すると インスタンスのルール と プライバシーポリシー に従うことに同意したことになります。
+ agreement_html: 登録するをクリックすると インスタンスのルール と プライバシーポリシー に従うことに同意したことになります。
change_password: パスワード
confirm_email: メールアドレスの確認
delete_account: アカウントの削除
@@ -926,3 +926,6 @@ ja:
otp_lost_help_html: どちらも使用できない場合、%{email} に連絡を取ると解決できるかもしれません
seamless_external_login: あなたは外部サービスを介してログインしているため、パスワードとメールアドレスの設定は利用できません。
signed_in_as: '下記でログイン中:'
+ verification:
+ explanation_html: プロフィール内のリンクの所有者であることを認証することができます。そのためにはリンクされたウェブサイトにMastodonプロフィールへのリンクが含まれている必要があります。リンクにはrel="me"
属性を必ず与えなければなりません。リンクのテキストについては重要ではありません。以下は例です:
+ verification: 認証
diff --git a/config/locales/ka.yml b/config/locales/ka.yml
index f782db09b..5ac254df4 100644
--- a/config/locales/ka.yml
+++ b/config/locales/ka.yml
@@ -325,9 +325,7 @@ ka:
reported_by: დაარეპორტა
resolved: გადაწყვეტილი
resolved_msg: რეპორტი წარმატებით გადაწყდა!
- silence_account: ანგარიშის გაჩუმება
status: სტატუსი
- suspend_account: ანგარიშის შეჩერება
title: რეპორტები
unassign: გადაყენება
unresolved: გადაუწყვეტელი
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 6f281a302..9f9875a16 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -338,9 +338,7 @@ ko:
reported_by: 신고자
resolved: 해결됨
resolved_msg: 리포트가 성공적으로 해결되었습니다!
- silence_account: 계정을 침묵 처리
status: 상태
- suspend_account: 계정을 정지
title: 신고
unassign: 할당 해제
unresolved: 미해결
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 6a27602d0..0c1add32a 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -336,9 +336,7 @@ nl:
reported_by: Gerapporteerd door
resolved: Opgelost
resolved_msg: Rapportage succesvol opgelost!
- silence_account: Account negeren
status: Toot
- suspend_account: Account opschorten
title: Rapportages
unassign: Niet langer toewijzen
unresolved: Onopgelost
diff --git a/config/locales/no.yml b/config/locales/no.yml
index bbfa9b5da..61466fa20 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -249,9 +249,7 @@
reported_account: Rapportert konto
reported_by: Rapportert av
resolved: Løst
- silence_account: Målbind konto
status: Status
- suspend_account: Utvis konto
title: Rapporter
unresolved: Uløst
settings:
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index 373d2ed44..22d0775f9 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -144,7 +144,6 @@ oc:
role: Permissions
roles:
admin: Administrator
- bot: Robòt
moderator: Moderador
staff: Personnal
user: Uitlizaire
@@ -337,9 +336,7 @@ oc:
reported_by: Senhalat per
resolved: Resolgut
resolved_msg: Rapòrt corrèctament resolgut !
- silence_account: Metre lo compte en silenci
status: Estatut
- suspend_account: Suspendre lo compte
title: Senhalament
unassign: Levar
unresolved: Pas resolgut
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 703ec0c26..c75f3ebc8 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -354,9 +354,7 @@ pl:
reported_by: Zgłaszający
resolved: Rozwiązane
resolved_msg: Pomyślnie rozwiązano zgłoszenie.
- silence_account: Wycisz konto
status: Stan
- suspend_account: Zawieś konto
title: Zgłoszenia
unassign: Cofnij przypisanie
unresolved: Nierozwiązane
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 9eb0d7968..d6593baa1 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -334,9 +334,7 @@ pt-BR:
reported_by: Denunciada por
resolved: Resolvido
resolved_msg: Denúncia resolvida com sucesso!
- silence_account: Silenciar conta
status: Status
- suspend_account: Suspender conta
title: Denúncias
unassign: Desatribuir
unresolved: Não resolvido
diff --git a/config/locales/pt.yml b/config/locales/pt.yml
index 2bada74fe..5f532ea37 100644
--- a/config/locales/pt.yml
+++ b/config/locales/pt.yml
@@ -249,9 +249,7 @@ pt:
reported_account: Conta denunciada
reported_by: Denúnciada por
resolved: Resolvido
- silence_account: Conta silenciada
status: Estado
- suspend_account: Conta suspensa
title: Denúncias
unresolved: Por resolver
settings:
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index e8bbb94ca..2eef00170 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -345,9 +345,7 @@ ru:
reported_by: Отправитель жалобы
resolved: Разрешено
resolved_msg: Жалоба успешно обработана!
- silence_account: Заглушить аккаунт
status: Статус
- suspend_account: Блокировать аккаунт
title: Жалобы
unassign: Снять назначение
unresolved: Неразрешенные
diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml
index 783e545e1..dcdc1ffc1 100644
--- a/config/locales/simple_form.ar.yml
+++ b/config/locales/simple_form.ar.yml
@@ -9,6 +9,7 @@ ar:
context: واحد أو أكثر من السياقات التي يجب أن ينطبق عليها عامل التصفية
digest: تُرسَل إليك بعد مُضيّ مدة مِن خمول نشاطك و فقط إذا ما تلقيت رسائل شخصية مباشِرة أثناء فترة غيابك مِن الشبكة
display_name: %{count} حرف باق
+ email: سوف تتلقى رسالة إلكترونية للتأكيد
fields: يُمكنك عرض 4 عناصر على شكل جدول في ملفك الشخصي
header: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير %{size}. سيتم تصغيره إلى %{dimensions}px
inbox_url: نسخ العنوان الذي تريد استخدامه مِن صفحة الإستقبال للمُرحَّل
@@ -16,12 +17,17 @@ ar:
locale: لغة واجهة المستخدم و الرسائل الإلكترونية و الإشعارات
locked: يتطلب منك الموافقة يدويا على طلبات المتابعة
note: %{count} حرف باق
+ password: يُنصح باستخدام 8 أحرف على الأقل
phrase: سوف يتم العثور عليه مهما كان نوع النص أو حتى و إن كان داخل الويب فيه تحذير عن المحتوى
scopes: ما هي المجالات المسموح بها في التطبيق ؟ إن قمت باختيار أعلى المجالات فيمكنك الإستغناء عن الخَيار اليدوي.
setting_default_language: يمكن الكشف التلقائي للّغة اللتي استخدمتها في تحرير تبويقاتك ، غيرَ أنّ العملية ليست دائما دقيقة
+ setting_display_media_default: إخفاء الوسائط المُعيَّنة كحساسة
+ setting_display_media_hide_all: إخفاء كافة الوسائط دائمًا
+ setting_display_media_show_all: دائمًا عرض الوسائط المُعيَّنة كحساسة
setting_hide_network: الحسابات التي تُتابعها و التي تُتابِعك على حد سواء لن تُعرَض على صفحتك الشخصية
setting_noindex: ذلك يؤثر على حالة ملفك الشخصي و صفحاتك
setting_theme: ذلك يؤثر على الشكل الذي سيبدو عليه ماستدون عندما تقوم بالدخول مِن أي جهاز.
+ username: اسم المستخدم الخاص بك سوف يكون فريدا مِن نوعه على %{domain}
imports:
data: ملف CSV تم تصديره مِن مثيل خادوم ماستدون آخر
sessions:
@@ -64,6 +70,11 @@ ar:
setting_default_privacy: خصوصية المنشور
setting_default_sensitive: إعتبر الوسائط دائما كمحتوى حساس
setting_delete_modal: إظهار مربع حوار للتأكيد قبل حذف أي تبويق
+ setting_display_media: عرض الوسائط
+ setting_display_media_default: افتراضي
+ setting_display_media_hide_all: اخفاء الكل
+ setting_display_media_show_all: عرض الكل
+ setting_expand_spoilers: توسيع التبويقات التي تحتوي على تحذيرات عن المحتوى تلقائيا
setting_hide_network: إخفِ شبكتك
setting_noindex: عدم السماح لمحركات البحث بفهرسة ملفك الشخصي
setting_reduce_motion: تخفيض عدد الصور في الوسائط المتحركة
diff --git a/config/locales/simple_form.co.yml b/config/locales/simple_form.co.yml
index 6f1630e6a..c4a6bd169 100644
--- a/config/locales/simple_form.co.yml
+++ b/config/locales/simple_form.co.yml
@@ -11,6 +11,7 @@ co:
display_name:
one: Ci ferma 1 caratteru
other: Ci fermanu %{count} caratteri
+ email: Avete da riceve un'e-mail di cunfirmazione
fields: Pudete avè fin’à 4 elementi mustrati cum’un tavulone nant’à u vostru prufile
header: Furmatu PNG, GIF o JPG. 2Mo o menu. Sarà ridottu à %{dimensions}px
inbox_url: Cupiate l'URL di a pagina d'accolta di u ripetitore chì vulete utilizà
@@ -20,12 +21,17 @@ co:
note:
one: Ci ferma 1 caratteru
other: Ci fermanu %{count} caratteri
+ password: Ci volenu almenu 8 caratteri
phrase: Sarà trovu senza primura di e maiuscule o di l'avertimenti
scopes: L'API à quelle l'applicazione averà accessu. S'è voi selezziunate un parametru d'altu livellu, un c'hè micca bisognu di selezziunà quell'individuali.
setting_default_language: A lingua di i vostri statuti pò esse induvinata autumaticamente, mà ùn marchja micca sempre bè
+ setting_display_media_default: Piattà i media marcati cum'è sensibili
+ setting_display_media_hide_all: Sempre piattà tutti i media
+ setting_display_media_show_all: Sempre affissà i media marcati cum'è sensibili
setting_hide_network: I vostri abbunati è abbunamenti ùn saranu micca mustrati nant’à u vostru prufile
setting_noindex: Tocca à u vostru prufile pubblicu è i vostri statuti
setting_theme: Tocca à l’apparenza di Mastodon quandu site cunnettatu·a da qualch’apparechju.
+ username: U vostru cugnome sarà unicu nant'à %{domain}
whole_word: Quandu a parolla o a frasa sana hè alfanumerica, sarà applicata solu s'ella currisponde à a parolla sana
imports:
data: Un fugliale CSV da un’altr’istanza di Mastodon
@@ -69,6 +75,11 @@ co:
setting_default_privacy: Cunfidenzialità di i statuti
setting_default_sensitive: Sempre cunsiderà media cum’è sensibili
setting_delete_modal: Mustrà une cunfirmazione per toglie un statutu
+ setting_display_media: Affissera di i media
+ setting_display_media_default: Predefinitu
+ setting_display_media_hide_all: Piattà tuttu
+ setting_display_media_show_all: Affissà tuttu
+ setting_expand_spoilers: Sempre slibrà i statutu marcati cù un'avertimentu CW
setting_hide_network: Piattà a vostra rete
setting_noindex: Dumandà à i motori di ricerca internet d’un pudè micca esse truvatu·a cusì
setting_reduce_motion: Fà chì l’animazione vanu più pianu
diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml
index dbff52644..ed50e13ff 100644
--- a/config/locales/simple_form.cs.yml
+++ b/config/locales/simple_form.cs.yml
@@ -11,6 +11,7 @@ cs:
display_name:
one: Zbývá 1 znak
other: Zbývá vám %{count} znaků
+ email: Bude vám poslán potvrzovací e-mail
fields: Na profilu můžete mít až 4 položky zobrazené jako tabulka
header: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšena na %{dimensions} px
inbox_url: Zkopírujte URL z hlavní stránky mostu, který chcete použít
@@ -20,12 +21,17 @@ cs:
note:
one: Zbývá 1znak
other: Zbývá %{count} znaků
+ password: Použijte alespoň 8 znaků
phrase: Shoda bude nalezena bez ohledu na velikost písmen v těle tootu či varování o obsahu
scopes: Které API bude aplikace povolena používat. Pokud vyberete rozsah nejvyššího stupně, nebudete je muset vybírat po jednom.
setting_default_language: Jazyk vašich tootů může být detekován automaticky, není to však vždy přesné
+ setting_display_media_default: Skrývat média označená jako citlivá
+ setting_display_media_hide_all: Vždy skrývat všechna média
+ setting_display_media_show_all: Vždy zobrazovat média označená jako citlivá
setting_hide_network: Koho sledujete a kdo sleduje vás nebude zobrazeno na vašem profilu
setting_noindex: Ovlivňuje váš veřejný profil a stránky příspěvků
setting_theme: Ovlivňuje jak Mastodon vypadá, jste-li přihlášen na libovolném zařízení.
+ username: Vaše uživatelské jméno bude na %{domain} unikátní
whole_word: Je-li klíčové slovo či fráze pouze alfanumerická, bude aplikována pouze, pokud se shoduje s celým slovem
imports:
data: Soubor CSV exportován z jiné instance Mastodon
@@ -69,6 +75,11 @@ cs:
setting_default_privacy: Soukromí příspěvků
setting_default_sensitive: Vždy označovat média jako citlivá
setting_delete_modal: Zobrazovat před smazáním tootu potvrzovací okno
+ setting_display_media: Zobrazování médií
+ setting_display_media_default: Výchozí
+ setting_display_media_hide_all: Skrýt vše
+ setting_display_media_show_all: Zobrazit vše
+ setting_expand_spoilers: Vždy rozbalit tooty označené varováními o obsahu
setting_hide_network: Skrýt svou síť
setting_noindex: Neindexovat svůj profil vyhledávači
setting_reduce_motion: Redukovat pohyb v animacích
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index e13eece79..cca9361e4 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -11,6 +11,7 @@ de:
display_name:
one: 1 Zeichen verbleibt
other: %{count} Zeichen verbleiben
+ email: Du wirst ein Bestätigungs-E-Mail erhalten
fields: Du kannst bis zu 4 Elemente als Tabelle dargestellt auf deinem Profil anzeigen lassen
header: PNG, GIF oder JPG. Maximal %{size}. Wird auf 700×335 px herunterskaliert
inbox_url: Kopiere die URL von der Startseite des gewünschten Relays
@@ -20,12 +21,17 @@ de:
note:
one: 1 Zeichen verbleibt
other: %{count} Zeichen verbleiben
+ password: Verwende mindestens 8 Zeichen
phrase: Wird unabhängig vom umgebenen Text oder Inhaltswarnung eines Beitrags verglichen
scopes: Welche Schnittstellen der Applikation erlaubt sind. Wenn du einen Top-Level-Scope auswählst, dann musst du nicht jeden einzelnen darunter auswählen.
setting_default_language: Die Sprache der Beiträge kann automatisch erkannt werden, aber dies ist nicht immer genau
+ setting_display_media_default: Verstecke Medien, die als sensibel markiert sind
+ setting_display_media_hide_all: Alle Medien immer verstecken
+ setting_display_media_show_all: Medien, die als sensibel markiert sind, immer anzeigen
setting_hide_network: Wem du folgst und wer dir folgt wird in deinem Profil nicht angezeigt
setting_noindex: Betrifft dein öffentliches Profil und deine Beiträge
setting_theme: Wirkt sich darauf aus, wie Mastodon aussieht, egal auf welchem Gerät du eingeloggt bist.
+ username: Dein Benutzer:innen-Name wird auf %{domain} nur einmal vorkommen
whole_word: Wenn das Schlüsselwort oder -phrase nur Buchstaben und Zahlen enthält, wird es nur angewendet werden, wenn es dem ganzen Wort entspricht
imports:
data: CSV-Datei, die aus einer anderen Mastodon-Instanz exportiert wurde
@@ -69,6 +75,11 @@ de:
setting_default_privacy: Beitragssichtbarkeit
setting_default_sensitive: Medien immer als heikel markieren
setting_delete_modal: Bestätigungsdialog anzeigen, bevor ein Beitrag gelöscht wird
+ setting_display_media: Medien-Anzeige
+ setting_display_media_default: Standard
+ setting_display_media_hide_all: Alle verstecken
+ setting_display_media_show_all: Alle anzeigen
+ setting_expand_spoilers: Toots mit Inhaltswarnungen immer ausklappen
setting_hide_network: Blende dein Netzwerk aus
setting_noindex: Suchmaschinen-Indexierung verhindern
setting_reduce_motion: Bewegung in Animationen verringern
diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml
index 96a7547e4..823f25330 100644
--- a/config/locales/simple_form.el.yml
+++ b/config/locales/simple_form.el.yml
@@ -11,6 +11,7 @@ el:
display_name:
one: απομένει 1 χαρακτήρας
other: απομένουν %{count} χαρακτήρες
+ email: Θα σου σταλεί email επιβεβαίωσης
fields: Μπορείς να έχεις έως 4 σημειώσεις σε μορφή πίνακα στο προφίλ σου
header: PNG, GIF ή JPG. Έως %{size}. Θα περιοριστεί σε διάσταση %{dimensions}px
inbox_url: Αντέγραψε το URL της αρχικής σελίδας του ανταποκριτή (relay) που θέλεις να χρησιμοποιήσεις
@@ -20,12 +21,17 @@ el:
note:
one: απομένει 1 χαρακτήρας
other: απομένουν %{count} χαρακτήρες
+ password: Χρησιμοποίησε τουλάχιστον 8 χαρακτήρες
phrase: Θα ταιριάζει ανεξαρτήτως πεζών/κεφαλαίων ή προειδοποίησης περιεχομένου του τουτ
scopes: Ποια API θα επιτρέπεται στην εφαρμογή να χρησιμοποιήσεις. Αν επιλέξεις κάποιο υψηλό εύρος εφαρμογής, δε χρειάζεται να επιλέξεις και εξειδικευμένα.
setting_default_language: Η γλώσσα των τουτ σου μπορεί να ανιχνευτεί αυτόματα αλλά δεν είναι πάντα ακριβές
+ setting_display_media_default: Απόκρυψη ευαίσθητων πολυμέσων
+ setting_display_media_hide_all: Μόνιμη απόκρυψη όλων των πολυμέσων
+ setting_display_media_show_all: Μόνιμη εμφάνιση ευαίσθητων πολυμέσων
setting_hide_network: Δε θα εμφανίζεται στο προφίλ σου ποιους ακολουθείς και ποιοι σε ακολουθούν
setting_noindex: Επηρεάζει το δημόσιο προφίλ και τις δημοσιεύσεις σου
setting_theme: Επηρεάζει την εμφάνιση του Mastodon όταν συνδέεται από οποιαδήποτε συσκευή.
+ username: Το όνομα χρήστη σου θα είναι μοναδικό στο %{domain}
whole_word: Όταν η λέξη ή η φράση κλειδί είναι μόνο αλφαριθμητική, θα εφαρμοστεί μόνο αν ταιριάζει με ολόκληρη τη λέξη
imports:
data: Αρχείο CSV που έχει εξαχθεί από διαφορετικό κόμβο Mastodon
@@ -69,6 +75,11 @@ el:
setting_default_privacy: Ιδιωτικότητα δημοσιεύσεων
setting_default_sensitive: Σημείωνε πάντα τα πολυμέσα ως ευαίσθητου περιεχομένου
setting_delete_modal: Εμφάνιση ερώτησης επιβεβαίωσης πριν διαγράψεις ένα τουτ
+ setting_display_media: Εμφάνιση πολυμέσων
+ setting_display_media_default: Προκαθορισμένο
+ setting_display_media_hide_all: Απόκρυψη όλων
+ setting_display_media_show_all: Εμφάνιση όλων
+ setting_expand_spoilers: Μόνιμη ανάπτυξη των τουτ με προειδοποίηση περιεχομένου
setting_hide_network: Κρύψε τις διασυνδέσεις σου
setting_noindex: Επέλεξε να μην συμμετέχεις στα αποτελέσματα μηχανών αναζήτησης
setting_reduce_motion: Μείωση κίνησης κινουμένων στοιχείων
diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml
index 418b308b1..3e2398d55 100644
--- a/config/locales/simple_form.fa.yml
+++ b/config/locales/simple_form.fa.yml
@@ -11,6 +11,7 @@ fa:
display_name:
one: 1 حرف باقی مانده
other: %{count} حرف باقی مانده
+ email: به شما ایمیل تأییدی فرستاده خواهد شد
fields: شما میتوانید تا چهار مورد را در یک جدول در نمایهٔ خود نمایش دهید
header: یکی از قالبهای PNG یا GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد
inbox_url: نشانی صفحهٔ اصلی رلهای را که میخواهید به کار ببرید کپی کنید
@@ -20,12 +21,17 @@ fa:
note:
one: 1 حرف باقی مانده
other: %{count} حرف باقی مانده
+ password: دستکم باید ۸ نویسه داشته باشد
phrase: مستقل از کوچکی و بزرگی حروف، با متن اصلی یا هشدار محتوای بوقها مقایسه میشود
scopes: واسطهای برنامهنویسی که این برنامه به آن دسترسی دارد. اگر بالاترین سطح دسترسی را انتخاب کنید، دیگر نیازی به انتخاب سطحهای پایینی ندارید.
setting_default_language: زبان نوشتههای شما به طور خودکار تشخیص داده میشود، ولی این تشخصی همیشه دقیق نیست
+ setting_display_media_default: تصویرهایی را که به عنوان حساس علامت زده شدهاند پنهان کن
+ setting_display_media_hide_all: همیشه همهٔ عکسها و ویدیوها را پنهان کن
+ setting_display_media_show_all: همیشه تصویرهایی را که به عنوان حساس علامت زده شدهاند را نشان بده
setting_hide_network: فهرست پیگیران شما و فهرست کسانی که شما پی میگیرید روی نمایهٔ شما دیده نخواهد شد
setting_noindex: روی نمایهٔ عمومی و صفحهٔ نوشتههای شما تأثیر میگذارد
setting_theme: ظاهر ماستدون را وقتی که از هر دستگاهی به آن وارد میشوید تعیین میکند.
+ username: نام کاربری شما روی %{domain} یکتا خواهد بود
whole_word: اگر کلیدواژه فقط دارای حروف و اعداد باشد، تنها وقتی پیدا میشود که با کل یک واژه در متن منطبق باشد، نه با بخشی از یک واژه
imports:
data: پروندهٔ CSV که از سرور ماستدون دیگری برونسپاری شده
@@ -69,6 +75,11 @@ fa:
setting_default_privacy: حریم خصوصی نوشتهها
setting_default_sensitive: همیشه تصاویر را به عنوان حساس علامت بزن
setting_delete_modal: نمایش پیغام تأیید پیش از پاک کردن یک نوشته
+ setting_display_media: نمایش عکس و ویدیو
+ setting_display_media_default: پیشفرض
+ setting_display_media_hide_all: نهفتن همه
+ setting_display_media_show_all: نمایش همه
+ setting_expand_spoilers: همیشه بوقهایی را که هشدار محتوا دارند کامل نشان بده
setting_hide_network: نهفتن شبکهٔ ارتباطی
setting_noindex: درخواست از موتورهای جستجوگر برای ظاهر نشدن در نتایج جستجو
setting_reduce_motion: کاستن از حرکت در پویانماییها
diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml
index 1e0c4d3e6..6403bced3 100644
--- a/config/locales/simple_form.fr.yml
+++ b/config/locales/simple_form.fr.yml
@@ -11,6 +11,7 @@ fr:
display_name:
one: 1 caractère restant
other: %{count} caractères restants
+ email: Vous recevrez un courriel de confirmation
fields: Vous pouvez avoir jusqu’à 4 éléments affichés en tant que tableau sur votre profil
header: Au format PNG, GIF ou JPG. 2 Mo maximum. Sera réduit à %{dimensions}px
inbox_url: Copiez l’URL depuis la page d’accueil du relais que vous souhaitez utiliser
@@ -20,12 +21,17 @@ fr:
note:
one: 1 caractère restant
other: %{count} caractères restants
+ password: Utilisez au moins 8 caractères
phrase: Sera trouvé sans que la case ou l’avertissement de contenu du pouet soit pris en compte
scopes: À quelles APIs l’application sera autorisée à accéder. Si vous sélectionnez un périmètre de haut-niveau, vous n’avez pas besoin de sélectionner les individuels.
setting_default_language: La langue de vos pouets peut être détectée automatiquement, mais ça n’est pas toujours pertinent
+ setting_display_media_default: Masquer les supports marqués comme sensibles
+ setting_display_media_hide_all: Toujours masquer tous les médias
+ setting_display_media_show_all: Toujours afficher les médias marqués comme sensibles
setting_hide_network: Ceux que vous suivez et ceux qui vous suivent ne seront pas affichés sur votre profil
setting_noindex: Affecte votre profil public ainsi que vos statuts
setting_theme: Affecte l’apparence de Mastodon quand vous êtes connecté·e depuis n’importe quel appareil.
+ username: Votre nom d'utilisateur sera unique sur %{domain}
whole_word: Lorsque le mot-clef ou la phrase-clef est uniquement alphanumérique, ça sera uniquement appliqué s’il correspond au mot entier
imports:
data: Un fichier CSV généré par une autre instance de Mastodon
@@ -69,6 +75,11 @@ fr:
setting_default_privacy: Confidentialité des statuts
setting_default_sensitive: Toujours marquer les médias comme sensibles
setting_delete_modal: Afficher une fenêtre de confirmation avant de supprimer un pouet
+ setting_display_media: Affichage des médias
+ setting_display_media_default: Défaut
+ setting_display_media_hide_all: Masquer tout
+ setting_display_media_show_all: Montrer tout
+ setting_expand_spoilers: Toujours développer les pouëts marqués d'un avertissement de contenu
setting_hide_network: Cacher votre réseau
setting_noindex: Demander aux moteurs de recherche de ne pas indexer vos informations personnelles
setting_reduce_motion: Réduire la vitesse des animations
diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml
index 935545b0e..f81d34610 100644
--- a/config/locales/simple_form.gl.yml
+++ b/config/locales/simple_form.gl.yml
@@ -11,6 +11,7 @@ gl:
display_name:
one: 1 caracter restante
other: %{count} caracteres restantes
+ email: Enviaráselle un correo-e de confirmación
fields: Pode ter ate 4 elementos no seu perfil mostrados como unha táboa
header: PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px
inbox_url: Copiar o URL desde a páxina de inicio do repetidor que quere utilizar
@@ -20,12 +21,17 @@ gl:
note:
one: 1 caracter restante
other: %{count} caracteres restantes
+ password: Utilice 8 caracteres ao menos
phrase: Concordará independentemente das maiúsculas ou avisos de contido no toot
scopes: A que APIs terá acceso a aplicación. Si selecciona un ámbito de alto nivel, non precisa seleccionar elementos individuais.
setting_default_language: Pódese detectar automáticamente o idioma dos seus toots, mais non sempre é preciso
+ setting_display_media_default: Ocultar medios marcados como sensibles
+ setting_display_media_hide_all: Ocultar sempre os medios
+ setting_display_media_show_all: Mostrar sempre os medios marcados como sensibles
setting_hide_network: Non se mostrará no seu perfil quen a segue e quen a está a seguir
setting_noindex: Afecta ao seu perfil público e páxinas de estado
setting_theme: Afecta ao aspecto de Mastodon en calquer dispositivo cando está conectada.
+ username: O seu nome de usuaria será único en %{domain}
whole_word: Si a chave ou frase de paso é só alfanumérica, só se aplicará si concorda a palabra completa
imports:
data: Ficheiro CSV exportado desde outra instancia Mastodon
@@ -69,6 +75,11 @@ gl:
setting_default_privacy: Intimidade da publicación
setting_default_sensitive: Marcar sempre multimedia como sensible
setting_delete_modal: Solicitar confirmación antes de eliminar unha mensaxe
+ setting_display_media: Mostrar medios
+ setting_display_media_default: Por omisión
+ setting_display_media_hide_all: Ocultar todo
+ setting_display_media_show_all: Mostrar todo
+ setting_expand_spoilers: Despregar sempre as mensaxes marcadas con avisos de contido
setting_hide_network: Agochar a súa rede
setting_noindex: Pedir non aparecer nas buscas dos motores de busca
setting_reduce_motion: Reducir o movemento nas animacións
diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml
index 71e2f935e..413fe4d41 100644
--- a/config/locales/simple_form.ja.yml
+++ b/config/locales/simple_form.ja.yml
@@ -9,6 +9,7 @@ ja:
context: フィルターを適用する対象 (複数選択可)
digest: 長期間使用していない場合と不在時に返信を受けた場合のみ送信されます
display_name: あと%{count}文字入力できます。
+ email: 確認のメールが送信されます
fields: プロフィールに表として4つまでの項目を表示することができます
header: "%{size}までのPNG、GIF、JPGが利用可能です。 %{dimensions}pxまで縮小されます"
inbox_url: 使用したいリレーサーバーのトップページからURLをコピーします
@@ -16,6 +17,7 @@ ja:
locale: ユーザーインターフェース、メールやプッシュ通知の言語
locked: フォロワーを手動で承認する必要があります
note: あと%{count}文字入力できます。
+ password: 少なくとも8文字は入力してください
phrase: トゥートの大文字小文字や閲覧注意に関係なく一致
scopes: アプリの API に許可するアクセス権を選択してください。最上位のスコープを選択する場合、個々のスコープを選択する必要はありません。
setting_default_language: トゥートの言語は自動的に検出されますが、必ずしも正確とは限りません
@@ -25,6 +27,7 @@ ja:
setting_hide_network: フォローとフォロワーの情報がプロフィールページで見られないようにします
setting_noindex: 公開プロフィールおよび各投稿ページに影響します
setting_theme: ログインしている全てのデバイスで適用されるデザインです。
+ username: あなたのユーザー名は %{domain} の中で重複していない必要があります
whole_word: キーワードまたはフレーズが英数字のみの場合、単語全体と一致する場合のみ適用されるようになります
imports:
data: 他の Mastodon インスタンスからエクスポートしたCSVファイルを選択して下さい
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index 01100ffb8..024b9ad20 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -337,9 +337,7 @@ sk:
reported_by: Nahlásené užívateľom
resolved: Vyriešené
resolved_msg: Hlásenie úspešne vyriešené!
- silence_account: Zamĺčať účet
status: Stav
- suspend_account: Pozastaviť účet
title: Reporty
unassign: Odobrať
unresolved: Nevyriešené
diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml
index d6800a8fb..ff31203c8 100644
--- a/config/locales/sr-Latn.yml
+++ b/config/locales/sr-Latn.yml
@@ -251,9 +251,7 @@ sr-Latn:
reported_account: Prijavljeni nalog
reported_by: Prijavio
resolved: Rešeni
- silence_account: Ućutkaj nalog
status: Status
- suspend_account: Suspenduj nalog
title: Prijave
unresolved: Nerešeni
settings:
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index 53981b0f0..36d81886e 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -338,9 +338,7 @@ sr:
reported_by: Пријавио
resolved: Решена
resolved_msg: Пријава успешно разрешена!
- silence_account: Ућуткај налог
status: Статус
- suspend_account: Суспендуј налог
title: Пријаве
unassign: Уклони доделу
unresolved: Нерешене
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index b7229aebe..4f80a46f1 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -285,9 +285,7 @@ sv:
reported_by: Anmäld av
resolved: Löst
resolved_msg: Anmälan har lösts framgångsrikt!
- silence_account: Tysta ner konto
status: Status
- suspend_account: Suspendera konto
title: Anmälningar
unassign: Otilldela
unresolved: Olösta
diff --git a/config/locales/th.yml b/config/locales/th.yml
index 8c411f252..3ed73c7f5 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -116,9 +116,7 @@ th:
reported_account: รายงานแอคเคาท์
reported_by: รายงานโดย
resolved: จัดการแล้ว
- silence_account: แอคเค๊าท์ที่ปิดเสียง
status: สถานะ
- suspend_account: แอคเค๊าท์ที่หยุดไว้
title: รายงาน
unresolved: Unresolved
settings:
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index d7ecb480f..99ba89397 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -115,9 +115,7 @@ tr:
reported_account: Şikayet edilen hesap
reported_by: Şikayet eden
resolved: Giderildi
- silence_account: Hesabı sustur
status: Durum
- suspend_account: Hesabı uzaklaştır
title: Şikayetler
unresolved: Giderilmedi
settings:
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index 22d5e98df..83a315a37 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -313,9 +313,7 @@ uk:
reported_by: Відправник скарги
resolved: Вирішено
resolved_msg: Скаргу успішно вирішено!
- silence_account: Заглушити акаунт
status: Статус
- suspend_account: Заблокувати акаунт
title: Скарги
unassign: Зняти призначення
unresolved: Невирішені
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index 9a1b47fdb..0ce1a0ed7 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -332,9 +332,7 @@ zh-CN:
reported_by: 举报人
resolved: 已处理
resolved_msg: 举报处理成功!
- silence_account: 隐藏用户
status: 状态
- suspend_account: 封禁用户
title: 举报
unassign: 取消接管
unresolved: 未处理
diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml
index abbb1b809..db7c0c47c 100644
--- a/config/locales/zh-HK.yml
+++ b/config/locales/zh-HK.yml
@@ -285,9 +285,7 @@ zh-HK:
reported_by: 舉報者
resolved: 已處理
resolved_msg: 舉報已處理。
- silence_account: 將用戶靜音
status: 狀態
- suspend_account: 將用戶停權
title: 舉報
unassign: 取消指派
unresolved: 未處理
diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml
index 338c40d09..d1b7633f3 100644
--- a/config/locales/zh-TW.yml
+++ b/config/locales/zh-TW.yml
@@ -295,9 +295,7 @@ zh-TW:
reported_by: 檢舉人
resolved: 已解決
resolved_msg: 檢舉已處理!
- silence_account: 靜音使用者
status: 狀態
- suspend_account: 停權使用者
title: 檢舉
unassign: 取消指派
unresolved: 未解決
diff --git a/config/routes.rb b/config/routes.rb
index 84c37b89e..446aad58b 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -267,7 +267,12 @@ Rails.application.routes.draw do
resources :streaming, only: [:index]
resources :custom_emojis, only: [:index]
resources :suggestions, only: [:index, :destroy]
- resources :conversations, only: [:index]
+
+ resources :conversations, only: [:index, :destroy] do
+ member do
+ post :read
+ end
+ end
get '/search', to: 'search#index', as: :search
diff --git a/db/migrate/20181010141500_add_silent_to_mentions.rb b/db/migrate/20181010141500_add_silent_to_mentions.rb
new file mode 100644
index 000000000..dbb4fba26
--- /dev/null
+++ b/db/migrate/20181010141500_add_silent_to_mentions.rb
@@ -0,0 +1,23 @@
+require Rails.root.join('lib', 'mastodon', 'migration_helpers')
+
+class AddSilentToMentions < ActiveRecord::Migration[5.2]
+ include Mastodon::MigrationHelpers
+
+ disable_ddl_transaction!
+
+ def up
+ safety_assured do
+ add_column_with_default(
+ :mentions,
+ :silent,
+ :boolean,
+ allow_null: false,
+ default: false
+ )
+ end
+ end
+
+ def down
+ remove_column :mentions, :silent
+ end
+end
diff --git a/db/migrate/20181017170937_add_reject_reports_to_domain_blocks.rb b/db/migrate/20181017170937_add_reject_reports_to_domain_blocks.rb
new file mode 100644
index 000000000..f05d50fcd
--- /dev/null
+++ b/db/migrate/20181017170937_add_reject_reports_to_domain_blocks.rb
@@ -0,0 +1,17 @@
+require Rails.root.join('lib', 'mastodon', 'migration_helpers')
+
+class AddRejectReportsToDomainBlocks < ActiveRecord::Migration[5.2]
+ include Mastodon::MigrationHelpers
+
+ disable_ddl_transaction!
+
+ def up
+ safety_assured do
+ add_column_with_default :domain_blocks, :reject_reports, :boolean, default: false, allow_null: false
+ end
+ end
+
+ def down
+ remove_column :domain_blocks, :reject_reports
+ end
+end
diff --git a/db/migrate/20181018205649_add_unread_to_account_conversations.rb b/db/migrate/20181018205649_add_unread_to_account_conversations.rb
new file mode 100644
index 000000000..3c28b9a64
--- /dev/null
+++ b/db/migrate/20181018205649_add_unread_to_account_conversations.rb
@@ -0,0 +1,23 @@
+require Rails.root.join('lib', 'mastodon', 'migration_helpers')
+
+class AddUnreadToAccountConversations < ActiveRecord::Migration[5.2]
+ include Mastodon::MigrationHelpers
+
+ disable_ddl_transaction!
+
+ def up
+ safety_assured do
+ add_column_with_default(
+ :account_conversations,
+ :unread,
+ :boolean,
+ allow_null: false,
+ default: false
+ )
+ end
+ end
+
+ def down
+ remove_column :account_conversations, :unread, :boolean
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index f9019e8cf..5bfb2d067 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: 2018_10_07_025445) do
+ActiveRecord::Schema.define(version: 2018_10_18_205649) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -22,6 +22,7 @@ ActiveRecord::Schema.define(version: 2018_10_07_025445) do
t.bigint "status_ids", default: [], null: false, array: true
t.bigint "last_status_id"
t.integer "lock_version", default: 0, null: false
+ t.boolean "unread", default: false, null: false
t.index ["account_id", "conversation_id", "participant_account_ids"], name: "index_unique_conversations", unique: true
t.index ["account_id"], name: "index_account_conversations_on_account_id"
t.index ["conversation_id"], name: "index_account_conversations_on_conversation_id"
@@ -195,6 +196,7 @@ ActiveRecord::Schema.define(version: 2018_10_07_025445) do
t.datetime "updated_at", null: false
t.integer "severity", default: 0
t.boolean "reject_media", default: false, null: false
+ t.boolean "reject_reports", default: false, null: false
t.index ["domain"], name: "index_domain_blocks_on_domain", unique: true
end
@@ -311,6 +313,7 @@ ActiveRecord::Schema.define(version: 2018_10_07_025445) do
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.bigint "account_id"
+ t.boolean "silent", default: false, null: false
t.index ["account_id", "status_id"], name: "index_mentions_on_account_id_and_status_id", unique: true
t.index ["status_id"], name: "index_mentions_on_status_id"
end
diff --git a/docker-compose.yml b/docker-compose.yml
index 064d5a260..d9f80a38a 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -6,18 +6,16 @@ services:
image: postgres:9.6-alpine
networks:
- internal_network
-### Uncomment to enable DB persistence
-# volumes:
-# - ./postgres:/var/lib/postgresql/data
+ volumes:
+ - ./postgres:/var/lib/postgresql/data
redis:
restart: always
image: redis:4.0-alpine
networks:
- internal_network
-### Uncomment to enable REDIS persistence
-# volumes:
-# - ./redis:/data
+ volumes:
+ - ./redis:/data
# es:
# restart: always
@@ -26,9 +24,8 @@ services:
# - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
# networks:
# - internal_network
-#### Uncomment to enable ES persistence
-## volumes:
-## - ./elasticsearch:/usr/share/elasticsearch/data
+# volumes:
+# - ./elasticsearch:/usr/share/elasticsearch/data
web:
build: .
@@ -68,7 +65,7 @@ services:
image: tootsuite/mastodon
restart: always
env_file: .env.production
- command: bundle exec sidekiq -q default -q push -q mailers -q pull
+ command: bundle exec sidekiq
depends_on:
- db
- redis
diff --git a/lib/mastodon/accounts_cli.rb b/lib/mastodon/accounts_cli.rb
index 704cf474b..a32bc9533 100644
--- a/lib/mastodon/accounts_cli.rb
+++ b/lib/mastodon/accounts_cli.rb
@@ -223,7 +223,7 @@ module Mastodon
dry_run = options[:dry_run] ? ' (DRY RUN)' : ''
Account.remote.where(protocol: :activitypub).partitioned.find_each do |account|
- next if account.updated_at >= skip_threshold || account.last_webfingered_at >= skip_threshold
+ next if account.updated_at >= skip_threshold || (account.last_webfingered_at.present? && account.last_webfingered_at >= skip_threshold)
unless dead_servers.include?(account.domain)
begin
@@ -239,7 +239,7 @@ module Mastodon
end
end
- if [404, 410].include?(code) || dead_servers.include?(account.domain)
+ if [404, 410].include?(code)
unless options[:dry_run]
SuspendAccountService.new.call(account)
account.destroy
@@ -252,6 +252,18 @@ module Mastodon
end
end
+ # Remove dead servers
+ unless dead_servers.empty? || options[:dry_run]
+ dead_servers.each do |domain|
+ Account.where(domain: domain).find_each do |account|
+ SuspendAccountService.new.call(account)
+ account.destroy
+ culled += 1
+ say('.', :green, false)
+ end
+ end
+ end
+
say
say("Removed #{culled} accounts (#{dead_servers.size} dead servers)#{dry_run}", :green)
diff --git a/lib/mastodon/feeds_cli.rb b/lib/mastodon/feeds_cli.rb
index c3fca723e..cca65cf87 100644
--- a/lib/mastodon/feeds_cli.rb
+++ b/lib/mastodon/feeds_cli.rb
@@ -54,6 +54,11 @@ module Mastodon
elsif username.present?
account = Account.find_local(username)
+ if account.nil?
+ say("Account #{username} is not found", :red)
+ exit(1)
+ end
+
if options[:background]
RegenerationWorker.perform_async(account.id) unless options[:dry_run]
else
diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb
index fc7fa5aca..b4b88dfdc 100644
--- a/lib/mastodon/version.rb
+++ b/lib/mastodon/version.rb
@@ -9,7 +9,7 @@ module Mastodon
end
def minor
- 5
+ 6
end
def patch
@@ -21,7 +21,7 @@ module Mastodon
end
def flags
- ''
+ 'rc1'
end
def to_a
diff --git a/spec/controllers/auth/sessions_controller_spec.rb b/spec/controllers/auth/sessions_controller_spec.rb
index b4f912717..71fcc1a6e 100644
--- a/spec/controllers/auth/sessions_controller_spec.rb
+++ b/spec/controllers/auth/sessions_controller_spec.rb
@@ -55,7 +55,7 @@ RSpec.describe Auth::SessionsController, type: :controller do
request.env['devise.mapping'] = Devise.mappings[:user]
end
- context 'using PAM authentication' do
+ context 'using PAM authentication', if: ENV['PAM_ENABLED'] == 'true' do
context 'using a valid password' do
before do
post :create, params: { user: { email: "pam_user1", password: '123456' } }
diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb
index 62b9db8c2..cd20b7c7c 100644
--- a/spec/lib/activitypub/activity/create_spec.rb
+++ b/spec/lib/activitypub/activity/create_spec.rb
@@ -105,6 +105,31 @@ RSpec.describe ActivityPub::Activity::Create do
end
end
+ context 'limited' do
+ let(:recipient) { Fabricate(:account) }
+
+ let(:object_json) do
+ {
+ id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
+ type: 'Note',
+ content: 'Lorem ipsum',
+ to: ActivityPub::TagManager.instance.uri_for(recipient),
+ }
+ end
+
+ it 'creates status' do
+ status = sender.statuses.first
+
+ expect(status).to_not be_nil
+ expect(status.visibility).to eq 'limited'
+ end
+
+ it 'creates silent mention' do
+ status = sender.statuses.first
+ expect(status.mentions.first).to be_silent
+ end
+ end
+
context 'direct' do
let(:recipient) { Fabricate(:account) }
@@ -114,6 +139,10 @@ RSpec.describe ActivityPub::Activity::Create do
type: 'Note',
content: 'Lorem ipsum',
to: ActivityPub::TagManager.instance.uri_for(recipient),
+ tag: {
+ type: 'Mention',
+ href: ActivityPub::TagManager.instance.uri_for(recipient),
+ },
}
end
diff --git a/streaming/index.js b/streaming/index.js
index debf7c8bf..b4d09d0ad 100644
--- a/streaming/index.js
+++ b/streaming/index.js
@@ -74,6 +74,7 @@ const startMaster = () => {
if (!process.env.SOCKET && process.env.PORT && isNaN(+process.env.PORT)) {
log.warn('UNIX domain socket is now supported by using SOCKET. Please migrate from PORT hack.');
}
+
log.info(`Starting streaming API server master with ${numWorkers} workers`);
};
@@ -449,6 +450,11 @@ const startWorker = (workerId) => {
});
};
+ const httpNotFound = res => {
+ res.writeHead(404, { 'Content-Type': 'application/json' });
+ res.end(JSON.stringify({ error: 'Not found' }));
+ };
+
app.use(setRequestId);
app.use(setRemoteAddress);
app.use(allowCrossDomain);
@@ -490,11 +496,25 @@ const startWorker = (workerId) => {
});
app.get('/api/v1/streaming/hashtag', (req, res) => {
- streamFrom(`timeline:hashtag:${req.query.tag.toLowerCase()}`, req, streamToHttp(req, res), streamHttpEnd(req), true);
+ const { tag } = req.query;
+
+ if (!tag || tag.length === 0) {
+ httpNotFound(res);
+ return;
+ }
+
+ streamFrom(`timeline:hashtag:${tag.toLowerCase()}`, req, streamToHttp(req, res), streamHttpEnd(req), true);
});
app.get('/api/v1/streaming/hashtag/local', (req, res) => {
- streamFrom(`timeline:hashtag:${req.query.tag.toLowerCase()}:local`, req, streamToHttp(req, res), streamHttpEnd(req), true);
+ const { tag } = req.query;
+
+ if (!tag || tag.length === 0) {
+ httpNotFound(res);
+ return;
+ }
+
+ streamFrom(`timeline:hashtag:${tag.toLowerCase()}:local`, req, streamToHttp(req, res), streamHttpEnd(req), true);
});
app.get('/api/v1/streaming/list', (req, res) => {
@@ -502,8 +522,7 @@ const startWorker = (workerId) => {
authorizeListAccess(listId, req, authorized => {
if (!authorized) {
- res.writeHead(404, { 'Content-Type': 'application/json' });
- res.end(JSON.stringify({ error: 'Not found' }));
+ httpNotFound(res);
return;
}
@@ -553,9 +572,19 @@ const startWorker = (workerId) => {
streamFrom(channel, req, streamToWs(req, ws), streamWsEnd(req, ws, subscriptionHeartbeat(channel)), true);
break;
case 'hashtag':
+ if (!location.query.tag || location.query.tag.length === 0) {
+ ws.close();
+ return;
+ }
+
streamFrom(`timeline:hashtag:${location.query.tag.toLowerCase()}`, req, streamToWs(req, ws), streamWsEnd(req, ws), true);
break;
case 'hashtag:local':
+ if (!location.query.tag || location.query.tag.length === 0) {
+ ws.close();
+ return;
+ }
+
streamFrom(`timeline:hashtag:${location.query.tag.toLowerCase()}:local`, req, streamToWs(req, ws), streamWsEnd(req, ws), true);
break;
case 'list':
@@ -588,16 +617,9 @@ const startWorker = (workerId) => {
});
}, 30000);
- if (process.env.SOCKET || process.env.PORT && isNaN(+process.env.PORT)) {
- server.listen(process.env.SOCKET || process.env.PORT, () => {
- fs.chmodSync(server.address(), 0o666);
- log.info(`Worker ${workerId} now listening on ${server.address()}`);
- });
- } else {
- server.listen(+process.env.PORT || 4000, process.env.BIND || '0.0.0.0', () => {
- log.info(`Worker ${workerId} now listening on ${server.address().address}:${server.address().port}`);
- });
- }
+ attachServerWithConfig(server, address => {
+ log.info(`Worker ${workerId} now listening on ${address}`);
+ });
const onExit = () => {
log.info(`Worker ${workerId} exiting, bye bye`);
@@ -617,9 +639,48 @@ const startWorker = (workerId) => {
process.on('uncaughtException', onError);
};
-throng({
- workers: numWorkers,
- lifetime: Infinity,
- start: startWorker,
- master: startMaster,
+const attachServerWithConfig = (server, onSuccess) => {
+ if (process.env.SOCKET || process.env.PORT && isNaN(+process.env.PORT)) {
+ server.listen(process.env.SOCKET || process.env.PORT, () => {
+ if (onSuccess) {
+ fs.chmodSync(server.address(), 0o666);
+ onSuccess(server.address());
+ }
+ });
+ } else {
+ server.listen(+process.env.PORT || 4000, process.env.BIND || '0.0.0.0', () => {
+ if (onSuccess) {
+ onSuccess(`${server.address().address}:${server.address().port}`);
+ }
+ });
+ }
+};
+
+const onPortAvailable = onSuccess => {
+ const testServer = http.createServer();
+
+ testServer.once('error', err => {
+ onSuccess(err);
+ });
+
+ testServer.once('listening', () => {
+ testServer.once('close', () => onSuccess());
+ testServer.close();
+ });
+
+ attachServerWithConfig(testServer);
+};
+
+onPortAvailable(err => {
+ if (err) {
+ log.error('Could not start server, the port or socket is in use');
+ return;
+ }
+
+ throng({
+ workers: numWorkers,
+ lifetime: Infinity,
+ start: startWorker,
+ master: startMaster,
+ });
});