diff --git a/.github/workflows/test-chart.yml b/.github/workflows/test-chart.yml
new file mode 100644
index 0000000000..b9ff808559
--- /dev/null
+++ b/.github/workflows/test-chart.yml
@@ -0,0 +1,138 @@
+# This is a GitHub workflow defining a set of jobs with a set of steps.
+# ref: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions
+#
+name: Test chart
+
+on:
+ pull_request:
+ paths:
+ - "chart/**"
+ - "!**.md"
+ - ".github/workflows/test-chart.yml"
+ push:
+ paths:
+ - "chart/**"
+ - "!**.md"
+ - ".github/workflows/test-chart.yml"
+ branches-ignore:
+ - "dependabot/**"
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+defaults:
+ run:
+ working-directory: chart
+
+jobs:
+ lint-templates:
+ runs-on: ubuntu-22.04
+
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions/setup-python@v4
+ with:
+ python-version: "3.x"
+
+ - name: Install dependencies (yamllint)
+ run: pip install yamllint
+
+ - run: helm dependency update
+
+ - name: helm lint
+ run: |
+ helm lint . \
+ --values dev-values.yaml
+
+ - name: helm template
+ run: |
+ helm template . \
+ --values dev-values.yaml \
+ --output-dir rendered-templates
+
+ - name: yamllint (only on templates we manage)
+ run: |
+ rm -rf rendered-templates/mastodon/charts
+
+ yamllint rendered-templates \
+ --config-data "{rules: {indentation: {spaces: 2}, line-length: disable}}"
+
+ # This job helps us validate that rendered templates are valid k8s resources
+ # against a k8s api-server, via "helm template --validate", but also that a
+ # basic configuration can be used to successfully startup mastodon.
+ #
+ test-install:
+ runs-on: ubuntu-22.04
+ timeout-minutes: 15
+
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ # k3s-channel reference: https://update.k3s.io/v1-release/channels
+ - k3s-channel: latest
+ - k3s-channel: stable
+
+ # This represents the oldest configuration we test against.
+ #
+ # The k8s version chosen is based on the oldest still supported k8s
+ # version among two managed k8s services, GKE, EKS.
+ # - GKE: https://endoflife.date/google-kubernetes-engine
+ # - EKS: https://endoflife.date/amazon-eks
+ #
+ # The helm client's version can influence what helper functions is
+ # available for use in the templates, currently we need v3.6.0 or
+ # higher.
+ #
+ - k3s-channel: v1.21
+ helm-version: v3.6.0
+
+ steps:
+ - uses: actions/checkout@v3
+
+ # This action starts a k8s cluster with NetworkPolicy enforcement and
+ # installs both kubectl and helm.
+ #
+ # ref: https://github.com/jupyterhub/action-k3s-helm#readme
+ #
+ - uses: jupyterhub/action-k3s-helm@v3
+ with:
+ k3s-channel: ${{ matrix.k3s-channel }}
+ helm-version: ${{ matrix.helm-version }}
+ metrics-enabled: false
+ traefik-enabled: false
+ docker-enabled: false
+
+ - run: helm dependency update
+
+ # Validate rendered helm templates against the k8s api-server
+ - name: helm template --validate
+ run: |
+ helm template --validate mastodon . \
+ --values dev-values.yaml
+
+ - name: helm install
+ run: |
+ helm install mastodon . \
+ --values dev-values.yaml \
+ --timeout 10m
+
+ # This actions provides a report about the state of the k8s cluster,
+ # providing logs etc on anything that has failed and workloads marked as
+ # important.
+ #
+ # ref: https://github.com/jupyterhub/action-k8s-namespace-report#readme
+ #
+ - name: Kubernetes namespace report
+ uses: jupyterhub/action-k8s-namespace-report@v1
+ if: always()
+ with:
+ important-workloads: >-
+ deploy/mastodon-sidekiq
+ deploy/mastodon-streaming
+ deploy/mastodon-web
+ job/mastodon-assets-precompile
+ job/mastodon-chewy-upgrade
+ job/mastodon-create-admin
+ job/mastodon-db-migrate
diff --git a/AUTHORS.md b/AUTHORS.md
index 9fc5f44f18..18b9f2d708 100644
--- a/AUTHORS.md
+++ b/AUTHORS.md
@@ -15,32 +15,32 @@ and provided thanks to the work of the following contributors:
* [noellabo](https://github.com/noellabo)
* [abcang](https://github.com/abcang)
* [yiskah](https://github.com/yiskah)
+* [tribela](https://github.com/tribela)
* [mayaeh](https://github.com/mayaeh)
* [nolanlawson](https://github.com/nolanlawson)
* [ysksn](https://github.com/ysksn)
-* [tribela](https://github.com/tribela)
* [sorin-davidoi](https://github.com/sorin-davidoi)
* [lynlynlynx](https://github.com/lynlynlynx)
* [m4sk1n](mailto:me@m4sk.in)
* [Marcin Mikołajczak](mailto:me@m4sk.in)
-* [renatolond](https://github.com/renatolond)
* [shleeable](https://github.com/shleeable)
-* [alpaca-tc](https://github.com/alpaca-tc)
+* [renatolond](https://github.com/renatolond)
* [zunda](https://github.com/zunda)
+* [alpaca-tc](https://github.com/alpaca-tc)
* [nclm](https://github.com/nclm)
* [ineffyble](https://github.com/ineffyble)
* [ariasuni](https://github.com/ariasuni)
* [Masoud Abkenar](mailto:ampbox@gmail.com)
* [blackle](https://github.com/blackle)
* [Quent-in](https://github.com/Quent-in)
-* [JantsoP](https://github.com/JantsoP)
* [Brawaru](https://github.com/Brawaru)
+* [JantsoP](https://github.com/JantsoP)
+* [trwnh](https://github.com/trwnh)
* [nullkal](https://github.com/nullkal)
* [yookoala](https://github.com/yookoala)
* [dunn](https://github.com/dunn)
* [Aditoo17](https://github.com/Aditoo17)
* [Quenty31](https://github.com/Quenty31)
-* [marek-lach](https://github.com/marek-lach)
* [shuheiktgw](https://github.com/shuheiktgw)
* [ashfurrow](https://github.com/ashfurrow)
* [danhunsaker](https://github.com/danhunsaker)
@@ -48,7 +48,6 @@ and provided thanks to the work of the following contributors:
* [Jeroen](mailto:jeroenpraat@users.noreply.github.com)
* [takayamaki](https://github.com/takayamaki)
* [masarakki](https://github.com/masarakki)
-* [trwnh](https://github.com/trwnh)
* [ticky](https://github.com/ticky)
* [ThisIsMissEm](https://github.com/ThisIsMissEm)
* [hinaloe](https://github.com/hinaloe)
@@ -57,16 +56,19 @@ and provided thanks to the work of the following contributors:
* [Wonderfall](https://github.com/Wonderfall)
* [matteoaquila](https://github.com/matteoaquila)
* [yukimochi](https://github.com/yukimochi)
-* [palindromordnilap](https://github.com/palindromordnilap)
+* [nightpool](https://github.com/nightpool)
+* [alixrossi](https://github.com/alixrossi)
* [rkarabut](https://github.com/rkarabut)
* [jeroenpraat](mailto:jeroenpraat@users.noreply.github.com)
-* [nightpool](https://github.com/nightpool)
+* [marek-lach](https://github.com/marek-lach)
* [Artoria2e5](https://github.com/Artoria2e5)
+* [rinsuki](https://github.com/rinsuki)
* [marrus-sh](https://github.com/marrus-sh)
* [krainboltgreene](https://github.com/krainboltgreene)
* [pfigel](https://github.com/pfigel)
* [BoFFire](https://github.com/BoFFire)
* [Aldarone](https://github.com/Aldarone)
+* [deepy](https://github.com/deepy)
* [clworld](https://github.com/clworld)
* [MasterGroosha](https://github.com/MasterGroosha)
* [dracos](https://github.com/dracos)
@@ -75,7 +77,6 @@ and provided thanks to the work of the following contributors:
* [Sylvhem](https://github.com/Sylvhem)
* [koyuawsmbrtn](https://github.com/koyuawsmbrtn)
* [MitarashiDango](https://github.com/MitarashiDango)
-* [rinsuki](https://github.com/rinsuki)
* [angristan](https://github.com/angristan)
* [JeanGauthier](https://github.com/JeanGauthier)
* [kschaper](https://github.com/kschaper)
@@ -87,14 +88,15 @@ and provided thanks to the work of the following contributors:
* [MightyPork](https://github.com/MightyPork)
* [ashleyhull-versent](https://github.com/ashleyhull-versent)
* [yhirano55](https://github.com/yhirano55)
+* [mashirozx](https://github.com/mashirozx)
* [devkral](https://github.com/devkral)
* [camponez](https://github.com/camponez)
* [Hugo Gameiro](mailto:hmgameiro@gmail.com)
+* [Marek Ľach](mailto:graweeld@googlemail.com)
* [SerCom_KC](mailto:szescxz@gmail.com)
* [aschmitz](https://github.com/aschmitz)
* [mfmfuyu](https://github.com/mfmfuyu)
* [kedamaDQ](https://github.com/kedamaDQ)
-* [mashirozx](https://github.com/mashirozx)
* [fpiesche](https://github.com/fpiesche)
* [gandaro](https://github.com/gandaro)
* [johnsudaar](https://github.com/johnsudaar)
@@ -106,8 +108,10 @@ and provided thanks to the work of the following contributors:
* [hikari-no-yume](https://github.com/hikari-no-yume)
* [seefood](https://github.com/seefood)
* [jackjennings](https://github.com/jackjennings)
+* [sunny](https://github.com/sunny)
* [puckipedia](https://github.com/puckipedia)
-* [spla](mailto:spla@mastodont.cat)
+* [splaGit](https://github.com/splaGit)
+* [tateisu](https://github.com/tateisu)
* [walf443](https://github.com/walf443)
* [JoelQ](https://github.com/JoelQ)
* [mistydemeo](https://github.com/mistydemeo)
@@ -118,13 +122,15 @@ and provided thanks to the work of the following contributors:
* [tsuwatch](https://github.com/tsuwatch)
* [progval](https://github.com/progval)
* [victorhck](https://github.com/victorhck)
+* [Izorkin](https://github.com/Izorkin)
* [manuelviens](mailto:manuelviens@users.noreply.github.com)
-* [tateisu](https://github.com/tateisu)
* [fvh-P](https://github.com/fvh-P)
* [lfuelling](https://github.com/lfuelling)
* [rtucker](https://github.com/rtucker)
* [Anna e só](mailto:contraexemplos@gmail.com)
+* [danieljakots](https://github.com/danieljakots)
* [dariusk](https://github.com/dariusk)
+* [Gomasy](https://github.com/Gomasy)
* [kazu9su](https://github.com/kazu9su)
* [komic](https://github.com/komic)
* [lmorchard](https://github.com/lmorchard)
@@ -137,6 +143,7 @@ and provided thanks to the work of the following contributors:
* [goofy-bz](mailto:goofy@babelzilla.org)
* [kadiix](https://github.com/kadiix)
* [kodacs](https://github.com/kodacs)
+* [luzpaz](https://github.com/luzpaz)
* [marcin mikołajczak](mailto:me@m4sk.in)
* [berkes](https://github.com/berkes)
* [KScl](https://github.com/KScl)
@@ -145,23 +152,26 @@ and provided thanks to the work of the following contributors:
* [AA4ch1](https://github.com/AA4ch1)
* [alexgleason](https://github.com/alexgleason)
* [cpytel](https://github.com/cpytel)
+* [cutls](https://github.com/cutls)
* [northerner](https://github.com/northerner)
* [weex](https://github.com/weex)
+* [erbridge](https://github.com/erbridge)
* [fhemberger](https://github.com/fhemberger)
-* [Gomasy](https://github.com/Gomasy)
* [greysteil](https://github.com/greysteil)
* [henrycatalinismith](https://github.com/henrycatalinismith)
+* [HolgerHuo](https://github.com/HolgerHuo)
* [d6rkaiz](https://github.com/d6rkaiz)
* [ladyisatis](https://github.com/ladyisatis)
* [JMendyk](https://github.com/JMendyk)
+* [kescherCode](https://github.com/kescherCode)
* [JohnD28](https://github.com/JohnD28)
* [znz](https://github.com/znz)
* [saper](https://github.com/saper)
* [Naouak](https://github.com/Naouak)
* [pawelngei](https://github.com/pawelngei)
+* [rgroothuijsen](https://github.com/rgroothuijsen)
* [reneklacan](https://github.com/reneklacan)
* [ekiru](https://github.com/ekiru)
-* [Izorkin](https://github.com/Izorkin)
* [unasuke](https://github.com/unasuke)
* [geta6](https://github.com/geta6)
* [happycoloredbanana](https://github.com/happycoloredbanana)
@@ -174,7 +184,6 @@ and provided thanks to the work of the following contributors:
* [aji-su](https://github.com/aji-su)
* [ikuradon](https://github.com/ikuradon)
* [nzws](https://github.com/nzws)
-* [duxovni](https://github.com/duxovni)
* [SuperSandro2000](https://github.com/SuperSandro2000)
* [178inaba](https://github.com/178inaba)
* [acid-chicken](https://github.com/acid-chicken)
@@ -183,7 +192,6 @@ and provided thanks to the work of the following contributors:
* [aablinov](https://github.com/aablinov)
* [stalker314314](https://github.com/stalker314314)
* [cohosh](https://github.com/cohosh)
-* [cutls](https://github.com/cutls)
* [huertanix](https://github.com/huertanix)
* [eleboucher](https://github.com/eleboucher)
* [halkeye](https://github.com/halkeye)
@@ -191,6 +199,7 @@ and provided thanks to the work of the following contributors:
* [treby](https://github.com/treby)
* [jpdevries](https://github.com/jpdevries)
* [gdpelican](https://github.com/gdpelican)
+* [pbzweihander](https://github.com/pbzweihander)
* [MonaLisaOverrdrive](https://github.com/MonaLisaOverrdrive)
* [Kurtis Rainbolt-Greene](mailto:me@kurtisrainboltgreene.name)
* [panarom](https://github.com/panarom)
@@ -201,7 +210,6 @@ and provided thanks to the work of the following contributors:
* [pierreozoux](https://github.com/pierreozoux)
* [qguv](https://github.com/qguv)
* [Ram Lmn](mailto:ramlmn@users.noreply.github.com)
-* [rgroothuijsen](https://github.com/rgroothuijsen)
* [Sascha](mailto:sascha@serenitylabs.cloud)
* [harukasan](https://github.com/harukasan)
* [stamak](https://github.com/stamak)
@@ -217,11 +225,14 @@ and provided thanks to the work of the following contributors:
* [chr-1x](https://github.com/chr-1x)
* [esetomo](https://github.com/esetomo)
* [foxiehkins](https://github.com/foxiehkins)
+* [gol-cha](https://github.com/gol-cha)
* [highemerly](https://github.com/highemerly)
* [hoodie](mailto:hoodiekitten@outlook.com)
* [kaiyou](https://github.com/kaiyou)
* [007lva](https://github.com/007lva)
* [luzi82](https://github.com/luzi82)
+* [prplecake](https://github.com/prplecake)
+* [duxovni](https://github.com/duxovni)
* [slice](https://github.com/slice)
* [tmm576](https://github.com/tmm576)
* [unsmell](mailto:unsmell@users.noreply.github.com)
@@ -251,25 +262,27 @@ and provided thanks to the work of the following contributors:
* [cdutson](https://github.com/cdutson)
* [farlistener](https://github.com/farlistener)
* [baby-gnu](https://github.com/baby-gnu)
-* [danieljakots](https://github.com/danieljakots)
* [divergentdave](https://github.com/divergentdave)
* [DavidLibeau](https://github.com/DavidLibeau)
* [dmerejkowsky](https://github.com/dmerejkowsky)
* [ddevault](https://github.com/ddevault)
+* [emilyst](https://github.com/emilyst)
+* [consideRatio](https://github.com/consideRatio)
* [Fjoerfoks](https://github.com/Fjoerfoks)
* [fmauNeko](https://github.com/fmauNeko)
* [gloaec](https://github.com/gloaec)
* [unstabler](https://github.com/unstabler)
* [potato4d](https://github.com/potato4d)
* [h-izumi](https://github.com/h-izumi)
-* [HolgerHuo](https://github.com/HolgerHuo)
* [ErikXXon](https://github.com/ErikXXon)
* [ian-kelling](https://github.com/ian-kelling)
* [eltociear](https://github.com/eltociear)
* [immae](https://github.com/immae)
* [J0WI](https://github.com/J0WI)
-* [vahnj](https://github.com/vahnj)
+* [koboldunderlord](https://github.com/koboldunderlord)
* [foozmeat](https://github.com/foozmeat)
+* [jgsmith](https://github.com/jgsmith)
+* [raggi](https://github.com/raggi)
* [jasonrhodes](https://github.com/jasonrhodes)
* [Jason Snell](mailto:jason@newrelic.com)
* [jviide](https://github.com/jviide)
@@ -287,21 +300,25 @@ and provided thanks to the work of the following contributors:
* [Markus Amalthea Magnuson](mailto:markus.magnuson@gmail.com)
* [madmath03](https://github.com/madmath03)
* [mig5](https://github.com/mig5)
+* [mohe2015](https://github.com/mohe2015)
* [moritzheiber](https://github.com/moritzheiber)
* [Nathaniel Suchy](mailto:me@lunorian.is)
* [ndarville](https://github.com/ndarville)
* [NimaBoscarino](https://github.com/NimaBoscarino)
* [aquarla](https://github.com/aquarla)
* [Abzol](https://github.com/Abzol)
+* [unextro](https://github.com/unextro)
* [PatOnTheBack](https://github.com/PatOnTheBack)
* [xPaw](https://github.com/xPaw)
* [petzah](https://github.com/petzah)
* [PeterDaveHello](https://github.com/PeterDaveHello)
* [ignisf](https://github.com/ignisf)
+* [postmodern](https://github.com/postmodern)
* [lumenwrites](https://github.com/lumenwrites)
* [remram44](https://github.com/remram44)
* [sts10](https://github.com/sts10)
* [u1-liquid](https://github.com/u1-liquid)
+* [SISheogorath](https://github.com/SISheogorath)
* [rosylilly](https://github.com/rosylilly)
* [withshubh](https://github.com/withshubh)
* [sim6](https://github.com/sim6)
@@ -328,23 +345,23 @@ and provided thanks to the work of the following contributors:
* [bsky](mailto:me@imbsky.net)
* [codl](https://github.com/codl)
* [cpsdqs](https://github.com/cpsdqs)
+* [dogelover911](https://github.com/dogelover911)
* [barzamin](https://github.com/barzamin)
-* [gol-cha](https://github.com/gol-cha)
* [gunchleoc](https://github.com/gunchleoc)
* [fhalna](https://github.com/fhalna)
* [haoyayoi](https://github.com/haoyayoi)
+* [helloworldstack](https://github.com/helloworldstack)
* [ik11235](https://github.com/ik11235)
* [kawax](https://github.com/kawax)
* [shrft](https://github.com/shrft)
* [luigi](mailto:lvargas@rankia.com)
-* [luzpaz](https://github.com/luzpaz)
* [mbajur](https://github.com/mbajur)
* [matsurai25](https://github.com/matsurai25)
* [mecab](https://github.com/mecab)
* [nicobz25](https://github.com/nicobz25)
* [niwatori24](https://github.com/niwatori24)
* [noiob](https://github.com/noiob)
-* [oliverkeeble](https://github.com/oliverkeeble)
+* [oliverkeeble](mailto:oliverkeeble@users.noreply.github.com)
* [partev](https://github.com/partev)
* [pinfort](https://github.com/pinfort)
* [rbaumert](https://github.com/rbaumert)
@@ -360,7 +377,7 @@ and provided thanks to the work of the following contributors:
* [clarfonthey](https://github.com/clarfonthey)
* [cygnan](https://github.com/cygnan)
* [Awea](https://github.com/Awea)
-* [eai04191](https://github.com/eai04191)
+* [single-right-quote](https://github.com/single-right-quote)
* [8398a7](https://github.com/8398a7)
* [857b](https://github.com/857b)
* [insom](https://github.com/insom)
@@ -373,9 +390,10 @@ and provided thanks to the work of the following contributors:
* [unleashed](https://github.com/unleashed)
* [alxrcs](https://github.com/alxrcs)
* [console-cowboy](https://github.com/console-cowboy)
+* [Saiv46](https://github.com/Saiv46)
* [Alkarex](https://github.com/Alkarex)
* [a2](https://github.com/a2)
-* [alfiedotwtf](https://github.com/alfiedotwtf)
+* [Alfie John](mailto:33c6c91f3bb4a391082e8a29642cafaf@alfie.wtf)
* [0xa](https://github.com/0xa)
* [ashpieboop](https://github.com/ashpieboop)
* [virtualpain](https://github.com/virtualpain)
@@ -391,24 +409,34 @@ and provided thanks to the work of the following contributors:
* [orlea](https://github.com/orlea)
* [armandfardeau](https://github.com/armandfardeau)
* [raboof](https://github.com/raboof)
+* [v-aisac](https://github.com/v-aisac)
+* [gi-yt](https://github.com/gi-yt)
+* [boahc077](https://github.com/boahc077)
* [aldatsa](https://github.com/aldatsa)
* [jumbosushi](https://github.com/jumbosushi)
* [acuteaura](https://github.com/acuteaura)
* [ayumin](https://github.com/ayumin)
* [bzg](https://github.com/bzg)
* [BastienDurel](https://github.com/BastienDurel)
+* [bearice](https://github.com/bearice)
* [li-bei](https://github.com/li-bei)
+* [hardillb](https://github.com/hardillb)
* [Benedikt Geißler](mailto:benedikt@g5r.eu)
* [BenisonSebastian](https://github.com/BenisonSebastian)
* [Blake](mailto:blake.barnett@postmates.com)
* [Brad Janke](mailto:brad.janke@gmail.com)
+* [braydofficial](https://github.com/braydofficial)
* [bclindner](https://github.com/bclindner)
* [brycied00d](https://github.com/brycied00d)
* [carlosjs23](https://github.com/carlosjs23)
+* [WyriHaximus](https://github.com/WyriHaximus)
* [cgxxx](https://github.com/cgxxx)
* [kibitan](https://github.com/kibitan)
+* [cdzombak](https://github.com/cdzombak)
* [chrisheninger](https://github.com/chrisheninger)
* [chris-martin](https://github.com/chris-martin)
+* [offbyone](https://github.com/offbyone)
+* [cclauss](https://github.com/cclauss)
* [DoubleMalt](https://github.com/DoubleMalt)
* [Moosh-be](https://github.com/Moosh-be)
* [cchoi12](https://github.com/cchoi12)
@@ -417,6 +445,8 @@ and provided thanks to the work of the following contributors:
* [csu](https://github.com/csu)
* [kklleemm](https://github.com/kklleemm)
* [colindean](https://github.com/colindean)
+* [CommanderRoot](https://github.com/CommanderRoot)
+* [connorshea](https://github.com/connorshea)
* [DeeUnderscore](https://github.com/DeeUnderscore)
* [dachinat](https://github.com/dachinat)
* [Daggertooth](mailto:dev@monsterpit.net)
@@ -428,35 +458,40 @@ and provided thanks to the work of the following contributors:
* [dar5hak](https://github.com/dar5hak)
* [kant](https://github.com/kant)
* [maxolasersquad](https://github.com/maxolasersquad)
-* [singingwolfboy](https://github.com/singingwolfboy)
-* [caldwell](https://github.com/caldwell)
-* [davidcelis](https://github.com/davidcelis)
-* [davefp](https://github.com/davefp)
-* [hannahwhy](https://github.com/hannahwhy)
-* [debanshuk](https://github.com/debanshuk)
-* [mascali33](https://github.com/mascali33)
-* [DerekNonGeneric](https://github.com/DerekNonGeneric)
-* [dblandin](https://github.com/dblandin)
-* [Aranaur](https://github.com/Aranaur)
-* [dtschust](https://github.com/dtschust)
-* [Dryusdan](https://github.com/Dryusdan)
-* [d3vgru](https://github.com/d3vgru)
-* [Elizafox](https://github.com/Elizafox)
-* [enewhuis](https://github.com/enewhuis)
-* [ericblade](https://github.com/ericblade)
-* [mikoim](https://github.com/mikoim)
-* [espenronnevik](https://github.com/espenronnevik)
+* [David Baumgold](mailto:david@davidbaumgold.com)
+* [David Caldwell](mailto:david+github@porkrind.org)
+* [David Celis](mailto:me@davidcel.is)
+* [David Hewitt](mailto:davidmhewitt@users.noreply.github.com)
+* [David Underwood](mailto:davefp@gmail.com)
+* [David Yip](mailto:yipdw@member.fsf.org)
+* [Debanshu Kundu](mailto:debanshu.kundu@joshtechnologygroup.com)
+* [Denis Teyssier](mailto:admin@mascali.ovh)
+* [Derek Lewis](mailto:derekcecillewis@gmail.com)
+* [Devon Blandin](mailto:dblandin@gmail.com)
+* [Drew Gates](mailto:aranaur@users.noreply.github.com)
+* [Drew Schuster](mailto:dtschust@gmail.com)
+* [Dryusdan](mailto:dryusdan@dryusdan.fr)
+* [Eai](mailto:eai@mizle.net)
+* [Ed Knutson](mailto:knutsoned@gmail.com)
+* [Effy Elden](mailto:effy@effy.space)
+* [Elizabeth Myers](mailto:elizabeth@interlinked.me)
+* [Eric](mailto:enewhuis@gmail.com)
+* [Eric Blade](mailto:blade.eric@gmail.com)
+* [Eshin Kunishima](mailto:mikoim@users.noreply.github.com)
+* [Espen Rønnevik](mailto:espen@ronnevik.net)
* [Expenses](mailto:expenses@airmail.cc)
-* [fabianonline](https://github.com/fabianonline)
-* [shello](https://github.com/shello)
-* [Finariel](https://github.com/Finariel)
-* [siuying](https://github.com/siuying)
-* [zoc](https://github.com/zoc)
-* [fwenzel](https://github.com/fwenzel)
-* [gabrielrumiranda](https://github.com/gabrielrumiranda)
-* [GenbuHase](https://github.com/GenbuHase)
-* [nilsding](https://github.com/nilsding)
-* [hattori6789](https://github.com/hattori6789)
+* [Fabian Schlenz](mailto:mail@fabianonline.de)
+* [Faye Duxovni](mailto:duxovni@duxovni.org)
+* [Filipe Rodrigues](mailto:shello@shello.org)
+* [Finariel](mailto:finariel@gmail.com)
+* [Francis Chong](mailto:francis@ignition.hk)
+* [Franck Zoccolo](mailto:franck@zoccolo.com)
+* [Fred Wenzel](mailto:fwenzel@users.noreply.github.com)
+* [Gabriel Rubens](mailto:gabrielrumiranda@gmail.com)
+* [Gaelan Steele](mailto:gbs@canishe.com)
+* [Genbu Hase](mailto:hasegenbu@gmail.com)
+* [Georg Gadinger](mailto:nilsding@nilsding.org)
+* [George Hattori](mailto:hattori6789@users.noreply.github.com)
* [Gergely Nagy](mailto:algernon@users.noreply.github.com)
* [Giuseppe Pignataro](mailto:rogepix@gmail.com)
* [Greg V](mailto:greg@unrelenting.technology)
@@ -466,7 +501,9 @@ and provided thanks to the work of the following contributors:
* [György Nádudvari](mailto:reedcourty@users.noreply.github.com)
* [HIKARU KOBORI](mailto:hk.uec.univ@gmail.com)
* [Haelwenn Monnier](mailto:lanodan@users.noreply.github.com)
+* [Hampton Lintorn-Catlin](mailto:hcatlin@gmail.com)
* [Harmon](mailto:harmon758@gmail.com)
+* [Hayden](mailto:contact@winisreallybored.com)
* [HellPie](mailto:hellpie@users.noreply.github.com)
* [Herbert Kagumba](mailto:habukagumba@gmail.com)
* [Hiroe Jun](mailto:jun.hiroe@gmail.com)
@@ -479,6 +516,7 @@ and provided thanks to the work of the following contributors:
* [Ian McDowell](mailto:me@ianmcdowell.net)
* [Iijima Yasushi](mailto:kurage.cc@gmail.com)
* [Ingo Blechschmidt](mailto:iblech@web.de)
+* [Irie Aoi](mailto:eai@mizle.net)
* [J Yeary](mailto:usbsnowcrash@users.noreply.github.com)
* [Jack Michaud](mailto:jack-michaud@users.noreply.github.com)
* [Jakub Mendyk](mailto:jakubmendyk.szkola@gmail.com)
@@ -493,6 +531,7 @@ and provided thanks to the work of the following contributors:
* [Jo Decker](mailto:trolldecker@users.noreply.github.com)
* [Joan Montané](mailto:jmontane@users.noreply.github.com)
* [Joe](mailto:401283+htmlbyjoe@users.noreply.github.com)
+* [Joe Friedl](mailto:stuff@joefriedl.net)
* [Jonathan Klee](mailto:klee.jonathan@gmail.com)
* [Jordan Guerder](mailto:jguerder@fr.pulseheberg.net)
* [Joseph Mingrone](mailto:jehops@users.noreply.github.com)
@@ -502,6 +541,7 @@ and provided thanks to the work of the following contributors:
* [Julien](mailto:tiwy57@users.noreply.github.com)
* [Julien Deswaef](mailto:juego@requiem4tv.com)
* [June Sallou](mailto:jnsll@users.noreply.github.com)
+* [Justin Thomas](mailto:justin@jdt.io)
* [Jérémy Benoist](mailto:j0k3r@users.noreply.github.com)
* [KEINOS](mailto:github@keinos.com)
* [Kairui Song | 宋恺睿](mailto:ryncsn@gmail.com)
@@ -522,6 +562,7 @@ and provided thanks to the work of the following contributors:
* [Mantas](mailto:mistermantas@users.noreply.github.com)
* [Mareena Kunjachan](mailto:mareenakunjachan@gmail.com)
* [Marek Lach](mailto:marek.brohatwack.lach@gmail.com)
+* [Markus Petzsch](mailto:markus@petzsch.eu)
* [Markus R](mailto:wirehack7@users.noreply.github.com)
* [Marty McGuire](mailto:schmartissimo@gmail.com)
* [Marvin Kopf](mailto:marvinkopf@posteo.de)
@@ -531,12 +572,15 @@ and provided thanks to the work of the following contributors:
* [Mathias B](mailto:10813340+mathias-b@users.noreply.github.com)
* [Mathieu Brunot](mailto:mb.mathieu.brunot@gmail.com)
* [Matt](mailto:matt-auckland@users.noreply.github.com)
+* [Matt Corallo](mailto:649246+thebluematt@users.noreply.github.com)
* [Matt Sweetman](mailto:webroo@gmail.com)
+* [Matthias Bethke](mailto:matthias@towiski.de)
* [Matthias Beyer](mailto:mail@beyermatthias.de)
* [Matthias Jouan](mailto:matthias.jouan@gmail.com)
* [Matthieu Paret](mailto:matthieuparet69@gmail.com)
* [Maxime BORGES](mailto:maxime.borges@gmail.com)
* [Mayu Laierlence](mailto:minacle@live.com)
+* [Meisam](mailto:39205857+mftabriz@users.noreply.github.com)
* [Michael Deeb](mailto:michaeldeeb@me.com)
* [Michael Vieira](mailto:dtox94@gmail.com)
* [Michel](mailto:michel@cyweo.com)
@@ -558,6 +602,7 @@ and provided thanks to the work of the following contributors:
* [Nanamachi](mailto:town7.haruki@gmail.com)
* [Nathaniel Ekoniak](mailto:nekoniak@ennate.tech)
* [NecroTechno](mailto:necrotechno@riseup.net)
+* [Nicholas La Roux](mailto:larouxn@gmail.com)
* [Nick Gerakines](mailto:nick@gerakines.net)
* [Nicolai von Neudeck](mailto:nicolai@vonneudeck.com)
* [Ninetailed](mailto:ninetailed@gmail.com)
@@ -575,18 +620,25 @@ and provided thanks to the work of the following contributors:
* [PatrickRWells](mailto:32802366+patrickrwells@users.noreply.github.com)
* [Paul](mailto:naydex.mc+github@gmail.com)
* [Pete Keen](mailto:pete@petekeen.net)
+* [Pierre Bourdon](mailto:delroth@gmail.com)
* [Pierre-Morgan Gate](mailto:pgate@users.noreply.github.com)
* [Ratmir Karabut](mailto:rkarabut@sfmodern.ru)
* [Reto Kromer](mailto:retokromer@users.noreply.github.com)
+* [Rob Petti](mailto:rob.petti@gmail.com)
* [Rob Watson](mailto:rfwatson@users.noreply.github.com)
+* [Robert Laurenz](mailto:8169746+laurenzcodes@users.noreply.github.com)
* [Rohan Sharma](mailto:i.am.lone.survivor@protonmail.com)
+* [Roni Laukkarinen](mailto:roni@laukkarinen.info)
* [Ryan Freebern](mailto:ryan@freebern.org)
* [Ryan Wade](mailto:ryan.wade@protonmail.com)
* [Ryo Kajiwara](mailto:kfe-fecn6.prussian@s01.info)
* [S.H](mailto:gamelinks007@gmail.com)
+* [SJang1](mailto:git@sjang.dev)
* [Sadiq Saif](mailto:staticsafe@users.noreply.github.com)
* [Sam Hewitt](mailto:hewittsamuel@gmail.com)
+* [Samuel Kaiser](mailto:sk22@mailbox.org)
* [Sara Aimée Smiseth](mailto:51710585+sarasmiseth@users.noreply.github.com)
+* [Sara Golemon](mailto:pollita@php.net)
* [Satoshi KOJIMA](mailto:skoji@mac.com)
* [ScienJus](mailto:i@scienjus.com)
* [Scott Larkin](mailto:scott@codeclimate.com)
@@ -607,6 +659,7 @@ and provided thanks to the work of the following contributors:
* [Spanky](mailto:2788886+spankyworks@users.noreply.github.com)
* [Stanislas](mailto:stanislas.lange@pm.me)
* [StefOfficiel](mailto:pichard.stephane@free.fr)
+* [Stefano Pigozzi](mailto:ste.pigozzi@gmail.com)
* [Steven Tappert](mailto:admin@dark-it.net)
* [Stéphane Guillou](mailto:stephane.guillou@member.fsf.org)
* [Su Yang](mailto:soulteary@users.noreply.github.com)
@@ -619,13 +672,16 @@ and provided thanks to the work of the following contributors:
* [TakesxiSximada](mailto:takesxi.sximada@gmail.com)
* [Tao Bror Bojlén](mailto:brortao@users.noreply.github.com)
* [Taras Gogol](mailto:taras2358@gmail.com)
+* [The Stranjer](mailto:791672+thestranjer@users.noreply.github.com)
* [TheInventrix](mailto:theinventrix@users.noreply.github.com)
* [TheMainOne](mailto:50847364+theevilskeleton@users.noreply.github.com)
* [Thomas Alberola](mailto:thomas@needacoffee.fr)
+* [Thomas Citharel](mailto:github@tcit.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)
+* [Tony Jiang](mailto:yujiang99@gmail.com)
* [Treyssat-Vincent Nino](mailto:treyssatvincent@users.noreply.github.com)
* [Truong Nguyen](mailto:truongnmt.dev@gmail.com)
* [Udo Kramer](mailto:optik@fluffel.io)
@@ -634,6 +690,7 @@ and provided thanks to the work of the following contributors:
* [Ushitora Anqou](mailto:ushitora_anqou@yahoo.co.jp)
* [Valentin Lorentz](mailto:progval+git@progval.net)
* [Vladimir Mincev](mailto:vladimir@canicinteractive.com)
+* [Vyr Cossont](mailto:vyrcossont@users.noreply.github.com)
* [Waldir Pimenta](mailto:waldyrious@gmail.com)
* [Wenceslao Páez Chávez](mailto:wcpaez@gmail.com)
* [Wesley Ellis](mailto:tahnok@gmail.com)
@@ -648,10 +705,12 @@ and provided thanks to the work of the following contributors:
* [YaQ](mailto:i_k_o_m_a_7@yahoo.co.jp)
* [Yanaken](mailto:yanakend@gmail.com)
* [Yann Klis](mailto:yann.klis@gmail.com)
+* [Yarden Shoham](mailto:hrsi88@gmail.com)
* [Yağızhan](mailto:35808275+yagizhan49@users.noreply.github.com)
* [Yeechan Lu](mailto:wz.bluesnow@gmail.com)
* [Your Name](mailto:lorenzd@gmail.com)
* [Yusuke Abe](mailto:moonset20@gmail.com)
+* [Zach Flanders](mailto:zachflanders@gmail.com)
* [Zach Neill](mailto:neillz@berea.edu)
* [Zachary Spector](mailto:logicaldash@gmail.com)
* [ZiiX](mailto:ziix@users.noreply.github.com)
@@ -666,8 +725,8 @@ and provided thanks to the work of the following contributors:
* [chrolis](mailto:chrolis@users.noreply.github.com)
* [cormo](mailto:cormorant2+github@gmail.com)
* [d0p1](mailto:dopi-sama@hush.com)
-* [dogelover911](mailto:84288771+dogelover911@users.noreply.github.com)
* [dxwc](mailto:dxwc@users.noreply.github.com)
+* [eai04191](mailto:eai@mizle.net)
* [evilny0](mailto:evilny0@moomoocamp.net)
* [febrezo](mailto:felixbrezo@gmail.com)
* [fsubal](mailto:fsubal@users.noreply.github.com)
@@ -678,7 +737,6 @@ and provided thanks to the work of the following contributors:
* [hakoai](mailto:hk--76@qa2.so-net.ne.jp)
* [haosbvnker](mailto:github@chaosbunker.com)
* [heguro](mailto:65112898+heguro@users.noreply.github.com)
-* [helloworldstack](mailto:66512512+helloworldstack@users.noreply.github.com)
* [ichi_i](mailto:51489410+ichi-i@users.noreply.github.com)
* [isati](mailto:phil@juchnowi.cz)
* [jacob](mailto:jacobherringtondeveloper@gmail.com)
@@ -688,15 +746,18 @@ and provided thanks to the work of the following contributors:
* [jooops](mailto:joops@autistici.org)
* [jukper](mailto:jukkaperanto@gmail.com)
* [jumoru](mailto:jumoru@mailbox.org)
+* [k.bigwheel (kazufumi nishida)](mailto:k.bigwheel+eng@gmail.com)
* [kaias1jp](mailto:kaias1jp@gmail.com)
* [karlyeurl](mailto:karl.yeurl@gmail.com)
* [kawaguchi](mailto:jiikko@users.noreply.github.com)
* [kedama](mailto:32974885+kedamadq@users.noreply.github.com)
+* [keiya](mailto:keiya_21@yahoo.co.jp)
* [kuro5hin](mailto:rusty@kuro5hin.org)
* [leo60228](mailto:leo@60228.dev)
* [matildepark](mailto:matilde.park@pm.me)
* [maxypy](mailto:maxime@mpigou.fr)
* [mhe](mailto:mail@marcus-herrmann.com)
+* [mickkael](mailto:19755421+mickkael@users.noreply.github.com)
* [mike castleman](mailto:m@mlcastle.net)
* [mimikun](mailto:dzdzble_effort_311@outlook.jp)
* [mohemohe](mailto:mohemohe@users.noreply.github.com)
@@ -707,9 +768,11 @@ and provided thanks to the work of the following contributors:
* [notozeki](mailto:notozeki@users.noreply.github.com)
* [ntl-purism](mailto:57806346+ntl-purism@users.noreply.github.com)
* [nzws](mailto:git-yuzu@svk.jp)
+* [pea-sys](mailto:49807271+pea-sys@users.noreply.github.com)
* [potpro](mailto:pptppctt@gmail.com)
* [proxy](mailto:51172302+3n-k1@users.noreply.github.com)
* [rch850](mailto:rich850@gmail.com)
+* [rcombs](mailto:rcombs@rcombs.me)
* [roikale](mailto:roikale@users.noreply.github.com)
* [rysiekpl](mailto:rysiek@hackerspace.pl)
* [sasanquaneuf](mailto:sasanquaneuf@gmail.com)
@@ -726,13 +789,13 @@ and provided thanks to the work of the following contributors:
* [tmyt](mailto:shigure@refy.net)
* [trevDev()](mailto:trev@trevdev.ca)
* [tsia](mailto:github@tsia.de)
+* [txt-file](mailto:44214237+txt-file@users.noreply.github.com)
* [utam0k](mailto:k0ma@utam0k.jp)
* [vpzomtrrfrt](mailto:vpzomtrrfrt@gmail.com)
* [walfie](mailto:walfington@gmail.com)
* [y-temp4](mailto:y.temp4@gmail.com)
* [ymmtmdk](mailto:ymmtmdk@gmail.com)
* [yoshipc](mailto:yoooo@yoshipc.net)
-* [zunda](mailto:zundan@gmail.com)
* [Özcan Zafer AYAN](mailto:ozcanzaferayan@gmail.com)
* [ばん](mailto:detteiu0321@gmail.com)
* [ふるふる](mailto:frfs@users.noreply.github.com)
@@ -752,599 +815,951 @@ This document is provided for informational purposes only. Since it is only upda
Following people have contributed to translation of Mastodon:
- GunChleoc (*Scottish Gaelic*)
-- ケインツロ 👾 (KNTRO) (*Spanish, Argentina*)
-- Sveinn í Felli (sveinki) (*Icelandic*)
+- ケインツロ ⚧️👾🛸 (KNTRO) (*Spanish, Argentina*)
- Hồ Nhất Duy (honhatduy) (*Vietnamese*)
+- Sveinn í Felli (sveinki) (*Icelandic*)
+- Kristaps (Kristaps_M) (*Latvian*)
+- NCAA (*Danish, French*)
- Zoltán Gera (gerazo) (*Hungarian*)
-- Kristaps_M (*Latvian*)
-- NCAA (*French, Danish*)
-- adrmzz (*Sardinian*)
-- Xosé M. (XoseM) (*Spanish, Galician*)
-- Ramdziana F Y (rafeyu) (*Indonesian*)
-- Jeong Arm (Kjwon15) (*Spanish, Japanese, Korean, Esperanto*)
+- ghose (XoseM) (*Galician, Spanish*)
+- Jeong Arm (Kjwon15) (*Korean, Esperanto, Japanese, Spanish*)
- Emanuel Pina (emanuelpina) (*Portuguese*)
-- qezwan (*Persian, Sorani (Kurdish)*)
-- Besnik_b (*Albanian*)
-- ButterflyOfFire (BoFFire) (*French, Arabic, Kabyle*)
+- Reyzadren (*Ido, Malay*)
- Thai Localization (thl10n) (*Thai*)
+- Besnik_b (*Albanian*)
+- Joene (joenepraat) (*Dutch*)
- Cyax (Cyaxares) (*Kurmanji (Kurdish)*)
+- adrmzz (*Sardinian*)
+- Ramdziana F Y (rafeyu) (*Indonesian*)
+- xatier (*Chinese Traditional, Chinese Traditional, Hong Kong*)
+- qezwan (*Sorani (Kurdish), Persian*)
+- spla (*Catalan, Spanish*)
+- ButterflyOfFire (BoFFire) (*Arabic, French, Kabyle*)
+- Martin (miles) (*Slovenian*)
+- නාමල් ජයසිංහ (nimnaya) (*Sinhala*)
+- Asier Iturralde Sarasola (aldatsa) (*Basque*)
+- Ondřej Pokorný (unextro) (*Czech*)
+- Roboron (*Spanish*)
- taicv (*Vietnamese*)
+- koyu (*German*)
- Daniele Lira Mereb (danilmereb) (*Portuguese, Brazilian*)
-- spla (*Spanish, Catalan*)
+- T. E. Kalaycı (tekrei) (*Turkish*)
- Evert Prants (IcyDiamond) (*Estonian*)
-- koyu (*German*)
-- Alix Rossi (palindromordnilap) (*French, Esperanto, Corsican*)
-- Joene (joenepraat) (*Dutch*)
+- Yair Mahalalel (yairm) (*Hebrew*)
+- Ihor Hordiichuk (ihor_ck) (*Ukrainian*)
+- Alessandro Levati (Oct326) (*Italian*)
+- Kimmo Kujansuu (mrkujansuu) (*Finnish*)
+- Alix Rossi (palindromordnilap) (*Corsican, Esperanto, French*)
+- Danial Behzadi (danialbehzadi) (*Persian*)
- stan ionut (stanionut12) (*Romanian*)
- Mastodon 中文译者 (mastodon-linguist) (*Chinese Simplified*)
- Kristijan Tkalec (lapor) (*Slovenian*)
-- Danial Behzadi (danialbehzadi) (*Persian*)
-- Asier Iturralde Sarasola (aldatsa) (*Basque*)
+Alexander Sorokin (Brawaru) (*Russian, Vietnamese, Swedish, Portuguese, Tamil, Kabyle, Polish, Italian, Catalan, Armenian, Hungarian, Albanian, Greek, Galician, Korean, Ukrainian, German, Danish, French*)
- ManeraKai (*Arabic*)
- мачко (ma4ko) (*Bulgarian*)
-- Roboron (*Spanish*)
-- Alessandro Levati (Oct326) (*Italian*)
-- xatier (*Chinese Traditional, Chinese Traditional, Hong Kong*)
-- Ondřej Pokorný (unextro) (*Czech*)
-- Alexander Sorokin (Brawaru) (*French, Catalan, Danish, German, Greek, Hungarian, Armenian, Korean, Portuguese, Russian, Albanian, Swedish, Ukrainian, Vietnamese, Galician*)
- kamee (*Armenian*)
-- Michal Stanke (mstanke) (*Czech*)
+- Yamagishi Kazutoshi (ykzts) (*Japanese, Icelandic, Sorani (Kurdish), Albanian, Vietnamese, Chinese Simplified*)
+- Takeçi (polygoat) (*French, Italian*)
+- REMOVED_USER (*Czech*)
- borys_sh (*Ukrainian*)
- Imre Kristoffer Eilertsen (DandelionSprout) (*Norwegian*)
-- yeft (*Chinese Traditional, Chinese Traditional, Hong Kong*)
+- Marek Ľach (mareklach) (*Slovak, Polish*)
+- yeft (*Chinese Traditional, Hong Kong, Chinese Traditional*)
+- D. Cederberg (cederberget) (*Swedish*)
- Miguel Mayol (mitcoes) (*Spanish, Catalan*)
-- Marek Ľach (mareklach) (*Polish, Slovak*)
+- enolp (*Asturian*)
- Manuel Viens (manuelviens) (*French*)
-- Kimmo Kujansuu (mrkujansuu) (*Finnish*)
+- cybergene (*Japanese*)
+- REMOVED_USER (*Turkish*)
+- xpil (*Polish, Scottish Gaelic*)
+- Balázs Meskó (mesko.balazs) (*Hungarian, Czech*)
- Koala Yeung (yookoala) (*Chinese Traditional, Hong Kong*)
-- enolp (*Asturian*)
- Osoitz (*Basque*)
-- Peterandre (*Norwegian, Norwegian Nynorsk*)
-- tzium (*Sardinian*)
+- Amir Rubinstein - TAU (AmirrTAU) (*Hebrew, Indonesian*)
- Maya Minatsuki (mayaeh) (*Japanese*)
-- Mélanie Chauvel (ariasuni) (*French, Arabic, Czech, German, Greek, Hungarian, Slovenian, Ukrainian, Chinese Simplified, Portuguese, Brazilian, Persian, Norwegian Nynorsk, Esperanto, Breton, Corsican, Sardinian, Kabyle*)
-- T. E. Kalaycı (tekrei) (*Turkish*)
-- Takeçi (polygoat) (*French, Italian*)
+- Peterandre (*Norwegian Nynorsk, Norwegian*)
+Mélanie Chauvel (ariasuni) (*French, Esperanto, Norwegian Nynorsk, Persian, Kabyle, Sardinian, Corsican, Breton, Portuguese, Brazilian, Arabic, Chinese Simplified, Ukrainian, Slovenian, Greek, German, Czech, Hungarian*)
+- tzium (*Sardinian*)
+- Diluns (*Occitan*)
- Galician Translator (Galician_translator) (*Galician*)
+- Marcin Mikołajczak (mkljczkk) (*Polish, Czech, Russian*)
+- Jeff Huang (s8321414) (*Chinese Traditional*)
+- Pixelcode (realpixelcode) (*German*)
+- Allen Zhong (AstroProfundis) (*Chinese Simplified*)
- lamnatos (*Greek*)
- Sean Young (assanges) (*Chinese Traditional*)
+- retiolus (*Catalan, French, Spanish*)
- tolstoevsky (*Russian*)
-- Ihor Hordiichuk (ihor_ck) (*Ukrainian*)
- Ali Demirtaş (alidemirtas) (*Turkish*)
-- Jasmine Cam Andrever (gourmas) (*Cornish*)
+- J. Cam Andrever-Wright (gourmas) (*Cornish*)
- coxde (*Chinese Simplified*)
+- Dremski (*Bulgarian*)
- gagik_ (*Armenian*)
- Masoud Abkenar (mabkenar) (*Persian*)
- arshat (*Kazakh*)
-- Marcin Mikołajczak (mkljczkk) (*Czech, Polish, Russian*)
-- Jeff Huang (s8321414) (*Chinese Traditional*)
+- Ira (seefood) (*Hebrew*)
+- Linerly (*Indonesian*)
- Blak Ouille (BlakOuille16) (*French*)
- e (diveedd) (*Kurmanji (Kurdish)*)
- Em St Cenydd (cancennau) (*Welsh*)
-- Diluns (*Occitan*)
+- Tigran (tigransimonyan) (*Armenian*)
+- Draacoun (*Portuguese, Brazilian*)
+- REMOVED_USER (*Turkish*)
- Nurul Azeera Hidayah @ Muhammad Nur Hidayat Yasuyoshi (MNH48.moe) (mnh48) (*Malay*)
-- Tagomago (tagomago) (*French, Spanish*)
-- Jurica (ahjk) (*Croatian*)
+- Tagomago (tagomago) (*Spanish, French*)
+- Ashun (ashune) (*Croatian*)
- Aditoo17 (*Czech*)
-- Tigran (tigransimonyan) (*Armenian*)
- vishnuvaratharajan (*Tamil*)
- pulmonarycosignerkindness (*Swedish*)
- calypsoopenmail (*French*)
-- cybergene (cyber-gene) (*Japanese*)
+- REMOVED_USER (*Kabyle*)
+- snerk (*Norwegian Nynorsk*)
+- Sebastian (SebastianBerlin) (*German*)
+- lisawe (*Norwegian*)
+- serratrad (*Catalan*)
- Bran_Ruz (*Breton*)
+- ViktorOn (*Russian, Danish*)
- Gearguy (*Finnish*)
+- Andi Chandler (andibing) (*English, United Kingdom*)
+- Tor Egil Hoftun Kvæstad (Taloran) (*Norwegian Nynorsk*)
- GiorgioHerbie (*Italian*)
-- Balázs Meskó (mesko.balazs) (*Czech, Hungarian*)
-- Martin (miles) (*Slovenian*)
+- හෙළබස සමූහය (HelaBasa) (*Sinhala*)
+- kat (katktv) (*Ukrainian, Russian*)
+- Yi-Jyun Pan (pan93412) (*Chinese Traditional*)
+- Fjoerfoks (fryskefirefox) (*Frisian, Dutch*)
+- Eshagh (eshagh79) (*Persian*)
- regulartranslator (*Portuguese, Brazilian*)
- Saederup92 (*Danish*)
-- ozzii (*French, Serbian (Cyrillic)*)
+- ozzii (Serbian (Cyrillic), French)
- Irfan (Irfan_Radz) (*Malay*)
-- Yi-Jyun Pan (pan93412) (*Chinese Traditional*)
- ClearlyClaire (*French, Icelandic*)
+- Sokratis Alichanidis (alichani) (*Greek*)
+- Jiří Podhorecký (trendspotter) (*Czech*)
- Akarshan Biswas (biswasab) (*Bengali, Sanskrit*)
+- Robert Wolniak (Szkodnix) (*Polish*)
+- Jan Lindblom (janlindblom) (*Swedish*)
+- Dewi (Unkorneg) (*Breton, French*)
- Kristoffer Grundström (Umeaboy) (*Swedish*)
- Rafael H L Moretti (Moretti) (*Portuguese, Brazilian*)
- d5Ziif3K (*Ukrainian*)
-- හෙළබස (HelaBasa) (*Sinhala*)
-- xpil (*Polish*)
-- Rojdayek (*Kurmanji (Kurdish)*)
+- Nemu (Dormemulo) (*Esperanto, French, Italian, Ido, Afrikaans*)
+- Johan Mynhardt (johanmynhardt) (*Afrikaans*)
+- Rojdayek (Kurmanji (Kurdish))
+- REMOVED_USER (*Portuguese, Brazilian*)
+- GCardo (*Portuguese, Brazilian*)
- christalleras (*Norwegian Nynorsk*)
-- Allen Zhong (AstroProfundis) (*Chinese Simplified*)
-- Taloran (*Norwegian Nynorsk*)
-- Sokratis Alichanidis (alichani) (*Greek*)
+- diorama (*Italian*)
+- Jaz-Michael King (jazmichaelking) (*Welsh*)
- Catalina (catalina.st) (*Romanian*)
-- otrapersona (*Spanish, Spanish, Mexico*)
- Ryo (DrRyo) (*Korean*)
-- Mauzi (*German, Swedish*)
+- otrapersona (*Spanish, Mexico, Spanish*)
+- Frontier Translation Ltd. (frontier-translation) (*Chinese Simplified*)
+- Mauzi (*Swedish, German*)
+- Clopsy87 (*Italian*)
- atarashiako (*Chinese Simplified*)
- erictapen (*German*)
+- zhen liao (az0189re) (*Chinese Simplified*)
- 101010 (101010pl) (*Polish*)
-- Jaz-Michael King (jazmichaelking) (*Welsh*)
+- REMOVED_USER (*Norwegian*)
- axi (*Finnish*)
- silkevicious (*Italian*)
- Floxu (fredrikdim1) (*Norwegian Nynorsk*)
-- NadieAishi (*Spanish, Spanish, Mexico*)
+- Nic Dafis (nicdafis) (*Welsh*)
+- NadieAishi (*Spanish, Mexico, Spanish*)
+- 戸渡生野 (aomyouza2543) (*Thai*)
+- Tjipke van der Heide (vancha) (*Frisian*)
+- Erik Mogensen (mogsie) (*Norwegian*)
+- pomoch (*Chinese Traditional, Hong Kong*)
+- Alexandre Brito (alexbrito) (*Portuguese, Brazilian*)
- Bertil Hedkvist (Berrahed) (*Swedish*)
- William(ѕ)ⁿ (wmlgr) (*Spanish*)
-- Eshagh (eshagh79) (*Persian*)
- LNDDYL (*Chinese Traditional*)
+- tanketom (*Norwegian Nynorsk*)
- norayr (*Armenian*)
+- l3ycle (*German*)
+- strubbl (*German*)
- Satnam S Virdi (pika10singh) (*Punjabi*)
- Tiago Epifânio (tfve) (*Portuguese*)
- Mentor Gashi (mentorgashi.com) (*Albanian*)
+- Sid (autinerd1) (*Dutch, German*)
- carolinagiorno (*Portuguese, Brazilian*)
+- Em_i (emiliencoss) (*French*)
+- Liam O (liamoshan) (*Irish*)
- Hayk Khachatryan (brutusromanus123) (*Armenian*)
- Roby Thomas (roby.thomas) (*Malayalam*)
+- ThonyVezbe (*Breton*)
+- Percy (kecrily) (*Chinese Simplified*)
- Bharat Kumar (Marwari) (*Hindi*)
- Austra Muizniece (aus_m) (*Latvian*)
-- ThonyVezbe (*Breton*)
+- Urubu Lageano (urubulageano) (*Portuguese, Brazilian*)
- Just Spanish (7_7) (*Spanish, Mexico*)
- v4vachan (*Malayalam*)
- bilfri (*Danish*)
+- IamHappy (mrmx2013) (*Ukrainian*)
- dkdarshan760 (*Sanskrit*)
- Timur Seber (seber) (*Tatar*)
- Slimane Selyan AMIRI (SelyanKab) (*Kabyle*)
- VaiTon (*Italian*)
-- Vik (ViktorOn) (*Danish, Russian*)
- tykayn (*French*)
-- GCardo (*Portuguese, Brazilian*)
+- Abdulaziz Aljaber (kuwaitna) (*Arabic*)
- taoxvx (*Danish*)
-- Hrach Mkrtchyan (mhrach87) (*Armenian*)
+- Hrach Mkrtchyan (hrachmk) (*Armenian*)
- sabri (thetomatoisavegetable) (*Spanish, Spanish, Argentina*)
-- Dewi (Unkorneg) (*French, Breton*)
- CoelacanthusHex (*Chinese Simplified*)
- Rhys Harrison (rhedders) (*Esperanto*)
-- syncopams (*Chinese Simplified, Chinese Traditional, Chinese Traditional, Hong Kong*)
+- syncopams (*Chinese Traditional, Hong Kong, Chinese Traditional, Chinese Simplified*)
- SteinarK (*Norwegian Nynorsk*)
+- REMOVED_USER (*Standard Moroccan Tamazight*)
- Maxine B. Vågnes (vagnes) (*Norwegian, Norwegian Nynorsk*)
-- Hakim Oubouali (zenata1) (*Standard Moroccan Tamazight*)
+- Rikard Linde (rikardlinde) (*Swedish*)
- ahangarha (*Persian*)
- Lalo Tafolla (lalotafo) (*Spanish, Spanish, Mexico*)
-- dashersyed (*Urdu (Pakistan)*)
+- Larissa Cruz (larissacruz) (*Portuguese, Brazilian*)
+- dashersyed (Urdu (Pakistan))
+- camerongreer21 (*English, United Kingdom*)
+- REMOVED_USER (*Ukrainian*)
- Conight Wang (xfddwhh) (*Chinese Simplified*)
- liffon (*Swedish*)
- Damjan Dimitrioski (gnud) (*Macedonian*)
-- Rikard Linde (rikardlinde) (*Swedish*)
- rondnunes (*Portuguese, Brazilian*)
-- strubbl (*German*)
- PPNplus (*Thai*)
-- Frontier Translation Ltd. (frontier-translation) (*Chinese Simplified*)
+- Steven Ritchie (Steaph38) (*Scottish Gaelic*)
+- 游荡 (MamaShip) (*Chinese Simplified*)
+- Edward Navarro (EdwardNavarro) (*Spanish*)
- shioko (*Chinese Simplified*)
+- gnu-ewm (*Polish*)
- Kahina Mess (K_hina) (*Kabyle*)
+- Hexandcube (hexandcube) (*Polish*)
+- Scott Starkey (yekrats) (*Esperanto*)
- ZiriSut (*Kabyle*)
+- FreddyG (*Esperanto*)
+- mynameismonkey (*Welsh*)
- Groosha (groosha) (*Russian*)
-- Hexandcube (hexandcube) (*Polish*)
- Gwenn (Belvar) (*Breton*)
-- 游荡 (MamaShip) (*Chinese Simplified*)
- StanleyFrew (*French*)
-- mynameismonkey (*Welsh*)
-- Edward Navarro (EdwardNavarro) (*Spanish*)
+- cathalgarvey (*Irish*)
- Nikita Epifanov (Nikets) (*Russian*)
+- REMOVED_USER (*Finnish*)
- jaranta (*Finnish*)
- Slobodan Simić (Слободан Симић) (slsimic) (*Serbian (Cyrillic)*)
-- retiolus (*Catalan*)
-- iVampireSP (*Chinese Simplified, Chinese Traditional*)
+- iVampireSP (*Chinese Traditional, Chinese Simplified*)
- Felicia Jongleur (midsommar) (*Swedish*)
- Denys (dector) (*Ukrainian*)
- Mo_der Steven (SakuraPuare) (*Chinese Simplified*)
+- REMOVED_USER (*German*)
+- Kishin Sagume (kishinsagi) (*Chinese Simplified*)
+- bennepharaoh (*Chinese Simplified*)
- Vanege (*Esperanto*)
+- hibiya inemuri (hibiya) (*Korean*)
- Jess Rafn (therealyez) (*Danish*)
- Stasiek Michalski (hellcp) (*Polish*)
- dxwc (*Bengali*)
-- Filbert Salim (gamesbert6) (*Indonesian*)
+- Heran Membingung (heranmembingung) (*Indonesian*)
+- Parodper (*Galician*)
+- rbnval (*Catalan*)
- Liboide (*Spanish*)
+- hemnaren (*Norwegian Nynorsk*)
- jmontane (*Catalan*)
+- Andy Kleinert (AndyKl) (*German*)
- Chris Kay (chriskarasoulis) (*Greek*)
+- CrowdinBRUH (*Vietnamese*)
+- Rhoslyn Prys (Rhoslyn) (*Welsh*)
+- abidin toumi (Zet24) (*Arabic*)
- Johan Schiff (schyffel) (*Swedish*)
- Rex_sa (rex07) (*Arabic*)
+- amedcj (*Kurmanji (Kurdish)*)
- Arunmozhi (tecoholic) (*Tamil*)
- zer0-x (ZER0-X) (*Arabic*)
-- kat (katktv) (*Russian, Ukrainian*)
+- staticnoisexyz (*Czech*)
- Lauren Liberda (selfisekai) (*Polish*)
+- Michael Zeevi (maze88) (*Hebrew*)
- oti4500 (*Hungarian, Ukrainian*)
- Delta (Delta-Time) (*Japanese*)
-- Michael Zeevi (maze88) (*Hebrew*)
+- Marc Antoine Thevenet (MATsxm) (*French*)
+- AlexKoala (alexkoala) (*Korean*)
- SarfarazAhmed (*Urdu (Pakistan)*)
+- Ahmad Dakhlallah (MIUIArabia) (*Arabic*)
- Mats Gunnar Ahlqvist (goqbi) (*Swedish*)
- diazepan (*Spanish, Spanish, Argentina*)
+- Tiger:blank (tsagaanbar) (*Chinese Simplified*)
+- REMOVED_USER (*Chinese Simplified*)
- marzuquccen (*Kabyle*)
- atriix (*Swedish*)
+- Laur (melaur) (*Romanian*)
- VictorCorreia (victorcorreia1984) (*Afrikaans*)
- Remito (remitocat) (*Japanese*)
-- AlexKoala (alexkoala) (*Korean*)
- Juan José Salvador Piedra (JuanjoSalvador) (*Spanish*)
-- BurekzFinezt (*Serbian (Cyrillic)*)
+- REMOVED_USER (*Norwegian*)
- 森の子リスのミーコの大冒険 (Phroneris) (*Japanese*)
+- Gim_Garam (*Korean*)
+- BurekzFinezt (*Serbian (Cyrillic)*)
+- Pēteris Caune (cuu508) (*Latvian*)
- asnomgtu (*Hungarian*)
+- bendigeidfran (*Welsh*)
- SHeija (*Finnish*)
- Врабац (Slovorad) (*Serbian (Cyrillic)*)
- Dženan (Dzenan) (*Swedish*)
-- Jack R (isaac.97_WT) (*Spanish*)
+- Gabriel Beecham (lancet) (*Irish*)
- antonyho (*Chinese Traditional, Hong Kong*)
-- FreddyG (*Esperanto*)
-- andruhov (*Russian, Ukrainian*)
+- Jack R (isaac.97_WT) (*Spanish*)
+- Henrik Mattsson-Mårn (rchk) (*Swedish*)
+- Oguzhan Aydin (aoguzhan) (*Turkish*)
+- Soran730 (*Chinese Simplified*)
+- andruhov (*Ukrainian, Russian*)
+- 北䑓如法 (Nyoho) (*Japanese*)
- phena109 (*Chinese Traditional, Hong Kong*)
-- Aryamik Sharma (Aryamik) (*Swedish, Hindi*)
+- Aryamik Sharma (Aryamik) (*Hindi, Swedish*)
- Unmual (*Spanish*)
+- Tobias Bannert (toba) (*German*)
- Adrián Graña (alaris83) (*Spanish*)
-- cruz2020 (*Portuguese*)
- vpei (*Chinese Simplified*)
+- cruz2020 (*Portuguese*)
+- papapep (h9f2ycHh-ktOd6_Y) (*Catalan*)
+- Roj (roj1512) (*Sorani (Kurdish), Kurmanji (Kurdish)*)
- るいーね (ruine) (*Japanese*)
+- aujawindar (*Norwegian Nynorsk*)
+- irithys (*Chinese Simplified*)
- Sam Tux (imahbub) (*Bengali*)
- igordrozniak (*Polish*)
+- Johannes Nilsson (nlssn) (*Swedish*)
- Michał Sidor (michcioperz) (*Polish*)
- Isaac Huang (caasih) (*Chinese Traditional*)
- AW Unad (awcodify) (*Indonesian*)
- 1Alino (*Slovak*)
- Cutls (cutls) (*Japanese*)
-- Goudarz Jafari (Goudarz) (*Persian*)
-- Parodper (*Galician*)
+- Goudarz Jafari (GoudarzJafari) (*Persian*)
+- Daniel Strömholm (stromholm) (*Swedish*)
- 1 (Ipsumry) (*Spanish*)
- Falling Snowdin (tghgg) (*Vietnamese*)
+- Paulino Michelazzo (pmichelazzo) (*Portuguese, Brazilian*)
+- Y.Yamashiro (uist1idrju3i) (*Japanese*)
- Rasmus Lindroth (RasmusLindroth) (*Swedish*)
- Gianfranco Fronteddu (gianfro.gianfro) (*Sardinian*)
- Andrea Lo Iacono (niels0n) (*Italian*)
- fucsia (*Italian*)
- Vedran Serbu (SerenoXGen) (*Croatian*)
+- Raphael Das Gupta (das-g) (*Esperanto, German*)
+- yanchan09 (*Estonian*)
+- ainmeolai (*Irish*)
+- REMOVED_USER (*Norwegian*)
+- mian42 (*Bulgarian*)
- Kinshuk Sunil (kinshuksunil) (*Hindi*)
-- Ullas Joseph (ullasjoseph) (*Malayalam*)
- al_._ (*German, Russian*)
+- Ullas Joseph (ullasjoseph) (*Malayalam*)
+- sanoth (*Swedish*)
+- Aftab Alam (iaftabalam) (*Hindi*)
+- frumble (*German*)
+- juanda097 (juanda-097) (*Spanish*)
- Matthías Páll Gissurarson (icetritlo) (*Icelandic*)
-- Percy (kecrily) (*Chinese Simplified*)
-- Yu-Pai Liu (tedliou) (*Chinese Traditional*)
+- Russian Retro (retrograde) (*Russian*)
- KcKcZi (*Chinese Simplified*)
+- Yu-Pai Liu (tedliou) (*Chinese Traditional*)
- Amarin Cemthong (acitmaster) (*Thai*)
-- Johannes Nilsson (nlssn) (*Swedish*)
-- juanda097 (juanda-097) (*Spanish*)
+- Etinew (*Hebrew*)
- xsml (*Chinese Simplified*)
+- S.J. L. (samijuhanilii) (*Finnish*)
- Anunnakey (*Macedonian*)
- erikkemp (*Dutch*)
+- Tsl (muun) (*Chinese Simplified*)
+- Renato "Lond" Cerqueira (renatolond) (*Portuguese, Brazilian*)
+- Úna-Minh Kavanagh (yunitex) (*Irish*)
+- kongk (*Norwegian Nynorsk*)
- erikstl (*Esperanto*)
- twpenguin (*Chinese Traditional*)
+- JeremyStarTM (*German*)
- Po-chiang Chao (bobchao) (*Chinese Traditional*)
- Marcus Myge (mygg-priv) (*Norwegian*)
- Esther (esthermations) (*Portuguese*)
+- Jiri Grönroos (spammemoreplease) (*Finnish*)
- MadeInSteak (*Finnish*)
+- witoharmuth (*Swedish*)
+- MESHAL45 (*Arabic*)
+- mcdutchie (*Dutch*)
+- Michal Špondr (michalspondr) (*Czech*)
- t_aus_m (*German*)
-- serapolis (*Japanese, Chinese Simplified, Chinese Traditional, Chinese Traditional, Hong Kong*)
+- kaki7777 (*Japanese, Chinese Traditional*)
- Heimen Stoffels (Vistaus) (*Dutch*)
+- serapolis (*Chinese Traditional, Hong Kong, Chinese Traditional, Japanese, Chinese Simplified*)
- Rajarshi Guha (rajarshiguha) (*Bengali*)
+- Amir Reza (ElAmir) (*Persian*)
+- REMOVED_USER (*Norwegian*)
+- MohammadSaleh Kamyab (mskf1383) (*Persian*)
+- REMOVED_USER (*Romanian*)
- Gopal Sharma (gopalvirat) (*Hindi*)
+- Вероніка Някшу (pampushkaveronica) (*Russian, Romanian*)
- Linnéa (lesbian_subnet) (*Swedish*)
-- 北䑓如法 (Nyoho) (*Japanese*)
-- abidin toumi (Zet24) (*Arabic*)
-- Tofiq Abdula (Xwla) (*Sorani (Kurdish)*)
+- Valentin (HDValentin) (*German*)
+- dragnucs2 (*Arabic*)
- Carlos Solís (csolisr) (*Esperanto*)
-- Yamagishi Kazutoshi (ykzts) (*Japanese, Vietnamese, Icelandic, Sorani (Kurdish)*)
+- Tofiq Abdula (Xwla) (*Sorani (Kurdish)*)
+- halcek (*Slovak*)
+- Tobias Kunze (rixxian) (*German*)
- Parthan S Ramanujam (parthan) (*Tamil*)
- Kasper Nymand (KasperNymand) (*Danish*)
-- subram (*Turkish*)
- TS (morte) (*Finnish*)
-- SensDeViata (*Ukrainian*)
+- REMOVED_USER (*German*)
+- REMOVED_USER (*Basque*)
+- subram (*Turkish*)
+- Gudwin (*Spanish, Mexico, Spanish*)
- Ptrcmd (ptrcmd) (*Chinese Traditional*)
+- shmuelHal (*Hebrew*)
+- SensDeViata (*Ukrainian*)
- megaleo (*Portuguese, Brazilian*)
+- Acursen (*German*)
+- NurKai Kai (nurkaiyttv) (*German*)
+- Guttorm (ghveem) (*Norwegian Nynorsk*)
- SergioFMiranda (*Portuguese, Brazilian*)
-- hiroTS (*Chinese Traditional*)
+- Danni Lundgren (dannilundgren) (*Danish*)
- Vivek K J (Vivekkj) (*Malayalam*)
-- arielcostas3 (*Galician*)
+- hiroTS (*Chinese Traditional*)
+- teadesu (*Portuguese, Brazilian*)
+- petartrajkov (*Macedonian*)
+- Ariel Costas (arielcostas3) (*Galician*)
+- Ch. (sftblw) (*Korean*)
+- Rintan (*Japanese*)
+- Jair Henrique (jairhenrique) (*Portuguese, Brazilian*)
+- sorcun (*Turkish*)
+- filippodb (*Italian*)
- johne32rus23 (*Russian*)
-- AzureNya (*Chinese Simplified*)
- OctolinGamer (octolingamer) (*Portuguese, Brazilian*)
-- filippodb (*Italian*)
+- AzureNya (*Chinese Simplified*)
- Ram varma (ram4varma) (*Tamil*)
+- REMOVED_USER (Sorani (Kurdish))
+- REMOVED_USER (*Portuguese, Brazilian*)
+- seanmhade (*Irish*)
- sanser (*Russian*)
-- Y.Yamashiro (uist1idrju3i) (*Japanese*)
+- Vijay (vijayatmin) (*Tamil*)
+- Anomalion (*German*)
- Pukima (Pukimaa) (*German*)
-- diorama (*Italian*)
-- frumble (*German*)
+- Curtis Lee (CansCurtis) (*Chinese Traditional*)
+- โบโลน่าไวรัส (nullxyz_) (*Thai*)
+- ふぁーらんど (farland1717) (*Japanese*)
+- 3wen (*Breton*)
+- rlafuente (*Portuguese*)
+- Ильзира Рахматуллина (rahmatullinailzira53) (*Tatar*)
+- Code Man (codemansrc) (*Russian*)
+- Philip Gillißen (guerda) (*German*)
- Daniel Dimitrov (daniel.dimitrov) (*Bulgarian*)
+- Anton (atjn) (*Danish*)
- kekkepikkuni (*Tamil*)
- MODcraft (*Chinese Simplified*)
- oorsutri (*Tamil*)
+- wortfeld (*German*)
- Neo_Chen (NeoChen1024) (*Chinese Traditional*)
+- Stereopolex (*Polish*)
+- NxOne14 (*Bulgarian*)
+- Juan Ortiz (Kloido) (*Spanish, Catalan*)
- Nithin V (Nithin896) (*Tamil*)
+- strikeCunny2245 (*Icelandic*)
- Miro Rauhala (mirorauhala) (*Finnish*)
+- nicoduesing (duconi) (*German, Esperanto*)
+- Gnonthgol (*Norwegian Nynorsk*)
+- WKobes (*Dutch*)
- Oymate (*Bengali*)
+- mikwee (*Hebrew*)
+- EzigboOmenana (*Igbo, Cornish*)
+- yan Wato (janWato) (*Hindi*)
+- Papuass (*Latvian*)
+- Vincent Orback (vincentorback) (*Swedish*)
+- chettoy (*Chinese Simplified*)
+- 19 (nineteen) (*Chinese Simplified*)
- ಚಿರಾಗ್ ನಟರಾಜ್ (chiraag-nataraj) (*Kannada*)
+- Layik Hama (layik) (*Sorani (Kurdish)*)
- Guillaume Turchini (orion78fr) (*French*)
+- Andri Yngvason (andryng) (*Icelandic*)
- Aswin C (officialcjunior) (*Malayalam*)
-- Ganesh D (auntgd) (*Marathi*)
- Yuval Nehemia (yuvalne) (*Hebrew*)
- mawoka-myblock (mawoka) (*German*)
-- dragnucs2 (*Arabic*)
+- Ganesh D (auntgd) (*Marathi*)
+- Lens0021 (lens0021) (*Korean*)
+- An Gafraíoch (angafraioch) (*Irish*)
+- Michael Smith (michaelshmitty) (*Dutch*)
- Ryan Ho (koungho) (*Chinese Traditional*)
-- Tejas Harad (h_tejas) (*Marathi*)
+- tunisiano187 (*French*)
+- Peter van Mever (SpacemanSpiff) (*Dutch*)
- Pedro Henrique (exploronauta) (*Portuguese, Brazilian*)
-- Amir Reza (ElAmir) (*Persian*)
-- Tatsuto "Laminne" Yamamoto (laminne) (*Japanese*)
+- REMOVED_USER (*Esperanto, Italian, Japanese*)
+- Tejas Harad (h_tejas) (*Marathi*)
+- Balázs Meskó (meskobalazs) (*Hungarian*)
- Vasanthan (vasanthan) (*Tamil*)
+- Tatsuto "Laminne" Yamamoto (laminne) (*Japanese*)
+- slbtty (shenlebantongying) (*Chinese Simplified*)
- 硫酸鶏 (acid_chicken) (*Japanese*)
- programizer (*German*)
+- guessimmaterialgrl (*Chinese Simplified*)
- clarmin b8 (clarminb8) (*Sorani (Kurdish)*)
+- Maria Riegler (riegler3m) (*German*)
- manukp (*Malayalam*)
-- psymyn (*Hebrew*)
- earth dweller (sanethoughtyt) (*Marathi*)
+- psymyn (*Hebrew*)
+- Aaraon Thomas (aaraon) (*Portuguese, Brazilian*)
+- Rafael Viana (rafacnec) (*Portuguese, Brazilian*)
- Marek Ľach (marek-lach) (*Slovak*)
- meijerivoi (toilet) (*Finnish*)
- essaar (*Tamil*)
-- Nemuj (Dentrado) (*Japanese, Esperanto*)
- serubeena (*Swedish*)
-- Rintan (*Japanese*)
-- Karol Kosek (krkkPL) (*Polish*)
+- RqndomHax (*French*)
+- REMOVED_USER (*Polish*)
+- ギャラ (gyara) (*Chinese Simplified, Japanese*)
- Khó͘ Tiatlêng (khotiatleng) (*Chinese Traditional, Taigi*)
-- valarivan (*Tamil*)
-- Hernik (hernik27) (*Czech*)
- revarioba (*Spanish*)
- friedbeans (*Croatian*)
+- An (AnTheMaker) (*German*)
- kuchengrab (*German*)
+- Hernik (hernik27) (*Czech*)
+- valarivan (*Tamil*)
+- אדם לוין (adamlevin) (*Hebrew*)
+- Vít Horčička (legvita123) (*Czech*)
- Abi Turi (abi123) (*Georgian*)
+- Thomas Munkholt (munkholt) (*Danish*)
+- pparescasellas (*Catalan*)
- Hinaloe (hinaloe) (*Japanese*)
-- Sebastián Andil (Selrond) (*Slovak*)
- Ifnuth (*German*)
-- Asbjørn Olling (a2) (*Danish*)
+- Sebastián Andil (Selrond) (*Slovak*)
+- boni777 (*Chinese Simplified*)
- KEINOS (*Japanese*)
-- Balázs Meskó (meskobalazs) (*Hungarian*)
-- Artem Mikhalitsin (artemmikhalitsin) (*Russian*)
-- Algustionesa Yoshi (algustionesa) (*Indonesian*)
-- Bottle (suryasalem2010) (*Tamil*)
+- Asbjørn Olling (a2) (*Danish*)
+- REMOVED_USER (*Chinese Traditional, Hong Kong*)
+- DarkShy Community (ponyfrost.mc) (*Russian*)
+- Dennis Reimund (reimunddennis7) (*German*)
+- jocafeli (*Spanish, Mexico*)
- Wrya ali (John12) (*Sorani (Kurdish)*)
+- Bottle (suryasalem2010) (*Tamil*)
+- Algustionesa Yoshi (algustionesa) (*Indonesian*)
- JzshAC (*Chinese Simplified*)
+- Artem Mikhalitsin (artemmikhalitsin) (*Russian*)
- siamano (*Thai, Esperanto*)
-- gnu-ewm (*Polish*)
-- Antillion (antillion99) (*Spanish*)
+- KARARTI44 (kararti44) (*Turkish*)
+- c0c (*Irish*)
+- Stefano S. (Sting1_JP) (*Italian*)
+- tommil (*Finnish*)
+- Ignacio Lis (ilis) (*Galician*)
- Steven Tappert (sammy8806) (*German*)
-- Reg3xp (*Persian*)
+- Antillion (antillion99) (*Spanish*)
+- K.B.Dharun Krishna (kbdharun) (*Tamil*)
- Wassim EL BOUHAMIDI (elbouhamidiw) (*Arabic*)
+- Reg3xp (*Persian*)
+- florentVgn (*French*)
+- Matt (Exbu) (*Dutch*)
- Maciej Błędkowski (mble) (*Polish*)
- gowthamanb (*Tamil*)
- hiphipvargas (*Portuguese*)
-- tunisiano187 (*French*)
+- GabuVictor (*Portuguese, Brazilian*)
+- Pverte (*French*)
+- REMOVED_USER (*Spanish*)
+- Surindaku (*Chinese Simplified*)
- Arttu Ylhävuori (arttu.ylhavuori) (*Finnish*)
-- Ch. (sftblw) (*Korean*)
-- eorn (*Breton*)
+- Pabllo Soares (pabllosoarez) (*Portuguese, Brazilian*)
- Jona (88wcJoWl) (*Spanish*)
-- Mikkel B. Goldschmidt (mikkelbjoern) (*Danish*)
-- Timo Tijhof (Krinkle) (*Dutch*)
- Ka2n (kaanmetu) (*Turkish*)
- tctovsli (*Norwegian Nynorsk*)
-- mecqor labi (mecqorlabi) (*Persian*)
+- Timo Tijhof (Krinkle) (*Dutch*)
+- SamitiMed (samiti3d) (*Thai*)
+- Mikkel B. Goldschmidt (mikkelbjoern) (*Danish*)
- Odyssey346 (alexader612) (*Norwegian*)
+- mecqor labi (mecqorlabi) (*Persian*)
+- Cù Huy Phúc Khang (taamee) (*Vietnamese*)
+- Oskari Lavinto (olavinto) (*Finnish*)
+- Philippe Lemaire (philippe-lemaire) (*Esperanto*)
- vjasiegd (*Polish*)
-- Eban (ebanDev) (*French, Esperanto*)
-- SamitiMed (samiti3d) (*Thai*)
+- Eban (ebanDev) (*Esperanto, French*)
- Nícolas Lavinicki (nclavinicki) (*Portuguese, Brazilian*)
+- REMOVED_USER (*Portuguese, Brazilian*)
- Rekan Adl (rekan-adl1) (*Sorani (Kurdish)*)
-- Antara2Cinta (Se7enTime) (*Indonesian*)
-- Yassine Aït-El-Mouden (yaitelmouden) (*Standard Moroccan Tamazight*)
- VSx86 (*Russian*)
- umelard (*Hebrew*)
+- Antara2Cinta (Se7enTime) (*Indonesian*)
+- Lucas_NL (*Dutch*)
+- Yassine Aït-El-Mouden (yaitelmouden) (*Standard Moroccan Tamazight*)
+- Mathieu Marquer (slasherfun) (*French*)
+- Haerul Fuad (Dokuwiki) (*Indonesian*)
- parnikkapore (*Thai*)
-- Lagash (lagash) (*Esperanto*)
+- Michelle M (MichelleMMM) (*Dutch*)
+- malbona (*Esperanto*)
- Sherwan Othman (sherwanothman11) (*Sorani (Kurdish)*)
-- SKELET (*Danish*)
-- Exbu (*Dutch*)
+- Lagash (lagash) (*Esperanto*)
- Chine Sebastien (chine.sebastien) (*French*)
-- Fei Yang (Fei1Yang) (*Chinese Traditional*)
+- bgme (*Chinese Simplified*)
+- Rafael V. (Rafaeeel) (*Portuguese, Brazilian*)
+- SKELET (*Danish*)
- A A (sebastien.chine) (*French*)
+- Project Z (projectz.1338) (*German*)
+- Fei Yang (Fei1Yang) (*Chinese Traditional*)
- Ğani (freegnu) (*Tatar*)
-- enipra (*Armenian*)
-- Renato "Lond" Cerqueira (renatolond) (*Portuguese, Brazilian*)
- musix (*Persian*)
-- ギャラ (gyara) (*Japanese, Chinese Simplified*)
+- REMOVED_USER (*German*)
- ALEM FARID (faridatcemlulaqbayli) (*Kabyle*)
+- Jean-Pierre MÉRESSE (Jipem) (*French*)
+- enipra (*Armenian*)
+- Serhiy Dmytryshyn (dies) (*Ukrainian*)
+- Eric Brulatout (ebrulato) (*Esperanto*)
- Hougo (hougo) (*French*)
-- Mordi Sacks (MordiSacks) (*Hebrew*)
-- Trinsec (*Dutch*)
-- Adrián Lattes (haztecaso) (*Spanish*)
+- Sonstwer (*German*)
+- Pedro Fernandes (djprmf) (*Portuguese*)
+- REMOVED_USER (*Norwegian*)
- Tigran's Tips (tigrank08) (*Armenian*)
- 亜緯丹穂 (ayiniho) (*Japanese*)
+- maisui (*Chinese Simplified*)
+- Trinsec (*Dutch*)
+- Adrián Lattes (haztecaso) (*Spanish*)
+- webkinzfrog (*Polish*)
- ybardapurkar (*Marathi*)
+- Mordi Sacks (MordiSacks) (*Hebrew*)
+- Manuel Tassi (Mannivu) (*Italian*)
- Szabolcs Gál (galszabolcs810624) (*Hungarian*)
-- Vladislav Săcrieriu (vladislavs14) (*Romanian*)
+- rikrise (*Swedish*)
+- when_hurts (*German*)
+- Wojciech Bigosinski (wbigos2) (*Polish*)
+- Vladislav S (vladislavs) (*Romanian*)
+- mikslatvis (*Latvian*)
+- MartinAlstad (*Norwegian*)
- TracyJacks (*Chinese Simplified*)
- rasheedgm (*Kannada*)
-- danreznik (*Hebrew*)
- Cirelli (cirelli94) (*Italian*)
+- danreznik (*Hebrew*)
+- iraline (*Portuguese, Brazilian*)
+- Seán Mór (seanmor3) (*Irish*)
+- vianaweb (*Portuguese, Brazilian*)
- Siddharastro Doraku (sidharastro) (*Spanish, Mexico*)
-- lexxai (*Ukrainian*)
+- REMOVED_USER (*Spanish*)
- omquylzu (*Latvian*)
+- Arthegor (*French*)
- Navjot Singh (nspeaks) (*Hindi*)
- mkljczk (*Polish*)
- Belkacem Mohammed (belkacem77) (*Kabyle*)
+- Showfom (*Chinese Simplified*)
+- xemyst (*Catalan*)
+- lexxai (*Ukrainian*)
- c6ristian (*German*)
-- damascene (*Arabic*)
+- svetlozaurus (*Bulgarian*)
- Ozai (*German*)
+- damascene (*Arabic*)
+- Jan Ainali (Ainali) (*Swedish*)
- Sahak Petrosyan (petrosyan) (*Armenian*)
+- Metehan Özyürek (MetehanOzyurek) (*Turkish*)
+- Сау Рэмсон (sawrams) (*Russian*)
+- metehan-arslan (*Turkish*)
- Viorel-Cătălin Răpițeanu (rapiteanu) (*Romanian*)
-- Siddhartha Sarathi Basu (quinoa_biryani) (*Bengali*)
+- Sébastien SERRE (sebastienserre) (*French*)
+- Eugen Caruntu (eugencaruntu) (*Romanian*)
+- Kevin Scannell (kscanne) (*Irish*)
- Pachara Chantawong (pachara2202) (*Thai*)
-- Skew (noan.perrot) (*French*)
+- bensch.dev (*German*)
+- LIZH (*French*)
+- Siddhartha Sarathi Basu (quinoa_biryani) (*Bengali*)
+- Overflow Cat (OverflowCat) (*Chinese Traditional, Chinese Simplified*)
+- Stephan Voeth (svoeth) (*German*)
- Zijian Zhao (jobs2512821228) (*Chinese Simplified*)
-- Overflow Cat (OverflowCat) (*Chinese Simplified, Chinese Traditional*)
+- bugboy-20 (*Esperanto, Italian*)
+- SouthFox (*Chinese Simplified*)
+- Noan (SkewRam) (*French*)
- dbeaver (*German*)
-- zordsdavini (*Lithuanian*)
-- Guru Prasath Anandapadmanaban (guruprasath) (*Tamil*)
- turtle836 (*German*)
+- Guru Prasath Anandapadmanaban (guruprasath) (*Tamil*)
+- zordsdavini (*Lithuanian*)
+- Susanna Ånäs (susanna.anas) (*Finnish*)
+- Alessandro (alephoto85) (*Italian*)
- Marcepanek_ (thekingmarcepan) (*Polish*)
-- Feruz Oripov (FeruzOripov) (*Russian*)
+- Choi Younsoo (usagicore) (*Korean*)
- Yann Aguettaz (yann-a) (*French*)
+- zylosophe (*French*)
+- Celso Fernandes (Celsof) (*Portuguese, Brazilian*)
+- Feruz Oripov (FeruzOripov) (*Russian*)
+- REMOVED_USER (*French*)
+- Bui Huy Quang (bhuyquang1) (*Vietnamese*)
+- bogomilshopov (*Bulgarian*)
+- REMOVED_USER (*Burmese*)
+- Kaede (kaedech) (*Japanese*)
- Mick Onio (xgc.redes) (*Asturian*)
- Malik Mann (dermalikmann) (*German*)
- padulafacundo (*Spanish*)
+- r3dsp1 (*Chinese Traditional, Hong Kong*)
- dadosch (*German*)
-- hg6 (*Hindi*)
- Tianqi Zhang (tina.zhang040609) (*Chinese Simplified*)
-- r3dsp1 (*Chinese Traditional, Hong Kong*)
-- johannes hove-henriksen (J0hsHH) (*Norwegian*)
+- HybridGlucose (*Chinese Traditional*)
+- vmichalak (*French*)
+- hg6 (*Hindi*)
+- marivisales (*Portuguese, Brazilian*)
- Orlando Murcio (Atos20) (*Spanish, Mexico*)
-- cenegd (*Chinese Simplified*)
+- maa123 (*Japanese*)
+- Julian Doser (julian21) (*English, United Kingdom, German*)
+- johannes hove-henriksen (J0hsHH) (*Norwegian*)
+- Alexander Ivanov (Saiv46) (*Russian*)
+- unstable.icu (*Chinese Simplified*)
+- Padraic Calpin (padraic-padraic) (*Slovenian*)
- Youngeon Lee (YoungeonLee) (*Korean*)
+- LeJun (le-jun) (*French*)
- shdy (*German*)
-- Umi (mtrumi) (*Chinese Simplified, Chinese Traditional, Hong Kong*)
-- Padraic Calpin (padraic-padraic) (*Slovenian*)
-- Ильзира Рахматуллина (rahmatullinailzira53) (*Tatar*)
+- REMOVED_USER (*French*)
+- Yonjae Lee (yonjlee) (*Korean*)
+- cenegd (*Chinese Simplified*)
- piupiupiudiu (*Chinese Simplified*)
-- Pixelcode (realpixelcode) (*German*)
-- Dennis Reimund (reimunddennis7) (*German*)
+- Umi (mtrumi) (*Chinese Traditional, Hong Kong, Chinese Simplified*)
- Yogesh K S (yogi) (*Kannada*)
+- Ulong32 (*Japanese*)
- Adithya K (adithyak04) (*Malayalam*)
- DAI JIE (daijie) (*Chinese Simplified*)
+- Mihael Budeč (milli.pretili) (*Croatian*)
- Hugh Liu (youloveonlymeh) (*Chinese Simplified*)
-- Rakino (rakino) (*Chinese Simplified*)
- ZQYD (*Chinese Simplified*)
- X.M (kimonoki) (*Chinese Simplified*)
-- boni777 (*Chinese Simplified*)
+- Rakino (rakino) (*Chinese Simplified*)
+- paziy Georgi (paziygeorgi4) (*Dutch*)
+- Komeil Parseh (mmdbalkhi) (*Persian*)
- Jothipazhani Nagarajan (jothipazhani.n) (*Tamil*)
-- Miquel Sabaté Solà (mssola) (*Catalan*)
+- tikky9 (*Portuguese, Brazilian*)
+- horsm (*Finnish*)
+- BenJule (*German*)
- Stanisław Jelnicki (JelNiSlaw) (*Polish*)
+- Yananas (wangyanyan.hy) (*Chinese Simplified*)
+- Vivamus (elaaksu) (*Turkish*)
+- ihealyou (*Italian*)
- AmazighNM (*Kabyle*)
+- Miquel Sabaté Solà (mssola) (*Catalan*)
+- residuum (*German*)
+- nua_kr (*Korean*)
+- Andrea Mazzilli (andreamazzilli) (*Italian*)
+- Paula SIMON (EncoreEutIlFalluQueJeLeSusse) (*French*)
+- hallomaurits (*Dutch*)
+- Erfan Kheyrollahi Qaroğlu (ekm507) (*Persian*)
+- REMOVED_USER (*Galician, Spanish*)
- alnd hezh (alndhezh) (*Sorani (Kurdish)*)
-- CloudSet (*Chinese Simplified*)
- Clash Clans (KURD12345) (*Sorani (Kurdish)*)
-- Metehan Özyürek (MetehanOzyurek) (*Turkish*)
-- Paula SIMON (EncoreEutIlFalluQueJeLeSusse) (*French*)
+- ruok (*Chinese Simplified*)
+- Frederik-FJ (*German*)
+- CloudSet (*Chinese Simplified*)
- Solid Rhino (SolidRhino) (*Dutch*)
-- nua_kr (*Korean*)
-- hallomaurits (*Dutch*)
-- 林水溶 (shuiRong) (*Chinese Simplified*)
-- rikrise (*Swedish*)
-- Takeshi Umeda (noellabo) (*Japanese*)
+- hussama (*Portuguese, Brazilian*)
+- jazzynico (*French*)
- k_taka (peaceroad) (*Japanese*)
+- 林水溶 (shuiRong) (*Chinese Simplified*)
+- Peter Lutz (theellutzo) (*German*)
- Sébastien Feugère (smonff) (*French*)
+- AnalGoddess770 (*Hebrew*)
+- Sven Goller (svengoller) (*German*)
+- Ahmet (ahmetlii) (*Turkish*)
+- hosted22 (*German*)
- Hallo Abdullah (hallo_hamza12) (*Sorani (Kurdish)*)
-- hussama (*Portuguese, Brazilian*)
-- EzigboOmenana (*Cornish*)
+- Karam Hamada (TheKaram) (*Arabic*)
+- Takeshi Umeda (noellabo) (*Japanese*)
+- SnDer (*Dutch*)
- Robert Yano (throwcalmbobaway) (*Spanish, Mexico*)
-- Yasin İsa YILDIRIM (redsfyre) (*Turkish*)
-- PifyZ (*French*)
-- Tagada (Tagadda) (*French*)
-- eichkat3r (*German*)
-- Ashok314 (ashok314) (*Hindi*)
+- Gustav Lindqvist (Reedyn) (*Swedish*)
+- Dagur Ammendrup (dagurp) (*Icelandic*)
+- shafouz (*Portuguese, Brazilian*)
+- Miguel Branco (mglbranco) (*Galician*)
+- Sergey Panteleev (saundefined) (*Russian*)
+- Tom_ (*Czech*)
- Zlr- (cZeler) (*French*)
-- SnDer (*Dutch*)
-- OminousCry (*Russian*)
+- Ashok314 (ashok314) (*Hindi*)
+- PifyZ (*French*)
+- Zeyi Fan (fanzeyi) (*Chinese Simplified*)
+- OminousCry (*Russian, Ukrainian*)
- Adam Sapiński (Adamos9898) (*Polish*)
-- Tom_ (*Czech*)
-- shafouz (*Portuguese, Brazilian*)
-- Shrinivasan T (tshrinivasan) (*Tamil*)
-- Kk (kishorkumara3) (*Kannada*)
-- Swati Sani (swatisani) (*Urdu (Pakistan)*)
-- papayaisnotafood (*Chinese Traditional*)
-- さっかりんにーさん (saccharin23) (*Japanese*)
+- eichkat3r (*German*)
+- Yasin İsa YILDIRIM (redsfyre) (*Turkish*)
+- Tagada (Tagadda) (*French*)
+- gasrios (*Portuguese, Brazilian*)
+- 夜楓Yoka (Yoka2627) (*Chinese Simplified*)
+- AniCommieDDR (*Russian*)
+- Nathaël Noguès (NatNgs) (*French*)
- Daniel M. (daniconil) (*Catalan*)
- César Daniel Cavanzo Quintero (LeinadCQ) (*Esperanto*)
-- Nathaël Noguès (NatNgs) (*French*)
-- 夜楓Yoka (Yoka2627) (*Chinese Simplified*)
+- Noam Tamim (noamtm) (*Hebrew*)
+- papayaisnotafood (*Chinese Traditional*)
+- さっかりんにーさん (saccharin23) (*Japanese*)
+- Marcin Wolski (martinwolski) (*Polish*)
+- REMOVED_USER (*Chinese Simplified*)
+- Kk (kishorkumara3) (*Kannada*)
+- Shrinivasan T (tshrinivasan) (*Tamil*)
+- REMOVED_USER (Urdu (Pakistan))
+- Kakarico Bra (kakarico20) (*Portuguese, Brazilian*)
+- Swati Sani (swatisani) (*Urdu (Pakistan)*)
+- 快乐的老鼠宝宝 (LaoShuBaby) (*Chinese Simplified, Chinese Traditional*)
- Mt Front (mtfront) (*Chinese Simplified*)
-- Artem (Artem4ik) (*Russian*)
-- Robin van der Vliet (RobinvanderVliet) (*Esperanto*)
-- Tradjincal (tradjincal) (*French*)
- SusVersiva (*Catalan*)
+- REMOVED_USER (*Portuguese, Brazilian*)
+- Avinash Mg (hatman290) (*Malayalam*)
+- kruijs (*Dutch*)
+- Artem (Artem4ik) (*Russian*)
- Zinkokooo (*Basque*)
-- Marvin (magicmarvman) (*German*)
+- 劉昌賢 (twcctz500) (*Chinese Traditional*)
- Vikatakavi (*Kannada*)
+- Tradjincal (tradjincal) (*French*)
+- Robin van der Vliet (RobinvanderVliet) (*Esperanto*)
+- Marvin (magicmarvman) (*German*)
- pullopen (*Chinese Simplified*)
-- sergioaraujo1 (*Portuguese, Brazilian*)
-- prabhjot (*Hindi*)
-- CyberAmoeba (pseudoobscura) (*Chinese Simplified*)
-- mmokhi (*Persian*)
+- Tealk (*German*)
+- tibequadorian (*German*)
+- Henk Bulder (henkbulder) (*Dutch*)
+- Edison Lee (edisonlee55) (*Chinese Traditional*)
+- mpdude (*German*)
+- Rijk van Geijtenbeek (rvangeijtenbeek) (*Dutch*)
- Entelekheia-ousia (*Chinese Simplified*)
+- REMOVED_USER (*Spanish*)
+- sergioaraujo1 (*Portuguese, Brazilian*)
- Livingston Samuel (livingston) (*Tamil*)
+- mmokhi (*Persian*)
- tsundoker (*Malayalam*)
-- skaaarrr (*German*)
-- Pierre Morvan (Iriep) (*Breton*)
+- CyberAmoeba (pseudoobscura) (*Chinese Simplified*)
+- prabhjot (*Hindi*)
+- Ikka Putri (ikka240290) (*Indonesian, Danish, English, United Kingdom*)
- Paz Galindo (paz.almendra.g) (*Spanish*)
-- fedot (*Russian*)
-- mkljczk (mykylyjczyk) (*Polish*)
- Ricardo Colin (rysard) (*Spanish*)
-- Philipp Fischbeck (PFischbeck) (*German*)
+- Pierre Morvan (Iriep) (*Breton*)
- oscfd (*Spanish*)
+- Thies Mueller (thies00) (*German*)
+- Lyra (teromene) (*French*)
+- Kedr (lava20121991) (*Esperanto*)
+- mkljczk (mykylyjczyk) (*Polish*)
+- fedot (*Russian*)
+- Philipp Fischbeck (PFischbeck) (*German*)
+- Hasan Berkay Çağır (berkaycagir) (*Turkish*)
+- Silvestri Nicola (nick99silver) (*Italian*)
+- skaaarrr (*German*)
+- Mo Rijndael (mo_rijndael) (*Russian*)
+- tsesunnaallun (orezraey) (*Portuguese, Brazilian*)
+- Lukas Fülling (lfuelling) (*German*)
+- Algo (algovigura) (*Indonesian*)
+- REMOVED_USER (*Spanish*)
+- setthemfree (*Ukrainian*)
+- i fly (ifly3years) (*Chinese Simplified*)
+- ralozkolya (*Georgian*)
- Zoé Bőle (zoe1337) (*German*)
+- Ville Rantanen (vrntnn) (*Finnish*)
- GaggiX (*Italian*)
- JackXu (Merman-Jack) (*Chinese Simplified*)
-- Lukas Fülling (lfuelling) (*German*)
-- ralozkolya (*Georgian*)
-- Jason Gibson (barberpike606) (*Slovenian, Chinese Simplified*)
-- Dremski (*Bulgarian*)
-- Kaede (kaedech) (*Japanese*)
-- Aymeric (AymBroussier) (*French*)
-- mashirozx (*Chinese Simplified*)
-- María José Vera (mjverap) (*Spanish*)
-- asala4544 (*Basque*)
-- ronee (*Kurmanji (Kurdish)*)
-- qwerty287 (*German*)
-- pezcurrel (*Italian*)
-- Anoop (anoopp) (*Malayalam*)
+- ceonia (*Chinese Traditional, Hong Kong*)
+- Emirhan Yavuz (takomlii) (*Turkish*)
+- teezeh (*German*)
+- MevLyshkin (Leinnan) (*Polish*)
- Apple (blackteaovo) (*Chinese Simplified*)
-- Lilian Nabati (Lilounab49) (*French*)
-- ru_mactunnag (*Scottish Gaelic*)
-- Nocta (*French*)
+- qwerty287 (*German*)
- Tangcuyu (*Chinese Simplified*)
+- Nocta (*French*)
+- ru_mactunnag (*Scottish Gaelic*)
+- Lilian Nabati (Lilounab49) (*French*)
+- lokalisoija (*Finnish*)
- Dennis Reimund (reimund_dennis) (*German*)
-- Albatroz Jeremias (albjeremias) (*Portuguese*)
-- Xurxo Guerra (xguerrap) (*Galician*)
+- ronee (*Kurmanji (Kurdish)*)
+- EricVogt_ (*Spanish*)
+- yu miao (metaxx.dev) (*Chinese Simplified*)
+- Anoop (anoopp) (*Malayalam*)
- Samir Tighzert (samir_t7) (*Kabyle*)
-- lokalisoija (*Finnish*)
+- sn02 (*German*)
+- Yui Karasuma (yui87) (*Japanese*)
+- asala4544 (*Basque*)
+- Thibaut Rousseau (thiht44) (*French*)
+- Jason Gibson (barberpike606) (*Slovenian, Chinese Simplified*)
+- Sugar NO (g1024116707) (*Chinese Simplified*)
+- Aymeric (AymBroussier) (*French*)
+- pezcurrel (*Italian*)
+- Xurxo Guerra (xguerrap) (*Galician*)
+- nicosomb (*French*)
+- Albatroz Jeremias (albjeremias) (*Portuguese*)
+- María José Vera (mjverap) (*Spanish*)
+- mashirozx (*Chinese Simplified*)
- codl (*French*)
-- thisdudeisvegan (braydofficial) (*German*)
-- tamaina (*Japanese*)
+- Doug (douglasalvespe) (*Portuguese, Brazilian*)
- Matias Lavik (matiaslavik) (*Norwegian Nynorsk*)
-- Aman Alam (aalam) (*Punjabi*)
+- random_person (*Spanish*)
+- whoeta (wh0eta) (*Russian*)
+- xpac1985 (xpac) (*German*)
+- thisdudeisvegan (braydofficial) (*German*)
+- Fleva (*Sardinian*)
+- Anonymous (Anonymous666) (*Russian*)
+- Mohammad Adnan Mahmood (adnanmig) (*Arabic*)
+- ÀŘǾŚ PÀŚĦÀÍ (arospashai) (*Sorani (Kurdish)*)
+- mikel (mikelalas) (*Spanish*)
+- Trond Boksasp (boksasp) (*Norwegian*)
+- asretro (*Chinese Traditional, Hong Kong*)
- Holger Huo (holgerhuo) (*Chinese Simplified*)
-- Amith Raj Shetty (amithraj1989) (*Kannada*)
+- Aman Alam (aalam) (*Punjabi*)
+- smedvedev (*Russian*)
+- Jay Lonnquist (crowkeep) (*Japanese*)
- mimikun (*Japanese*)
+- Mohd Bilal (mdb571) (*Malayalam*)
+- veer66 (*Thai*)
+- OpenAlgeria (*Arabic*)
+- Rave (nayumi-464812844) (*Vietnamese*)
+- ReavedNetwork (*German*)
+- Michael (Discostu36) (*German*)
+- tamaina (*Japanese*)
+- sk22 (*German*)
- Ragnars Eggerts (rmegg1933) (*Latvian*)
-- ÀŘǾŚ PÀŚĦÀÍ (arospashai) (*Sorani (Kurdish)*)
-- smedvedev (*Russian*)
- Sais Lakshmanan (Saislakshmanan) (*Tamil*)
-- Mohammad Adnan Mahmood (adnanmig) (*Arabic*)
-- OpenAlgeria (*Arabic*)
-- Trond Boksasp (boksasp) (*Norwegian*)
-- Doug (douglasalvespe) (*Portuguese, Brazilian*)
-- Mohd Bilal (mdb571) (*Malayalam*)
-- Fleva (*Sardinian*)
-- xpac1985 (xpac) (*German*)
-- mikel (mikelalas) (*Spanish*)
-- random_person (*Spanish*)
-- asretro (*Chinese Traditional, Hong Kong*)
-- Arĝentakato (argxentakato) (*Japanese*)
-- Nithya Mary (nithyamary25) (*Tamil*)
-- Azad ahmad (dashty) (*Sorani (Kurdish)*)
+- Amith Raj Shetty (amithraj1989) (*Kannada*)
- Bartek Fijałkowski (brateq) (*Polish*)
+- Asbeltrion (*Spanish*)
+- Michael Horstmann (mhrstmnn) (*German*)
+- Joffrey Abeilard (Abeilard14) (*French*)
+- capiscuas (*Spanish*)
+- djoerd (*Dutch*)
+- REMOVED_USER (*Spanish*)
+- NeverMine17 (*Russian*)
+- songxianj (songxian_jiang) (*Chinese Simplified*)
+- Ács Zoltán (zoli111) (*Hungarian*)
+- haaninjo (*Swedish*)
+- REMOVED_USER (*Esperanto*)
+- Philip Molares (DerMolly) (*German*)
+- ChalkPE (amato0617) (*Korean*)
- ebrezhoneg (*Breton*)
+- 디떱 (diddub) (*Korean*)
+- Hans (hansj) (*German*)
+- Nithya Mary (nithyamary25) (*Tamil*)
+- kavitha129 (*Tamil*)
+- waweic (*German*)
+- Aries (orlea) (*Japanese*)
+- おさ (osapon) (*Japanese*)
+- Abijeet Patro (Abijeet) (*Basque*)
+- centumix (*Japanese*)
+- Martin Müller (muellermartin) (*German*)
+- tateisu (*Japanese*)
+- Arĝentakato (argxentakato) (*Japanese*)
+- Benjamin Cobb (benjamincobb) (*German*)
+- deanerschnitzel (*German*)
+- Jill H. (kokakiwi) (*French*)
- maksutheam (*Finnish*)
+- d0p1 (d0p1s4m4) (*French*)
- majorblazr (*Danish*)
-- Jill H. (kokakiwi) (*French*)
- Patrice Boivin (patriceboivin58) (*French*)
-- centumix (*Japanese*)
- 江尚寒 (jiangshanghan) (*Chinese Simplified*)
-- hud5634j (*Spanish*)
-- おさ (osapon) (*Japanese*)
-- Jiniux (*Italian*)
-- Hannah (Aniqueper1) (*Chinese Simplified*)
-- Ni Futchi (futchitwo) (*Japanese*)
-- dobrado (*Portuguese, Brazilian*)
-- dcapillae (*Spanish*)
+- HSD Channel (kvdbve34) (*Russian*)
+- alwyn joe (iomedivh200) (*Chinese Simplified*)
+- ZHY (sheepzh) (*Chinese Simplified*)
+- Bei Li (libei) (*Chinese Simplified*)
+- Aluo (Aluo_rbszd) (*Chinese Simplified*)
+- clarkzjw (*Chinese Simplified*)
+- Noah Luppe (noahlup) (*German*)
+- araghunde (*Galician*)
+- BratishkaErik (*Russian*)
+- Bunny9568 (*Chinese Simplified*)
+- SamOak (*Portuguese, Brazilian*)
- Ranj A Abdulqadir (RanjAhmed) (*Sorani (Kurdish)*)
-- Kurdish Translator (Kurdish.boy) (*Sorani (Kurdish)*)
- Amir Kurdo (kuraking202) (*Sorani (Kurdish)*)
-- umonaca (*Chinese Simplified*)
-- Jari Ronkainen (ronchaine) (*Finnish*)
-- djoerd (*Dutch*)
-- Savarín Electrográfico Marmota Intergalactica (herrero.maty) (*Spanish*)
- 于晚霞 (xissshawww) (*Chinese Simplified*)
-- tateisu (*Japanese*)
-- NeverMine17 (*Russian*)
+- Fyuoxyjidyho Moiodyyiodyhi (fyuodchiodmoiidiiduh86) (*Chinese Simplified*)
+- RPD0911 (*Hungarian*)
+- dcapillae (*Spanish*)
+- dobrado (*Portuguese, Brazilian*)
+- Hannah (Aniqueper1) (*Chinese Simplified*)
+- Azad ahmad (dashty) (*Sorani (Kurdish)*)
+- Uri Chachick (urich.404) (*Hebrew*)
+- Bnoru (*Portuguese, Brazilian*)
+- Jiniux (*Italian*)
+- REMOVED_USER (*German*)
+- Salh_haji6 (Sorani (Kurdish))
+- Kurdish Translator (*Kurdish.boy) (Sorani (Kurdish)*)
+- Beagle (beagleworks) (*Japanese*)
+- hud5634j (*Spanish*)
+- Kisaragi Hiu (flyingfeather1501) (*Chinese Traditional*)
+- Dominik Ziegler (dodomedia) (*German*)
- soheilkhanalipur (*Persian*)
-- SamOak (*Portuguese, Brazilian*)
-- kavitha129 (*Tamil*)
-- Salh_haji6 (*Sorani (Kurdish)*)
- Brodi (brodi1) (*Dutch*)
-- capiscuas (*Spanish*)
-- HSD Channel (kvdbve34) (*Russian*)
-- Abijeet Patro (Abijeet) (*Basque*)
-- Ács Zoltán (zoli111) (*Hungarian*)
-- Benjamin Cobb (benjamincobb) (*German*)
-- waweic (*German*)
-- Aries (orlea) (*Japanese*)
+- Savarín Electrográfico Marmota Intergalactica (herrero.maty) (*Spanish*)
+- Ni Futchi (futchitwo) (*Japanese*)
+- Zois Lee (gcnwm) (*Chinese Simplified*)
+- Arnold Marko (atomicmind) (*Slovenian*)
+- scholzco (*German*)
+- Jari Ronkainen (ronchaine) (*Finnish*)
+- umonaca (*Chinese Simplified*)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 72f62a1dc3..20da71f802 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -58,12 +58,13 @@ Some of the features in this release have been funded through the [NGI0 Discover
- Add reputation and followers score boost to SQL-only account search ([Gargron](https://github.com/mastodon/mastodon/pull/19251))
- Add Scots, Balaibalan, Láadan, Lingua Franca Nova, Lojban, Toki Pona to languages list ([VyrCossont](https://github.com/mastodon/mastodon/pull/20168))
- Set autocomplete hints for e-mail, password and OTP fields ([rcombs](https://github.com/mastodon/mastodon/pull/19833), [offbyone](https://github.com/mastodon/mastodon/pull/19946), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/20071))
+- Add support for DigitalOcean Spaces in setup wizard ([v-aisac](https://github.com/mastodon/mastodon/pull/20573))
### Changed
- **Change brand color and logotypes** ([Gargron](https://github.com/mastodon/mastodon/pull/18592), [Gargron](https://github.com/mastodon/mastodon/pull/18639), [Gargron](https://github.com/mastodon/mastodon/pull/18691), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18634), [Gargron](https://github.com/mastodon/mastodon/pull/19254), [mayaeh](https://github.com/mastodon/mastodon/pull/18710))
- **Change post editing to be enabled in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/19103))
-- **Change web UI to work for logged-out users** ([Gargron](https://github.com/mastodon/mastodon/pull/18961), [Gargron](https://github.com/mastodon/mastodon/pull/19250), [Gargron](https://github.com/mastodon/mastodon/pull/19294), [Gargron](https://github.com/mastodon/mastodon/pull/19306), [Gargron](https://github.com/mastodon/mastodon/pull/19315), [ykzts](https://github.com/mastodon/mastodon/pull/19322), [Gargron](https://github.com/mastodon/mastodon/pull/19412), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19437), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19415), [Gargron](https://github.com/mastodon/mastodon/pull/19348), [Gargron](https://github.com/mastodon/mastodon/pull/19295), [Gargron](https://github.com/mastodon/mastodon/pull/19422), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19414), [Gargron](https://github.com/mastodon/mastodon/pull/19319), [Gargron](https://github.com/mastodon/mastodon/pull/19345), [Gargron](https://github.com/mastodon/mastodon/pull/19310), [Gargron](https://github.com/mastodon/mastodon/pull/19301), [Gargron](https://github.com/mastodon/mastodon/pull/19423), [ykzts](https://github.com/mastodon/mastodon/pull/19471), [ykzts](https://github.com/mastodon/mastodon/pull/19333), [ykzts](https://github.com/mastodon/mastodon/pull/19337), [ykzts](https://github.com/mastodon/mastodon/pull/19272), [ykzts](https://github.com/mastodon/mastodon/pull/19468), [Gargron](https://github.com/mastodon/mastodon/pull/19466), [Gargron](https://github.com/mastodon/mastodon/pull/19457), [Gargron](https://github.com/mastodon/mastodon/pull/19426), [Gargron](https://github.com/mastodon/mastodon/pull/19427), [Gargron](https://github.com/mastodon/mastodon/pull/19421), [Gargron](https://github.com/mastodon/mastodon/pull/19417), [Gargron](https://github.com/mastodon/mastodon/pull/19413), [Gargron](https://github.com/mastodon/mastodon/pull/19397), [Gargron](https://github.com/mastodon/mastodon/pull/19387), [Gargron](https://github.com/mastodon/mastodon/pull/19396), [Gargron](https://github.com/mastodon/mastodon/pull/19385), [ykzts](https://github.com/mastodon/mastodon/pull/19334), [ykzts](https://github.com/mastodon/mastodon/pull/19329), [Gargron](https://github.com/mastodon/mastodon/pull/19324), [Gargron](https://github.com/mastodon/mastodon/pull/19318), [Gargron](https://github.com/mastodon/mastodon/pull/19316), [Gargron](https://github.com/mastodon/mastodon/pull/19263), [trwnh](https://github.com/mastodon/mastodon/pull/19305), [ykzts](https://github.com/mastodon/mastodon/pull/19273), [Gargron](https://github.com/mastodon/mastodon/pull/19801), [Gargron](https://github.com/mastodon/mastodon/pull/19790), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19773), [Gargron](https://github.com/mastodon/mastodon/pull/19798), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19724), [Gargron](https://github.com/mastodon/mastodon/pull/19709), [Gargron](https://github.com/mastodon/mastodon/pull/19514), [Gargron](https://github.com/mastodon/mastodon/pull/19562), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19981), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19978), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/20148), [Gargron](https://github.com/mastodon/mastodon/pull/20302))
+- **Change web UI to work for logged-out users** ([Gargron](https://github.com/mastodon/mastodon/pull/18961), [Gargron](https://github.com/mastodon/mastodon/pull/19250), [Gargron](https://github.com/mastodon/mastodon/pull/19294), [Gargron](https://github.com/mastodon/mastodon/pull/19306), [Gargron](https://github.com/mastodon/mastodon/pull/19315), [ykzts](https://github.com/mastodon/mastodon/pull/19322), [Gargron](https://github.com/mastodon/mastodon/pull/19412), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19437), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19415), [Gargron](https://github.com/mastodon/mastodon/pull/19348), [Gargron](https://github.com/mastodon/mastodon/pull/19295), [Gargron](https://github.com/mastodon/mastodon/pull/19422), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19414), [Gargron](https://github.com/mastodon/mastodon/pull/19319), [Gargron](https://github.com/mastodon/mastodon/pull/19345), [Gargron](https://github.com/mastodon/mastodon/pull/19310), [Gargron](https://github.com/mastodon/mastodon/pull/19301), [Gargron](https://github.com/mastodon/mastodon/pull/19423), [ykzts](https://github.com/mastodon/mastodon/pull/19471), [ykzts](https://github.com/mastodon/mastodon/pull/19333), [ykzts](https://github.com/mastodon/mastodon/pull/19337), [ykzts](https://github.com/mastodon/mastodon/pull/19272), [ykzts](https://github.com/mastodon/mastodon/pull/19468), [Gargron](https://github.com/mastodon/mastodon/pull/19466), [Gargron](https://github.com/mastodon/mastodon/pull/19457), [Gargron](https://github.com/mastodon/mastodon/pull/19426), [Gargron](https://github.com/mastodon/mastodon/pull/19427), [Gargron](https://github.com/mastodon/mastodon/pull/19421), [Gargron](https://github.com/mastodon/mastodon/pull/19417), [Gargron](https://github.com/mastodon/mastodon/pull/19413), [Gargron](https://github.com/mastodon/mastodon/pull/19397), [Gargron](https://github.com/mastodon/mastodon/pull/19387), [Gargron](https://github.com/mastodon/mastodon/pull/19396), [Gargron](https://github.com/mastodon/mastodon/pull/19385), [ykzts](https://github.com/mastodon/mastodon/pull/19334), [ykzts](https://github.com/mastodon/mastodon/pull/19329), [Gargron](https://github.com/mastodon/mastodon/pull/19324), [Gargron](https://github.com/mastodon/mastodon/pull/19318), [Gargron](https://github.com/mastodon/mastodon/pull/19316), [Gargron](https://github.com/mastodon/mastodon/pull/19263), [trwnh](https://github.com/mastodon/mastodon/pull/19305), [ykzts](https://github.com/mastodon/mastodon/pull/19273), [Gargron](https://github.com/mastodon/mastodon/pull/19801), [Gargron](https://github.com/mastodon/mastodon/pull/19790), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19773), [Gargron](https://github.com/mastodon/mastodon/pull/19798), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19724), [Gargron](https://github.com/mastodon/mastodon/pull/19709), [Gargron](https://github.com/mastodon/mastodon/pull/19514), [Gargron](https://github.com/mastodon/mastodon/pull/19562), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19981), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19978), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/20148), [Gargron](https://github.com/mastodon/mastodon/pull/20302), [cutls](https://github.com/mastodon/mastodon/pull/20400))
- The web app can now be accessed without being logged in
- No more `/web` prefix on web app paths
- Profiles, posts, and other public pages now use the same interface for logged in and logged out users
@@ -79,7 +80,7 @@ Some of the features in this release have been funded through the [NGI0 Discover
- Change label of publish button to be "Publish" again in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/18583))
- Change language to be carried over on reply in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18557))
- Change "Unfollow" to "Cancel follow request" when request still pending in web UI ([prplecake](https://github.com/mastodon/mastodon/pull/19363))
-- **Change post filtering system** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18058), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19050), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18894), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19051), [noellabo](https://github.com/mastodon/mastodon/pull/18923), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18956), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18744), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19878))
+- **Change post filtering system** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18058), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19050), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18894), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19051), [noellabo](https://github.com/mastodon/mastodon/pull/18923), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18956), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18744), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19878), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/20567))
- Filtered keywords and phrases can now be grouped into named categories
- Filtered posts show which exact filter was hit
- Individual posts can be added to a filter
@@ -105,6 +106,8 @@ Some of the features in this release have been funded through the [NGI0 Discover
- Change incoming activity processing to happen in `ingress` queue ([Gargron](https://github.com/mastodon/mastodon/pull/20264))
- Change notifications to not link show preview cards in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20335))
- Change amount of replies returned for logged out users in REST API ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20355))
+- Change in-app links to keep you in-app in web UI ([trwnh](https://github.com/mastodon/mastodon/pull/20540), [Gargron](https://github.com/mastodon/mastodon/pull/20628))
+- Change table header to be sticky in admin UI ([sk22](https://github.com/mastodon/mastodon/pull/20442))
### Removed
@@ -117,6 +120,9 @@ Some of the features in this release have been funded through the [NGI0 Discover
### Fixed
+- Fix rules with same priority being sorted non-deterministically ([Gargron](https://github.com/mastodon/mastodon/pull/20623))
+- Fix error when invalid domain name is submitted ([Gargron](https://github.com/mastodon/mastodon/pull/19474))
+- Fix icons having an image role ([Gargron](https://github.com/mastodon/mastodon/pull/20600))
- Fix connections to IPv6-only servers ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20108))
- Fix unnecessary service worker registration and preloading when logged out in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20341))
- Fix unnecessary and slow regex construction ([raggi](https://github.com/mastodon/mastodon/pull/20215))
@@ -185,6 +191,7 @@ Some of the features in this release have been funded through the [NGI0 Discover
- Fix `CDN_HOST` not being used in some asset URLs ([tribela](https://github.com/mastodon/mastodon/pull/18662))
- Fix `CAS_DISPLAY_NAME`, `SAML_DISPLAY_NAME` and `OIDC_DISPLAY_NAME` being ignored ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18568))
- Fix various typos in comments throughout the codebase ([luzpaz](https://github.com/mastodon/mastodon/pull/18604))
+- Fix CSV import error when rows include unicode characters ([HamptonMakes](https://github.com/mastodon/mastodon/pull/20592))
### Security
diff --git a/Gemfile b/Gemfile
index c19a1b69ba..44f08b5cd2 100644
--- a/Gemfile
+++ b/Gemfile
@@ -92,7 +92,7 @@ gem 'tty-prompt', '~> 0.23', require: false
gem 'twitter-text', '~> 3.1.0'
gem 'tzinfo-data', '~> 1.2022'
gem 'webpacker', '~> 5.4'
-gem 'webpush', git: 'https://github.com/ClearlyClaire/webpush.git', ref: 'f14a4d52e201128b1b00245d11b6de80d6cfdcd9'
+gem 'webpush', github: 'ClearlyClaire/webpush', ref: 'f14a4d52e201128b1b00245d11b6de80d6cfdcd9'
gem 'webauthn', '~> 2.5'
gem 'json-ld'
diff --git a/app/controllers/api/base_controller.rb b/app/controllers/api/base_controller.rb
index 3f3e1ca7bd..665425f296 100644
--- a/app/controllers/api/base_controller.rb
+++ b/app/controllers/api/base_controller.rb
@@ -57,7 +57,7 @@ class Api::BaseController < ApplicationController
render json: { error: I18n.t('errors.429') }, status: 429
end
- rescue_from ActionController::ParameterMissing do |e|
+ rescue_from ActionController::ParameterMissing, Mastodon::InvalidParameterError do |e|
render json: { error: e.to_s }, status: 400
end
diff --git a/app/controllers/api/v2/admin/accounts_controller.rb b/app/controllers/api/v2/admin/accounts_controller.rb
index bcc1a07339..b25831aa09 100644
--- a/app/controllers/api/v2/admin/accounts_controller.rb
+++ b/app/controllers/api/v2/admin/accounts_controller.rb
@@ -33,7 +33,7 @@ class Api::V2::Admin::AccountsController < Api::V1::Admin::AccountsController
end
def filter_params
- params.permit(*FILTER_PARAMS)
+ params.permit(*FILTER_PARAMS, role_ids: [])
end
def pagination_params(core_params)
diff --git a/app/controllers/api/v1/filters/keywords_controller.rb b/app/controllers/api/v2/filters/keywords_controller.rb
similarity index 95%
rename from app/controllers/api/v1/filters/keywords_controller.rb
rename to app/controllers/api/v2/filters/keywords_controller.rb
index d3718a1371..c63e1d986b 100644
--- a/app/controllers/api/v1/filters/keywords_controller.rb
+++ b/app/controllers/api/v2/filters/keywords_controller.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-class Api::V1::Filters::KeywordsController < Api::BaseController
+class Api::V2::Filters::KeywordsController < Api::BaseController
before_action -> { doorkeeper_authorize! :read, :'read:filters' }, only: [:index, :show]
before_action -> { doorkeeper_authorize! :write, :'write:filters' }, except: [:index, :show]
before_action :require_user!
diff --git a/app/controllers/api/v1/filters/statuses_controller.rb b/app/controllers/api/v2/filters/statuses_controller.rb
similarity index 95%
rename from app/controllers/api/v1/filters/statuses_controller.rb
rename to app/controllers/api/v2/filters/statuses_controller.rb
index b6bed306fc..755c14cffa 100644
--- a/app/controllers/api/v1/filters/statuses_controller.rb
+++ b/app/controllers/api/v2/filters/statuses_controller.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-class Api::V1::Filters::StatusesController < Api::BaseController
+class Api::V2::Filters::StatusesController < Api::BaseController
before_action -> { doorkeeper_authorize! :read, :'read:filters' }, only: [:index, :show]
before_action -> { doorkeeper_authorize! :write, :'write:filters' }, except: [:index, :show]
before_action :require_user!
diff --git a/app/javascript/flavours/glitch/actions/filters.js b/app/javascript/flavours/glitch/actions/filters.js
index 76326802ea..e9c609fc87 100644
--- a/app/javascript/flavours/glitch/actions/filters.js
+++ b/app/javascript/flavours/glitch/actions/filters.js
@@ -43,7 +43,7 @@ export const fetchFilters = () => (dispatch, getState) => {
export const createFilterStatus = (params, onSuccess, onFail) => (dispatch, getState) => {
dispatch(createFilterStatusRequest());
- api(getState).post(`/api/v1/filters/${params.filter_id}/statuses`, params).then(response => {
+ api(getState).post(`/api/v2/filters/${params.filter_id}/statuses`, params).then(response => {
dispatch(createFilterStatusSuccess(response.data));
if (onSuccess) onSuccess();
}).catch(error => {
diff --git a/app/javascript/flavours/glitch/features/account/components/header.js b/app/javascript/flavours/glitch/features/account/components/header.js
index 93831b3e70..47c074ec3d 100644
--- a/app/javascript/flavours/glitch/features/account/components/header.js
+++ b/app/javascript/flavours/glitch/features/account/components/header.js
@@ -317,8 +317,6 @@ class Header extends ImmutablePureComponent {
rel="me"
. Jego zawartość nie ma znaczenia. Przykład:'
verification: Weryfikacja
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 8279f68f0e..6d3fbf60ff 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -610,7 +610,6 @@ pt-BR:
other: "%{count} usuários"
categories:
administration: Administração
- devops: Devops
invites: Convites
moderation: Moderação
special: Especial
@@ -661,7 +660,6 @@ pt-BR:
view_audit_log_description: Permite aos usuários ver um histórico de ações administrativas no servidor
view_dashboard: Ver painel
view_dashboard_description: Permite que os usuários acessem o painel e várias métricas
- view_devops: Devops
view_devops_description: Permite aos usuários acessar os painéis da Sidekiq e pgHero
title: Funções
rules:
@@ -810,6 +808,9 @@ pt-BR:
trending_rank: 'Em alta #%{rank}'
usable: Pode ser usado
usage_comparison: Usado %{today} vezes hoje, em comparação com %{yesterday} de ontem
+ used_by_over_week:
+ one: Usado por uma pessoa na última semana
+ other: Usado por %{count} pessoas na última semana
title: Em alta
trending: Em alta
warning_presets:
@@ -1333,7 +1334,6 @@ pt-BR:
browser: Navegador
browsers:
alipay: Alipay
- blackberry: BlackBerry
chrome: Chrome
edge: Microsoft Edge
electron: Electron
@@ -1347,7 +1347,6 @@ pt-BR:
phantom_js: PhantomJS
qq: QQ Browser
safari: Safari
- uc_browser: UCBrowser
weibo: Weibo
current_session: Sessão atual
description: "%{browser} em %{platform}"
@@ -1356,8 +1355,6 @@ pt-BR:
platforms:
adobe_air: Adobe Air
android: Android
- blackberry: BlackBerry
- chrome_os: Chrome OS
firefox_os: Firefox OS
ios: iOS
linux: Linux
diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml
index e299cee8b8..a477b07d0b 100644
--- a/config/locales/pt-PT.yml
+++ b/config/locales/pt-PT.yml
@@ -1387,7 +1387,7 @@ pt-PT:
phantom_js: PhantomJS
qq: QQ Browser
safari: Safari
- uc_browser: UCBrowser
+ uc_browser: Navegador UC
weibo: Weibo
current_session: Sessão atual
description: "%{browser} em %{platform}"
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index cfdceff8e8..4ad5fc83ae 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -619,7 +619,6 @@ ru:
other: "%{count} пользователей"
categories:
administration: Администрация
- devops: DevOps
invites: Приглашения
moderation: Модерация
special: Особые
@@ -653,7 +652,6 @@ ru:
view_audit_log: Посмотреть журнал аудита
view_audit_log_description: Позволяет пользователям просматривать историю административных действий на сервере
view_dashboard: Открыть панель управления
- view_devops: DevOps
title: Роли
rules:
add_new: Добавить правило
@@ -1313,7 +1311,6 @@ ru:
browser: Браузер
browsers:
alipay: Alipay
- blackberry: Blackberry
chrome: Chrome
edge: Microsoft Edge
electron: Electron
@@ -1327,7 +1324,6 @@ ru:
phantom_js: PhantomJS
qq: QQ Browser
safari: Safari
- uc_browser: UCBrowser
weibo: Weibo
current_session: Текущая сессия
description: "%{browser} на %{platform}"
@@ -1336,8 +1332,6 @@ ru:
platforms:
adobe_air: Adobe Air
android: Android
- blackberry: Blackberry
- chrome_os: ChromeOS
firefox_os: Firefox OS
ios: iOS
linux: Linux
diff --git a/config/locales/sc.yml b/config/locales/sc.yml
index bf24b2686f..00ccd22db9 100644
--- a/config/locales/sc.yml
+++ b/config/locales/sc.yml
@@ -862,7 +862,6 @@ sc:
browser: Navigadore
browsers:
alipay: Alipay
- blackberry: Blackberry
chrome: Chrome
edge: Microsoft Edge
electron: Electron
@@ -876,7 +875,6 @@ sc:
phantom_js: PhantomJS
qq: QQ Browser
safari: Safari
- uc_browser: UCBrowser
weibo: Weibo
current_session: Sessione atuale
description: "%{browser} de %{platform}"
@@ -885,8 +883,6 @@ sc:
platforms:
adobe_air: Adobe Air
android: Android
- blackberry: Blackberry
- chrome_os: ChromeOS
firefox_os: Firefox OS
ios: iOS
linux: Linux
diff --git a/config/locales/si.yml b/config/locales/si.yml
index 2c41e40b88..42aaf6c896 100644
--- a/config/locales/si.yml
+++ b/config/locales/si.yml
@@ -1194,7 +1194,6 @@ si:
browser: අතිරික්සුව
browsers:
alipay: අලිපේ
- blackberry: බ්ලැක්බෙරි
chrome: ක්රෝම්
edge: මයික්රොසොෆ්ට් එඩ්ගේ
electron: ඉලෙක්ට්රෝන්
@@ -1207,7 +1206,6 @@ si:
otter: ඔටර්
qq: කියුකියු අතිරික්සුව
safari: සෆාරි
- uc_browser: යූසී අතිරික්සුව
weibo: වෙයිබො
current_session: වත්මන් සැසිය
description: "%{browser} මත %{platform}"
@@ -1216,8 +1214,6 @@ si:
platforms:
adobe_air: ඇඩෝබි එයාර්
android: ඇන්ඩ්රොයිඩ්
- blackberry: බ්ලැක්බෙරි
- chrome_os: ක්රෝම් ඕඑස්
firefox_os: ෆයර්ෆොක්ස් ඕඑස්
ios: අයිඕඑස්
linux: ලිනක්ස්
diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml
index d91d990001..301ae87646 100644
--- a/config/locales/simple_form.ar.yml
+++ b/config/locales/simple_form.ar.yml
@@ -64,9 +64,36 @@ ar:
domain_allow:
domain: سيكون بإمكان هذا النطاق جلب البيانات من هذا الخادم ومعالجة وتخزين البيانات الواردة منه
email_domain_block:
+ domain: يمكن أن يكون هذا اسم المجال الذي يظهر في عنوان البريد الإلكتروني أو سجل MX الذي يستخدمه. سيتم التحقق منه عند التسجيل.
with_dns_records: سوف تُبذل محاولة لحل سجلات DNS الخاصة بالنطاق المعني، كما ستُمنع النتائج
+ featured_tag:
+ name: 'فيما يلي بعض الوسوم التي استخدمتها مؤخراً:'
+ filters:
+ action: اختر الإجراء الذي سينفذ عند تطابق المشاركة فلتر التصفية
+ actions:
+ hide: إخفاء المحتويات التي تم تصفيتها، والتصرف كما لو أنها غير موجودة
+ warn: إخفاء المحتوى الذي تم تصفيته خلف تحذير يذكر عنوان الفلتر
form_admin_settings:
+ backups_retention_period: الاحتفاظ بأرشيف المستخدم الذي تم إنشاؤه لعدد محدد من الأيام.
+ bootstrap_timeline_accounts: سيتم تثبيت هذه الحسابات على قمة التوصيات للمستخدمين الجدد.
+ closed_registrations_message: ما سيعرض عند إغلاق التسجيلات
+ content_cache_retention_period: سيتم حذف المشاركات من الخوادم الأخرى بعد عدد الأيام المحدد عند تعيينها إلى قيمة موجبة. قد يكون هذا لا رجعة فيه.
+ custom_css: يمكنك تطبيق أساليب مخصصة على نسخة الويب من ماستدون.
+ mascot: تجاوز الرسوم التوضيحية في واجهة الويب المتقدمة.
+ media_cache_retention_period: سيتم حذف ملفات الوسائط التي تم تنزيلها بعد عدد الأيام المحدد عند تعيينها إلى قيمة موجبة، وإعادة تنزيلها عند الطلب.
+ profile_directory: دليل الملف الشخصي يسرد جميع المستخدمين الذين اختاروا الدخول ليكونوا قابلين للاكتشاف.
+ require_invite_text: عندما تتطلب التسجيلات الموافقة اليدوية، اجعل إدخال النص "لماذا تريد الانضمام ؟" إلزاميا بدلا من اختياري
+ site_contact_email: كيف يمكن للأشخاص أن يصلوا إليك للحصول على استفسارات قانونية أو استفسارات دعم.
site_contact_username: كيف يمكن للناس أن يصلوا إليك في ماستدون.
+ site_extended_description: أي معلومات إضافية قد تكون مفيدة للزوار والمستخدمين. يمكن تنظيمها مع بناء بنية Markdown.
+ site_short_description: وصف قصير للمساعدة في التعرف على الخادم الخاص بك. من يقوم بتشغيله، ولمن ؟
+ site_terms: استخدم سياسة الخصوصية الخاصة بك أو اتركها فارغة لاستخدام الافتراضي. يمكن هيكلتها مع بناء الجملة المصغرة مارك داون.
+ site_title: كيف يمكن للناس الرجوع إلى الخادم الخاص بك إلى جانب اسم النطاق.
+ theme: الشكل الذي يشاهده الزوار الجدد و الغير مسجلين الدخول.
+ thumbnail: عرض حوالي 2:1 صورة إلى جانب معلومات الخادم الخاص بك.
+ timeline_preview: الزوار الذين سجلوا خروجهم سيكونون قادرين على تصفح أحدث المشاركات العامة المتاحة على الخادم.
+ trendable_by_default: تخطي مراجعة المحتوى التريند اليدوي. لا يزال من الممكن الإزالة اللاحقة للعناصر الفردية من التريندات.
+ trends: تظهر التريندز أي المشاركات وعلامات وقصص الأخبار التي تجذب الانتباه على الخادم الخاص بك.
form_challenge:
current_password: إنك بصدد الدخول إلى منطقة آمنة
imports:
@@ -91,6 +118,13 @@ ar:
name: يمكنك فقط تغيير غلاف الحروف ، على سبيل المثال ، لجعلها أكثر قابلية للقراءة
user:
chosen_languages: إن تم اختيارها، فلن تظهر على الخيوط العامة إلّا الرسائل المنشورة في تلك اللغات
+ role: الوظيفة تتحكم في الصلاحيات التي يملكها المستخدم
+ user_role:
+ color: اللون الذي سيتم استخدامه للوظيفه في جميع وحدات واجهة المستخدم، كـ RGB بتنسيق hex
+ highlighted: وهذا يجعل الوظيفه مرئيا علنا
+ name: الاسم العام للوظيفه، إذا تم تعيين الوظيفه ليتم عرضه كشارة
+ permissions_as_keys: سيكون للمستخدمين الذين لديهم هذه الوظيفة حق الصلاحيه إلى...
+ position: وتقرر الوظيفة الأعلى تسوية النزاعات في حالات معينة، ولا يمكن القيام ببعض الإجراءات إلا على أساس الوظائف ذات الأولوية الأقل
labels:
account:
fields:
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index 2ece2bd80e..a9c59b2efa 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -51,13 +51,13 @@ de:
setting_aggregate_reblogs: Zeige denselben Beitrag nicht nochmal an, wenn er erneut geteilt wurde (dies betrifft nur neulich erhaltene erneut geteilte Beiträge)
setting_always_send_emails: Normalerweise werden Benachrichtigungen nicht per E-Mail verschickt, wenn du gerade auf Mastodon aktiv bist
setting_default_sensitive: Medien, die mit einer Inhaltswarnung (NSFW) versehen worden sind, werden – je nach Einstellung – erst nach einem zusätzlichen Klick angezeigt
- setting_display_media_default: Verberge alle Medien, die mit einer Inhaltswarnung (NSFW) versehen sind
- setting_display_media_hide_all: Alle Medien immer verstecken
+ setting_display_media_default: Alle Medien verbergen, die mit einer Inhaltswarnung (NSFW) versehen sind
+ setting_display_media_hide_all: Alle Medien immer verbergen
setting_display_media_show_all: Alle Medien immer anzeigen
setting_hide_network: Wem du folgst und wer dir folgt, wird in deinem Profil nicht angezeigt
setting_noindex: Betrifft alle öffentlichen Daten deines Profils, z. B. deine Beiträge, Account-Empfehlungen und „Über mich“
setting_show_application: Die Anwendung die du nutzt wird in der detaillierten Ansicht deiner Beiträge angezeigt
- setting_use_blurhash: Die Farbverläufe basieren auf den Farben der versteckten Medien, aber verstecken jegliche Details
+ setting_use_blurhash: Die Farbverläufe basieren auf den Farben der verborgenen Medien, aber verstecken jegliche Details
setting_use_pending_items: Neue Beiträge hinter einem Klick verstecken, anstatt automatisch zu scrollen
username: Dein Benutzername wird auf %{domain} einzigartig sein
whole_word: Wenn das Wort oder die Formulierung nur aus Buchstaben oder Zahlen besteht, tritt der Filter nur dann in Kraft, wenn er exakt dieser Zeichenfolge entspricht
@@ -78,22 +78,22 @@ de:
bootstrap_timeline_accounts: Diese Konten werden bei den Folge-Empfehlungen für neue Nutzerinnen und Nutzer oben angeheftet.
closed_registrations_message: Wird angezeigt, wenn Anmeldungen geschlossen sind
content_cache_retention_period: Beiträge von anderen Servern werden nach der angegebenen Anzahl von Tagen, wenn sie auf einen positiven Wert gesetzt werden, gelöscht. Dies kann eventuell nicht rückgängig gemacht werden.
- custom_css: Sie können benutzerdefinierte Stile auf die Web-Version von Mastodon anwenden.
+ custom_css: Du kannst benutzerdefinierte Stile auf die Web-Version von Mastodon anwenden.
mascot: Überschreibt die Abbildung in der erweiterten Weboberfläche.
media_cache_retention_period: Heruntergeladene Mediendateien werden nach der angegebenen Anzahl von Tagen, wenn sie auf einen positiven Wert gesetzt werden, gelöscht und bei Bedarf erneut heruntergeladen.
profile_directory: Das Profilverzeichnis listet alle Benutzer auf, die sich für die Auffindbarkeit entschieden haben.
- require_invite_text: Wenn Anmeldungen eine manuelle Genehmigung erfordern, machen Sie die Texteingabe „Warum möchten Sie beitreten?” obligatorisch und nicht optional.
- site_contact_email: Wie man Sie bei rechtlichen oder unterstützenden Fragen erreichen kann.
- site_contact_username: Wie man Sie auf Mastodon erreichen kann.
+ require_invite_text: Wenn Registrierungen eine manuelle Genehmigung erfordern, dann werden Nutzer einen Grund für ihre Registrierung angeben müssen
+ site_contact_email: Wie man dich oder dein Team bei rechtlichen oder unterstützenden Fragen erreichen kann.
+ site_contact_username: Wie man dich oder dein Team auf Mastodon erreichen kann.
site_extended_description: Alle zusätzlichen Informationen, die für Besucher und Nutzer nützlich sein könnten. Kann mit der Markdown-Syntax strukturiert werden.
- site_short_description: Eine kurze Beschreibung zur eindeutigen Identifizierung Ihres Servers. Wer betreibt ihn, für wen ist er bestimmt?
- site_terms: Verwenden Sie Ihre eigene Datenschutzrichtlinie oder lassen Sie sie leer, um die Standardeinstellung zu verwenden. Kann mit Markdown-Syntax strukturiert werden.
- site_title: Wie Personen neben dem Domainnamen auf Ihren Server verweisen können.
- theme: Design, das abgemeldete und neue Benutzer*innen.
+ site_short_description: Eine kurze Beschreibung zur eindeutigen Identifizierung des Servers. Wer betreibt ihn, für wen ist er bestimmt?
+ site_terms: Verwende eine eigene Datenschutzrichtlinie oder lasse das Feld leer, um die Standardeinstellung zu verwenden. Kann mit Markdown-Syntax strukturiert werden.
+ site_title: Wie Personen neben dem Domainnamen auf deinen Server verweisen können.
+ theme: Das Design, das abgemeldete Besucher und neue Benutzer sehen.
thumbnail: Ein Bild ungefähr im 2:1-Format, das neben den Server-Informationen angezeigt wird.
timeline_preview: Ausgeloggte Besucherinnen und Besucher können die neuesten öffentlichen Beiträge auf dem Server ansehen.
trendable_by_default: Manuelles Überprüfen angesagter Inhalte überspringen. Einzelne Elemente können später noch aus den Trends entfernt werden.
- trends: Trends zeigen, welche Beiträge, Hashtags und Nachrichten auf Ihrem Server an Bedeutung gewinnen.
+ trends: Trends zeigen, welche Beiträge, Hashtags und Nachrichten auf deinem Server immer beliebter werden.
form_challenge:
current_password: Du betrittst einen sicheren Bereich
imports:
@@ -197,7 +197,7 @@ de:
setting_default_privacy: Beitragssichtbarkeit
setting_default_sensitive: Eigene Medien immer mit einer Inhaltswarnung (NSFW) versehen
setting_delete_modal: Bestätigungsdialog anzeigen, bevor ein Beitrag gelöscht wird
- setting_disable_swiping: Deaktiviere Wischgesten
+ setting_disable_swiping: Wischgesten deaktivieren
setting_display_media: Medien-Anzeige
setting_display_media_default: Standard
setting_display_media_hide_all: Alle Medien verstecken
@@ -211,7 +211,7 @@ de:
setting_theme: Design
setting_trends: Heutige Trends anzeigen
setting_unfollow_modal: Bestätigungsdialog anzeigen, bevor jemandem entfolgt wird
- setting_use_blurhash: Farbverlauf für versteckte Medien anzeigen
+ setting_use_blurhash: Farbverlauf für verborgene Medien anzeigen
setting_use_pending_items: Langsamer Modus
severity: Schweregrad
sign_in_token_attempt: Sicherheitscode
diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml
index 0bb1264a34..342c314039 100644
--- a/config/locales/simple_form.eo.yml
+++ b/config/locales/simple_form.eo.yml
@@ -75,7 +75,7 @@ eo:
comment: Laŭvola. Memoru, kial vi aldonis ĉi tiun regulon.
severities:
no_access: Bloki aliron al ĉiuj rimedoj
- sign_up_requires_approval: Novaj registriĝoj devigos vian aprobon
+ sign_up_requires_approval: Novaj registriĝoj bezonos vian aprobon
severity: Elektu, kio okazos pri petoj de ĉi tiu IP
rule:
text: Priskribu regulon aŭ neceson por uzantoj en ĉi tiu servilo. Provu fari ĝin mallonga kaj simpla
@@ -182,6 +182,8 @@ eo:
actions:
hide: Kaŝi komplete
warn: Kaŝi malantaŭ averto
+ form_admin_settings:
+ registrations_mode: Kiu povas krei konton
interactions:
must_be_follower: Bloki sciigojn de nesekvantoj
must_be_following: Bloki sciigojn de homoj, kiujn vi ne sekvas
diff --git a/config/locales/simple_form.no.yml b/config/locales/simple_form.no.yml
index 5196fb2c22..7d005171ac 100644
--- a/config/locales/simple_form.no.yml
+++ b/config/locales/simple_form.no.yml
@@ -12,10 +12,10 @@
admin_account_action:
include_statuses: Brukeren vil se hvilke tuter som forårsaket moderator-handlingen eller -advarselen
send_email_notification: Brukeren vil motta en forklaring på hva som har skjedd med deres bruker
- text_html: Valgfritt. Du kan bruke tut syntaks. Du kan legge til advarsels-forhåndsinnstillinger for å spare tid
+ text_html: Valgfritt. Du kan bruke innlegg-syntaks. Du kan legge til advarsels-forhåndsinnstillinger for å spare tid
type_html: Velg hva du vil gjøre med %{acct}
types:
- disable: Forhindre brukeren å bruke kontoen sin, men ikke slett eller skjule innholdet deres.
+ disable: Forhindre brukeren fra å bruke kontoen sin, men ikke slett eller skjul innholdet deres.
none: Bruk dette for å sende en advarsel til brukeren uten å utløse noen andre handlinger.
sensitive: Tving alle denne brukerens medievedlegg til å bli markert som følsom.
silence: Hindre brukeren i å kunne skrive offentlig synlighet, skjule sine innlegg og varsler for personer som ikke kan følge dem.
@@ -60,6 +60,7 @@
domain_allow:
domain: Dette domenet vil være i stand til å hente data fra denne serveren og dets innkommende data vil bli prosessert og lagret
email_domain_block:
+ domain: Dette kan være domenenavnet som vises i e-postadressen eller MX-oppføringen den bruker. De vil bli sjekket ved oppretting av konto.
with_dns_records: Et forsøk på å løse det gitte domenets DNS-poster vil bli gjort, og resultatene vil også bli svartelistet
form_challenge:
current_password: Du går inn i et sikkert område
@@ -104,7 +105,7 @@
disable: Deaktiver pålogging
none: Ikke gjør noe
sensitive: Sensitiv
- silence: Stilne
+ silence: Begrens
suspend: Suspender og ugjenkallelig slett brukerdata
warning_preset_id: Bruk en advarsels-forhåndsinnstilling
announcement:
diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml
index ba8cb7e121..d2bb4dfbd7 100644
--- a/config/locales/simple_form.pt-BR.yml
+++ b/config/locales/simple_form.pt-BR.yml
@@ -77,6 +77,10 @@ pt-BR:
backups_retention_period: Manter os arquivos de usuário gerados pelo número de dias especificados.
bootstrap_timeline_accounts: Estas contas serão fixadas no topo das recomendações de novos usuários para seguir.
closed_registrations_message: Exibido quando as inscrições estiverem fechadas
+ content_cache_retention_period: Postagens de outros servidores serão excluídas após o número de dias especificados, quando definido com um valor positivo. Isso pode ser irreversível.
+ custom_css: Você pode aplicar estilos personalizados na versão da web do Mastodon.
+ mascot: Substitui a ilustração na interface web avançada.
+ media_cache_retention_period: Os arquivos de mídia baixados serão excluídos após o número especificado de dias, quando definido para um valor positivo, e baixados novamente na demanda.
site_contact_username: Como as pessoas podem chegar até você no Mastodon.
site_extended_description: Quaisquer informações adicionais que possam ser úteis para os visitantes e seus usuários. Podem ser estruturadas com formato Markdown.
site_title: Como as pessoas podem se referir ao seu servidor além do nome do domínio.
diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml
index 85c47dae98..18a3b032ff 100644
--- a/config/locales/simple_form.sk.yml
+++ b/config/locales/simple_form.sk.yml
@@ -52,6 +52,9 @@ sk:
data: CSV súbor vyexportovaný z iného Mastodon serveru
invite_request:
text: Toto pomôže s vyhodnocovaním tvojej žiadosti
+ ip_block:
+ severities:
+ sign_up_block: Nové registrácie nebudú možné
sessions:
otp: 'Napíš sem dvoj-faktorový kód z telefónu, alebo použi jeden z tvojích obnovovacích kódov:'
tag:
diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml
index f23712d9f9..3083f44a3b 100644
--- a/config/locales/simple_form.th.yml
+++ b/config/locales/simple_form.th.yml
@@ -33,7 +33,7 @@ th:
autofollow: ผู้คนที่ลงทะเบียนผ่านคำเชิญจะติดตามคุณโดยอัตโนมัติ
avatar: PNG, GIF หรือ JPG สูงสุด %{size} จะถูกย่อขนาดเป็น %{dimensions}px
bot: ส่งสัญญาณให้ผู้อื่นว่าบัญชีทำการกระทำแบบอัตโนมัติเป็นหลักและอาจไม่ได้รับการสังเกตการณ์
- context: บริบทจำนวนหนึ่งหรือมากกว่าที่ตัวกรองควรใช้
+ context: หนึ่งหรือหลายบริบทที่ตัวกรองควรนำไปใช้
current_password: เพื่อวัตถุประสงค์ด้านความปลอดภัย โปรดป้อนรหัสผ่านของบัญชีปัจจุบัน
current_username: เพื่อยืนยัน โปรดป้อนชื่อผู้ใช้ของบัญชีปัจจุบัน
digest: ส่งเฉพาะหลังจากไม่มีการใช้งานเป็นเวลานานและในกรณีที่คุณได้รับข้อความส่วนบุคคลใด ๆ เมื่อคุณไม่อยู่เท่านั้น
@@ -74,17 +74,24 @@ th:
hide: ซ่อนเนื้อหาที่กรองอยู่อย่างสมบูรณ์ ทำเสมือนว่าไม่มีเนื้อหาอยู่
warn: ซ่อนเนื้อหาที่กรองอยู่หลังคำเตือนที่กล่าวถึงชื่อเรื่องของตัวกรอง
form_admin_settings:
+ backups_retention_period: เก็บการเก็บถาวรผู้ใช้ที่สร้างขึ้นตามจำนวนวันที่ระบุ
bootstrap_timeline_accounts: จะปักหมุดบัญชีเหล่านี้ไว้ด้านบนสุดของคำแนะนำการติดตามของผู้ใช้ใหม่
closed_registrations_message: แสดงเมื่อมีการปิดการลงทะเบียน
+ content_cache_retention_period: จะลบโพสต์จากเซิร์ฟเวอร์อื่น ๆ หลังจากจำนวนวันที่ระบุเมื่อตั้งเป็นค่าบวก นี่อาจย้อนกลับไม่ได้
+ custom_css: คุณสามารถนำไปใช้ลักษณะที่กำหนดเองใน Mastodon รุ่นเว็บ
mascot: เขียนทับภาพประกอบในส่วนติดต่อเว็บขั้นสูง
+ media_cache_retention_period: จะลบไฟล์สื่อที่ดาวน์โหลดหลังจากจำนวนวันที่ระบุเมื่อตั้งเป็นค่าบวก และดาวน์โหลดใหม่ตามความต้องการ
profile_directory: ไดเรกทอรีโปรไฟล์แสดงรายการผู้ใช้ทั้งหมดที่ได้เลือกรับให้สามารถค้นพบได้
site_contact_email: วิธีที่ผู้คนสามารถเข้าถึงคุณสำหรับการสอบถามด้านกฎหมายหรือการสนับสนุน
site_contact_username: วิธีที่ผู้คนสามารถเข้าถึงคุณใน Mastodon
+ site_extended_description: ข้อมูลเพิ่มเติมใด ๆ ที่อาจเป็นประโยชน์กับผู้เยี่ยมชมและผู้ใช้ของคุณ สามารถจัดโครงสร้างด้วยไวยากรณ์ Markdown
+ site_short_description: คำอธิบายแบบสั้นเพื่อช่วยระบุเซิร์ฟเวอร์ของคุณโดยเฉพาะ ผู้ดำเนินการเซิร์ฟเวอร์ เซิร์ฟเวอร์สำหรับใคร?
site_terms: ใช้นโยบายความเป็นส่วนตัวของคุณเองหรือเว้นว่างไว้เพื่อใช้ค่าเริ่มต้น สามารถจัดโครงสร้างด้วยไวยากรณ์ Markdown
site_title: วิธีที่ผู้คนอาจอ้างอิงถึงเซิร์ฟเวอร์ของคุณนอกเหนือจากชื่อโดเมนของเซิร์ฟเวอร์
theme: ชุดรูปแบบที่ผู้เยี่ยมชมที่ออกจากระบบและผู้ใช้ใหม่เห็น
thumbnail: แสดงภาพ 2:1 โดยประมาณควบคู่ไปกับข้อมูลเซิร์ฟเวอร์ของคุณ
timeline_preview: ผู้เยี่ยมชมที่ออกจากระบบจะสามารถเรียกดูโพสต์สาธารณะล่าสุดที่มีในเซิร์ฟเวอร์
+ trendable_by_default: ข้ามการตรวจทานเนื้อหาที่กำลังนิยมด้วยตนเอง ยังคงสามารถเอาแต่ละรายการออกจากแนวโน้มได้หลังเกิดเหตุ
trends: แนวโน้มแสดงว่าโพสต์, แฮชแท็ก และเรื่องข่าวใดกำลังได้รับความสนใจในเซิร์ฟเวอร์ของคุณ
form_challenge:
current_password: คุณกำลังเข้าสู่พื้นที่ปลอดภัย
@@ -147,7 +154,7 @@ th:
announcement:
all_day: เหตุการณ์ตลอดทั้งวัน
ends_at: การสิ้นสุดเหตุการณ์
- scheduled_at: จัดกำหนดการเผยแพร่
+ scheduled_at: จัดกำหนดการสำหรับการเผยแพร่
starts_at: การเริ่มต้นเหตุการณ์
text: ประกาศ
appeal:
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index e1b2ae99a6..51c4471226 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -5,6 +5,7 @@ sk:
contact_missing: Nezadaný
contact_unavailable: Neuvedený/á
hosted_on: Mastodon hostovaný na %{domain}
+ title: O
accounts:
follow: Následuj
followers:
@@ -534,6 +535,7 @@ sk:
didnt_get_confirmation: Neobdržal/a si kroky na potvrdenie?
forgot_password: Zabudnuté heslo?
invalid_reset_password_token: Token na obnovu hesla vypršal. Prosím vypítaj si nový.
+ log_in_with: Prihlás sa s
login: Prihlás sa
logout: Odhlás sa
migrate_account: Presúvam sa na iný účet
@@ -845,7 +847,6 @@ sk:
activity: Najnovšia aktivita
browser: Prehliadač
browsers:
- blackberry: RIM Blackberry
chrome: Google Chrome
firefox: Mozilla Firefox
generic: Neznámy prehliadač
@@ -859,7 +860,6 @@ sk:
explanation: Tieto sú prehliadače ktoré sú teraz prihlásené na tvoj Mastodon účet.
ip: IP adresa
platforms:
- chrome_os: Google ChromeOS
ios: Apple iOS
linux: GNU/Linux
mac: MacOSX
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index 4b196cbf08..7967723ae9 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -634,7 +634,7 @@ sl:
two: "%{count} uporabnika"
categories:
administration: Upravljanje
- devops: Razvojniki
+ devops: DevOps
invites: Povabila
moderation: Moderiranje
special: Posebno
@@ -687,7 +687,7 @@ sl:
view_audit_log_description: Omogoča, da uporabnik vidi zgodovino skrbniških opravil na strežniku
view_dashboard: Pokaži nadzorno ploščo
view_dashboard_description: Omogoča uporabnikom, da dostopajo do nadzorne plošče in različnih meritev
- view_devops: Razvojniki
+ view_devops: DevOps
view_devops_description: Omogoča uporabnikom, da dostopajo do nadzornih plošč Sidekiq in phHero
title: Vloge
rules:
@@ -1449,7 +1449,7 @@ sl:
adobe_air: Adobe Air
android: Android
blackberry: BlackBerry
- chrome_os: Chrome OS
+ chrome_os: ChromeOS
firefox_os: Firefox OS
ios: iOS
linux: Linux
diff --git a/config/locales/sq.yml b/config/locales/sq.yml
index ceb57ec4f8..5dfdf806cf 100644
--- a/config/locales/sq.yml
+++ b/config/locales/sq.yml
@@ -1368,7 +1368,7 @@ sq:
browser: Shfletues
browsers:
alipay: Alipay
- blackberry: Blackberry
+ blackberry: BlackBerry
chrome: Chrome
edge: Microsoft Edge
electron: Electron
@@ -1382,7 +1382,7 @@ sq:
phantom_js: PhantomJS
qq: QQ Browser
safari: Safari
- uc_browser: UCBrowser
+ uc_browser: Shfletues UC
weibo: Weibo
current_session: Sesioni i tanishëm
description: "%{browser} në %{platform}"
@@ -1391,7 +1391,7 @@ sq:
platforms:
adobe_air: Adobe Air
android: Android
- blackberry: Blackberry
+ blackberry: BlackBerry
chrome_os: ChromeOS
firefox_os: Firefox OS
ios: iOS
diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml
index 0d4b6581df..cd142af772 100644
--- a/config/locales/sr-Latn.yml
+++ b/config/locales/sr-Latn.yml
@@ -296,7 +296,6 @@ sr-Latn:
activity: Poslednja aktivnost
browser: Veb čitač
browsers:
- blackberry: Blekberi
chrome: Hrom
generic: Nepoznati veb čitač
current_session: Trenutna sesija
@@ -305,8 +304,6 @@ sr-Latn:
platforms:
adobe_air: Adobe Air-a
android: Androida
- blackberry: Blekberija
- chrome_os: Hrom OS-a
firefox_os: Fajerfoks OS-a
linux: Linuksa
mac: Mac-a
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index 36bd3ebf47..acb2289e7c 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -445,7 +445,6 @@ sr:
browser: Веб читач
browsers:
alipay: Алипеј
- blackberry: Блекберија
chrome: Хром
edge: Мајкрософт Еџ
electron: Електрон
@@ -459,7 +458,6 @@ sr:
phantom_js: ФантомЏејЕс
qq: КјуКју Претраживач
safari: Сафари
- uc_browser: УЦПретраживач
weibo: Веибо
current_session: Тренутна сесија
description: "%{browser} са %{platform}"
@@ -467,8 +465,6 @@ sr:
platforms:
adobe_air: Адоб Ер-а
android: Андроида
- blackberry: Блекберија
- chrome_os: Хром ОС-а
firefox_os: Фајерфокс ОС-а
ios: иОС-а
linux: Линукса
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index cf311b3cb6..bd3c1693aa 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -608,7 +608,7 @@ sv:
other: "%{count} användare"
categories:
administration: Administration
- devops: Devops
+ devops: DevOps
invites: Inbjudningar
moderation: Moderering
special: Särskild
@@ -659,7 +659,7 @@ sv:
view_audit_log_description: Tillåter användare att se historiken över administrativa åtgärder på servern
view_dashboard: Visa instrumentpanel
view_dashboard_description: Ger användare tillgång till instrumentpanelen och olika mätvärden
- view_devops: Devops
+ view_devops: DevOps
view_devops_description: Ger användare tillgång till instrumentpanelerna Sidekiq och pgHero
title: Roller
rules:
@@ -1373,7 +1373,7 @@ sv:
browser: Webbläsare
browsers:
alipay: Alipay
- blackberry: Blackberry
+ blackberry: BlackBerry
chrome: Chrome
edge: Microsoft Edge
electron: Electron
@@ -1387,7 +1387,7 @@ sv:
phantom_js: PhantomJS
qq: QQ browser
safari: Safari
- uc_browser: UCBrowser
+ uc_browser: UC Browser
weibo: Weibo
current_session: Nuvarande session
description: "%{browser} på %{platform}"
@@ -1396,8 +1396,8 @@ sv:
platforms:
adobe_air: Adobe Air
android: Android
- blackberry: Blackberry
- chrome_os: Chrome OS
+ blackberry: BlackBerry
+ chrome_os: ChromeOS
firefox_os: Firefox OS
ios: iOS
linux: Linux
diff --git a/config/locales/th.yml b/config/locales/th.yml
index 8f5fa3ccd2..9a4c665ec6 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -11,7 +11,7 @@ th:
followers:
other: ผู้ติดตาม
following: กำลังติดตาม
- instance_actor_flash: บัญชีนี้เป็นตัวดำเนินการเสมือนที่ใช้เพื่อเป็นตัวแทนของเซิร์ฟเวอร์เองและไม่ใช่ผู้ใช้รายบุคคลใด ๆ บัญชีใช้สำหรับวัตถุประสงค์ในการติดต่อกับภายนอกและไม่ควรได้รับการระงับ
+ instance_actor_flash: บัญชีนี้เป็นตัวดำเนินการเสมือนที่ใช้เพื่อเป็นตัวแทนของเซิร์ฟเวอร์เองและไม่ใช่ผู้ใช้รายบุคคลใด ๆ มีการใช้บัญชีสำหรับวัตถุประสงค์ในการติดต่อกับภายนอกและไม่ควรได้รับการระงับ
last_active: ใช้งานล่าสุด
link_verified_on: ตรวจสอบความเป็นเจ้าของของลิงก์นี้เมื่อ %{date}
nothing_here: ไม่มีสิ่งใดที่นี่!
@@ -296,8 +296,8 @@ th:
title: ประกาศใหม่
publish: เผยแพร่
published_msg: เผยแพร่ประกาศสำเร็จ!
- scheduled_for: จัดกำหนดไว้สำหรับ %{time}
- scheduled_msg: จัดกำหนดการเผยแพร่ประกาศแล้ว!
+ scheduled_for: จัดกำหนดการไว้สำหรับ %{time}
+ scheduled_msg: จัดกำหนดการสำหรับการเผยแพร่ประกาศแล้ว!
title: ประกาศ
unpublish: เลิกเผยแพร่
unpublished_msg: เลิกเผยแพร่ประกาศสำเร็จ!
@@ -377,7 +377,7 @@ th:
existing_domain_block_html: คุณได้กำหนดขีดจำกัดที่เข้มงวดกว่าใน %{name} ไปแล้ว คุณจำเป็นต้อง เลิกปิดกั้น ก่อน
new:
create: สร้างการปิดกั้น
- hint: การปิดกั้นโดเมนจะไม่ป้องกันการสร้างรายการบัญชีในฐานข้อมูล แต่จะใช้วิธีการควบคุมที่เฉพาะเจาะจงกับบัญชีเหล่านั้นย้อนหลังและโดยอัตโนมัติ
+ hint: การปิดกั้นโดเมนจะไม่ป้องกันการสร้างรายการบัญชีในฐานข้อมูล แต่จะนำไปใช้วิธีการควบคุมที่เฉพาะเจาะจงกับบัญชีเหล่านั้นย้อนหลังและโดยอัตโนมัติ
severity:
desc_html: "ทำให้เงียบ จะทำให้โพสต์ของบัญชีไม่ปรากฏแก่ใครก็ตามที่ไม่ได้กำลังติดตามบัญชี ระงับ จะเอาเนื้อหา, สื่อ และข้อมูลโปรไฟล์ทั้งหมดของบัญชีออก ใช้ ไม่มี หากคุณเพียงแค่ต้องการปฏิเสธไฟล์สื่อ"
noop: ไม่มี
@@ -590,6 +590,7 @@ th:
other: "%{count} ผู้ใช้"
categories:
administration: การดูแล
+ devops: DevOps
invites: คำเชิญ
moderation: การควบคุม
special: พิเศษ
@@ -637,6 +638,7 @@ th:
view_audit_log_description: อนุญาตให้ผู้ใช้ดูประวัติการกระทำการดูแลในเซิร์ฟเวอร์
view_dashboard: ดูแดชบอร์ด
view_dashboard_description: อนุญาตให้ผู้ใช้เข้าถึงแดชบอร์ดและเมตริกต่าง ๆ
+ view_devops: DevOps
view_devops_description: อนุญาตให้ผู้ใช้เข้าถึงแดชบอร์ด Sidekiq และ pgHero
title: บทบาท
rules:
@@ -716,6 +718,8 @@ th:
appeal_approved: อุทธรณ์แล้ว
appeal_pending: รอดำเนินการการอุทธรณ์
system_checks:
+ database_schema_check:
+ message_html: มีการโยกย้ายฐานข้อมูลที่รอดำเนินการ โปรดเรียกใช้การโยกย้ายเพื่อให้แน่ใจว่าแอปพลิเคชันทำงานตามที่คาดไว้
elasticsearch_running_check:
message_html: ไม่สามารถเชื่อมต่อกับ Elasticsearch โปรดตรวจสอบว่าซอฟต์แวร์กำลังทำงาน หรือปิดใช้งานการค้นหาข้อความแบบเต็ม
elasticsearch_version_check:
@@ -804,6 +808,8 @@ th:
other: "%{count} เหตุการณ์ที่เปิดใช้งาน"
events: เหตุการณ์
new: เว็บฮุคใหม่
+ rotate_secret: สับเปลี่ยนข้อมูลลับ
+ secret: ข้อมูลลับการเซ็น
status: สถานะ
title: เว็บฮุค
webhook: เว็บฮุค
@@ -914,7 +920,7 @@ th:
account_status: สถานะบัญชี
confirming: กำลังรอการยืนยันอีเมลให้เสร็จสมบูรณ์
functional: บัญชีของคุณทำงานได้อย่างเต็มที่
- pending: ใบสมัครของคุณกำลังรอดำเนินการตรวจทานโดยพนักงานของเรา นี่อาจใช้เวลาสักครู่ คุณจะได้รับอีเมลหากใบสมัครของคุณได้รับการอนุมัติ
+ pending: ใบสมัครของคุณกำลังรอดำเนินการตรวจทานโดยพนักงานของเรา นี่อาจใช้เวลาสักครู่ คุณจะได้รับอีเมลหากมีการอนุมัติใบสมัครของคุณ
redirecting_to: บัญชีของคุณไม่ได้ใช้งานเนื่องจากบัญชีกำลังเปลี่ยนเส้นทางไปยัง %{acct} ในปัจจุบัน
view_strikes: ดูการดำเนินการที่ผ่านมากับบัญชีของคุณ
too_fast: ส่งแบบฟอร์มเร็วเกินไป ลองอีกครั้ง
@@ -982,7 +988,7 @@ th:
appeal_approved: อุทธรณ์การดำเนินการนี้สำเร็จและไม่มีผลบังคับอีกต่อไป
appeal_rejected: ปฏิเสธการอุทธรณ์แล้ว
appeal_submitted_at: ส่งการอุทธรณ์แล้ว
- appealed_msg: ส่งการอุทธรณ์ของคุณแล้ว หากการอุทธรณ์ได้รับการอนุมัติ คุณจะได้รับการแจ้งเตือน
+ appealed_msg: ส่งการอุทธรณ์ของคุณแล้ว หากมีการอนุมัติการอุทธรณ์ คุณจะได้รับการแจ้งเตือน
appeals:
submit: ส่งการอุทธรณ์
approve_appeal: อนุมัติการอุทธรณ์
@@ -1042,6 +1048,8 @@ th:
storage: ที่เก็บข้อมูลสื่อ
featured_tags:
add_new: เพิ่มใหม่
+ errors:
+ limit: คุณได้แนะนำแฮชแท็กถึงจำนวนสูงสุดไปแล้ว
filters:
contexts:
account: โปรไฟล์
@@ -1054,6 +1062,7 @@ th:
keywords: คำสำคัญ
title: แก้ไขตัวกรอง
errors:
+ deprecated_api_multiple_keywords: ไม่สามารถเปลี่ยนพารามิเตอร์เหล่านี้จากแอปพลิเคชันนี้เนื่องจากพารามิเตอร์นำไปใช้กับคำสำคัญของตัวกรองมากกว่าหนึ่ง ใช้แอปพลิเคชันที่ใหม่กว่าหรือส่วนติดต่อเว็บ
invalid_context: ไม่มีหรือบริบทที่ให้มาไม่ถูกต้อง
index:
contexts: กรองใน %{contexts}
@@ -1074,6 +1083,7 @@ th:
batch:
remove: เอาออกจากตัวกรอง
index:
+ hint: ตัวกรองนี้นำไปใช้เพื่อเลือกแต่ละโพสต์โดยไม่คำนึงถึงเกณฑ์อื่น ๆ คุณสามารถเพิ่มโพสต์เพิ่มเติมไปยังตัวกรองนี้ได้จากส่วนติดต่อเว็บ
title: โพสต์ที่กรองอยู่
footer:
trending_now: กำลังนิยม
@@ -1239,6 +1249,7 @@ th:
trillion: ล้านล้าน
otp_authentication:
code_hint: ป้อนรหัสที่สร้างโดยแอปตัวรับรองความถูกต้องของคุณเพื่อยืนยัน
+ description_html: หากคุณเปิดใช้งาน การรับรองความถูกต้องด้วยสองปัจจัย โดยใช้แอปตัวรับรองความถูกต้อง การเข้าสู่ระบบจะต้องการให้คุณอยู่ในความครอบครองโทรศัพท์ของคุณ ซึ่งจะสร้างโทเคนสำหรับให้คุณป้อน
enable: เปิดใช้งาน
instructions_html: "สแกนรหัส QR นี้ลงใน Google Authenticator หรือแอป TOTP ที่คล้ายกันในโทรศัพท์ของคุณ จากนี้ไป แอปนั้นจะสร้างโทเคนที่คุณจะต้องป้อนเมื่อเข้าสู่ระบบ"
manual_instructions: 'หากคุณไม่สามารถสแกนรหัส QR และจำเป็นต้องป้อนรหัสด้วยตนเอง นี่คือรหัสลับแบบข้อความธรรมดา:'
@@ -1298,12 +1309,15 @@ th:
account: โพสต์สาธารณะจาก @%{acct}
tag: 'โพสต์สาธารณะที่ได้รับการแท็ก #%{hashtag}'
scheduled_statuses:
- too_soon: วันที่ตามกำหนดการต้องอยู่ในอนาคต
+ over_daily_limit: คุณมีโพสต์ที่จัดกำหนดการไว้เกินขีดจำกัดที่ %{limit} สำหรับวันนี้
+ over_total_limit: คุณมีโพสต์ที่จัดกำหนดการไว้เกินขีดจำกัดที่ %{limit}
+ too_soon: วันที่จัดกำหนดการต้องอยู่ในอนาคต
sessions:
activity: กิจกรรมล่าสุด
browser: เบราว์เซอร์
browsers:
alipay: Alipay
+ blackberry: BlackBerry
chrome: Chrome
edge: Microsoft Edge
electron: Electron
@@ -1317,6 +1331,7 @@ th:
phantom_js: PhantomJS
qq: เบราว์เซอร์ QQ
safari: Safari
+ uc_browser: เบราว์เซอร์ UC
weibo: Weibo
current_session: เซสชันปัจจุบัน
description: "%{browser} ใน %{platform}"
@@ -1325,11 +1340,12 @@ th:
platforms:
adobe_air: Adobe Air
android: Android
- chrome_os: Chrome OS
+ blackberry: BlackBerry
+ chrome_os: ChromeOS
firefox_os: Firefox OS
ios: iOS
linux: Linux
- mac: Mac
+ mac: macOS
other: แพลตฟอร์มที่ไม่รู้จัก
windows: Windows
windows_mobile: Windows Mobile
@@ -1379,8 +1395,10 @@ th:
errors:
in_reply_not_found: ดูเหมือนว่าจะไม่มีโพสต์ที่คุณกำลังพยายามตอบกลับอยู่
open_in_web: เปิดในเว็บ
+ over_character_limit: เกินขีดจำกัดตัวอักษรที่ %{max}
pin_errors:
direct: ไม่สามารถปักหมุดโพสต์ที่ปรากฏแก่ผู้ใช้ที่กล่าวถึงเท่านั้น
+ limit: คุณได้ปักหมุดโพสต์ถึงจำนวนสูงสุดไปแล้ว
ownership: ไม่สามารถปักหมุดโพสต์ของคนอื่น
reblog: ไม่สามารถปักหมุดการดัน
poll:
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index b041b63f1a..cc2193a686 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -608,7 +608,6 @@ tr:
other: "%{count} kullanıcı"
categories:
administration: Yönetim
- devops: Devops
invites: Davetler
moderation: Denetim
special: Özel
@@ -659,7 +658,6 @@ tr:
view_audit_log_description: Kullanıcıların sunucudaki yönetsel eylemlerin bir tarihçesini görüntülemesine izin verir
view_dashboard: Ana Paneli Görüntüleme
view_dashboard_description: Kullanıcıların ana panele ve çeşitli ölçütlere erişmesine izin verir
- view_devops: Devops
view_devops_description: Kullanıcıların Sidekiq ve pgHero panellerine erişmesine izin verir
title: Roller
rules:
@@ -1373,7 +1371,6 @@ tr:
browser: Tarayıcı
browsers:
alipay: Alipay
- blackberry: Blackberry
chrome: Chrome
edge: Microsoft Edge
electron: Electron
@@ -1387,7 +1384,6 @@ tr:
phantom_js: PhantomJS
qq: QQ Browser
safari: Safari
- uc_browser: UC Browser
weibo: Weibo
current_session: Geçerli oturum
description: "%{platform} - %{browser}"
@@ -1396,8 +1392,6 @@ tr:
platforms:
adobe_air: Adobe Air
android: Android
- blackberry: Blackberry
- chrome_os: ChromeOS
firefox_os: Firefox OS
ios: iOS
linux: Linux
diff --git a/config/locales/tt.yml b/config/locales/tt.yml
index 40a0207e5b..b2986602db 100644
--- a/config/locales/tt.yml
+++ b/config/locales/tt.yml
@@ -189,7 +189,6 @@ tt:
browser: Браузер
browsers:
alipay: Аlipay
- blackberry: Blаckberry
chrome: Chrоme
edge: Microsоft Edge
electron: Electrоn
@@ -202,15 +201,12 @@ tt:
phantom_js: PhаntomJS
qq: QQ Brоwser
safari: Safаri
- uc_browser: UCBrоwser
weibo: Weibо
description: "%{browser} - %{platform}"
ip: ІР
platforms:
adobe_air: Adobе Air
android: Andrоid
- blackberry: Blаckberry
- chrome_os: ChromеOS
firefox_os: Firеfox OS
ios: iОS
linux: Lіnux
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index df73233dfe..94ac3f2b8a 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -634,7 +634,6 @@ uk:
other: "%{count} користувача"
categories:
administration: Адміністрування
- devops: DevOps
invites: Запрошення
moderation: Модерація
special: Спеціальні
@@ -687,7 +686,6 @@ uk:
view_audit_log_description: Дозволяє користувачам бачити історію адміністративних дій на сервері
view_dashboard: Переглядати панель керування
view_dashboard_description: Дозволяє користувачам доступ до панелі керування та різних метрик
- view_devops: DevOps
view_devops_description: Дозволяє користувачам доступ до Sidekiq і панелі pgHero
title: Ролі
rules:
@@ -1425,7 +1423,6 @@ uk:
browser: Браузер
browsers:
alipay: Alipay
- blackberry: Blackberry
chrome: Хром
edge: Microsoft Edge
electron: Electron
@@ -1439,7 +1436,6 @@ uk:
phantom_js: PhantomJS
qq: QQ Browser
safari: Сафарі
- uc_browser: UCBrowser
weibo: Weibo
current_session: Активна сесія
description: "%{browser} на %{platform}"
@@ -1448,8 +1444,6 @@ uk:
platforms:
adobe_air: Adobe Air
android: Android
- blackberry: Blackberry
- chrome_os: ChromeOS
firefox_os: Firefox OS
ios: iOS
linux: Linux
diff --git a/config/locales/vi.yml b/config/locales/vi.yml
index f1b84de860..b3e37438f3 100644
--- a/config/locales/vi.yml
+++ b/config/locales/vi.yml
@@ -595,7 +595,6 @@ vi:
other: "%{count} người"
categories:
administration: Quản trị viên
- devops: Nhà phát triển
invites: Lời mời
moderation: Kiểm duyệt
special: Đặc biệt
@@ -645,7 +644,6 @@ vi:
view_audit_log_description: Cho phép xem lịch sử của các hành động quản trị trên máy chủ
view_dashboard: Xem quản trị
view_dashboard_description: Cho phép truy cập trang tổng quan và các chỉ số khác
- view_devops: Nhà phát triển
view_devops_description: Cho phép truy cập trang tổng quan Sidekiq và pgHero
title: Danh sách vai trò
rules:
@@ -1347,7 +1345,6 @@ vi:
browser: Trình duyệt
browsers:
alipay: Alipay
- blackberry: Blackberry
chrome: Chrome
edge: Edge
electron: Electron
@@ -1361,7 +1358,6 @@ vi:
phantom_js: PhantomJS
qq: QQ
safari: Safari
- uc_browser: UC
weibo: Weibo
current_session: Phiên hiện tại
description: "%{browser} trên %{platform}"
@@ -1370,8 +1366,6 @@ vi:
platforms:
adobe_air: Adobe Air
android: Android
- blackberry: Blackberry
- chrome_os: Chrome OS
firefox_os: Hệ điều hành Firefox
ios: iOS
linux: Linux
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index a6c75ea713..4da6b69997 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -1007,7 +1007,7 @@ zh-CN:
appeal: 申诉
appeal_approved: 此次处罚已申诉成功并不再生效
appeal_rejected: 此次申诉已被驳回
- appeal_submitted_at: 申诉已提交
+ appeal_submitted_at: 已提出申诉
appealed_msg: 你的申诉已经提交。如果申诉通过,你将收到通知。
appeals:
submit: 提交申诉
@@ -1361,7 +1361,7 @@ zh-CN:
phantom_js: PhantomJS
qq: QQ浏览器
safari: Safari
- uc_browser: UC浏览器
+ uc_browser: UC 浏览器
weibo: 新浪微博
current_session: 当前会话
description: "%{platform} 上的 %{browser}"
@@ -1371,7 +1371,7 @@ zh-CN:
adobe_air: Adobe Air
android: Android
blackberry: 黑莓
- chrome_os: Chrome OS
+ chrome_os: ChromeOS
firefox_os: Firefox OS
ios: iOS
linux: Linux
diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml
index acc6de3ade..92489882d0 100644
--- a/config/locales/zh-HK.yml
+++ b/config/locales/zh-HK.yml
@@ -893,7 +893,6 @@ zh-HK:
browser: 瀏覽器
browsers:
alipay: 支付寶
- blackberry: 黑莓機
chrome: Chrome 瀏覽器
edge: Microsoft Edge 瀏覽器
electron: Electron 瀏覽器
@@ -907,7 +906,6 @@ zh-HK:
phantom_js: PhantomJS 瀏覽器
qq: QQ瀏覽器
safari: Safari 瀏覽器
- uc_browser: UC瀏覽器
weibo: 新浪微博
current_session: 目前的作業階段
description: "%{platform} 上的 %{browser}"
@@ -916,8 +914,6 @@ zh-HK:
platforms:
adobe_air: Adobe Air
android: Android
- blackberry: Blackberry
- chrome_os: ChromeOS
firefox_os: Firefox OS
ios: iOS
linux: Linux
diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml
index 5953c2275b..c9596c0403 100644
--- a/config/locales/zh-TW.yml
+++ b/config/locales/zh-TW.yml
@@ -597,7 +597,7 @@ zh-TW:
other: "%{count} 個使用者"
categories:
administration: 管理員
- devops: Devops
+ devops: DevOps
invites: 邀請
moderation: 站務
special: 特殊
@@ -647,7 +647,7 @@ zh-TW:
view_audit_log_description: 允許使用者檢視伺服器上的管理動作歷史
view_dashboard: 檢視儀表板
view_dashboard_description: 允許使用者存取儀表板與各種指標
- view_devops: Devops
+ view_devops: DevOps
view_devops_description: 允許使用者存取 Sidekiq 與 pgHero 儀表板
title: 角色
rules:
@@ -1349,7 +1349,6 @@ zh-TW:
browser: 瀏覽器
browsers:
alipay: 支付寶
- blackberry: 黑莓機
chrome: Chrome 瀏覽器
edge: Microsoft Edge 瀏覽器
electron: Electron 瀏覽器
@@ -1372,8 +1371,7 @@ zh-TW:
platforms:
adobe_air: Adobe Air
android: Android
- blackberry: 黑莓機 (Blackberry)
- chrome_os: Chrome OS
+ chrome_os: ChromeOS
firefox_os: Firefox OS
ios: iOS
linux: Linux
diff --git a/config/routes.rb b/config/routes.rb
index e1068bb583..1c7b4eda2d 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -516,18 +516,10 @@ Rails.application.routes.draw do
resources :bookmarks, only: [:index]
resources :reports, only: [:create]
resources :trends, only: [:index], controller: 'trends/tags'
- resources :filters, only: [:index, :create, :show, :update, :destroy] do
- resources :keywords, only: [:index, :create], controller: 'filters/keywords'
- resources :statuses, only: [:index, :create], controller: 'filters/statuses'
- end
+ resources :filters, only: [:index, :create, :show, :update, :destroy]
resources :endorsements, only: [:index]
resources :markers, only: [:index, :create]
- namespace :filters do
- resources :keywords, only: [:show, :update, :destroy]
- resources :statuses, only: [:show, :destroy]
- end
-
namespace :apps do
get :verify_credentials, to: 'credentials#show'
end
@@ -685,8 +677,16 @@ Rails.application.routes.draw do
resources :media, only: [:create]
resources :suggestions, only: [:index]
- resources :filters, only: [:index, :create, :show, :update, :destroy]
resource :instance, only: [:show]
+ resources :filters, only: [:index, :create, :show, :update, :destroy] do
+ resources :keywords, only: [:index, :create], controller: 'filters/keywords'
+ resources :statuses, only: [:index, :create], controller: 'filters/statuses'
+ end
+
+ namespace :filters do
+ resources :keywords, only: [:show, :update, :destroy]
+ resources :statuses, only: [:show, :destroy]
+ end
namespace :admin do
resources :accounts, only: [:index]
diff --git a/lib/exceptions.rb b/lib/exceptions.rb
index 3c5ba226b1..d3b92f4a09 100644
--- a/lib/exceptions.rb
+++ b/lib/exceptions.rb
@@ -11,6 +11,7 @@ module Mastodon
class RaceConditionError < Error; end
class RateLimitExceededError < Error; end
class SyntaxError < Error; end
+ class InvalidParameterError < Error; end
class UnexpectedResponseError < Error
attr_reader :response
diff --git a/lib/mastodon/maintenance_cli.rb b/lib/mastodon/maintenance_cli.rb
index 6e5242bffd..85937da812 100644
--- a/lib/mastodon/maintenance_cli.rb
+++ b/lib/mastodon/maintenance_cli.rb
@@ -14,7 +14,7 @@ module Mastodon
end
MIN_SUPPORTED_VERSION = 2019_10_01_213028 # rubocop:disable Style/NumericLiterals
- MAX_SUPPORTED_VERSION = 2022_03_16_233212 # rubocop:disable Style/NumericLiterals
+ MAX_SUPPORTED_VERSION = 2022_11_04_133904 # rubocop:disable Style/NumericLiterals
# Stubs to enjoy ActiveRecord queries while not depending on a particular
# version of the code/database
@@ -45,6 +45,7 @@ module Mastodon
class FollowRecommendationSuppression < ApplicationRecord; end
class CanonicalEmailBlock < ApplicationRecord; end
class Appeal < ApplicationRecord; end
+ class Webhook < ApplicationRecord; end
class PreviewCard < ApplicationRecord
self.inheritance_column = false
@@ -182,6 +183,7 @@ module Mastodon
deduplicate_accounts!
deduplicate_tags!
deduplicate_webauthn_credentials!
+ deduplicate_webhooks!
Scenic.database.refresh_materialized_view('instances', concurrently: true, cascade: false) if ActiveRecord::Migrator.current_version >= 2020_12_06_004238
Rails.cache.clear
@@ -497,6 +499,7 @@ module Mastodon
def deduplicate_tags!
remove_index_if_exists!(:tags, 'index_tags_on_name_lower')
+ remove_index_if_exists!(:tags, 'index_tags_on_name_lower_btree')
@prompt.say 'Deduplicating tags…'
ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM tags GROUP BY lower((name)::text) HAVING count(*) > 1").each do |row|
@@ -509,11 +512,10 @@ module Mastodon
end
@prompt.say 'Restoring tags indexes…'
- ActiveRecord::Base.connection.add_index :tags, 'lower((name)::text)', name: 'index_tags_on_name_lower', unique: true
-
- if ActiveRecord::Base.connection.indexes(:tags).any? { |i| i.name == 'index_tags_on_name_lower_btree' }
- @prompt.say 'Reindexing textual indexes on tags…'
- ActiveRecord::Base.connection.execute('REINDEX INDEX index_tags_on_name_lower_btree;')
+ if ActiveRecord::Migrator.current_version < 20210421121431
+ ActiveRecord::Base.connection.add_index :tags, 'lower((name)::text)', name: 'index_tags_on_name_lower', unique: true
+ else
+ ActiveRecord::Base.connection.execute 'CREATE UNIQUE INDEX CONCURRENTLY index_tags_on_name_lower_btree ON tags (lower(name) text_pattern_ops)'
end
end
@@ -531,6 +533,20 @@ module Mastodon
ActiveRecord::Base.connection.add_index :webauthn_credentials, ['external_id'], name: 'index_webauthn_credentials_on_external_id', unique: true
end
+ def deduplicate_webhooks!
+ return unless ActiveRecord::Base.connection.table_exists?(:webhooks)
+
+ remove_index_if_exists!(:webhooks, 'index_webhooks_on_url')
+
+ @prompt.say 'Deduplicating webhooks…'
+ ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM webhooks GROUP BY url HAVING count(*) > 1").each do |row|
+ Webhooks.where(id: row['ids'].split(',')).sort_by(&:id).reverse.drop(1).each(&:destroy)
+ end
+
+ @prompt.say 'Restoring webhooks indexes…'
+ ActiveRecord::Base.connection.add_index :webhooks, ['url'], name: 'index_webhooks_on_url', unique: true
+ end
+
def deduplicate_local_accounts!(accounts)
accounts = accounts.sort_by(&:id).reverse
diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb
index 4dafec4789..86be349440 100644
--- a/lib/mastodon/version.rb
+++ b/lib/mastodon/version.rb
@@ -17,7 +17,7 @@ module Mastodon
end
def flags
- 'rc3'
+ 'rc4'
end
def suffix
diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake
index 3ec685c743..c1e5bd2b45 100644
--- a/lib/tasks/mastodon.rake
+++ b/lib/tasks/mastodon.rake
@@ -142,7 +142,40 @@ namespace :mastodon do
prompt.say "\n"
if prompt.yes?('Do you want to store uploaded files on the cloud?', default: false)
- case prompt.select('Provider', ['Amazon S3', 'Wasabi', 'Minio', 'Google Cloud Storage'])
+ case prompt.select('Provider', ['DigitalOcean Spaces', 'Amazon S3', 'Wasabi', 'Minio', 'Google Cloud Storage'])
+ when 'DigitalOcean Spaces'
+ env['S3_ENABLED'] = 'true'
+ env['S3_PROTOCOL'] = 'https'
+
+ env['S3_BUCKET'] = prompt.ask('Space name:') do |q|
+ q.required true
+ q.default "files.#{env['LOCAL_DOMAIN']}"
+ q.modify :strip
+ end
+
+ env['S3_REGION'] = prompt.ask('Space region:') do |q|
+ q.required true
+ q.default 'nyc3'
+ q.modify :strip
+ end
+
+ env['S3_HOSTNAME'] = prompt.ask('Space endpoint:') do |q|
+ q.required true
+ q.default 'nyc3.digitaloceanspaces.com'
+ q.modify :strip
+ end
+
+ env['S3_ENDPOINT'] = "https://#{env['S3_HOSTNAME']}"
+
+ env['AWS_ACCESS_KEY_ID'] = prompt.ask('Space access key:') do |q|
+ q.required true
+ q.modify :strip
+ end
+
+ env['AWS_SECRET_ACCESS_KEY'] = prompt.ask('Space secret key:') do |q|
+ q.required true
+ q.modify :strip
+ end
when 'Amazon S3'
env['S3_ENABLED'] = 'true'
env['S3_PROTOCOL'] = 'https'
diff --git a/spec/controllers/api/v1/admin/domain_allows_controller_spec.rb b/spec/controllers/api/v1/admin/domain_allows_controller_spec.rb
index 26a391a60c..8100363f6b 100644
--- a/spec/controllers/api/v1/admin/domain_allows_controller_spec.rb
+++ b/spec/controllers/api/v1/admin/domain_allows_controller_spec.rb
@@ -94,25 +94,37 @@ RSpec.describe Api::V1::Admin::DomainAllowsController, type: :controller do
describe 'POST #create' do
let!(:domain_allow) { Fabricate(:domain_allow, domain: 'example.com') }
- before do
- post :create, params: { domain: 'foo.bar.com' }
- end
-
- it_behaves_like 'forbidden for wrong scope', 'write:statuses'
- it_behaves_like 'forbidden for wrong role', ''
- it_behaves_like 'forbidden for wrong role', 'Moderator'
-
- it 'returns http success' do
- expect(response).to have_http_status(200)
+ context do
+ before do
+ post :create, params: { domain: 'foo.bar.com' }
+ end
+
+ it_behaves_like 'forbidden for wrong scope', 'write:statuses'
+ it_behaves_like 'forbidden for wrong role', ''
+ it_behaves_like 'forbidden for wrong role', 'Moderator'
+
+ it 'returns http success' do
+ expect(response).to have_http_status(200)
+ end
+
+ it 'returns expected domain name' do
+ json = body_as_json
+ expect(json[:domain]).to eq 'foo.bar.com'
+ end
+
+ it 'creates a domain block' do
+ expect(DomainAllow.find_by(domain: 'foo.bar.com')).to_not be_nil
+ end
end
- it 'returns expected domain name' do
- json = body_as_json
- expect(json[:domain]).to eq 'foo.bar.com'
- end
+ context 'with invalid domain name' do
+ before do
+ post :create, params: { domain: 'foo bar' }
+ end
- it 'creates a domain block' do
- expect(DomainAllow.find_by(domain: 'foo.bar.com')).to_not be_nil
+ it 'returns http unprocessable entity' do
+ expect(response).to have_http_status(422)
+ end
end
end
end
diff --git a/spec/controllers/api/v1/filters/keywords_controller_spec.rb b/spec/controllers/api/v2/filters/keywords_controller_spec.rb
similarity index 98%
rename from spec/controllers/api/v1/filters/keywords_controller_spec.rb
rename to spec/controllers/api/v2/filters/keywords_controller_spec.rb
index aecb4e41c9..1201a4ca23 100644
--- a/spec/controllers/api/v1/filters/keywords_controller_spec.rb
+++ b/spec/controllers/api/v2/filters/keywords_controller_spec.rb
@@ -1,6 +1,6 @@
require 'rails_helper'
-RSpec.describe Api::V1::Filters::KeywordsController, type: :controller do
+RSpec.describe Api::V2::Filters::KeywordsController, type: :controller do
render_views
let(:user) { Fabricate(:user) }
diff --git a/spec/controllers/api/v1/filters/statuses_controller_spec.rb b/spec/controllers/api/v2/filters/statuses_controller_spec.rb
similarity index 98%
rename from spec/controllers/api/v1/filters/statuses_controller_spec.rb
rename to spec/controllers/api/v2/filters/statuses_controller_spec.rb
index 3b2399dd89..9740c1eb30 100644
--- a/spec/controllers/api/v1/filters/statuses_controller_spec.rb
+++ b/spec/controllers/api/v2/filters/statuses_controller_spec.rb
@@ -1,6 +1,6 @@
require 'rails_helper'
-RSpec.describe Api::V1::Filters::StatusesController, type: :controller do
+RSpec.describe Api::V2::Filters::StatusesController, type: :controller do
render_views
let(:user) { Fabricate(:user) }
diff --git a/spec/fixtures/files/utf8-followers.txt b/spec/fixtures/files/utf8-followers.txt
new file mode 100644
index 0000000000..9d4fe3485b
--- /dev/null
+++ b/spec/fixtures/files/utf8-followers.txt
@@ -0,0 +1 @@
+@nare@թութ.հայ
diff --git a/spec/models/account/field_spec.rb b/spec/models/account/field_spec.rb
index fcb2a884a1..b4beec0483 100644
--- a/spec/models/account/field_spec.rb
+++ b/spec/models/account/field_spec.rb
@@ -89,6 +89,14 @@ RSpec.describe Account::Field, type: :model do
expect(subject.verifiable?).to be false
end
end
+
+ context 'for text which is blank' do
+ let(:value) { '' }
+
+ it 'returns false' do
+ expect(subject.verifiable?).to be false
+ end
+ end
end
context 'for remote accounts' do
@@ -133,6 +141,14 @@ RSpec.describe Account::Field, type: :model do
expect(subject.verifiable?).to be false
end
end
+
+ context 'for text which is blank' do
+ let(:value) { '' }
+
+ it 'returns false' do
+ expect(subject.verifiable?).to be false
+ end
+ end
end
end
end
diff --git a/spec/models/custom_emoji_filter_spec.rb b/spec/models/custom_emoji_filter_spec.rb
index d859f5c5f5..2b1b5dc542 100644
--- a/spec/models/custom_emoji_filter_spec.rb
+++ b/spec/models/custom_emoji_filter_spec.rb
@@ -50,10 +50,10 @@ RSpec.describe CustomEmojiFilter do
context 'else' do
let(:params) { { else: 'else' } }
- it 'raises RuntimeError' do
+ it 'raises Mastodon::InvalidParameterError' do
expect do
subject
- end.to raise_error(RuntimeError, /Unknown filter: else/)
+ end.to raise_error(Mastodon::InvalidParameterError, /Unknown filter: else/)
end
end
end
diff --git a/spec/services/import_service_spec.rb b/spec/services/import_service_spec.rb
index 764225aa72..e2d182920e 100644
--- a/spec/services/import_service_spec.rb
+++ b/spec/services/import_service_spec.rb
@@ -172,6 +172,29 @@ RSpec.describe ImportService, type: :service do
end
end
+ # Based on the bug report 20571 where UTF-8 encoded domains were rejecting import of their users
+ #
+ # https://github.com/mastodon/mastodon/issues/20571
+ context 'utf-8 encoded domains' do
+ subject { ImportService.new }
+
+ let!(:nare) { Fabricate(:account, username: 'nare', domain: 'թութ.հայ', locked: false, protocol: :activitypub, inbox_url: 'https://թութ.հայ/inbox') }
+
+ # Make sure to not actually go to the remote server
+ before do
+ stub_request(:post, "https://թութ.հայ/inbox").to_return(status: 200)
+ end
+
+ let(:csv) { attachment_fixture('utf8-followers.txt') }
+ let(:import) { Import.create(account: account, type: 'following', data: csv) }
+
+ it 'follows the listed account' do
+ expect(account.follow_requests.count).to eq 0
+ subject.call(import)
+ expect(account.follow_requests.count).to eq 1
+ end
+ end
+
context 'import bookmarks' do
subject { ImportService.new }
diff --git a/streaming/index.js b/streaming/index.js
index ff7d48250b..53a790ea09 100644
--- a/streaming/index.js
+++ b/streaming/index.js
@@ -689,7 +689,7 @@ const startWorker = async (workerId) => {
queries.push(client.query('SELECT 1 FROM account_domain_blocks WHERE account_id = $1 AND domain = $2', [req.accountId, accountDomain]));
}
- if (!unpackedPayload.filter_results && !req.cachedFilters) {
+ if (!unpackedPayload.filtered && !req.cachedFilters) {
queries.push(client.query('SELECT filter.id AS id, filter.phrase AS title, filter.context AS context, filter.expires_at AS expires_at, filter.action AS filter_action, keyword.keyword AS keyword, keyword.whole_word AS whole_word FROM custom_filter_keywords keyword JOIN custom_filters filter ON keyword.custom_filter_id = filter.id WHERE filter.account_id = $1 AND filter.expires_at IS NULL OR filter.expires_at > NOW()', [req.accountId]));
}
@@ -700,7 +700,7 @@ const startWorker = async (workerId) => {
return;
}
- if (!unpackedPayload.filter_results && !req.cachedFilters) {
+ if (!unpackedPayload.filtered && !req.cachedFilters) {
const filterRows = values[accountDomain ? 2 : 1].rows;
req.cachedFilters = filterRows.reduce((cache, row) => {
@@ -715,7 +715,7 @@ const startWorker = async (workerId) => {
title: row.title,
context: row.context,
expires_at: row.expires_at,
- filter_action: row.filter_action,
+ filter_action: ['warn', 'hide'][row.filter_action],
},
};
}
@@ -743,18 +743,18 @@ const startWorker = async (workerId) => {
}
// Check filters
- if (req.cachedFilters && !unpackedPayload.filter_results) {
+ if (req.cachedFilters && !unpackedPayload.filtered) {
const status = unpackedPayload;
const searchContent = ([status.spoiler_text || '', status.content].concat((status.poll && status.poll.options) ? status.poll.options.map(option => option.title) : [])).concat(status.media_attachments.map(att => att.description)).join('\n\n').replace(//g, '\n\n'); const searchIndex = JSDOM.fragment(searchContent).textContent; const now = new Date(); - payload.filter_results = []; + payload.filtered = []; Object.values(req.cachedFilters).forEach((cachedFilter) => { if ((cachedFilter.expires_at === null || cachedFilter.expires_at > now)) { const keyword_matches = searchIndex.match(cachedFilter.regexp); if (keyword_matches) { - payload.filter_results.push({ + payload.filtered.push({ filter: cachedFilter.repr, keyword_matches, });