Compare commits

...

78 commits

Author SHA1 Message Date
ida
940db5c971 fix locales,,, again 2020-12-30 22:49:03 -07:00
ida
aaf688112c set RAILS_ENV to development in .env.vagrant 2020-12-30 22:48:37 -07:00
ida
8da7f04c80 Merge tag 'v3.3.0' of https://github.com/tootsuite/mastodon 2020-12-30 20:14:58 -07:00
Eugen Rochko
633d175146
Bump version to 3.3.0 () 2020-12-27 06:00:55 +01:00
Yamagishi Kazutoshi
e43532c9cc
Normalize locale files () 2020-12-27 05:30:56 +01:00
ThibG
f1f96ebf02
Fix being able to import more than allowed number of follows ()
* Fix being able to import more than allowed number of follows

Without this commit, if someone tries importing a second list of accounts to
follow before the first one has been processed, this will queue imports for
the two whole lists, even if they exceed the account's allowed number of
outgoing follows.

This commit changes it so the individual queued imports aren't exempt from
the follow limit check (they remain exempt from the rate-limiting check
though).

* Catch validation errors to not re-queue failed follows

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-26 23:52:46 +01:00
Eugen Rochko
4580129c98
New Crowdin updates ()
* New translations en.json (Vietnamese)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.json (Vietnamese)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.json (Malayalam)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.json (Malayalam)
[ci skip]

* New translations en.yml (Korean)
[ci skip]

* New translations en.yml (Japanese)
[ci skip]

* New translations simple_form.en.yml (Japanese)
[ci skip]

* New translations en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.yml (Occitan)
[ci skip]

* New translations en.yml (Occitan)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations en.yml (Chinese Simplified)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations simple_form.en.yml (Armenian)
[ci skip]

* New translations devise.en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations devise.en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* i18n-tasks normalize

* yarn manage:translations
2020-12-26 23:51:46 +01:00
Takeshi Umeda
ba748a83f2
Fix logo button style ()
* Fix bell button rtl style

* Remove size and style props from button component

* Fix logo button style

* Update jest snapshot
2020-12-26 23:50:34 +01:00
Eugen Rochko
e89648574f
Fix error when changing ACL on missing objects during suspension () 2020-12-24 15:53:45 +01:00
Eugen Rochko
ba0b79fc5c
Fix undefined method error when batch-removing statuses with ElasticSearch on () 2020-12-24 15:53:26 +01:00
Takeshi Umeda
7e6d3a7d9a
Fix unfollow action button style () 2020-12-23 23:47:50 +01:00
ThibG
b08d2d4f78
Fix media modal buttons not showing up on mobile ()
Fixes 

When the pop-out player was introduced, it had tweaks for the mobile
view, but it's now disabled in mobile mode and the styling was reused
for modals, causing the footer to be hidden on mobile without a good
reason.

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-23 19:55:23 +01:00
trwnh
4950e59cdc
Use existing FeaturedTag serializer and delete AccountFeaturedTag serializer ()
* Update featured_tags_controller.rb

* Update featured_tag_serializer.rb

* Update featured_tag_serializer.rb

* Delete account_featured_tag_serializer.rb

* please codeclimate

* please codeclimate
2020-12-23 16:43:38 +01:00
ThibG
de57efd055
Fix mentions not being deleted efficiently ()
As a regression from the recent optimizations, mentions were left untouched
until `account.destroy`, which would then delete them individually,
and executing queries to find and delete associated notifications, resulting
in a massive slowdown.

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-23 16:43:11 +01:00
Eugen Rochko
473abc35a1
Fix trying to privatize empty media attachments () 2020-12-23 15:47:03 +09:00
Eugen Rochko
444b21b55f
Bump version to 3.3.0rc3 () 2020-12-23 01:36:13 +01:00
ThibG
814b7775fb
Improve performances of deleting favourites when deleting accounts ()
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-23 01:35:02 +01:00
Eugen Rochko
62e42bd15b
New Crowdin updates ()
* New translations doorkeeper.en.yml (Esperanto)
[ci skip]

* New translations doorkeeper.en.yml (Albanian)
[ci skip]

* New translations en.yml (Albanian)
[ci skip]

* New translations en.yml (Greek)
[ci skip]

* New translations doorkeeper.en.yml (Standard Moroccan Tamazight)
[ci skip]

* New translations en.json (Romanian)
[ci skip]

* New translations en.yml (Icelandic)
[ci skip]

* New translations en.json (Esperanto)
[ci skip]

* New translations en.json (Thai)
[ci skip]

* New translations simple_form.en.yml (Thai)
[ci skip]

* New translations en.yml (Thai)
[ci skip]

* New translations simple_form.en.yml (Galician)
[ci skip]

* New translations simple_form.en.yml (Romanian)
[ci skip]

* New translations en.yml (Tatar)
[ci skip]

* New translations en.json (Tatar)
[ci skip]

* New translations en.yml (Standard Moroccan Tamazight)
[ci skip]

* New translations en.json (Standard Moroccan Tamazight)
[ci skip]

* New translations doorkeeper.en.yml (Sardinian)
[ci skip]

* New translations en.yml (Romanian)
[ci skip]

* New translations doorkeeper.en.yml (Romanian)
[ci skip]

* New translations doorkeeper.en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.json (Bulgarian)
[ci skip]

* New translations simple_form.en.yml (Catalan)
[ci skip]

* New translations en.yml (Catalan)
[ci skip]

* New translations doorkeeper.en.yml (Bulgarian)
[ci skip]

* New translations simple_form.en.yml (Bulgarian)
[ci skip]

* New translations en.yml (Bulgarian)
[ci skip]

* New translations doorkeeper.en.yml (Arabic)
[ci skip]

* New translations en.yml (French)
[ci skip]

* New translations simple_form.en.yml (Arabic)
[ci skip]

* New translations en.yml (Arabic)
[ci skip]

* New translations en.json (Arabic)
[ci skip]

* New translations doorkeeper.en.yml (Spanish)
[ci skip]

* New translations simple_form.en.yml (Spanish)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations doorkeeper.en.yml (French)
[ci skip]

* New translations doorkeeper.en.yml (Sorani (Kurdish))
[ci skip]

* New translations doorkeeper.en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Czech)
[ci skip]

* New translations simple_form.en.yml (Greek)
[ci skip]

* New translations simple_form.en.yml (Dutch)
[ci skip]

* New translations en.yml (Dutch)
[ci skip]

* New translations en.json (Dutch)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations en.json (German)
[ci skip]

* New translations en.yml (Chinese Simplified)
[ci skip]

* New translations en.json (Czech)
[ci skip]

* New translations en.json (Spanish)
[ci skip]

* New translations simple_form.en.yml (French)
[ci skip]

* New translations en.yml (Corsican)
[ci skip]

* New translations en.yml (Japanese)
[ci skip]

* New translations en.json (Swedish)
[ci skip]

* New translations simple_form.en.yml (Chinese Simplified)
[ci skip]

* New translations en.json (Kabyle)
[ci skip]

* New translations en.yml (Occitan)
[ci skip]

* New translations simple_form.en.yml (Sardinian)
[ci skip]

* New translations en.yml (Sardinian)
[ci skip]

* New translations en.json (Sardinian)
[ci skip]

* New translations simple_form.en.yml (Sorani (Kurdish))
[ci skip]

* New translations en.yml (Sorani (Kurdish))
[ci skip]

* New translations en.json (Sorani (Kurdish))
[ci skip]

* New translations simple_form.en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations simple_form.en.yml (Esperanto)
[ci skip]

* New translations en.yml (Esperanto)
[ci skip]

* New translations simple_form.en.yml (Chinese Traditional)
[ci skip]

* New translations en.yml (Chinese Traditional)
[ci skip]

* New translations doorkeeper.en.yml (Catalan)
[ci skip]

* New translations simple_form.en.yml (Czech)
[ci skip]

* New translations doorkeeper.en.yml (Norwegian)
[ci skip]

* New translations simple_form.en.yml (Norwegian)
[ci skip]

* New translations en.yml (Norwegian)
[ci skip]

* New translations en.json (Norwegian)
[ci skip]

* New translations doorkeeper.en.yml (Dutch)
[ci skip]

* New translations en.yml (Macedonian)
[ci skip]

* New translations simple_form.en.yml (Polish)
[ci skip]

* New translations en.json (Macedonian)
[ci skip]

* New translations en.yml (Lithuanian)
[ci skip]

* New translations en.json (Lithuanian)
[ci skip]

* New translations doorkeeper.en.yml (Korean)
[ci skip]

* New translations simple_form.en.yml (Korean)
[ci skip]

* New translations en.yml (Polish)
[ci skip]

* New translations doorkeeper.en.yml (Polish)
[ci skip]

* New translations doorkeeper.en.yml (Georgian)
[ci skip]

* New translations en.yml (Slovak)
[ci skip]

* New translations doorkeeper.en.yml (Slovenian)
[ci skip]

* New translations simple_form.en.yml (Slovenian)
[ci skip]

* New translations en.yml (Slovenian)
[ci skip]

* New translations en.json (Slovenian)
[ci skip]

* New translations doorkeeper.en.yml (Slovak)
[ci skip]

* New translations simple_form.en.yml (Slovak)
[ci skip]

* New translations en.json (Slovak)
[ci skip]

* New translations doorkeeper.en.yml (Russian)
[ci skip]

* New translations simple_form.en.yml (Russian)
[ci skip]

* New translations en.yml (Russian)
[ci skip]

* New translations doorkeeper.en.yml (Portuguese)
[ci skip]

* New translations simple_form.en.yml (Portuguese)
[ci skip]

* New translations en.yml (Portuguese)
[ci skip]

* New translations en.yml (Korean)
[ci skip]

* New translations simple_form.en.yml (Georgian)
[ci skip]

* New translations doorkeeper.en.yml (Czech)
[ci skip]

* New translations doorkeeper.en.yml (Greek)
[ci skip]

* New translations en.yml (Finnish)
[ci skip]

* New translations en.json (Finnish)
[ci skip]

* New translations doorkeeper.en.yml (Basque)
[ci skip]

* New translations simple_form.en.yml (Basque)
[ci skip]

* New translations en.yml (Basque)
[ci skip]

* New translations en.json (Basque)
[ci skip]

* New translations en.json (Greek)
[ci skip]

* New translations doorkeeper.en.yml (Finnish)
[ci skip]

* New translations doorkeeper.en.yml (German)
[ci skip]

* New translations simple_form.en.yml (German)
[ci skip]

* New translations en.yml (German)
[ci skip]

* New translations doorkeeper.en.yml (Danish)
[ci skip]

* New translations simple_form.en.yml (Danish)
[ci skip]

* New translations en.yml (Danish)
[ci skip]

* New translations en.json (Danish)
[ci skip]

* New translations simple_form.en.yml (Finnish)
[ci skip]

* New translations en.json (Hebrew)
[ci skip]

* New translations en.yml (Georgian)
[ci skip]

* New translations en.json (Georgian)
[ci skip]

* New translations doorkeeper.en.yml (Japanese)
[ci skip]

* New translations simple_form.en.yml (Japanese)
[ci skip]

* New translations doorkeeper.en.yml (Italian)
[ci skip]

* New translations simple_form.en.yml (Italian)
[ci skip]

* New translations en.yml (Italian)
[ci skip]

* New translations doorkeeper.en.yml (Armenian)
[ci skip]

* New translations en.yml (Hebrew)
[ci skip]

* New translations simple_form.en.yml (Armenian)
[ci skip]

* New translations doorkeeper.en.yml (Hungarian)
[ci skip]

* New translations simple_form.en.yml (Hungarian)
[ci skip]

* New translations en.yml (Hungarian)
[ci skip]

* New translations doorkeeper.en.yml (Hebrew)
[ci skip]

* New translations simple_form.en.yml (Hebrew)
[ci skip]

* New translations simple_form.en.yml (Vietnamese)
[ci skip]

* New translations en.json (Turkish)
[ci skip]

* New translations en.yml (French)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.yml (Spanish, Argentina)
[ci skip]

* New translations en.json (French)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.json (French)
[ci skip]

* New translations en.yml (Galician)
[ci skip]

* New translations en.yml (Galician)
[ci skip]

* New translations en.yml (Catalan)
[ci skip]

* New translations en.yml (Occitan)
[ci skip]

* New translations en.json (Occitan)
[ci skip]

* New translations en.yml (Polish)
[ci skip]

* New translations en.yml (Greek)
[ci skip]

* New translations en.yml (Albanian)
[ci skip]

* New translations en.json (German)
[ci skip]

* New translations en.json (German)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations en.yml (German)
[ci skip]

* New translations devise.en.yml (German)
[ci skip]

* New translations en.yml (Icelandic)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Italian)
[ci skip]

* New translations en.yml (Portuguese)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations simple_form.en.yml (Armenian)
[ci skip]

* New translations simple_form.en.yml (Armenian)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.yml (Korean)
[ci skip]

* New translations en.yml (Korean)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.yml (Chinese Simplified)
[ci skip]

* New translations en.yml (Chinese Simplified)
[ci skip]

* New translations en.json (Chinese Simplified)
[ci skip]

* New translations en.json (Chinese Simplified)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Hungarian)
[ci skip]

* New translations en.yml (Occitan)
[ci skip]

* New translations simple_form.en.yml (Occitan)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.json (Malayalam)
[ci skip]

* New translations en.yml (Malayalam)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.json (Malayalam)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.json (Malayalam)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.json (Malayalam)
[ci skip]

* New translations en.json (Vietnamese)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.yml (Malayalam)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.json (Malayalam)
[ci skip]

* New translations en.yml (Malayalam)
[ci skip]

* New translations simple_form.en.yml (Malayalam)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.json (Malayalam)
[ci skip]

* New translations en.yml (Malayalam)
[ci skip]

* New translations devise.en.yml (Chinese Traditional)
[ci skip]

* New translations en.json (Malayalam)
[ci skip]

* New translations devise.en.yml (Chinese Traditional)
[ci skip]

* New translations en.json (Malayalam)
[ci skip]

* New translations devise.en.yml (Chinese Traditional)
[ci skip]

* New translations en.yml (Malayalam)
[ci skip]

* New translations devise.en.yml (Chinese Traditional)
[ci skip]

* New translations en.json (Dutch)
[ci skip]

* New translations en.yml (Dutch)
[ci skip]

* New translations en.yml (Dutch)
[ci skip]

* New translations simple_form.en.yml (Dutch)
[ci skip]

* New translations en.yml (Dutch)
[ci skip]

* New translations simple_form.en.yml (Dutch)
[ci skip]

* New translations en.yml (Dutch)
[ci skip]

* New translations en.yml (Chinese Traditional)
[ci skip]

* New translations en.yml (Chinese Traditional)
[ci skip]

* New translations en.yml (Chinese Traditional)
[ci skip]

* New translations en.json (Malayalam)
[ci skip]

* New translations en.yml (Malayalam)
[ci skip]

* New translations en.yml (Malayalam)
[ci skip]

* New translations en.json (Malayalam)
[ci skip]

* New translations en.json (Malayalam)
[ci skip]

* New translations en.yml (Indonesian)
[ci skip]

* New translations en.json (Malayalam)
[ci skip]

* New translations en.yml (Hungarian)
[ci skip]

* New translations en.yml (Hungarian)
[ci skip]

* New translations en.yml (Hungarian)
[ci skip]

* New translations en.yml (Hungarian)
[ci skip]

* New translations activerecord.en.yml (Kabyle)
[ci skip]

* New translations en.json (Malayalam)
[ci skip]

* New translations en.json (Malayalam)
[ci skip]

* New translations en.json (Malayalam)
[ci skip]

* New translations en.json (Croatian)
[ci skip]

* New translations en.json (Croatian)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.json (Esperanto)
[ci skip]

* New translations en.json (Esperanto)
[ci skip]

* i18n-tasks normalize

* yarn manage:translations
2020-12-23 00:10:58 +01:00
ThibG
2ab3e91eaf
Fix BatchedRemoveStatusService not working without ES in rails console ()
Not a huge deal but may cause surprising failures in custom scripts and
development.

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-23 00:04:52 +01:00
ThibG
3249d35bdc
Improve account deletion performances further ()
* Delete status records by batches of 50

* Do not precompute values that are only used once

* Do not generate redis events for removal of public toots older than two weeks

* Filter reported toots a priori for polls and status deletion

* Do not process reblogs when cleaning up public timelines

As in Mastodon proper, reblogs don't appear in public TLs

* Clean the deleted account's own feed in one go

* Refactor Account#clean_feed_manager and List#clean_feed_manager

* Delete instead of destroy a few more associations

* Fix preloading

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-22 23:57:46 +01:00
ThibG
f18349640b
Fix batch order warnings in BatchedRemoveStatusService ()
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-22 20:24:55 +01:00
ThibG
1cf2c3a810
Fix external user creation failing when invite request text is required ()
* Fix external user creation failing when invite request text is required

Also fixes tootctl-based user creation.

* Add test about invites when invite request text is otherwise required

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-22 17:14:32 +01:00
Eugen Rochko
9915d11c0d
Fix unnecessary queries when batch-removing statuses, 100x faster () 2020-12-22 17:13:55 +01:00
dependabot[bot]
67ebd61f11
Bump node-notifier from 8.0.0 to 8.0.1 ()
Bumps [node-notifier](https://github.com/mikaelbr/node-notifier) from 8.0.0 to 8.0.1.
- [Release notes](https://github.com/mikaelbr/node-notifier/releases)
- [Changelog](https://github.com/mikaelbr/node-notifier/blob/v8.0.1/CHANGELOG.md)
- [Commits](https://github.com/mikaelbr/node-notifier/compare/v8.0.0...v8.0.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-12-22 05:12:11 +01:00
ThibG
43961035a9
Fix some notifications not being deleted on poll/status deletion ()
* Fix deleting polls not deleting notifications

* Fix fav notification deletion when deleting a toot

* Refactor DeleteAccountService spec

* Add DeleteAccountService tests for other associations and notifications

* Add favourite handling spec in status removal

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-21 18:22:17 +01:00
ThibG
6f51fd7435
Fix invitation links not working when invite request text is required ()
Fixes 

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-21 00:47:02 +01:00
ThibG
7bf3c6e57b
Fix AccountDeletionWorker crashing and clogging sidekiq queues ()
* Fix account deletion workers being queued multiple times for a single account

* Fix poll votes being unnecessarily instantiated on poll deletion

* Fix favourites being unnecessarily instantiated on status deletion

* Remove inaccurate comments

* Delete polls instead of destroying them

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-20 18:25:00 +01:00
ThibG
9734c9b6fe
Add clean error message when RAILS_ENV is unset ()
By default, an unset RAILS_ENV is understood as RAILS_ENV=development.

However, this is not what most people expect, and due to development-only
dependencies, users are often left with confusing error messages.

This commit changes it so that an explicit RAILS_ENV is required, and
failing that, an error message is displayed before loading the app.

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-20 18:05:03 +01:00
ThibG
c4e860277d
Fix "tootctl accounts fix-duplicates" ()
- `pluck_each` cannot be used this way with `group`
- typo

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-19 13:34:16 +01:00
Eugen Rochko
3561f8fabe
Forward-port v3.2.2 changelog () 2020-12-19 03:13:50 +01:00
Yamagishi Kazutoshi
2dd3643dbc
Ran i18n-tasks normalize () 2020-12-19 02:23:42 +01:00
Eugen Rochko
c6598b17d9
Bump version to 3.3.0rc2 () 2020-12-19 00:28:38 +01:00
Eugen Rochko
1c41ce3217
New Crowdin updates ()
* New translations en.json (Danish)
[ci skip]

* New translations en.yml (Danish)
[ci skip]

* New translations simple_form.en.yml (Danish)
[ci skip]

* New translations doorkeeper.en.yml (Danish)
[ci skip]

* New translations en.yml (German)
[ci skip]

* New translations simple_form.en.yml (German)
[ci skip]

* New translations en.json (Greek)
[ci skip]

* New translations simple_form.en.yml (Czech)
[ci skip]

* New translations doorkeeper.en.yml (Greek)
[ci skip]

* New translations en.json (Basque)
[ci skip]

* New translations en.yml (Basque)
[ci skip]

* New translations simple_form.en.yml (Basque)
[ci skip]

* New translations doorkeeper.en.yml (Basque)
[ci skip]

* New translations en.json (Finnish)
[ci skip]

* New translations doorkeeper.en.yml (Czech)
[ci skip]

* New translations en.yml (Czech)
[ci skip]

* New translations simple_form.en.yml (Spanish)
[ci skip]

* New translations en.json (Bulgarian)
[ci skip]

* New translations doorkeeper.en.yml (Spanish)
[ci skip]

* New translations en.json (Arabic)
[ci skip]

* New translations en.yml (Arabic)
[ci skip]

* New translations simple_form.en.yml (Arabic)
[ci skip]

* New translations doorkeeper.en.yml (Arabic)
[ci skip]

* New translations en.yml (Bulgarian)
[ci skip]

* New translations simple_form.en.yml (Bulgarian)
[ci skip]

* New translations doorkeeper.en.yml (Bulgarian)
[ci skip]

* New translations en.json (Catalan)
[ci skip]

* New translations en.yml (Catalan)
[ci skip]

* New translations simple_form.en.yml (Catalan)
[ci skip]

* New translations doorkeeper.en.yml (Catalan)
[ci skip]

* New translations en.yml (Chinese Traditional)
[ci skip]

* New translations doorkeeper.en.yml (Breton)
[ci skip]

* New translations simple_form.en.yml (Breton)
[ci skip]

* New translations en.json (Kannada)
[ci skip]

* New translations en.yml (Breton)
[ci skip]

* New translations en.json (Hindi)
[ci skip]

* New translations en.yml (Hindi)
[ci skip]

* New translations doorkeeper.en.yml (Hindi)
[ci skip]

* New translations en.json (Malay)
[ci skip]

* New translations en.yml (Malay)
[ci skip]

* New translations en.json (Telugu)
[ci skip]

* New translations en.yml (Telugu)
[ci skip]

* New translations en.json (Welsh)
[ci skip]

* New translations en.json (Breton)
[ci skip]

* New translations en.yml (Welsh)
[ci skip]

* New translations simple_form.en.yml (Welsh)
[ci skip]

* New translations doorkeeper.en.yml (Welsh)
[ci skip]

* New translations doorkeeper.en.yml (Esperanto)
[ci skip]

* New translations en.json (Uyghur)
[ci skip]

* New translations en.yml (Uyghur)
[ci skip]

* New translations en.json (Malayalam)
[ci skip]

* New translations en.yml (Malayalam)
[ci skip]

* New translations simple_form.en.yml (Malayalam)
[ci skip]

* New translations doorkeeper.en.yml (Malayalam)
[ci skip]

* New translations en.yml (Kannada)
[ci skip]

* New translations en.yml (Serbian (Latin))
[ci skip]

* New translations en.json (Taigi)
[ci skip]

* New translations simple_form.en.yml (Kabyle)
[ci skip]

* New translations doorkeeper.en.yml (Kabyle)
[ci skip]

* New translations en.json (Ido)
[ci skip]

* New translations en.yml (Ido)
[ci skip]

* New translations simple_form.en.yml (Ido)
[ci skip]

* New translations doorkeeper.en.yml (Ido)
[ci skip]

* New translations en.yml (Taigi)
[ci skip]

* New translations en.json (Silesian)
[ci skip]

* New translations en.yml (Silesian)
[ci skip]

* New translations en.yml (Kabyle)
[ci skip]

* New translations en.json (Asturian)
[ci skip]

* New translations en.json (Serbian (Latin))
[ci skip]

* New translations en.yml (Asturian)
[ci skip]

* New translations simple_form.en.yml (Asturian)
[ci skip]

* New translations doorkeeper.en.yml (Asturian)
[ci skip]

* New translations en.json (Occitan)
[ci skip]

* New translations simple_form.en.yml (Occitan)
[ci skip]

* New translations doorkeeper.en.yml (Occitan)
[ci skip]

* New translations en.yml (Latvian)
[ci skip]

* New translations en.yml (Sanskrit)
[ci skip]

* New translations simple_form.en.yml (Serbian (Latin))
[ci skip]

* New translations doorkeeper.en.yml (Serbian (Latin))
[ci skip]

* New translations en.json (Corsican)
[ci skip]

* New translations simple_form.en.yml (Corsican)
[ci skip]

* New translations doorkeeper.en.yml (Corsican)
[ci skip]

* New translations en.json (Sanskrit)
[ci skip]

* New translations en.json (Spanish, Argentina)
[ci skip]

* New translations en.json (Latvian)
[ci skip]

* New translations en.json (Chinese Traditional, Hong Kong)
[ci skip]

* New translations simple_form.en.yml (Sorani (Kurdish))
[ci skip]

* New translations en.yml (Sorani (Kurdish))
[ci skip]

* New translations en.json (Sorani (Kurdish))
[ci skip]

* New translations en.yml (Occitan)
[ci skip]

* New translations simple_form.en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations simple_form.en.yml (Esperanto)
[ci skip]

* New translations en.yml (Sardinian)
[ci skip]

* New translations en.yml (Esperanto)
[ci skip]

* New translations en.json (Persian)
[ci skip]

* New translations en.yml (Corsican)
[ci skip]

* New translations doorkeeper.en.yml (Indonesian)
[ci skip]

* New translations en.yml (Persian)
[ci skip]

* New translations simple_form.en.yml (Persian)
[ci skip]

* New translations en.json (Sardinian)
[ci skip]

* New translations simple_form.en.yml (Sardinian)
[ci skip]

* New translations en.json (Tamil)
[ci skip]

* New translations en.json (Esperanto)
[ci skip]

* New translations en.json (Thai)
[ci skip]

* New translations simple_form.en.yml (Thai)
[ci skip]

* New translations en.yml (Thai)
[ci skip]

* New translations doorkeeper.en.yml (Standard Moroccan Tamazight)
[ci skip]

* New translations en.yml (Tatar)
[ci skip]

* New translations en.json (Kabyle)
[ci skip]

* New translations en.json (Tatar)
[ci skip]

* New translations en.yml (Standard Moroccan Tamazight)
[ci skip]

* New translations en.json (Standard Moroccan Tamazight)
[ci skip]

* New translations doorkeeper.en.yml (Sardinian)
[ci skip]

* New translations doorkeeper.en.yml (Sorani (Kurdish))
[ci skip]

* New translations doorkeeper.en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations doorkeeper.en.yml (Persian)
[ci skip]

* New translations en.yml (Tamil)
[ci skip]

* New translations doorkeeper.en.yml (Estonian)
[ci skip]

* New translations doorkeeper.en.yml (Norwegian Nynorsk)
[ci skip]

* New translations en.yml (Croatian)
[ci skip]

* New translations simple_form.en.yml (Croatian)
[ci skip]

* New translations doorkeeper.en.yml (Croatian)
[ci skip]

* New translations en.json (Norwegian Nynorsk)
[ci skip]

* New translations en.yml (Norwegian Nynorsk)
[ci skip]

* New translations simple_form.en.yml (Norwegian Nynorsk)
[ci skip]

* New translations en.json (Kazakh)
[ci skip]

* New translations doorkeeper.en.yml (Thai)
[ci skip]

* New translations en.yml (Kazakh)
[ci skip]

* New translations simple_form.en.yml (Kazakh)
[ci skip]

* New translations doorkeeper.en.yml (Kazakh)
[ci skip]

* New translations en.json (Estonian)
[ci skip]

* New translations en.yml (Estonian)
[ci skip]

* New translations simple_form.en.yml (Estonian)
[ci skip]

* New translations en.json (Croatian)
[ci skip]

* New translations doorkeeper.en.yml (Marathi)
[ci skip]

* New translations simple_form.en.yml (Tamil)
[ci skip]

* New translations simple_form.en.yml (Spanish, Mexico)
[ci skip]

* New translations doorkeeper.en.yml (Tamil)
[ci skip]

* New translations en.yml (Spanish, Argentina)
[ci skip]

* New translations simple_form.en.yml (Spanish, Argentina)
[ci skip]

* New translations doorkeeper.en.yml (Spanish, Argentina)
[ci skip]

* New translations en.json (Spanish, Mexico)
[ci skip]

* New translations en.yml (Spanish, Mexico)
[ci skip]

* New translations doorkeeper.en.yml (Spanish, Mexico)
[ci skip]

* New translations en.json (Bengali)
[ci skip]

* New translations en.yml (Bengali)
[ci skip]

* New translations simple_form.en.yml (Bengali)
[ci skip]

* New translations en.json (Marathi)
[ci skip]

* New translations en.yml (Marathi)
[ci skip]

* New translations simple_form.en.yml (Standard Moroccan Tamazight)
[ci skip]

* New translations en.json (French)
[ci skip]

* New translations en.json (Korean)
[ci skip]

* New translations en.json (Spanish, Argentina)
[ci skip]

* New translations en.json (Spanish, Argentina)
[ci skip]

* New translations en.json (Catalan)
[ci skip]

* New translations en.json (Galician)
[ci skip]

* New translations en.yml (Galician)
[ci skip]

* New translations en.json (Vietnamese)
[ci skip]

* New translations en.json (Russian)
[ci skip]

* New translations en.json (Russian)
[ci skip]

* New translations en.json (Polish)
[ci skip]

* New translations en.json (Albanian)
[ci skip]

* New translations en.yml (Albanian)
[ci skip]

* New translations en.json (Greek)
[ci skip]

* New translations en.json (Albanian)
[ci skip]

* New translations en.json (Spanish)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations en.json (Persian)
[ci skip]

* New translations en.json (Icelandic)
[ci skip]

* New translations en.yml (Icelandic)
[ci skip]

* New translations en.json (Icelandic)
[ci skip]

* New translations en.json (Hungarian)
[ci skip]

* New translations en.yml (Hungarian)
[ci skip]

* New translations en.yml (Portuguese, Brazilian)
[ci skip]

* New translations simple_form.en.yml (Portuguese, Brazilian)
[ci skip]

* New translations en.json (Portuguese, Brazilian)
[ci skip]

* New translations en.yml (Portuguese, Brazilian)
[ci skip]

* New translations simple_form.en.yml (Portuguese, Brazilian)
[ci skip]

* New translations en.yml (Portuguese, Brazilian)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Thai)
[ci skip]

* New translations en.yml (Thai)
[ci skip]

* New translations en.json (Thai)
[ci skip]

* New translations en.yml (Thai)
[ci skip]

* New translations en.yml (Corsican)
[ci skip]

* New translations en.json (Corsican)
[ci skip]

* New translations simple_form.en.yml (Corsican)
[ci skip]

* New translations en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.json (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.yml (Portuguese)
[ci skip]

* New translations en.json (Portuguese)
[ci skip]

* New translations en.yml (Portuguese)
[ci skip]

* New translations en.json (Portuguese)
[ci skip]

* New translations en.json (Japanese)
[ci skip]

* New translations en.json (Galician)
[ci skip]

* New translations en.yml (Galician)
[ci skip]

* New translations en.json (Italian)
[ci skip]

* New translations en.yml (Kabyle)
[ci skip]

* New translations en.json (Spanish, Mexico)
[ci skip]

* New translations doorkeeper.en.yml (Spanish, Mexico)
[ci skip]

* New translations doorkeeper.en.yml (Spanish)
[ci skip]

* New translations simple_form.en.yml (Spanish)
[ci skip]

* New translations en.json (Spanish)
[ci skip]

* New translations en.json (Spanish, Mexico)
[ci skip]

* New translations en.yml (Spanish, Mexico)
[ci skip]

* New translations simple_form.en.yml (Spanish, Mexico)
[ci skip]

* New translations doorkeeper.en.yml (Spanish, Mexico)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.json (Spanish)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations doorkeeper.en.yml (Spanish)
[ci skip]

* New translations simple_form.en.yml (Spanish)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations simple_form.en.yml (Spanish, Mexico)
[ci skip]

* New translations en.yml (Spanish, Argentina)
[ci skip]

* New translations en.json (Spanish, Mexico)
[ci skip]

* New translations en.yml (Spanish, Mexico)
[ci skip]

* New translations doorkeeper.en.yml (Spanish, Mexico)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Greek)
[ci skip]

* New translations en.yml (Catalan)
[ci skip]

* New translations en.yml (Hungarian)
[ci skip]

* New translations doorkeeper.en.yml (Spanish)
[ci skip]

* New translations simple_form.en.yml (Spanish)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations en.json (Spanish)
[ci skip]

* New translations en.yml (Spanish, Argentina)
[ci skip]

* New translations en.yml (Icelandic)
[ci skip]

* New translations en.yml (Swedish)
[ci skip]

* New translations en.yml (Portuguese)
[ci skip]

* New translations en.yml (Portuguese)
[ci skip]

* New translations en.yml (Italian)
[ci skip]

* New translations en.yml (Italian)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations en.yml (Polish)
[ci skip]

* New translations en.yml (Polish)
[ci skip]

* New translations en.yml (Hungarian)
[ci skip]

* New translations en.json (Indonesian)
[ci skip]

* New translations en.yml (Hungarian)
[ci skip]

* New translations en.json (Indonesian)
[ci skip]

* New translations en.yml (Indonesian)
[ci skip]

* New translations en.yml (French)
[ci skip]

* New translations en.yml (Indonesian)
[ci skip]

* New translations simple_form.en.yml (Indonesian)
[ci skip]

* New translations en.yml (Albanian)
[ci skip]

* New translations en.yml (Thai)
[ci skip]

* i18n-tasks normalize

* yarn manage:translations
2020-12-19 00:21:01 +01:00
Eugen Rochko
59343ef4d1
Fix missing description on enable bootstrap timeline accounts toggle in admin UI () 2020-12-19 00:19:15 +01:00
ThibG
a60d9335d8
Fix resolving accounts sometimes creating duplicate records for a given AP id ()
* Fix ResolveAccountService accepting mismatching acct: URI

* Set attributes that should be updated regardless of suspension

* Fix key fetching

* Automatically merge remote accounts with duplicate `uri`

* Add tests

* Add "tootctl accounts fix-duplicates"

Finds duplicate accounts sharing a same ActivityPub `id`, re-fetch them and
merge them under the canonical `acct:` URI.

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-18 23:26:26 +01:00
ThibG
052249588b
Fix old migration script not being able to run if it fails midway ()
* Fix old migration script not being able to run if it fails midway

Improve the robustness of a migration script likely to fail because of database
corruption so it can run again once database corruptions are fixed.

* Display a specific error message in case of index corruption

Co-authored-by: Eugen Rochko <eugen@zeonfederated.com>
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-18 17:51:24 +01:00
ThibG
1a02882244
Reword invite text settings in admin views for consistency ()
For consistency with 

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-18 09:57:54 +01:00
ThibG
75944a2f2d
Bump max supported schema version in maintenance script ()
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-18 09:46:59 +01:00
ThibG
47c6c54d31
Fix styling issue on /about when server admin has a long username ()
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-18 09:43:33 +01:00
Eugen Rochko
eb35be0431
Fix follow limit preventing re-following of a moved account () 2020-12-18 09:18:31 +01:00
Eugen Rochko
941ff04b03
Fix styles for RTL languages and the light theme () 2020-12-18 08:47:36 +01:00
Eugen Rochko
8a95867693
Add option to obfuscate domain name in public list of domain blocks ()
- Replace the middle of the domain with * characters (except for periods)
- Add SHA-256 digest of the domain name in tooltip
2020-12-18 08:30:41 +01:00
ThibG
b1feb47055
Improve searching for private toots from URL ()
* Improve searching for private toots from URL

Most of the time, when sharing toots, people use the toot URL rather than
the toot URI, which makes sense since it is the user-facing URL.

In Mastodon's case, the URL and URI are different, and Mastodon does not
have an index on URL, which means searching a private toot by URL is done
with a slow query that will only succeed for very recent toots.

This change gets rid of the slow query, and attempts to guess the URI from
URL instead, as Mastodon's are predictable.

* Add tests

* Only return status with guessed uri if url matches

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-17 06:51:49 +01:00
Eugen Rochko
2032748050
New Crowdin updates ()
* New translations doorkeeper.en.yml (Slovak)
[ci skip]

* New translations simple_form.en.yml (Slovak)
[ci skip]

* New translations en.yml (Slovak)
[ci skip]

* New translations en.json (Slovak)
[ci skip]

* New translations doorkeeper.en.yml (Russian)
[ci skip]

* New translations en.yml (Russian)
[ci skip]

* New translations en.yml (Polish)
[ci skip]

* New translations doorkeeper.en.yml (Portuguese)
[ci skip]

* New translations simple_form.en.yml (Portuguese)
[ci skip]

* New translations en.yml (Portuguese)
[ci skip]

* New translations doorkeeper.en.yml (Polish)
[ci skip]

* New translations simple_form.en.yml (Polish)
[ci skip]

* New translations en.yml (Georgian)
[ci skip]

* New translations doorkeeper.en.yml (Japanese)
[ci skip]

* New translations doorkeeper.en.yml (Catalan)
[ci skip]

* New translations simple_form.en.yml (German)
[ci skip]

* New translations simple_form.en.yml (Basque)
[ci skip]

* New translations en.yml (Basque)
[ci skip]

* New translations en.json (Basque)
[ci skip]

* New translations doorkeeper.en.yml (Greek)
[ci skip]

* New translations en.json (Greek)
[ci skip]

* New translations doorkeeper.en.yml (German)
[ci skip]

* New translations en.yml (German)
[ci skip]

* New translations en.json (Finnish)
[ci skip]

* New translations doorkeeper.en.yml (Danish)
[ci skip]

* New translations simple_form.en.yml (Danish)
[ci skip]

* New translations en.yml (Danish)
[ci skip]

* New translations en.json (Danish)
[ci skip]

* New translations doorkeeper.en.yml (Czech)
[ci skip]

* New translations simple_form.en.yml (Czech)
[ci skip]

* New translations en.yml (Czech)
[ci skip]

* New translations doorkeeper.en.yml (Basque)
[ci skip]

* New translations en.yml (Finnish)
[ci skip]

* New translations simple_form.en.yml (Japanese)
[ci skip]

* New translations doorkeeper.en.yml (Hungarian)
[ci skip]

* New translations en.json (Japanese)
[ci skip]

* New translations doorkeeper.en.yml (Italian)
[ci skip]

* New translations simple_form.en.yml (Italian)
[ci skip]

* New translations en.yml (Italian)
[ci skip]

* New translations doorkeeper.en.yml (Armenian)
[ci skip]

* New translations simple_form.en.yml (Armenian)
[ci skip]

* New translations simple_form.en.yml (Hungarian)
[ci skip]

* New translations simple_form.en.yml (Finnish)
[ci skip]

* New translations en.yml (Hungarian)
[ci skip]

* New translations doorkeeper.en.yml (Hebrew)
[ci skip]

* New translations simple_form.en.yml (Hebrew)
[ci skip]

* New translations en.yml (Hebrew)
[ci skip]

* New translations en.json (Hebrew)
[ci skip]

* New translations doorkeeper.en.yml (Finnish)
[ci skip]

* New translations simple_form.en.yml (Standard Moroccan Tamazight)
[ci skip]

* New translations en.yml (Galician)
[ci skip]

* New translations simple_form.en.yml (Galician)
[ci skip]

* New translations en.yml (Catalan)
[ci skip]

* New translations simple_form.en.yml (Catalan)
[ci skip]

* New translations en.yml (Korean)
[ci skip]

* New translations simple_form.en.yml (Korean)
[ci skip]

* New translations en.yml (Korean)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations simple_form.en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Portuguese)
[ci skip]

* New translations simple_form.en.yml (Portuguese)
[ci skip]

* New translations en.json (Standard Moroccan Tamazight)
[ci skip]

* New translations en.json (Standard Moroccan Tamazight)
[ci skip]

* New translations en.json (Standard Moroccan Tamazight)
[ci skip]

* New translations en.yml (Italian)
[ci skip]

* New translations simple_form.en.yml (Italian)
[ci skip]

* New translations en.yml (Hungarian)
[ci skip]

* New translations simple_form.en.yml (Hungarian)
[ci skip]

* New translations en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations simple_form.en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.yml (Swedish)
[ci skip]

* New translations simple_form.en.yml (Swedish)
[ci skip]

* New translations en.yml (Polish)
[ci skip]

* New translations simple_form.en.yml (Polish)
[ci skip]

* New translations simple_form.en.yml (Russian)
[ci skip]

* New translations en.yml (Sardinian)
[ci skip]

* New translations simple_form.en.yml (Sardinian)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations simple_form.en.yml (Spanish)
[ci skip]

* New translations en.yml (Icelandic)
[ci skip]

* New translations simple_form.en.yml (Icelandic)
[ci skip]

* New translations en.yml (Spanish, Argentina)
[ci skip]

* New translations simple_form.en.yml (Spanish, Argentina)
[ci skip]

* New translations en.yml (German)
[ci skip]

* New translations simple_form.en.yml (German)
[ci skip]

* New translations en.yml (Esperanto)
[ci skip]

* New translations simple_form.en.yml (French)
[ci skip]

* New translations en.yml (Esperanto)
[ci skip]

* New translations simple_form.en.yml (Esperanto)
[ci skip]

* New translations simple_form.en.yml (French)
[ci skip]

* New translations en.yml (Esperanto)
[ci skip]

* New translations simple_form.en.yml (Esperanto)
[ci skip]

* New translations en.yml (Esperanto)
[ci skip]

* New translations en.yml (French)
[ci skip]

* New translations en.yml (Esperanto)
[ci skip]

* New translations simple_form.en.yml (Esperanto)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.yml (Albanian)
[ci skip]

* New translations simple_form.en.yml (Albanian)
[ci skip]

* New translations en.json (Vietnamese)
[ci skip]

* New translations en.yml (Chinese Traditional)
[ci skip]

* New translations en.yml (Chinese Traditional)
[ci skip]

* New translations simple_form.en.yml (Chinese Traditional)
[ci skip]

* New translations en.yml (Chinese Traditional)
[ci skip]

* New translations simple_form.en.yml (Chinese Traditional)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Esperanto)
[ci skip]

* New translations simple_form.en.yml (Greek)
[ci skip]

* New translations en.yml (Esperanto)
[ci skip]

* New translations en.json (Esperanto)
[ci skip]

* New translations en.yml (Esperanto)
[ci skip]

* New translations en.yml (Esperanto)
[ci skip]

* New translations en.yml (Esperanto)
[ci skip]

* New translations doorkeeper.en.yml (Spanish, Mexico)
[ci skip]

* New translations simple_form.en.yml (Spanish, Mexico)
[ci skip]

* New translations en.yml (Spanish, Mexico)
[ci skip]

* New translations en.json (Spanish, Mexico)
[ci skip]

* New translations doorkeeper.en.yml (Spanish)
[ci skip]

* New translations simple_form.en.yml (Spanish)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations en.json (Spanish)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Chinese Simplified)
[ci skip]

* New translations en.yml (Chinese Simplified)
[ci skip]

* New translations simple_form.en.yml (Chinese Simplified)
[ci skip]

* New translations en.yml (Korean)
[ci skip]

* New translations doorkeeper.en.yml (Spanish, Mexico)
[ci skip]

* New translations simple_form.en.yml (Spanish, Mexico)
[ci skip]

* New translations en.yml (Spanish, Mexico)
[ci skip]

* New translations en.json (Spanish, Mexico)
[ci skip]

* New translations en.yml (Swedish)
[ci skip]

* New translations doorkeeper.en.yml (Spanish)
[ci skip]

* New translations simple_form.en.yml (Spanish)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations en.json (Spanish)
[ci skip]

* New translations en.yml (Japanese)
[ci skip]

* New translations en.yml (Chinese Traditional)
[ci skip]

* New translations en.json (Japanese)
[ci skip]

* New translations en.yml (Persian)
[ci skip]

* New translations en.yml (Catalan)
[ci skip]

* New translations en.yml (Italian)
[ci skip]

* New translations en.yml (Catalan)
[ci skip]

* New translations en.yml (Korean)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Albanian)
[ci skip]

* New translations en.yml (Swedish)
[ci skip]

* New translations en.yml (Spanish, Argentina)
[ci skip]

* New translations en.yml (Icelandic)
[ci skip]

* New translations en.yml (Spanish, Argentina)
[ci skip]

* New translations en.yml (Corsican)
[ci skip]

* New translations en.yml (Icelandic)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations en.yml (Hungarian)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations en.yml (Polish)
[ci skip]

* New translations en.yml (Polish)
[ci skip]

* New translations en.yml (Chinese Simplified)
[ci skip]

* New translations en.yml (Chinese Simplified)
[ci skip]

* New translations en.yml (Kabyle)
[ci skip]

* New translations en.yml (Indonesian)
[ci skip]

* New translations en.yml (French)
[ci skip]

* New translations en.yml (Turkish)
[ci skip]

* New translations simple_form.en.yml (Turkish)
[ci skip]

* New translations simple_form.en.yml (Sardinian)
[ci skip]

* New translations en.yml (Hungarian)
[ci skip]

* New translations devise.en.yml (Hungarian)
[ci skip]

* New translations simple_form.en.yml (Sardinian)
[ci skip]

* New translations doorkeeper.en.yml (Spanish, Mexico)
[ci skip]

* New translations simple_form.en.yml (Spanish, Mexico)
[ci skip]

* New translations en.yml (Spanish, Mexico)
[ci skip]

* New translations en.json (Spanish, Mexico)
[ci skip]

* New translations doorkeeper.en.yml (Spanish)
[ci skip]

* New translations simple_form.en.yml (Spanish)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations en.json (Spanish)
[ci skip]

* New translations en.yml (French)
[ci skip]

* New translations en.yml (Korean)
[ci skip]

* New translations en.yml (Esperanto)
[ci skip]

* New translations en.yml (Swedish)
[ci skip]

* New translations en.yml (Greek)
[ci skip]

* New translations en.yml (Galician)
[ci skip]

* New translations doorkeeper.en.yml (Spanish, Mexico)
[ci skip]

* New translations simple_form.en.yml (Spanish, Mexico)
[ci skip]

* New translations en.yml (Spanish, Mexico)
[ci skip]

* New translations en.json (Spanish, Mexico)
[ci skip]

* New translations doorkeeper.en.yml (Spanish)
[ci skip]

* New translations simple_form.en.yml (Spanish)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations en.json (Spanish)
[ci skip]

* New translations en.yml (German)
[ci skip]

* New translations en.yml (Catalan)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Chinese Simplified)
[ci skip]

* New translations en.yml (Esperanto)
[ci skip]

* New translations en.yml (Greek)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations en.yml (Hungarian)
[ci skip]

* New translations en.yml (Italian)
[ci skip]

* New translations en.json (Standard Moroccan Tamazight)
[ci skip]

* New translations en.yml (Standard Moroccan Tamazight)
[ci skip]

* New translations en.yml (Icelandic)
[ci skip]

* New translations en.yml (Icelandic)
[ci skip]

* New translations en.yml (Albanian)
[ci skip]

* New translations en.yml (Polish)
[ci skip]

* New translations en.yml (Polish)
[ci skip]

* New translations en.yml (Spanish, Argentina)
[ci skip]

* New translations doorkeeper.en.yml (Spanish, Mexico)
[ci skip]

* New translations simple_form.en.yml (Spanish, Mexico)
[ci skip]

* New translations en.yml (Spanish, Mexico)
[ci skip]

* New translations en.json (Spanish, Mexico)
[ci skip]

* New translations doorkeeper.en.yml (Spanish)
[ci skip]

* New translations simple_form.en.yml (Spanish)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations en.json (Spanish)
[ci skip]

* New translations en.yml (Japanese)
[ci skip]

* New translations en.yml (Japanese)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations en.yml (Hungarian)
[ci skip]

* New translations en.yml (Polish)
[ci skip]

* New translations en.yml (French)
[ci skip]

* New translations en.yml (Catalan)
[ci skip]

* New translations en.yml (French)
[ci skip]

* New translations en.yml (Spanish, Argentina)
[ci skip]

* New translations en.yml (Swedish)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations simple_form.en.yml (Armenian)
[ci skip]

* New translations en.yml (German)
[ci skip]

* New translations en.yml (Russian)
[ci skip]

* New translations en.yml (Russian)
[ci skip]

* New translations en.json (Persian)
[ci skip]

* New translations en.yml (Italian)
[ci skip]

* New translations en.yml (Persian)
[ci skip]

* New translations simple_form.en.yml (Persian)
[ci skip]

* New translations en.yml (Persian)
[ci skip]

* New translations en.yml (Persian)
[ci skip]

* ran `yarn manage:translations`

* ran `i18n-tasks normalize`

* Ran `yarn manage:translations`

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Korean)
[ci skip]

* Ran `i18n-tasks normalize`

Co-authored-by: Yamagishi Kazutoshi <ykzts@desire.sh>
2020-12-16 03:24:55 +01:00
ThibG
79efcf8aad
Change notification permission handling ()
* Change notification permission handling

- allow changing individual alert settings even if permission is not explicitly
  enabled (asks for permission on toggle)
- persist permission request banner dismissal across sessions through settings

* Add additional, more discrete message to grant permissions

* Change permission granting button design according to reviews

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-15 18:43:54 +01:00
ThibG
8357969559
Fix admins being able to suspend their instance actor ()
* Fix admin being able to suspend their own instance account

* Add text about the instance's own actor in admin view

* Change instance actor notice from flash message to template

* Do not list local instance actor in account moderation list
2020-12-15 17:23:58 +01:00
ThibG
8485c436d5
Bump max supported schema version in maintenance script ()
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-15 12:57:24 +01:00
Eugen Rochko
1f564051b6
Change RTL detection to rely on unicode-bidi paragraph by paragraph () 2020-12-15 12:56:43 +01:00
Eugen Rochko
1045549f85
Add stoplight for object storage failures, return HTTP 503 () 2020-12-15 12:55:29 +01:00
Mashiro
75d2762fdf
Add "invite request content" display in user account admin page ()
* feat: display `invite_request_text` in admin's user account page

* fix: move invite_request to the bottom of accounts page

* fix: remove time display, remove formate, change code terminology

* fix: remove escape
2020-12-15 06:28:14 +01:00
ThibG
1390cc194b
Add indication to admin UI of whether a report has been forwarded ()
* Add indication to admin UI of whether a report has been forwarded

* Rework how forwarded status is displayed

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-15 04:30:15 +01:00
dependabot[bot]
7c800fa801
Bump ini from 1.3.5 to 1.3.7 ()
Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7.
- [Release notes](https://github.com/isaacs/ini/releases)
- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-12-15 03:17:06 +01:00
Takeshi Umeda
a2ef002214
Fix to isolate the sidekiq process that runs the scheduler job () 2020-12-15 03:04:03 +01:00
Marcin Mikołajczak
9342705e6b
Add app shortcuts ()
* Add app shortcuts

Signed-off-by: mkljczk <me@mkljczk.pl>

* Fix codeclimate issues

Signed-off-by: mkljczk <me@mkljczk.pl>

* Change shortcuts

Signed-off-by: mkljczk <me@mkljczk.pl>

* More consistent new-status icon

Signed-off-by: mkljczk <me@mkljczk.pl>
2020-12-15 02:04:56 +01:00
ThibG
47e507fa61
Add ability to require invite request text ()
Fixes 

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-14 10:03:09 +01:00
ThibG
a7e819b8a8
Fix dynamic updating of “Bootstrap timeline accounts” admin setting ()
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-14 09:37:58 +01:00
Eugen Rochko
4fd3062003
Change "Profile unavailable" string to "Account suspended" in web UI () 2020-12-14 09:08:09 +01:00
Eugen Rochko
216b85b053
Fix performance on instances list in admin UI ()
- Reduce duplicate queries
- Remove n+1 queries
- Add accounts count to detailed view
- Add separate action log entry for updating existing domain blocks
2020-12-14 09:06:34 +01:00
Eugen Rochko
a3b5675aa8
Change number format on about page from full to shortened () 2020-12-14 05:09:14 +01:00
ThibG
49eb4d4ddf
Add honeypot fields and minimum fill-out time for sign-up form ()
* Add honeypot fields to limit non-specialized spam

Add two honeypot fields: a fake website input and a fake password confirmation
one. The label/placeholder/aria-label tells not to fill them, and they are
hidden in CSS, so legitimate users should not fall into these.

This should cut down on some non-Mastodon-specific spambots.

* Require a 3 seconds delay before submitting the registration form

* Fix tests

* Move registration form time check to model validation

* Give people a chance to clear the honeypot fields

* Refactor honeypot translation strings

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-10 06:27:26 +01:00
ThibG
9669167aae
Fix notifications being unnecessarily redrawn on state change ()
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-09 19:16:30 +01:00
trwnh
127c543a6e
rename replies_policy enumerables () 2020-12-09 04:34:17 +01:00
Takeshi Umeda
f379a52d74
Fix missing pictureInPicture prop in detailed status container () 2020-12-09 04:33:33 +01:00
Jeong Arm
7aee364795
Fix open media hotkey ()
* Fix open media hotkey

* Update status.js

Co-authored-by: Eugen Rochko <eugen@zeonfederated.com>
2020-12-09 00:24:13 +01:00
Takeshi Umeda
765626a3a7
Fix the Open handler for PreviewCard () 2020-12-08 12:07:54 +01:00
ThibG
0b437325dc
Fix column swiping animation logic ()
From the start, swiping columns was highly unreliable because the logic
could change `ReactSwipeableViews`'s `animateTransitions` property
mid-swipe.

PR  partially fixed this, but at the unintended cost of disabling the
swipe animation altogether.

This PR changes the logic behind `shouldAnimate` to only disable the swiping
animation at the end of a column change not initiated by `ReactSwipeableViews`.

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-07 20:07:24 +01:00
Eugen Rochko
9620ee90be
Fix unnecessary re-rendering of various components when typing in web UI () 2020-12-07 19:36:36 +01:00
Eugen Rochko
48bef17cc9
Fix slow distinct queries where grouped queries are faster ()
About 2x speed-up on inboxes query
2020-12-07 12:08:30 +01:00
Eugen Rochko
a8c471fcc0
Fix not being able to open audio modal in web UI ()
Fix 

Also adds the new action bar and blurhash-based background
color to audio and video modals
2020-12-07 04:29:37 +01:00
Eugen Rochko
59d943e152
Fix alert when failing to save timeline markers in web UI ()
Fix 
2020-12-07 03:23:43 +01:00
Eugen Rochko
014733d1e4
Fix too low contrast on new media modal background in web UI ()
Fix 
2020-12-07 02:32:27 +01:00
Takeshi Umeda
17a2e27641
Fix remove number sign from account_featured_tags () 2020-12-06 05:55:35 +01:00
Takeshi Umeda
44d5c6bc8f
Fix incorrect conditions for suspended accounts in Get API for account featured tags () 2020-12-04 04:22:35 +01:00
ThibG
fbe7519243
Fix account merging in maintenance script ()
Also include AccountNote and AccountDeletionRequest to the list of classes
needing to be reassigned the merged account.
2020-12-04 02:23:51 +01:00
ThibG
d849aad852
Change public thread view to hide "Show thread" link ()
Fixes 
2020-12-02 21:21:44 +01:00
ThibG
9136be480f
Fix followers hash cache not being invalidated on account merge ()
Also clear relationships cache.
2020-12-02 21:20:00 +01:00
ThibG
fbff89be03
Fix tootctl ip_blocks add failing if not given a comment ()
Fixes 
2020-12-02 21:19:41 +01:00
ThibG
4b7f21a28e
Fix Gemfile.lock breaking CI ()
Unnecessary Ruby and Bundler version constraints got included in 
2020-12-01 12:34:33 +01:00
341 changed files with 8461 additions and 2914 deletions

View file

@ -1,4 +1,5 @@
VAGRANT=true
RAILS_ENV=development
LOCAL_DOMAIN=mastodon.local
BIND=0.0.0.0
DB_HOST=/var/run/postgresql/

View file

@ -5,38 +5,39 @@ Mastodon is available on [GitHub](https://github.com/tootsuite/mastodon)
and provided thanks to the work of the following contributors:
* [Gargron](https://github.com/Gargron)
* [dependabot-preview[bot]](https://github.com/apps/dependabot-preview)
* [ThibG](https://github.com/ThibG)
* [ykzts](https://github.com/ykzts)
* [dependabot-preview[bot]](https://github.com/apps/dependabot-preview)
* [dependabot[bot]](https://github.com/apps/dependabot)
* [ykzts](https://github.com/ykzts)
* [akihikodaki](https://github.com/akihikodaki)
* [mjankowski](https://github.com/mjankowski)
* [unarist](https://github.com/unarist)
* [yiskah](https://github.com/yiskah)
* [nolanlawson](https://github.com/nolanlawson)
* [abcang](https://github.com/abcang)
* [ysksn](https://github.com/ysksn)
* [mayaeh](https://github.com/mayaeh)
* [ysksn](https://github.com/ysksn)
* [sorin-davidoi](https://github.com/sorin-davidoi)
* [noellabo](https://github.com/noellabo)
* [lynlynlynx](https://github.com/lynlynlynx)
* [m4sk1n](mailto:me@m4sk.in)
* [Marcin Mikołajczak](mailto:me@m4sk.in)
* [Kjwon15](https://github.com/Kjwon15)
* [noellabo](https://github.com/noellabo)
* [renatolond](https://github.com/renatolond)
* [alpaca-tc](https://github.com/alpaca-tc)
* [jeroenpraat](https://github.com/jeroenpraat)
* [nclm](https://github.com/nclm)
* [ineffyble](https://github.com/ineffyble)
* [shleeable](https://github.com/shleeable)
* [zunda](https://github.com/zunda)
* [shleeable](https://github.com/shleeable)
* [Masoud Abkenar](mailto:ampbox@gmail.com)
* [blackle](https://github.com/blackle)
* [Quent-in](https://github.com/Quent-in)
* [JantsoP](https://github.com/JantsoP)
* [nullkal](https://github.com/nullkal)
* [yookoala](https://github.com/yookoala)
* [Sasha-Sorokin](https://github.com/Sasha-Sorokin)
* [Brawaru](https://github.com/Brawaru)
* [ariasuni](https://github.com/ariasuni)
* [Aditoo17](https://github.com/Aditoo17)
* [Quenty31](https://github.com/Quenty31)
* [marek-lach](https://github.com/marek-lach)
@ -45,9 +46,9 @@ and provided thanks to the work of the following contributors:
* [danhunsaker](https://github.com/danhunsaker)
* [eramdam](https://github.com/eramdam)
* [takayamaki](https://github.com/takayamaki)
* [ariasuni](https://github.com/ariasuni)
* [masarakki](https://github.com/masarakki)
* [ticky](https://github.com/ticky)
* [trwnh](https://github.com/trwnh)
* [ThisIsMissEm](https://github.com/ThisIsMissEm)
* [hinaloe](https://github.com/hinaloe)
* [hcmiya](https://github.com/hcmiya)
@ -57,10 +58,10 @@ and provided thanks to the work of the following contributors:
* [yukimochi](https://github.com/yukimochi)
* [palindromordnilap](https://github.com/palindromordnilap)
* [rkarabut](https://github.com/rkarabut)
* [trwnh](https://github.com/trwnh)
* [nightpool](https://github.com/nightpool)
* [Artoria2e5](https://github.com/Artoria2e5)
* [marrus-sh](https://github.com/marrus-sh)
* [dunn](https://github.com/dunn)
* [krainboltgreene](https://github.com/krainboltgreene)
* [pfigel](https://github.com/pfigel)
* [BoFFire](https://github.com/BoFFire)
@ -84,25 +85,25 @@ and provided thanks to the work of the following contributors:
* [ashleyhull-versent](https://github.com/ashleyhull-versent)
* [yhirano55](https://github.com/yhirano55)
* [rinsuki](https://github.com/rinsuki)
* [dunn](https://github.com/dunn)
* [devkral](https://github.com/devkral)
* [camponez](https://github.com/camponez)
* [hugogameiro](https://github.com/hugogameiro)
* [SerCom_KC](mailto:szescxz@gmail.com)
* [aschmitz](https://github.com/aschmitz)
* [mfmfuyu](https://github.com/mfmfuyu)
* [kedamaDQ](https://github.com/kedamaDQ)
* [fpiesche](https://github.com/fpiesche)
* [gandaro](https://github.com/gandaro)
* [johnsudaar](https://github.com/johnsudaar)
* [trebmuh](https://github.com/trebmuh)
* [rmhasan](https://github.com/rmhasan)
* [kedamaDQ](https://github.com/kedamaDQ)
* [lindwurm](https://github.com/lindwurm)
* [victorhck](mailto:victorhck@geeko.site)
* [voidsatisfaction](https://github.com/voidsatisfaction)
* [mkljczk](https://github.com/mkljczk)
* [hikari-no-yume](https://github.com/hikari-no-yume)
* [seefood](https://github.com/seefood)
* [jackjennings](https://github.com/jackjennings)
* [mfmfuyu](https://github.com/mfmfuyu)
* [puckipedia](https://github.com/puckipedia)
* [spla](mailto:spla@mastodont.cat)
* [walf443](https://github.com/walf443)
@ -111,14 +112,15 @@ and provided thanks to the work of the following contributors:
* [Ashley](mailto:expenses@airmail.cc)
* [xqus](https://github.com/xqus)
* [pfm-eyesightjp](https://github.com/pfm-eyesightjp)
* [Samy KACIMI](mailto:samy.kacimi@gmail.com)
* [fakenine](https://github.com/fakenine)
* [tsuwatch](https://github.com/tsuwatch)
* [victorhck](https://github.com/victorhck)
* [mkljczk](https://github.com/mkljczk)
* [manuelviens](https://github.com/manuelviens)
* [tateisu](https://github.com/tateisu)
* [fvh-P](https://github.com/fvh-P)
* [rtucker](https://github.com/rtucker)
* [Anna e só](mailto:contraexemplos@gmail.com)
* [dariusk](https://github.com/dariusk)
* [kazu9su](https://github.com/kazu9su)
* [Komic](https://github.com/Komic)
* [lmorchard](https://github.com/lmorchard)
@ -145,9 +147,9 @@ and provided thanks to the work of the following contributors:
* [fhemberger](https://github.com/fhemberger)
* [Gomasy](https://github.com/Gomasy)
* [greysteil](https://github.com/greysteil)
* [hencatsmith](https://github.com/hencatsmith)
* [hendotcat](https://github.com/hendotcat)
* [d6rkaiz](https://github.com/d6rkaiz)
* [Reverite](https://github.com/Reverite)
* [ladyisatis](https://github.com/ladyisatis)
* [JohnD28](https://github.com/JohnD28)
* [znz](https://github.com/znz)
* [saper](https://github.com/saper)
@ -160,14 +162,14 @@ and provided thanks to the work of the following contributors:
* [leopku](https://github.com/leopku)
* [SansPseudoFix](https://github.com/SansPseudoFix)
* [spla](mailto:sp@mastodont.cat)
* [tateisu](https://github.com/tateisu)
* [tomfhowe](https://github.com/tomfhowe)
* [noraworld](https://github.com/noraworld)
* [lfuelling](https://github.com/lfuelling)
* [theboss](https://github.com/theboss)
* [aji-su](https://github.com/aji-su)
* [nzws](https://github.com/nzws)
* [duxovni](https://github.com/duxovni)
* [smorimoto](https://github.com/smorimoto)
* [mashirozx](https://github.com/mashirozx)
* [178inaba](https://github.com/178inaba)
* [acid-chicken](https://github.com/acid-chicken)
* [xgess](https://github.com/xgess)
@ -175,7 +177,6 @@ and provided thanks to the work of the following contributors:
* [aablinov](https://github.com/aablinov)
* [stalker314314](https://github.com/stalker314314)
* [cutls](https://github.com/cutls)
* [dariusk](https://github.com/dariusk)
* [huertanix](https://github.com/huertanix)
* [eleboucher](https://github.com/eleboucher)
* [halkeye](https://github.com/halkeye)
@ -183,7 +184,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)
* [kmichl](https://github.com/kmichl)
* [Korbinian](mailto:kontakt@korbinian-michl.de)
* [Kurtis Rainbolt-Greene](mailto:me@kurtisrainboltgreene.name)
* [panarom](https://github.com/panarom)
* [Dar13](https://github.com/Dar13)
@ -225,6 +226,7 @@ and provided thanks to the work of the following contributors:
* [aaribaud](https://github.com/aaribaud)
* [pointlessone](https://github.com/pointlessone)
* [Andrew](mailto:andrewlchronister@gmail.com)
* [arielrodrigues](https://github.com/arielrodrigues)
* [aurelien-reeves](https://github.com/aurelien-reeves)
* [elegaanz](https://github.com/elegaanz)
* [estuans](https://github.com/estuans)
@ -238,6 +240,7 @@ and provided thanks to the work of the following contributors:
* [muffinista](https://github.com/muffinista)
* [cdutson](https://github.com/cdutson)
* [farlistener](https://github.com/farlistener)
* [divergentdave](https://github.com/divergentdave)
* [DavidLibeau](https://github.com/DavidLibeau)
* [dmerejkowsky](https://github.com/dmerejkowsky)
* [ddevault](https://github.com/ddevault)
@ -276,7 +279,7 @@ and provided thanks to the work of the following contributors:
* [xPaw](https://github.com/xPaw)
* [petzah](https://github.com/petzah)
* [ignisf](https://github.com/ignisf)
* [raymestalez](https://github.com/raymestalez)
* [lumenwrites](https://github.com/lumenwrites)
* [remram44](https://github.com/remram44)
* [sts10](https://github.com/sts10)
* [SuperSandro2000](https://github.com/SuperSandro2000)
@ -286,8 +289,9 @@ and provided thanks to the work of the following contributors:
* [Sir-Boops](https://github.com/Sir-Boops)
* [stemid](https://github.com/stemid)
* [sumdog](https://github.com/sumdog)
* [OmmyZhang](https://github.com/OmmyZhang)
* [ThomasLeister](https://github.com/ThomasLeister)
* [mcat-ee](https://github.com/mcat-ee)
* [Tom McAtee](mailto:a1608768@student.adelaide.edu.au)
* [tototoshi](https://github.com/tototoshi)
* [TrashMacNugget](https://github.com/TrashMacNugget)
* [VirtuBox](https://github.com/VirtuBox)
@ -314,11 +318,13 @@ and provided thanks to the work of the following contributors:
* [matsurai25](https://github.com/matsurai25)
* [mecab](https://github.com/mecab)
* [nicobz25](https://github.com/nicobz25)
* [niwatori24](https://github.com/niwatori24)
* [oliverkeeble](https://github.com/oliverkeeble)
* [partev](https://github.com/partev)
* [pinfort](https://github.com/pinfort)
* [rbaumert](https://github.com/rbaumert)
* [rhoio](https://github.com/rhoio)
* [santiagorodriguez96](https://github.com/santiagorodriguez96)
* [sclaire-1](https://github.com/sclaire-1)
* [umonaca](https://github.com/umonaca)
* [usagi-f](https://github.com/usagi-f)
@ -327,7 +333,7 @@ and provided thanks to the work of the following contributors:
* [wxcafe](https://github.com/wxcafe)
* [Grawl](https://github.com/Grawl)
* [新都心(Neet Shin)](mailto:nucx@dio-vox.com)
* [clarfon](https://github.com/clarfon)
* [clarfonthey](https://github.com/clarfonthey)
* [cygnan](https://github.com/cygnan)
* [Awea](https://github.com/Awea)
* [eai04191](https://github.com/eai04191)
@ -358,11 +364,11 @@ and provided thanks to the work of the following contributors:
* [schas002](https://github.com/schas002)
* [contraexemplo](https://github.com/contraexemplo)
* [abackstrom](https://github.com/abackstrom)
* [arielrodrigues](https://github.com/arielrodrigues)
* [orlea](https://github.com/orlea)
* [armandfardeau](https://github.com/armandfardeau)
* [raboof](https://github.com/raboof)
* [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)
@ -389,7 +395,7 @@ and provided thanks to the work of the following contributors:
* [colindean](https://github.com/colindean)
* [DeeUnderscore](https://github.com/DeeUnderscore)
* [dachinat](https://github.com/dachinat)
* [shapeshifter-system](https://github.com/shapeshifter-system)
* [monsterpit-firedemon](https://github.com/monsterpit-firedemon)
* [watilde](https://github.com/watilde)
* [daprice](https://github.com/daprice)
* [da2x](https://github.com/da2x)
@ -400,14 +406,13 @@ and provided thanks to the work of the following contributors:
* [singingwolfboy](https://github.com/singingwolfboy)
* [caldwell](https://github.com/caldwell)
* [davidcelis](https://github.com/davidcelis)
* [divergentdave](https://github.com/divergentdave)
* [davefp](https://github.com/davefp)
* [yipdw](https://github.com/yipdw)
* [debanshuk](https://github.com/debanshuk)
* [mascali33](https://github.com/mascali33)
* [DerekNonGeneric](https://github.com/DerekNonGeneric)
* [dblandin](https://github.com/dblandin)
* [Drew Gates](mailto:aranaur@users.noreply.github.com)
* [Aranaur](https://github.com/Aranaur)
* [dtschust](https://github.com/dtschust)
* [Dryusdan](https://github.com/Dryusdan)
* [d3vgru](https://github.com/d3vgru)
@ -451,22 +456,25 @@ and provided thanks to the work of the following contributors:
* [J Yeary](mailto:usbsnowcrash@users.noreply.github.com)
* [jack-michaud](https://github.com/jack-michaud)
* [Floppy](https://github.com/Floppy)
* [loomchild](https://github.com/loomchild)
* [jglauche](https://github.com/jglauche)
* [jenkr55](https://github.com/jenkr55)
* [hyenagirl64](https://github.com/hyenagirl64)
* [press5](https://github.com/press5)
* [TrollDecker](https://github.com/TrollDecker)
* [jmontane](https://github.com/jmontane)
* [Jarek Lipski](mailto:pub@loomchild.net)
* [Jennifer Glauche](mailto:=^.^=@github19.jglauche.de)
* [Jennifer Kruse](mailto:jenkr55@gmail.com)
* [Jeremy Rose](mailto:nornagon@nornagon.net)
* [Jessica](mailto:46502909+hyenagirl64@users.noreply.github.com)
* [Jessica K. Litwin](mailto:jessica@litw.in)
* [Jo Decker](mailto:trolldecker@users.noreply.github.com)
* [Joan Montané](mailto:jmontane@users.noreply.github.com)
* [Jonathan Klee](mailto:klee.jonathan@gmail.com)
* [Jordan Guerder](mailto:jguerder@fr.pulseheberg.net)
* [Joseph Mingrone](mailto:jehops@users.noreply.github.com)
* [Josh Leeb-du Toit](mailto:mail@joshleeb.com)
* [Joshua Wood](mailto:josh@joshuawood.net)
* [Julien](mailto:tiwy57@users.noreply.github.com)
* [Julien Deswaef](mailto:juego@requiem4tv.com)
* [June Sallou](mailto:jnsll@users.noreply.github.com)
* [Jérémy Benoist](mailto:j0k3r@users.noreply.github.com)
* [KEINOS](mailto:github@keinos.com)
* [Kairui Song | 宋恺睿](mailto:ryncsn@gmail.com)
* [Keiji Matsuzaki](mailto:futoase@gmail.com)
* [Kevin Liu](mailto:kevin@potatofrom.space)
* [Kit Redgrave](mailto:qwertyitis@gmail.com)
@ -482,7 +490,6 @@ and provided thanks to the work of the following contributors:
* [Lukas Burk](mailto:jemus42@users.noreply.github.com)
* [Manato Kameya](mailto:grabacr07+github@gmail.com)
* [Mantas](mailto:mistermantas@users.noreply.github.com)
* [Marcin Mikołajczak](mailto:me@mkljczk.pl)
* [Mareena Kunjachan](mailto:mareenakunjachan@gmail.com)
* [Marek Lach](mailto:marek.brohatwack.lach@gmail.com)
* [Markus R](mailto:wirehack7@users.noreply.github.com)
@ -529,10 +536,12 @@ and provided thanks to the work of the following contributors:
* [Norayr Chilingarian](mailto:norayr@arnet.am)
* [Noëlle Anthony](mailto:noelle.d.anthony@gmail.com)
* [N氏](mailto:uenok.htc@gmail.com)
* [OSAMU SATO](mailto:satosamu@gmail.com)
* [Olivier Nicole](mailto:olivierthnicole@gmail.com)
* [Oskari Noppa](mailto:noppa@users.noreply.github.com)
* [Otakan](mailto:otakan951@gmail.com)
* [Padraig Fahy](mailto:tech@padraigfahy.com)
* [Patrice Ferlet](mailto:metal3d@gmail.com)
* [PatrickRWells](mailto:32802366+patrickrwells@users.noreply.github.com)
* [Paul](mailto:naydex.mc+github@gmail.com)
* [Pete Keen](mailto:pete@petekeen.net)
@ -574,7 +583,6 @@ 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)
* [Tdxdxoz](mailto:tdxdxoz@gmail.com)
* [TheInventrix](mailto:theinventrix@users.noreply.github.com)
* [TheMainOne](mailto:50847364+theevilskeleton@users.noreply.github.com)
* [Thomas Alberola](mailto:thomas@needacoffee.fr)
@ -594,6 +602,7 @@ and provided thanks to the work of the following contributors:
* [Wesley Ellis](mailto:tahnok@gmail.com)
* [Wiktor](mailto:wiktor@metacode.biz)
* [Wonderfall](mailto:wonderfall@schrodinger.io)
* [Y.Yamashiro](mailto:shukukei@mojizuri.jp)
* [YDrogen](mailto:ydrogen45@gmail.com)
* [YMHuang](mailto:ymhuang@fmbase.tw)
* [YOSHIOKA Eiichiro](mailto:yoshioka.eiichiro@gmail.com)
@ -638,6 +647,7 @@ and provided thanks to the work of the following contributors:
* [jumoru](mailto:jumoru@mailbox.org)
* [kaiyou](mailto:pierre@jaury.eu)
* [karlyeurl](mailto:karl.yeurl@gmail.com)
* [kawaguchi](mailto:jiikko@users.noreply.github.com)
* [kedama](mailto:32974885+kedamadq@users.noreply.github.com)
* [kuro5hin](mailto:rusty@kuro5hin.org)
* [leo60228](mailto:leo@60228.dev)
@ -655,6 +665,7 @@ 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)
* [proxy](mailto:51172302+3n-k1@users.noreply.github.com)
* [rch850](mailto:rich850@gmail.com)
* [roikale](mailto:roikale@users.noreply.github.com)
* [rysiekpl](mailto:rysiek@hackerspace.pl)
@ -694,308 +705,414 @@ This document is provided for informational purposes only. Since it is only upda
Following people have contributed to translation of Mastodon:
- ᏦᏁᎢᎵᏫ 😷 (*Spanish, Argentina*)
- Sveinn í Felli (*Icelandic*)
- ᏦᏁᎢᎵᏫ 😷 (KNTRO) (*Spanish, Argentina*)
- Sveinn í Felli (sveinki) (*Icelandic*)
- qezwan (*Persian, Sorani (Kurdish)*)
- Hồ Nhất Duy (kantcer) (*Vietnamese*)
- taicv (*Vietnamese*)
- ButterflyOfFire (*Arabic; French; Kabyle*)
- Duy (*Vietnamese*)
- Evert Prants (*Estonian*)
- Zoltán Gera (*Hungarian*)
- Daniele Lira Mereb (*Portuguese, Brazilian*)
- Kristijan Tkalec (*Slovenian*)
- stan ionut (*Romanian*)
- Ramdziana F Y (*Indonesian*)
- Michal Stanke (*Czech*)
- Xosé M. (*Galician; Spanish*)
- 奈卜拉 (*Chinese Simplified*)
- borys_sh (*Ukrainian*)
- Miguel Mayol (*Spanish; Catalan*)
- Besnik_b (*Albanian*)
- Thai Localization (*Thai*)
- Emanuel Pina (*Portuguese*)
- Jeong Arm (*Korean; Esperanto; Japanese*)
- Imre Kristoffer Eilertsen (*Norwegian*)
- Danial Behzadi (*Persian*)
- Osoitz (*Basque*)
- Peterandre (*Norwegian Nynorsk; Norwegian*)
- Jeroen (*Dutch*)
- spla (*Catalan; Spanish*)
- Iváns (*Galician*)
- koyu (*German*)
- Sasha Sorokin (*Russian; Vietnamese; Swedish; Catalan; Greek; Hungarian; Armenian; Albanian; Galician; French; Danish; German; Korean; Ukrainian*)
- enolp (*Asturian*)
- Masoud Abkenar (*Persian*)
- lamnatos (*Greek*)
- Alix Rossi (*Corsican; French*)
- arshat (*Kazakh*)
- FédiQuébec (*French*)
- Marek Ľach (*Slovak; Polish*)
- Muha Aliss (*Turkish*)
- tolstoevsky (*Russian*)
- Emyn-Russell Nt Nefydd (*Welsh*)
- Aditoo17 (*Czech*)
- Maya Minatsuki (*Japanese*)
- ariasuni (*French; Esperanto*)
- Roboron (*Spanish*)
- Alessandro Levati (*Italian*)
- Diluns (*Occitan*)
- regulartranslator (*Portuguese, Brazilian*)
- vishnuvaratharajan (*Tamil*)
- Marcin Mikołajczak (*Polish*)
- Yi-Jyun Pan (*Chinese Traditional*)
- Zoltán Gera (gerazo) (*Hungarian*)
- ButterflyOfFire (BoFFire) (*French, Arabic, Kabyle*)
- adrmzz (*Sardinian*)
- Ramdziana F Y (rafeyu) (*Indonesian*)
- Evert Prants (IcyDiamond) (*Estonian*)
- Daniele Lira Mereb (danilmereb) (*Portuguese, Brazilian*)
- Xosé M. (XoseM) (*Spanish, Galician*)
- Kristijan Tkalec (lapor) (*Slovenian*)
- stan ionut (stanionut12) (*Romanian*)
- Besnik_b (*Albanian*)
- Emanuel Pina (emanuelpina) (*Portuguese*)
- Thai Localization (thl10n) (*Thai*)
- 奈卜拉 (nebula_moe) (*Chinese Simplified*)
- Jeong Arm (Kjwon15) (*Japanese, Korean, Esperanto*)
- Michal Stanke (mstanke) (*Czech*)
- Alix Rossi (palindromordnilap) (*French, Corsican*)
- spla (*Spanish, Catalan*)
- Imre Kristoffer Eilertsen (DandelionSprout) (*Norwegian*)
- Jeroen (jeroenpraat) (*Dutch*)
- borys_sh (*Ukrainian*)
- Miguel Mayol (mitcoes) (*Spanish, Catalan*)
- Danial Behzadi (danialbehzadi) (*Persian*)
- yeft (*Chinese Traditional, Chinese Traditional, Hong Kong*)
- koyu (*German*)
- Koala Yeung (yookoala) (*Chinese Traditional, Hong Kong*)
- Osoitz (*Basque*)
- Peterandre (*Norwegian, Norwegian Nynorsk*)
- tzium (*Sardinian*)
- Iváns (Ivans_translator) (*Galician*)
- Sasha Sorokin (Sasha-Sorokin) (*French, Catalan, Danish, German, Greek, Hungarian, Armenian, Korean, Russian, Albanian, Swedish, Ukrainian, Vietnamese, Galician*)
- kamee (*Armenian*)
- tolstoevsky (*Russian*)
- enolp (*Asturian*)
- FédiQuébec (manuelviens) (*French*)
- lamnatos (*Greek*)
- Maya Minatsuki (mayaeh) (*Japanese*)
- Masoud Abkenar (mabkenar) (*Persian*)
- Alessandro Levati (Oct326) (*Italian*)
- arshat (*Kazakh*)
- Roboron (*Spanish*)
- ariasuni (*French, Arabic, Czech, German, Greek, Hungarian, Slovenian, Ukrainian, Chinese Simplified, Portuguese, Brazilian, Persian, Norwegian Nynorsk, Esperanto, Breton, Corsican, Sardinian, Kabyle*)
- Ali Demirtaş (alidemirtas) (*Turkish*)
- Em St Cenydd (cancennau) (*Welsh*)
- Marek Ľach (mareklach) (*Polish, Slovak*)
- Muha Aliss (muhaaliss) (*Turkish*)
- Jurica (ahjk) (*Croatian*)
- Aditoo17 (*Czech*)
- Diluns (*Occitan*)
- gagik_ (*Armenian*)
- vishnuvaratharajan (*Tamil*)
- Marcin Mikołajczak (mkljczkk) (*Czech, Polish, Russian*)
- regulartranslator (*Portuguese, Brazilian*)
- Akarshan Biswas (biswasab) (*Bengali, Sanskrit*)
- Yi-Jyun Pan (pan93412) (*Chinese Traditional*)
- d5Ziif3K (*Ukrainian*)
- GiorgioHerbie (*Italian*)
- Rafael H L Moretti (Moretti) (*Portuguese, Brazilian*)
- Saederup92 (*Danish*)
- christalleras (*Norwegian Nynorsk*)
- cybergene (cyber-gene) (*Japanese*)
- Taloran (*Norwegian Nynorsk*)
- ThibG (*French; Icelandic*)
- Akarshan Biswas (*Bengali*)
- ThibG (*French, Icelandic*)
- xatier (*Chinese Traditional*)
- otrapersona (*Spanish, Spanish, Mexico*)
- atarashiako (*Chinese Simplified*)
- 101010 (*Polish*)
- 101010 (101010pl) (*Polish*)
- silkevicious (*Italian*)
- Bertil Hedkvist (*Swedish*)
- cybergene (*Japanese*)
- Floxu (fredrikdim1) (*Norwegian Nynorsk*)
- Bertil Hedkvist (Berrahed) (*Swedish*)
- William(ѕ)ⁿ (wmlgr) (*Spanish*)
- norayr (*Armenian*)
- William(ѕ)ⁿ (*Spanish*)
- Tiago Epifânio (*Portuguese*)
- Mentor Gashi (*Albanian*)
- Jaz-Michael King (*Welsh*)
- Tiago Epifânio (tfve) (*Portuguese*)
- Ryo (DrRyo) (*Korean*)
- Mentor Gashi (mentorgashi.com) (*Albanian*)
- Jaz-Michael King (jazmichaelking) (*Welsh*)
- carolinagiorno (*Portuguese, Brazilian*)
- Roby Thomas (*Malayalam*)
- Bharat Kumar (*Hindi*)
- Roby Thomas (roby.thomas) (*Malayalam*)
- Bharat Kumar (Marwari) (*Hindi*)
- ThonyVezbe (*Breton*)
- dkdarshan760 (*Sanskrit*)
- Tagomago (tagomago) (*French, Spanish*)
- tykayn (*French*)
- axi (*Finnish*)
- Selyan Slimane AMIRI (*Kabyle*)
- Selyan Slimane AMIRI (slimane_AMIRI) (*Kabyle*)
- Balázs Meskó (mesko.balazs) (*Hungarian*)
- taoxvx (*Danish*)
- Hrach Mkrtchyan (*Armenian*)
- sabri (*Spanish; Spanish, Argentina*)
- Dewi (*Breton; French*)
- Hrach Mkrtchyan (mhrach87) (*Armenian*)
- sabri (thetomatoisavegetable) (*Spanish, Spanish, Argentina*)
- Dewi (Unkorneg) (*French, Breton*)
- Coelacanthus (*Chinese Simplified*)
- syncopams (*Chinese Simplified, Chinese Traditional, Chinese Traditional, Hong Kong*)
- SteinarK (*Norwegian Nynorsk*)
- Mathias B. Vagnes (*Norwegian*)
- dashersyed (*Urdu*)
- ThonyVezbe (*Breton*)
- Acolyte (*Ukrainian*)
- Conight Wang (*Chinese Simplified*)
- Damjan Dimitrioski (*Macedonian*)
- PPNplus (*Thai*)
- Tagomago (*Spanish; French*)
- shioko (*Chinese Simplified*)
- Balázs Meskó (*Hungarian*)
- Evgeny Petrov (*Russian*)
- Gwenn (*Breton*)
- Ryo (*Korean*)
- Rafael H L Moretti (*Portuguese, Brazilian*)
- jaranta (*Finnish*)
- gagik_ (*Armenian*)
- Felicia (*Swedish*)
- Jess Rafn (*Danish*)
- Stasiek Michalski (*Polish*)
- Sokratis Alichanidis (alichani) (*Greek*)
- Mathias B. Vagnes (vagnes) (*Norwegian*)
- dashersyed (*Urdu (Pakistan)*)
- Acolyte (666noob404) (*Ukrainian*)
- Conight Wang (xfddwhh) (*Chinese Simplified*)
- liffon (*Swedish*)
- dxwc (*Bengali*)
- Saederup92 (*Danish*)
- Vanege (*Esperanto*)
- jmontane (*Catalan*)
- Johan Schiff (*Swedish*)
- Arunmozhi (*Tamil*)
- kat (*Ukrainian; Russian*)
- Laura (*Polish*)
- oti4500 (*Hungarian; Ukrainian*)
- diazepan (*Spanish; Spanish, Argentina*)
- Sokratis Alichanidis (*Greek*)
- Rikard Linde (*Swedish*)
- Juan José Salvador Piedra (*Spanish*)
- marzuquccen (*Kabyle*)
- BurekzFinezt (*Serbian*)
- SHeija (*Finnish*)
- Jack R (*Spanish*)
- andruhov (*Ukrainian; Russian*)
- 森の子リスのミーコの大冒険 (*Japanese*)
- るいーね (*Japanese*)
- Sam Tux (*Bengali*)
- Unmual (*Spanish*)
- AW Unad (*Indonesian*)
- Cutls (*Japanese*)
- Ray (*Spanish*)
- Falling Snowdin (*Vietnamese*)
- Andrea Lo Iacono (*Italian*)
- EPEMA (*German*)
- Kinshuk Sunil (*Hindi*)
- Ullas Joseph (*Malayalam*)
- Yu-Pai Liu (*Chinese Traditional*)
- Amarin Cemthong (*Thai*)
- juanda097 (*Spanish*)
- Anunnakey (*Macedonian*)
- Damjan Dimitrioski (gnud) (*Macedonian*)
- PPNplus (*Thai*)
- shioko (*Chinese Simplified*)
- v4vachan (*Malayalam*)
- Hakim Oubouali (zenata1) (*Standard Moroccan Tamazight*)
- Evgeny Petrov (kondra007) (*Russian*)
- Gwenn (Belvar) (*Breton*)
- StanleyFrew (*French*)
- Hayk Khachatryan (brutusromanus123) (*Armenian*)
- jaranta (*Finnish*)
- Felicia (midsommar) (*Swedish*)
- Denys (dector) (*Ukrainian*)
- Pukima (pukimaaa) (*German*)
- Vanege (*Esperanto*)
- Jess Rafn (therealyez) (*Danish*)
- strubbl (*German*)
- Stasiek Michalski (hellcp) (*Polish*)
- dxwc (*Bengali*)
- jmontane (*Catalan*)
- Liboide (*Spanish*)
- Johan Schiff (schyffel) (*Swedish*)
- Arunmozhi (tecoholic) (*Tamil*)
- kat (katktv) (*Russian, Ukrainian*)
- Rikard Linde (rikardlinde) (*Swedish*)
- oti4500 (*Hungarian, Ukrainian*)
- Laura (selfisekai) (*Polish*)
- Rachida S. (ZiriSut) (*Kabyle*)
- diazepan (*Spanish, Spanish, Argentina*)
- marzuquccen (*Kabyle*)
- Juan José Salvador Piedra (JuanjoSalvador) (*Spanish*)
- Tigran (tigransimonyan) (*Armenian*)
- BurekzFinezt (*Serbian (Cyrillic)*)
- SHeija (*Finnish*)
- atriix (*Swedish*)
- Jack R (isaac.97_WT) (*Spanish*)
- antonyho (*Chinese Traditional, Hong Kong*)
- andruhov (*Russian, Ukrainian*)
- Aryamik Sharma (Aryamik) (*Swedish, Hindi*)
- phena109 (*Chinese Traditional, Hong Kong*)
- 森の子リスのミーコの大冒険 (Phroneris) (*Japanese*)
- るいーね (ruine) (*Japanese*)
- ahangarha (*Persian*)
- Sam Tux (imahbub) (*Bengali*)
- igordrozniak (*Polish*)
- Unmual (*Spanish*)
- Isaac Huang (caasih) (*Chinese Traditional*)
- AW Unad (awcodify) (*Indonesian*)
- Allen Zhong (AstroProfundis) (*Chinese Simplified*)
- Cutls (cutls) (*Japanese*)
- Ray (Ipsumry) (*Spanish*)
- Falling Snowdin (tghgg) (*Vietnamese*)
- coxde (*Chinese Simplified*)
- Rasmus Lindroth (RasmusLindroth) (*Swedish*)
- Andrea Lo Iacono (niels0n) (*Italian*)
- Kinshuk Sunil (kinshuksunil) (*Hindi*)
- Ullas Joseph (ullasjoseph) (*Malayalam*)
- Goudarz Jafari (Goudarz) (*Persian*)
- Yu-Pai Liu (tedliou) (*Chinese Traditional*)
- Amarin Cemthong (acitmaster) (*Thai*)
- juanda097 (juanda-097) (*Spanish*)
- Anunnakey (*Macedonian*)
- fragola (*Italian*)
- erikstl (*Esperanto*)
- twpenguin (*Chinese Traditional*)
- bobchao (*Chinese Traditional*)
- Esther (esthermations) (*Portuguese*)
- MadeInSteak (*Finnish*)
- Heimen Stoffels (*Dutch*)
- Rajarshi Guha (*Bengali*)
- Andrew (*Romanian*)
- Goudarz Jafari (*Persian*)
- Heimen Stoffels (vistausss) (*Dutch*)
- Rajarshi Guha (rajarshiguha) (*Bengali*)
- Andrew (iAndrew3) (*Romanian*)
- Gopal Sharma (gopalvirat) (*Hindi*)
- arethsu (*Swedish*)
- Carlos Solís (*Esperanto*)
- Parthan S Ramanujam (*Tamil*)
- Ali Demirtaş (*Turkish*)
- Kasper Nymand (*Danish*)
- TS (*Finnish*)
- Tofiq Abdula (Xwla) (*Sorani (Kurdish)*)
- Carlos Solís (csolisr) (*Esperanto*)
- Parthan S Ramanujam (parthan) (*Tamil*)
- Kasper Nymand (KasperNymand) (*Danish*)
- TS (morte) (*Finnish*)
- subram (*Turkish*)
- SensDeViata (*Ukrainian*)
- Ptrcmd (ptrcmd) (*Chinese Traditional*)
- SergioFMiranda (*Portuguese, Brazilian*)
- OctolinGamer (*Portuguese, Brazilian*)
- Scvoet (scvoet) (*Chinese Simplified*)
- hiroTS (*Chinese Traditional*)
- johne32rus23 (*Russian*)
- AzureNya (*Chinese Simplified*)
- Ram varma (*Tamil*)
- 北䑓如法 (*Japanese*)
- OctolinGamer (octolingamer) (*Portuguese, Brazilian*)
- Ram varma (ram4varma) (*Tamil*)
- Hexandcube (hexandcube) (*Polish*)
- 北䑓如法 (Nyoho) (*Japanese*)
- frumble (*German*)
- kekkepikkuni (*Tamil*)
- Neo_Chen (NeoChen1024) (*Chinese Traditional*)
- oorsutri (*Tamil*)
- Nithin V (*Tamil*)
- Miro Rauhala (*Finnish*)
- Rhys Harrison (rhedders) (*Esperanto*)
- Nithin V (Nithin896) (*Tamil*)
- Miro Rauhala (mirorauhala) (*Finnish*)
- diorama (*Italian*)
- Rhys Harrison (*Esperanto*)
- Guillaume Turchini (*French*)
- Ganesh D (*Marathi*)
- AlexKoala (alexkoala) (*Korean*)
- Aswin C (officialcjunior) (*Malayalam*)
- Guillaume Turchini (orion78fr) (*French*)
- Ganesh D (auntgd) (*Marathi*)
- dragnucs2 (*Arabic*)
- Pedro Henrique (*Portuguese, Brazilian*)
- Tejas Harad (*Marathi*)
- Vasanthan (*Tamil*)
- 硫酸鶏 (*Japanese*)
- Ryan Ho (koungho) (*Chinese Traditional*)
- Pedro Henrique (exploronauta) (*Portuguese, Brazilian*)
- Tejas Harad (h_tejas) (*Marathi*)
- Vasanthan (vasanthan) (*Tamil*)
- 硫酸鶏 (acid_chicken) (*Japanese*)
- clarmin b8 (clarminb8) (*Sorani (Kurdish)*)
- manukp (*Malayalam*)
- psymyn (*Hebrew*)
- earth dweller (*Marathi*)
- meijerivoi (*Finnish*)
- earth dweller (sanethoughtyt) (*Marathi*)
- meijerivoi (toilet) (*Finnish*)
- essaar (*Tamil*)
- serubeena (*Swedish*)
- Karol Kosek (krkkPL) (*Polish*)
- Rintan (*Japanese*)
- Karol Kosek (*Polish*)
- valarivan (*Tamil*)
- Sebastián Andil (*Slovak*)
- v4vachan (*Malayalam*)
- KEINOS (*Japanese*)
- Ivan T. (*Chinese Traditional, Hong Kong*)
- Hernik (hernik27) (*Czech*)
- Sebastián Andil (Selrond) (*Slovak*)
- Hinaloe (hinaloe) (*Japanese*)
- filippodb (*Italian*)
- Balázs Meskó (*Hungarian*)
- KEINOS (*Japanese*)
- Balázs Meskó (meskobalazs) (*Hungarian*)
- Bottle (suryasalem2010) (*Tamil*)
- JzshAC (*Chinese Simplified*)
- Bottle (*Tamil*)
- Khóo (*Chinese Traditional*)
- Steven Tappert (*German*)
- Antillion (*Spanish*)
- ZiriSut (*Kabyle*)
- gowthamanb (*Tamil*)
- hiphipvargas (*Portuguese*)
- Arttu Ylhävuori (*Finnish*)
- Ch. (*Korean*)
- tctovsli (*Norwegian Nynorsk*)
- Hinaloe (*Japanese*)
- strubbl (*German*)
- vjasiegd (*Polish*)
- SamitiMed (*Thai*)
- Wrya ali (John12) (*Sorani (Kurdish)*)
- Khóo (khootiatling) (*Chinese Traditional*)
- Steven Tappert (sammy8806) (*German*)
- Antillion (antillion99) (*Spanish*)
- Pukima (Pukimaa) (*German*)
- Reg3xp (*Persian*)
- AlexKoala (*Korean*)
- hiphipvargas (*Portuguese*)
- gowthamanb (*Tamil*)
- Ch. (sftblw) (*Korean*)
- Jeff Huang (s8321414) (*Chinese Traditional*)
- Arttu Ylhävuori (arttu.ylhavuori) (*Finnish*)
- tctovsli (*Norwegian Nynorsk*)
- Timo Tijhof (Krinkle) (*Dutch*)
- Yamagishi Kazutoshi (ykzts) (*Japanese, Icelandic, Sorani (Kurdish)*)
- vjasiegd (*Polish*)
- SamitiMed (samiti3d) (*Thai*)
- Rekan Adl (rekan-adl1) (*Sorani (Kurdish)*)
- umelard (*Hebrew*)
- Antara2Cinta (Se7enTime) (*Indonesian*)
- VSx86 (*Russian*)
- Daniel Dimitrov (*Bulgarian*)
- mynameismonkey (*Welsh*)
- Daniel Dimitrov (danny-dimitrov) (*Bulgarian*)
- parnikkapore (*Thai*)
- Mo_der Steven (*Chinese Simplified*)
- mynameismonkey (*Welsh*)
- Sherwan Othman (sherwanothman11) (*Sorani (Kurdish)*)
- Yassine Aït-El-Mouden (yaitelmouden) (*Standard Moroccan Tamazight*)
- SKELET (*Danish*)
- Renato "Lond" Cerqueira (*Portuguese, Brazilian*)
- Mo_der Steven (SakuraPuare) (*Chinese Simplified*)
- Fei Yang (Fei1Yang) (*Chinese Traditional*)
- ALEM FARID (faridatcemlulaqbayli) (*Kabyle*)
- enipra (*Armenian*)
- musix (*Persian*)
- ギャラ (*Chinese Simplified; Japanese*)
- ALEM FARID (*Kabyle*)
- Renato "Lond" Cerqueira (renatolond) (*Portuguese, Brazilian*)
- ギャラ (gyara) (*Japanese, Chinese Simplified*)
- Hougo (hougo) (*French*)
- ybardapurkar (*Marathi*)
- Adrián Lattes (*Spanish*)
- Adrián Lattes (haztecaso) (*Spanish*)
- TracyJacks (*Chinese Simplified*)
- rasheedgm (*Kannada*)
- omquylzu (*Latvian*)
- Belkacem Mohammed (*Kabyle*)
- Navjot Singh (*Hindi*)
- Ozai (*German*)
- Sahak Petrosyan (*Armenian*)
- siamano (*Thai; Esperanto*)
- se7entime (*Indonesian*)
- Viorel-Cătălin Răpițeanu (*Romanian*)
- Siddhartha Sarathi Basu (*Bengali*)
- Pachara Chantawong (*Thai*)
- Skew (*French*)
- Zijian Zhao (*Chinese Simplified*)
- Guru Prasath Anandapadmanaban (*Tamil*)
- turtle836 (*German*)
- GatoOscuro (*Spanish*)
- Lamin (*Japanese*)
- Marcepanek_ (*Polish*)
- Yann Aguettaz (*French*)
- Feruz Oripov (*Russian*)
- Mick Onio (*Asturian*)
- hg6 (*Hindi*)
- Malik Mann (*German*)
- padulafacundo (*Spanish*)
- mecqor labi (mecqorlabi) (*Persian*)
- Belkacem Mohammed (belkacem77) (*Kabyle*)
- Navjot Singh (nspeaks) (*Hindi*)
- omquylzu (*Latvian*)
- Ozai (*German*)
- Sahak Petrosyan (petrosyan) (*Armenian*)
- siamano (*Thai, Esperanto*)
- Viorel-Cătălin Răpițeanu (rapiteanu) (*Romanian*)
- Siddhartha Sarathi Basu (quinoa_biryani) (*Bengali*)
- Pachara Chantawong (pachara2202) (*Thai*)
- mkljczk (*Polish*)
- Skew (noan.perrot) (*French*)
- Zijian Zhao (jobs2512821228) (*Chinese Simplified*)
- turtle836 (*German*)
- Guru Prasath Anandapadmanaban (guruprasath) (*Tamil*)
- Lamin (laminne) (*Japanese*)
- Marcepanek_ (thekingmarcepan) (*Polish*)
- Feruz Oripov (FeruzOripov) (*Russian*)
- Yann Aguettaz (yann-a) (*French*)
- Mick Onio (xgc.redes) (*Asturian*)
- Tianqi Zhang (tina.zhang040609) (*Chinese Simplified*)
- Malik Mann (dermalikmann) (*German*)
- dadosch (*German*)
- r3dsp1 (*Chinese Traditional, Hong Kong*)
- Tianqi Zhang (*Chinese Simplified*)
- Padraic Calpin (*Slovenian*)
- cenegd (*Chinese Simplified*)
- padulafacundo (*Spanish*)
- hg6 (*Hindi*)
- Orlando Murcio (Atos20) (*Spanish, Mexico*)
- piupiupiudiu (*Chinese Simplified*)
- Hugh Liu (*Chinese Simplified*)
- Rakino (*Chinese Simplified*)
- Jothipazhani Nagarajan (*Tamil*)
- Miquel Sabaté Solà (*Catalan*)
- shdy (*German*)
- Padraic Calpin (padraic-padraic) (*Slovenian*)
- Ильзира Рахматуллина (rahmatullinailzira53) (*Tatar*)
- cenegd (*Chinese Simplified*)
- Hugh Liu (youloveonlymeh) (*Chinese Simplified*)
- Pixelcode (realpixelcode) (*German*)
- Yogesh K S (yogi) (*Kannada*)
- Rakino (rakino) (*Chinese Simplified*)
- Miquel Sabaté Solà (mssola) (*Catalan*)
- AmazighNM (*Kabyle*)
- Solid Rhino (*Dutch*)
- Jothipazhani Nagarajan (jothipazhani.n) (*Tamil*)
- Clash Clans (KURD12345) (*Sorani (Kurdish)*)
- hallomaurits (*Dutch*)
- alnd hezh (alndhezh) (*Sorani (Kurdish)*)
- Solid Rhino (SolidRhino) (*Dutch*)
- k_taka (peaceroad) (*Japanese*)
- Hallo Abdullah (hallo_hamza12) (*Sorani (Kurdish)*)
- hussama (*Portuguese, Brazilian*)
- shafouz (*Portuguese, Brazilian*)
- Tagada (*French*)
- Tom_ (*Czech*)
- SnDer (*Dutch*)
- Sébastien Feugère (smonff) (*French*)
- 林水溶 (shuiRong) (*Chinese Simplified*)
- eichkat3r (*German*)
- PifyZ (*French*)
- OminousCry (*Russian*)
- Shrinivasan T (*Tamil*)
- Nathaël Noguès (*French*)
- Daniel M. (*Catalan*)
- Swati Sani (*Urdu*)
- Kk (*Kannada*)
- SusVersiva (*Catalan*)
- Robin van der Vliet (*Esperanto*)
- Zinkokooo (*Basque*)
- Tradjincal (*French*)
- SnDer (*Dutch*)
- PifyZ (*French*)
- Tom_ (*Czech*)
- Tagada (Tagadda) (*French*)
- shafouz (*Portuguese, Brazilian*)
- Kahina Mess (K_hina) (*Kabyle*)
- Nathaël Noguès (NatNgs) (*French*)
- Kk (kishorkumara3) (*Kannada*)
- Swati Sani (swatisani) (*Urdu (Pakistan)*)
- Shrinivasan T (tshrinivasan) (*Tamil*)
- さっかりんにーさん (saccharin23) (*Japanese*)
- 夜楓Yoka (Yoka2627) (*Chinese Simplified*)
- Daniel M. (daniconil) (*Catalan*)
- Vikatakavi (*Kannada*)
- prabhjot (*Hindi*)
- twpenguin (*Chinese Traditional*)
- SusVersiva (*Catalan*)
- Tradjincal (tradjincal) (*French*)
- pullopen (*Chinese Simplified*)
- Robin van der Vliet (RobinvanderVliet) (*Esperanto*)
- Zinkokooo (*Basque*)
- mmokhi (*Persian*)
- Livingston Samuel (livingston) (*Tamil*)
- prabhjot (*Hindi*)
- sergioaraujo1 (*Portuguese, Brazilian*)
- Livingston Samuel (*Tamil*)
- CyberAmoeba (pseudoobscura) (*Chinese Simplified*)
- tsundoker (*Malayalam*)
- skaaarrr (*German*)
- 夜楓Yoka (*Chinese Simplified*)
- kiwi0 (*Italian*)
- Ricardo Colin (rysard) (*Spanish*)
- mkljczk (mykylyjczyk) (*Polish*)
- Philipp Fischbeck (PFischbeck) (*German*)
- fedot (*Russian*)
- mkljczk (*Polish*)
- igordrozniak (*Polish*)
- Ricardo Colin (*Spanish*)
- Esther (*Portuguese*)
- Paz Galindo (*Spanish*)
- Philipp Fischbeck (*German*)
- Paz Galindo (paz.almendra.g) (*Spanish*)
- GaggiX (*Italian*)
- ralozkolya (*Georgian*)
- JackXu (*Chinese Simplified*)
- Allen Zhong (*Chinese Simplified*)
- Zoé Bőle (*German*)
- Lukas Fülling (*German*)
- Albatroz Jeremias (*Portuguese*)
- Samir Tighzert (*Kabyle*)
- Nocta (*French*)
- Anoop (*Malayalam*)
- Zoé Bőle (zoe1337) (*German*)
- Lukas Fülling (lfuelling) (*German*)
- JackXu (Merman-Jack) (*Chinese Simplified*)
- Aymeric (AymBroussier) (*French*)
- Anoop (anoopp) (*Malayalam*)
- pezcurrel (*Italian*)
- Dremski (*Bulgarian*)
- Aymeric (*French*)
- tamaina (*Japanese*)
- Doug (*Portuguese, Brazilian*)
- Matias Lavik (*Norwegian Nynorsk*)
- Fleva (*Sardinian*)
- Xurxo Guerra (xguerrap) (*Galician*)
- mashirozx (*Chinese Simplified*)
- Albatroz Jeremias (albjeremias) (*Portuguese*)
- Samir Tighzert (samir_t7) (*Kabyle*)
- Apple (blackteaovo) (*Chinese Simplified*)
- Nocta (*French*)
- OpenAlgeria (*Arabic*)
- koppe-pan (*Japanese*)
- Amith Raj Shetty (*Kannada*)
- tamaina (*Japanese*)
- abidin toumi (Zet24) (*Arabic*)
- xpac1985 (xpac) (*German*)
- Kaede (kaedech) (*Japanese*)
- ÀŘǾŚ PÀŚĦÀÍ (arospashai) (*Sorani (Kurdish)*)
- Matias Lavik (matiaslavik) (*Norwegian Nynorsk*)
- smedvedev (*Russian*)
- Trond Boksasp (*Norwegian*)
- mikel (mikelalas) (*Spanish*)
- Doug (douglasalvespe) (*Portuguese, Brazilian*)
- Trond Boksasp (boksasp) (*Norwegian*)
- Fleva (*Sardinian*)
- Mohammad Adnan Mahmood (adnanmig) (*Arabic*)
- Sais Lakshmanan (Saislakshmanan) (*Tamil*)
- Amith Raj Shetty (amithraj1989) (*Kannada*)
- random_person (*Spanish*)
- Sais Lakshmanan (*Tamil*)
- mikel (*Spanish*)
- Mohammad Adnan Mahmood (*Arabic*)
- djoerd (*Dutch*)
- Baban Abdulrahman (baban.abdulrehman) (*Sorani (Kurdish)*)
- ebrezhoneg (*Breton*)
- dashty (*Sorani (Kurdish)*)
- Salh_haji6 (*Sorani (Kurdish)*)
- Amir Kurdo (kuraking202) (*Sorani (Kurdish)*)
- おさ (osapon) (*Japanese*)
- Ranj A Abdulqadir (RanjAhmed) (*Sorani (Kurdish)*)
- umonaca (*Chinese Simplified*)
- Bartek Fijałkowski (brateq) (*Polish*)
- tateisu (*Japanese*)
- centumix (*Japanese*)
- Jari Ronkainen (ronchaine) (*Finnish*)
- Savarín Electrográfico Marmota Intergalactica (herrero.maty) (*Spanish*)
- Torsten Högel (torstenhoegel) (*German*)
- Abijeet Patro (Abijeet) (*Basque*)
- Ács Zoltán (acszoltan111) (*Hungarian*)
- Benjamin Cobb (benjamincobb) (*German*)
- waweic (*German*)
- Aries (orlea) (*Japanese*)
- silverscat_3 (SilversCat) (*Japanese*)
- kavitha129 (*Tamil*)
- dcapillae (*Spanish*)
- SamOak (*Portuguese, Brazilian*)
- capiscuas (*Spanish*)
- NeverMine17 (*Russian*)
- Nithya Mary (nithyamary25) (*Tamil*)
- t_aus_m (*German*)
- dobrado (*Portuguese, Brazilian*)
- Hannah (Aniqueper1) (*Chinese Simplified*)
- Jiniux (*Italian*)
- 于晚霞 (xissshawww) (*Chinese Simplified*)

View file

@ -3,7 +3,7 @@ Changelog
All notable changes to this project will be documented in this file.
## Unreleased
## [3.3.0] - 2020-12-27
### Added
- **Add hotkeys for audio/video control in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/15158), [Gargron](https://github.com/tootsuite/mastodon/pull/15198))
@ -17,7 +17,7 @@ All notable changes to this project will be documented in this file.
- Add border around 🐞 emoji in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14712))
- Add home link to the getting started column when home isn't mounted ([ThibG](https://github.com/tootsuite/mastodon/pull/14707))
- Add option to disable swiping motions across the web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13885))
- **Add pop-out player for audio/video in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/14870), [Gargron](https://github.com/tootsuite/mastodon/pull/15157), [Gargron](https://github.com/tootsuite/mastodon/pull/14915))
- **Add pop-out player for audio/video in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/14870), [Gargron](https://github.com/tootsuite/mastodon/pull/15157), [Gargron](https://github.com/tootsuite/mastodon/pull/14915), [noellabo](https://github.com/tootsuite/mastodon/pull/15309))
- Continue watching/listening when you scroll away
- Action bar to interact with/open toot from the pop-out player
- Add unread notification markers in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14818), [ThibG](https://github.com/tootsuite/mastodon/pull/14960), [ThibG](https://github.com/tootsuite/mastodon/pull/14954), [noellabo](https://github.com/tootsuite/mastodon/pull/14897), [noellabo](https://github.com/tootsuite/mastodon/pull/14907))
@ -27,14 +27,16 @@ All notable changes to this project will be documented in this file.
- If you have a proxy cache in front of object storage, deleted files will persist until the cache expires
- If enabled, cache buster will make a special request to the proxy to signal a cache reset
- Add duration option to the mute function ([aquarla](https://github.com/tootsuite/mastodon/pull/13831))
- Add replies policy option to the list function ([ThibG](https://github.com/tootsuite/mastodon/pull/9205))
- Add replies policy option to the list function ([ThibG](https://github.com/tootsuite/mastodon/pull/9205), [trwnh](https://github.com/tootsuite/mastodon/pull/15304))
- Add `og:published_time` OpenGraph tags on toots ([nornagon](https://github.com/tootsuite/mastodon/pull/14865))
- **Add option to be notified when a followed user posts** ([Gargron](https://github.com/tootsuite/mastodon/pull/13546), [ThibG](https://github.com/tootsuite/mastodon/pull/14896), [Gargron](https://github.com/tootsuite/mastodon/pull/14822))
- If you don't want to miss a toot, click the bell button!
- Add client-side validation in password change forms ([ThibG](https://github.com/tootsuite/mastodon/pull/14564))
- Add client-side validation in the registration form ([ThibG](https://github.com/tootsuite/mastodon/pull/14560), [ThibG](https://github.com/tootsuite/mastodon/pull/14599))
- Add support for Gemini URLs ([joshleeb](https://github.com/tootsuite/mastodon/pull/15013))
- Add app shortcuts to web app manifest ([mkljczk](https://github.com/tootsuite/mastodon/pull/15234))
- Add WebAuthn as an alternative 2FA method ([santiagorodriguez96](https://github.com/tootsuite/mastodon/pull/14466), [jiikko](https://github.com/tootsuite/mastodon/pull/14806))
- Add honeypot fields and minimum fill-out time for sign-up form ([ThibG](https://github.com/tootsuite/mastodon/pull/15276))
- Add icon for mutual relationships in relationship manager ([noellabo](https://github.com/tootsuite/mastodon/pull/15149))
- Add follow selected followers button in relationship manager ([noellabo](https://github.com/tootsuite/mastodon/pull/15148))
- **Add subresource integrity for JS and CSS assets** ([Gargron](https://github.com/tootsuite/mastodon/pull/15096))
@ -42,7 +44,7 @@ All notable changes to this project will be documented in this file.
- Subresource integrity compares server-generated asset digests with what's actually served from the CDN and prevents such attacks
- Add `ku`, `sa`, `sc`, `zgh` to available locales ([ykzts](https://github.com/tootsuite/mastodon/pull/15138))
- Add ability to force an account to mark media as sensitive ([noellabo](https://github.com/tootsuite/mastodon/pull/14361))
- **Add ability to block access or limit sign-ups from chosen IPs** ([Gargron](https://github.com/tootsuite/mastodon/pull/14963))
- **Add ability to block access or limit sign-ups from chosen IPs** ([Gargron](https://github.com/tootsuite/mastodon/pull/14963), [ThibG](https://github.com/tootsuite/mastodon/pull/15263))
- Add rules for IPs or CIDR ranges that automatically expire after a configurable amount of time
- Choose the severity of the rule, either blocking all access or merely limiting sign-ups
- **Add support for reversible suspensions through ActivityPub** ([Gargron](https://github.com/tootsuite/mastodon/pull/14989))
@ -50,17 +52,21 @@ All notable changes to this project will be documented in this file.
- During suspension, the account can only delete its own content
- A reversal of the suspension can be signalled the same way
- A local suspension always overrides a remote one
- Add indication to admin UI of whether a report has been forwarded ([ThibG](https://github.com/tootsuite/mastodon/pull/13237))
- Add display of reasons for joining of an account in admin UI ([mashirozx](https://github.com/tootsuite/mastodon/pull/15265))
- Add option to obfuscate domain name in public list of domain blocks ([Gargron](https://github.com/tootsuite/mastodon/pull/15355))
- Add option to make reasons for joining required on sign-up ([ThibG](https://github.com/tootsuite/mastodon/pull/15326), [ThibG](https://github.com/tootsuite/mastodon/pull/15358), [ThibG](https://github.com/tootsuite/mastodon/pull/15385), [ThibG](https://github.com/tootsuite/mastodon/pull/15405))
- Add ActivityPub follower synchronization mechanism ([ThibG](https://github.com/tootsuite/mastodon/pull/14510), [ThibG](https://github.com/tootsuite/mastodon/pull/15026))
- Add outbox attribute to instance actor ([ThibG](https://github.com/tootsuite/mastodon/pull/14721))
- Add featured hashtags as an ActivityPub collection ([Gargron](https://github.com/tootsuite/mastodon/pull/11595))
- Add featured hashtags as an ActivityPub collection ([Gargron](https://github.com/tootsuite/mastodon/pull/11595), [noellabo](https://github.com/tootsuite/mastodon/pull/15277))
- Add support for dereferencing objects through bearcaps ([Gargron](https://github.com/tootsuite/mastodon/pull/14683), [noellabo](https://github.com/tootsuite/mastodon/pull/14981))
- Add `S3_READ_TIMEOUT` environment variable ([tateisu](https://github.com/tootsuite/mastodon/pull/14952))
- Add `ALLOWED_PRIVATE_ADDRESSES` environment variable ([ThibG](https://github.com/tootsuite/mastodon/pull/14722))
- Add `--fix-permissions` option to `tootctl media remove-orphans` ([Gargron](https://github.com/tootsuite/mastodon/pull/14383), [uist1idrju3i](https://github.com/tootsuite/mastodon/pull/14715))
- Add `tootctl accounts merge` ([Gargron](https://github.com/tootsuite/mastodon/pull/15201))
- Add `tootctl accounts merge` ([Gargron](https://github.com/tootsuite/mastodon/pull/15201), [ThibG](https://github.com/tootsuite/mastodon/pull/15264), [ThibG](https://github.com/tootsuite/mastodon/pull/15256))
- Has someone changed their domain or subdomain thereby creating two accounts where there should be one?
- This command will fix it on your end
- Add `tootctl maintenance fix-duplicates` ([ThibG](https://github.com/tootsuite/mastodon/pull/14860), [Gargron](https://github.com/tootsuite/mastodon/pull/15223))
- Add `tootctl maintenance fix-duplicates` ([ThibG](https://github.com/tootsuite/mastodon/pull/14860), [Gargron](https://github.com/tootsuite/mastodon/pull/15223), [ThibG](https://github.com/tootsuite/mastodon/pull/15373))
- Index corruption in the database?
- This command is for you
- **Add support for managing multiple stream subscriptions in a single connection** ([Gargron](https://github.com/tootsuite/mastodon/pull/14524), [Gargron](https://github.com/tootsuite/mastodon/pull/14566), [mfmfuyu](https://github.com/tootsuite/mastodon/pull/14859), [zunda](https://github.com/tootsuite/mastodon/pull/14608))
@ -68,22 +74,24 @@ All notable changes to this project will be documented in this file.
- More connections means more resource consumption on both ends, not to mention the (ever so slight) delay when establishing a new connection
- Now, with just a single WebSocket connection you can subscribe and unsubscribe to and from multiple streams
- Add support for limiting results by both `min_id` and `max_id` at the same time in REST API ([tateisu](https://github.com/tootsuite/mastodon/pull/14776))
- Add `GET /api/v1/accounts/:id/featured_tags` to REST API ([noellabo](https://github.com/tootsuite/mastodon/pull/11817))
- Add `GET /api/v1/accounts/:id/featured_tags` to REST API ([noellabo](https://github.com/tootsuite/mastodon/pull/11817), [noellabo](https://github.com/tootsuite/mastodon/pull/15270))
- Add stoplight for object storage failures, return HTTP 503 in REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/13043))
- Add optional `tootctl remove media` cronjob in Helm chart ([dunn](https://github.com/tootsuite/mastodon/pull/14396))
- Add clean error message when `RAILS_ENV` is unset ([ThibG](https://github.com/tootsuite/mastodon/pull/15381))
### Changed
- **Change media modals look in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/15217), [Gargron](https://github.com/tootsuite/mastodon/pull/15221))
- **Change media modals look in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/15217), [Gargron](https://github.com/tootsuite/mastodon/pull/15221), [Gargron](https://github.com/tootsuite/mastodon/pull/15284), [Gargron](https://github.com/tootsuite/mastodon/pull/15283), [Kjwon15](https://github.com/tootsuite/mastodon/pull/15308), [noellabo](https://github.com/tootsuite/mastodon/pull/15305), [ThibG](https://github.com/tootsuite/mastodon/pull/15417))
- Background of the overlay matches the color of the image
- Action bar to interact with or open the toot from the modal
- Change order of announcements in admin UI to be newest-first ([ThibG](https://github.com/tootsuite/mastodon/pull/15091))
- **Change account suspensions to be reversible by default** ([Gargron](https://github.com/tootsuite/mastodon/pull/14726), [ThibG](https://github.com/tootsuite/mastodon/pull/15152), [ThibG](https://github.com/tootsuite/mastodon/pull/15106), [ThibG](https://github.com/tootsuite/mastodon/pull/15100), [ThibG](https://github.com/tootsuite/mastodon/pull/15099), [noellabo](https://github.com/tootsuite/mastodon/pull/14855))
- **Change account suspensions to be reversible by default** ([Gargron](https://github.com/tootsuite/mastodon/pull/14726), [ThibG](https://github.com/tootsuite/mastodon/pull/15152), [ThibG](https://github.com/tootsuite/mastodon/pull/15106), [ThibG](https://github.com/tootsuite/mastodon/pull/15100), [ThibG](https://github.com/tootsuite/mastodon/pull/15099), [noellabo](https://github.com/tootsuite/mastodon/pull/14855), [ThibG](https://github.com/tootsuite/mastodon/pull/15380), [Gargron](https://github.com/tootsuite/mastodon/pull/15420), [Gargron](https://github.com/tootsuite/mastodon/pull/15414))
- Suspensions no longer equal deletions
- A suspended account can be unsuspended with minimal consequences for 30 days
- Immediate deletion of data is still available as an explicit option
- Suspended accounts can request an archive of their data through the UI
- Change REST API to return empty data for suspended accounts (14765)
- Change web UI to show empty profile for suspended accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/14766))
- Change web UI to show empty profile for suspended accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/14766), [Gargron](https://github.com/tootsuite/mastodon/pull/15345))
- Change featured hashtag suggestions to be recently used instead of most used ([abcang](https://github.com/tootsuite/mastodon/pull/14760))
- Change direct toots to appear in the home feed again ([Gargron](https://github.com/tootsuite/mastodon/pull/14711), [ThibG](https://github.com/tootsuite/mastodon/pull/15182), [noellabo](https://github.com/tootsuite/mastodon/pull/14727))
- Return to treating all toots the same instead of trying to retrofit direct visibility into an instant messaging model
@ -96,7 +104,14 @@ All notable changes to this project will be documented in this file.
- Change string "Boost to original audience" to "Boost with original visibility" in web UI ([3n-k1](https://github.com/tootsuite/mastodon/pull/14598))
- Change string "Show more" to "Show newer" and "Show older" on public pages ([ariasuni](https://github.com/tootsuite/mastodon/pull/15052))
- Change order of announcements to be reverse chronological in web UI ([dariusk](https://github.com/tootsuite/mastodon/pull/15065), [dariusk](https://github.com/tootsuite/mastodon/pull/15070))
- Change RTL detection to rely on unicode-bidi paragraph by paragraph in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/14573))
- Change visibility icon next to timestamp to be clickable in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/15053), [mayaeh](https://github.com/tootsuite/mastodon/pull/15055))
- Change public thread view to hide "Show thread" link ([ThibG](https://github.com/tootsuite/mastodon/pull/15266))
- Change number format on about page from full to shortened ([Gargron](https://github.com/tootsuite/mastodon/pull/15327))
- Change how scheduled tasks run in multi-process environments ([noellabo](https://github.com/tootsuite/mastodon/pull/15314))
- New dedicated queue `scheduler`
- Runs by default when Sidekiq is executed with no options
- Has to be added manually in a multi-process environment
### Removed
@ -107,6 +122,8 @@ All notable changes to this project will be documented in this file.
### Fixed
- Fix layout on about page when contact account has a long username ([ThibG](https://github.com/tootsuite/mastodon/pull/15357))
- Fix follow limit preventing re-following of a moved account ([Gargron](https://github.com/tootsuite/mastodon/pull/14207), [ThibG](https://github.com/tootsuite/mastodon/pull/15384))
- **Fix deletes not reaching every server that interacted with toot** ([Gargron](https://github.com/tootsuite/mastodon/pull/15200))
- Previously, delete of a toot would be primarily sent to the followers of its author, people mentioned in the toot, and people who reblogged the toot
- Now, additionally, it is ensured that it is sent to people who replied to it, favourited it, and to the person it replies to even if that person is not mentioned
@ -123,7 +140,7 @@ All notable changes to this project will be documented in this file.
- Fix poll ending notifications being created for each vote ([ThibG](https://github.com/tootsuite/mastodon/pull/15071))
- Fix multiple boosts of a same toot erroneously appearing in TL ([ThibG](https://github.com/tootsuite/mastodon/pull/14759))
- Fix asset builds not picking up `CDN_HOST` change ([ThibG](https://github.com/tootsuite/mastodon/pull/14381))
- Fix desktop notifications permission prompt in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/14985), [Gargron](https://github.com/tootsuite/mastodon/pull/15141), [ThibG](https://github.com/tootsuite/mastodon/pull/13543))
- Fix desktop notifications permission prompt in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/14985), [Gargron](https://github.com/tootsuite/mastodon/pull/15141), [ThibG](https://github.com/tootsuite/mastodon/pull/13543), [ThibG](https://github.com/tootsuite/mastodon/pull/15176))
- Some time ago, browsers added a requirement that desktop notification prompts could only be displayed in response to a user-generated event (such as a click)
- This means that for some time, users who haven't already given the permission before were not getting a prompt and as such were not receiving desktop notifications
- Fix "Mark media as sensitive" string not supporting pluralizations in other languages in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/15051))
@ -139,11 +156,19 @@ All notable changes to this project will be documented in this file.
- Fix disabled boost icon being replaced by private boost icon on hover in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14456))
- Fix hashtag detection in compose form being different to server-side in web UI ([kedamaDQ](https://github.com/tootsuite/mastodon/pull/14484), [ThibG](https://github.com/tootsuite/mastodon/pull/14513))
- Fix home last read marker mishandling gaps in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14809))
- Fix unnecessary re-rendering of various components when typing in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/15286))
- Fix notifications being unnecessarily re-rendered in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/15312))
- Fix column swiping animation logic in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/15301))
- Fix inefficiency when fetching hashtag timeline ([noellabo](https://github.com/tootsuite/mastodon/pull/14861), [akihikodaki](https://github.com/tootsuite/mastodon/pull/14662))
- Fix inefficiency when fetching bookmarks ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14674))
- Fix inefficiency when fetching favourites ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14673))
- Fix inefficiency when fetching media-only account timeline ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14675))
- Fix inefficieny when deleting accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/15387), [ThibG](https://github.com/tootsuite/mastodon/pull/15409), [ThibG](https://github.com/tootsuite/mastodon/pull/15407), [ThibG](https://github.com/tootsuite/mastodon/pull/15408), [ThibG](https://github.com/tootsuite/mastodon/pull/15402), [ThibG](https://github.com/tootsuite/mastodon/pull/15416), [Gargron](https://github.com/tootsuite/mastodon/pull/15421))
- Fix redundant query when processing batch actions on custom emojis ([niwatori24](https://github.com/tootsuite/mastodon/pull/14534))
- Fix slow distinct queries where grouped queries are faster ([Gargron](https://github.com/tootsuite/mastodon/pull/15287))
- Fix performance on instances list in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/15282))
- Fix server actor appearing in list of accounts in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14567))
- Fix "bootstrap timeline accounts" toggle in site settings in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/15325))
- Fix PostgreSQL secret name for cronjob in Helm chart ([metal3d](https://github.com/tootsuite/mastodon/pull/15072))
- Fix Procfile not being compatible with herokuish ([acuteaura](https://github.com/tootsuite/mastodon/pull/12685))
- Fix installation of tini being split into multiple steps in Dockerfile ([ryncsn](https://github.com/tootsuite/mastodon/pull/14686))
@ -152,6 +177,33 @@ All notable changes to this project will be documented in this file.
- Fix streaming API allowing connections to persist after access token invalidation ([Gargron](https://github.com/tootsuite/mastodon/pull/15111))
- Fix 2FA/sign-in token sessions being valid after password change ([Gargron](https://github.com/tootsuite/mastodon/pull/14802))
- Fix resolving accounts sometimes creating duplicate records for a given ActivityPub identifier ([ThibG](https://github.com/tootsuite/mastodon/pull/15364))
## [3.2.2] - 2020-12-19
### Added
- Add `tootctl maintenance fix-duplicates` ([ThibG](https://github.com/tootsuite/mastodon/pull/14860), [Gargron](https://github.com/tootsuite/mastodon/pull/15223))
- Index corruption in the database?
- This command is for you
### Removed
- Remove dependency on unused and unmaintained http_parser.rb gem ([ThibG](https://github.com/tootsuite/mastodon/pull/14574))
### Fixed
- Fix Move handler not being triggered when failing to fetch target account ([ThibG](https://github.com/tootsuite/mastodon/pull/15107))
- Fix downloading remote media files when server returns empty filename ([ThibG](https://github.com/tootsuite/mastodon/pull/14867))
- Fix possible casing inconsistencies in hashtag search ([ThibG](https://github.com/tootsuite/mastodon/pull/14906))
- Fix updating account counters when association is not yet created ([Gargron](https://github.com/tootsuite/mastodon/pull/15108))
- Fix account processing failing because of large collections ([ThibG](https://github.com/tootsuite/mastodon/pull/15027))
- Fix resolving an account through its non-canonical form (i.e. alternate domain) ([ThibG](https://github.com/tootsuite/mastodon/pull/15187))
- Fix slow distinct queries where grouped queries are faster ([Gargron](https://github.com/tootsuite/mastodon/pull/15287))
### Security
- Fix 2FA/sign-in token sessions being valid after password change ([Gargron](https://github.com/tootsuite/mastodon/pull/14802))
- Fix resolving accounts sometimes creating duplicate records for a given ActivityPub identifier ([ThibG](https://github.com/tootsuite/mastodon/pull/15364))
## [3.2.1] - 2020-10-19
### Added
@ -335,14 +387,14 @@ All notable changes to this project will be documented in this file.
- Only then proceed to start removing their data (slow)
- Clear out media attachments in a separate worker (slow)
## [v3.1.5] - 2020-07-07
## [3.1.5] - 2020-07-07
### Security
- Fix media attachment enumeration ([ThibG](https://github.com/tootsuite/mastodon/pull/14254))
- Change rate limits for various paths ([Gargron](https://github.com/tootsuite/mastodon/pull/14253))
- Fix other sessions not being logged out on password change ([Gargron](https://github.com/tootsuite/mastodon/pull/14252))
## [v3.1.4] - 2020-05-14
## [3.1.4] - 2020-05-14
### Added
- Add `vi` to available locales ([taicv](https://github.com/tootsuite/mastodon/pull/13542))
@ -409,7 +461,7 @@ All notable changes to this project will be documented in this file.
- For apps that self-register on behalf of every individual user (such as most mobile apps), this is a non-issue
- The issue only affects developers of apps who are shared between multiple users, such as server-side apps like cross-posters
## [v3.1.3] - 2020-04-05
## [3.1.3] - 2020-04-05
### Added
- Add ability to filter audit log in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/13381))

View file

@ -82,6 +82,7 @@ gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
gem 'rqrcode', '~> 1.1'
gem 'ruby-progressbar', '~> 1.10'
gem 'sanitize', '~> 5.2'
gem 'scenic', '~> 1.5'
gem 'sidekiq', '~> 6.1'
gem 'sidekiq-scheduler', '~> 3.0'
gem 'sidekiq-unique-jobs', '~> 6.0'

View file

@ -561,6 +561,9 @@ GEM
crass (~> 1.0.2)
nokogiri (>= 1.8.0)
nokogumbo (~> 2.0)
scenic (1.5.4)
activerecord (>= 4.0.0)
railties (>= 4.0.0)
securecompare (1.0.0)
semantic_range (2.3.0)
sidekiq (6.1.2)
@ -782,6 +785,7 @@ DEPENDENCIES
rubocop-rails (~> 2.8)
ruby-progressbar (~> 1.10)
sanitize (~> 5.2)
scenic (~> 1.5)
sidekiq (~> 6.1)
sidekiq-bulk (~> 0.2.0)
sidekiq-scheduler (~> 3.0)
@ -804,9 +808,3 @@ DEPENDENCIES
webpacker (~> 5.2)
webpush
xorcist (~> 1.1)
RUBY VERSION
ruby 2.7.2p137
BUNDLED WITH
2.1.4

View file

@ -1,12 +1,15 @@
# frozen_string_literal: true
class AboutController < ApplicationController
include RegistrationSpamConcern
layout 'public'
before_action :require_open_federation!, only: [:show, :more]
before_action :set_body_classes, only: :show
before_action :set_instance_presenter
before_action :set_expires_in, only: [:show, :more, :terms]
before_action :set_expires_in, only: [:more, :terms]
before_action :set_registration_form_time, only: :show
skip_before_action :require_functional!, only: [:more, :terms]

View file

@ -81,7 +81,7 @@ class AccountsController < ApplicationController
end
def account_media_status_ids
@account.media_attachments.attached.reorder(nil).select(:status_id).distinct
@account.media_attachments.attached.reorder(nil).select(:status_id).group(:status_id)
end
def no_replies_scope

View file

@ -29,6 +29,7 @@ module Admin
@domain_block = existing_domain_block
@domain_block.update(resource_params)
end
if @domain_block.save
DomainBlockWorker.perform_async(@domain_block.id)
log_action :create, @domain_block
@ -40,7 +41,7 @@ module Admin
end
def update
authorize :domain_block, :create?
authorize :domain_block, :update?
@domain_block.update(update_params)
@ -48,7 +49,7 @@ module Admin
if @domain_block.save
DomainBlockWorker.perform_async(@domain_block.id, severity_changed)
log_action :create, @domain_block
log_action :update, @domain_block
redirect_to admin_instances_path(limited: '1'), notice: I18n.t('admin.domain_blocks.created_msg')
else
render :edit
@ -73,11 +74,11 @@ module Admin
end
def update_params
params.require(:domain_block).permit(:severity, :reject_media, :reject_reports, :private_comment, :public_comment)
params.require(:domain_block).permit(:severity, :reject_media, :reject_reports, :private_comment, :public_comment, :obfuscate)
end
def resource_params
params.require(:domain_block).permit(:domain, :severity, :reject_media, :reject_reports, :private_comment, :public_comment)
params.require(:domain_block).permit(:domain, :severity, :reject_media, :reject_reports, :private_comment, :public_comment, :obfuscate)
end
end
end

View file

@ -2,65 +2,31 @@
module Admin
class InstancesController < BaseController
before_action :set_domain_block, only: :show
before_action :set_domain_allow, only: :show
before_action :set_instances, only: :index
before_action :set_instance, only: :show
def index
authorize :instance, :index?
@instances = ordered_instances
end
def show
authorize :instance, :show?
@following_count = Follow.where(account: Account.where(domain: params[:id])).count
@followers_count = Follow.where(target_account: Account.where(domain: params[:id])).count
@reports_count = Report.where(target_account: Account.where(domain: params[:id])).count
@blocks_count = Block.where(target_account: Account.where(domain: params[:id])).count
@available = DeliveryFailureTracker.available?(params[:id])
@media_storage = MediaAttachment.where(account: Account.where(domain: params[:id])).sum(:file_file_size)
@private_comment = @domain_block&.private_comment
@public_comment = @domain_block&.public_comment
end
private
def set_domain_block
@domain_block = DomainBlock.rule_for(params[:id])
end
def set_domain_allow
@domain_allow = DomainAllow.rule_for(params[:id])
end
def set_instance
resource = Account.by_domain_accounts.find_by(domain: params[:id])
resource ||= @domain_block
resource ||= @domain_allow
@instance = Instance.find(params[:id])
end
if resource
@instance = Instance.new(resource)
else
not_found
end
def set_instances
@instances = filtered_instances.page(params[:page])
end
def filtered_instances
InstanceFilter.new(whitelist_mode? ? { allowed: true } : filter_params).results
end
def paginated_instances
filtered_instances.page(params[:page])
end
helper_method :paginated_instances
def ordered_instances
paginated_instances.map { |resource| Instance.new(resource) }
end
def filter_params
params.slice(*InstanceFilter::KEYS).permit(*InstanceFilter::KEYS)
end

View file

@ -14,7 +14,7 @@ module Admin
@statuses = @account.statuses.where(visibility: [:public, :unlisted])
if params[:media]
account_media_status_ids = @account.media_attachments.attached.reorder(nil).select(:status_id).distinct
account_media_status_ids = @account.media_attachments.attached.reorder(nil).select(:status_id).group(:status_id)
@statuses.merge!(Status.where(id: account_media_status_ids))
end

View file

@ -40,7 +40,7 @@ class Api::BaseController < ApplicationController
render json: { error: 'This action is not allowed' }, status: 403
end
rescue_from Mastodon::RaceConditionError do
rescue_from Mastodon::RaceConditionError, Seahorse::Client::NetworkingError, Stoplight::Error::RedLight do
render json: { error: 'There was a temporary problem serving your request, please try again' }, status: 503
end

View file

@ -7,7 +7,7 @@ class Api::V1::Accounts::FeaturedTagsController < Api::BaseController
respond_to :json
def index
render json: @featured_tags, each_serializer: REST::AccountFeaturedTagSerializer
render json: @featured_tags, each_serializer: REST::FeaturedTagSerializer
end
private
@ -17,6 +17,6 @@ class Api::V1::Accounts::FeaturedTagsController < Api::BaseController
end
def set_featured_tags
@featured_tags = @account.suspended? ? @account.featured_tags : []
@featured_tags = @account.suspended? ? [] : @account.featured_tags
end
end

View file

@ -8,7 +8,7 @@ class Api::V1::Instances::PeersController < Api::BaseController
def index
expires_in 1.day, public: true
render_with_cache(expires_in: 1.day) { Account.remote.domains }
render_with_cache(expires_in: 1.day) { Instance.where.not(domain: DomainBlock.select(:domain)).pluck(:domain) }
end
private

View file

@ -28,7 +28,7 @@ class ApplicationController < ActionController::Base
rescue_from ActiveRecord::RecordNotFound, with: :not_found
rescue_from Mastodon::NotPermittedError, with: :forbidden
rescue_from HTTP::Error, OpenSSL::SSL::SSLError, with: :internal_server_error
rescue_from Mastodon::RaceConditionError, with: :service_unavailable
rescue_from Mastodon::RaceConditionError, Seahorse::Client::NetworkingError, Stoplight::Error::RedLight, with: :service_unavailable
rescue_from Mastodon::RateLimitExceededError, with: :too_many_requests
before_action :store_current_location, except: :raise_not_found, unless: :devise_controller?

View file

@ -2,6 +2,7 @@
class Auth::RegistrationsController < Devise::RegistrationsController
include Devise::Controllers::Rememberable
include RegistrationSpamConcern
layout :determine_layout
@ -13,6 +14,7 @@ class Auth::RegistrationsController < Devise::RegistrationsController
before_action :set_body_classes, only: [:new, :create, :edit, :update]
before_action :require_not_suspended!, only: [:update]
before_action :set_cache_headers, only: [:edit, :update]
before_action :set_registration_form_time, only: :new
skip_before_action :require_functional!, only: [:edit, :update]
@ -45,16 +47,17 @@ class Auth::RegistrationsController < Devise::RegistrationsController
def build_resource(hash = nil)
super(hash)
resource.locale = I18n.locale
resource.invite_code = params[:invite_code] if resource.invite_code.blank?
resource.sign_up_ip = request.remote_ip
resource.locale = I18n.locale
resource.invite_code = params[:invite_code] if resource.invite_code.blank?
resource.registration_form_time = session[:registration_form_time]
resource.sign_up_ip = request.remote_ip
resource.build_account if resource.account.nil?
end
def configure_sign_up_params
devise_parameter_sanitizer.permit(:sign_up) do |u|
u.permit({ account_attributes: [:username], invite_request_attributes: [:text] }, :email, :password, :password_confirmation, :invite_code, :agreement)
u.permit({ account_attributes: [:username], invite_request_attributes: [:text] }, :email, :password, :password_confirmation, :invite_code, :agreement, :website, :confirm_password)
end
end

View file

@ -0,0 +1,9 @@
# frozen_string_literal: true
module RegistrationSpamConcern
extend ActiveSupport::Concern
def set_registration_form_time
session[:registration_form_time] = Time.now.utc
end
end

View file

@ -92,22 +92,6 @@ module StatusesHelper
end
end
def rtl_status?(status)
status.local? ? rtl?(status.text) : rtl?(strip_tags(status.text))
end
def rtl?(text)
text = simplified_text(text)
rtl_words = text.scan(/[\p{Hebrew}\p{Arabic}\p{Syriac}\p{Thaana}\p{Nko}]+/m)
if rtl_words.present?
total_size = text.size.to_f
rtl_size(rtl_words) / total_size > 0.3
else
false
end
end
def fa_visibility_icon(status)
case status.visibility
when 'public'
@ -143,10 +127,6 @@ module StatusesHelper
end
end
def rtl_size(words)
words.reduce(0) { |acc, elem| acc + elem.size }.to_f
end
def embedded_view?
params[:controller] == EMBEDDED_CONTROLLER && params[:action] == EMBEDDED_ACTION
end

View file

@ -1,7 +1,6 @@
import api from '../api';
import { debounce } from 'lodash';
import compareId from '../compare_id';
import { showAlertForError } from './alerts';
export const MARKERS_FETCH_REQUEST = 'MARKERS_FETCH_REQUEST';
export const MARKERS_FETCH_SUCCESS = 'MARKERS_FETCH_SUCCESS';
@ -29,15 +28,19 @@ export const synchronouslySubmitMarkers = () => (dispatch, getState) => {
},
body: JSON.stringify(params),
});
return;
} else if (navigator && navigator.sendBeacon) {
// Failing that, we can use sendBeacon, but we have to encode the data as
// FormData for DoorKeeper to recognize the token.
const formData = new FormData();
formData.append('bearer_token', accessToken);
for (const [id, value] of Object.entries(params)) {
formData.append(`${id}[last_read_id]`, value.last_read_id);
}
if (navigator.sendBeacon('/api/v1/markers', formData)) {
return;
}
@ -85,11 +88,9 @@ const debouncedSubmitMarkers = debounce((dispatch, getState) => {
return;
}
api().post('/api/v1/markers', params).then(() => {
api(getState).post('/api/v1/markers', params).then(() => {
dispatch(submitMarkersSuccess(params));
}).catch(error => {
dispatch(showAlertForError(error));
});
}).catch(() => {});
}, 300000, { leading: true, trailing: true });
export function submitMarkersSuccess({ home, notifications }) {
@ -102,9 +103,11 @@ export function submitMarkersSuccess({ home, notifications }) {
export function submitMarkers(params = {}) {
const result = (dispatch, getState) => debouncedSubmitMarkers(dispatch, getState);
if (params.immediate === true) {
debouncedSubmitMarkers.flush();
}
return result;
};

View file

@ -37,9 +37,8 @@ export const NOTIFICATIONS_UNMOUNT = 'NOTIFICATIONS_UNMOUNT';
export const NOTIFICATIONS_MARK_AS_READ = 'NOTIFICATIONS_MARK_AS_READ';
export const NOTIFICATIONS_SET_BROWSER_SUPPORT = 'NOTIFICATIONS_SET_BROWSER_SUPPORT';
export const NOTIFICATIONS_SET_BROWSER_PERMISSION = 'NOTIFICATIONS_SET_BROWSER_PERMISSION';
export const NOTIFICATIONS_DISMISS_BROWSER_PERMISSION = 'NOTIFICATIONS_DISMISS_BROWSER_PERMISSION';
export const NOTIFICATIONS_SET_BROWSER_SUPPORT = 'NOTIFICATIONS_SET_BROWSER_SUPPORT';
export const NOTIFICATIONS_SET_BROWSER_PERMISSION = 'NOTIFICATIONS_SET_BROWSER_PERMISSION';
defineMessages({
mention: { id: 'notification.mention', defaultMessage: '{name} mentioned you' },
@ -284,7 +283,3 @@ export function setBrowserPermission (value) {
value,
};
}
export const dismissBrowserPermission = () => ({
type: NOTIFICATIONS_DISMISS_BROWSER_PERMISSION,
});

View file

@ -0,0 +1,112 @@
const DIGIT_CHARACTERS = [
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
'K',
'L',
'M',
'N',
'O',
'P',
'Q',
'R',
'S',
'T',
'U',
'V',
'W',
'X',
'Y',
'Z',
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
'w',
'x',
'y',
'z',
'#',
'$',
'%',
'*',
'+',
',',
'-',
'.',
':',
';',
'=',
'?',
'@',
'[',
']',
'^',
'_',
'{',
'|',
'}',
'~',
];
export const decode83 = (str) => {
let value = 0;
let c, digit;
for (let i = 0; i < str.length; i++) {
c = str[i];
digit = DIGIT_CHARACTERS.indexOf(c);
value = value * 83 + digit;
}
return value;
};
export const intToRGB = int => ({
r: Math.max(0, (int >> 16)),
g: Math.max(0, (int >> 8) & 255),
b: Math.max(0, (int & 255)),
});
export const getAverageFromBlurhash = blurhash => {
if (!blurhash) {
return null;
}
return intToRGB(decode83(blurhash.slice(2, 6)));
};

View file

@ -4,13 +4,6 @@ exports[`<Button /> adds class "button-secondary" if props.secondary given 1`] =
<button
className="button button-secondary"
onClick={[Function]}
style={
Object {
"height": "36px",
"lineHeight": "36px",
"padding": "0 16px",
}
}
/>
`;
@ -18,13 +11,6 @@ exports[`<Button /> renders a button element 1`] = `
<button
className="button"
onClick={[Function]}
style={
Object {
"height": "36px",
"lineHeight": "36px",
"padding": "0 16px",
}
}
/>
`;
@ -33,13 +19,6 @@ exports[`<Button /> renders a disabled attribute if props.disabled given 1`] = `
className="button"
disabled={true}
onClick={[Function]}
style={
Object {
"height": "36px",
"lineHeight": "36px",
"padding": "0 16px",
}
}
/>
`;
@ -47,13 +26,6 @@ exports[`<Button /> renders class="button--block" if props.block given 1`] = `
<button
className="button button--block"
onClick={[Function]}
style={
Object {
"height": "36px",
"lineHeight": "36px",
"padding": "0 16px",
}
}
/>
`;
@ -61,13 +33,6 @@ exports[`<Button /> renders the children 1`] = `
<button
className="button"
onClick={[Function]}
style={
Object {
"height": "36px",
"lineHeight": "36px",
"padding": "0 16px",
}
}
>
<p>
children
@ -79,13 +44,6 @@ exports[`<Button /> renders the given text 1`] = `
<button
className="button"
onClick={[Function]}
style={
Object {
"height": "36px",
"lineHeight": "36px",
"padding": "0 16px",
}
}
>
foo
</button>
@ -95,13 +53,6 @@ exports[`<Button /> renders the props.text instead of children 1`] = `
<button
className="button"
onClick={[Function]}
style={
Object {
"height": "36px",
"lineHeight": "36px",
"padding": "0 16px",
}
}
>
foo
</button>

View file

@ -4,7 +4,6 @@ import AutosuggestEmoji from './autosuggest_emoji';
import AutosuggestHashtag from './autosuggest_hashtag';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
import { isRtl } from '../rtl';
import ImmutablePureComponent from 'react-immutable-pure-component';
import classNames from 'classnames';
import { List as ImmutableList } from 'immutable';
@ -189,11 +188,6 @@ export default class AutosuggestInput extends ImmutablePureComponent {
render () {
const { value, suggestions, disabled, placeholder, onKeyUp, autoFocus, className, id, maxLength } = this.props;
const { suggestionsHidden } = this.state;
const style = { direction: 'ltr' };
if (isRtl(value)) {
style.direction = 'rtl';
}
return (
<div className='autosuggest-input'>
@ -212,7 +206,7 @@ export default class AutosuggestInput extends ImmutablePureComponent {
onKeyUp={onKeyUp}
onFocus={this.onFocus}
onBlur={this.onBlur}
style={style}
dir='auto'
aria-autocomplete='list'
id={id}
className={className}

View file

@ -4,7 +4,6 @@ import AutosuggestEmoji from './autosuggest_emoji';
import AutosuggestHashtag from './autosuggest_hashtag';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
import { isRtl } from '../rtl';
import ImmutablePureComponent from 'react-immutable-pure-component';
import Textarea from 'react-textarea-autosize';
import classNames from 'classnames';
@ -195,11 +194,6 @@ export default class AutosuggestTextarea extends ImmutablePureComponent {
render () {
const { value, suggestions, disabled, placeholder, onKeyUp, autoFocus, children } = this.props;
const { suggestionsHidden } = this.state;
const style = { direction: 'ltr' };
if (isRtl(value)) {
style.direction = 'rtl';
}
return [
<div className='compose-form__autosuggest-wrapper' key='autosuggest-wrapper'>
@ -220,7 +214,7 @@ export default class AutosuggestTextarea extends ImmutablePureComponent {
onFocus={this.onFocus}
onBlur={this.onBlur}
onPaste={this.onPaste}
style={style}
dir='auto'
aria-autocomplete='list'
/>
</label>

View file

@ -10,17 +10,11 @@ export default class Button extends React.PureComponent {
disabled: PropTypes.bool,
block: PropTypes.bool,
secondary: PropTypes.bool,
size: PropTypes.number,
className: PropTypes.string,
title: PropTypes.string,
style: PropTypes.object,
children: PropTypes.node,
};
static defaultProps = {
size: 36,
};
handleClick = (e) => {
if (!this.props.disabled) {
this.props.onClick(e);
@ -36,13 +30,6 @@ export default class Button extends React.PureComponent {
}
render () {
const style = {
padding: `0 ${this.props.size / 2.25}px`,
height: `${this.props.size}px`,
lineHeight: `${this.props.size}px`,
...this.props.style,
};
const className = classNames('button', this.props.className, {
'button-secondary': this.props.secondary,
'button--block': this.props.block,
@ -54,7 +41,6 @@ export default class Button extends React.PureComponent {
disabled={this.props.disabled}
onClick={this.handleClick}
ref={this.setRef}
style={style}
title={this.props.title}
>
{this.props.text || this.props.children}

View file

@ -1,7 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import 'wicg-inert';
import { normal } from 'color-blend';
import { multiply } from 'color-blend';
export default class ModalRoot extends React.PureComponent {
@ -98,7 +98,7 @@ export default class ModalRoot extends React.PureComponent {
let backgroundColor = null;
if (this.props.backgroundColor) {
backgroundColor = normal({ ...this.props.backgroundColor, a: 1 }, { r: 0, g: 0, b: 0, a: 0.3 });
backgroundColor = multiply({ ...this.props.backgroundColor, a: 1 }, { r: 0, g: 0, b: 0, a: 0.7 });
}
return (

View file

@ -97,7 +97,7 @@ class Status extends ImmutablePureComponent {
cachedMediaWidth: PropTypes.number,
scrollKey: PropTypes.string,
deployPictureInPicture: PropTypes.func,
pictureInPicture: PropTypes.shape({
pictureInPicture: ImmutablePropTypes.contains({
inUse: PropTypes.bool,
available: PropTypes.bool,
}),
@ -192,8 +192,9 @@ class Status extends ImmutablePureComponent {
return <div className='audio-player' style={{ height: '110px' }} />;
}
handleOpenVideo = (media, options) => {
this.props.onOpenVideo(this._properStatus().get('id'), media, options);
handleOpenVideo = (options) => {
const status = this._properStatus();
this.props.onOpenVideo(status.get('id'), status.getIn(['media_attachments', 0]), options);
}
handleOpenMedia = (media, index) => {
@ -202,15 +203,15 @@ class Status extends ImmutablePureComponent {
handleHotkeyOpenMedia = e => {
const { onOpenMedia, onOpenVideo } = this.props;
const statusId = this._properStatus().get('id');
const status = this._properStatus();
e.preventDefault();
if (status.get('media_attachments').size > 0) {
if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
onOpenVideo(statusId, status.getIn(['media_attachments', 0]), { startTime: 0 });
onOpenVideo(status.get('id'), status.getIn(['media_attachments', 0]), { startTime: 0 });
} else {
onOpenMedia(statusId, status.get('media_attachments'), 0);
onOpenMedia(status.get('id'), status.get('media_attachments'), 0);
}
}
}
@ -353,7 +354,7 @@ class Status extends ImmutablePureComponent {
status = status.get('reblog');
}
if (pictureInPicture.inUse) {
if (pictureInPicture.get('inUse')) {
media = <PictureInPicturePlaceholder width={this.props.cachedMediaWidth} />;
} else if (status.get('media_attachments').size > 0) {
if (this.props.muted) {
@ -380,7 +381,7 @@ class Status extends ImmutablePureComponent {
width={this.props.cachedMediaWidth}
height={110}
cacheWidth={this.props.cacheMediaWidth}
deployPictureInPicture={pictureInPicture.available ? this.handleDeployPictureInPicture : undefined}
deployPictureInPicture={pictureInPicture.get('available') ? this.handleDeployPictureInPicture : undefined}
/>
)}
</Bundle>
@ -403,7 +404,7 @@ class Status extends ImmutablePureComponent {
sensitive={status.get('sensitive')}
onOpenVideo={this.handleOpenVideo}
cacheWidth={this.props.cacheMediaWidth}
deployPictureInPicture={pictureInPicture.available ? this.handleDeployPictureInPicture : undefined}
deployPictureInPicture={pictureInPicture.get('available') ? this.handleDeployPictureInPicture : undefined}
visible={this.state.showMedia}
onToggleVisibility={this.handleToggleMediaVisibility}
/>
@ -431,7 +432,7 @@ class Status extends ImmutablePureComponent {
} else if (status.get('spoiler_text').length === 0 && status.get('card')) {
media = (
<Card
onOpenMedia={this.props.onOpenMedia}
onOpenMedia={this.handleOpenMedia}
card={status.get('card')}
compact
cacheWidth={this.props.cacheMediaWidth}

View file

@ -1,7 +1,6 @@
import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
import { isRtl } from '../rtl';
import { FormattedMessage } from 'react-intl';
import Permalink from './permalink';
import classnames from 'classnames';
@ -186,17 +185,12 @@ export default class StatusContent extends React.PureComponent {
const content = { __html: status.get('contentHtml') };
const spoilerContent = { __html: status.get('spoilerHtml') };
const directionStyle = { direction: 'ltr' };
const classNames = classnames('status__content', {
'status__content--with-action': this.props.onClick && this.context.router,
'status__content--with-spoiler': status.get('spoiler_text').length > 0,
'status__content--collapsed': renderReadMore,
});
if (isRtl(status.get('search_index'))) {
directionStyle.direction = 'rtl';
}
const showThreadButton = (
<button className='status__content__read-more-button' onClick={this.props.onClick}>
<FormattedMessage id='status.show_thread' defaultMessage='Show thread' />
@ -225,7 +219,7 @@ export default class StatusContent extends React.PureComponent {
}
return (
<div className={classNames} ref={this.setRef} tabIndex='0' style={directionStyle} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp}>
<div className={classNames} ref={this.setRef} tabIndex='0' onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp}>
<p style={{ marginBottom: hidden && status.get('mentions').isEmpty() ? '0px' : null }}>
<span dangerouslySetInnerHTML={spoilerContent} />
{' '}
@ -234,7 +228,7 @@ export default class StatusContent extends React.PureComponent {
{mentionsPlaceholder}
<div tabIndex={!hidden ? 0 : null} className={`status__content__text ${!hidden ? 'status__content__text--visible' : ''}`} style={directionStyle} dangerouslySetInnerHTML={content} />
<div tabIndex={!hidden ? 0 : null} className={`status__content__text ${!hidden ? 'status__content__text--visible' : ''}`} dangerouslySetInnerHTML={content} />
{!hidden && !!status.get('poll') && <PollContainer pollId={status.get('poll')} />}
@ -243,8 +237,8 @@ export default class StatusContent extends React.PureComponent {
);
} else if (this.props.onClick) {
const output = [
<div className={classNames} ref={this.setRef} tabIndex='0' style={directionStyle} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} key='status-content'>
<div className='status__content__text status__content__text--visible' style={directionStyle} dangerouslySetInnerHTML={content} />
<div className={classNames} ref={this.setRef} tabIndex='0' onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} key='status-content'>
<div className='status__content__text status__content__text--visible' dangerouslySetInnerHTML={content} />
{!!status.get('poll') && <PollContainer pollId={status.get('poll')} />}
@ -259,8 +253,8 @@ export default class StatusContent extends React.PureComponent {
return output;
} else {
return (
<div className={classNames} ref={this.setRef} tabIndex='0' style={directionStyle}>
<div className='status__content__text status__content__text--visible' style={directionStyle} dangerouslySetInnerHTML={content} />
<div className={classNames} ref={this.setRef} tabIndex='0'>
<div className='status__content__text status__content__text--visible' dangerouslySetInnerHTML={content} />
{!!status.get('poll') && <PollContainer pollId={status.get('poll')} />}

View file

@ -1,7 +1,7 @@
import React from 'react';
import { connect } from 'react-redux';
import Status from '../components/status';
import { makeGetStatus } from '../selectors';
import { makeGetStatus, makeGetPictureInPicture } from '../selectors';
import {
replyCompose,
mentionCompose,
@ -54,14 +54,11 @@ const messages = defineMessages({
const makeMapStateToProps = () => {
const getStatus = makeGetStatus();
const getPictureInPicture = makeGetPictureInPicture();
const mapStateToProps = (state, props) => ({
status: getStatus(state, props),
pictureInPicture: {
inUse: state.getIn(['meta', 'layout']) !== 'mobile' && state.get('picture_in_picture').statusId === props.id,
available: state.getIn(['meta', 'layout']) !== 'mobile',
},
pictureInPicture: getPictureInPicture(state, props),
});
return mapStateToProps;

View file

@ -164,13 +164,17 @@ class Header extends ImmutablePureComponent {
info.push(<span key='domain_blocked' className='relationship-tag'><FormattedMessage id='account.domain_blocked' defaultMessage='Domain blocked' /></span>);
}
if (account.getIn(['relationship', 'requested']) || account.getIn(['relationship', 'following'])) {
bellBtn = <IconButton icon='bell-o' size={24} active={account.getIn(['relationship', 'notifying'])} title={intl.formatMessage(account.getIn(['relationship', 'notifying']) ? messages.disableNotifications : messages.enableNotifications, { name: account.get('username') })} onClick={this.props.onNotifyToggle} />;
}
if (me !== account.get('id')) {
if (!account.get('relationship')) { // Wait until the relationship is loaded
actionBtn = '';
} else if (account.getIn(['relationship', 'requested'])) {
actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.cancel_follow_request)} title={intl.formatMessage(messages.requested)} onClick={this.props.onFollow} />;
actionBtn = <Button className={classNames('logo-button', { 'button--with-bell': bellBtn !== '' })} text={intl.formatMessage(messages.cancel_follow_request)} title={intl.formatMessage(messages.requested)} onClick={this.props.onFollow} />;
} else if (!account.getIn(['relationship', 'blocking'])) {
actionBtn = <Button disabled={account.getIn(['relationship', 'blocked_by'])} className={classNames('logo-button', { 'button--destructive': account.getIn(['relationship', 'following']) })} text={intl.formatMessage(account.getIn(['relationship', 'following']) ? messages.unfollow : messages.follow)} onClick={this.props.onFollow} />;
actionBtn = <Button disabled={account.getIn(['relationship', 'blocked_by'])} className={classNames('logo-button', { 'button--destructive': account.getIn(['relationship', 'following']), 'button--with-bell': bellBtn !== '' })} text={intl.formatMessage(account.getIn(['relationship', 'following']) ? messages.unfollow : messages.follow)} onClick={this.props.onFollow} />;
} else if (account.getIn(['relationship', 'blocking'])) {
actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.unblock, { name: account.get('username') })} onClick={this.props.onBlock} />;
}
@ -178,10 +182,6 @@ class Header extends ImmutablePureComponent {
actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.edit_profile)} onClick={this.openEditProfile} />;
}
if (account.getIn(['relationship', 'requested']) || account.getIn(['relationship', 'following'])) {
bellBtn = <IconButton icon='bell-o' size={24} active={account.getIn(['relationship', 'notifying'])} title={intl.formatMessage(account.getIn(['relationship', 'notifying']) ? messages.disableNotifications : messages.enableNotifications, { name: account.get('username') })} onClick={this.props.onNotifyToggle} />;
}
if (account.get('moved') && !account.getIn(['relationship', 'following'])) {
actionBtn = '';
}

View file

@ -152,6 +152,14 @@ class AccountGallery extends ImmutablePureComponent {
loadOlder = <LoadMore visible={!isLoading} onClick={this.handleLoadOlder} />;
}
let emptyMessage;
if (suspended) {
emptyMessage = <FormattedMessage id='empty_column.account_suspended' defaultMessage='Account suspended' />;
} else if (blockedBy) {
emptyMessage = <FormattedMessage id='empty_column.account_unavailable' defaultMessage='Profile unavailable' />;
}
return (
<Column>
<ColumnBackButton multiColumn={multiColumn} />
@ -162,7 +170,7 @@ class AccountGallery extends ImmutablePureComponent {
{(suspended || blockedBy) ? (
<div className='empty-column-indicator'>
<FormattedMessage id='empty_column.account_unavailable' defaultMessage='Profile unavailable' />
{emptyMessage}
</div>
) : (
<div role='feed' className='account-gallery__container' ref={this.handleRef}>

View file

@ -136,7 +136,9 @@ class AccountTimeline extends ImmutablePureComponent {
let emptyMessage;
if (suspended || blockedBy) {
if (suspended) {
emptyMessage = <FormattedMessage id='empty_column.account_suspended' defaultMessage='Account suspended' />;
} else if (blockedBy) {
emptyMessage = <FormattedMessage id='empty_column.account_unavailable' defaultMessage='Profile unavailable' />;
} else if (remote && statusIds.isEmpty()) {
emptyMessage = <RemoteHint url={remoteUrl} />;

View file

@ -6,7 +6,6 @@ import IconButton from '../../../components/icon_button';
import DisplayName from '../../../components/display_name';
import { defineMessages, injectIntl } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { isRtl } from '../../../rtl';
import AttachmentList from 'mastodon/components/attachment_list';
const messages = defineMessages({
@ -45,9 +44,6 @@ class ReplyIndicator extends ImmutablePureComponent {
}
const content = { __html: status.get('contentHtml') };
const style = {
direction: isRtl(status.get('search_index')) ? 'rtl' : 'ltr',
};
return (
<div className='reply-indicator'>
@ -60,7 +56,7 @@ class ReplyIndicator extends ImmutablePureComponent {
</a>
</div>
<div className='reply-indicator__content' style={style} dangerouslySetInnerHTML={content} />
<div className='reply-indicator__content' dangerouslySetInnerHTML={content} />
{status.get('media_attachments').size > 0 && (
<AttachmentList

View file

@ -20,9 +20,9 @@ import RadioButton from 'mastodon/components/radio_button';
const messages = defineMessages({
deleteMessage: { id: 'confirmations.delete_list.message', defaultMessage: 'Are you sure you want to permanently delete this list?' },
deleteConfirm: { id: 'confirmations.delete_list.confirm', defaultMessage: 'Delete' },
all_replies: { id: 'lists.replies_policy.all_replies', defaultMessage: 'Any followed user' },
no_replies: { id: 'lists.replies_policy.no_replies', defaultMessage: 'No one' },
list_replies: { id: 'lists.replies_policy.list_replies', defaultMessage: 'Members of the list' },
followed: { id: 'lists.replies_policy.followed', defaultMessage: 'Any followed user' },
none: { id: 'lists.replies_policy.none', defaultMessage: 'No one' },
list: { id: 'lists.replies_policy.list', defaultMessage: 'Members of the list' },
});
const mapStateToProps = (state, props) => ({
@ -193,7 +193,7 @@ class ListTimeline extends React.PureComponent {
<FormattedMessage id='lists.replies_policy.title' defaultMessage='Show replies to:' />
</span>
<div className='column-settings__row'>
{ ['no_replies', 'list_replies', 'all_replies'].map(policy => (
{ ['none', 'list', 'followed'].map(policy => (
<RadioButton name='order' value={policy} label={intl.formatMessage(messages[policy])} checked={replies_policy === policy} onChange={this.handleRepliesPolicyChange} />
))}
</div>

View file

@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { FormattedMessage } from 'react-intl';
import ClearColumnButton from './clear_column_button';
import GrantPermissionButton from './grant_permission_button';
import SettingToggle from './setting_toggle';
export default class ColumnSettings extends React.PureComponent {
@ -23,7 +24,7 @@ export default class ColumnSettings extends React.PureComponent {
}
render () {
const { settings, pushSettings, onChange, onClear, alertsEnabled, browserSupport, browserPermission } = this.props;
const { settings, pushSettings, onChange, onClear, alertsEnabled, browserSupport, browserPermission, onRequestNotificationPermission } = this.props;
const filterShowStr = <FormattedMessage id='notifications.column_settings.filter_bar.show' defaultMessage='Show' />;
const filterAdvancedStr = <FormattedMessage id='notifications.column_settings.filter_bar.advanced' defaultMessage='Display all categories' />;
@ -42,6 +43,14 @@ export default class ColumnSettings extends React.PureComponent {
</div>
)}
{alertsEnabled && browserSupport && browserPermission === 'default' && (
<div className='column-settings__row column-settings__row--with-margin'>
<span className='warning-hint'>
<FormattedMessage id='notifications.permission_required' defaultMessage='Desktop notifications are unavailable because the required permission has not been granted.' /> <GrantPermissionButton onClick={onRequestNotificationPermission} />
</span>
</div>
)}
<div className='column-settings__row'>
<ClearColumnButton onClick={onClear} />
</div>
@ -61,7 +70,7 @@ export default class ColumnSettings extends React.PureComponent {
<span id='notifications-follow' className='column-settings__section'><FormattedMessage id='notifications.column_settings.follow' defaultMessage='New followers:' /></span>
<div className='column-settings__row'>
<SettingToggle disabled={browserPermission !== 'granted'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'follow']} onChange={onChange} label={alertStr} />
<SettingToggle disabled={browserPermission === 'denied'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'follow']} onChange={onChange} label={alertStr} />
{showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'follow']} onChange={this.onPushChange} label={pushStr} />}
<SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'follow']} onChange={onChange} label={showStr} />
<SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'follow']} onChange={onChange} label={soundStr} />
@ -72,7 +81,7 @@ export default class ColumnSettings extends React.PureComponent {
<span id='notifications-follow-request' className='column-settings__section'><FormattedMessage id='notifications.column_settings.follow_request' defaultMessage='New follow requests:' /></span>
<div className='column-settings__row'>
<SettingToggle disabled={browserPermission !== 'granted'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'follow_request']} onChange={onChange} label={alertStr} />
<SettingToggle disabled={browserPermission === 'denied'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'follow_request']} onChange={onChange} label={alertStr} />
{showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'follow_request']} onChange={this.onPushChange} label={pushStr} />}
<SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'follow_request']} onChange={onChange} label={showStr} />
<SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'follow_request']} onChange={onChange} label={soundStr} />
@ -83,7 +92,7 @@ export default class ColumnSettings extends React.PureComponent {
<span id='notifications-favourite' className='column-settings__section'><FormattedMessage id='notifications.column_settings.favourite' defaultMessage='Favourites:' /></span>
<div className='column-settings__row'>
<SettingToggle disabled={browserPermission !== 'granted'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'favourite']} onChange={onChange} label={alertStr} />
<SettingToggle disabled={browserPermission === 'denied'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'favourite']} onChange={onChange} label={alertStr} />
{showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'favourite']} onChange={this.onPushChange} label={pushStr} />}
<SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'favourite']} onChange={onChange} label={showStr} />
<SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'favourite']} onChange={onChange} label={soundStr} />
@ -94,7 +103,7 @@ export default class ColumnSettings extends React.PureComponent {
<span id='notifications-mention' className='column-settings__section'><FormattedMessage id='notifications.column_settings.mention' defaultMessage='Mentions:' /></span>
<div className='column-settings__row'>
<SettingToggle disabled={browserPermission !== 'granted'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'mention']} onChange={onChange} label={alertStr} />
<SettingToggle disabled={browserPermission === 'denied'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'mention']} onChange={onChange} label={alertStr} />
{showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'mention']} onChange={this.onPushChange} label={pushStr} />}
<SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'mention']} onChange={onChange} label={showStr} />
<SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'mention']} onChange={onChange} label={soundStr} />
@ -105,7 +114,7 @@ export default class ColumnSettings extends React.PureComponent {
<span id='notifications-reblog' className='column-settings__section'><FormattedMessage id='notifications.column_settings.reblog' defaultMessage='Boosts:' /></span>
<div className='column-settings__row'>
<SettingToggle disabled={browserPermission !== 'granted'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'reblog']} onChange={onChange} label={alertStr} />
<SettingToggle disabled={browserPermission === 'denied'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'reblog']} onChange={onChange} label={alertStr} />
{showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'reblog']} onChange={this.onPushChange} label={pushStr} />}
<SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'reblog']} onChange={onChange} label={showStr} />
<SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'reblog']} onChange={onChange} label={soundStr} />
@ -116,7 +125,7 @@ export default class ColumnSettings extends React.PureComponent {
<span id='notifications-poll' className='column-settings__section'><FormattedMessage id='notifications.column_settings.poll' defaultMessage='Poll results:' /></span>
<div className='column-settings__row'>
<SettingToggle disabled={browserPermission !== 'granted'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'poll']} onChange={onChange} label={alertStr} />
<SettingToggle disabled={browserPermission === 'denied'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'poll']} onChange={onChange} label={alertStr} />
{showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'poll']} onChange={this.onPushChange} label={pushStr} />}
<SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'poll']} onChange={onChange} label={showStr} />
<SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'poll']} onChange={onChange} label={soundStr} />
@ -127,7 +136,7 @@ export default class ColumnSettings extends React.PureComponent {
<span id='notifications-status' className='column-settings__section'><FormattedMessage id='notifications.column_settings.status' defaultMessage='New toots:' /></span>
<div className='column-settings__row'>
<SettingToggle disabled={browserPermission !== 'granted'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'status']} onChange={onChange} label={alertStr} />
<SettingToggle disabled={browserPermission === 'denied'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'status']} onChange={onChange} label={alertStr} />
{showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'status']} onChange={this.onPushChange} label={pushStr} />}
<SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'status']} onChange={onChange} label={showStr} />
<SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'status']} onChange={onChange} label={soundStr} />

View file

@ -0,0 +1,19 @@
import React from 'react';
import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
export default class GrantPermissionButton extends React.PureComponent {
static propTypes = {
onClick: PropTypes.func.isRequired,
};
render () {
return (
<button className='text-btn column-header__permission-btn' tabIndex='0' onClick={this.props.onClick}>
<FormattedMessage id='notifications.grant_permission' defaultMessage='Grant permission.' />
</button>
);
}
}

View file

@ -2,7 +2,8 @@ import React from 'react';
import Icon from 'mastodon/components/icon';
import Button from 'mastodon/components/button';
import IconButton from 'mastodon/components/icon_button';
import { requestBrowserPermission, dismissBrowserPermission } from 'mastodon/actions/notifications';
import { requestBrowserPermission } from 'mastodon/actions/notifications';
import { changeSetting } from 'mastodon/actions/settings';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
@ -25,7 +26,7 @@ class NotificationsPermissionBanner extends React.PureComponent {
}
handleClose = () => {
this.props.dispatch(dismissBrowserPermission());
this.props.dispatch(changeSetting(['notifications', 'dismissPermissionBanner'], true));
}
render () {

View file

@ -32,10 +32,16 @@ const messages = defineMessages({
markAsRead : { id: 'notifications.mark_as_read', defaultMessage: 'Mark every notification as read' },
});
const getExcludedTypes = createSelector([
state => state.getIn(['settings', 'notifications', 'shows']),
], (shows) => {
return ImmutableList(shows.filter(item => !item).keys());
});
const getNotifications = createSelector([
state => state.getIn(['settings', 'notifications', 'quickFilter', 'show']),
state => state.getIn(['settings', 'notifications', 'quickFilter', 'active']),
state => ImmutableList(state.getIn(['settings', 'notifications', 'shows']).filter(item => !item).keys()),
getExcludedTypes,
state => state.getIn(['notifications', 'items']),
], (showFilterBar, allowedType, excludedTypes, notifications) => {
if (!showFilterBar || allowedType === 'all') {
@ -56,7 +62,7 @@ const mapStateToProps = state => ({
numPending: state.getIn(['notifications', 'pendingItems'], ImmutableList()).size,
lastReadId: state.getIn(['notifications', 'readMarkerId']),
canMarkAsRead: state.getIn(['notifications', 'readMarkerId']) !== '0' && getNotifications(state).some(item => item !== null && compareId(item.get('id'), state.getIn(['notifications', 'readMarkerId'])) > 0),
needsNotificationPermission: state.getIn(['settings', 'notifications', 'alerts']).includes(true) && state.getIn(['notifications', 'browserSupport']) && state.getIn(['notifications', 'browserPermission']) === 'default',
needsNotificationPermission: state.getIn(['settings', 'notifications', 'alerts']).includes(true) && state.getIn(['notifications', 'browserSupport']) && state.getIn(['notifications', 'browserPermission']) === 'default' && !state.getIn(['settings', 'notifications', 'dismissPermissionBanner']),
});
export default @connect(mapStateToProps)

View file

@ -41,7 +41,10 @@ class DetailedStatus extends ImmutablePureComponent {
domain: PropTypes.string.isRequired,
compact: PropTypes.bool,
showMedia: PropTypes.bool,
usingPiP: PropTypes.bool,
pictureInPicture: ImmutablePropTypes.contains({
inUse: PropTypes.bool,
available: PropTypes.bool,
}),
onToggleMediaVisibility: PropTypes.func,
};
@ -58,8 +61,8 @@ class DetailedStatus extends ImmutablePureComponent {
e.stopPropagation();
}
handleOpenVideo = (media, options) => {
this.props.onOpenVideo(media, options);
handleOpenVideo = (options) => {
this.props.onOpenVideo(this.props.status.getIn(['media_attachments', 0]), options);
}
handleExpandedToggle = () => {
@ -102,7 +105,7 @@ class DetailedStatus extends ImmutablePureComponent {
render () {
const status = (this.props.status && this.props.status.get('reblog')) ? this.props.status.get('reblog') : this.props.status;
const outerStyle = { boxSizing: 'border-box' };
const { intl, compact, usingPiP } = this.props;
const { intl, compact, pictureInPicture } = this.props;
if (!status) {
return null;
@ -118,7 +121,7 @@ class DetailedStatus extends ImmutablePureComponent {
outerStyle.height = `${this.state.height}px`;
}
if (usingPiP) {
if (pictureInPicture.get('inUse')) {
media = <PictureInPicturePlaceholder />;
} else if (status.get('media_attachments').size > 0) {
if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {

View file

@ -1,6 +1,6 @@
import { connect } from 'react-redux';
import DetailedStatus from '../components/detailed_status';
import { makeGetStatus } from '../../../selectors';
import { makeGetStatus, makeGetPictureInPicture } from '../../../selectors';
import {
replyCompose,
mentionCompose,
@ -40,10 +40,12 @@ const messages = defineMessages({
const makeMapStateToProps = () => {
const getStatus = makeGetStatus();
const getPictureInPicture = makeGetPictureInPicture();
const mapStateToProps = (state, props) => ({
status: getStatus(state, props),
domain: state.getIn(['meta', 'domain']),
pictureInPicture: getPictureInPicture(state, props),
});
return mapStateToProps;

View file

@ -43,7 +43,7 @@ import {
import { initMuteModal } from '../../actions/mutes';
import { initBlockModal } from '../../actions/blocks';
import { initReport } from '../../actions/reports';
import { makeGetStatus } from '../../selectors';
import { makeGetStatus, makeGetPictureInPicture } from '../../selectors';
import { ScrollContainer } from 'react-router-scroll-4';
import ColumnBackButton from '../../components/column_back_button';
import ColumnHeader from '../../components/column_header';
@ -72,6 +72,7 @@ const messages = defineMessages({
const makeMapStateToProps = () => {
const getStatus = makeGetStatus();
const getPictureInPicture = makeGetPictureInPicture();
const getAncestorsIds = createSelector([
(_, { id }) => id,
@ -129,11 +130,12 @@ const makeMapStateToProps = () => {
const mapStateToProps = (state, props) => {
const status = getStatus(state, { id: props.params.statusId });
let ancestorsIds = Immutable.List();
let ancestorsIds = Immutable.List();
let descendantsIds = Immutable.List();
if (status) {
ancestorsIds = getAncestorsIds(state, { id: status.get('in_reply_to_id') });
ancestorsIds = getAncestorsIds(state, { id: status.get('in_reply_to_id') });
descendantsIds = getDescendantsIds(state, { id: status.get('id') });
}
@ -143,7 +145,7 @@ const makeMapStateToProps = () => {
descendantsIds,
askReplyConfirmation: state.getIn(['compose', 'text']).trim().length !== 0,
domain: state.getIn(['meta', 'domain']),
usingPiP: state.get('picture_in_picture').statusId === props.params.statusId,
pictureInPicture: getPictureInPicture(state, { id: props.params.statusId }),
};
};
@ -168,7 +170,10 @@ class Status extends ImmutablePureComponent {
askReplyConfirmation: PropTypes.bool,
multiColumn: PropTypes.bool,
domain: PropTypes.string.isRequired,
usingPiP: PropTypes.bool,
pictureInPicture: ImmutablePropTypes.contains({
inUse: PropTypes.bool,
available: PropTypes.bool,
}),
};
state = {
@ -492,7 +497,7 @@ class Status extends ImmutablePureComponent {
render () {
let ancestors, descendants;
const { shouldUpdateScroll, status, ancestorsIds, descendantsIds, intl, domain, multiColumn, usingPiP } = this.props;
const { shouldUpdateScroll, status, ancestorsIds, descendantsIds, intl, domain, multiColumn, pictureInPicture } = this.props;
const { fullscreen } = this.state;
if (status === null) {
@ -550,7 +555,7 @@ class Status extends ImmutablePureComponent {
domain={domain}
showMedia={this.state.showMedia}
onToggleMediaVisibility={this.handleToggleMediaVisibility}
usingPiP={usingPiP}
pictureInPicture={pictureInPicture}
/>
<ActionBar

View file

@ -4,13 +4,11 @@ import PropTypes from 'prop-types';
import Audio from 'mastodon/features/audio';
import { connect } from 'react-redux';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { FormattedMessage } from 'react-intl';
import { previewState } from './video_modal';
import classNames from 'classnames';
import Icon from 'mastodon/components/icon';
import Footer from 'mastodon/features/picture_in_picture/components/footer';
const mapStateToProps = (state, { status }) => ({
account: state.getIn(['accounts', status.get('account')]),
const mapStateToProps = (state, { statusId }) => ({
accountStaticAvatar: state.getIn(['accounts', state.getIn(['statuses', statusId, 'account']), 'avatar_static']),
});
export default @connect(mapStateToProps)
@ -18,12 +16,13 @@ class AudioModal extends ImmutablePureComponent {
static propTypes = {
media: ImmutablePropTypes.map.isRequired,
status: ImmutablePropTypes.map,
statusId: PropTypes.string.isRequired,
accountStaticAvatar: PropTypes.string.isRequired,
options: PropTypes.shape({
autoPlay: PropTypes.bool,
}),
account: ImmutablePropTypes.map,
onClose: PropTypes.func.isRequired,
onChangeBackgroundColor: PropTypes.func.isRequired,
};
static contextTypes = {
@ -52,15 +51,8 @@ class AudioModal extends ImmutablePureComponent {
}
}
handleStatusClick = e => {
if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {
e.preventDefault();
this.context.router.history.push(`/statuses/${this.props.status.get('id')}`);
}
}
render () {
const { media, status, account } = this.props;
const { media, accountStaticAvatar, statusId, onClose } = this.props;
const options = this.props.options || {};
return (
@ -71,7 +63,7 @@ class AudioModal extends ImmutablePureComponent {
alt={media.get('description')}
duration={media.getIn(['meta', 'original', 'duration'], 0)}
height={150}
poster={media.get('preview_url') || account.get('avatar_static')}
poster={media.get('preview_url') || accountStaticAvatar}
backgroundColor={media.getIn(['meta', 'colors', 'background'])}
foregroundColor={media.getIn(['meta', 'colors', 'foreground'])}
accentColor={media.getIn(['meta', 'colors', 'accent'])}
@ -79,11 +71,9 @@ class AudioModal extends ImmutablePureComponent {
/>
</div>
{status && (
<div className={classNames('media-modal__meta')}>
<a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>
</div>
)}
<div className='media-modal__overlay'>
{statusId && <Footer statusId={statusId} withOpenButton onClose={onClose} />}
</div>
</div>
);
}

View file

@ -75,7 +75,9 @@ class ColumnsArea extends ImmutablePureComponent {
}
componentWillReceiveProps() {
this.setState({ shouldAnimate: false });
if (typeof this.pendingIndex !== 'number' && this.lastIndex !== getIndex(this.context.router.history.location.pathname)) {
this.setState({ shouldAnimate: false });
}
}
componentDidMount() {
@ -99,8 +101,13 @@ class ColumnsArea extends ImmutablePureComponent {
if (this.props.singleColumn !== prevProps.singleColumn && !this.props.singleColumn) {
this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false);
}
this.lastIndex = getIndex(this.context.router.history.location.pathname);
this.setState({ shouldAnimate: true });
const newIndex = getIndex(this.context.router.history.location.pathname);
if (this.lastIndex !== newIndex) {
this.lastIndex = newIndex;
this.setState({ shouldAnimate: true });
}
}
componentWillUnmount () {

View file

@ -12,6 +12,7 @@ import Icon from 'mastodon/components/icon';
import GIFV from 'mastodon/components/gifv';
import { disableSwiping } from 'mastodon/initial_state';
import Footer from 'mastodon/features/picture_in_picture/components/footer';
import { getAverageFromBlurhash } from 'mastodon/blurhash';
const messages = defineMessages({
close: { id: 'lightbox.close', defaultMessage: 'Close' },
@ -21,111 +22,6 @@ const messages = defineMessages({
export const previewState = 'previewMediaModal';
const digitCharacters = [
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
'K',
'L',
'M',
'N',
'O',
'P',
'Q',
'R',
'S',
'T',
'U',
'V',
'W',
'X',
'Y',
'Z',
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
'w',
'x',
'y',
'z',
'#',
'$',
'%',
'*',
'+',
',',
'-',
'.',
':',
';',
'=',
'?',
'@',
'[',
']',
'^',
'_',
'{',
'|',
'}',
'~',
];
const decode83 = (str) => {
let value = 0;
let c, digit;
for (let i = 0; i < str.length; i++) {
c = str[i];
digit = digitCharacters.indexOf(c);
value = value * 83 + digit;
}
return value;
};
const decodeRGB = int => ({
r: Math.max(0, (int >> 16)),
g: Math.max(0, (int >> 8) & 255),
b: Math.max(0, (int & 255)),
});
export default @injectIntl
class MediaModal extends ImmutablePureComponent {
@ -224,7 +120,7 @@ class MediaModal extends ImmutablePureComponent {
const blurhash = media.getIn([index, 'blurhash']);
if (blurhash) {
const backgroundColor = decodeRGB(decode83(blurhash.slice(2, 6)));
const backgroundColor = getAverageFromBlurhash(blurhash);
onChangeBackgroundColor(backgroundColor);
}
}

View file

@ -3,6 +3,8 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
import Video from 'mastodon/features/video';
import ImmutablePureComponent from 'react-immutable-pure-component';
import Footer from 'mastodon/features/picture_in_picture/components/footer';
import { getAverageFromBlurhash } from 'mastodon/blurhash';
export const previewState = 'previewVideoModal';
@ -17,6 +19,7 @@ export default class VideoModal extends ImmutablePureComponent {
defaultVolume: PropTypes.number,
}),
onClose: PropTypes.func.isRequired,
onChangeBackgroundColor: PropTypes.func.isRequired,
};
static contextTypes = {
@ -24,29 +27,35 @@ export default class VideoModal extends ImmutablePureComponent {
};
componentDidMount () {
if (this.context.router) {
const history = this.context.router.history;
const { router } = this.context;
const { media, onChangeBackgroundColor, onClose } = this.props;
history.push(history.location.pathname, previewState);
if (router) {
router.history.push(router.history.location.pathname, previewState);
this.unlistenHistory = router.history.listen(() => onClose());
}
this.unlistenHistory = history.listen(() => {
this.props.onClose();
});
const backgroundColor = getAverageFromBlurhash(media.get('blurhash'));
if (backgroundColor) {
onChangeBackgroundColor(backgroundColor);
}
}
componentWillUnmount () {
if (this.context.router) {
const { router } = this.context;
if (router) {
this.unlistenHistory();
if (this.context.router.history.location.state === previewState) {
this.context.router.history.goBack();
if (router.history.location.state === previewState) {
router.history.goBack();
}
}
}
render () {
const { media, onClose } = this.props;
const { media, statusId, onClose } = this.props;
const options = this.props.options || {};
return (
@ -65,6 +74,10 @@ export default class VideoModal extends ImmutablePureComponent {
alt={media.get('description')}
/>
</div>
<div className='media-modal__overlay'>
{statusId && <Footer statusId={statusId} withOpenButton onClose={onClose} />}
</div>
</div>
);
}

View file

@ -1,7 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import { fromJS, is } from 'immutable';
import { is } from 'immutable';
import { throttle, debounce } from 'lodash';
import classNames from 'classnames';
import { isFullscreen, requestFullscreen, exitFullscreen } from '../ui/util/fullscreen';
@ -495,25 +495,13 @@ class Video extends React.PureComponent {
}
handleOpenVideo = () => {
const { src, preview, width, height, alt } = this.props;
this.video.pause();
const media = fromJS({
type: 'video',
url: src,
preview_url: preview,
description: alt,
width,
height,
});
const options = {
this.props.onOpenVideo({
startTime: this.video.currentTime,
autoPlay: !this.state.paused,
defaultVolume: this.state.volume,
};
this.video.pause();
this.props.onOpenVideo(media, options);
});
}
handleCloseVideo = () => {

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "نتائج البحث",
"emoji_button.symbols": "رموز",
"emoji_button.travel": "الأماكن والسفر",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "ليس هناك تبويقات!",
"empty_column.account_unavailable": "الملف التعريفي غير متوفر",
"empty_column.blocks": "لم تقم بحظر أي مستخدِم بعد.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "التالي",
"lightbox.previous": "العودة",
"lightbox.view_context": "اعرض السياق",
"lists.account.add": "أضف إلى القائمة",
"lists.account.remove": "احذف من القائمة",
"lists.delete": "احذف القائمة",
@ -266,9 +266,9 @@
"lists.edit.submit": "تعديل العنوان",
"lists.new.create": "إنشاء قائمة",
"lists.new.title_placeholder": "عنوان القائمة الجديدة",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "إبحث في قائمة الحسابات التي تُتابِعها",
"lists.subheading": "قوائمك",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "الإشارات",
"notifications.filter.polls": "نتائج استطلاع الرأي",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} إشعارات",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Search results",
"emoji_button.symbols": "Símbolos",
"emoji_button.travel": "Viaxes y llugares",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "¡Equí nun hai barritos!",
"empty_column.account_unavailable": "Profile unavailable",
"empty_column.blocks": "Entá nun bloquiesti a nunengún usuariu.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Siguiente",
"lightbox.previous": "Previous",
"lightbox.view_context": "View context",
"lists.account.add": "Amestar a la llista",
"lists.account.remove": "Desaniciar de la llista",
"lists.delete": "Desaniciar la llista",
@ -266,9 +266,9 @@
"lists.edit.submit": "Change title",
"lists.new.create": "Add list",
"lists.new.title_placeholder": "Títulu nuevu de la llista",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Guetar ente la xente que sigues",
"lists.subheading": "Les tos llistes",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Menciones",
"notifications.filter.polls": "Poll results",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} avisos",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Search results",
"emoji_button.symbols": "Symbols",
"emoji_button.travel": "Travel & Places",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "No toots here!",
"empty_column.account_unavailable": "Profile unavailable",
"empty_column.blocks": "You haven't blocked any users yet.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Next",
"lightbox.previous": "Previous",
"lightbox.view_context": "View context",
"lists.account.add": "Add to list",
"lists.account.remove": "Remove from list",
"lists.delete": "Delete list",
@ -266,9 +266,9 @@
"lists.edit.submit": "Change title",
"lists.new.create": "Add list",
"lists.new.title_placeholder": "New list title",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Search among people you follow",
"lists.subheading": "Your lists",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Mentions",
"notifications.filter.polls": "Poll results",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} notifications",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "খোঁজার ফলাফল",
"emoji_button.symbols": "প্রতীক",
"emoji_button.travel": "ভ্রমণ এবং স্থান",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "এখানে কোনো টুট নেই!",
"empty_column.account_unavailable": "নিজস্ব পাতা নেই",
"empty_column.blocks": "আপনি কোনো ব্যবহারকারীদের ব্লক করেন নি।",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "পরবর্তী",
"lightbox.previous": "পূর্ববর্তী",
"lightbox.view_context": "প্রসঙ্গটি দেখতে",
"lists.account.add": "তালিকাতে যুক্ত করতে",
"lists.account.remove": "তালিকা থেকে বাদ দিতে",
"lists.delete": "তালিকা মুছে ফেলতে",
@ -266,9 +266,9 @@
"lists.edit.submit": "শিরোনাম সম্পাদনা করতে",
"lists.new.create": "তালিকাতে যুক্ত করতে",
"lists.new.title_placeholder": "তালিকার নতুন শিরোনাম দিতে",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "যাদের অনুসরণ করেন তাদের ভেতরে খুঁজুন",
"lists.subheading": "আপনার তালিকা",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "উল্লেখিত",
"notifications.filter.polls": "নির্বাচনের ফলাফল",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} প্রজ্ঞাপন",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Disoc'hoù an enklask",
"emoji_button.symbols": "Arouezioù",
"emoji_button.travel": "Lec'hioù ha Beajoù",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "Toud ebet amañ!",
"empty_column.account_unavailable": "Profil dihegerz",
"empty_column.blocks": "N'eus ket bet berzet implijer·ez ganeoc'h c'hoazh.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Da-heul",
"lightbox.previous": "A-raok",
"lightbox.view_context": "Diskouez ar c'hemperzh",
"lists.account.add": "Ouzhpennañ d'al listenn",
"lists.account.remove": "Lemel kuit eus al listenn",
"lists.delete": "Dilemel al listenn",
@ -266,9 +266,9 @@
"lists.edit.submit": "Cheñch an titl",
"lists.new.create": "Ouzhpennañ ul listenn",
"lists.new.title_placeholder": "Titl nevez al listenn",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Search among people you follow",
"lists.subheading": "Ho listennoù",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Menegoù",
"notifications.filter.polls": "Disoc'hoù ar sontadegoù",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} a gemennoù",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Resultats de la cerca",
"emoji_button.symbols": "Símbols",
"emoji_button.travel": "Viatges i Llocs",
"empty_column.account_suspended": "Compte suspès",
"empty_column.account_timeline": "No hi ha tuts aquí!",
"empty_column.account_unavailable": "Perfil no disponible",
"empty_column.blocks": "Encara no has bloquejat cap usuari.",
@ -258,7 +259,6 @@
"lightbox.expand": "Amplia el quadre de visualització de limatge",
"lightbox.next": "Següent",
"lightbox.previous": "Anterior",
"lightbox.view_context": "Veure el context",
"lists.account.add": "Afegir a la llista",
"lists.account.remove": "Treure de la llista",
"lists.delete": "Esborrar llista",
@ -266,9 +266,9 @@
"lists.edit.submit": "Canvi de títol",
"lists.new.create": "Afegir llista",
"lists.new.title_placeholder": "Nova llista",
"lists.replies_policy.all_replies": "Qualsevol usuari seguit",
"lists.replies_policy.list_replies": "Membres de la llista",
"lists.replies_policy.no_replies": "Ningú",
"lists.replies_policy.followed": "Qualsevol usuari seguit",
"lists.replies_policy.list": "Membres de la llista",
"lists.replies_policy.none": "Ningú",
"lists.replies_policy.title": "Mostra respostes a:",
"lists.search": "Cercar entre les persones que segueixes",
"lists.subheading": "Les teves llistes",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Mencions",
"notifications.filter.polls": "Resultats de l'enquesta",
"notifications.filter.statuses": "Actualitzacions de gent que segueixes",
"notifications.grant_permission": "Concedir permís.",
"notifications.group": "{count} notificacions",
"notifications.mark_as_read": "Marca cada notificació com a llegida",
"notifications.permission_denied": "No sha pogut activar les notificacions descriptori perquè sha denegat el permís.",
"notifications.permission_denied_alert": "No es poden activar les notificacions del escriptori perquè el permís del navegador ha estat denegat abans",
"notifications.permission_required": "Les notificacions d'escriptori no estan disponibles perquè el permís requerit no ha estat concedit.",
"notifications_permission_banner.enable": "Activar les notificacions descriptori",
"notifications_permission_banner.how_to_control": "Per a rebre notificacions quan Mastodon no està obert cal activar les notificacions descriptori. Pots controlar amb precisió quins tipus dinteraccions generen notificacions descriptori després dactivar el botó {icon} de dalt.",
"notifications_permission_banner.title": "Mai et perdis res",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Risultati di a cerca",
"emoji_button.symbols": "Simbuli",
"emoji_button.travel": "Lochi è Viaghju",
"empty_column.account_suspended": "Contu suspesu",
"empty_column.account_timeline": "Nisun statutu quì!",
"empty_column.account_unavailable": "Prufile micca dispunibule",
"empty_column.blocks": "Per avà ùn avete bluccatu manc'un utilizatore.",
@ -258,7 +259,6 @@
"lightbox.expand": "Ingrandà a finestra d'affissera di i ritratti",
"lightbox.next": "Siguente",
"lightbox.previous": "Pricidente",
"lightbox.view_context": "Vede u cuntestu",
"lists.account.add": "Aghjunghje à a lista",
"lists.account.remove": "Toglie di a lista",
"lists.delete": "Toglie a lista",
@ -266,9 +266,9 @@
"lists.edit.submit": "Cambià u titulu",
"lists.new.create": "Aghjunghje",
"lists.new.title_placeholder": "Titulu di a lista",
"lists.replies_policy.all_replies": "Tutti i vostri abbunamenti",
"lists.replies_policy.list_replies": "Membri di a lista",
"lists.replies_policy.no_replies": "Nisunu",
"lists.replies_policy.followed": "Tutti i vostri abbunamenti",
"lists.replies_policy.list": "Membri di a lista",
"lists.replies_policy.none": "Nimu",
"lists.replies_policy.title": "Vede e risposte à:",
"lists.search": "Circà indè i vostr'abbunamenti",
"lists.subheading": "E vo liste",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Minzione",
"notifications.filter.polls": "Risultati di u scandagliu",
"notifications.filter.statuses": "Messe à ghjornu di e persone chì siguitate",
"notifications.grant_permission": "Auturizà.",
"notifications.group": "{count} nutificazione",
"notifications.mark_as_read": "Marcà tutte e nutificazione cum'è lette",
"notifications.permission_denied": "Ùn si po micca attivà e nutificazione desktop perchè a dumanda d'auturizazione hè stata ricusata",
"notifications.permission_denied": "Ùn si po micca attivà e nutificazione desktop perchè l'auturizazione hè stata ricusata",
"notifications.permission_denied_alert": "Ùn pudete micca attivà e nutificazione nant'à l'urdinatore, perchè avete digià ricusatu a dumanda d'auturizazione di u navigatore",
"notifications.permission_required": "Ùn si po micca attivà e nutificazione desktop perchè a l'auturizazione richiesta ùn hè micca stata data.",
"notifications_permission_banner.enable": "Attivà e nutificazione nant'à l'urdinatore",
"notifications_permission_banner.how_to_control": "Per riceve nutificazione quandu Mastodon ùn hè micca aperta, attivate e nutificazione nant'à l'urdinatore. Pudete decide quali tippi d'interazione anu da mandà ste nutificazione cù u buttone {icon} quì sopra quandu saranu attivate.",
"notifications_permission_banner.title": "Ùn mancate mai nunda",

View file

@ -12,12 +12,12 @@
"account.disable_notifications": "Stop notifying me when @{name} posts",
"account.domain_blocked": "Doména skryta",
"account.edit_profile": "Upravit profil",
"account.enable_notifications": "Notify me when @{name} posts",
"account.enable_notifications": "Oznámit mě na příspěvky @{name}",
"account.endorse": "Zvýraznit na profilu",
"account.follow": "Sledovat",
"account.followers": "Sledující",
"account.followers.empty": "Tohoto uživatele ještě nikdo nesleduje.",
"account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
"account.followers_counter": "{count, plural, one {{counter} sledující} few {{counter} sledující} many {{counter} sledujících} other {{counter} sledujících}}",
"account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
"account.follows.empty": "Tento uživatel ještě nikoho nesleduje.",
"account.follows_you": "Sleduje vás",
@ -149,6 +149,7 @@
"emoji_button.search_results": "Výsledky hledání",
"emoji_button.symbols": "Symboly",
"emoji_button.travel": "Cestování a místa",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "Nejsou tu žádné tooty!",
"empty_column.account_unavailable": "Profil nedostupný",
"empty_column.blocks": "Ještě jste nezablokovali žádného uživatele.",
@ -176,7 +177,7 @@
"follow_request.authorize": "Autorizovat",
"follow_request.reject": "Odmítnout",
"follow_requests.unlocked_explanation": "Přestože váš účet není uzamčen, {domain} si myslí, že budete chtít následující požadavky na sledování zkontrolovat ručně.",
"generic.saved": "Saved",
"generic.saved": "Uloženo",
"getting_started.developers": "Vývojáři",
"getting_started.directory": "Adresář profilů",
"getting_started.documentation": "Dokumentace",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Další",
"lightbox.previous": "Předchozí",
"lightbox.view_context": "Zobrazit kontext",
"lists.account.add": "Přidat do seznamu",
"lists.account.remove": "Odebrat ze seznamu",
"lists.delete": "Smazat seznam",
@ -266,9 +266,9 @@
"lists.edit.submit": "Změnit název",
"lists.new.create": "Přidat seznam",
"lists.new.title_placeholder": "Název nového seznamu",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Hledejte mezi lidmi, které sledujete",
"lists.subheading": "Vaše seznamy",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Zmínky",
"notifications.filter.polls": "Výsledky anket",
"notifications.filter.statuses": "Aktuality od lidí, které sledujete",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} oznámení",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Canlyniadau chwilio",
"emoji_button.symbols": "Symbolau",
"emoji_button.travel": "Teithio & Llefydd",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "Dim tŵtiau fama!",
"empty_column.account_unavailable": "Proffil ddim ar gael",
"empty_column.blocks": "Nid ydych wedi blocio unrhyw ddefnyddwyr eto.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Nesaf",
"lightbox.previous": "Blaenorol",
"lightbox.view_context": "Gweld cyd-destyn",
"lists.account.add": "Ychwanegwch at restr",
"lists.account.remove": "Dileu o'r rhestr",
"lists.delete": "Dileu rhestr",
@ -266,9 +266,9 @@
"lists.edit.submit": "Newid teitl",
"lists.new.create": "Ychwanegu rhestr",
"lists.new.title_placeholder": "Teitl rhestr newydd",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Chwilio ymysg pobl yr ydych yn ei ddilyn",
"lists.subheading": "Eich rhestrau",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Crybwylliadau",
"notifications.filter.polls": "Canlyniadau pleidlais",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} o hysbysiadau",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Søgeresultater",
"emoji_button.symbols": "Symboler",
"emoji_button.travel": "Rejser & steder",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "Ingen bidrag her!",
"empty_column.account_unavailable": "Profil utilgængelig",
"empty_column.blocks": "Du har ikke blokeret nogen endnu.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Næste",
"lightbox.previous": "Forrige",
"lightbox.view_context": "Vis kontekst",
"lists.account.add": "Tilføj til liste",
"lists.account.remove": "Fjern fra liste",
"lists.delete": "Slet liste",
@ -266,9 +266,9 @@
"lists.edit.submit": "Skift titel",
"lists.new.create": "Tilføj liste",
"lists.new.title_placeholder": "Ny liste titel",
"lists.replies_policy.all_replies": "Enhver fulgt bruger",
"lists.replies_policy.list_replies": "Medlemmer af listen",
"lists.replies_policy.no_replies": "Ingen",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Vis svar til:",
"lists.search": "Søg iblandt folk du følger",
"lists.subheading": "Dine lister",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Statusser der nævner dig",
"notifications.filter.polls": "Afstemningsresultat",
"notifications.filter.statuses": "Opdateringer fra personer, du følger",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} notifikationer",
"notifications.mark_as_read": "Markér alle notifikationer som læst",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Aktivér skrivebordsmeddelelser",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Gå aldrig glip af noget",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Suchergebnisse",
"emoji_button.symbols": "Symbole",
"emoji_button.travel": "Reisen und Orte",
"empty_column.account_suspended": "Konto gesperrt",
"empty_column.account_timeline": "Keine Beiträge!",
"empty_column.account_unavailable": "Konto nicht verfügbar",
"empty_column.blocks": "Du hast keine Profile blockiert.",
@ -258,7 +259,6 @@
"lightbox.expand": "Bildansicht erweitern",
"lightbox.next": "Weiter",
"lightbox.previous": "Zurück",
"lightbox.view_context": "Beitrag sehen",
"lists.account.add": "Zur Liste hinzufügen",
"lists.account.remove": "Von der Liste entfernen",
"lists.delete": "Liste löschen",
@ -266,9 +266,9 @@
"lists.edit.submit": "Titel ändern",
"lists.new.create": "Liste hinzufügen",
"lists.new.title_placeholder": "Neuer Titel der Liste",
"lists.replies_policy.all_replies": "Jeder gefolgte Benutzer",
"lists.replies_policy.list_replies": "Mitglieder der Liste",
"lists.replies_policy.no_replies": "Niemand",
"lists.replies_policy.followed": "Jeder gefolgte Benutzer",
"lists.replies_policy.list": "Mitglieder der Liste",
"lists.replies_policy.none": "Niemand",
"lists.replies_policy.title": "Antworten anzeigen für:",
"lists.search": "Suche nach Leuten denen du folgst",
"lists.subheading": "Deine Listen",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Erwähnungen",
"notifications.filter.polls": "Ergebnisse der Umfrage",
"notifications.filter.statuses": "Updates von Personen, denen du folgst",
"notifications.grant_permission": "Zugriff gewährt.",
"notifications.group": "{count} Benachrichtigungen",
"notifications.mark_as_read": "Alle Benachrichtigungen als gelesen markieren",
"notifications.permission_denied": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Berechtigung verweigert wurde.",
"notifications.permission_denied_alert": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Browser-Berechtigung zuvor verweigert wurde",
"notifications.permission_required": "Desktop-Benachrichtigungen sind nicht verfügbar, da die erforderliche Berechtigung nicht erteilt wurde.",
"notifications_permission_banner.enable": "Aktiviere Desktop-Benachrichtigungen",
"notifications_permission_banner.how_to_control": "Um Benachrichtigungen zu erhalten, wenn Mastodon nicht geöffnet ist, aktiviere die Desktop-Benachrichtigungen. Du kannst genau bestimmen, welche Arten von Interaktionen Desktop-Benachrichtigungen über die {icon} -Taste erzeugen, sobald diese aktiviert sind.",
"notifications_permission_banner.title": "Verpasse nie etwas",
@ -379,7 +381,7 @@
"search_popout.search_format": "Fortgeschrittenes Suchformat",
"search_popout.tips.full_text": "Einfache Texteingabe gibt Beiträge, die du geschrieben, favorisiert und geteilt hast zurück. Außerdem auch Beiträge in denen du erwähnt wurdest, aber auch passende Nutzernamen, Anzeigenamen oder Hashtags.",
"search_popout.tips.hashtag": "Hashtag",
"search_popout.tips.status": "Beitrag",
"search_popout.tips.status": "Tröt",
"search_popout.tips.text": "Einfache Texteingabe gibt Anzeigenamen, Benutzernamen und Hashtags zurück",
"search_popout.tips.user": "Nutzer",
"search_results.accounts": "Personen",

View file

@ -652,6 +652,10 @@
},
{
"descriptors": [
{
"defaultMessage": "Account suspended",
"id": "empty_column.account_suspended"
},
{
"defaultMessage": "Profile unavailable",
"id": "empty_column.account_unavailable"
@ -712,6 +716,10 @@
"defaultMessage": "Older toots",
"id": "timeline_hint.resources.statuses"
},
{
"defaultMessage": "Account suspended",
"id": "empty_column.account_suspended"
},
{
"defaultMessage": "Profile unavailable",
"id": "empty_column.account_unavailable"
@ -2161,15 +2169,15 @@
},
{
"defaultMessage": "Any followed user",
"id": "lists.replies_policy.all_replies"
"id": "lists.replies_policy.followed"
},
{
"defaultMessage": "No one",
"id": "lists.replies_policy.no_replies"
"id": "lists.replies_policy.none"
},
{
"defaultMessage": "Members of the list",
"id": "lists.replies_policy.list_replies"
"id": "lists.replies_policy.list"
},
{
"defaultMessage": "Edit list",
@ -2272,6 +2280,10 @@
"defaultMessage": "Desktop notifications are unavailable due to previously denied browser permissions request",
"id": "notifications.permission_denied"
},
{
"defaultMessage": "Desktop notifications are unavailable because the required permission has not been granted.",
"id": "notifications.permission_required"
},
{
"defaultMessage": "Quick filter bar",
"id": "notifications.column_settings.filter_bar.category"
@ -2353,6 +2365,15 @@
],
"path": "app/javascript/mastodon/features/notifications/components/follow_request.json"
},
{
"descriptors": [
{
"defaultMessage": "Grant permission.",
"id": "notifications.grant_permission"
}
],
"path": "app/javascript/mastodon/features/notifications/components/grant_permission_button.json"
},
{
"descriptors": [
{
@ -2478,6 +2499,10 @@
{
"defaultMessage": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
"id": "confirmations.reply.message"
},
{
"defaultMessage": "Expand this status",
"id": "status.open"
}
],
"path": "app/javascript/mastodon/features/picture_in_picture/components/footer.json"
@ -2764,15 +2789,6 @@
],
"path": "app/javascript/mastodon/features/status/index.json"
},
{
"descriptors": [
{
"defaultMessage": "View context",
"id": "lightbox.view_context"
}
],
"path": "app/javascript/mastodon/features/ui/components/audio_modal.json"
},
{
"descriptors": [
{
@ -3036,10 +3052,6 @@
{
"defaultMessage": "Next",
"id": "lightbox.next"
},
{
"defaultMessage": "View context",
"id": "lightbox.view_context"
}
],
"path": "app/javascript/mastodon/features/ui/components/media_modal.json"
@ -3205,15 +3217,6 @@
],
"path": "app/javascript/mastodon/features/ui/components/upload_area.json"
},
{
"descriptors": [
{
"defaultMessage": "View context",
"id": "lightbox.view_context"
}
],
"path": "app/javascript/mastodon/features/ui/components/video_modal.json"
},
{
"descriptors": [
{

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Αποτελέσματα αναζήτησης",
"emoji_button.symbols": "Σύμβολα",
"emoji_button.travel": "Ταξίδια & Τοποθεσίες",
"empty_column.account_suspended": "Λογαριασμός σε αναστολή",
"empty_column.account_timeline": "Δεν έχει τουτ εδώ!",
"empty_column.account_unavailable": "Μη διαθέσιμο προφίλ",
"empty_column.blocks": "Δεν έχεις αποκλείσει κανέναν χρήστη ακόμα.",
@ -258,7 +259,6 @@
"lightbox.expand": "Ανάπτυξη πλαισίου εμφάνισης εικόνας",
"lightbox.next": "Επόμενο",
"lightbox.previous": "Προηγούμενο",
"lightbox.view_context": "Εμφάνιση πλαισίου",
"lists.account.add": "Πρόσθεσε στη λίστα",
"lists.account.remove": "Βγάλε από τη λίστα",
"lists.delete": "Διαγραφή λίστας",
@ -266,9 +266,9 @@
"lists.edit.submit": "Αλλαγή τίτλου",
"lists.new.create": "Προσθήκη λίστας",
"lists.new.title_placeholder": "Τίτλος νέας λίστα",
"lists.replies_policy.all_replies": "Οποιοσδήποτε χρήστης που ακολουθείς",
"lists.replies_policy.list_replies": "Μέλη της λίστας",
"lists.replies_policy.no_replies": "Κανείς",
"lists.replies_policy.followed": "Οποιοσδήποτε χρήστης που ακολουθείς",
"lists.replies_policy.list": "Μέλη της λίστας",
"lists.replies_policy.none": "Κανένας",
"lists.replies_policy.title": "Εμφάνιση απαντήσεων σε:",
"lists.search": "Αναζήτησε μεταξύ των ανθρώπων που ακουλουθείς",
"lists.subheading": "Οι λίστες σου",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Αναφορές",
"notifications.filter.polls": "Αποτελέσματα ψηφοφορίας",
"notifications.filter.statuses": "Ενημερώσεις από όσους ακολουθείς",
"notifications.grant_permission": "Χορήγηση άδειας.",
"notifications.group": "{count} ειδοποιήσεις",
"notifications.mark_as_read": "Σημείωσε όλες τις ειδοποιήσεις ως αναγνωσμένες",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Οι ειδοποιήσεις δεν είναι διαθέσιμες επειδή δεν έχει δοθεί η απαιτούμενη άδεια.",
"notifications_permission_banner.enable": "Ενεργοποίηση ειδοποιήσεων επιφάνειας εργασίας",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Μη χάσετε τίποτα",

View file

@ -38,7 +38,7 @@
"account.requested": "Awaiting approval. Click to cancel follow request",
"account.share": "Share @{name}'s profile",
"account.show_reblogs": "Show boosts from @{name}",
"account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
"account.statuses_counter": "{count, plural, one {{counter} Doot} other {{counter} Doots}}",
"account.unblock": "Unblock @{name}",
"account.unblock_domain": "Unblock domain {domain}",
"account.unendorse": "Don't feature on profile",
@ -109,7 +109,7 @@
"confirmations.block.confirm": "Block",
"confirmations.block.message": "Are you sure you want to block {name}?",
"confirmations.delete.confirm": "Delete",
"confirmations.delete.message": "Are you sure you want to delete this toot?",
"confirmations.delete.message": "Are you sure you want to delete this doot?",
"confirmations.delete_list.confirm": "Delete",
"confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
"confirmations.domain_block.confirm": "Block entire domain",
@ -120,7 +120,7 @@
"confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
"confirmations.mute.message": "Are you sure you want to mute {name}?",
"confirmations.redraft.confirm": "Delete & redraft",
"confirmations.redraft.message": "Are you sure you want to delete this toot and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
"confirmations.redraft.message": "Are you sure you want to delete this doot and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
"confirmations.reply.confirm": "Reply",
"confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
"confirmations.unfollow.confirm": "Unfollow",
@ -133,7 +133,7 @@
"directory.local": "From {domain} only",
"directory.new_arrivals": "New arrivals",
"directory.recently_active": "Recently active",
"embed.instructions": "Embed this toot on your website by copying the code below.",
"embed.instructions": "Embed this doot on your website by copying the code below.",
"embed.preview": "Here is what it will look like:",
"emoji_button.activity": "Activity",
"emoji_button.custom": "Custom",
@ -149,6 +149,7 @@
"emoji_button.search_results": "Search results",
"emoji_button.symbols": "Symbols",
"emoji_button.travel": "Travel & Places",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "No doots here!",
"empty_column.account_unavailable": "Profile unavailable",
"empty_column.blocks": "You haven't blocked any users yet.",
@ -162,7 +163,7 @@
"empty_column.hashtag": "There is nothing in this hashtag yet.",
"empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
"empty_column.home.public_timeline": "the public timeline",
"empty_column.list": "There is nothing in this list yet. When members of this list post new toots, they will appear here.",
"empty_column.list": "There is nothing in this list yet. When members of this list post new doots, they will appear here.",
"empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
"empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
@ -222,12 +223,12 @@
"keyboard_shortcuts.back": "to navigate back",
"keyboard_shortcuts.blocked": "to open blocked users list",
"keyboard_shortcuts.boost": "to boost",
"keyboard_shortcuts.column": "to focus a toot in one of the columns",
"keyboard_shortcuts.column": "to focus a doot in one of the columns",
"keyboard_shortcuts.compose": "to focus the compose textarea",
"keyboard_shortcuts.description": "Description",
"keyboard_shortcuts.direct": "to open direct messages column",
"keyboard_shortcuts.down": "to move down in the list",
"keyboard_shortcuts.enter": "to open toot",
"keyboard_shortcuts.enter": "to open doot",
"keyboard_shortcuts.favourite": "to favourite",
"keyboard_shortcuts.favourites": "to open favourites list",
"keyboard_shortcuts.federated": "to open federated timeline",
@ -266,9 +267,9 @@
"lists.edit.submit": "Change title",
"lists.new.create": "Add list",
"lists.new.title_placeholder": "New list title",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Search among people you follow",
"lists.subheading": "Your lists",
@ -303,13 +304,13 @@
"navigation_bar.preferences": "Preferences",
"navigation_bar.public_timeline": "Federated timeline",
"navigation_bar.security": "Security",
"notification.favourite": "{name} favourited your toot",
"notification.favourite": "{name} favourited your doot",
"notification.follow": "{name} followed you",
"notification.follow_request": "{name} has requested to follow you",
"notification.mention": "{name} mentioned you",
"notification.own_poll": "Your poll has ended",
"notification.poll": "A poll you have voted in has ended",
"notification.reblog": "{name} boosted your toot",
"notification.reblog": "{name} boosted your doot",
"notification.status": "{name} just posted",
"notifications.clear": "Clear notifications",
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
@ -326,7 +327,7 @@
"notifications.column_settings.reblog": "Boosts:",
"notifications.column_settings.show": "Show in column",
"notifications.column_settings.sound": "Play sound",
"notifications.column_settings.status": "New toots:",
"notifications.column_settings.status": "New doots:",
"notifications.filter.all": "All",
"notifications.filter.boosts": "Boosts",
"notifications.filter.favourites": "Favourites",
@ -334,10 +335,12 @@
"notifications.filter.mentions": "Mentions",
"notifications.filter.polls": "Poll results",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} notifications",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",
@ -350,7 +353,7 @@
"poll.voted": "You voted for this answer",
"poll_button.add_poll": "Add a poll",
"poll_button.remove_poll": "Remove poll",
"privacy.change": "Adjust toot privacy",
"privacy.change": "Adjust doot privacy",
"privacy.direct.long": "Visible for mentioned users only",
"privacy.direct.short": "Direct",
"privacy.private.long": "Visible for followers only",
@ -377,9 +380,9 @@
"report.target": "Reporting {target}",
"search.placeholder": "Search",
"search_popout.search_format": "Advanced search format",
"search_popout.tips.full_text": "Simple text returns toots you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
"search_popout.tips.full_text": "Simple text returns doots you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
"search_popout.tips.hashtag": "hashtag",
"search_popout.tips.status": "toot",
"search_popout.tips.status": "doot",
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
"search_popout.tips.user": "user",
"search_results.accounts": "People",
@ -388,12 +391,12 @@
"search_results.statuses_fts_disabled": "Searching doots by their content is not enabled on this Mastodon server.",
"search_results.total": "{count, number} {count, plural, one {result} other {results}}",
"status.admin_account": "Open moderation interface for @{name}",
"status.admin_status": "Open this toot in the moderation interface",
"status.admin_status": "Open this doot in the moderation interface",
"status.block": "Block @{name}",
"status.bookmark": "Bookmark",
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "This post cannot be boosted",
"status.copy": "Copy link to toot",
"status.copy": "Copy link to doot",
"status.delete": "Delete",
"status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
@ -406,7 +409,7 @@
"status.more": "More",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Mute conversation",
"status.open": "Expand this toot",
"status.open": "Expand this doot",
"status.pin": "Pin on profile",
"status.pinned": "Pinned doot",
"status.read_more": "Read more",
@ -444,7 +447,7 @@
"timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
"timeline_hint.resources.followers": "Followers",
"timeline_hint.resources.follows": "Follows",
"timeline_hint.resources.statuses": "Older toots",
"timeline_hint.resources.statuses": "Older doots",
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
"trends.trending_now": "Trending now",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",

View file

@ -6,7 +6,7 @@
"account.block": "Bloki @{name}",
"account.block_domain": "Bloki {domain}",
"account.blocked": "Blokita",
"account.browse_more_on_origin_server": "Browse more on the original profile",
"account.browse_more_on_origin_server": "Rigardi pli al la originala profilo",
"account.cancel_follow_request": "Nuligi peton de sekvado",
"account.direct": "Rekte mesaĝi @{name}",
"account.disable_notifications": "Stop notifying me when @{name} posts",
@ -149,6 +149,7 @@
"emoji_button.search_results": "Serĉaj rezultoj",
"emoji_button.symbols": "Simboloj",
"emoji_button.travel": "Vojaĝoj kaj lokoj",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "Neniu mesaĝo ĉi tie!",
"empty_column.account_unavailable": "Profilo ne disponebla",
"empty_column.blocks": "Vi ankoraŭ ne blokis uzanton.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Sekva",
"lightbox.previous": "Antaŭa",
"lightbox.view_context": "Vidi kuntekston",
"lists.account.add": "Aldoni al la listo",
"lists.account.remove": "Forigi de la listo",
"lists.delete": "Forigi la liston",
@ -266,10 +266,10 @@
"lists.edit.submit": "Ŝanĝi titolon",
"lists.new.create": "Aldoni liston",
"lists.new.title_placeholder": "Titolo de la nova listo",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Montri respondon al:",
"lists.search": "Serĉi inter la homoj, kiujn vi sekvas",
"lists.subheading": "Viaj listoj",
"load_pending": "{count,plural, one {# nova elemento} other {# novaj elementoj}}",
@ -277,9 +277,9 @@
"media_gallery.toggle_visible": "Baskuligi videblecon",
"missing_indicator.label": "Ne trovita",
"missing_indicator.sublabel": "Ĉi tiu elemento ne estis trovita",
"mute_modal.duration": "Duration",
"mute_modal.duration": "Daŭro",
"mute_modal.hide_notifications": "Ĉu vi volas kaŝi la sciigojn de ĉi tiu uzanto?",
"mute_modal.indefinite": "Indefinite",
"mute_modal.indefinite": "Nedifinita",
"navigation_bar.apps": "Telefonaj aplikaĵoj",
"navigation_bar.blocks": "Blokitaj uzantoj",
"navigation_bar.bookmarks": "Legosignoj",
@ -310,7 +310,7 @@
"notification.own_poll": "Via balotenketo finiĝitis",
"notification.poll": "Partoprenita balotenketo finiĝis",
"notification.reblog": "{name} diskonigis vian mesaĝon",
"notification.status": "{name} just posted",
"notification.status": "{name} ĵus afiŝita",
"notifications.clear": "Forviŝi sciigojn",
"notifications.clear_confirmation": "Ĉu vi certas, ke vi volas porĉiame forviŝi ĉiujn viajn sciigojn?",
"notifications.column_settings.alert": "Retumilaj sciigoj",
@ -334,13 +334,15 @@
"notifications.filter.mentions": "Mencioj",
"notifications.filter.polls": "Balotenketaj rezultoj",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} sciigoj",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.mark_as_read": "Marki ĉiujn sciigojn legita",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Ebligi retumilajn sciigojn",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",
"notifications_permission_banner.title": "Neniam preterlasas iun ajn",
"picture_in_picture.restore": "Put it back",
"poll.closed": "Finita",
"poll.refresh": "Aktualigi",
@ -351,13 +353,13 @@
"poll_button.add_poll": "Aldoni balotenketon",
"poll_button.remove_poll": "Forigi balotenketon",
"privacy.change": "Agordi mesaĝan privatecon",
"privacy.direct.long": "Afiŝi nur al menciitaj uzantoj",
"privacy.direct.long": "Videbla nur al menciitaj uzantoj",
"privacy.direct.short": "Rekta",
"privacy.private.long": "Afiŝi nur al sekvantoj",
"privacy.private.short": "Nur por sekvantoj",
"privacy.public.long": "Afiŝi en publikaj tempolinioj",
"privacy.private.long": "Videbla nur al viaj sekvantoj",
"privacy.private.short": "Nur al sekvantoj",
"privacy.public.long": "Videbla al ĉiuj, afiŝita en publikaj tempolinioj",
"privacy.public.short": "Publika",
"privacy.unlisted.long": "Ne afiŝi en publikaj tempolinioj",
"privacy.unlisted.long": "Videbla al ĉiuj, sed ne en publikaj tempolinioj",
"privacy.unlisted.short": "Nelistigita",
"refresh": "Refreŝigu",
"regeneration_indicator.label": "Ŝargado…",
@ -448,7 +450,7 @@
"trends.counter_by_accounts": "{count, plural, one {{counter} persono} other {{counter} personoj}} parolante",
"trends.trending_now": "Nunaj furoraĵoj",
"ui.beforeunload": "Via malneto perdiĝos se vi eliras de Mastodon.",
"units.short.billion": "{count}B",
"units.short.billion": "{count}Md",
"units.short.million": "{count}M",
"units.short.thousand": "{count}K",
"upload_area.title": "Altreni kaj lasi por alŝuti",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Resultados de búsqueda",
"emoji_button.symbols": "Símbolos",
"emoji_button.travel": "Viajes y lugares",
"empty_column.account_suspended": "Cuenta suspendida",
"empty_column.account_timeline": "¡No hay toots acá!",
"empty_column.account_unavailable": "Perfil no disponible",
"empty_column.blocks": "Todavía no bloqueaste a ningún usuario.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expandir cuadro de vista de imagen",
"lightbox.next": "Siguiente",
"lightbox.previous": "Anterior",
"lightbox.view_context": "Ver contexto",
"lists.account.add": "Agregar a lista",
"lists.account.remove": "Quitar de lista",
"lists.delete": "Eliminar lista",
@ -266,9 +266,9 @@
"lists.edit.submit": "Cambiar título",
"lists.new.create": "Agregar lista",
"lists.new.title_placeholder": "Nuevo título de lista",
"lists.replies_policy.all_replies": "Cualquier cuenta seguida",
"lists.replies_policy.list_replies": "Miembros de la lista",
"lists.replies_policy.no_replies": "Nadie",
"lists.replies_policy.followed": "Cualquier cuenta seguida",
"lists.replies_policy.list": "Miembros de la lista",
"lists.replies_policy.none": "Nadie",
"lists.replies_policy.title": "Mostrar respuestas a:",
"lists.search": "Buscar entre la gente que seguís",
"lists.subheading": "Tus listas",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Menciones",
"notifications.filter.polls": "Resultados de encuesta",
"notifications.filter.statuses": "Actualizaciones de cuentas que seguís",
"notifications.grant_permission": "Conceder permiso.",
"notifications.group": "{count} notificaciones",
"notifications.mark_as_read": "Marcar cada notificación como leída",
"notifications.permission_denied": "Las notificaciones de escritorio no están disponibles, debido a una solicitud de permiso del navegador web previamente denegada",
"notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado antes",
"notifications.permission_required": "Las notificaciones de escritorio no están disponibles porque no se concedió el permiso requerido.",
"notifications_permission_banner.enable": "Habilitar notificaciones de escritorio",
"notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no está abierto, habilitá las notificaciones de escritorio. Podés controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba, una vez que estén habilitadas.",
"notifications_permission_banner.title": "No te pierdas nada",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Resultados de búsqueda",
"emoji_button.symbols": "Símbolos",
"emoji_button.travel": "Viajes y lugares",
"empty_column.account_suspended": "Cuenta suspendida",
"empty_column.account_timeline": "¡No hay toots aquí!",
"empty_column.account_unavailable": "Perfil no disponible",
"empty_column.blocks": "Aún no has bloqueado a ningún usuario.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expandir cuadro de visualización de imagen",
"lightbox.next": "Siguiente",
"lightbox.previous": "Anterior",
"lightbox.view_context": "Ver contexto",
"lists.account.add": "Añadir a lista",
"lists.account.remove": "Quitar de lista",
"lists.delete": "Borrar lista",
@ -266,9 +266,9 @@
"lists.edit.submit": "Cambiar título",
"lists.new.create": "Añadir lista",
"lists.new.title_placeholder": "Título de la nueva lista",
"lists.replies_policy.all_replies": "Cualquier usuario al que sigas",
"lists.replies_policy.list_replies": "Miembros de la lista",
"lists.replies_policy.no_replies": "Nadie",
"lists.replies_policy.followed": "Cualquier usuario seguido",
"lists.replies_policy.list": "Miembros de la lista",
"lists.replies_policy.none": "Nadie",
"lists.replies_policy.title": "Mostrar respuestas a:",
"lists.search": "Buscar entre la gente a la que sigues",
"lists.subheading": "Tus listas",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Menciones",
"notifications.filter.polls": "Resultados de la votación",
"notifications.filter.statuses": "Actualizaciones de gente a la que sigues",
"notifications.grant_permission": "Conceder permiso.",
"notifications.group": "{count} notificaciones",
"notifications.mark_as_read": "Marcar todas las notificaciones como leídas",
"notifications.permission_denied": "No se pueden habilitar las notificaciones de escritorio ya que se denegó el permiso.",
"notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado anteriormente",
"notifications.permission_required": "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso requerido.",
"notifications_permission_banner.enable": "Habilitar notificaciones de escritorio",
"notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no esté abierto, habilite las notificaciones de escritorio. Puedes controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba una vez que estén habilitadas.",
"notifications_permission_banner.title": "Nunca te pierdas nada",
@ -390,7 +392,7 @@
"status.admin_account": "Abrir interfaz de moderación para @{name}",
"status.admin_status": "Abrir este estado en la interfaz de moderación",
"status.block": "Bloquear a @{name}",
"status.bookmark": "Marcador",
"status.bookmark": "Añadir marcador",
"status.cancel_reblog_private": "Eliminar retoot",
"status.cannot_reblog": "Este toot no puede retootearse",
"status.copy": "Copiar enlace al estado",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Otsitulemused",
"emoji_button.symbols": "Sümbolid",
"emoji_button.travel": "Reisimine & Kohad",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "Siin tuute ei ole!",
"empty_column.account_unavailable": "Profiil pole saadaval",
"empty_column.blocks": "Sa ei ole veel ühtegi kasutajat blokeerinud.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Järgmine",
"lightbox.previous": "Eelmine",
"lightbox.view_context": "Vaata konteksti",
"lists.account.add": "Lisa nimistusse",
"lists.account.remove": "Eemalda nimistust",
"lists.delete": "Kustuta nimistu",
@ -266,9 +266,9 @@
"lists.edit.submit": "Muuda pealkiri",
"lists.new.create": "Lisa nimistu",
"lists.new.title_placeholder": "Uus nimistu pealkiri",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Otsi Teie poolt jälgitavate inimese hulgast",
"lists.subheading": "Teie nimistud",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Mainimised",
"notifications.filter.polls": "Küsitluse tulemused",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} teated",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Bilaketaren emaitzak",
"emoji_button.symbols": "Sinboloak",
"emoji_button.travel": "Bidaiak eta tokiak",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "Ez dago tootik hemen!",
"empty_column.account_unavailable": "Profila ez dago eskuragarri",
"empty_column.blocks": "Ez duzu erabiltzailerik blokeatu oraindik.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Hurrengoa",
"lightbox.previous": "Aurrekoa",
"lightbox.view_context": "Ikusi testuingurua",
"lists.account.add": "Gehitu zerrendara",
"lists.account.remove": "Kendu zerrendatik",
"lists.delete": "Ezabatu zerrenda",
@ -266,9 +266,9 @@
"lists.edit.submit": "Aldatu izenburua",
"lists.new.create": "Gehitu zerrenda",
"lists.new.title_placeholder": "Zerrenda berriaren izena",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Bilatu jarraitzen dituzun pertsonen artean",
"lists.subheading": "Zure zerrendak",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Aipamenak",
"notifications.filter.polls": "Inkestaren emaitza",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} jakinarazpen",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -81,7 +81,7 @@
"column_header.show_settings": "نمایش تنظیمات",
"column_header.unpin": "رهاکردن",
"column_subheading.settings": "ساماندهی",
"community.column_settings.local_only": "تنها بومی",
"community.column_settings.local_only": "فقط محلّی",
"community.column_settings.media_only": "فقط رسانه",
"community.column_settings.remote_only": "تنها دوردست",
"compose_form.direct_message_warning": "این بوق تنها به کاربرانی که از آن‌ها نام برده شده فرستاده خواهد شد.",
@ -149,6 +149,7 @@
"emoji_button.search_results": "نتایج جستجو",
"emoji_button.symbols": "نمادها",
"emoji_button.travel": "سفر و مکان",
"empty_column.account_suspended": "حساب معلق شد",
"empty_column.account_timeline": "هیچ بوقی این‌جا نیست!",
"empty_column.account_unavailable": "نمایهٔ موجود نیست",
"empty_column.blocks": "هنوز کسی را مسدود نکرده‌اید.",
@ -254,11 +255,10 @@
"keyboard_shortcuts.unfocus": "برای برداشتن تمرکز از نوشتن/جستجو",
"keyboard_shortcuts.up": "برای بالا رفتن در فهرست",
"lightbox.close": "بستن",
"lightbox.compress": "Compress image view box",
"lightbox.expand": "Expand image view box",
"lightbox.compress": "فشرده‌سازی جعبه نمایش تصویر",
"lightbox.expand": "گسترش جعبه نمایش تصویر",
"lightbox.next": "بعدی",
"lightbox.previous": "قبلی",
"lightbox.view_context": "نمایش گفتگو",
"lists.account.add": "افزودن به فهرست",
"lists.account.remove": "برداشتن از فهرست",
"lists.delete": "حذف فهرست",
@ -266,9 +266,9 @@
"lists.edit.submit": "تغییر عنوان",
"lists.new.create": "افزودن فهرست",
"lists.new.title_placeholder": "عنوان فهرست تازه",
"lists.replies_policy.all_replies": "هر کاربر پی‌گیری‌شده",
"lists.replies_policy.list_replies": "اعضای فهرست",
"lists.replies_policy.no_replies": "هیچ‌کس",
"lists.replies_policy.followed": "هر کاربر پیگرفته",
"lists.replies_policy.list": "اعضای فهرست",
"lists.replies_policy.none": "هیچ کدام",
"lists.replies_policy.title": "نمایش پاسخ‌ها به:",
"lists.search": "بین کسانی که پی می‌گیرید بگردید",
"lists.subheading": "فهرست‌های شما",
@ -334,12 +334,14 @@
"notifications.filter.mentions": "نام‌بردن‌ها",
"notifications.filter.polls": "نتایج نظرسنجی",
"notifications.filter.statuses": "به‌روز رسانی‌ها از کسانی که پی‌گیرشانید",
"notifications.grant_permission": "اعطای مجوز.",
"notifications.group": "{count} اعلان",
"notifications.mark_as_read": "نشانه‌گذاری همهٔ آگاهی‌ها به عنوان خوانده‌شده",
"notifications.permission_denied": "آگاهی‌های میزکار به دلیل رد کردن درخواست اجازهٔ پیشین مرورگر، در دسترس نیستند",
"notifications.permission_denied_alert": "از آن‌جا که پیش از این اجازهٔ مرورگر رد شده است، آگاهی‌های میزکار نمی‌توانند به کار بیفتند",
"notifications.permission_required": "اعلان‌های میزکار در دسترس نیستند زیرا نیازمند مجوزی هستند که اعطا نشده است.",
"notifications_permission_banner.enable": "به کار انداختن آگاهی‌های میزکار",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.how_to_control": "اگر می‌خواهید حتی زمانی که ماستودون باز نیست اعلان‌ها نمایش یابند، اعلان‌های میزکار را فعال کنید. به محض فعال شدن از طریق دکمه {icon} بالا می‌توانید به دقت کنترل کنید که چه نوع از تعامل‌ها باعث صادر شدن اعلان‌ها شوند.",
"notifications_permission_banner.title": "هرگز چیزی را از دست ندهید",
"picture_in_picture.restore": "برگرداندن",
"poll.closed": "پایان‌یافته",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Hakutulokset",
"emoji_button.symbols": "Symbolit",
"emoji_button.travel": "Matkailu",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "Ei ole 'toots' täällä!",
"empty_column.account_unavailable": "Profiilia ei löydy",
"empty_column.blocks": "Et ole vielä estänyt yhtään käyttäjää.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Seuraava",
"lightbox.previous": "Edellinen",
"lightbox.view_context": "Näytä kontekstissa",
"lists.account.add": "Lisää listaan",
"lists.account.remove": "Poista listasta",
"lists.delete": "Poista lista",
@ -266,9 +266,9 @@
"lists.edit.submit": "Vaihda otsikko",
"lists.new.create": "Lisää lista",
"lists.new.title_placeholder": "Uuden listan nimi",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Etsi seuraamistasi henkilöistä",
"lists.subheading": "Omat listat",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Maininnat",
"notifications.filter.polls": "Kyselyn tulokset",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} ilmoitusta",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Résultats de la recherche",
"emoji_button.symbols": "Symboles",
"emoji_button.travel": "Lieux & Voyages",
"empty_column.account_suspended": "Compte suspendu",
"empty_column.account_timeline": "Aucun pouet ici !",
"empty_column.account_unavailable": "Profil non disponible",
"empty_column.blocks": "Vous navez bloqué aucun·e utilisateur·rice pour le moment.",
@ -258,7 +259,6 @@
"lightbox.expand": "Agrandir la fenêtre de visualisation des images",
"lightbox.next": "Suivant",
"lightbox.previous": "Précédent",
"lightbox.view_context": "Voir le contexte",
"lists.account.add": "Ajouter à la liste",
"lists.account.remove": "Supprimer de la liste",
"lists.delete": "Supprimer la liste",
@ -266,9 +266,9 @@
"lists.edit.submit": "Modifier le titre",
"lists.new.create": "Ajouter une liste",
"lists.new.title_placeholder": "Titre de la nouvelle liste",
"lists.replies_policy.all_replies": "Nimporte quel·le utilisateur·rice suivi·e",
"lists.replies_policy.list_replies": "Membres de la liste",
"lists.replies_policy.no_replies": "Personne",
"lists.replies_policy.followed": "Nimporte quel·le utilisateur·rice suivi·e",
"lists.replies_policy.list": "Membres de la liste",
"lists.replies_policy.none": "Personne",
"lists.replies_policy.title": "Afficher les réponses à :",
"lists.search": "Rechercher parmi les gens que vous suivez",
"lists.subheading": "Vos listes",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Mentions",
"notifications.filter.polls": "Résultats des sondages",
"notifications.filter.statuses": "Mises à jour des personnes que vous suivez",
"notifications.grant_permission": "Accorder lautorisation.",
"notifications.group": "{count} notifications",
"notifications.mark_as_read": "Marquer toutes les notifications comme lues",
"notifications.permission_denied": "Impossible dactiver les notifications de bureau car lautorisation a été refusée.",
"notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car lautorisation du navigateur a été refusée avant",
"notifications.permission_required": "Les notifications de bureau ne sont pas disponibles car lautorisation requise na pas été accordée.",
"notifications_permission_banner.enable": "Activer les notifications de bureau",
"notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon nest pas ouvert, activez les notifications du bureau. Vous pouvez contrôler précisément quels types dinteractions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois quelles sont activées.",
"notifications_permission_banner.title": "Toujours au courant",
@ -436,7 +438,7 @@
"tabs_bar.local_timeline": "Fil public local",
"tabs_bar.notifications": "Notifications",
"tabs_bar.search": "Chercher",
"time_remaining.days": "{number, plural, one {# day} other {# days}} restants",
"time_remaining.days": "{number, plural, one {# jour} other {# jours}} restant·s",
"time_remaining.hours": "{number, plural, one {# heure} other {# heures}} restantes",
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} restantes",
"time_remaining.moments": "Encore quelques instants",
@ -448,7 +450,7 @@
"trends.counter_by_accounts": "{count, plural, one {{counter} personne en parle} other {{counter} personnes en parlent}}",
"trends.trending_now": "Tendance en ce moment",
"ui.beforeunload": "Votre brouillon sera perdu si vous quittez Mastodon.",
"units.short.billion": "{count}B",
"units.short.billion": "{count}Md",
"units.short.million": "{count}M",
"units.short.thousand": "{count}K",
"upload_area.title": "Glissez et déposez pour envoyer",
@ -468,7 +470,7 @@
"upload_modal.detect_text": "Détecter le texte de limage",
"upload_modal.edit_media": "Modifier le média",
"upload_modal.hint": "Cliquez ou faites glisser le cercle sur laperçu pour choisir le point focal qui sera toujours visible sur toutes les miniatures.",
"upload_modal.preparing_ocr": "Préparation de OCR…",
"upload_modal.preparing_ocr": "Préparation de lOCR…",
"upload_modal.preview_label": "Aperçu ({ratio})",
"upload_progress.label": "Envoi en cours…",
"video.close": "Fermer la vidéo",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Search results",
"emoji_button.symbols": "Symbols",
"emoji_button.travel": "Travel & Places",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "No toots here!",
"empty_column.account_unavailable": "Profile unavailable",
"empty_column.blocks": "You haven't blocked any users yet.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Next",
"lightbox.previous": "Previous",
"lightbox.view_context": "View context",
"lists.account.add": "Add to list",
"lists.account.remove": "Remove from list",
"lists.delete": "Delete list",
@ -266,9 +266,9 @@
"lists.edit.submit": "Change title",
"lists.new.create": "Add list",
"lists.new.title_placeholder": "New list title",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Search among people you follow",
"lists.subheading": "Your lists",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Mentions",
"notifications.filter.polls": "Poll results",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} notifications",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Resultados da procura",
"emoji_button.symbols": "Símbolos",
"emoji_button.travel": "Viaxes e Lugares",
"empty_column.account_suspended": "Conta suspendida",
"empty_column.account_timeline": "Non hai toots aquí!",
"empty_column.account_unavailable": "Perfil non dispoñible",
"empty_column.blocks": "Aínda non bloqueaches a ningún usuaria.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expandir a caixa de vista da imaxe",
"lightbox.next": "Seguinte",
"lightbox.previous": "Anterior",
"lightbox.view_context": "Ollar contexto",
"lists.account.add": "Engadir á listaxe",
"lists.account.remove": "Eliminar da listaxe",
"lists.delete": "Eliminar listaxe",
@ -266,9 +266,9 @@
"lists.edit.submit": "Mudar o título",
"lists.new.create": "Engadir listaxe",
"lists.new.title_placeholder": "Título da nova listaxe",
"lists.replies_policy.all_replies": "Calquera usuaria á que segues",
"lists.replies_policy.list_replies": "Membros da lista",
"lists.replies_policy.no_replies": "Ninguén",
"lists.replies_policy.followed": "Toda usuaria seguida",
"lists.replies_policy.list": "Membros da lista",
"lists.replies_policy.none": "Ninguén",
"lists.replies_policy.title": "Mostrar respostas a:",
"lists.search": "Procurar entre as persoas que segues",
"lists.subheading": "As túas listaxes",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Mencións",
"notifications.filter.polls": "Resultados da enquisa",
"notifications.filter.statuses": "Actualizacións de xente á que segues",
"notifications.grant_permission": "Conceder permiso.",
"notifications.group": "{count} notificacións",
"notifications.mark_as_read": "Marcar todas as notificacións como lidas",
"notifications.permission_denied": "Non se activaron as notificacións de escritorio porque se denegou o permiso",
"notifications.permission_denied_alert": "Non se poden activar as notificacións de escritorio, xa que o permiso para o navegador foi denegado previamente",
"notifications.permission_required": "As notificacións de escritorio non están dispoñibles porque non se concedeu o permiso necesario.",
"notifications_permission_banner.enable": "Activar notificacións de escritorio",
"notifications_permission_banner.how_to_control": "Activa as notificacións de escritorio para recibir notificacións mentras Mastodon non está aberto. Podes controlar de xeito preciso o tipo de interaccións que crean as notificacións de escritorio a través da {icon} superior unha vez están activadas.",
"notifications_permission_banner.title": "Non perder nada",
@ -360,7 +362,7 @@
"privacy.unlisted.long": "Non publicar nas cronoloxías públicas",
"privacy.unlisted.short": "Non listado",
"refresh": "Actualizar",
"regeneration_indicator.label": "Cargando…",
"regeneration_indicator.label": "Estase a cargar…",
"regeneration_indicator.sublabel": "Estase a preparar a túa cronoloxía de inicio!",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "תוצאות חיפוש",
"emoji_button.symbols": "סמלים",
"emoji_button.travel": "טיולים ואתרים",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "No toots here!",
"empty_column.account_unavailable": "Profile unavailable",
"empty_column.blocks": "You haven't blocked any users yet.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "הלאה",
"lightbox.previous": "הקודם",
"lightbox.view_context": "View context",
"lists.account.add": "Add to list",
"lists.account.remove": "Remove from list",
"lists.delete": "Delete list",
@ -266,9 +266,9 @@
"lists.edit.submit": "Change title",
"lists.new.create": "Add list",
"lists.new.title_placeholder": "New list title",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Search among people you follow",
"lists.subheading": "Your lists",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Mentions",
"notifications.filter.polls": "Poll results",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} notifications",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "खोज परिणाम",
"emoji_button.symbols": "प्रतीक",
"emoji_button.travel": "यात्रा एवं स्थान",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "सन्नाटा! यहां कोई टूट्स नहीं!",
"empty_column.account_unavailable": "प्रोफाइल उपलब्ध नहीं",
"empty_column.blocks": "आप अभी तक किसी भी यूजर के द्वारा ब्लॉक्ड नहीं हो।",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "अगला",
"lightbox.previous": "पिछला",
"lightbox.view_context": "View context",
"lists.account.add": "Add to list",
"lists.account.remove": "सूची से निकालें",
"lists.delete": "सूची हटाएँ",
@ -266,9 +266,9 @@
"lists.edit.submit": "Change title",
"lists.new.create": "सूची जोड़ें",
"lists.new.title_placeholder": "नये सूची का शीर्षक",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Search among people you follow",
"lists.subheading": "आपकी सूचियाँ",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "उल्लेख",
"notifications.filter.polls": "चुनाव परिणाम",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} सूचनाएँ",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -134,7 +134,7 @@
"directory.new_arrivals": "New arrivals",
"directory.recently_active": "Nedavno aktivni",
"embed.instructions": "Embed this status on your website by copying the code below.",
"embed.preview": "Here is what it will look like:",
"embed.preview": "Evo kako će izgledati:",
"emoji_button.activity": "Aktivnost",
"emoji_button.custom": "Prilagođeno",
"emoji_button.flags": "Zastave",
@ -149,6 +149,7 @@
"emoji_button.search_results": "Rezultati pretraživanja",
"emoji_button.symbols": "Simboli",
"emoji_button.travel": "Putovanje i mjesta",
"empty_column.account_suspended": "Račun je suspendiran",
"empty_column.account_timeline": "Ovdje nema tootova!",
"empty_column.account_unavailable": "Profil nije dostupan",
"empty_column.blocks": "Još niste blokirali nikoga.",
@ -164,7 +165,7 @@
"empty_column.home.public_timeline": "javnu vremensku crtu",
"empty_column.list": "Na ovoj listi još nema ničega. Kada članovi ove liste objave nove tootove, oni će se pojaviti ovdje.",
"empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
"empty_column.mutes": "You haven't muted any users yet.",
"empty_column.mutes": "Niste utišali nijednog korisnika.",
"empty_column.notifications": "Još nemate obavijesti. Komunicirajte s drugima kako biste započeli razgovor.",
"empty_column.public": "Ovdje nema ništa! Napišite nešto javno ili ručno pratite korisnike s drugi poslužitelja da biste ovo popunili",
"error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Sljedeće",
"lightbox.previous": "Prethodno",
"lightbox.view_context": "Prikaži kontekst",
"lists.account.add": "Dodaj na listu",
"lists.account.remove": "Ukloni s liste",
"lists.delete": "Izbriši listu",
@ -266,9 +266,9 @@
"lists.edit.submit": "Promijeni naslov",
"lists.new.create": "Dodaj listu",
"lists.new.title_placeholder": "Naziv nove liste",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Bilo koji praćeni korisnik",
"lists.replies_policy.list": "Članovi liste",
"lists.replies_policy.none": "Nitko",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Traži među praćenim ljudima",
"lists.subheading": "Vaše liste",
@ -277,10 +277,10 @@
"media_gallery.toggle_visible": "Sakrij {number, plural, one {sliku} other {slike}}",
"missing_indicator.label": "Nije pronađeno",
"missing_indicator.sublabel": "This resource could not be found",
"mute_modal.duration": "Duration",
"mute_modal.duration": "Trajanje",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"mute_modal.indefinite": "Indefinite",
"navigation_bar.apps": "Mobile apps",
"navigation_bar.apps": "Mobilne aplikacije",
"navigation_bar.blocks": "Blokirani korisnici",
"navigation_bar.bookmarks": "Bookmarks",
"navigation_bar.community_timeline": "Lokalna vremenska crta",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Spominjanja",
"notifications.filter.polls": "Rezultati anketa",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} obavijesti",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.mark_as_read": "Označi sve obavijesti kao pročitane",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",
@ -382,7 +384,7 @@
"search_popout.tips.status": "toot",
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
"search_popout.tips.user": "korisnik",
"search_results.accounts": "People",
"search_results.accounts": "Ljudi",
"search_results.hashtags": "Hashtags",
"search_results.statuses": "Toots",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Keresési találatok",
"emoji_button.symbols": "Szimbólumok",
"emoji_button.travel": "Utazás és Helyek",
"empty_column.account_suspended": "Fiók felfüggesztve",
"empty_column.account_timeline": "Itt nincs tülkölés!",
"empty_column.account_unavailable": "A profil nem érhető el",
"empty_column.blocks": "Még senkit sem tiltottál le.",
@ -258,7 +259,6 @@
"lightbox.expand": "Képnézet kinagyítása",
"lightbox.next": "Következő",
"lightbox.previous": "Előző",
"lightbox.view_context": "Környezet megtekintése",
"lists.account.add": "Hozzáadás a listához",
"lists.account.remove": "Eltávolítás a listából",
"lists.delete": "Lista törlése",
@ -266,9 +266,9 @@
"lists.edit.submit": "Cím megváltoztatása",
"lists.new.create": "Lista hozzáadása",
"lists.new.title_placeholder": "Új lista címe",
"lists.replies_policy.all_replies": "Bármely követett felhasználó",
"lists.replies_policy.list_replies": "A lista tagjai",
"lists.replies_policy.no_replies": "Senki",
"lists.replies_policy.followed": "Bármely követett felhasználó",
"lists.replies_policy.list": "A lista tagjai",
"lists.replies_policy.none": "Senki",
"lists.replies_policy.title": "Nekik mutassuk a válaszokat:",
"lists.search": "Keresés a követett személyek között",
"lists.subheading": "Listáid",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Megemlítések",
"notifications.filter.polls": "Szavazások eredményei",
"notifications.filter.statuses": "Frissítések azoktól, akiket követsz",
"notifications.grant_permission": "Engedély megadása.",
"notifications.group": "{count} értesítés",
"notifications.mark_as_read": "Minden értesítés olvasottnak jelölése",
"notifications.permission_denied": "Nem tudjuk engedélyezni az asztali értesítéseket, mert az engedélyt megtagadták.",
"notifications.permission_denied_alert": "Az asztali értesítések nem engedélyezhetőek, mert az engedélyt megtagadták a böngészőben",
"notifications.permission_required": "Az asztali értesítések nem elérhetőek, mert a szükséges engedélyt nem adtad meg.",
"notifications_permission_banner.enable": "Asztali értesítések engedélyezése",
"notifications_permission_banner.how_to_control": "Ahhoz, hogy értesítéseket kapj akkor, amikor a Mastodon nincs megnyitva, engedélyezd az asztali értesítéseket. Pontosan be tudod állítani, hogy milyen interakciókról értesülj a fenti {icon} gombon keresztül, ha egyszer már engedélyezted őket.",
"notifications_permission_banner.title": "Soha ne mulassz el semmit",

View file

@ -17,8 +17,8 @@
"account.follow": "Հետեւել",
"account.followers": "Հետեւողներ",
"account.followers.empty": "Այս օգտատիրոջը դեռ ոչ մէկ չի հետեւում։",
"account.followers_counter": "{count, plural, one {{counter} Հետևորդ} other {{counter} Հետևորդներ}}",
"account.following_counter": "{count, plural, other {{counter} Հետևում են}}",
"account.followers_counter": "{count, plural, one {{counter} Հետեւորդ} other {{counter} Հետեւորդներ}}",
"account.following_counter": "{count, plural, other {{counter} Հետեւում են}}",
"account.follows.empty": "Այս օգտատէրը դեռ ոչ մէկի չի հետեւում։",
"account.follows_you": "Հետեւում է քեզ",
"account.hide_reblogs": "Թաքցնել @{name}֊ի տարածածները",
@ -45,7 +45,7 @@
"account.unfollow": "Ապահետեւել",
"account.unmute": "Ապալռեցնել @{name}֊ին",
"account.unmute_notifications": "Միացնել ծանուցումները @{name}֊ից",
"account_note.placeholder": "Սեղմեք գրառելու համար",
"account_note.placeholder": "Սեղմէ՛ք գրառելու համար\n",
"alert.rate_limited.message": "Փորձէք որոշ ժամանակ անց՝ {retry_time, time, medium}։",
"alert.rate_limited.title": "Գործողութիւնների յաճախութիւնը գերազանցում է թոյլատրելին",
"alert.unexpected.message": "Անսպասելի սխալ տեղի ունեցաւ։",
@ -57,9 +57,9 @@
"bundle_column_error.retry": "Կրկին փորձել",
"bundle_column_error.title": "Ցանցային սխալ",
"bundle_modal_error.close": "Փակել",
"bundle_modal_error.message": "Այս բաղադրիչը բեռնելու ընթացքում ինչ֊որ բան խափանվեց։",
"bundle_modal_error.message": "Այս բաղադրիչը բեռնելու ընթացքում ինչ֊որ բան խափանուեց։",
"bundle_modal_error.retry": "Կրկին փորձել",
"column.blocks": "Արգելափակված օգտատերեր",
"column.blocks": "Արգելափակուած օգտատէրեր",
"column.bookmarks": "Էջանիշեր",
"column.community": "Տեղական հոսք",
"column.direct": "Հասցէագրուած հաղորդագրութիւններ",
@ -69,27 +69,27 @@
"column.follow_requests": "Հետեւելու հայցեր",
"column.home": "Հիմնական",
"column.lists": "Ցանկեր",
"column.mutes": "Լռեցրած օգտատերեր",
"column.mutes": "Լռեցրած օգտատէրեր",
"column.notifications": "Ծանուցումներ",
"column.pins": "Ամրացված թթեր",
"column.pins": "Ամրացուած թթեր",
"column.public": "Դաշնային հոսք",
"column_back_button.label": "Ետ",
"column_header.hide_settings": "Թաքցնել կարգավորումները",
"column_header.hide_settings": "Թաքցնել կարգաւորումները",
"column_header.moveLeft_settings": "Տեղաշարժել սիւնը ձախ",
"column_header.moveRight_settings": "Տեղաշարժել սիւնը աջ",
"column_header.pin": "Ամրացնել",
"column_header.show_settings": "Ցուցադրել կարգավորումները",
"column_header.show_settings": "Ցուցադրել կարգաւորումները",
"column_header.unpin": "Հանել",
"column_subheading.settings": "Կարգավորումներ",
"community.column_settings.local_only": "Միայն ներքին",
"community.column_settings.media_only": "Media only",
"community.column_settings.remote_only": "Միայն հեռակա",
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
"column_subheading.settings": "Կարգաւորումներ",
"community.column_settings.local_only": "Միայն տեղական",
"community.column_settings.media_only": "Միայն մեդիա",
"community.column_settings.remote_only": "Միայն հեռակայ",
"compose_form.direct_message_warning": "Այս թութը տեսանելի կը լինի միայն նշուած օգտատէրերին։",
"compose_form.direct_message_warning_learn_more": "Իմանալ աւելին",
"compose_form.hashtag_warning": "Այս թութը չի հաշվառվի որեւէ պիտակի տակ, քանզի այն ծածուկ է։ Միայն հրապարակային թթերը հնարավոր է որոնել պիտակներով։",
"compose_form.hashtag_warning": "Այս թութը չի հաշուառուի որեւէ պիտակի տակ, քանզի այն ծածուկ է։ Միայն հրապարակային թթերը հնարաւոր է որոնել պիտակներով։",
"compose_form.lock_disclaimer": "Քո հաշիւը {locked} չէ։ Իւրաքանչիւրութիւն ոք կարող է հետեւել քեզ եւ տեսնել միայն հետեւողների համար նախատեսուած գրառումները։",
"compose_form.lock_disclaimer.lock": "փակ",
"compose_form.placeholder": "Ի՞նչ կա մտքիդ",
"compose_form.placeholder": "Ի՞նչ կայ մտքիդ",
"compose_form.poll.add_option": "Աւելացնել տարբերակ",
"compose_form.poll.duration": "Հարցման տեւողութիւնը",
"compose_form.poll.option_placeholder": "Տարբերակ {number}",
@ -111,16 +111,16 @@
"confirmations.delete.confirm": "Ջնջել",
"confirmations.delete.message": "Վստա՞հ ես, որ ուզում ես ջնջել այս թութը։",
"confirmations.delete_list.confirm": "Ջնջել",
"confirmations.delete_list.message": "Վստա՞հ ես, որ ուզում ես մշտապես ջնջել այս ցանկը։",
"confirmations.delete_list.message": "Վստա՞հ ես, որ ուզում ես մշտապէս ջնջել այս ցանկը։",
"confirmations.domain_block.confirm": "Թաքցնել ամբողջ տիրույթը",
"confirmations.domain_block.message": "Հաստատ֊հաստա՞տ վստահ ես, որ ուզում ես արգելափակել ամբողջ {domain} տիրույթը։ Սովորաբար մի երկու թիրախավորված արգելափակում կամ լռեցում բավական է ու նախընտրելի։",
"confirmations.domain_block.message": "Հաստատ֊հաստա՞տ վստահ ես, որ ուզում ես արգելափակել ամբողջ {domain} տիրոյթը։ Սովորաբար մի երկու թիրախաւորուած արգելափակում կամ լռեցում բաւական է ու նախընտրելի։",
"confirmations.logout.confirm": "Ելք",
"confirmations.logout.message": "Համոզո՞ւած ես, որ ուզում ես դուրս գալ",
"confirmations.mute.confirm": "Լռեցնել",
"confirmations.mute.explanation": "Սա թաքցնելու ա իրենց գրառումներն, ինչպէս նաեւ իրենց նշող գրառումներն, բայց իրենք միեւնոյն է կը կարողանան հետեւել ձեզ եւ տեսնել ձեր գրառումները։",
"confirmations.mute.message": "Վստա՞հ ես, որ ուզում ես {name}֊ին լռեցնել։",
"confirmations.redraft.confirm": "Ջնջել եւ խմբագրել նորից",
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
"confirmations.redraft.message": "Վստահ ե՞ս, որ ցանկանում ես ջնջել եւ վերախմբագրել այս թութը։ Դու կը կորցնես այս գրառման բոլոր պատասխանները, տարածումները եւ հաւանումները։",
"confirmations.reply.confirm": "Պատասխանել",
"confirmations.reply.message": "Այս պահին պատասխանելը կը չեղարկի ձեր՝ այս պահին անաւարտ հաղորդագրութիւնը։ Համոզուա՞ծ էք։",
"confirmations.unfollow.confirm": "Ապահետեւել",
@ -128,72 +128,73 @@
"conversation.delete": "Ջնջել խօսակցութիւնը",
"conversation.mark_as_read": "Նշել որպէս ընթերցուած",
"conversation.open": "Դիտել խօսակցութիւնը",
"conversation.with": "{names}֊երի հետ",
"conversation.with": "{names}-ի հետ",
"directory.federated": "Յայտնի դաշնեզերքից",
"directory.local": "{domain} տիրոյթից միայն",
"directory.new_arrivals": "Նորեկներ",
"directory.recently_active": "Վերջերս ակտիւ",
"embed.instructions": "Այս թութը քո կայքում ներդնելու համար կարող ես պատճէնել ներքինանալ կոդը։",
"embed.preview": "Ահա, թե ինչ տեսք կունենա այն՝",
"embed.preview": "Ահայ, թէ ինչ տեսք կը ունենայ այն՝",
"emoji_button.activity": "Զբաղմունքներ",
"emoji_button.custom": "Հատուկ",
"emoji_button.flags": "Դրոշներ",
"emoji_button.custom": "Յատուկ",
"emoji_button.flags": "Դրօշներ",
"emoji_button.food": "Կերուխում",
"emoji_button.label": "Էմոջի ավելացնել",
"emoji_button.label": "Էմոջի աւելացնել",
"emoji_button.nature": "Բնութիւն",
"emoji_button.not_found": "Նման էմոջիներ դեռ չեն հայտնաբերվել։ (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "Նման էմոջիներ դեռ չեն յայտնաբերուել։ (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "Առարկաներ",
"emoji_button.people": "Մարդիկ",
"emoji_button.recent": "Հաճախ օգտագործվող",
"emoji_button.recent": "Յաճախ օգտագործուող",
"emoji_button.search": "Որոնել…",
"emoji_button.search_results": "Որոնման արդիւնքներ",
"emoji_button.symbols": "Նշաններ",
"emoji_button.travel": "Ուղեւորութիւն եւ տեղանքներ",
"empty_column.account_suspended": "Հաշիւը արգելափակուած է",
"empty_column.account_timeline": "Այստեղ թթեր չկա՛ն։",
"empty_column.account_unavailable": "Անձնական էջը հասանելի չի",
"empty_column.blocks": "Դու դեռ ոչ մէկի չես արգելափակել։",
"empty_column.bookmarked_statuses": "Դու դեռ չունես որեւէ էջանշւած թութ։ Երբ էջանշես, դրանք կերեւան այստեղ։",
"empty_column.community": "Տեղական հոսքը դատա՛րկ է։ Հրապարակային մի բան գրիր շարժիչը խոդ տալու համար։",
"empty_column.bookmarked_statuses": "Դու դեռ չունես որեւէ էջանշւած թութ։ Երբ էջանշես, դրանք կը երեւան այստեղ։",
"empty_column.community": "Տեղական հոսքը դատարկ է։ Հրապարակային մի բան գրի՛ր շարժիչը գործարկելու համար։",
"empty_column.direct": "Դու դեռ չունես ոչ մի հասցէագրուած հաղորդագրութիւն։ Երբ ուղարկես կամ ստանաս որեւէ անձնական նամակ, այն այստեղ կերեւայ։",
"empty_column.domain_blocks": "Թաքցուած տիրոյթներ դեռ չկան։",
"empty_column.favourited_statuses": "Դու դեռ չունես որեւէ հաւանած թութ։ Երբ հաւանես, դրանք կերեւան այստեղ։",
"empty_column.favourites": "Այս թութը ոչ մէկ դեռ չի հաւանել։ Հաւանողները կերեւան այստեղ, երբ նշեն թութը հաւանած։",
"empty_column.follow_requests": "Դու դեռ չունես որեւէ հետեւելու յայտ։ Բոլոր նման յայտերը կը յայտնուեն այստեղ։",
"empty_column.hashtag": "Այս պիտակով դեռ ոչինչ չկա։",
"empty_column.home": "Քո հիմնական հոսքը դատա՛րկ է։ Այցելի՛ր {public}ը կամ օգտվիր որոնումից՝ այլ մարդկանց հանդիպելու համար։",
"empty_column.hashtag": "Այս պիտակով դեռ ոչինչ չկայ։",
"empty_column.home": "Քո հիմնական հոսքը դատարկ է։ Այցելի՛ր {public}ը կամ օգտուիր որոնումից՝ այլ մարդկանց հանդիպելու համար։",
"empty_column.home.public_timeline": "հրապարակային հոսք",
"empty_column.list": "Այս ցանկում դեռ ոչինչ չկա։ Երբ ցանկի անդամներից որեւէ մեկը նոր թութ գրի, այն կհայտնվի այստեղ։",
"empty_column.lists": "Դուք դեռ չունեք ստեղծած ցանկ։ Ցանկ ստեղծելուն պես այն կհայտնվի այստեղ։",
"empty_column.mutes": "Առայժմ ոչ ոքի չեք լռեցրել։",
"empty_column.list": "Այս ցանկում դեռ ոչինչ չկայ։ Երբ ցանկի անդամներից որեւէ մեկը նոր թութ գրի, այն կը յայտնուի այստեղ։",
"empty_column.lists": "Դուք դեռ չունէք ստեղծած ցանկ։ Ցանկ ստեղծելուն պէս այն կը յայտնուի այստեղ։",
"empty_column.mutes": "Առայժմ ոչ ոքի չէք լռեցրել։",
"empty_column.notifications": "Ոչ մի ծանուցում դեռ չունես։ Բզիր միւսներին՝ խօսակցութիւնը սկսելու համար։",
"empty_column.public": "Այստեղ բան չկա՛յ։ Հրապարակային մի բան գրիր կամ հետեւիր այլ հանգոյցներից էակների՝ այն լցնելու համար։",
"error.unexpected_crash.explanation": "Մեր ծրագրակազմում վրիպակի կամ դիտարկչի անհամատեղելիութեան պատճառով այս էջը չի կարող լիարժէք պատկերուել։",
"error.unexpected_crash.explanation_addons": "Այս էջի ճիշտ պատկերումը չի ստացում։ Խափանումը հաւանաբար առաջացել է դիտարկիչի յավելվածից կամ առցանց թարգմանիչից։",
"error.unexpected_crash.next_steps": "Փորձիր թարմացնել էջը։ Եթե դա չօգնի ապա կարող ես օգտվել Մաստադոնից ուրիշ դիտարկիչով կամ հավելվածով։",
"error.unexpected_crash.next_steps": "Փորձիր թարմացնել էջը։ Եթէ դա չօգնի ապա կարող ես օգտուել Մաստադոնից ուրիշ դիտարկիչով կամ յաւելուածով։",
"error.unexpected_crash.next_steps_addons": "Փորձիր անջատել յաւելուածները եւ թարմացնել էջը։ Եթե դա չօգնի, կարող ես օգտուել Մաստադոնից այլ դիտարկիչով կամ յաւելուածով։",
"errors.unexpected_crash.copy_stacktrace": "Պատճենել սթաքթրեյսը սեղմատախտակին",
"errors.unexpected_crash.report_issue": "Զեկուցել խնդրի մասին",
"follow_request.authorize": "Վավերացնել",
"follow_request.authorize": "Վաւերացնել",
"follow_request.reject": "Մերժել",
"follow_requests.unlocked_explanation": "Այս հարցումը ուղարկված է հաշվից, որի համար {domain}-ի անձնակազմը միացրել է ձեռքով ստուգում։",
"generic.saved": "Պահպանված է",
"follow_requests.unlocked_explanation": "Այս հարցումը ուղարկուած է հաշուից, որի համար {domain}-ի անձնակազմը միացրել է ձեռքով ստուգում։",
"generic.saved": "Պահպանուած է",
"getting_started.developers": "Մշակողներ",
"getting_started.directory": "Օգտատէրերի շտեմարան",
"getting_started.documentation": "Փաստաթղթեր",
"getting_started.heading": "Ինչպես սկսել",
"getting_started.heading": "Ինչպէս սկսել",
"getting_started.invite": "Հրաւիրել մարդկանց",
"getting_started.open_source_notice": "Մաստոդոնը բաց ելատեքստով ծրագրակազմ է։ Կարող ես ներդրում անել կամ վրեպներ զեկուցել ԳիթՀաբում՝ {github}։",
"getting_started.open_source_notice": "Մաստոդոնը բաց ելատեքստով ծրագրակազմ է։ Կարող ես ներդրում անել կամ վրէպներ զեկուցել ԳիթՀաբում՝ {github}։",
"getting_started.security": "Հաշուի կարգաւորումներ",
"getting_started.terms": "Ծառայութեան պայմանները",
"hashtag.column_header.tag_mode.all": "եւ {additional}",
"hashtag.column_header.tag_mode.any": "կամ {additional}",
"hashtag.column_header.tag_mode.none": "առանց {additional}",
"hashtag.column_settings.select.no_options_message": "Առաջարկներ չկան",
"hashtag.column_settings.select.placeholder": վելացրու հեշթեգեր…",
"hashtag.column_settings.select.placeholder": ւելացրու պիտկներ…",
"hashtag.column_settings.tag_mode.all": "Բոլորը",
"hashtag.column_settings.tag_mode.any": "Ցանկացածը",
"hashtag.column_settings.tag_mode.none": "Ոչ մեկը",
"hashtag.column_settings.tag_toggle": "Include additional tags in this column",
"hashtag.column_settings.tag_toggle": "Ներառել լրացուցիչ պիտակները այս սիւնակում ",
"home.column_settings.basic": "Հիմնական",
"home.column_settings.show_reblogs": "Ցուցադրել տարածածները",
"home.column_settings.show_replies": "Ցուցադրել պատասխանները",
@ -201,17 +202,17 @@
"home.show_announcements": "Ցուցադրել յայտարարութիւնները",
"intervals.full.days": "{number, plural, one {# օր} other {# օր}}",
"intervals.full.hours": "{number, plural, one {# ժամ} other {# ժամ}}",
"intervals.full.minutes": "{number, plural, one {# րոպե} other {# րոպե}}",
"introduction.federation.action": "Հաջորդ",
"intervals.full.minutes": "{number, plural, one {# րոպէ} other {# րոպէ}}",
"introduction.federation.action": "Յաջորդ",
"introduction.federation.federated.headline": "Դաշնային",
"introduction.federation.federated.text": "Դաշնեզերքի հարեւան հանգոյցների հանրային գրառումները կը յայտնուեն դաշնային հոսքում։",
"introduction.federation.home.headline": "Հիմնական",
"introduction.federation.home.text": "Այն անձանց թթերը ում հետևում ես, կը յայտնուեն հիմնական հոսքում։ Դու կարող ես հետեւել ցանկացած անձի ցանկացած հանգոյցից։",
"introduction.federation.local.headline": "Տեղային",
"introduction.federation.local.text": "Տեղական հոսքում կարող ես տեսնել քո հանգոյցի բոլոր հանրային գրառումները։",
"introduction.interactions.action": "Finish toot-orial!",
"introduction.interactions.action": "Աւարտել թթի դասընթացը",
"introduction.interactions.favourite.headline": "Նախընտրելի",
"introduction.interactions.favourite.text": "Փոխանցիր հեղինակին որ քեզ դուր է եկել իր թութը հավանելով այն։",
"introduction.interactions.favourite.text": "Փոխանցիր հեղինակին որ քեզ դուր է եկել իր թութը հաւանելով այն։",
"introduction.interactions.reblog.headline": "Տարածել",
"introduction.interactions.reblog.text": "Կիսիր այլ օգտատէրերի թութերը քո հետեւողների հետ տարածելով դրանք քո անձնական էջում։",
"introduction.interactions.reply.headline": "Պատասխանել",
@ -219,25 +220,25 @@
"introduction.welcome.action": "Գնացի՜նք։",
"introduction.welcome.headline": "Առաջին քայլեր",
"introduction.welcome.text": "Դաշնեզերքը ողջունում է ձեզ։ Շուտով կը կարողանաս ուղարկել նամակներ ու շփուել տարբեր հանգոյցների ընկերներիդ հետ։ Բայց մտապահիր {domain} հանգոյցը, այն իւրայատուկ է, այստեղ է պահւում քո հաշիւը։",
"keyboard_shortcuts.back": "ետ նավարկելու համար",
"keyboard_shortcuts.blocked": "արգելափակված օգտատերերի ցանկը բացելու համար",
"keyboard_shortcuts.back": "ետ նաւարկելու համար",
"keyboard_shortcuts.blocked": "արգելափակուած օգտատէրերի ցանկը բացելու համար",
"keyboard_shortcuts.boost": "տարածելու համար",
"keyboard_shortcuts.column": "սիւներից մէկի վրայ սեւեռուելու համար",
"keyboard_shortcuts.compose": "շարադրման տիրույթին սեւեռվելու համար",
"keyboard_shortcuts.compose": "շարադրման տիրոյթին սեւեռուելու համար",
"keyboard_shortcuts.description": "Նկարագրութիւն",
"keyboard_shortcuts.direct": "հասցեագրված գրվածքների հոսքը բացելու համար",
"keyboard_shortcuts.down": "ցանկով ներքեւ շարժվելու համար",
"keyboard_shortcuts.direct": "հասցէագրուած գրուածքների հոսքը բացելու համար",
"keyboard_shortcuts.down": "ցանկով ներքեւ շարժուելու համար",
"keyboard_shortcuts.enter": "թութը բացելու համար",
"keyboard_shortcuts.favourite": "հավանելու համար",
"keyboard_shortcuts.favourite": "հաւանելու համար",
"keyboard_shortcuts.favourites": "էջանիշերի ցուցակը բացելու համար",
"keyboard_shortcuts.federated": "դաշնային հոսքին անցնելու համար",
"keyboard_shortcuts.heading": "Ստեղնաշարի կարճատներ",
"keyboard_shortcuts.home": "անձնական հոսքին անցնելու համար",
"keyboard_shortcuts.hotkey": "Հատուկ ստեղն",
"keyboard_shortcuts.hotkey": "Յատուկ ստեղն",
"keyboard_shortcuts.legend": "այս ձեռնարկը ցուցադրելու համար",
"keyboard_shortcuts.local": "տեղական հոսքին անցնելու համար",
"keyboard_shortcuts.mention": "հեղինակին նշելու համար",
"keyboard_shortcuts.muted": "լռեցված օգտատերերի ցանկը բացելու համար",
"keyboard_shortcuts.muted": "լռեցուած օգտատէրերի ցանկը բացելու համար",
"keyboard_shortcuts.my_profile": "սեփական էջին անցնելու համար",
"keyboard_shortcuts.notifications": "ծանուցումների սիւնակը բացելու համար",
"keyboard_shortcuts.open_media": "ցուցադրել մեդիան",
@ -246,42 +247,41 @@
"keyboard_shortcuts.reply": "պատասխանելու համար",
"keyboard_shortcuts.requests": "հետեւելու հայցերի ցանկը դիտելու համար",
"keyboard_shortcuts.search": "որոնման դաշտին սեւեռվելու համար",
"keyboard_shortcuts.spoilers": "որպեսզի ցուցադրվի/թաքցվի CW դաշտը",
"keyboard_shortcuts.spoilers": "որպէսզի ցուցադրուի/թաքցուի CW դաշտը",
"keyboard_shortcuts.start": "«սկսել» սիւնակը բացելու համար",
"keyboard_shortcuts.toggle_hidden": "CW֊ի ետեւի տեքստը ցուցադրել֊թաքցնելու համար",
"keyboard_shortcuts.toggle_sensitivity": "մեդիան ցուցադրել֊թաքցնելու համար",
"keyboard_shortcuts.toot": "թարմ թութ սկսելու համար",
"keyboard_shortcuts.unfocus": "տեքստի/որոնման տիրույթից ապասեւեռվելու համար",
"keyboard_shortcuts.up": "ցանկով վերեւ շարժվելու համար",
"keyboard_shortcuts.unfocus": "տեքստի/որոնման տիրոյթից ապասեւեռուելու համար",
"keyboard_shortcuts.up": "ցանկով վերեւ շարժուելու համար",
"lightbox.close": "Փակել",
"lightbox.compress": "Compress image view box",
"lightbox.expand": "Expand image view box",
"lightbox.next": "Հաջորդ",
"lightbox.compress": "Փակել պատկերի դիտման պատուհանը",
"lightbox.expand": "Բացել պատկերի դիտման պատուհանը",
"lightbox.next": "Յաջորդ",
"lightbox.previous": "Նախորդ",
"lightbox.view_context": "Տեսնել ենթատեքստը",
"lists.account.add": "Ավելացնել ցանկին",
"lists.account.add": "Աւելացնել ցանկին",
"lists.account.remove": "Հանել ցանկից",
"lists.delete": "Ջնջել ցանկը",
"lists.edit": "Փոփոխել ցանկը",
"lists.edit.submit": "Փոխել վերնագիրը",
"lists.new.create": վելացնել ցանկ",
"lists.new.create": ւելացնել ցանկ",
"lists.new.title_placeholder": "Նոր ցանկի վերնագիր",
"lists.replies_policy.all_replies": "Ում հետևում եմ",
"lists.replies_policy.list_replies": "Ցանկի անդամները",
"lists.replies_policy.no_replies": "Ոչ ոք",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Փնտրել քո հետեւած մարդկանց մեջ",
"lists.replies_policy.followed": "Ցանկացած հետեւող օգտատէր",
"lists.replies_policy.list": "Ցանկի անդամներ",
"lists.replies_policy.none": "Ոչ ոք",
"lists.replies_policy.title": "Ցուցադրել պատասխանները՝",
"lists.search": "Փնտրել քո հետեւած մարդկանց մէջ",
"lists.subheading": "Քո ցանկերը",
"load_pending": "{count, plural, one {# նոր նիւթ} other {# նոր նիւթ}}",
"loading_indicator.label": "Բեռնվում է…",
"loading_indicator.label": "Բեռնւում է…",
"media_gallery.toggle_visible": "Ցուցադրել/թաքցնել",
"missing_indicator.label": "Չգտնվեց",
"missing_indicator.label": "Չգտնուեց",
"missing_indicator.sublabel": "Պաշարը չի գտնւում",
"mute_modal.duration": "Տևողություն",
"mute_modal.duration": "Տեւողութիւն",
"mute_modal.hide_notifications": "Թաքցնե՞լ ցանուցումներն այս օգտատիրոջից։",
"mute_modal.indefinite": "Անժամկետ",
"mute_modal.indefinite": "Անժամկէտ",
"navigation_bar.apps": "Դիւրակիր յաւելուածներ",
"navigation_bar.blocks": "Արգելափակված օգտատերեր",
"navigation_bar.blocks": "Արգելափակուած օգտատէրեր",
"navigation_bar.bookmarks": "Էջանիշեր",
"navigation_bar.community_timeline": "Տեղական հոսք",
"navigation_bar.compose": "Գրել նոր թութ",
@ -297,13 +297,13 @@
"navigation_bar.keyboard_shortcuts": "Ստեղնաշարի կարճատներ",
"navigation_bar.lists": "Ցանկեր",
"navigation_bar.logout": "Դուրս գալ",
"navigation_bar.mutes": "Լռեցրած օգտատերեր",
"navigation_bar.mutes": "Լռեցրած օգտատէրեր",
"navigation_bar.personal": "Անձնական",
"navigation_bar.pins": "Ամրացված թթեր",
"navigation_bar.pins": "Ամրացուած թթեր",
"navigation_bar.preferences": "Նախապատուութիւններ",
"navigation_bar.public_timeline": "Դաշնային հոսք",
"navigation_bar.security": "Անվտանգութիւն",
"notification.favourite": "{name} հավանեց թութդ",
"notification.favourite": "{name} հաւանեց թութդ",
"notification.follow": "{name} սկսեց հետեւել քեզ",
"notification.follow_request": "{name} քեզ հետեւելու հայց է ուղարկել",
"notification.mention": "{name} նշեց քեզ",
@ -333,15 +333,17 @@
"notifications.filter.follows": "Հետեւածները",
"notifications.filter.mentions": "Նշումները",
"notifications.filter.polls": "Հարցման արդիւնքները",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.filter.statuses": "Թարմացումներ հետեւորդներից",
"notifications.grant_permission": "Թոյլատրել։",
"notifications.group": "{count} ծանուցում",
"notifications.mark_as_read": "Համարել բոլոր ծանուցումները ընթերցած",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_denied": "Աշխատատիրոյթի ծանուցումներն անհասանելի են՝ դիտարկչի նախկինում մերժուած թոյլտուութիւնների հայցման հետեւանքով",
"notifications.permission_denied_alert": "Աշխատատիրոյթի ծանուցումները չեն կարող միացուել, քանի որ դիտարկչի թոյլտուութիւնները նախկինում մերժուել են",
"notifications.permission_required": "Աշխատատիրոյթի ծանուցումներն անհասանելի են, քանի որ անհրաժեշտ թոյլտուութիւնները բացակայում են։",
"notifications_permission_banner.enable": "Միացնել դիտարկչից ծանուցումները",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",
"picture_in_picture.restore": "Put it back",
"notifications_permission_banner.how_to_control": "Ծանուցումներ ստանալու համար, երբ Մաստոդոնը բաց չէ՝ ակտիւացրու աշխատատիրոյթի ծանուցումները։ Դու կարող ես ճշգրտօրէն վերահսկել թէ ինչպիսի փոխգործակցութիւններ առաջանան աշխատատիրոյթի ծանուցումներից՝ {icon}ի կոճակով՝ այն ակտիւացնելուց յետոյ։",
"notifications_permission_banner.title": "Ոչինչ բաց մի թող",
"picture_in_picture.restore": "Յետ բերել",
"poll.closed": "Փակ",
"poll.refresh": "Թարմացնել",
"poll.total_people": "{count, plural, one {# հոգի} other {# հոգի}}",
@ -351,8 +353,8 @@
"poll_button.add_poll": "Աւելացնել հարցում",
"poll_button.remove_poll": "Հեռացնել հարցումը",
"privacy.change": "Կարգաւորել թթի գաղտնիութիւնը",
"privacy.direct.long": "Թթել միայն նշված օգտատերերի համար",
"privacy.direct.short": "Հասցեագրված",
"privacy.direct.long": "Թթել միայն նշուած օգտատէրերի համար",
"privacy.direct.short": "Հասցէագրուած",
"privacy.private.long": "Թթել միայն հետեւողների համար",
"privacy.private.short": "Միայն հետեւողներին",
"privacy.public.long": "Թթել հրապարակային հոսքերում",
@ -376,12 +378,12 @@
"report.submit": "Ուղարկել",
"report.target": "Բողոքել {target}֊ի մասին",
"search.placeholder": "Փնտրել",
"search_popout.search_format": "Փնտրելու առաջադեմ ձեւ",
"search_popout.search_format": "Փնտրելու առաջադէմ ձեւ",
"search_popout.tips.full_text": "Պարզ տեքստը վերադարձնում է գրառումներդ, հաւանածներդ, տարածածներդ, որտեղ ես նշուած եղել, ինչպէս նաեւ նման օգտանուններ, անուններ եւ պիտակներ։",
"search_popout.tips.hashtag": "պիտակ",
"search_popout.tips.status": "թութ",
"search_popout.tips.text": "Հասարակ տեքստը կվերադարձնի համընկնող անուններ, օգտանուններ ու պիտակներ",
"search_popout.tips.user": "օգտատեր",
"search_popout.tips.text": "Հասարակ տեքստը կը վերադարձնի համընկնող անուններ, օգտանուններ ու պիտակներ",
"search_popout.tips.user": "օգտատէր",
"search_results.accounts": "Մարդիկ",
"search_results.hashtags": "Պիտակներ",
"search_results.statuses": "Թթեր",
@ -392,14 +394,14 @@
"status.block": "Արգելափակել @{name}֊ին",
"status.bookmark": "Էջանիշ",
"status.cancel_reblog_private": "Ապատարածել",
"status.cannot_reblog": "Այս թութը չի կարող տարածվել",
"status.copy": "Պատճենել գրառման հղումը",
"status.cannot_reblog": "Այս թութը չի կարող տարածուել",
"status.copy": "Պատճէնել գրառման յղումը",
"status.delete": "Ջնջել",
"status.detailed_status": "Շղթայի ընդլայնված դիտում",
"status.detailed_status": "Շղթայի ընդլայնուած դիտում",
"status.direct": "Նամակ գրել {name} -ին",
"status.embed": "Ներդնել",
"status.favourite": "Հավանել",
"status.filtered": "Զտված",
"status.favourite": "Հաւանել",
"status.filtered": "Զտուած",
"status.load_more": "Բեռնել աւելին",
"status.media_hidden": "մեդիաբովանդակութիւնը թաքցուած է",
"status.mention": "Նշել @{name}֊ին",
@ -408,7 +410,7 @@
"status.mute_conversation": "Լռեցնել խօսակցութիւնը",
"status.open": "Ընդարձակել այս թութը",
"status.pin": "Ամրացնել անձնական էջում",
"status.pinned": "Ամրացված թութ",
"status.pinned": "Ամրացուած թութ",
"status.read_more": "Կարդալ աւելին",
"status.reblog": "Տարածել",
"status.reblog_private": "Տարածել սեփական լսարանին",
@ -417,10 +419,10 @@
"status.redraft": "Ջնջել եւ վերակազմել",
"status.remove_bookmark": "Հեռացնել էջանիշերից",
"status.reply": "Պատասխանել",
"status.replyAll": "Պատասխանել թելին",
"status.replyAll": "Պատասխանել շղթային",
"status.report": "Բողոքել @{name}֊ից",
"status.sensitive_warning": "Կասկածելի բովանդակութիւն",
"status.share": "Կիսվել",
"status.share": "Կիսուել",
"status.show_less": "Պակաս",
"status.show_less_all": "Թաքցնել բոլոր նախազգուշացնումները",
"status.show_more": "Աւելին",
@ -430,7 +432,7 @@
"status.unmute_conversation": "Ապալռեցնել խօսակցութիւնը",
"status.unpin": "Հանել անձնական էջից",
"suggestions.dismiss": "Անտեսել առաջարկը",
"suggestions.header": "Միգուցե քեզ հետաքրքրի…",
"suggestions.header": "Միգուցէ քեզ հետաքրքրի…",
"tabs_bar.federated_timeline": "Դաշնային",
"tabs_bar.home": "Հիմնական",
"tabs_bar.local_timeline": "Տեղական",
@ -438,41 +440,41 @@
"tabs_bar.search": "Փնտրել",
"time_remaining.days": "{number, plural, one {մնաց # օր} other {մնաց # օր}}",
"time_remaining.hours": "{number, plural, one {# ժամ} other {# ժամ}} անց",
"time_remaining.minutes": "{number, plural, one {# րոպե} other {# րոպե}} անց",
"time_remaining.minutes": "{number, plural, one {# րոպէ} other {# րոպէ}} անց",
"time_remaining.moments": "Մնացել է մի քանի վարկեան",
"time_remaining.seconds": "{number, plural, one {# վարկեան} other {# վարկեան}} անց",
"timeline_hint.remote_resource_not_displayed": "{resource} այլ սպասարկիչներից չեն ցուցադրվել:",
"timeline_hint.resources.followers": "Հետևորդներ",
"timeline_hint.resources.follows": "Հետևել",
"timeline_hint.resources.follows": "Հետեւել",
"timeline_hint.resources.statuses": "Հին թութեր",
"trends.counter_by_accounts": "{count, plural, one {{counter} մարդ} other {{counter} մարդիկ}} խօսում են",
"trends.trending_now": "Այժմ արդիական",
"ui.beforeunload": "Քո սեւագիրը կկորի, եթե լքես Մաստոդոնը։",
"ui.beforeunload": "Քո սեւագիրը կը կորի, եթէ լքես Մաստոդոնը։",
"units.short.billion": "{count}մլրդ",
"units.short.million": "{count}մլն",
"units.short.thousand": "{count}Հազ.",
"upload_area.title": "Քաշիր ու նետիր՝ վերբեռնելու համար",
"upload_button.label": վելացնել մեդիա",
"upload_error.limit": "Ֆայլի վերբեռնման սահմանաչափը գերազանցված է։",
"upload_button.label": ւելացնել մեդիա",
"upload_error.limit": "Նիշքի վերբեռնման սահմանաչափը գերազանցուած է։",
"upload_error.poll": "Հարցումների հետ նիշք կցել հնարաւոր չէ։",
"upload_form.audio_description": "Նկարագրիր ձայնագրութեան բովանդակութիւնը լսողական խնդիրներով անձանց համար",
"upload_form.description": "Նկարագիր՝ տեսողական խնդիրներ ունեցողների համար",
"upload_form.edit": "Խմբագրել",
"upload_form.thumbnail": "Փոխել պատկերակը",
"upload_form.undo": "Հետարկել",
"upload_form.undo": "Յետարկել",
"upload_form.video_description": "Նկարագրիր տեսանիւթը լսողական կամ տեսողական խնդիրներով անձանց համար",
"upload_modal.analyzing_picture": "Լուսանկարի վերլուծում…",
"upload_modal.apply": "Կիրառել",
"upload_modal.choose_image": "Ընտրել նկար",
"upload_modal.description_placeholder": "Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։",
"upload_modal.detect_text": "Հայտնբերել տեքստը նկարից",
"upload_modal.description_placeholder": "Բել դղեակի ձախ ժամն օֆ ազգութեանը ցպահանջ չճշտած վնաս էր եւ փառք։",
"upload_modal.detect_text": "Յայտնաբերել տեքստը նկարից",
"upload_modal.edit_media": "Խմբագրել մեդիան",
"upload_modal.hint": "Սեղմէք եւ տեղաշարժէք նախադիտման շրջանակը՝ որ ընտրէք մանրապատկերում միշտ տեսանելի կէտը։",
"upload_modal.preparing_ocr": "Preparing OCR…",
"upload_modal.preparing_ocr": "Գրաճանաչման նախապատրաստում…",
"upload_modal.preview_label": "Նախադիտում ({ratio})",
"upload_progress.label": "Վերբեռնվում է…",
"video.close": "Փակել տեսագրութիւնը",
"video.download": "Ներբեռնել ֆայլը",
"video.download": "Ներբեռնել նիշքը",
"video.exit_fullscreen": "Անջատել լիաէկրան դիտումը",
"video.expand": "Ընդարձակել տեսագրութիւնը",
"video.fullscreen": "Լիաէկրան",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Hasil pencarian",
"emoji_button.symbols": "Simbol",
"emoji_button.travel": "Tempat Wisata",
"empty_column.account_suspended": "Akun ditangguhkan",
"empty_column.account_timeline": "Tidak ada toot di sini!",
"empty_column.account_unavailable": "Profil tidak tersedia",
"empty_column.blocks": "Anda belum memblokir siapapun.",
@ -258,7 +259,6 @@
"lightbox.expand": "Besarkan kotak tampilan gambar",
"lightbox.next": "Selanjutnya",
"lightbox.previous": "Sebelumnya",
"lightbox.view_context": "Lihat konteks",
"lists.account.add": "Tambah ke daftar",
"lists.account.remove": "Hapus dari daftar",
"lists.delete": "Hapus daftar",
@ -266,9 +266,9 @@
"lists.edit.submit": "Ubah judul",
"lists.new.create": "Tambah daftar",
"lists.new.title_placeholder": "Judul daftar baru",
"lists.replies_policy.all_replies": "Siapapun pengguna yang diikuti",
"lists.replies_policy.list_replies": "Anggota di daftar tersebut",
"lists.replies_policy.no_replies": "Tidak ada satu pun",
"lists.replies_policy.followed": "Siapapun pengguna yang diikuti",
"lists.replies_policy.list": "Anggota di daftar tersebut",
"lists.replies_policy.none": "Tidak ada satu pun",
"lists.replies_policy.title": "Tampilkan balasan ke:",
"lists.search": "Cari di antara orang yang Anda ikuti",
"lists.subheading": "Daftar Anda",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Sebutan",
"notifications.filter.polls": "Hasil japat",
"notifications.filter.statuses": "Pembaruan dari orang yang Anda ikuti",
"notifications.grant_permission": "Setujui izin.",
"notifications.group": "{count} notifikasi",
"notifications.mark_as_read": "Tandai setiap notifikasi sebagai sudah dibaca",
"notifications.permission_denied": "Tidak dapat mengaktifkan notifikasi desktop karena izin ditolak.",
"notifications.permission_denied_alert": "Notifikasi desktop tidak dapat diaktifkan karena izin peramban telah ditolak sebelumnya",
"notifications.permission_required": "Notifikasi desktop tidak tersedia karena izin yang dibutuhkan belum disetujui.",
"notifications_permission_banner.enable": "Aktifkan notifikasi desktop",
"notifications_permission_banner.how_to_control": "Untuk menerima notifikasi saat Mastodon terbuka, aktifkan notifikasi desktop. Anda dapat mengendalikan tipe interaksi mana yang ditampilkan notifikasi desktop melalui tombol {icon} di atas saat sudah aktif.",
"notifications_permission_banner.title": "Jangan lewatkan apapun",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Search results",
"emoji_button.symbols": "Symbols",
"emoji_button.travel": "Travel & Places",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "No toots here!",
"empty_column.account_unavailable": "Profile unavailable",
"empty_column.blocks": "You haven't blocked any users yet.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Next",
"lightbox.previous": "Previous",
"lightbox.view_context": "View context",
"lists.account.add": "Add to list",
"lists.account.remove": "Remove from list",
"lists.delete": "Delete list",
@ -266,9 +266,9 @@
"lists.edit.submit": "Change title",
"lists.new.create": "Add list",
"lists.new.title_placeholder": "New list title",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Search among people you follow",
"lists.subheading": "Your lists",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Mentions",
"notifications.filter.polls": "Poll results",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} notifications",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Leitarniðurstöður",
"emoji_button.symbols": "Tákn",
"emoji_button.travel": "Ferðalög og staðir",
"empty_column.account_suspended": "Notandaaðgangur í bið",
"empty_column.account_timeline": "Engin tíst hér!",
"empty_column.account_unavailable": "Notandasnið ekki tiltækt",
"empty_column.blocks": "Þú hefur ekki ennþá útilokað neina notendur.",
@ -258,7 +259,6 @@
"lightbox.expand": "Fletta út myndskoðunarreit",
"lightbox.next": "Næsta",
"lightbox.previous": "Fyrra",
"lightbox.view_context": "Skoða samhengi",
"lists.account.add": "Bæta á lista",
"lists.account.remove": "Fjarlægja af lista",
"lists.delete": "Eyða lista",
@ -266,9 +266,9 @@
"lists.edit.submit": "Breyta titli",
"lists.new.create": "Bæta við lista",
"lists.new.title_placeholder": "Titill á nýjum lista",
"lists.replies_policy.all_replies": "Allra notenda sem fylgst er með",
"lists.replies_policy.list_replies": "Meðlima listans",
"lists.replies_policy.no_replies": "Engra",
"lists.replies_policy.followed": "Allra notenda sem fylgst er með",
"lists.replies_policy.list": "Meðlima listans",
"lists.replies_policy.none": "Engra",
"lists.replies_policy.title": "Sýna svör til:",
"lists.search": "Leita meðal þeirra sem þú fylgist með",
"lists.subheading": "Listarnir þínir",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Tilvísanir",
"notifications.filter.polls": "Niðurstöður könnunar",
"notifications.filter.statuses": "Uppfærslur frá fólki sem þú fylgist með",
"notifications.grant_permission": "Veita heimild.",
"notifications.group": "{count} tilkynningar",
"notifications.mark_as_read": "Merkja allar tilkynningar sem lesnar",
"notifications.permission_denied": "Tilkynningar á skjáborði eru ekki aðgengilegar megna áður hafnaðra beiðna fyrir vafra",
"notifications.permission_denied_alert": "Ekki var hægt að virkja tilkynningar á skjáborði, þar sem heimildum fyrir vafra var áður hafnað",
"notifications.permission_required": "Tilkynningar á skjáborði eru ekki aðgengilegar þar sem nauðsynlegar heimildir hafa ekki verið veittar.",
"notifications_permission_banner.enable": "Virkja tilkynningar á skjáborði",
"notifications_permission_banner.how_to_control": "Til að taka á móti tilkynningum þegar Mastodon er ekki opið, skaltu virkja tilkynningar á skjáborði. Þegar þær eru orðnar virkar geturðu stýrt nákvæmlega hverskonar atvik framleiða tilkynningar með því að nota {icon}-hnappinn hér fyrir ofan.",
"notifications_permission_banner.title": "Aldrei missa af neinu",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Risultati della ricerca",
"emoji_button.symbols": "Simboli",
"emoji_button.travel": "Viaggi & Luoghi",
"empty_column.account_suspended": "Account sospeso",
"empty_column.account_timeline": "Nessun toot qui!",
"empty_column.account_unavailable": "Profilo non disponibile",
"empty_column.blocks": "Non hai ancora bloccato alcun utente.",
@ -258,7 +259,6 @@
"lightbox.expand": "Espandi casella di visualizzazione immagine",
"lightbox.next": "Successivo",
"lightbox.previous": "Precedente",
"lightbox.view_context": "Mostra contesto",
"lists.account.add": "Aggiungi alla lista",
"lists.account.remove": "Togli dalla lista",
"lists.delete": "Elimina lista",
@ -266,9 +266,9 @@
"lists.edit.submit": "Cambia titolo",
"lists.new.create": "Aggiungi lista",
"lists.new.title_placeholder": "Titolo della nuova lista",
"lists.replies_policy.all_replies": "Qualsiasi utente seguito",
"lists.replies_policy.list_replies": "Iscritti alla lista",
"lists.replies_policy.no_replies": "Nessuno",
"lists.replies_policy.followed": "Qualsiasi utente seguito",
"lists.replies_policy.list": "Iscritti alla lista",
"lists.replies_policy.none": "Nessuno",
"lists.replies_policy.title": "Mostra risposte a:",
"lists.search": "Cerca tra le persone che segui",
"lists.subheading": "Le tue liste",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Menzioni",
"notifications.filter.polls": "Risultati del sondaggio",
"notifications.filter.statuses": "Aggiornamenti dalle persone che segui",
"notifications.grant_permission": "Dai il permesso.",
"notifications.group": "{count} notifiche",
"notifications.mark_as_read": "Segna tutte le notifiche come lette",
"notifications.permission_denied": "Impossibile abilitare le notifiche sul desktop perché il permesso è stato negato.",
"notifications.permission_denied_alert": "Le notifiche sul desktop non possono essere abilitate, poiché il permesso nel browser è stato negato in precedenza",
"notifications.permission_required": "Le notifiche desktop non sono disponibili perché l'autorizzazione richiesta non è stata concessa.",
"notifications_permission_banner.enable": "Abilita le notifiche sul desktop",
"notifications_permission_banner.how_to_control": "Per ricevere notifiche quando Mastodon non è aperto, abilita le notifiche desktop. Puoi controllare con precisione quali tipi di interazioni generano notifiche desktop tramite il pulsante {icon} qui sopra, dopo averle abilitate.",
"notifications_permission_banner.title": "Non perderti mai nulla",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "検索結果",
"emoji_button.symbols": "記号",
"emoji_button.travel": "旅行と場所",
"empty_column.account_suspended": "アカウントは停止されています",
"empty_column.account_timeline": "トゥートがありません!",
"empty_column.account_unavailable": "プロフィールは利用できません",
"empty_column.blocks": "まだ誰もブロックしていません。",
@ -254,11 +255,10 @@
"keyboard_shortcuts.unfocus": "トゥート入力欄・検索欄から離れる",
"keyboard_shortcuts.up": "カラム内一つ上に移動",
"lightbox.close": "閉じる",
"lightbox.compress": "Compress image view box",
"lightbox.expand": "Expand image view box",
"lightbox.compress": "画像ビューボックスを閉じる",
"lightbox.expand": "画像ビューボックスを開く",
"lightbox.next": "次",
"lightbox.previous": "前",
"lightbox.view_context": "トゥートを表示",
"lists.account.add": "リストに追加",
"lists.account.remove": "リストから外す",
"lists.delete": "リストを削除",
@ -266,9 +266,9 @@
"lists.edit.submit": "タイトルを変更",
"lists.new.create": "リストを作成",
"lists.new.title_placeholder": "新規リスト名",
"lists.replies_policy.all_replies": "フォロー中のユーザー全員",
"lists.replies_policy.list_replies": "リストのメンバー",
"lists.replies_policy.no_replies": "表示しない",
"lists.replies_policy.followed": "フォロー中のユーザー全員",
"lists.replies_policy.list": "リストのメンバー",
"lists.replies_policy.none": "表示しない",
"lists.replies_policy.title": "リプライを表示:",
"lists.search": "フォローしている人の中から検索",
"lists.subheading": "あなたのリスト",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "返信",
"notifications.filter.polls": "アンケート結果",
"notifications.filter.statuses": "フォローしている人の新着情報",
"notifications.grant_permission": "権限の付与",
"notifications.group": "{count} 件の通知",
"notifications.mark_as_read": "すべて既読にする",
"notifications.permission_denied": "ブラウザの通知が拒否されているためデスクトップ通知は利用できません",
"notifications.permission_denied_alert": "ブラウザの通知が拒否されているためデスクトップ通知を有効にできません",
"notifications.permission_required": "必要な権限が付与されていないため、デスクトップ通知は利用できません。",
"notifications_permission_banner.enable": "デスクトップ通知を有効にする",
"notifications_permission_banner.how_to_control": "Mastodon を閉じている間でも通知を受信するにはデスクトップ通知を有効にしてください。有効にすると上の {icon} ボタンから通知の内容を細かくカスタマイズできます。",
"notifications_permission_banner.title": "お見逃しなく",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "ძებნის შედეგები",
"emoji_button.symbols": "სიმბოლოები",
"emoji_button.travel": "მოგზაურობა და ადგილები",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "No toots here!",
"empty_column.account_unavailable": "Profile unavailable",
"empty_column.blocks": "You haven't blocked any users yet.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "შემდეგი",
"lightbox.previous": "წინა",
"lightbox.view_context": "View context",
"lists.account.add": "სიაში დამატება",
"lists.account.remove": "სიიდან ამოშლა",
"lists.delete": "სიის წაშლა",
@ -266,9 +266,9 @@
"lists.edit.submit": "Change title",
"lists.new.create": "სიის დამატება",
"lists.new.title_placeholder": "ახალი სიის სათაური",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "ძებნა ადამიანებს შორის რომელთაც მიჰყვებით",
"lists.subheading": "თქვენი სიები",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Mentions",
"notifications.filter.polls": "Poll results",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} შეტყობინება",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Igemmaḍ n unadi",
"emoji_button.symbols": "Izamulen",
"emoji_button.travel": "Imeḍqan d Yinigen",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "Ulac tijewwaqin dagi!",
"empty_column.account_unavailable": "Ur nufi ara amaɣnu-ayi",
"empty_column.blocks": "Ur tesḥebseḍ ula yiwen n umseqdac ar tura.",
@ -258,7 +259,6 @@
"lightbox.expand": "Simeɣer tamnaḍt n uskan n tugna",
"lightbox.next": "Γer zdat",
"lightbox.previous": "Γer deffir",
"lightbox.view_context": "Ẓer amnaḍ",
"lists.account.add": "Rnu ɣer tebdart",
"lists.account.remove": "Kkes seg tebdart",
"lists.delete": "Kkes tabdart",
@ -266,9 +266,9 @@
"lists.edit.submit": "Beddel azwel",
"lists.new.create": "Rnu tabdart",
"lists.new.title_placeholder": "Azwel amaynut n tebdart",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "Ula yiwen",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Ssken-d tiririyin i:",
"lists.search": "Nadi gar yemdanen i teṭṭafaṛeḍ",
"lists.subheading": "Tibdarin-ik·im",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Abdar",
"notifications.filter.polls": "Igemmaḍ n usenqed",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} n tilɣa",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "D awezɣi ad yili wermad n yilɣa n tnarit axateṛ turagt tettwagdel.",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",
@ -468,7 +470,7 @@
"upload_modal.detect_text": "Sefru-d aḍris seg tugna",
"upload_modal.edit_media": "Ẓreg taɣwalt",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preparing_ocr": "Preparing OCR…",
"upload_modal.preparing_ocr": "Aheyyi n OCR…",
"upload_modal.preview_label": "Taskant ({ratio})",
"upload_progress.label": "Asali iteddu...",
"video.close": "Mdel tabidyutt",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Іздеу нәтижелері",
"emoji_button.symbols": "Таңбалар",
"emoji_button.travel": "Саяхат",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "Жазба жоқ ешқандай!",
"empty_column.account_unavailable": "Профиль қолжетімді емес",
"empty_column.blocks": "Ешкімді бұғаттамағансыз.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Келесі",
"lightbox.previous": "Алдыңғы",
"lightbox.view_context": "Контексті көрсет",
"lists.account.add": "Тізімге қосу",
"lists.account.remove": "Тізімнен шығару",
"lists.delete": "Тізімді өшіру",
@ -266,9 +266,9 @@
"lists.edit.submit": "Тақырыбын өзгерту",
"lists.new.create": "Тізім құру",
"lists.new.title_placeholder": "Жаңа тізім аты",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Сіз іздеген адамдар арасында іздеу",
"lists.subheading": "Тізімдеріңіз",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Аталымдар",
"notifications.filter.polls": "Сауалнама нәтижелері",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} ескертпе",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Search results",
"emoji_button.symbols": "Symbols",
"emoji_button.travel": "Travel & Places",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "No toots here!",
"empty_column.account_unavailable": "Profile unavailable",
"empty_column.blocks": "You haven't blocked any users yet.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Next",
"lightbox.previous": "Previous",
"lightbox.view_context": "View context",
"lists.account.add": "Add to list",
"lists.account.remove": "Remove from list",
"lists.delete": "Delete list",
@ -266,9 +266,9 @@
"lists.edit.submit": "Change title",
"lists.new.create": "Add list",
"lists.new.title_placeholder": "New list title",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Search among people you follow",
"lists.subheading": "Your lists",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Mentions",
"notifications.filter.polls": "Poll results",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} notifications",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "검색 결과",
"emoji_button.symbols": "기호",
"emoji_button.travel": "여행과 장소",
"empty_column.account_suspended": "계정 정지됨",
"empty_column.account_timeline": "여긴 툿이 없어요!",
"empty_column.account_unavailable": "프로필 사용 불가",
"empty_column.blocks": "아직 아무도 차단하지 않았습니다.",
@ -254,11 +255,10 @@
"keyboard_shortcuts.unfocus": "작성창에서 포커스 해제",
"keyboard_shortcuts.up": "리스트에서 위로 이동",
"lightbox.close": "닫기",
"lightbox.compress": "Compress image view box",
"lightbox.expand": "Expand image view box",
"lightbox.compress": "이미지 박스 압축",
"lightbox.expand": "이미지 박스 확장",
"lightbox.next": "다음",
"lightbox.previous": "이전",
"lightbox.view_context": "게시물 보기",
"lists.account.add": "리스트에 추가",
"lists.account.remove": "리스트에서 제거",
"lists.delete": "리스트 삭제",
@ -266,9 +266,9 @@
"lists.edit.submit": "제목 수정",
"lists.new.create": "리스트 추가",
"lists.new.title_placeholder": "새 리스트의 이름",
"lists.replies_policy.all_replies": "팔로우 한 사용자 누구나",
"lists.replies_policy.list_replies": "목록의 멤버들",
"lists.replies_policy.no_replies": "아무도 없음",
"lists.replies_policy.followed": "팔로우 한 사용자 누구나",
"lists.replies_policy.list": "리스트의 구성원들",
"lists.replies_policy.none": "아무도 없음",
"lists.replies_policy.title": "답글 표시:",
"lists.search": "팔로우 중인 사람들 중에서 찾기",
"lists.subheading": "당신의 리스트",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "멘션",
"notifications.filter.polls": "투표 결과",
"notifications.filter.statuses": "팔로우 하는 사람들의 최신 게시물",
"notifications.grant_permission": "권한 부여.",
"notifications.group": "{count} 개의 알림",
"notifications.mark_as_read": "모든 알림을 읽은 상태로 표시",
"notifications.permission_denied": "권한이 거부되었기 때문에 데스크탑 알림을 활성화할 수 없음",
"notifications.permission_denied_alert": "이전에 브라우저 권한이 거부되었기 때문에, 데스크탑 알림이 활성화 될 수 없습니다.",
"notifications.permission_required": "필요한 권한이 승인되지 않아 데스크탑 알림을 사용할 수 없습니다.",
"notifications_permission_banner.enable": "데스크탑 알림 활성화",
"notifications_permission_banner.how_to_control": "마스토돈이 열려 있지 않을 때에도 알림을 받으려면, 데스크탑 알림을 활성화 하세요. 당신은 어떤 종류의 반응이 데스크탑 알림을 발생할 지를 {icon} 버튼을 통해 세세하게 설정할 수 있습니다.",
"notifications_permission_banner.title": "아무것도 놓치지 마세요",
@ -448,9 +450,9 @@
"trends.counter_by_accounts": "{counter} 명이 말하는 중",
"trends.trending_now": "지금 유행중",
"ui.beforeunload": "지금 나가면 저장되지 않은 항목을 잃게 됩니다.",
"units.short.billion": "{count}십억",
"units.short.million": "{count}백만",
"units.short.thousand": "{count}",
"units.short.billion": "{count}B",
"units.short.million": "{count}B",
"units.short.thousand": "{count}K",
"upload_area.title": "드래그 & 드롭으로 업로드",
"upload_button.label": "미디어 추가 (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "파일 업로드 제한에 도달했습니다.",

View file

@ -1,5 +1,5 @@
{
"account.account_note_header": "تێبینیتێبینی",
"account.account_note_header": "تێبینی ",
"account.add_or_remove_from_list": "زیادکردن یان سڕینەوە لە پێرستەکان",
"account.badges.bot": "بوت",
"account.badges.group": "گرووپ",
@ -149,6 +149,7 @@
"emoji_button.search_results": "ئەنجامەکانی گەڕان",
"emoji_button.symbols": "هێماکان",
"emoji_button.travel": "گەشت & شوێنەکان",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "لێرە هیچ توتەک نییە!",
"empty_column.account_unavailable": "پرۆفایل بەردەست نیە",
"empty_column.blocks": "تۆ هێشتا هیچ بەکارهێنەرێکت بلۆک نەکردووە.",
@ -254,11 +255,10 @@
"keyboard_shortcuts.unfocus": "بۆ دروستکردنی ناوچەی دەق/گەڕان",
"keyboard_shortcuts.up": "بۆ ئەوەی لە لیستەکەدا بڕۆیت",
"lightbox.close": "دابخە",
"lightbox.compress": "Compress image view box",
"lightbox.expand": "Expand image view box",
"lightbox.compress": "سندوقی نیشاندانی وێنە بپەستێنە",
"lightbox.expand": "فراوانکردنی سندوقی بینینی وێنە",
"lightbox.next": "داهاتوو",
"lightbox.previous": "پێشوو",
"lightbox.view_context": "پێشاندانی دەق",
"lists.account.add": "زیادکردن بۆ لیست",
"lists.account.remove": "لابردن لە لیست",
"lists.delete": "سڕینەوەی لیست",
@ -266,9 +266,9 @@
"lists.edit.submit": "گۆڕینی ناونیشان",
"lists.new.create": "زیادکردنی لیست",
"lists.new.title_placeholder": "ناونیشانی لیستی نوێ",
"lists.replies_policy.all_replies": "هەربەکارهێنەرێکی شوێنکەوتوو",
"lists.replies_policy.list_replies": "ئەندامانی لیستەکە",
"lists.replies_policy.no_replies": "هیچکەس",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "پیشاندانی وەڵامەکان بۆ:",
"lists.search": "بگەڕێ لەناو ئەو کەسانەی کە شوێنیان کەوتویت",
"lists.subheading": "لیستەکانت",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "ئاماژەکان",
"notifications.filter.polls": "ئەنجامەکانی ڕاپرسی",
"notifications.filter.statuses": "نوێکردنەوەکان ئەو کەسانەی کە پەیڕەوی دەکەیت",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} ئاگانامە",
"notifications.mark_as_read": "هەموو ئاگانامەکان وەک خوێندراوەتەوە نیشان بکە",
"notifications.permission_denied": "ناتوانرێت ئاگانامەکانی دێسکتۆپ چالاک بکرێت وەک ڕێپێدان ڕەتکرایەوە.",
"notifications.permission_denied_alert": "ناتوانرێت ئاگانامەکانی دێسکتۆپ چالاک بکرێت، چونکە پێشتر مۆڵەتی وێبگەڕ ڕەتکرایەوە",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "چالاککردنی ئاگانامەکانی دێسکتۆپ",
"notifications_permission_banner.how_to_control": "بۆ وەرگرتنی ئاگانامەکان کاتێک ماستۆدۆن نەکراوەیە، ئاگانامەکانی دێسکتۆپ چالاک بکە. دەتوانیت بە وردی کۆنترۆڵی جۆری کارلێکەکان بکەیت کە ئاگانامەکانی دێسکتۆپ دروست دەکەن لە ڕێگەی دوگمەی {icon} لەسەرەوە کاتێک چالاک دەکرێن.",
"notifications_permission_banner.title": "هەرگیز شتێک لە دەست مەدە",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Search results",
"emoji_button.symbols": "Symbols",
"emoji_button.travel": "Travel & Places",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "No toots here!",
"empty_column.account_unavailable": "Profile unavailable",
"empty_column.blocks": "You haven't blocked any users yet.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Next",
"lightbox.previous": "Previous",
"lightbox.view_context": "View context",
"lists.account.add": "Add to list",
"lists.account.remove": "Remove from list",
"lists.delete": "Delete list",
@ -266,9 +266,9 @@
"lists.edit.submit": "Change title",
"lists.new.create": "Add list",
"lists.new.title_placeholder": "New list title",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Search among people you follow",
"lists.subheading": "Your lists",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Mentions",
"notifications.filter.polls": "Poll results",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} notifications",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Meklēšanas rezultāti",
"emoji_button.symbols": "Simboli",
"emoji_button.travel": "Ceļošana & Vietas",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "Šeit ziņojumu nav!",
"empty_column.account_unavailable": "Profile unavailable",
"empty_column.blocks": "Tu neesi vēl nevienu bloķējis.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Next",
"lightbox.previous": "Previous",
"lightbox.view_context": "View context",
"lists.account.add": "Add to list",
"lists.account.remove": "Remove from list",
"lists.delete": "Delete list",
@ -266,9 +266,9 @@
"lists.edit.submit": "Change title",
"lists.new.create": "Add list",
"lists.new.title_placeholder": "New list title",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Search among people you follow",
"lists.subheading": "Your lists",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Mentions",
"notifications.filter.polls": "Poll results",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} notifications",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Резултати од барање",
"emoji_button.symbols": "Симболи",
"emoji_button.travel": "Патувања и Места",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "No toots here!",
"empty_column.account_unavailable": "Недостапен профил",
"empty_column.blocks": "Немате сеуште блокирано корисници.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Next",
"lightbox.previous": "Previous",
"lightbox.view_context": "View context",
"lists.account.add": "Add to list",
"lists.account.remove": "Remove from list",
"lists.delete": "Delete list",
@ -266,9 +266,9 @@
"lists.edit.submit": "Change title",
"lists.new.create": "Add list",
"lists.new.title_placeholder": "New list title",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Search among people you follow",
"lists.subheading": "Your lists",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Спомнувања",
"notifications.filter.polls": "Резултати од анкета",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} нотификации",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -2,17 +2,17 @@
"account.account_note_header": "കുറിപ്പ്",
"account.add_or_remove_from_list": "പട്ടികയിൽ ചേർക്കുകയോ അല്ലെങ്കിൽ മാറ്റുകയോ ചെയ്യുക",
"account.badges.bot": "റോബോട്ട്",
"account.badges.group": "കൂട്ടം",
"account.block": "@{name} നെ ബ്ലോക്ക് ചെയ്യുക",
"account.badges.group": "ഗ്രൂപ്പ്",
"account.block": "@{name} -നെ തടയുക",
"account.block_domain": "{domain} ൽ നിന്നുള്ള എല്ലാം മറയ്കുക",
"account.blocked": "തടഞ്ഞു",
"account.browse_more_on_origin_server": "യഥാർത്ഥ പ്രൊഫൈലിലേക്ക് പോവുക",
"account.cancel_follow_request": "പിന്തുടരാനുള്ള അപേക്ഷ നിരസിക്കുക",
"account.direct": "@{name} ന് നേരിട്ട് മെസേജ് അയക്കുക",
"account.disable_notifications": "Stop notifying me when @{name} posts",
"account.disable_notifications": "@{name} പോസ്റ്റുചെയ്യുന്നത് എന്നെ അറിയിക്കുന്നത് നിർത്തുക",
"account.domain_blocked": "മേഖല മറയ്ക്കപ്പെട്ടിരിക്കുന്നു",
"account.edit_profile": "പ്രൊഫൈൽ തിരുത്തുക",
"account.enable_notifications": "Notify me when @{name} posts",
"account.enable_notifications": "@{name} പോസ്റ്റ് ചെയ്യുമ്പോൾ എന്നെ അറിയിക്കുക",
"account.endorse": "പ്രൊഫൈലിൽ പ്രകടമാക്കുക",
"account.follow": "പിന്തുടരുക",
"account.followers": "പിന്തുടരുന്നവർ",
@ -38,7 +38,7 @@
"account.requested": "അനുവാദത്തിനായി കാത്തിരിക്കുന്നു. പിന്തുടരാനുള്ള അപേക്ഷ റദ്ദാക്കുവാൻ ഞെക്കുക",
"account.share": "@{name} ന്റെ പ്രൊഫൈൽ പങ്കുവെക്കുക",
"account.show_reblogs": "@{name} ൽ നിന്നുള്ള ബൂസ്റ്റുകൾ കാണിക്കുക",
"account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
"account.statuses_counter": "{count, plural, one {{counter} ടൂട്ട്} other {{counter} ടൂട്ടുകൾ}}",
"account.unblock": "ബ്ലോക്ക് മാറ്റുക @{name}",
"account.unblock_domain": "{domain} വെളിപ്പെടുത്തുക",
"account.unendorse": "പ്രൊഫൈലിൽ പ്രകടമാക്കാതിരിക്കുക",
@ -67,7 +67,7 @@
"column.domain_blocks": "മറയ്ക്കപ്പെട്ട മേഖലകൾ",
"column.favourites": "പ്രിയപ്പെട്ടവ",
"column.follow_requests": "പിന്തുടരാനുള്ള അഭ്യർത്ഥനകൾ",
"column.home": "ഭവന",
"column.home": "ഹോ",
"column.lists": "പട്ടികകൾ",
"column.mutes": "നിശബ്ദമാക്കപ്പെട്ട ഉപയോക്താക്കൾ",
"column.notifications": "അറിയിപ്പുകൾ",
@ -105,17 +105,17 @@
"compose_form.spoiler.unmarked": "എഴുത്ത് മറയ്ക്കപ്പെട്ടിട്ടില്ല",
"compose_form.spoiler_placeholder": "നിങ്ങളുടെ മുന്നറിയിപ്പ് ഇവിടെ എഴുതുക",
"confirmation_modal.cancel": "റദ്ദാക്കുക",
"confirmations.block.block_and_report": "Block & Report",
"confirmations.block.block_and_report": "തടയുകയും റിപ്പോർട്ടും ചെയ്യുക",
"confirmations.block.confirm": "തടയുക",
"confirmations.block.message": "Are you sure you want to block {name}?",
"confirmations.block.message": "{name} തടയാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?",
"confirmations.delete.confirm": "മായ്ക്കുക",
"confirmations.delete.message": "Are you sure you want to delete this status?",
"confirmations.delete.message": "ഈ ടൂട്ട് ഇല്ലാതാക്കണം എന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?",
"confirmations.delete_list.confirm": "മായ്ക്കുക",
"confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
"confirmations.domain_block.confirm": "Hide entire domain",
"confirmations.delete_list.message": "ഈ പട്ടിക എന്നെന്നേക്കുമായി നീക്കം ചെയ്യാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?",
"confirmations.domain_block.confirm": "മുഴുവൻ ഡൊമെയ്‌നും തടയുക",
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
"confirmations.logout.confirm": "പുറത്തുകടക്കുക",
"confirmations.logout.message": "Are you sure you want to log out?",
"confirmations.logout.message": "നിങ്ങൾക്ക് ലോഗ് ഔട്ട് ചെയ്യണമെന്ന് ഉറപ്പാണോ?",
"confirmations.mute.confirm": "നിശ്ശബ്ദമാക്കുക",
"confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
"confirmations.mute.message": "Are you sure you want to mute {name}?",
@ -133,7 +133,7 @@
"directory.local": "{domain} ൽ നിന്ന് മാത്രം",
"directory.new_arrivals": "പുതിയ വരവുകൾ",
"directory.recently_active": "അടുത്തിടെയായി സജീവമായ",
"embed.instructions": "Embed this status on your website by copying the code below.",
"embed.instructions": "ചുവടെയുള്ള കോഡ് പകർത്തിക്കൊണ്ട് നിങ്ങളുടെ വെബ്‌സൈറ്റിൽ ഈ ടൂട്ട് ഉൾച്ചേർക്കുക.",
"embed.preview": "ഇത് ഇങ്ങനെ കാണപ്പെടും:",
"emoji_button.activity": "പ്രവര്‍ത്തനം",
"emoji_button.custom": "സ്വന്തമായ ഭേദഗതി",
@ -141,7 +141,7 @@
"emoji_button.food": "ഭക്ഷണവും പാനീയവും",
"emoji_button.label": "ഇമോജി ചേർക്കുക",
"emoji_button.nature": "പ്രകൃതി",
"emoji_button.not_found": "മോജി പാടില്ല (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "മോജി പാടില്ല (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "വസ്തുക്കൾ",
"emoji_button.people": "ആളുകൾ",
"emoji_button.recent": "അടിക്കടി ഉപയോഗിക്കുന്നവ",
@ -149,6 +149,7 @@
"emoji_button.search_results": "തിരച്ചിൽ ഫലങ്ങൾ",
"emoji_button.symbols": "ചിഹ്നങ്ങൾ",
"emoji_button.travel": "യാത്രയും സ്ഥലങ്ങളും",
"empty_column.account_suspended": "അക്കൗണ്ട് താൽക്കാലികമായി നിർത്തിവച്ചു",
"empty_column.account_timeline": "ഇവിടെ ടൂട്ടുകൾ ഇല്ല!",
"empty_column.account_unavailable": "പ്രൊഫൈൽ ലഭ്യമല്ല",
"empty_column.blocks": "നിങ്ങൾ ഇതുവരെ ഒരു ഉപയോക്താക്കളെയും തടഞ്ഞിട്ടില്ല.",
@ -159,7 +160,7 @@
"empty_column.favourited_statuses": "നിങ്ങൾക്ക് ഇത് വരെ ഒരു പ്രിയപ്പെട്ട ടൂട്ടും ഇല്ല. നിങ്ങൾ അങ്ങനെ ഒന്ന് പ്രിയപ്പെടുന്ന പക്ഷം അതിവിടെ കാണപ്പെടുന്നതാണ്.",
"empty_column.favourites": "ഇതുവരെ ആരും ഈ ടൂട്ട് പ്രിയപ്പെട്ടതായി അടയാളപ്പെടുത്തിയിട്ടില്ല. ആരെങ്കിലും അങ്ങനെ ചെയ്യുന്നപക്ഷം അതിവിടെ കാണപ്പെടുന്നതാണ്.",
"empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "There is nothing in this hashtag yet.",
"empty_column.hashtag": "ഈ ഹാഷ്‌ടാഗിൽ ഇതുവരെ ഒന്നുമില്ല.",
"empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
"empty_column.home.public_timeline": "പൊതു സമയരേഖ",
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
@ -178,7 +179,7 @@
"follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
"generic.saved": "സംരക്ഷിച്ചു",
"getting_started.developers": "വികസിപ്പിക്കുന്നവർ",
"getting_started.directory": "രൂപരേഖ നാമഗൃഹസൂചി",
"getting_started.directory": "പ്രൊഫൈൽ ഡയറക്ടറി",
"getting_started.documentation": "രേഖാ സമാഹരണം",
"getting_started.heading": "തുടക്കം കുറിക്കുക",
"getting_started.invite": "ആളുകളെ ക്ഷണിക്കുക",
@ -189,7 +190,7 @@
"hashtag.column_header.tag_mode.any": "അല്ലെങ്കിൽ {additional}",
"hashtag.column_header.tag_mode.none": "{additional} ഇല്ലാതെ",
"hashtag.column_settings.select.no_options_message": "ഒരു സൂചനയും കണ്ടെത്തിയില്ല",
"hashtag.column_settings.select.placeholder": "ചർച്ചാവിഷയങ്ങൾ എഴുതുക…",
"hashtag.column_settings.select.placeholder": "ഹാഷ്ടാഗുകൾ എഴുതുക…",
"hashtag.column_settings.tag_mode.all": "ഇവയെല്ലാം",
"hashtag.column_settings.tag_mode.any": "ഇവയിലേതെങ്കിലും",
"hashtag.column_settings.tag_mode.none": "ഇതിലൊന്നുമല്ല",
@ -205,7 +206,7 @@
"introduction.federation.action": "അടുത്തത്",
"introduction.federation.federated.headline": "സംയുക്തമാക്കിയ",
"introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
"introduction.federation.home.headline": "ഭവന",
"introduction.federation.home.headline": "ഹോ",
"introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
"introduction.federation.local.headline": "പ്രാദേശികം",
"introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
@ -232,25 +233,25 @@
"keyboard_shortcuts.favourites": "to open favourites list",
"keyboard_shortcuts.federated": "to open federated timeline",
"keyboard_shortcuts.heading": "കീബോർഡ് എളുപ്പവഴികൾ",
"keyboard_shortcuts.home": "to open home timeline",
"keyboard_shortcuts.home": "ഹോം ടൈംലൈൻ തുറക്കുന്നതിന്",
"keyboard_shortcuts.hotkey": "Hotkey",
"keyboard_shortcuts.legend": "to display this legend",
"keyboard_shortcuts.local": "to open local timeline",
"keyboard_shortcuts.local": "പ്രാദേശിക സമയരേഖ തുറക്കാൻ",
"keyboard_shortcuts.mention": "to mention author",
"keyboard_shortcuts.muted": "to open muted users list",
"keyboard_shortcuts.my_profile": "to open your profile",
"keyboard_shortcuts.my_profile": "നിങ്ങളുടെ പ്രൊഫൈൽ തുറക്കാൻ",
"keyboard_shortcuts.notifications": "to open notifications column",
"keyboard_shortcuts.open_media": "to open media",
"keyboard_shortcuts.open_media": "മീഡിയ തുറക്കാൻ",
"keyboard_shortcuts.pinned": "to open pinned toots list",
"keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.profile": "രചയിതാവിന്റെ പ്രൊഫൈൽ തുറക്കുന്നതിന്",
"keyboard_shortcuts.reply": "മറുപടി അയക്കാൻ",
"keyboard_shortcuts.requests": "to open follow requests list",
"keyboard_shortcuts.search": "to focus search",
"keyboard_shortcuts.spoilers": "to show/hide CW field",
"keyboard_shortcuts.start": "to open \"get started\" column",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
"keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
"keyboard_shortcuts.toot": "to start a brand new toot",
"keyboard_shortcuts.toggle_sensitivity": "മീഡിയ കാണിക്കുന്നതിനും/മറയ്ക്കുന്നതിനും",
"keyboard_shortcuts.toot": "ഒരു പുതിയ ടൂട്ട് ആരംഭിക്കാൻ",
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
"keyboard_shortcuts.up": "to move up in the list",
"lightbox.close": "അടയ്ക്കുക",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "അടുത്തത്",
"lightbox.previous": "പുറകോട്ട്",
"lightbox.view_context": "View context",
"lists.account.add": "പട്ടികയിലേക്ക് ചേർക്കുക",
"lists.account.remove": "പട്ടികയിൽ നിന്ന് ഒഴിവാക്കുക",
"lists.delete": "പട്ടിക ഒഴിവാക്കുക",
@ -266,10 +266,10 @@
"lists.edit.submit": "തലക്കെട്ട് മാറ്റുക",
"lists.new.create": "പുതിയ പട്ടിക ചേർക്കുക",
"lists.new.title_placeholder": "New list title",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "ആരുമില്ല",
"lists.replies_policy.title": "ഇതിനുള്ള മറുപടികൾ കാണിക്കുക:",
"lists.search": "Search among people you follow",
"lists.subheading": "എന്റെ പട്ടികകൾ",
"load_pending": "{count, plural, one {# new item} other {# new items}}",
@ -277,208 +277,210 @@
"media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
"missing_indicator.label": "കാണാനില്ല",
"missing_indicator.sublabel": "This resource could not be found",
"mute_modal.duration": "Duration",
"mute_modal.duration": "കാലാവധി",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"mute_modal.indefinite": "Indefinite",
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Blocked users",
"navigation_bar.bookmarks": "അടയാളങ്ങൾ",
"navigation_bar.community_timeline": "Local timeline",
"mute_modal.indefinite": "അനിശ്ചിതകാല",
"navigation_bar.apps": "മൊബൈൽ ആപ്പുകൾ",
"navigation_bar.blocks": "തടയപ്പെട്ട ഉപയോക്താക്കൾ",
"navigation_bar.bookmarks": "ബുക്ക്മാർക്കുകൾ",
"navigation_bar.community_timeline": "പ്രാദേശിക സമയരേഖ",
"navigation_bar.compose": "പുതിയ ടൂട്ട് എഴുതുക",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.direct": "നേരിട്ടുള്ള സന്ദേശങ്ങൾ",
"navigation_bar.discover": "കണ്ടെത്തുക",
"navigation_bar.domain_blocks": "Hidden domains",
"navigation_bar.edit_profile": "Edit profile",
"navigation_bar.favourites": "Favourites",
"navigation_bar.edit_profile": "പ്രൊഫൈൽ തിരുത്തുക",
"navigation_bar.favourites": "പ്രിയപ്പെട്ടവ",
"navigation_bar.filters": "Muted words",
"navigation_bar.follow_requests": "Follow requests",
"navigation_bar.follow_requests": "പിന്തുടരാനുള്ള അഭ്യർത്ഥനകൾ",
"navigation_bar.follows_and_followers": "Follows and followers",
"navigation_bar.info": "About this server",
"navigation_bar.info": "ഈ സെർവറിനെക്കുറിച്ച്",
"navigation_bar.keyboard_shortcuts": "Hotkeys",
"navigation_bar.lists": "Lists",
"navigation_bar.logout": "Logout",
"navigation_bar.mutes": "Muted users",
"navigation_bar.lists": "ലിസ്റ്റുകൾ",
"navigation_bar.logout": "ലോഗൗട്ട്",
"navigation_bar.mutes": "നിശബ്ദമാക്കപ്പെട്ട ഉപയോക്താക്കൾ",
"navigation_bar.personal": "Personal",
"navigation_bar.pins": "Pinned toots",
"navigation_bar.preferences": "Preferences",
"navigation_bar.preferences": "ക്രമീകരണങ്ങൾ",
"navigation_bar.public_timeline": "Federated timeline",
"navigation_bar.security": "Security",
"navigation_bar.security": "സുരക്ഷ",
"notification.favourite": "{name} favourited your status",
"notification.follow": "{name} followed you",
"notification.follow_request": "{name} has requested to follow you",
"notification.follow": "{name} നിങ്ങളെ പിന്തുടർന്നു",
"notification.follow_request": "{name} നിങ്ങളെ പിന്തുടരാൻ അഭ്യർത്ഥിച്ചു",
"notification.mention": "{name} mentioned you",
"notification.own_poll": "Your poll has ended",
"notification.own_poll": "നിങ്ങളുടെ പോൾ അവസാനിച്ചു",
"notification.poll": "A poll you have voted in has ended",
"notification.reblog": "{name} boosted your status",
"notification.status": "{name} just posted",
"notifications.clear": "Clear notifications",
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
"notifications.column_settings.alert": "Desktop notifications",
"notifications.column_settings.favourite": "Favourites:",
"notifications.column_settings.filter_bar.advanced": "Display all categories",
"notification.reblog": "{name} നിങ്ങളുടെ പോസ്റ്റ് ബൂസ്റ്റ് ചെയ്തു",
"notification.status": "{name} ഇപ്പോൾ പോസ്റ്റുചെയ്‌തു",
"notifications.clear": "അറിയിപ്പ് മായ്ക്കുക",
"notifications.clear_confirmation": "നിങ്ങളുടെ എല്ലാ അറിയിപ്പുകളും ശാശ്വതമായി മായ്‌ക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?",
"notifications.column_settings.alert": "ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ",
"notifications.column_settings.favourite": "പ്രിയപ്പെട്ടവ:",
"notifications.column_settings.filter_bar.advanced": "എല്ലാ വിഭാഗങ്ങളും പ്രദർശിപ്പിക്കുക",
"notifications.column_settings.filter_bar.category": "Quick filter bar",
"notifications.column_settings.filter_bar.show": "Show",
"notifications.column_settings.filter_bar.show": "കാണിക്കുക",
"notifications.column_settings.follow": "New followers:",
"notifications.column_settings.follow_request": "New follow requests:",
"notifications.column_settings.follow_request": "പുതിയ പിന്തുടരൽ അഭ്യർത്ഥനകൾ:",
"notifications.column_settings.mention": "Mentions:",
"notifications.column_settings.poll": "Poll results:",
"notifications.column_settings.poll": "പോൾ ഫലങ്ങൾ:",
"notifications.column_settings.push": "Push notifications",
"notifications.column_settings.reblog": "Boosts:",
"notifications.column_settings.reblog": "ബൂസ്റ്റുകൾ:",
"notifications.column_settings.show": "Show in column",
"notifications.column_settings.sound": "Play sound",
"notifications.column_settings.status": "New toots:",
"notifications.filter.all": "All",
"notifications.filter.boosts": "Boosts",
"notifications.filter.favourites": "Favourites",
"notifications.filter.follows": "Follows",
"notifications.column_settings.sound": "ശബ്ദം പ്ലേ ചെയ്യുക",
"notifications.column_settings.status": "പുതിയ ടൂട്ടുകൾ:",
"notifications.filter.all": "എല്ലാം",
"notifications.filter.boosts": "ബൂസ്റ്റുകൾ",
"notifications.filter.favourites": "പ്രിയപ്പെട്ടവ",
"notifications.filter.follows": "പിന്തുടരുന്നു",
"notifications.filter.mentions": "Mentions",
"notifications.filter.polls": "Poll results",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.group": "{count} notifications",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.filter.polls": "പോൾ ഫലങ്ങൾ",
"notifications.filter.statuses": "നിങ്ങൾ പിന്തുടരുന്ന ആളുകളിൽ നിന്നുള്ള അപ്‌ഡേറ്റുകൾ",
"notifications.grant_permission": "അനുമതി നൽകുക.",
"notifications.group": "{count} അറിയിപ്പുകൾ",
"notifications.mark_as_read": "എല്ലാ അറിയിപ്പുകളും വായിച്ചതായി അടയാളപ്പെടുത്തുക",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ പ്രാപ്തമാക്കുക",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",
"picture_in_picture.restore": "Put it back",
"poll.closed": "Closed",
"poll.refresh": "Refresh",
"picture_in_picture.restore": "തിരികെ വയ്ക്കുക",
"poll.closed": "അടച്ചു",
"poll.refresh": "പുതുക്കുക",
"poll.total_people": "{count, plural, one {# person} other {# people}}",
"poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
"poll.vote": "Vote",
"poll.voted": "You voted for this answer",
"poll_button.add_poll": "Add a poll",
"poll_button.remove_poll": "Remove poll",
"privacy.change": "Adjust status privacy",
"poll.vote": "വോട്ട് ചെയ്യുക",
"poll.voted": "ഈ ഉത്തരത്തിനായി നിങ്ങൾ വോട്ട് ചെയ്തു",
"poll_button.add_poll": "ഒരു പോൾ ചേർക്കുക",
"poll_button.remove_poll": "പോൾ നീക്കംചെയ്യുക",
"privacy.change": "ടൂട്ട് സ്വകാര്യത ക്രമീകരിക്കുക",
"privacy.direct.long": "Post to mentioned users only",
"privacy.direct.short": "Direct",
"privacy.direct.short": "നേരിട്ട്",
"privacy.private.long": "Post to followers only",
"privacy.private.short": "Followers-only",
"privacy.private.short": "പിന്തുടരുന്നവർക്ക് മാത്രം",
"privacy.public.long": "Post to public timelines",
"privacy.public.short": "Public",
"privacy.unlisted.long": "Do not show in public timelines",
"privacy.unlisted.short": "Unlisted",
"refresh": "Refresh",
"regeneration_indicator.label": "Loading…",
"regeneration_indicator.sublabel": "Your home feed is being prepared!",
"refresh": "പുതുക്കുക",
"regeneration_indicator.label": "ലഭ്യമാക്കുന്നു…",
"regeneration_indicator.sublabel": "നിങ്ങളുടെ ഹോം ഫീഡ് തയാറാക്കുന്നു!",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",
"relative_time.just_now": "now",
"relative_time.just_now": "ഇപ്പോൾ",
"relative_time.minutes": "{number}m",
"relative_time.seconds": "{number}s",
"relative_time.today": "today",
"reply_indicator.cancel": "Cancel",
"relative_time.today": "ഇന്ന്",
"reply_indicator.cancel": "റദ്ദാക്കുക",
"report.forward": "Forward to {target}",
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
"report.forward_hint": "ഈ അക്കൗണ്ട് മറ്റൊരു സെർവറിൽ നിന്നാണ്. റിപ്പോർട്ടിന്റെ അജ്ഞാത പകർപ്പ് അവിടെ അയയ്ക്കണോ?",
"report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:",
"report.placeholder": "Additional comments",
"report.submit": "Submit",
"report.placeholder": "കൂടുതൽ അഭിപ്രായങ്ങൾ",
"report.submit": "സമർപ്പിക്കുക",
"report.target": "Report {target}",
"search.placeholder": "Search",
"search.placeholder": "തിരയുക",
"search_popout.search_format": "Advanced search format",
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
"search_popout.tips.hashtag": "hashtag",
"search_popout.tips.status": "status",
"search_popout.tips.hashtag": "ഹാഷ്ടാഗ്",
"search_popout.tips.status": "ടൂട്ട്",
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
"search_popout.tips.user": "user",
"search_results.accounts": "People",
"search_results.hashtags": "Hashtags",
"search_results.statuses": "Toots",
"search_popout.tips.user": "ഉപയോക്താവ്",
"search_results.accounts": "ആളുകൾ",
"search_results.hashtags": "ഹാഷ്ടാഗുകൾ",
"search_results.statuses": "ടൂട്ടുകൾ",
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
"search_results.total": "{count, number} {count, plural, one {result} other {results}}",
"status.admin_account": "Open moderation interface for @{name}",
"status.admin_status": "Open this status in the moderation interface",
"status.block": "Block @{name}",
"status.bookmark": "Bookmark",
"status.block": "@{name} -നെ തടയുക",
"status.bookmark": "ബുക്ക്മാർക്ക്",
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "This post cannot be boosted",
"status.copy": "Copy link to status",
"status.cannot_reblog": "ഈ പോസ്റ്റ് ബൂസ്റ്ചെയ്യാൻ കഴിയില്ല",
"status.copy": "ടൂട്ടിലേക്ക് ലിങ്ക് പകർത്തുക",
"status.delete": "മായ്ക്കുക",
"status.detailed_status": "വിശദമായ സംഭാഷണ കാഴ്‌ച",
"status.direct": "@{name} ന് നേരിട്ട് മെസേജ് അയക്കുക",
"status.embed": "ഉൾച്ചേർക്കുക",
"status.favourite": "പ്രിയപ്പെട്ടത്",
"status.filtered": "Filtered",
"status.filtered": "ഫിൽട്ടർ ചെയ്‌തു",
"status.load_more": "കൂടുതൽ ലോഡു ചെയ്യുക",
"status.media_hidden": "Media hidden",
"status.media_hidden": "മീഡിയ മറച്ചു",
"status.mention": "@{name} സൂചിപ്പിക്കുക",
"status.more": "More",
"status.mute": "Mute @{name}",
"status.more": "കൂടുതൽ",
"status.mute": "@{name}-നെ നിശ്ശബ്ദമാക്കുക",
"status.mute_conversation": "Mute conversation",
"status.open": "Expand this status",
"status.pin": "Pin on profile",
"status.pinned": "Pinned toot",
"status.read_more": "Read more",
"status.reblog": "Boost",
"status.read_more": "കൂടുതൽ വായിക്കുക",
"status.reblog": "ബൂസ്റ്റ്",
"status.reblog_private": "Boost with original visibility",
"status.reblogged_by": "{name} boosted",
"status.reblogged_by": "{name} ബൂസ്റ്റ് ചെയ്തു",
"status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.remove_bookmark": "Remove bookmark",
"status.reply": "Reply",
"status.redraft": "ഇല്ലാതാക്കുക & വീണ്ടും ഡ്രാഫ്റ്റ് ചെയ്യുക",
"status.remove_bookmark": "ബുക്ക്മാർക്ക് നീക്കംചെയ്യുക",
"status.reply": "മറുപടി",
"status.replyAll": "Reply to thread",
"status.report": "Report @{name}",
"status.report": "@{name}--നെ റിപ്പോർട്ട് ചെയ്യുക",
"status.sensitive_warning": "Sensitive content",
"status.share": "Share",
"status.show_less": "Show less",
"status.share": "പങ്കിടുക",
"status.show_less": "കുറച്ച് കാണിക്കുക",
"status.show_less_all": "Show less for all",
"status.show_more": "Show more",
"status.show_more_all": "Show more for all",
"status.show_thread": "Show thread",
"status.uncached_media_warning": "Not available",
"status.show_more": "കൂടുതകൽ കാണിക്കുക",
"status.show_more_all": "എല്ലാവർക്കുമായി കൂടുതൽ കാണിക്കുക",
"status.show_thread": "ത്രെഡ് കാണിക്കുക",
"status.uncached_media_warning": "ലഭ്യമല്ല",
"status.unmute_conversation": "Unmute conversation",
"status.unpin": "Unpin from profile",
"suggestions.dismiss": "Dismiss suggestion",
"suggestions.header": "You might be interested in…",
"tabs_bar.federated_timeline": "Federated",
"tabs_bar.home": "Home",
"tabs_bar.local_timeline": "Local",
"tabs_bar.notifications": "Notifications",
"tabs_bar.search": "Search",
"suggestions.header": "നിങ്ങൾക്ക് താൽപ്പര്യമുണ്ടാകാം…",
"tabs_bar.federated_timeline": "സംയുക്തമാക്കിയ",
"tabs_bar.home": "ഹോം",
"tabs_bar.local_timeline": "പ്രാദേശികം",
"tabs_bar.notifications": "അറിയിപ്പുകൾ",
"tabs_bar.search": "തിരയുക",
"time_remaining.days": "{number, plural, one {# day} other {# days}} left",
"time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
"time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
"timeline_hint.resources.followers": "Followers",
"timeline_hint.resources.follows": "Follows",
"timeline_hint.resources.statuses": "Older toots",
"timeline_hint.resources.followers": "പിന്തുടരുന്നവർ",
"timeline_hint.resources.follows": "പിന്തുടരുന്നു",
"timeline_hint.resources.statuses": "പഴയ ടൂട്ടുകൾ",
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
"trends.trending_now": "Trending now",
"trends.trending_now": "ഇപ്പോൾ ട്രെൻഡിംഗ്",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"units.short.billion": "{count}B",
"units.short.million": "{count}M",
"units.short.million": "{count}ദശലക്ഷം",
"units.short.thousand": "{count}K",
"upload_area.title": "Drag & drop to upload",
"upload_button.label": "Add images, a video or an audio file",
"upload_error.limit": "File upload limit exceeded.",
"upload_area.title": "അപ്‌ലോഡുചെയ്യാൻ വലിച്ചിടുക",
"upload_button.label": "ഇമേജുകൾ, ഒരു വീഡിയോ അല്ലെങ്കിൽ ഓഡിയോ ഫയൽ ചേർക്കുക",
"upload_error.limit": "ഫയൽ അപ്‌ലോഡ് പരിധി കവിഞ്ഞു.",
"upload_error.poll": "File upload not allowed with polls.",
"upload_form.audio_description": "Describe for people with hearing loss",
"upload_form.description": "Describe for the visually impaired",
"upload_form.edit": "Edit",
"upload_form.thumbnail": "Change thumbnail",
"upload_form.undo": "Delete",
"upload_form.audio_description": "കേൾവിശക്തി ഇല്ലാത്തവർക്ക് വേണ്ടി വിവരണം നൽകൂ",
"upload_form.description": "കാഴ്ചശക്തി ഇല്ലാത്തവർക്ക് വേണ്ടി വിവരണം നൽകൂ",
"upload_form.edit": "തിരുത്തുക",
"upload_form.thumbnail": "ലഘുചിത്രം മാറ്റുക",
"upload_form.undo": "ഇല്ലാതാക്കുക",
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.choose_image": "Choose image",
"upload_modal.analyzing_picture": "ചിത്രം വിശകലനം ചെയ്യുന്നു…",
"upload_modal.apply": "പ്രയോഗിക്കുക",
"upload_modal.choose_image": "ചിത്രം തിരഞ്ഞെടുക്കുക",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.edit_media": "മീഡിയ തിരുത്തുക",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preparing_ocr": "Preparing OCR…",
"upload_modal.preparing_ocr": "OCR തയ്യാറാക്കുന്നു…",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Uploading…",
"video.close": "Close video",
"video.download": "Download file",
"video.exit_fullscreen": "Exit full screen",
"video.close": "വീഡിയോ അടയ്ക്കുക",
"video.download": "ഫയൽ ഡൌൺലോഡ് ചെയ്യുക",
"video.exit_fullscreen": "പൂർണ്ണ സ്ക്രീനിൽ നിന്ന് പുറത്തുകടക്കുക",
"video.expand": "Expand video",
"video.fullscreen": "Full screen",
"video.hide": "Hide video",
"video.fullscreen": "പൂർണ്ണ സ്ക്രീൻ",
"video.hide": "വീഡിയോ മറയ്ക്കുക",
"video.mute": "Mute sound",
"video.pause": "Pause",
"video.play": "Play",
"video.play": "പ്ലേ",
"video.unmute": "Unmute sound"
}

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Search results",
"emoji_button.symbols": "Symbols",
"emoji_button.travel": "Travel & Places",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "No toots here!",
"empty_column.account_unavailable": "Profile unavailable",
"empty_column.blocks": "You haven't blocked any users yet.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Next",
"lightbox.previous": "Previous",
"lightbox.view_context": "View context",
"lists.account.add": "Add to list",
"lists.account.remove": "Remove from list",
"lists.delete": "Delete list",
@ -266,9 +266,9 @@
"lists.edit.submit": "Change title",
"lists.new.create": "Add list",
"lists.new.title_placeholder": "New list title",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Search among people you follow",
"lists.subheading": "Your lists",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Mentions",
"notifications.filter.polls": "Poll results",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} notifications",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Search results",
"emoji_button.symbols": "Symbols",
"emoji_button.travel": "Travel & Places",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "No toots here!",
"empty_column.account_unavailable": "Profile unavailable",
"empty_column.blocks": "You haven't blocked any users yet.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Next",
"lightbox.previous": "Previous",
"lightbox.view_context": "View context",
"lists.account.add": "Add to list",
"lists.account.remove": "Remove from list",
"lists.delete": "Delete list",
@ -266,9 +266,9 @@
"lists.edit.submit": "Change title",
"lists.new.create": "Add list",
"lists.new.title_placeholder": "New list title",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Search among people you follow",
"lists.subheading": "Your lists",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Mentions",
"notifications.filter.polls": "Poll results",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} notifications",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -9,10 +9,10 @@
"account.browse_more_on_origin_server": "Meer op het originele profiel bekijken",
"account.cancel_follow_request": "Volgverzoek annuleren",
"account.direct": "@{name} een direct bericht sturen",
"account.disable_notifications": "Stop notifying me when @{name} posts",
"account.disable_notifications": "Geef geen melding meer wanneer @{name} toot",
"account.domain_blocked": "Server verborgen",
"account.edit_profile": "Profiel bewerken",
"account.enable_notifications": "Notify me when @{name} posts",
"account.enable_notifications": "Geef een melding wanneer @{name} toot",
"account.endorse": "Op profiel weergeven",
"account.follow": "Volgen",
"account.followers": "Volgers",
@ -98,9 +98,9 @@
"compose_form.poll.switch_to_single": "Poll wijzigen om een enkele keuze toe te staan",
"compose_form.publish": "Toot",
"compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Media als gevoelig markeren",
"compose_form.sensitive.marked": "Media is als gevoelig gemarkeerd",
"compose_form.sensitive.unmarked": "Media is niet als gevoelig gemarkeerd",
"compose_form.sensitive.hide": "{count, plural, one {Media als gevoelig markeren} other {Media als gevoelig markeren}}",
"compose_form.sensitive.marked": "{count, plural, one {Media is als gevoelig gemarkeerd} other {Media is als gevoelig gemarkeerd}}",
"compose_form.sensitive.unmarked": "{count, plural, one {Media is niet als gevoelig gemarkeerd} other {Media is niet als gevoelig gemarkeerd}}",
"compose_form.spoiler.marked": "Tekst is achter een waarschuwing verborgen",
"compose_form.spoiler.unmarked": "Tekst is niet verborgen",
"compose_form.spoiler_placeholder": "Waarschuwingstekst",
@ -149,6 +149,7 @@
"emoji_button.search_results": "Zoekresultaten",
"emoji_button.symbols": "Symbolen",
"emoji_button.travel": "Reizen en plekken",
"empty_column.account_suspended": "Account opgeschort",
"empty_column.account_timeline": "Hier zijn geen toots!",
"empty_column.account_unavailable": "Profiel is niet beschikbaar",
"empty_column.blocks": "Jij hebt nog geen enkele gebruiker geblokkeerd.",
@ -168,9 +169,9 @@
"empty_column.notifications": "Je hebt nog geen meldingen. Begin met iemand een gesprek.",
"empty_column.public": "Er is hier helemaal niks! Toot iets in het openbaar of volg mensen van andere servers om het te vullen",
"error.unexpected_crash.explanation": "Als gevolg van een bug in onze broncode of als gevolg van een compatibiliteitsprobleem met jouw webbrowser, kan deze pagina niet goed worden weergegeven.",
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
"error.unexpected_crash.explanation_addons": "Deze pagina kon niet correct geladen worden. Deze fout wordt waarschijnlijk door een browser-add-on of een automatische vertalingshulpmiddel veroorzaakt.",
"error.unexpected_crash.next_steps": "Probeer deze pagina te vernieuwen. Wanneer dit niet helpt is het nog steeds mogelijk om Mastodon in een andere webbrowser of mobiele app te gebruiken.",
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
"error.unexpected_crash.next_steps_addons": "Probeer deze uit te schakelen en de pagina te verversen. Wanneer dat niet helpt, kun je Mastodon nog altijd met een andere webbrowser of mobiele app gebruiken.",
"errors.unexpected_crash.copy_stacktrace": "Stacktrace naar klembord kopiëren",
"errors.unexpected_crash.report_issue": "Technisch probleem melden",
"follow_request.authorize": "Goedkeuren",
@ -258,7 +259,6 @@
"lightbox.expand": "Afbeelding groot weergeven",
"lightbox.next": "Volgende",
"lightbox.previous": "Vorige",
"lightbox.view_context": "Context tonen",
"lists.account.add": "Aan lijst toevoegen",
"lists.account.remove": "Uit lijst verwijderen",
"lists.delete": "Lijst verwijderen",
@ -266,10 +266,10 @@
"lists.edit.submit": "Titel veranderen",
"lists.new.create": "Lijst toevoegen",
"lists.new.title_placeholder": "Naam nieuwe lijst",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.replies_policy.followed": "Elke gevolgde gebruiker",
"lists.replies_policy.list": "Leden van de lijst",
"lists.replies_policy.none": "Niemand",
"lists.replies_policy.title": "Toon reacties aan:",
"lists.search": "Zoek naar mensen die je volgt",
"lists.subheading": "Jouw lijsten",
"load_pending": "{count, plural, one {# nieuw item} other {# nieuwe items}}",
@ -277,7 +277,7 @@
"media_gallery.toggle_visible": "Media verbergen",
"missing_indicator.label": "Niet gevonden",
"missing_indicator.sublabel": "Deze hulpbron kan niet gevonden worden",
"mute_modal.duration": "Duration",
"mute_modal.duration": "Duur",
"mute_modal.hide_notifications": "Verberg meldingen van deze persoon?",
"mute_modal.indefinite": "Voor onbepaalde tijd",
"navigation_bar.apps": "Mobiele apps",
@ -310,7 +310,7 @@
"notification.own_poll": "Jouw poll is beëindigd",
"notification.poll": "Een poll waaraan jij hebt meegedaan is beëindigd",
"notification.reblog": "{name} boostte jouw toot",
"notification.status": "{name} just posted",
"notification.status": "{name} heeft zojuist een toot geplaatst",
"notifications.clear": "Meldingen verwijderen",
"notifications.clear_confirmation": "Weet je het zeker dat je al jouw meldingen wilt verwijderen?",
"notifications.column_settings.alert": "Desktopmeldingen",
@ -326,22 +326,24 @@
"notifications.column_settings.reblog": "Boosts:",
"notifications.column_settings.show": "In kolom tonen",
"notifications.column_settings.sound": "Geluid afspelen",
"notifications.column_settings.status": "New toots:",
"notifications.column_settings.status": "Nieuwe toots:",
"notifications.filter.all": "Alles",
"notifications.filter.boosts": "Boosts",
"notifications.filter.favourites": "Favorieten",
"notifications.filter.follows": "Die jij volgt",
"notifications.filter.mentions": "Vermeldingen",
"notifications.filter.polls": "Pollresultaten",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.filter.statuses": "Updates van mensen die je volgt",
"notifications.grant_permission": "Toestemming geven.",
"notifications.group": "{count} meldingen",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications_permission_banner.enable": "Notificatie meldingen inschakelen",
"notifications_permission_banner.how_to_control": "Gebruikt notificaties om ook meldingen te ontvangen wanneer Mastodon niet open is. U kunt precies bepalen welke soort meldingen wel of geen notificaties afgeven via de bovenstaande knop {icon}.",
"notifications_permission_banner.title": "Never miss a thing",
"picture_in_picture.restore": "Put it back",
"notifications.mark_as_read": "Markeer elke melding als gelezen",
"notifications.permission_denied": "Desktopmeldingen zijn niet beschikbaar omdat een eerdere browsertoestemming werd geweigerd",
"notifications.permission_denied_alert": "Desktopmeldingen kunnen niet worden ingeschakeld, omdat een eerdere browsertoestemming werd geweigerd",
"notifications.permission_required": "Desktopmeldingen zijn niet beschikbaar omdat de benodigde toestemming niet is verleend.",
"notifications_permission_banner.enable": "Desktopmeldingen inschakelen",
"notifications_permission_banner.how_to_control": "Om meldingen te ontvangen wanneer Mastodon niet open is. Je kunt precies bepalen welke soort interacties wel of geen desktopmeldingen geven via de bovenstaande {icon} knop.",
"notifications_permission_banner.title": "Mis nooit meer iets",
"picture_in_picture.restore": "Terugzetten",
"poll.closed": "Gesloten",
"poll.refresh": "Vernieuwen",
"poll.total_people": "{count, plural, one {# persoon} other {# mensen}}",
@ -448,9 +450,9 @@
"trends.counter_by_accounts": "{count, plural, one {{counter} persoon} other {{counter} personen}} zijn aan het praten",
"trends.trending_now": "Trends",
"ui.beforeunload": "Je concept zal verloren gaan als je Mastodon verlaat.",
"units.short.billion": "{count} miljard",
"units.short.million": "{count} miljoen",
"units.short.thousand": "{count} duizend",
"units.short.billion": "{count} mrd.",
"units.short.million": "{count} mln.",
"units.short.thousand": "{count}k",
"upload_area.title": "Hiernaar toe slepen om te uploaden",
"upload_button.label": "Afbeeldingen, een video- of een geluidsbestand toevoegen",
"upload_error.limit": "Uploadlimiet van bestand overschreden.",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Søkeresultat",
"emoji_button.symbols": "Symbol",
"emoji_button.travel": "Reise & stader",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "Ingen tut her!",
"empty_column.account_unavailable": "Profil ikkje tilgjengelig",
"empty_column.blocks": "Du har ikkje blokkert nokon brukarar enno.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Neste",
"lightbox.previous": "Førre",
"lightbox.view_context": "Sjå kontekst",
"lists.account.add": "Legg til i liste",
"lists.account.remove": "Fjern frå liste",
"lists.delete": "Slett liste",
@ -266,9 +266,9 @@
"lists.edit.submit": "Endre tittel",
"lists.new.create": "Legg til liste",
"lists.new.title_placeholder": "Ny listetittel",
"lists.replies_policy.all_replies": "Enhver fulgt bruker",
"lists.replies_policy.list_replies": "Medlemmer i listen",
"lists.replies_policy.no_replies": "Ingen",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Vis svar på:",
"lists.search": "Søk gjennom folk du følgjer",
"lists.subheading": "Dine lister",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Nemningar",
"notifications.filter.polls": "Røysteresultat",
"notifications.filter.statuses": "Oppdateringer fra folk du følger",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} varsel",
"notifications.mark_as_read": "Merk alle varsler som lest",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Skru på skrivebordsvarsler",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Aldri gå glipp av noe",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Søkeresultat",
"emoji_button.symbols": "Symboler",
"emoji_button.travel": "Reise & steder",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "Ingen tuter er her!",
"empty_column.account_unavailable": "Profilen er utilgjengelig",
"empty_column.blocks": "Du har ikke blokkert noen brukere enda.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Neste",
"lightbox.previous": "Forrige",
"lightbox.view_context": "Vis sammenheng",
"lists.account.add": "Legg til i listen",
"lists.account.remove": "Fjern fra listen",
"lists.delete": "Slett listen",
@ -266,9 +266,9 @@
"lists.edit.submit": "Endre tittel",
"lists.new.create": "Ligg til liste",
"lists.new.title_placeholder": "Ny listetittel",
"lists.replies_policy.all_replies": "Enhver fulgt bruker",
"lists.replies_policy.list_replies": "Medlemmer i listen",
"lists.replies_policy.no_replies": "Ingen",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Vis svar på:",
"lists.search": "Søk blant personer du følger",
"lists.subheading": "Dine lister",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Nevnelser",
"notifications.filter.polls": "Avstemningsresultater",
"notifications.filter.statuses": "Oppdateringer fra folk du følger",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} varslinger",
"notifications.mark_as_read": "Merk alle varsler som lest",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Skru på skrivebordsvarsler",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Aldri gå glipp av noe",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Resultats de recèrca",
"emoji_button.symbols": "Simbòls",
"emoji_button.travel": "Viatges & lòcs",
"empty_column.account_suspended": "Compte suspendut",
"empty_column.account_timeline": "Cap de tuts aquí!",
"empty_column.account_unavailable": "Perfil pas disponible",
"empty_column.blocks": "Avètz pas blocat degun pel moment.",
@ -258,7 +259,6 @@
"lightbox.expand": "Espandir la fenèstra de visualizacion dimatge",
"lightbox.next": "Seguent",
"lightbox.previous": "Precedent",
"lightbox.view_context": "Veire lo contèxt",
"lists.account.add": "Ajustar a la lista",
"lists.account.remove": "Levar de la lista",
"lists.delete": "Suprimir la lista",
@ -266,9 +266,9 @@
"lists.edit.submit": "Cambiar lo títol",
"lists.new.create": "Ajustar una lista",
"lists.new.title_placeholder": "Títol de la nòva lista",
"lists.replies_policy.all_replies": "Los que sègui",
"lists.replies_policy.list_replies": "Membres daquesta lista",
"lists.replies_policy.no_replies": "Degun",
"lists.replies_policy.followed": "Quin seguidor que siá",
"lists.replies_policy.list": "Membres de la lista",
"lists.replies_policy.none": "Degun",
"lists.replies_policy.title": "Mostrar las responsas a:",
"lists.search": "Cercar demest lo mond que seguètz",
"lists.subheading": "Vòstras listas",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Mencions",
"notifications.filter.polls": "Resultats del sondatge",
"notifications.filter.statuses": "Mesas a jorn del monde que seguissètz",
"notifications.grant_permission": "Acordar lautorizacion.",
"notifications.group": "{count} notificacions",
"notifications.mark_as_read": "Marcar totas las notificacions coma legidas",
"notifications.permission_denied": "Las notificacion burèu son pas disponiblas a causa del refús de las demandas dautorizacion navigador",
"notifications.permission_denied_alert": "Las notificacions burèu son pas activada, per çò que las autorizacions son estadas refusada abans",
"notifications.permission_required": "Las notificacions de burèu son pas indisponiblas perque las permissions requeridas son pas estadas acordadas.",
"notifications_permission_banner.enable": "Activar las notificacions burèu",
"notifications_permission_banner.how_to_control": "Per recebre las notificacions de Mastodon quand es pas dobèrt, activatz las notificacions de burèu. Podètz precisar quin tipe de notificacion generarà una notificacion de burèu via lo boton {icon} dessús un còp activadas.",
"notifications_permission_banner.title": "Manquetz pas jamai res",

View file

@ -13,7 +13,7 @@
"account.domain_blocked": "Ukryto domenę",
"account.edit_profile": "Edytuj profil",
"account.enable_notifications": "Powiadamiaj mnie o wpisach @{name}",
"account.endorse": "Polecaj na profilu",
"account.endorse": "Wyróżnij na profilu",
"account.follow": "Śledź",
"account.followers": "Śledzący",
"account.followers.empty": "Nikt jeszcze nie śledzi tego użytkownika.",
@ -149,6 +149,7 @@
"emoji_button.search_results": "Wyniki wyszukiwania",
"emoji_button.symbols": "Symbole",
"emoji_button.travel": "Podróże i miejsca",
"empty_column.account_suspended": "Konto zawieszone",
"empty_column.account_timeline": "Brak wpisów tutaj!",
"empty_column.account_unavailable": "Profil niedostępny",
"empty_column.blocks": "Nie zablokowałeś(-aś) jeszcze żadnego użytkownika.",
@ -258,7 +259,6 @@
"lightbox.expand": "Rozwiń pole widoku obrazu",
"lightbox.next": "Następne",
"lightbox.previous": "Poprzednie",
"lightbox.view_context": "Pokaż kontekst",
"lists.account.add": "Dodaj do listy",
"lists.account.remove": "Usunąć z listy",
"lists.delete": "Usuń listę",
@ -266,9 +266,9 @@
"lists.edit.submit": "Zmień tytuł",
"lists.new.create": "Utwórz listę",
"lists.new.title_placeholder": "Wprowadź tytuł listy",
"lists.replies_policy.all_replies": "Dowolnego obserwowanego użytkownika",
"lists.replies_policy.list_replies": "Członków listy",
"lists.replies_policy.no_replies": "Nikogo",
"lists.replies_policy.followed": "Dowolny obserwowany użytkownik",
"lists.replies_policy.list": "Członkowie listy",
"lists.replies_policy.none": "Nikt",
"lists.replies_policy.title": "Pokazuj odpowiedzi dla:",
"lists.search": "Szukaj wśród osób które śledzisz",
"lists.subheading": "Twoje listy",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Wspomienia",
"notifications.filter.polls": "Wyniki głosowania",
"notifications.filter.statuses": "Aktualizacje od osób które obserwujesz",
"notifications.grant_permission": "Przyznaj uprawnienia.",
"notifications.group": "{count, number} {count, plural, one {powiadomienie} few {powiadomienia} many {powiadomień} more {powiadomień}}",
"notifications.mark_as_read": "Oznacz wszystkie powiadomienia jako przeczytane",
"notifications.permission_denied": "Powiadomienia na pulpicie nie są dostępne, ponieważ wcześniej nie udzielono uprawnień w przeglądarce",
"notifications.permission_denied_alert": "Powiadomienia na pulpicie nie mogą zostać włączone, ponieważ wcześniej odmówiono uprawnień",
"notifications.permission_required": "Powiadomienia na pulpicie nie są dostępne, ponieważ nie przyznano wymaganego uprawnienia.",
"notifications_permission_banner.enable": "Włącz powiadomienia na pulpicie",
"notifications_permission_banner.how_to_control": "Aby otrzymywać powiadomienia, gdy Mastodon nie jest otwarty, włącz powiadomienia pulpitu. Możesz dokładnie kontrolować, októrych działaniach będziesz powiadomienia na pulpicie za pomocą przycisku {icon} powyżej, jeżeli tylko zostaną włączone.",
"notifications_permission_banner.title": "Nie przegap niczego",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Resultados da pesquisa",
"emoji_button.symbols": "Símbolos",
"emoji_button.travel": "Viagem & Lugares",
"empty_column.account_suspended": "Conta suspensa",
"empty_column.account_timeline": "Nada aqui!",
"empty_column.account_unavailable": "Perfil indisponível",
"empty_column.blocks": "Nada aqui.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expandir caixa de visualização de imagem",
"lightbox.next": "Próximo",
"lightbox.previous": "Anterior",
"lightbox.view_context": "Ver contexto",
"lists.account.add": "Adicionar à lista",
"lists.account.remove": "Remover da lista",
"lists.delete": "Excluir lista",
@ -266,9 +266,9 @@
"lists.edit.submit": "Renomear",
"lists.new.create": "Criar lista",
"lists.new.title_placeholder": "Nome da lista",
"lists.replies_policy.all_replies": "Qualquer usuário seguido",
"lists.replies_policy.list_replies": "Membros da lista",
"lists.replies_policy.no_replies": "Ninguém",
"lists.replies_policy.followed": "Qualquer usuário seguido",
"lists.replies_policy.list": "Membros da lista",
"lists.replies_policy.none": "Ninguém",
"lists.replies_policy.title": "Mostrar respostas para:",
"lists.search": "Procurar entre as pessoas que você segue",
"lists.subheading": "Suas listas",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Menções",
"notifications.filter.polls": "Resultados de enquete",
"notifications.filter.statuses": "Atualizações de pessoas que você segue",
"notifications.grant_permission": "Conceder permissão.",
"notifications.group": "{count} notificações",
"notifications.mark_as_read": "Marcar todas as notificações como lidas",
"notifications.permission_denied": "Não é possível habilitar as notificações da área de trabalho pois a permissão foi negada.",
"notifications.permission_denied_alert": "As notificações da área de trabalho não podem ser habilitdas pois a permissão do navegador foi negada antes",
"notifications.permission_required": "Notificações da área de trabalho não estão disponíveis porque a permissão necessária não foi concedida.",
"notifications_permission_banner.enable": "Habilitar notificações da área de trabalho",
"notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, habilite as notificações da área de trabalho. Você pode controlar precisamente quais tipos de interações geram notificações da área de trabalho através do botão {icon} acima uma vez habilitadas.",
"notifications_permission_banner.title": "Nunca perca nada",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Resultados da pesquisa",
"emoji_button.symbols": "Símbolos",
"emoji_button.travel": "Viagens & Lugares",
"empty_column.account_suspended": "Conta suspensa",
"empty_column.account_timeline": "Sem toots por aqui!",
"empty_column.account_unavailable": "Perfil indisponível",
"empty_column.blocks": "Ainda não bloqueaste qualquer utilizador.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expandir caixa de visualização de imagem",
"lightbox.next": "Próximo",
"lightbox.previous": "Anterior",
"lightbox.view_context": "Ver contexto",
"lists.account.add": "Adicionar à lista",
"lists.account.remove": "Remover da lista",
"lists.delete": "Remover lista",
@ -266,9 +266,9 @@
"lists.edit.submit": "Mudar o título",
"lists.new.create": "Adicionar lista",
"lists.new.title_placeholder": "Título da nova lista",
"lists.replies_policy.all_replies": "Qualquer utilizador seguido",
"lists.replies_policy.list_replies": "Membros da lista",
"lists.replies_policy.no_replies": "Ninguém",
"lists.replies_policy.followed": "Qualquer utilizador seguido",
"lists.replies_policy.list": "Membros da lista",
"lists.replies_policy.none": "Ninguém",
"lists.replies_policy.title": "Mostrar respostas para:",
"lists.search": "Pesquisa entre as pessoas que segues",
"lists.subheading": "As tuas listas",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Menções",
"notifications.filter.polls": "Votações",
"notifications.filter.statuses": "Atualizações de pessoas que você segue",
"notifications.grant_permission": "Conceder permissões.",
"notifications.group": "{count} notificações",
"notifications.mark_as_read": "Marcar todas as notificações como lidas",
"notifications.permission_denied": "Notificações no ambiente de trabalho não estão disponíveis porque a permissão, solicitada pelo navegador, foi recusada anteriormente",
"notifications.permission_denied_alert": "Notificações no ambinente de trabalho não podem ser ativadas, pois a permissão do navegador foi recusada anteriormente",
"notifications.permission_required": "Notificações no ambiente de trabalho não estão disponíveis porque a permissão necessária não foi concedida.",
"notifications_permission_banner.enable": "Ativar notificações no ambiente de trabalho",
"notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, ative as notificações no ambiente de trabalho. Depois da sua ativação, pode controlar precisamente quais tipos de interações geram notificações, através do botão {icon} acima.",
"notifications_permission_banner.title": "Nunca perca nada",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Rezultatele căutării",
"emoji_button.symbols": "Simboluri",
"emoji_button.travel": "Călătorii și Locuri",
"empty_column.account_suspended": "Account suspended",
"empty_column.account_timeline": "Nicio postare aici!",
"empty_column.account_unavailable": "Profil indisponibil",
"empty_column.blocks": "Nu ai blocat nici un utilizator încă.",
@ -258,7 +259,6 @@
"lightbox.expand": "Expand image view box",
"lightbox.next": "Următorul",
"lightbox.previous": "Precedentul",
"lightbox.view_context": "Vizualizați contextul",
"lists.account.add": "Adaugă în listă",
"lists.account.remove": "Elimină din listă",
"lists.delete": "Șterge lista",
@ -266,9 +266,9 @@
"lists.edit.submit": "Schimbă titlul",
"lists.new.create": "Adaugă listă",
"lists.new.title_placeholder": "Titlu pentru noua listă",
"lists.replies_policy.all_replies": "Any followed user",
"lists.replies_policy.list_replies": "Members of the list",
"lists.replies_policy.no_replies": "No one",
"lists.replies_policy.followed": "Any followed user",
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.replies_policy.title": "Show replies to:",
"lists.search": "Caută printre persoanele pe care le urmărești",
"lists.subheading": "Listele tale",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Menționări",
"notifications.filter.polls": "Rezultate sondaj",
"notifications.filter.statuses": "Updates from people you follow",
"notifications.grant_permission": "Grant permission.",
"notifications.group": "{count} notificări",
"notifications.mark_as_read": "Mark every notification as read",
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
"notifications_permission_banner.enable": "Enable desktop notifications",
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
"notifications_permission_banner.title": "Never miss a thing",

View file

@ -149,6 +149,7 @@
"emoji_button.search_results": "Результаты поиска",
"emoji_button.symbols": "Символы",
"emoji_button.travel": "Путешествия и места",
"empty_column.account_suspended": "Учетная запись заблокирована",
"empty_column.account_timeline": "Здесь нет постов!",
"empty_column.account_unavailable": "Профиль недоступен",
"empty_column.blocks": "Вы ещё никого не заблокировали.",
@ -258,7 +259,6 @@
"lightbox.expand": "Развернуть окно просмотра изображений",
"lightbox.next": "Далее",
"lightbox.previous": "Назад",
"lightbox.view_context": "Контекст",
"lists.account.add": "Добавить в список",
"lists.account.remove": "Убрать из списка",
"lists.delete": "Удалить список",
@ -266,9 +266,9 @@
"lists.edit.submit": "Изменить название",
"lists.new.create": "Создать список",
"lists.new.title_placeholder": "Название для нового списка",
"lists.replies_policy.all_replies": "Пользователям, на которых вы подписаны",
"lists.replies_policy.list_replies": "Пользователям в списке",
"lists.replies_policy.no_replies": "Никому",
"lists.replies_policy.followed": "Любой подписанный пользователь",
"lists.replies_policy.list": "Пользователи в списке",
"lists.replies_policy.none": "Никого",
"lists.replies_policy.title": "Показать ответы только:",
"lists.search": "Искать среди подписок",
"lists.subheading": "Ваши списки",
@ -334,10 +334,12 @@
"notifications.filter.mentions": "Упоминания",
"notifications.filter.polls": "Результаты опросов",
"notifications.filter.statuses": "Обновления от людей, на которых вы подписаны",
"notifications.grant_permission": "Дать разрешение.",
"notifications.group": "{count} уведомл.",
"notifications.mark_as_read": "Отмечать все уведомления прочитанными",
"notifications.permission_denied": "Уведомления на рабочем столе недоступны из-за ранее отклонённого запроса разрешений браузера",
"notifications.permission_denied_alert": "Уведомления на рабочем столе не могут быть включены, так как раньше было отказано в разрешении браузера",
"notifications.permission_required": "Десктоп нотификации недоступны, потому что требуемое разрешение не было предоставлено.",
"notifications_permission_banner.enable": "Включить уведомления на рабочем столе",
"notifications_permission_banner.how_to_control": "Чтобы получать уведомления, когда Мастодон не открыт, включите уведомления рабочего стола. Вы можете точно управлять, какие типы взаимодействия генерируют уведомления рабочего стола с помощью кнопки {icon} выше, когда они включены.",
"notifications_permission_banner.title": "Ничего не пропустите",

Some files were not shown because too many files have changed in this diff Show more