mirror of
https://github.com/mastodon/mastodon.git
synced 2025-11-27 18:10:58 +00:00
Merge branch 'main' into compose-language-detection
This commit is contained in:
commit
34efcae0ab
19
CHANGELOG.md
19
CHANGELOG.md
|
|
@ -6,11 +6,12 @@ All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- **Add support for allowing and authoring quotes** (#35355, #35578, #35614, #35618, #35624, #35626, #35652, #35629, #35665, #35653, #35670, #35677, #35690, #35697, #35689, #35699, #35700, #35701, #35709, #35714, #35713, #35715, #35725, #35749, #35769, #35780, #35762, #35804, #35808, #35805, #35819, #35824, #35828, #35822, #35835, #35865, #35860, #35832, #35891, #35894, #35895, #35820, #35917, #35924, #35925, #35914, #35930, #35941, #35939, #35948, #35955, #35967, #35990, #35991, #35975, #35971, #36002, #35986, #36031, #36034, #36038, #36054, #36052, #36055, #36065, #36068, #36083, #36087, #36080, #36091, #36090, #36118, #36119, #36128, #36094, #36129, #36138, #36132, #36151, #36158, #36171, #36194, #36220, #36169, #36130, #36249, #36153, #36299, #36291, #36301, #36315, #36317, #36364, #36383, #36381, #36459, #36464, and #36461 by @ChaosExAnima, @ClearlyClaire, @Lycolia, @diondiondion, and @tribela)\
|
- **Add support for allowing and authoring quotes** (#35355, #35578, #35614, #35618, #35624, #35626, #35652, #35629, #35665, #35653, #35670, #35677, #35690, #35697, #35689, #35699, #35700, #35701, #35709, #35714, #35713, #35715, #35725, #35749, #35769, #35780, #35762, #35804, #35808, #35805, #35819, #35824, #35828, #35822, #35835, #35865, #35860, #35832, #35891, #35894, #35895, #35820, #35917, #35924, #35925, #35914, #35930, #35941, #35939, #35948, #35955, #35967, #35990, #35991, #35975, #35971, #36002, #35986, #36031, #36034, #36038, #36054, #36052, #36055, #36065, #36068, #36083, #36087, #36080, #36091, #36090, #36118, #36119, #36128, #36094, #36129, #36138, #36132, #36151, #36158, #36171, #36194, #36220, #36169, #36130, #36249, #36153, #36299, #36291, #36301, #36315, #36317, #36364, #36383, #36381, #36459, #36464, #36461, #36516 and #36528 by @ChaosExAnima, @ClearlyClaire, @Lycolia, @diondiondion, and @tribela)\
|
||||||
This includes a revamp of the composer interface.\
|
This includes a revamp of the composer interface.\
|
||||||
See https://blog.joinmastodon.org/2025/09/introducing-quote-posts/ for a user-centric overview of the feature, and https://docs.joinmastodon.org/client/quotes/ for API documentation.
|
See https://blog.joinmastodon.org/2025/09/introducing-quote-posts/ for a user-centric overview of the feature, and https://docs.joinmastodon.org/client/quotes/ for API documentation.
|
||||||
- **Add support for fetching and refreshing replies to the web UI** (#35210, #35496, #35575, #35500, #35577, #35602, #35603, #35654, #36141, #36237, #36172, #36256, #36271, #36334, #36382, and #36239 by @ClearlyClaire, @Gargron, and @diondiondion)
|
- **Add support for fetching and refreshing replies to the web UI** (#35210, #35496, #35575, #35500, #35577, #35602, #35603, #35654, #36141, #36237, #36172, #36256, #36271, #36334, #36382, #36239, #36484 and #36481 by @ClearlyClaire, @Gargron, and @diondiondion)
|
||||||
- **Add ability to block words in usernames** (#35407, #35655, and #35806 by @ClearlyClaire and @Gargron)
|
- **Add ability to block words in usernames** (#35407, #35655, and #35806 by @ClearlyClaire and @Gargron)
|
||||||
|
- Add support for displaying of quote posts in Moderator UI (#35964 by @ThisIsMissEm)
|
||||||
- Add support for displaying link previews for Admin UI (#35958 by @ThisIsMissEm)
|
- Add support for displaying link previews for Admin UI (#35958 by @ThisIsMissEm)
|
||||||
- Add support for dynamic viewport height (#36272 by @e1berd)
|
- Add support for dynamic viewport height (#36272 by @e1berd)
|
||||||
- Add support for numeric-based URIs for new local accounts (#32724, #36304, #36316, and #36365 by @ClearlyClaire)
|
- Add support for numeric-based URIs for new local accounts (#32724, #36304, #36316, and #36365 by @ClearlyClaire)
|
||||||
|
|
@ -26,18 +27,20 @@ All notable changes to this project will be documented in this file.
|
||||||
- Add delivery failure tracking and handling to FASP jobs (#35625, #35628, and #35723 by @oneiros)
|
- Add delivery failure tracking and handling to FASP jobs (#35625, #35628, and #35723 by @oneiros)
|
||||||
- Add example of quote post with a preview card to development sample data (#35616 by @ClearlyClaire)
|
- Add example of quote post with a preview card to development sample data (#35616 by @ClearlyClaire)
|
||||||
- Add second set of blocked text that applies to accounts regardless of account age for spam-blocking (#35563 by @ClearlyClaire)
|
- Add second set of blocked text that applies to accounts regardless of account age for spam-blocking (#35563 by @ClearlyClaire)
|
||||||
- Add experimental feature to select custom emoji rendering (#35229, #35282, #35253, #35424, #35473, #35483, #35505, #35568, #35605, #35659, #35664, #35739, #35985, #36051, #36071, #36137, #36165, #36248, #36262, #36275, #36293, #36341, #36342, #36366, #36377, #36378, #36385, #36393, #36397, #36403, #36413, #36410, #36454, and #36402 by @ChaosExAnima and @braddunbar)\
|
- Added emoji from Twemoji v16 (#36501 and #36530 by @ChaosExAnima)
|
||||||
|
- Add experimental feature to select custom emoji rendering (#35229, #35282, #35253, #35424, #35473, #35483, #35505, #35568, #35605, #35659, #35664, #35739, #35985, #36051, #36071, #36137, #36165, #36248, #36262, #36275, #36293, #36341, #36342, #36366, #36377, #36378, #36385, #36393, #36397, #36403, #36413, #36410, #36454, #36402, #36503, #36502 and #36532 by @ChaosExAnima and @braddunbar)\
|
||||||
This also completely reworks the processing and rendering of emojis and server-rendered HTML in statuses and other places.
|
This also completely reworks the processing and rendering of emojis and server-rendered HTML in statuses and other places.
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- Change confirmation dialogs for follow button actions “unfollow”, “unblock”, and “withdraw request” (#36289 by @diondiondion)
|
- Change confirmation dialogs for follow button actions “unfollow”, “unblock”, and “withdraw request” (#36289 by @diondiondion)
|
||||||
- Change “Follow” button labels (#36264 by @diondiondion)
|
- Change “Follow” button labels (#36264 by @diondiondion)
|
||||||
|
- Change appearance settings to introduce new Advanced settings section (#36496 and #36506 by @diondiondion)
|
||||||
- Change display of content warnings in Admin UI (#35935 by @ThisIsMissEm)
|
- Change display of content warnings in Admin UI (#35935 by @ThisIsMissEm)
|
||||||
- Change index on `follows` table to improve performance of some queries (#36374 by @ClearlyClaire)
|
- Change index on `follows` table to improve performance of some queries (#36374 by @ClearlyClaire)
|
||||||
- Change links to accounts in settings and moderation views to link to local view unless account is suspended (#36340 by @diondiondion)
|
- Change links to accounts in settings and moderation views to link to local view unless account is suspended (#36340 by @diondiondion)
|
||||||
- Change redirection for denied registration from web app to sign-in page with error message (#36384 by @ClearlyClaire)
|
- Change redirection for denied registration from web app to sign-in page with error message (#36384 by @ClearlyClaire)
|
||||||
- Change `timeline_preview` setting into four more granular settings (#36338 and #36467 by @ClearlyClaire)
|
- Change `timeline_preview` setting into four more granular settings (#36338, #36467 and #36497 by @ClearlyClaire)
|
||||||
- Change wording and design of interaction dialog to simplify it (#36124 by @diondiondion)
|
- Change wording and design of interaction dialog to simplify it (#36124 by @diondiondion)
|
||||||
- Change dropdown menus to allow disabled items to be focused (#36078 by @diondiondion)
|
- Change dropdown menus to allow disabled items to be focused (#36078 by @diondiondion)
|
||||||
- Change modal background colours in light mode (#36069 by @diondiondion)
|
- Change modal background colours in light mode (#36069 by @diondiondion)
|
||||||
|
|
@ -49,9 +52,11 @@ All notable changes to this project will be documented in this file.
|
||||||
- Change auditable accounts to be sorted by username in admin action logs interface (#35272 by @breadtk)
|
- Change auditable accounts to be sorted by username in admin action logs interface (#35272 by @breadtk)
|
||||||
- Change order of translation restoration and service credit on post card (#33619 by @colindean)
|
- Change order of translation restoration and service credit on post card (#33619 by @colindean)
|
||||||
- Change position of ‘add more’ to be inside table toolbar on reports (#35963 by @ThisIsMissEm)
|
- Change position of ‘add more’ to be inside table toolbar on reports (#35963 by @ThisIsMissEm)
|
||||||
|
- Change docker-compose.yml sidekiq health check to work for both 4.4 and 4.5 (#36498 by @ClearlyClaire)
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
- Fix relationship not being fetched to evaluate whether to show a quote post (#36517 by @ClearlyClaire)
|
||||||
- Fix rendering of poll options in status history modal (#35633 by @ThisIsMissEm)
|
- Fix rendering of poll options in status history modal (#35633 by @ThisIsMissEm)
|
||||||
- Fix “mute” button being displayed to unauthenticated visitors in hashtag dropdown (#36353 by @mkljczk)
|
- Fix “mute” button being displayed to unauthenticated visitors in hashtag dropdown (#36353 by @mkljczk)
|
||||||
- Fix overflow handling of `.more-from-author` (#36310 by @edent)
|
- Fix overflow handling of `.more-from-author` (#36310 by @edent)
|
||||||
|
|
@ -76,6 +81,12 @@ All notable changes to this project will be documented in this file.
|
||||||
- Fix glitchy status keyboard navigation (#35455 and #35504 by @diondiondion)
|
- Fix glitchy status keyboard navigation (#35455 and #35504 by @diondiondion)
|
||||||
- Fix post being submitted when pressing “Enter” in the CW field (#35445 by @diondiondion)
|
- Fix post being submitted when pressing “Enter” in the CW field (#35445 by @diondiondion)
|
||||||
|
|
||||||
|
## [4.4.8] - 2025-10-21
|
||||||
|
|
||||||
|
### Security
|
||||||
|
|
||||||
|
- Fix quote control bypass ([GHSA-8h43-rcqj-wpc6](https://github.com/mastodon/mastodon/security/advisories/GHSA-8h43-rcqj-wpc6))
|
||||||
|
|
||||||
## [4.4.7] - 2025-10-15
|
## [4.4.7] - 2025-10-15
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,9 @@ ARG BASE_REGISTRY="docker.io"
|
||||||
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.4.x"]
|
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.4.x"]
|
||||||
# renovate: datasource=docker depName=docker.io/ruby
|
# renovate: datasource=docker depName=docker.io/ruby
|
||||||
ARG RUBY_VERSION="3.4.7"
|
ARG RUBY_VERSION="3.4.7"
|
||||||
# # Node.js version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"]
|
# # Node.js version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="22"]
|
||||||
# renovate: datasource=node-version depName=node
|
# renovate: datasource=node-version depName=node
|
||||||
ARG NODE_MAJOR_VERSION="22"
|
ARG NODE_MAJOR_VERSION="24"
|
||||||
# Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="trixie"]
|
# Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="trixie"]
|
||||||
ARG DEBIAN_VERSION="trixie"
|
ARG DEBIAN_VERSION="trixie"
|
||||||
# Node.js image to use for base image based on combined variables (ex: 20-trixie-slim)
|
# Node.js image to use for base image based on combined variables (ex: 20-trixie-slim)
|
||||||
|
|
|
||||||
26
Gemfile
26
Gemfile
|
|
@ -106,19 +106,19 @@ gem 'opentelemetry-api', '~> 1.7.0'
|
||||||
|
|
||||||
group :opentelemetry do
|
group :opentelemetry do
|
||||||
gem 'opentelemetry-exporter-otlp', '~> 0.31.0', require: false
|
gem 'opentelemetry-exporter-otlp', '~> 0.31.0', require: false
|
||||||
gem 'opentelemetry-instrumentation-active_job', '~> 0.9.0', require: false
|
gem 'opentelemetry-instrumentation-active_job', '~> 0.10.0', require: false
|
||||||
gem 'opentelemetry-instrumentation-active_model_serializers', '~> 0.23.0', require: false
|
gem 'opentelemetry-instrumentation-active_model_serializers', '~> 0.24.0', require: false
|
||||||
gem 'opentelemetry-instrumentation-concurrent_ruby', '~> 0.23.0', require: false
|
gem 'opentelemetry-instrumentation-concurrent_ruby', '~> 0.24.0', require: false
|
||||||
gem 'opentelemetry-instrumentation-excon', '~> 0.25.0', require: false
|
gem 'opentelemetry-instrumentation-excon', '~> 0.26.0', require: false
|
||||||
gem 'opentelemetry-instrumentation-faraday', '~> 0.29.0', require: false
|
gem 'opentelemetry-instrumentation-faraday', '~> 0.30.0', require: false
|
||||||
gem 'opentelemetry-instrumentation-http', '~> 0.26.0', require: false
|
gem 'opentelemetry-instrumentation-http', '~> 0.27.0', require: false
|
||||||
gem 'opentelemetry-instrumentation-http_client', '~> 0.25.0', require: false
|
gem 'opentelemetry-instrumentation-http_client', '~> 0.26.0', require: false
|
||||||
gem 'opentelemetry-instrumentation-net_http', '~> 0.25.0', require: false
|
gem 'opentelemetry-instrumentation-net_http', '~> 0.26.0', require: false
|
||||||
gem 'opentelemetry-instrumentation-pg', '~> 0.31.0', require: false
|
gem 'opentelemetry-instrumentation-pg', '~> 0.32.0', require: false
|
||||||
gem 'opentelemetry-instrumentation-rack', '~> 0.28.0', require: false
|
gem 'opentelemetry-instrumentation-rack', '~> 0.29.0', require: false
|
||||||
gem 'opentelemetry-instrumentation-rails', '~> 0.38.0', require: false
|
gem 'opentelemetry-instrumentation-rails', '~> 0.39.0', require: false
|
||||||
gem 'opentelemetry-instrumentation-redis', '~> 0.27.0', require: false
|
gem 'opentelemetry-instrumentation-redis', '~> 0.28.0', require: false
|
||||||
gem 'opentelemetry-instrumentation-sidekiq', '~> 0.27.0', require: false
|
gem 'opentelemetry-instrumentation-sidekiq', '~> 0.28.0', require: false
|
||||||
gem 'opentelemetry-sdk', '~> 1.4', require: false
|
gem 'opentelemetry-sdk', '~> 1.4', require: false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
145
Gemfile.lock
145
Gemfile.lock
|
|
@ -426,7 +426,8 @@ GEM
|
||||||
loofah (2.24.1)
|
loofah (2.24.1)
|
||||||
crass (~> 1.0.2)
|
crass (~> 1.0.2)
|
||||||
nokogiri (>= 1.12.0)
|
nokogiri (>= 1.12.0)
|
||||||
mail (2.8.1)
|
mail (2.9.0)
|
||||||
|
logger
|
||||||
mini_mime (>= 0.1.1)
|
mini_mime (>= 0.1.1)
|
||||||
net-imap
|
net-imap
|
||||||
net-pop
|
net-pop
|
||||||
|
|
@ -498,74 +499,74 @@ GEM
|
||||||
tzinfo
|
tzinfo
|
||||||
validate_url
|
validate_url
|
||||||
webfinger (~> 2.0)
|
webfinger (~> 2.0)
|
||||||
openssl (3.3.1)
|
openssl (3.3.2)
|
||||||
openssl-signature_algorithm (1.3.0)
|
openssl-signature_algorithm (1.3.0)
|
||||||
openssl (> 2.0)
|
openssl (> 2.0)
|
||||||
opentelemetry-api (1.7.0)
|
opentelemetry-api (1.7.0)
|
||||||
opentelemetry-common (0.23.0)
|
opentelemetry-common (0.23.0)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
opentelemetry-exporter-otlp (0.31.0)
|
opentelemetry-exporter-otlp (0.31.1)
|
||||||
google-protobuf (>= 3.18)
|
google-protobuf (>= 3.18)
|
||||||
googleapis-common-protos-types (~> 1.3)
|
googleapis-common-protos-types (~> 1.3)
|
||||||
opentelemetry-api (~> 1.1)
|
opentelemetry-api (~> 1.1)
|
||||||
opentelemetry-common (~> 0.20)
|
opentelemetry-common (~> 0.20)
|
||||||
opentelemetry-sdk (~> 1.2)
|
opentelemetry-sdk (~> 1.10)
|
||||||
opentelemetry-semantic_conventions
|
opentelemetry-semantic_conventions
|
||||||
opentelemetry-helpers-sql (0.2.0)
|
opentelemetry-helpers-sql (0.2.0)
|
||||||
opentelemetry-api (~> 1.7)
|
opentelemetry-api (~> 1.7)
|
||||||
opentelemetry-helpers-sql-obfuscation (0.3.0)
|
opentelemetry-helpers-sql-obfuscation (0.4.0)
|
||||||
opentelemetry-common (~> 0.21)
|
opentelemetry-common (~> 0.21)
|
||||||
opentelemetry-instrumentation-action_mailer (0.5.0)
|
opentelemetry-instrumentation-action_mailer (0.6.1)
|
||||||
opentelemetry-instrumentation-active_support (~> 0.7)
|
opentelemetry-instrumentation-active_support (~> 0.10)
|
||||||
opentelemetry-instrumentation-action_pack (0.14.1)
|
opentelemetry-instrumentation-action_pack (0.15.1)
|
||||||
opentelemetry-instrumentation-rack (~> 0.21)
|
opentelemetry-instrumentation-rack (~> 0.29)
|
||||||
opentelemetry-instrumentation-action_view (0.10.0)
|
opentelemetry-instrumentation-action_view (0.11.1)
|
||||||
opentelemetry-instrumentation-active_support (~> 0.7)
|
opentelemetry-instrumentation-active_support (~> 0.10)
|
||||||
opentelemetry-instrumentation-active_job (0.9.2)
|
opentelemetry-instrumentation-active_job (0.10.1)
|
||||||
opentelemetry-instrumentation-base (~> 0.24)
|
opentelemetry-instrumentation-base (~> 0.25)
|
||||||
opentelemetry-instrumentation-active_model_serializers (0.23.0)
|
opentelemetry-instrumentation-active_model_serializers (0.24.0)
|
||||||
opentelemetry-instrumentation-active_support (>= 0.7.0)
|
opentelemetry-instrumentation-active_support (>= 0.7.0)
|
||||||
opentelemetry-instrumentation-active_record (0.10.1)
|
opentelemetry-instrumentation-active_record (0.11.1)
|
||||||
opentelemetry-instrumentation-base (~> 0.24)
|
opentelemetry-instrumentation-base (~> 0.25)
|
||||||
opentelemetry-instrumentation-active_storage (0.2.0)
|
opentelemetry-instrumentation-active_storage (0.3.1)
|
||||||
opentelemetry-instrumentation-active_support (~> 0.7)
|
opentelemetry-instrumentation-active_support (~> 0.10)
|
||||||
opentelemetry-instrumentation-active_support (0.9.1)
|
opentelemetry-instrumentation-active_support (0.10.1)
|
||||||
opentelemetry-instrumentation-base (~> 0.24)
|
opentelemetry-instrumentation-base (~> 0.25)
|
||||||
opentelemetry-instrumentation-base (0.24.0)
|
opentelemetry-instrumentation-base (0.25.0)
|
||||||
opentelemetry-api (~> 1.7)
|
opentelemetry-api (~> 1.7)
|
||||||
opentelemetry-common (~> 0.21)
|
opentelemetry-common (~> 0.21)
|
||||||
opentelemetry-registry (~> 0.1)
|
opentelemetry-registry (~> 0.1)
|
||||||
opentelemetry-instrumentation-concurrent_ruby (0.23.1)
|
opentelemetry-instrumentation-concurrent_ruby (0.24.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.24)
|
opentelemetry-instrumentation-base (~> 0.25)
|
||||||
opentelemetry-instrumentation-excon (0.25.2)
|
opentelemetry-instrumentation-excon (0.26.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.24)
|
opentelemetry-instrumentation-base (~> 0.25)
|
||||||
opentelemetry-instrumentation-faraday (0.29.1)
|
opentelemetry-instrumentation-faraday (0.30.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.24)
|
opentelemetry-instrumentation-base (~> 0.25)
|
||||||
opentelemetry-instrumentation-http (0.26.1)
|
opentelemetry-instrumentation-http (0.27.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.24)
|
opentelemetry-instrumentation-base (~> 0.25)
|
||||||
opentelemetry-instrumentation-http_client (0.25.1)
|
opentelemetry-instrumentation-http_client (0.26.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.24)
|
opentelemetry-instrumentation-base (~> 0.25)
|
||||||
opentelemetry-instrumentation-net_http (0.25.1)
|
opentelemetry-instrumentation-net_http (0.26.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.24)
|
opentelemetry-instrumentation-base (~> 0.25)
|
||||||
opentelemetry-instrumentation-pg (0.31.1)
|
opentelemetry-instrumentation-pg (0.32.0)
|
||||||
opentelemetry-helpers-sql
|
opentelemetry-helpers-sql
|
||||||
opentelemetry-helpers-sql-obfuscation
|
opentelemetry-helpers-sql-obfuscation
|
||||||
opentelemetry-instrumentation-base (~> 0.24)
|
opentelemetry-instrumentation-base (~> 0.25)
|
||||||
opentelemetry-instrumentation-rack (0.28.2)
|
opentelemetry-instrumentation-rack (0.29.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.24)
|
opentelemetry-instrumentation-base (~> 0.25)
|
||||||
opentelemetry-instrumentation-rails (0.38.0)
|
opentelemetry-instrumentation-rails (0.39.1)
|
||||||
opentelemetry-instrumentation-action_mailer (~> 0.4)
|
opentelemetry-instrumentation-action_mailer (~> 0.6)
|
||||||
opentelemetry-instrumentation-action_pack (~> 0.13)
|
opentelemetry-instrumentation-action_pack (~> 0.15)
|
||||||
opentelemetry-instrumentation-action_view (~> 0.9)
|
opentelemetry-instrumentation-action_view (~> 0.11)
|
||||||
opentelemetry-instrumentation-active_job (~> 0.8)
|
opentelemetry-instrumentation-active_job (~> 0.10)
|
||||||
opentelemetry-instrumentation-active_record (~> 0.9)
|
opentelemetry-instrumentation-active_record (~> 0.11)
|
||||||
opentelemetry-instrumentation-active_storage (~> 0.1)
|
opentelemetry-instrumentation-active_storage (~> 0.3)
|
||||||
opentelemetry-instrumentation-active_support (~> 0.8)
|
opentelemetry-instrumentation-active_support (~> 0.10)
|
||||||
opentelemetry-instrumentation-concurrent_ruby (~> 0.22)
|
opentelemetry-instrumentation-concurrent_ruby (~> 0.23)
|
||||||
opentelemetry-instrumentation-redis (0.27.1)
|
opentelemetry-instrumentation-redis (0.28.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.24)
|
opentelemetry-instrumentation-base (~> 0.25)
|
||||||
opentelemetry-instrumentation-sidekiq (0.27.1)
|
opentelemetry-instrumentation-sidekiq (0.28.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.24)
|
opentelemetry-instrumentation-base (~> 0.25)
|
||||||
opentelemetry-registry (0.4.0)
|
opentelemetry-registry (0.4.0)
|
||||||
opentelemetry-api (~> 1.1)
|
opentelemetry-api (~> 1.1)
|
||||||
opentelemetry-sdk (1.10.0)
|
opentelemetry-sdk (1.10.0)
|
||||||
|
|
@ -603,7 +604,7 @@ GEM
|
||||||
net-smtp
|
net-smtp
|
||||||
premailer (~> 1.7, >= 1.7.9)
|
premailer (~> 1.7, >= 1.7.9)
|
||||||
prettyprint (0.2.0)
|
prettyprint (0.2.0)
|
||||||
prism (1.5.1)
|
prism (1.5.2)
|
||||||
prometheus_exporter (2.3.0)
|
prometheus_exporter (2.3.0)
|
||||||
webrick
|
webrick
|
||||||
propshaft (1.3.1)
|
propshaft (1.3.1)
|
||||||
|
|
@ -614,14 +615,14 @@ GEM
|
||||||
date
|
date
|
||||||
stringio
|
stringio
|
||||||
public_suffix (6.0.2)
|
public_suffix (6.0.2)
|
||||||
puma (7.0.4)
|
puma (7.1.0)
|
||||||
nio4r (~> 2.0)
|
nio4r (~> 2.0)
|
||||||
pundit (2.5.2)
|
pundit (2.5.2)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
raabro (1.4.0)
|
raabro (1.4.0)
|
||||||
racc (1.8.1)
|
racc (1.8.1)
|
||||||
rack (3.2.3)
|
rack (3.2.3)
|
||||||
rack-attack (6.7.0)
|
rack-attack (6.8.0)
|
||||||
rack (>= 1.0, < 4)
|
rack (>= 1.0, < 4)
|
||||||
rack-cors (3.0.0)
|
rack-cors (3.0.0)
|
||||||
logger
|
logger
|
||||||
|
|
@ -744,7 +745,7 @@ GEM
|
||||||
rspec-mocks (~> 3.0)
|
rspec-mocks (~> 3.0)
|
||||||
sidekiq (>= 5, < 9)
|
sidekiq (>= 5, < 9)
|
||||||
rspec-support (3.13.6)
|
rspec-support (3.13.6)
|
||||||
rubocop (1.81.1)
|
rubocop (1.81.6)
|
||||||
json (~> 2.3)
|
json (~> 2.3)
|
||||||
language_server-protocol (~> 3.17.0.2)
|
language_server-protocol (~> 3.17.0.2)
|
||||||
lint_roller (~> 1.1.0)
|
lint_roller (~> 1.1.0)
|
||||||
|
|
@ -764,10 +765,10 @@ GEM
|
||||||
rubocop-i18n (3.2.3)
|
rubocop-i18n (3.2.3)
|
||||||
lint_roller (~> 1.1)
|
lint_roller (~> 1.1)
|
||||||
rubocop (>= 1.72.1)
|
rubocop (>= 1.72.1)
|
||||||
rubocop-performance (1.26.0)
|
rubocop-performance (1.26.1)
|
||||||
lint_roller (~> 1.1)
|
lint_roller (~> 1.1)
|
||||||
rubocop (>= 1.75.0, < 2.0)
|
rubocop (>= 1.75.0, < 2.0)
|
||||||
rubocop-ast (>= 1.44.0, < 2.0)
|
rubocop-ast (>= 1.47.1, < 2.0)
|
||||||
rubocop-rails (2.33.4)
|
rubocop-rails (2.33.4)
|
||||||
activesupport (>= 4.2.0)
|
activesupport (>= 4.2.0)
|
||||||
lint_roller (~> 1.1)
|
lint_roller (~> 1.1)
|
||||||
|
|
@ -790,7 +791,7 @@ GEM
|
||||||
ruby-vips (2.2.5)
|
ruby-vips (2.2.5)
|
||||||
ffi (~> 1.12)
|
ffi (~> 1.12)
|
||||||
logger
|
logger
|
||||||
rubyzip (3.1.1)
|
rubyzip (3.2.1)
|
||||||
rufus-scheduler (3.9.2)
|
rufus-scheduler (3.9.2)
|
||||||
fugit (~> 1.1, >= 1.11.1)
|
fugit (~> 1.1, >= 1.11.1)
|
||||||
safety_net_attestation (0.5.0)
|
safety_net_attestation (0.5.0)
|
||||||
|
|
@ -834,7 +835,7 @@ GEM
|
||||||
stackprof (0.2.27)
|
stackprof (0.2.27)
|
||||||
starry (0.2.0)
|
starry (0.2.0)
|
||||||
base64
|
base64
|
||||||
stoplight (5.3.8)
|
stoplight (5.4.0)
|
||||||
zeitwerk
|
zeitwerk
|
||||||
stringio (3.1.7)
|
stringio (3.1.7)
|
||||||
strong_migrations (2.5.1)
|
strong_migrations (2.5.1)
|
||||||
|
|
@ -898,7 +899,7 @@ GEM
|
||||||
zeitwerk (~> 2.2)
|
zeitwerk (~> 2.2)
|
||||||
warden (1.2.9)
|
warden (1.2.9)
|
||||||
rack (>= 2.0.9)
|
rack (>= 2.0.9)
|
||||||
webauthn (3.4.2)
|
webauthn (3.4.3)
|
||||||
android_key_attestation (~> 0.3.0)
|
android_key_attestation (~> 0.3.0)
|
||||||
bindata (~> 2.4)
|
bindata (~> 2.4)
|
||||||
cbor (~> 0.5.9)
|
cbor (~> 0.5.9)
|
||||||
|
|
@ -1009,19 +1010,19 @@ DEPENDENCIES
|
||||||
omniauth_openid_connect (~> 0.8.0)
|
omniauth_openid_connect (~> 0.8.0)
|
||||||
opentelemetry-api (~> 1.7.0)
|
opentelemetry-api (~> 1.7.0)
|
||||||
opentelemetry-exporter-otlp (~> 0.31.0)
|
opentelemetry-exporter-otlp (~> 0.31.0)
|
||||||
opentelemetry-instrumentation-active_job (~> 0.9.0)
|
opentelemetry-instrumentation-active_job (~> 0.10.0)
|
||||||
opentelemetry-instrumentation-active_model_serializers (~> 0.23.0)
|
opentelemetry-instrumentation-active_model_serializers (~> 0.24.0)
|
||||||
opentelemetry-instrumentation-concurrent_ruby (~> 0.23.0)
|
opentelemetry-instrumentation-concurrent_ruby (~> 0.24.0)
|
||||||
opentelemetry-instrumentation-excon (~> 0.25.0)
|
opentelemetry-instrumentation-excon (~> 0.26.0)
|
||||||
opentelemetry-instrumentation-faraday (~> 0.29.0)
|
opentelemetry-instrumentation-faraday (~> 0.30.0)
|
||||||
opentelemetry-instrumentation-http (~> 0.26.0)
|
opentelemetry-instrumentation-http (~> 0.27.0)
|
||||||
opentelemetry-instrumentation-http_client (~> 0.25.0)
|
opentelemetry-instrumentation-http_client (~> 0.26.0)
|
||||||
opentelemetry-instrumentation-net_http (~> 0.25.0)
|
opentelemetry-instrumentation-net_http (~> 0.26.0)
|
||||||
opentelemetry-instrumentation-pg (~> 0.31.0)
|
opentelemetry-instrumentation-pg (~> 0.32.0)
|
||||||
opentelemetry-instrumentation-rack (~> 0.28.0)
|
opentelemetry-instrumentation-rack (~> 0.29.0)
|
||||||
opentelemetry-instrumentation-rails (~> 0.38.0)
|
opentelemetry-instrumentation-rails (~> 0.39.0)
|
||||||
opentelemetry-instrumentation-redis (~> 0.27.0)
|
opentelemetry-instrumentation-redis (~> 0.28.0)
|
||||||
opentelemetry-instrumentation-sidekiq (~> 0.27.0)
|
opentelemetry-instrumentation-sidekiq (~> 0.28.0)
|
||||||
opentelemetry-sdk (~> 1.4)
|
opentelemetry-sdk (~> 1.4)
|
||||||
ox (~> 2.14)
|
ox (~> 2.14)
|
||||||
parslet
|
parslet
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ Mastodon is a **free, open-source social network server** based on [ActivityPub]
|
||||||
### Requirements
|
### Requirements
|
||||||
|
|
||||||
- **Ruby** 3.2+
|
- **Ruby** 3.2+
|
||||||
- **PostgreSQL** 13+
|
- **PostgreSQL** 14+
|
||||||
- **Redis** 7.0+
|
- **Redis** 7.0+
|
||||||
- **Node.js** 20+
|
- **Node.js** 20+
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -157,7 +157,7 @@ class Api::V1::StatusesController < Api::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_quoted_status
|
def set_quoted_status
|
||||||
@quoted_status = Status.find(status_params[:quoted_status_id]) if status_params[:quoted_status_id].present?
|
@quoted_status = Status.find(status_params[:quoted_status_id])&.proper if status_params[:quoted_status_id].present?
|
||||||
authorize(@quoted_status, :quote?) if @quoted_status.present?
|
authorize(@quoted_status, :quote?) if @quoted_status.present?
|
||||||
rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError
|
rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError
|
||||||
# TODO: distinguish between non-existing and non-quotable posts
|
# TODO: distinguish between non-existing and non-quotable posts
|
||||||
|
|
|
||||||
|
|
@ -113,6 +113,7 @@ module ApplicationHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def material_symbol(icon, attributes = {})
|
def material_symbol(icon, attributes = {})
|
||||||
|
whitespace = attributes.delete(:whitespace) { true }
|
||||||
safe_join(
|
safe_join(
|
||||||
[
|
[
|
||||||
inline_svg_tag(
|
inline_svg_tag(
|
||||||
|
|
@ -121,7 +122,7 @@ module ApplicationHelper
|
||||||
role: :img,
|
role: :img,
|
||||||
data: attributes[:data]
|
data: attributes[:data]
|
||||||
),
|
),
|
||||||
' ',
|
whitespace ? ' ' : '',
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,14 @@ module StatusesHelper
|
||||||
status.preloadable_poll.options.map { |o| "[ ] #{o}" }.join("\n")
|
status.preloadable_poll.options.map { |o| "[ ] #{o}" }.join("\n")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def status_classnames(status, is_quote)
|
||||||
|
if is_quote
|
||||||
|
'status--is-quote'
|
||||||
|
elsif status.quote.present?
|
||||||
|
'status--has-quote'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def status_description(status)
|
def status_description(status)
|
||||||
components = [[media_summary(status), status_text_summary(status)].compact_blank.join(' · ')]
|
components = [[media_summary(status), status_text_summary(status)].compact_blank.join(' · ')]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -622,6 +622,7 @@ export function fetchComposeSuggestions(token) {
|
||||||
fetchComposeSuggestionsEmojis(dispatch, getState, token);
|
fetchComposeSuggestionsEmojis(dispatch, getState, token);
|
||||||
break;
|
break;
|
||||||
case '#':
|
case '#':
|
||||||
|
case '#':
|
||||||
fetchComposeSuggestionsTags(dispatch, getState, token);
|
fetchComposeSuggestionsTags(dispatch, getState, token);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
@ -663,11 +664,11 @@ export function selectComposeSuggestion(position, token, suggestion, path) {
|
||||||
|
|
||||||
dispatch(useEmoji(suggestion));
|
dispatch(useEmoji(suggestion));
|
||||||
} else if (suggestion.type === 'hashtag') {
|
} else if (suggestion.type === 'hashtag') {
|
||||||
completion = `#${suggestion.name}`;
|
completion = suggestion.name.slice(token.length - 1);
|
||||||
startPosition = position - 1;
|
startPosition = position + token.length;
|
||||||
} else if (suggestion.type === 'account') {
|
} else if (suggestion.type === 'account') {
|
||||||
completion = getState().getIn(['accounts', suggestion.id, 'acct']);
|
completion = `@${getState().getIn(['accounts', suggestion.id, 'acct'])}`;
|
||||||
startPosition = position;
|
startPosition = position - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We don't want to replace hashtags that vary only in case due to accessibility, but we need to fire off an event so that
|
// We don't want to replace hashtags that vary only in case due to accessibility, but we need to fire off an event so that
|
||||||
|
|
@ -727,7 +728,7 @@ function insertIntoTagHistory(recognizedTags, text) {
|
||||||
// complicated because of new normalization rules, it's no longer just
|
// complicated because of new normalization rules, it's no longer just
|
||||||
// a case sensitivity issue
|
// a case sensitivity issue
|
||||||
const names = recognizedTags.map(tag => {
|
const names = recognizedTags.map(tag => {
|
||||||
const matches = text.match(new RegExp(`#${tag.name}`, 'i'));
|
const matches = text.match(new RegExp(`[##]${tag.name}`, 'i'));
|
||||||
|
|
||||||
if (matches && matches.length > 0) {
|
if (matches && matches.length > 0) {
|
||||||
return matches[0].slice(1);
|
return matches[0].slice(1);
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ export default class AutosuggestInput extends ImmutablePureComponent {
|
||||||
|
|
||||||
static defaultProps = {
|
static defaultProps = {
|
||||||
autoFocus: true,
|
autoFocus: true,
|
||||||
searchTokens: ['@', ':', '#'],
|
searchTokens: ['@', '@', ':', '#', '#'],
|
||||||
};
|
};
|
||||||
|
|
||||||
state = {
|
state = {
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ const textAtCursorMatchesToken = (str, caretPosition) => {
|
||||||
word = str.slice(left, right + caretPosition);
|
word = str.slice(left, right + caretPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!word || word.trim().length < 3 || ['@', ':', '#'].indexOf(word[0]) === -1) {
|
if (!word || word.trim().length < 3 || ['@', '@', ':', '#', '#'].indexOf(word[0]) === -1) {
|
||||||
return [null, null];
|
return [null, null];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ export const AnimateEmojiProvider = polymorphicForwardRef<
|
||||||
|
|
||||||
// If there's a parent context or GIFs autoplay, we don't need handlers.
|
// If there's a parent context or GIFs autoplay, we don't need handlers.
|
||||||
const parentContext = useContext(AnimateEmojiContext);
|
const parentContext = useContext(AnimateEmojiContext);
|
||||||
if (parentContext !== null || autoPlayGif === true) {
|
if (parentContext !== null) {
|
||||||
return (
|
return (
|
||||||
<Wrapper
|
<Wrapper
|
||||||
{...props}
|
{...props}
|
||||||
|
|
|
||||||
|
|
@ -139,24 +139,24 @@ export const Default = {
|
||||||
Last pressed hotkey: <output>{matchedHotkey ?? 'None'}</output>
|
Last pressed hotkey: <output>{matchedHotkey ?? 'None'}</output>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Click within the dashed border and press the "<kbd>n</kbd>
|
Click within the dashed border and press the <kbd>n</kbd>
|
||||||
" or "<kbd>/</kbd>" key. Press "
|
or <kbd>/</kbd> key. Press
|
||||||
<kbd>Backspace</kbd>" to clear the displayed hotkey.
|
<kbd>Backspace</kbd> to clear the displayed hotkey.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Try typing a sequence, like "<kbd>g</kbd>" shortly
|
Try typing a sequence, like <kbd>g</kbd> shortly followed by{' '}
|
||||||
followed by "<kbd>h</kbd>", "<kbd>n</kbd>", or
|
<kbd>h</kbd>, <kbd>n</kbd>, or
|
||||||
"<kbd>f</kbd>"
|
<kbd>f</kbd>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Note that this playground doesn't support all hotkeys we use in
|
Note that this playground doesn't support all hotkeys we use in
|
||||||
the app.
|
the app.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
When a <button>Button</button> is focused, "
|
When a <button>Button</button> is focused,
|
||||||
<kbd>Enter</kbd>
|
<kbd>Enter</kbd>
|
||||||
" should not trigger "open", but "<kbd>o</kbd>
|
should not trigger open, but <kbd>o</kbd>
|
||||||
" should.
|
should.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
When an input element is focused, hotkeys should not interfere with
|
When an input element is focused, hotkeys should not interfere with
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { useCallback, useMemo } from 'react';
|
import { useCallback, useMemo } from 'react';
|
||||||
import type { FC, KeyboardEvent, MouseEvent } from 'react';
|
import type { FC, KeyboardEvent, MouseEvent, MouseEventHandler } from 'react';
|
||||||
|
|
||||||
import { useIntl } from 'react-intl';
|
import { useIntl } from 'react-intl';
|
||||||
|
|
||||||
|
|
@ -8,6 +8,7 @@ import classNames from 'classnames';
|
||||||
import { quoteComposeById } from '@/mastodon/actions/compose_typed';
|
import { quoteComposeById } from '@/mastodon/actions/compose_typed';
|
||||||
import { toggleReblog } from '@/mastodon/actions/interactions';
|
import { toggleReblog } from '@/mastodon/actions/interactions';
|
||||||
import { openModal } from '@/mastodon/actions/modal';
|
import { openModal } from '@/mastodon/actions/modal';
|
||||||
|
import { quickBoosting } from '@/mastodon/initial_state';
|
||||||
import type { ActionMenuItem } from '@/mastodon/models/dropdown_menu';
|
import type { ActionMenuItem } from '@/mastodon/models/dropdown_menu';
|
||||||
import type { Status } from '@/mastodon/models/status';
|
import type { Status } from '@/mastodon/models/status';
|
||||||
import { useAppDispatch, useAppSelector } from '@/mastodon/store';
|
import { useAppDispatch, useAppSelector } from '@/mastodon/store';
|
||||||
|
|
@ -24,6 +25,55 @@ import {
|
||||||
selectStatusState,
|
selectStatusState,
|
||||||
} from './boost_button_utils';
|
} from './boost_button_utils';
|
||||||
|
|
||||||
|
const StandaloneBoostButton: FC<ReblogButtonProps> = ({ status, counters }) => {
|
||||||
|
const intl = useIntl();
|
||||||
|
const dispatch = useAppDispatch();
|
||||||
|
|
||||||
|
const statusState = useAppSelector((state) =>
|
||||||
|
selectStatusState(state, status),
|
||||||
|
);
|
||||||
|
const { title, meta, iconComponent, disabled } = useMemo(
|
||||||
|
() => boostItemState(statusState),
|
||||||
|
[statusState],
|
||||||
|
);
|
||||||
|
|
||||||
|
const handleClick: MouseEventHandler = useCallback(
|
||||||
|
(event) => {
|
||||||
|
if (statusState.isLoggedIn) {
|
||||||
|
dispatch(toggleReblog(status.get('id') as string, event.shiftKey));
|
||||||
|
} else {
|
||||||
|
dispatch(
|
||||||
|
openModal({
|
||||||
|
modalType: 'INTERACTION',
|
||||||
|
modalProps: {
|
||||||
|
accountId: status.getIn(['account', 'id']),
|
||||||
|
url: status.get('uri'),
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
[dispatch, status, statusState.isLoggedIn],
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<IconButton
|
||||||
|
disabled={disabled}
|
||||||
|
active={!!status.get('reblogged')}
|
||||||
|
title={intl.formatMessage(meta ?? title)}
|
||||||
|
icon='retweet'
|
||||||
|
iconComponent={iconComponent}
|
||||||
|
onClick={!disabled ? handleClick : undefined}
|
||||||
|
counter={
|
||||||
|
counters
|
||||||
|
? (status.get('reblogs_count') as number) +
|
||||||
|
(status.get('quotes_count') as number)
|
||||||
|
: undefined
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
const renderMenuItem: RenderItemFn<ActionMenuItem> = (
|
const renderMenuItem: RenderItemFn<ActionMenuItem> = (
|
||||||
item,
|
item,
|
||||||
index,
|
index,
|
||||||
|
|
@ -46,7 +96,7 @@ interface ReblogButtonProps {
|
||||||
|
|
||||||
type ActionMenuItemWithIcon = SomeRequired<ActionMenuItem, 'icon'>;
|
type ActionMenuItemWithIcon = SomeRequired<ActionMenuItem, 'icon'>;
|
||||||
|
|
||||||
export const BoostButton: FC<ReblogButtonProps> = ({ status, counters }) => {
|
const BoostOrQuoteMenu: FC<ReblogButtonProps> = ({ status, counters }) => {
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
const statusState = useAppSelector((state) =>
|
const statusState = useAppSelector((state) =>
|
||||||
|
|
@ -188,3 +238,9 @@ const ReblogMenuItem: FC<ReblogMenuItemProps> = ({
|
||||||
</li>
|
</li>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Switch between the standalone boost button or the
|
||||||
|
// "Boost or quote" menu based on the quickBoosting preference
|
||||||
|
export const BoostButton = quickBoosting
|
||||||
|
? StandaloneBoostButton
|
||||||
|
: BoostOrQuoteMenu;
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ export const HandledLink: FC<HandledLinkProps & ComponentProps<'a'>> = ({
|
||||||
{children}
|
{children}
|
||||||
</Link>
|
</Link>
|
||||||
);
|
);
|
||||||
} else if ((text.startsWith('@') || prevText?.endsWith('@')) && mention) {
|
} else if (mention) {
|
||||||
// Handle mentions
|
// Handle mentions
|
||||||
return (
|
return (
|
||||||
<Link
|
<Link
|
||||||
|
|
|
||||||
|
|
@ -20,11 +20,12 @@ import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_FEDERATION } from 'mastodon/
|
||||||
import { WithRouterPropTypes } from 'mastodon/utils/react_router';
|
import { WithRouterPropTypes } from 'mastodon/utils/react_router';
|
||||||
|
|
||||||
import { Dropdown } from 'mastodon/components/dropdown_menu';
|
import { Dropdown } from 'mastodon/components/dropdown_menu';
|
||||||
import { me } from '../../initial_state';
|
import { me, quickBoosting } from '../../initial_state';
|
||||||
|
|
||||||
import { IconButton } from '../icon_button';
|
import { IconButton } from '../icon_button';
|
||||||
import { BoostButton } from '../status/boost_button';
|
import { BoostButton } from '../status/boost_button';
|
||||||
import { RemoveQuoteHint } from './remove_quote_hint';
|
import { RemoveQuoteHint } from './remove_quote_hint';
|
||||||
|
import { quoteItemState, selectStatusState } from '../status/boost_button_utils';
|
||||||
|
|
||||||
const messages = defineMessages({
|
const messages = defineMessages({
|
||||||
delete: { id: 'status.delete', defaultMessage: 'Delete' },
|
delete: { id: 'status.delete', defaultMessage: 'Delete' },
|
||||||
|
|
@ -68,6 +69,7 @@ const mapStateToProps = (state, { status }) => {
|
||||||
return ({
|
return ({
|
||||||
relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]),
|
relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]),
|
||||||
quotedAccountId: quotedStatusId ? state.getIn(['statuses', quotedStatusId, 'account']) : null,
|
quotedAccountId: quotedStatusId ? state.getIn(['statuses', quotedStatusId, 'account']) : null,
|
||||||
|
statusQuoteState: selectStatusState(state, status),
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -76,6 +78,7 @@ class StatusActionBar extends ImmutablePureComponent {
|
||||||
identity: identityContextPropShape,
|
identity: identityContextPropShape,
|
||||||
status: ImmutablePropTypes.map.isRequired,
|
status: ImmutablePropTypes.map.isRequired,
|
||||||
relationship: ImmutablePropTypes.record,
|
relationship: ImmutablePropTypes.record,
|
||||||
|
statusQuoteState: PropTypes.object,
|
||||||
quotedAccountId: PropTypes.string,
|
quotedAccountId: PropTypes.string,
|
||||||
contextType: PropTypes.string,
|
contextType: PropTypes.string,
|
||||||
onReply: PropTypes.func,
|
onReply: PropTypes.func,
|
||||||
|
|
@ -125,6 +128,10 @@ class StatusActionBar extends ImmutablePureComponent {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
handleQuoteClick = () => {
|
||||||
|
this.props.onQuote(this.props.status);
|
||||||
|
};
|
||||||
|
|
||||||
handleShareClick = () => {
|
handleShareClick = () => {
|
||||||
navigator.share({
|
navigator.share({
|
||||||
url: this.props.status.get('url'),
|
url: this.props.status.get('url'),
|
||||||
|
|
@ -241,7 +248,7 @@ class StatusActionBar extends ImmutablePureComponent {
|
||||||
};
|
};
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { status, relationship, quotedAccountId, contextType, intl, withDismiss, withCounters, scrollKey } = this.props;
|
const { status, relationship, statusQuoteState, quotedAccountId, contextType, intl, withDismiss, withCounters, scrollKey } = this.props;
|
||||||
const { signedIn, permissions } = this.props.identity;
|
const { signedIn, permissions } = this.props.identity;
|
||||||
|
|
||||||
const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));
|
const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));
|
||||||
|
|
@ -270,6 +277,19 @@ class StatusActionBar extends ImmutablePureComponent {
|
||||||
menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });
|
menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (quickBoosting && signedIn) {
|
||||||
|
const quoteItem = quoteItemState(statusQuoteState);
|
||||||
|
menu.push(null);
|
||||||
|
menu.push({
|
||||||
|
text: intl.formatMessage(quoteItem.title),
|
||||||
|
description: quoteItem.meta
|
||||||
|
? intl.formatMessage(quoteItem.meta)
|
||||||
|
: undefined,
|
||||||
|
disabled: quoteItem.disabled,
|
||||||
|
action: this.handleQuoteClick,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (signedIn) {
|
if (signedIn) {
|
||||||
menu.push(null);
|
menu.push(null);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,17 @@ const mapStateToProps = state => ({
|
||||||
languages: state.getIn(['server', 'translationLanguages', 'items']),
|
languages: state.getIn(['server', 'translationLanguages', 'items']),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const compareUrls = (href1, href2) => {
|
||||||
|
try {
|
||||||
|
const url1 = new URL(href1);
|
||||||
|
const url2 = new URL(href2);
|
||||||
|
|
||||||
|
return url1.origin === url2.origin && url1.path === url2.path && url1.search === url2.search;
|
||||||
|
} catch {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class StatusContent extends PureComponent {
|
class StatusContent extends PureComponent {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
identity: identityContextPropShape,
|
identity: identityContextPropShape,
|
||||||
|
|
@ -127,7 +138,7 @@ class StatusContent extends PureComponent {
|
||||||
|
|
||||||
link.classList.add('status-link');
|
link.classList.add('status-link');
|
||||||
|
|
||||||
mention = this.props.status.get('mentions').find(item => link.href === item.get('url'));
|
mention = this.props.status.get('mentions').find(item => compareUrls(link, item.get('url')));
|
||||||
|
|
||||||
if (mention) {
|
if (mention) {
|
||||||
link.addEventListener('click', this.onMentionClick.bind(this, mention), false);
|
link.addEventListener('click', this.onMentionClick.bind(this, mention), false);
|
||||||
|
|
@ -206,7 +217,7 @@ class StatusContent extends PureComponent {
|
||||||
|
|
||||||
handleElement = (element, { key, ...props }, children) => {
|
handleElement = (element, { key, ...props }, children) => {
|
||||||
if (element instanceof HTMLAnchorElement) {
|
if (element instanceof HTMLAnchorElement) {
|
||||||
const mention = this.props.status.get('mentions').find(item => element.href === item.get('url'));
|
const mention = this.props.status.get('mentions').find(item => compareUrls(element.href, item.get('url')));
|
||||||
return (
|
return (
|
||||||
<HandledLink
|
<HandledLink
|
||||||
{...props}
|
{...props}
|
||||||
|
|
@ -219,7 +230,7 @@ class StatusContent extends PureComponent {
|
||||||
{children}
|
{children}
|
||||||
</HandledLink>
|
</HandledLink>
|
||||||
);
|
);
|
||||||
} else if (element instanceof HTMLParagraphElement && element.classList.contains('quote-inline')) {
|
} else if (element.classList.contains('quote-inline')) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|
@ -269,7 +280,7 @@ class StatusContent extends PureComponent {
|
||||||
lang={language}
|
lang={language}
|
||||||
htmlString={content}
|
htmlString={content}
|
||||||
extraEmojis={status.get('emojis')}
|
extraEmojis={status.get('emojis')}
|
||||||
onElement={this.handleElement.bind(this)}
|
onElement={this.handleElement}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{poll}
|
{poll}
|
||||||
|
|
@ -287,7 +298,7 @@ class StatusContent extends PureComponent {
|
||||||
lang={language}
|
lang={language}
|
||||||
htmlString={content}
|
htmlString={content}
|
||||||
extraEmojis={status.get('emojis')}
|
extraEmojis={status.get('emojis')}
|
||||||
onElement={this.handleElement.bind(this)}
|
onElement={this.handleElement}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{poll}
|
{poll}
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import type { Status } from 'mastodon/models/status';
|
||||||
import type { RootState } from 'mastodon/store';
|
import type { RootState } from 'mastodon/store';
|
||||||
import { useAppDispatch, useAppSelector } from 'mastodon/store';
|
import { useAppDispatch, useAppSelector } from 'mastodon/store';
|
||||||
|
|
||||||
|
import { fetchRelationships } from '../actions/accounts';
|
||||||
import { revealAccount } from '../actions/accounts_typed';
|
import { revealAccount } from '../actions/accounts_typed';
|
||||||
import { fetchStatus } from '../actions/statuses';
|
import { fetchStatus } from '../actions/statuses';
|
||||||
import { makeGetStatusWithExtraInfo } from '../selectors';
|
import { makeGetStatusWithExtraInfo } from '../selectors';
|
||||||
|
|
@ -148,6 +149,10 @@ export const QuotedStatus: React.FC<QuotedStatusProps> = ({
|
||||||
}
|
}
|
||||||
}, [shouldFetchQuote, quotedStatusId, parentQuotePostId, dispatch]);
|
}, [shouldFetchQuote, quotedStatusId, parentQuotePostId, dispatch]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (accountId && hiddenAccount) dispatch(fetchRelationships([accountId]));
|
||||||
|
}, [accountId, hiddenAccount, dispatch]);
|
||||||
|
|
||||||
const isFilteredAndHidden = loadingState === 'filtered';
|
const isFilteredAndHidden = loadingState === 'filtered';
|
||||||
|
|
||||||
let quoteError: React.ReactNode = null;
|
let quoteError: React.ReactNode = null;
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,8 @@ import { connect } from 'react-redux';
|
||||||
import PeopleIcon from '@/material-icons/400-24px/group.svg?react';
|
import PeopleIcon from '@/material-icons/400-24px/group.svg?react';
|
||||||
import { DismissableBanner } from 'mastodon/components/dismissable_banner';
|
import { DismissableBanner } from 'mastodon/components/dismissable_banner';
|
||||||
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
|
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
|
||||||
import { domain } from 'mastodon/initial_state';
|
import { domain, localLiveFeedAccess } from 'mastodon/initial_state';
|
||||||
|
import { canViewFeed } from 'mastodon/permissions';
|
||||||
|
|
||||||
import { addColumn, removeColumn, moveColumn } from '../../actions/columns';
|
import { addColumn, removeColumn, moveColumn } from '../../actions/columns';
|
||||||
import { connectCommunityStream } from '../../actions/streaming';
|
import { connectCommunityStream } from '../../actions/streaming';
|
||||||
|
|
@ -120,8 +121,21 @@ class CommunityTimeline extends PureComponent {
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { intl, hasUnread, columnId, multiColumn, onlyMedia } = this.props;
|
const { intl, hasUnread, columnId, multiColumn, onlyMedia } = this.props;
|
||||||
|
const { signedIn, permissions } = this.props.identity;
|
||||||
const pinned = !!columnId;
|
const pinned = !!columnId;
|
||||||
|
|
||||||
|
const emptyMessage = canViewFeed(signedIn, permissions, localLiveFeedAccess) ? (
|
||||||
|
<FormattedMessage
|
||||||
|
id='empty_column.community'
|
||||||
|
defaultMessage='The local timeline is empty. Write something publicly to get the ball rolling!'
|
||||||
|
/>
|
||||||
|
) : (
|
||||||
|
<FormattedMessage
|
||||||
|
id='empty_column.disabled_feed'
|
||||||
|
defaultMessage='This feed has been disabled by your server administrators.'
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}>
|
<Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}>
|
||||||
<ColumnHeader
|
<ColumnHeader
|
||||||
|
|
@ -144,7 +158,7 @@ class CommunityTimeline extends PureComponent {
|
||||||
scrollKey={`community_timeline-${columnId}`}
|
scrollKey={`community_timeline-${columnId}`}
|
||||||
timelineId={`community${onlyMedia ? ':media' : ''}`}
|
timelineId={`community${onlyMedia ? ':media' : ''}`}
|
||||||
onLoadMore={this.handleLoadMore}
|
onLoadMore={this.handleLoadMore}
|
||||||
emptyMessage={<FormattedMessage id='empty_column.community' defaultMessage='The local timeline is empty. Write something publicly to get the ball rolling!' />}
|
emptyMessage={emptyMessage}
|
||||||
bindToDocument={!multiColumn}
|
bindToDocument={!multiColumn}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -9,7 +9,7 @@ import { EMOJI_MODE_NATIVE } from './constants';
|
||||||
import EmojiData from './emoji_data.json';
|
import EmojiData from './emoji_data.json';
|
||||||
import { useEmojiAppState } from './mode';
|
import { useEmojiAppState } from './mode';
|
||||||
|
|
||||||
const backgroundImageFnDefault = () => `${assetHost}/emoji/sheet_15_1.png`;
|
const backgroundImageFnDefault = () => `${assetHost}/emoji/sheet_16_0.png`;
|
||||||
|
|
||||||
const Emoji = ({
|
const Emoji = ({
|
||||||
set = 'twitter',
|
set = 'twitter',
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
import { initialState } from '@/mastodon/initial_state';
|
import { initialState } from '@/mastodon/initial_state';
|
||||||
import { loadWorker } from '@/mastodon/utils/workers';
|
|
||||||
|
|
||||||
import { toSupportedLocale } from './locale';
|
import { toSupportedLocale } from './locale';
|
||||||
import { emojiLogger } from './utils';
|
import { emojiLogger } from './utils';
|
||||||
|
// eslint-disable-next-line import/default -- Importing via worker loader.
|
||||||
|
import EmojiWorker from './worker?worker&inline';
|
||||||
|
|
||||||
const userLocale = toSupportedLocale(initialState?.meta.locale ?? 'en');
|
const userLocale = toSupportedLocale(initialState?.meta.locale ?? 'en');
|
||||||
|
|
||||||
|
|
@ -16,9 +17,7 @@ export function initializeEmoji() {
|
||||||
log('initializing emojis');
|
log('initializing emojis');
|
||||||
if (!worker && 'Worker' in window) {
|
if (!worker && 'Worker' in window) {
|
||||||
try {
|
try {
|
||||||
worker = loadWorker(new URL('./worker', import.meta.url), {
|
worker = new EmojiWorker();
|
||||||
type: 'module',
|
|
||||||
});
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.warn('Error creating web worker:', err);
|
console.warn('Error creating web worker:', err);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ function testEmojiSupport(text: string) {
|
||||||
return compareFeatures(feature1, feature2);
|
return compareFeatures(feature1, feature2);
|
||||||
}
|
}
|
||||||
|
|
||||||
const EMOJI_VERSION_TEST_EMOJI = '🫨'; // shaking head, from v15
|
const EMOJI_VERSION_TEST_EMOJI = ''; // face with bags under eyes, from Unicode 16.0.
|
||||||
const EMOJI_FLAG_TEST_EMOJI = '🇨🇭';
|
const EMOJI_FLAG_TEST_EMOJI = '🇨🇭';
|
||||||
|
|
||||||
export function determineEmojiMode(style: string): EmojiMode {
|
export function determineEmojiMode(style: string): EmojiMode {
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,8 @@ import { changeSetting } from 'mastodon/actions/settings';
|
||||||
import { connectPublicStream, connectCommunityStream } from 'mastodon/actions/streaming';
|
import { connectPublicStream, connectCommunityStream } from 'mastodon/actions/streaming';
|
||||||
import { expandPublicTimeline, expandCommunityTimeline } from 'mastodon/actions/timelines';
|
import { expandPublicTimeline, expandCommunityTimeline } from 'mastodon/actions/timelines';
|
||||||
import { DismissableBanner } from 'mastodon/components/dismissable_banner';
|
import { DismissableBanner } from 'mastodon/components/dismissable_banner';
|
||||||
import { localLiveFeedAccess, remoteLiveFeedAccess, me, domain } from 'mastodon/initial_state';
|
import { localLiveFeedAccess, remoteLiveFeedAccess, domain } from 'mastodon/initial_state';
|
||||||
|
import { canViewFeed } from 'mastodon/permissions';
|
||||||
import { useAppDispatch, useAppSelector } from 'mastodon/store';
|
import { useAppDispatch, useAppSelector } from 'mastodon/store';
|
||||||
|
|
||||||
import Column from '../../components/column';
|
import Column from '../../components/column';
|
||||||
|
|
@ -52,7 +53,7 @@ const ColumnSettings = () => {
|
||||||
const Firehose = ({ feedType, multiColumn }) => {
|
const Firehose = ({ feedType, multiColumn }) => {
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
const { signedIn } = useIdentity();
|
const { signedIn, permissions } = useIdentity();
|
||||||
const columnRef = useRef(null);
|
const columnRef = useRef(null);
|
||||||
|
|
||||||
const onlyMedia = useAppSelector((state) => state.getIn(['settings', 'firehose', 'onlyMedia'], false));
|
const onlyMedia = useAppSelector((state) => state.getIn(['settings', 'firehose', 'onlyMedia'], false));
|
||||||
|
|
@ -151,6 +152,15 @@ const Firehose = ({ feedType, multiColumn }) => {
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const canViewSelectedFeed = canViewFeed(signedIn, permissions, feedType === 'community' ? localLiveFeedAccess : remoteLiveFeedAccess);
|
||||||
|
|
||||||
|
const disabledTimelineMessage = (
|
||||||
|
<FormattedMessage
|
||||||
|
id='empty_column.disabled_feed'
|
||||||
|
defaultMessage='This feed has been disabled by your server administrators.'
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Column bindToDocument={!multiColumn} ref={columnRef} label={intl.formatMessage(messages.title)}>
|
<Column bindToDocument={!multiColumn} ref={columnRef} label={intl.formatMessage(messages.title)}>
|
||||||
<ColumnHeader
|
<ColumnHeader
|
||||||
|
|
@ -165,7 +175,7 @@ const Firehose = ({ feedType, multiColumn }) => {
|
||||||
<ColumnSettings />
|
<ColumnSettings />
|
||||||
</ColumnHeader>
|
</ColumnHeader>
|
||||||
|
|
||||||
{(signedIn || (localLiveFeedAccess === 'public' && remoteLiveFeedAccess === 'public')) && (
|
{(canViewFeed(signedIn, permissions, localLiveFeedAccess) && canViewFeed(signedIn, permissions, remoteLiveFeedAccess)) && (
|
||||||
<div className='account__section-headline'>
|
<div className='account__section-headline'>
|
||||||
<NavLink exact to='/public/local'>
|
<NavLink exact to='/public/local'>
|
||||||
<FormattedMessage tagName='div' id='firehose.local' defaultMessage='This server' />
|
<FormattedMessage tagName='div' id='firehose.local' defaultMessage='This server' />
|
||||||
|
|
@ -187,7 +197,7 @@ const Firehose = ({ feedType, multiColumn }) => {
|
||||||
onLoadMore={handleLoadMore}
|
onLoadMore={handleLoadMore}
|
||||||
trackScroll
|
trackScroll
|
||||||
scrollKey='firehose'
|
scrollKey='firehose'
|
||||||
emptyMessage={emptyMessage}
|
emptyMessage={canViewSelectedFeed ? emptyMessage : disabledTimelineMessage}
|
||||||
bindToDocument={!multiColumn}
|
bindToDocument={!multiColumn}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ import {
|
||||||
me,
|
me,
|
||||||
} from 'mastodon/initial_state';
|
} from 'mastodon/initial_state';
|
||||||
import { transientSingleColumn } from 'mastodon/is_mobile';
|
import { transientSingleColumn } from 'mastodon/is_mobile';
|
||||||
|
import { canViewFeed } from 'mastodon/permissions';
|
||||||
import { selectUnreadNotificationGroupsCount } from 'mastodon/selectors/notifications';
|
import { selectUnreadNotificationGroupsCount } from 'mastodon/selectors/notifications';
|
||||||
import { useAppSelector, useAppDispatch } from 'mastodon/store';
|
import { useAppSelector, useAppDispatch } from 'mastodon/store';
|
||||||
|
|
||||||
|
|
@ -194,7 +195,7 @@ export const NavigationPanel: React.FC<{ multiColumn?: boolean }> = ({
|
||||||
multiColumn = false,
|
multiColumn = false,
|
||||||
}) => {
|
}) => {
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
const { signedIn, disabledAccountId } = useIdentity();
|
const { signedIn, permissions, disabledAccountId } = useIdentity();
|
||||||
const location = useLocation();
|
const location = useLocation();
|
||||||
const showSearch = useBreakpoint('full') && !multiColumn;
|
const showSearch = useBreakpoint('full') && !multiColumn;
|
||||||
|
|
||||||
|
|
@ -262,13 +263,12 @@ export const NavigationPanel: React.FC<{ multiColumn?: boolean }> = ({
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{(signedIn ||
|
{(canViewFeed(signedIn, permissions, localLiveFeedAccess) ||
|
||||||
localLiveFeedAccess === 'public' ||
|
canViewFeed(signedIn, permissions, remoteLiveFeedAccess)) && (
|
||||||
remoteLiveFeedAccess === 'public') && (
|
|
||||||
<ColumnLink
|
<ColumnLink
|
||||||
transparent
|
transparent
|
||||||
to={
|
to={
|
||||||
signedIn || localLiveFeedAccess === 'public'
|
canViewFeed(signedIn, permissions, localLiveFeedAccess)
|
||||||
? '/public/local'
|
? '/public/local'
|
||||||
: '/public/remote'
|
: '/public/remote'
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,11 +46,15 @@ export const EmbeddedStatusContent: React.FC<{
|
||||||
() => (status.get('mentions') as List<Mention>).toJS(),
|
() => (status.get('mentions') as List<Mention>).toJS(),
|
||||||
[status],
|
[status],
|
||||||
);
|
);
|
||||||
const htmlHandlers = useElementHandledLink({
|
const hrefToMention = useCallback(
|
||||||
hashtagAccountId: status.get('account') as string | undefined,
|
(href: string) => {
|
||||||
hrefToMention(href) {
|
|
||||||
return mentions.find((item) => item.url === href);
|
return mentions.find((item) => item.url === href);
|
||||||
},
|
},
|
||||||
|
[mentions],
|
||||||
|
);
|
||||||
|
const htmlHandlers = useElementHandledLink({
|
||||||
|
hashtagAccountId: status.get('account') as string | undefined,
|
||||||
|
hrefToMention,
|
||||||
});
|
});
|
||||||
|
|
||||||
const handleContentRef = useCallback(
|
const handleContentRef = useCallback(
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,8 @@ import { connect } from 'react-redux';
|
||||||
import PublicIcon from '@/material-icons/400-24px/public.svg?react';
|
import PublicIcon from '@/material-icons/400-24px/public.svg?react';
|
||||||
import { DismissableBanner } from 'mastodon/components/dismissable_banner';
|
import { DismissableBanner } from 'mastodon/components/dismissable_banner';
|
||||||
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
|
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
|
||||||
import { domain } from 'mastodon/initial_state';
|
import { domain, localLiveFeedAccess, remoteLiveFeedAccess } from 'mastodon/initial_state';
|
||||||
|
import { canViewFeed } from 'mastodon/permissions';
|
||||||
|
|
||||||
import { addColumn, removeColumn, moveColumn } from '../../actions/columns';
|
import { addColumn, removeColumn, moveColumn } from '../../actions/columns';
|
||||||
import { connectPublicStream } from '../../actions/streaming';
|
import { connectPublicStream } from '../../actions/streaming';
|
||||||
|
|
@ -123,8 +124,21 @@ class PublicTimeline extends PureComponent {
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { intl, columnId, hasUnread, multiColumn, onlyMedia, onlyRemote } = this.props;
|
const { intl, columnId, hasUnread, multiColumn, onlyMedia, onlyRemote } = this.props;
|
||||||
|
const { signedIn, permissions } = this.props.identity;
|
||||||
const pinned = !!columnId;
|
const pinned = !!columnId;
|
||||||
|
|
||||||
|
const emptyMessage = (canViewFeed(signedIn, permissions, localLiveFeedAccess) || canViewFeed(signedIn, permissions, remoteLiveFeedAccess)) ? (
|
||||||
|
<FormattedMessage
|
||||||
|
id='empty_column.public'
|
||||||
|
defaultMessage='There is nothing here! Write something publicly, or manually follow users from other servers to fill it up'
|
||||||
|
/>
|
||||||
|
) : (
|
||||||
|
<FormattedMessage
|
||||||
|
id='empty_column.disabled_feed'
|
||||||
|
defaultMessage='This feed has been disabled by your server administrators.'
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}>
|
<Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}>
|
||||||
<ColumnHeader
|
<ColumnHeader
|
||||||
|
|
@ -147,7 +161,7 @@ class PublicTimeline extends PureComponent {
|
||||||
onLoadMore={this.handleLoadMore}
|
onLoadMore={this.handleLoadMore}
|
||||||
trackScroll={!pinned}
|
trackScroll={!pinned}
|
||||||
scrollKey={`public_timeline-${columnId}`}
|
scrollKey={`public_timeline-${columnId}`}
|
||||||
emptyMessage={<FormattedMessage id='empty_column.public' defaultMessage='There is nothing here! Write something publicly, or manually follow users from other servers to fill it up' />}
|
emptyMessage={emptyMessage}
|
||||||
bindToDocument={!multiColumn}
|
bindToDocument={!multiColumn}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,9 @@ import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_FEDERATION } from 'mastodon/
|
||||||
|
|
||||||
import { IconButton } from '../../../components/icon_button';
|
import { IconButton } from '../../../components/icon_button';
|
||||||
import { Dropdown } from 'mastodon/components/dropdown_menu';
|
import { Dropdown } from 'mastodon/components/dropdown_menu';
|
||||||
import { me } from '../../../initial_state';
|
import { me, quickBoosting } from '../../../initial_state';
|
||||||
import { BoostButton } from '@/mastodon/components/status/boost_button';
|
import { BoostButton } from '@/mastodon/components/status/boost_button';
|
||||||
|
import { quoteItemState, selectStatusState } from '@/mastodon/components/status/boost_button_utils';
|
||||||
|
|
||||||
const messages = defineMessages({
|
const messages = defineMessages({
|
||||||
delete: { id: 'status.delete', defaultMessage: 'Delete' },
|
delete: { id: 'status.delete', defaultMessage: 'Delete' },
|
||||||
|
|
@ -60,6 +61,7 @@ const mapStateToProps = (state, { status }) => {
|
||||||
return ({
|
return ({
|
||||||
relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]),
|
relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]),
|
||||||
quotedAccountId: quotedStatusId ? state.getIn(['statuses', quotedStatusId, 'account']) : null,
|
quotedAccountId: quotedStatusId ? state.getIn(['statuses', quotedStatusId, 'account']) : null,
|
||||||
|
statusQuoteState: selectStatusState(state, status),
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -68,6 +70,7 @@ class ActionBar extends PureComponent {
|
||||||
identity: identityContextPropShape,
|
identity: identityContextPropShape,
|
||||||
status: ImmutablePropTypes.map.isRequired,
|
status: ImmutablePropTypes.map.isRequired,
|
||||||
relationship: ImmutablePropTypes.record,
|
relationship: ImmutablePropTypes.record,
|
||||||
|
statusQuoteState: PropTypes.object,
|
||||||
quotedAccountId: ImmutablePropTypes.string,
|
quotedAccountId: ImmutablePropTypes.string,
|
||||||
onReply: PropTypes.func.isRequired,
|
onReply: PropTypes.func.isRequired,
|
||||||
onReblog: PropTypes.func.isRequired,
|
onReblog: PropTypes.func.isRequired,
|
||||||
|
|
@ -116,6 +119,10 @@ class ActionBar extends PureComponent {
|
||||||
this.props.onRevokeQuote(this.props.status);
|
this.props.onRevokeQuote(this.props.status);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
handleQuoteClick = () => {
|
||||||
|
this.props.onQuote(this.props.status);
|
||||||
|
};
|
||||||
|
|
||||||
handleQuotePolicyChange = () => {
|
handleQuotePolicyChange = () => {
|
||||||
this.props.onQuotePolicyChange(this.props.status);
|
this.props.onQuotePolicyChange(this.props.status);
|
||||||
};
|
};
|
||||||
|
|
@ -200,7 +207,7 @@ class ActionBar extends PureComponent {
|
||||||
};
|
};
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { status, relationship, quotedAccountId, intl } = this.props;
|
const { status, relationship, statusQuoteState, quotedAccountId, intl } = this.props;
|
||||||
const { signedIn, permissions } = this.props.identity;
|
const { signedIn, permissions } = this.props.identity;
|
||||||
|
|
||||||
const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));
|
const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));
|
||||||
|
|
@ -226,6 +233,19 @@ class ActionBar extends PureComponent {
|
||||||
menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });
|
menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (quickBoosting && signedIn) {
|
||||||
|
const quoteItem = quoteItemState(statusQuoteState);
|
||||||
|
menu.push(null);
|
||||||
|
menu.push({
|
||||||
|
text: intl.formatMessage(quoteItem.title),
|
||||||
|
description: quoteItem.meta
|
||||||
|
? intl.formatMessage(quoteItem.meta)
|
||||||
|
: undefined,
|
||||||
|
disabled: quoteItem.disabled,
|
||||||
|
action: this.handleQuoteClick,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (signedIn) {
|
if (signedIn) {
|
||||||
menu.push(null);
|
menu.push(null);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
import { useEffect, useState, useCallback } from 'react';
|
import { useEffect, useState, useCallback, useMemo } from 'react';
|
||||||
|
|
||||||
import { useIntl, defineMessages } from 'react-intl';
|
import { useIntl, defineMessages } from 'react-intl';
|
||||||
|
|
||||||
|
import { useDebouncedCallback } from 'use-debounce';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
fetchContext,
|
fetchContext,
|
||||||
completeContextRefresh,
|
completeContextRefresh,
|
||||||
|
|
@ -13,6 +15,8 @@ import { apiGetAsyncRefresh } from 'mastodon/api/async_refreshes';
|
||||||
import { Alert } from 'mastodon/components/alert';
|
import { Alert } from 'mastodon/components/alert';
|
||||||
import { ExitAnimationWrapper } from 'mastodon/components/exit_animation_wrapper';
|
import { ExitAnimationWrapper } from 'mastodon/components/exit_animation_wrapper';
|
||||||
import { LoadingIndicator } from 'mastodon/components/loading_indicator';
|
import { LoadingIndicator } from 'mastodon/components/loading_indicator';
|
||||||
|
import { useInterval } from 'mastodon/hooks/useInterval';
|
||||||
|
import { useIsDocumentVisible } from 'mastodon/hooks/useIsDocumentVisible';
|
||||||
import { useAppSelector, useAppDispatch } from 'mastodon/store';
|
import { useAppSelector, useAppDispatch } from 'mastodon/store';
|
||||||
|
|
||||||
const AnimatedAlert: React.FC<
|
const AnimatedAlert: React.FC<
|
||||||
|
|
@ -52,14 +56,151 @@ const messages = defineMessages({
|
||||||
|
|
||||||
type LoadingState = 'idle' | 'more-available' | 'loading' | 'success' | 'error';
|
type LoadingState = 'idle' | 'more-available' | 'loading' | 'success' | 'error';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Age of thread below which we consider it new & fetch
|
||||||
|
* replies more frequently
|
||||||
|
*/
|
||||||
|
const NEW_THREAD_AGE_THRESHOLD = 30 * 60_000;
|
||||||
|
/**
|
||||||
|
* Interval at which we check for new replies for old threads
|
||||||
|
*/
|
||||||
|
const LONG_AUTO_FETCH_REPLIES_INTERVAL = 5 * 60_000;
|
||||||
|
/**
|
||||||
|
* Interval at which we check for new replies for new threads.
|
||||||
|
* Also used as a threshold to throttle repeated fetch calls
|
||||||
|
*/
|
||||||
|
const SHORT_AUTO_FETCH_REPLIES_INTERVAL = 60_000;
|
||||||
|
/**
|
||||||
|
* Number of refresh_async checks at which an early fetch
|
||||||
|
* will be triggered if there are results
|
||||||
|
*/
|
||||||
|
const LONG_RUNNING_FETCH_THRESHOLD = 3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the thread is new, based on NEW_THREAD_AGE_THRESHOLD
|
||||||
|
*/
|
||||||
|
function getIsThreadNew(statusCreatedAt: string) {
|
||||||
|
const now = new Date();
|
||||||
|
const newThreadThreshold = new Date(now.getTime() - NEW_THREAD_AGE_THRESHOLD);
|
||||||
|
|
||||||
|
return new Date(statusCreatedAt) > newThreadThreshold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This hook kicks off a background check for the async refresh job
|
||||||
|
* and loads any newly found replies once the job has finished,
|
||||||
|
* and when LONG_RUNNING_FETCH_THRESHOLD was reached and replies were found
|
||||||
|
*/
|
||||||
|
function useCheckForRemoteReplies({
|
||||||
|
statusId,
|
||||||
|
refreshHeader,
|
||||||
|
isEnabled,
|
||||||
|
onChangeLoadingState,
|
||||||
|
}: {
|
||||||
|
statusId: string;
|
||||||
|
refreshHeader?: AsyncRefreshHeader;
|
||||||
|
isEnabled: boolean;
|
||||||
|
onChangeLoadingState: React.Dispatch<React.SetStateAction<LoadingState>>;
|
||||||
|
}) {
|
||||||
|
const dispatch = useAppDispatch();
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
let timeoutId: ReturnType<typeof setTimeout>;
|
||||||
|
|
||||||
|
const scheduleRefresh = (
|
||||||
|
refresh: AsyncRefreshHeader,
|
||||||
|
iteration: number,
|
||||||
|
) => {
|
||||||
|
timeoutId = setTimeout(() => {
|
||||||
|
void apiGetAsyncRefresh(refresh.id).then((result) => {
|
||||||
|
const { status, result_count } = result.async_refresh;
|
||||||
|
|
||||||
|
// At three scheduled refreshes, we consider the job
|
||||||
|
// long-running and attempt to fetch any new replies so far
|
||||||
|
const isLongRunning = iteration === LONG_RUNNING_FETCH_THRESHOLD;
|
||||||
|
|
||||||
|
// If the refresh status is not finished and not long-running,
|
||||||
|
// we just schedule another refresh and exit
|
||||||
|
if (status === 'running' && !isLongRunning) {
|
||||||
|
scheduleRefresh(refresh, iteration + 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If refresh status is finished, clear `refreshHeader`
|
||||||
|
// (we don't want to do this if it's just a long-running job)
|
||||||
|
if (status === 'finished') {
|
||||||
|
dispatch(completeContextRefresh({ statusId }));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exit if there's nothing to fetch
|
||||||
|
if (result_count === 0) {
|
||||||
|
if (status === 'finished') {
|
||||||
|
onChangeLoadingState('idle');
|
||||||
|
} else {
|
||||||
|
scheduleRefresh(refresh, iteration + 1);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// A positive result count means there _might_ be new replies,
|
||||||
|
// so we fetch the context in the background to check if there
|
||||||
|
// are any new replies.
|
||||||
|
// If so, they will populate `contexts.pendingReplies[statusId]`
|
||||||
|
void dispatch(fetchContext({ statusId, prefetchOnly: true }))
|
||||||
|
.then(() => {
|
||||||
|
// Reset loading state to `idle`. If the fetch has
|
||||||
|
// resulted in new pending replies, the `hasPendingReplies`
|
||||||
|
// flag will switch the loading state to 'more-available'
|
||||||
|
if (status === 'finished') {
|
||||||
|
onChangeLoadingState('idle');
|
||||||
|
} else {
|
||||||
|
// Keep background fetch going if `isLongRunning` is true
|
||||||
|
scheduleRefresh(refresh, iteration + 1);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
// Show an error if the fetch failed
|
||||||
|
onChangeLoadingState('error');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}, refresh.retry * 1000);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Initialise a refresh
|
||||||
|
if (refreshHeader && isEnabled) {
|
||||||
|
scheduleRefresh(refreshHeader, 1);
|
||||||
|
onChangeLoadingState('loading');
|
||||||
|
}
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
clearTimeout(timeoutId);
|
||||||
|
};
|
||||||
|
}, [onChangeLoadingState, dispatch, statusId, refreshHeader, isEnabled]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This component fetches new post replies in the background
|
||||||
|
* and gives users the option to show them.
|
||||||
|
*
|
||||||
|
* The following three scenarios are handled:
|
||||||
|
*
|
||||||
|
* 1. When the browser tab is visible, replies are refetched periodically
|
||||||
|
* (more frequently for new posts, less frequently for old ones)
|
||||||
|
* 2. Replies are refetched when the browser tab is refocused
|
||||||
|
* after it was hidden or minimised
|
||||||
|
* 3. For remote posts, remote replies that might not yet be known to the
|
||||||
|
* server are imported & fetched using the AsyncRefresh API.
|
||||||
|
*/
|
||||||
export const RefreshController: React.FC<{
|
export const RefreshController: React.FC<{
|
||||||
statusId: string;
|
statusId: string;
|
||||||
}> = ({ statusId }) => {
|
statusCreatedAt: string;
|
||||||
|
isLocal: boolean;
|
||||||
|
}> = ({ statusId, statusCreatedAt, isLocal }) => {
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
|
|
||||||
const refreshHeader = useAppSelector(
|
const refreshHeader = useAppSelector((state) =>
|
||||||
(state) => state.contexts.refreshing[statusId],
|
isLocal ? undefined : state.contexts.refreshing[statusId],
|
||||||
);
|
);
|
||||||
const hasPendingReplies = useAppSelector(
|
const hasPendingReplies = useAppSelector(
|
||||||
(state) => !!state.contexts.pendingReplies[statusId]?.length,
|
(state) => !!state.contexts.pendingReplies[statusId]?.length,
|
||||||
|
|
@ -78,78 +219,52 @@ export const RefreshController: React.FC<{
|
||||||
dispatch(clearPendingReplies({ statusId }));
|
dispatch(clearPendingReplies({ statusId }));
|
||||||
}, [dispatch, statusId]);
|
}, [dispatch, statusId]);
|
||||||
|
|
||||||
useEffect(() => {
|
// Prevent too-frequent context calls
|
||||||
let timeoutId: ReturnType<typeof setTimeout>;
|
const debouncedFetchContext = useDebouncedCallback(
|
||||||
|
() => {
|
||||||
|
void dispatch(fetchContext({ statusId, prefetchOnly: true }));
|
||||||
|
},
|
||||||
|
// Ensure the debounce is a bit shorter than the auto-fetch interval
|
||||||
|
SHORT_AUTO_FETCH_REPLIES_INTERVAL - 500,
|
||||||
|
{
|
||||||
|
leading: true,
|
||||||
|
trailing: false,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
const scheduleRefresh = (
|
const isDocumentVisible = useIsDocumentVisible({
|
||||||
refresh: AsyncRefreshHeader,
|
onChange: (isVisible) => {
|
||||||
iteration: number,
|
// Auto-fetch new replies when the page is refocused
|
||||||
) => {
|
if (isVisible && partialLoadingState !== 'loading' && !wasDismissed) {
|
||||||
timeoutId = setTimeout(() => {
|
debouncedFetchContext();
|
||||||
void apiGetAsyncRefresh(refresh.id).then((result) => {
|
}
|
||||||
// At three scheduled refreshes, we consider the job
|
},
|
||||||
// long-running and attempt to fetch any new replies so far
|
});
|
||||||
const isLongRunning = iteration === 3;
|
|
||||||
|
|
||||||
const { status, result_count } = result.async_refresh;
|
// Check for remote replies
|
||||||
|
useCheckForRemoteReplies({
|
||||||
|
statusId,
|
||||||
|
refreshHeader,
|
||||||
|
isEnabled: isDocumentVisible && !isLocal && !wasDismissed,
|
||||||
|
onChangeLoadingState: setLoadingState,
|
||||||
|
});
|
||||||
|
|
||||||
// If the refresh status is not finished and not long-running,
|
// Only auto-fetch new replies if there's no ongoing remote replies check
|
||||||
// we just schedule another refresh and exit
|
const shouldAutoFetchReplies =
|
||||||
if (status === 'running' && !isLongRunning) {
|
isDocumentVisible && partialLoadingState !== 'loading' && !wasDismissed;
|
||||||
scheduleRefresh(refresh, iteration + 1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If refresh status is finished, clear `refreshHeader`
|
const autoFetchInterval = useMemo(
|
||||||
// (we don't want to do this if it's just a long-running job)
|
() =>
|
||||||
if (status === 'finished') {
|
getIsThreadNew(statusCreatedAt)
|
||||||
dispatch(completeContextRefresh({ statusId }));
|
? SHORT_AUTO_FETCH_REPLIES_INTERVAL
|
||||||
}
|
: LONG_AUTO_FETCH_REPLIES_INTERVAL,
|
||||||
|
[statusCreatedAt],
|
||||||
|
);
|
||||||
|
|
||||||
// Exit if there's nothing to fetch
|
useInterval(debouncedFetchContext, {
|
||||||
if (result_count === 0) {
|
delay: autoFetchInterval,
|
||||||
if (status === 'finished') {
|
isEnabled: shouldAutoFetchReplies,
|
||||||
setLoadingState('idle');
|
});
|
||||||
} else {
|
|
||||||
scheduleRefresh(refresh, iteration + 1);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// A positive result count means there _might_ be new replies,
|
|
||||||
// so we fetch the context in the background to check if there
|
|
||||||
// are any new replies.
|
|
||||||
// If so, they will populate `contexts.pendingReplies[statusId]`
|
|
||||||
void dispatch(fetchContext({ statusId, prefetchOnly: true }))
|
|
||||||
.then(() => {
|
|
||||||
// Reset loading state to `idle`. If the fetch has
|
|
||||||
// resulted in new pending replies, the `hasPendingReplies`
|
|
||||||
// flag will switch the loading state to 'more-available'
|
|
||||||
if (status === 'finished') {
|
|
||||||
setLoadingState('idle');
|
|
||||||
} else {
|
|
||||||
// Keep background fetch going if `isLongRunning` is true
|
|
||||||
scheduleRefresh(refresh, iteration + 1);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
// Show an error if the fetch failed
|
|
||||||
setLoadingState('error');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}, refresh.retry * 1000);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Initialise a refresh
|
|
||||||
if (refreshHeader && !wasDismissed) {
|
|
||||||
scheduleRefresh(refreshHeader, 1);
|
|
||||||
setLoadingState('loading');
|
|
||||||
}
|
|
||||||
|
|
||||||
return () => {
|
|
||||||
clearTimeout(timeoutId);
|
|
||||||
};
|
|
||||||
}, [dispatch, statusId, refreshHeader, wasDismissed]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// Hide success message after a short delay
|
// Hide success message after a short delay
|
||||||
|
|
@ -172,7 +287,7 @@ export const RefreshController: React.FC<{
|
||||||
};
|
};
|
||||||
}, [dispatch, statusId]);
|
}, [dispatch, statusId]);
|
||||||
|
|
||||||
const handleClick = useCallback(() => {
|
const showPending = useCallback(() => {
|
||||||
dispatch(showPendingReplies({ statusId }));
|
dispatch(showPendingReplies({ statusId }));
|
||||||
setLoadingState('success');
|
setLoadingState('success');
|
||||||
}, [dispatch, statusId]);
|
}, [dispatch, statusId]);
|
||||||
|
|
@ -196,7 +311,7 @@ export const RefreshController: React.FC<{
|
||||||
isActive={loadingState === 'more-available'}
|
isActive={loadingState === 'more-available'}
|
||||||
message={intl.formatMessage(messages.moreFound)}
|
message={intl.formatMessage(messages.moreFound)}
|
||||||
action={intl.formatMessage(messages.show)}
|
action={intl.formatMessage(messages.show)}
|
||||||
onActionClick={handleClick}
|
onActionClick={showPending}
|
||||||
onDismiss={dismissPrompt}
|
onDismiss={dismissPrompt}
|
||||||
animateFrom='below'
|
animateFrom='below'
|
||||||
/>
|
/>
|
||||||
|
|
@ -205,7 +320,7 @@ export const RefreshController: React.FC<{
|
||||||
isActive={loadingState === 'error'}
|
isActive={loadingState === 'error'}
|
||||||
message={intl.formatMessage(messages.error)}
|
message={intl.formatMessage(messages.error)}
|
||||||
action={intl.formatMessage(messages.retry)}
|
action={intl.formatMessage(messages.retry)}
|
||||||
onActionClick={handleClick}
|
onActionClick={showPending}
|
||||||
onDismiss={dismissPrompt}
|
onDismiss={dismissPrompt}
|
||||||
animateFrom='below'
|
animateFrom='below'
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -504,12 +504,14 @@ class Status extends ImmutablePureComponent {
|
||||||
componentDidUpdate (prevProps) {
|
componentDidUpdate (prevProps) {
|
||||||
const { status, ancestorsIds, descendantsIds } = this.props;
|
const { status, ancestorsIds, descendantsIds } = this.props;
|
||||||
|
|
||||||
if (status && (ancestorsIds.length > prevProps.ancestorsIds.length || prevProps.status?.get('id') !== status.get('id'))) {
|
const isSameStatus = status && (prevProps.status?.get('id') === status.get('id'));
|
||||||
|
|
||||||
|
if (status && (ancestorsIds.length > prevProps.ancestorsIds.length || !isSameStatus)) {
|
||||||
this._scrollStatusIntoView();
|
this._scrollStatusIntoView();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only highlight replies after the initial load
|
// Only highlight replies after the initial load
|
||||||
if (prevProps.descendantsIds.length) {
|
if (prevProps.descendantsIds.length && isSameStatus) {
|
||||||
const newRepliesIds = difference(descendantsIds, prevProps.descendantsIds);
|
const newRepliesIds = difference(descendantsIds, prevProps.descendantsIds);
|
||||||
|
|
||||||
if (newRepliesIds.length) {
|
if (newRepliesIds.length) {
|
||||||
|
|
@ -571,14 +573,6 @@ class Status extends ImmutablePureComponent {
|
||||||
const isLocal = status.getIn(['account', 'acct'], '').indexOf('@') === -1;
|
const isLocal = status.getIn(['account', 'acct'], '').indexOf('@') === -1;
|
||||||
const isIndexable = !status.getIn(['account', 'noindex']);
|
const isIndexable = !status.getIn(['account', 'noindex']);
|
||||||
|
|
||||||
if (!isLocal) {
|
|
||||||
remoteHint = (
|
|
||||||
<RefreshController
|
|
||||||
statusId={status.get('id')}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const handlers = {
|
const handlers = {
|
||||||
reply: this.handleHotkeyReply,
|
reply: this.handleHotkeyReply,
|
||||||
favourite: this.handleHotkeyFavourite,
|
favourite: this.handleHotkeyFavourite,
|
||||||
|
|
@ -649,7 +643,12 @@ class Status extends ImmutablePureComponent {
|
||||||
</Hotkeys>
|
</Hotkeys>
|
||||||
|
|
||||||
{descendants}
|
{descendants}
|
||||||
{remoteHint}
|
|
||||||
|
<RefreshController
|
||||||
|
isLocal={isLocal}
|
||||||
|
statusId={status.get('id')}
|
||||||
|
statusCreatedAt={status.get('created_at')}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</ScrollContainer>
|
</ScrollContainer>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ import { uploadCompose, resetCompose, changeComposeSpoilerness } from '../../act
|
||||||
import { clearHeight } from '../../actions/height_cache';
|
import { clearHeight } from '../../actions/height_cache';
|
||||||
import { fetchServer, fetchServerTranslationLanguages } from '../../actions/server';
|
import { fetchServer, fetchServerTranslationLanguages } from '../../actions/server';
|
||||||
import { expandHomeTimeline } from '../../actions/timelines';
|
import { expandHomeTimeline } from '../../actions/timelines';
|
||||||
import { initialState, me, owner, singleUserMode, trendsEnabled, trendsAsLanding, disableHoverCards, autoPlayGif } from '../../initial_state';
|
import { initialState, me, owner, singleUserMode, trendsEnabled, landingPage, localLiveFeedAccess, disableHoverCards, autoPlayGif } from '../../initial_state';
|
||||||
|
|
||||||
import BundleColumnError from './components/bundle_column_error';
|
import BundleColumnError from './components/bundle_column_error';
|
||||||
import { NavigationBar } from './components/navigation_bar';
|
import { NavigationBar } from './components/navigation_bar';
|
||||||
|
|
@ -148,8 +148,10 @@ class SwitchingColumnsArea extends PureComponent {
|
||||||
}
|
}
|
||||||
} else if (singleUserMode && owner && initialState?.accounts[owner]) {
|
} else if (singleUserMode && owner && initialState?.accounts[owner]) {
|
||||||
redirect = <Redirect from='/' to={`/@${initialState.accounts[owner].username}`} exact />;
|
redirect = <Redirect from='/' to={`/@${initialState.accounts[owner].username}`} exact />;
|
||||||
} else if (trendsEnabled && trendsAsLanding) {
|
} else if (trendsEnabled && landingPage === 'trends') {
|
||||||
redirect = <Redirect from='/' to='/explore' exact />;
|
redirect = <Redirect from='/' to='/explore' exact />;
|
||||||
|
} else if (localLiveFeedAccess === 'public' && landingPage === 'local_feed') {
|
||||||
|
redirect = <Redirect from='/' to='/public/local' exact />;
|
||||||
} else {
|
} else {
|
||||||
redirect = <Redirect from='/' to='/about' exact />;
|
redirect = <Redirect from='/' to='/about' exact />;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
39
app/javascript/mastodon/hooks/useInterval.ts
Normal file
39
app/javascript/mastodon/hooks/useInterval.ts
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
import { useEffect, useLayoutEffect, useRef } from 'react';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hook to create an interval that invokes a callback function
|
||||||
|
* at a specified delay using the setInterval API.
|
||||||
|
* Based on https://usehooks-ts.com/react-hook/use-interval
|
||||||
|
*/
|
||||||
|
export function useInterval(
|
||||||
|
callback: () => void,
|
||||||
|
{
|
||||||
|
delay,
|
||||||
|
isEnabled = true,
|
||||||
|
}: {
|
||||||
|
delay: number;
|
||||||
|
isEnabled?: boolean;
|
||||||
|
},
|
||||||
|
) {
|
||||||
|
// Write callback to a ref so we can omit it from
|
||||||
|
// the interval effect's dependency array
|
||||||
|
const callbackRef = useRef(callback);
|
||||||
|
useLayoutEffect(() => {
|
||||||
|
callbackRef.current = callback;
|
||||||
|
}, [callback]);
|
||||||
|
|
||||||
|
// Set up the interval.
|
||||||
|
useEffect(() => {
|
||||||
|
if (!isEnabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const intervalId = setInterval(() => {
|
||||||
|
callbackRef.current();
|
||||||
|
}, delay);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
clearInterval(intervalId);
|
||||||
|
};
|
||||||
|
}, [delay, isEnabled]);
|
||||||
|
}
|
||||||
32
app/javascript/mastodon/hooks/useIsDocumentVisible.ts
Normal file
32
app/javascript/mastodon/hooks/useIsDocumentVisible.ts
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
import { useEffect, useRef, useState } from 'react';
|
||||||
|
|
||||||
|
export function useIsDocumentVisible({
|
||||||
|
onChange,
|
||||||
|
}: {
|
||||||
|
onChange?: (isVisible: boolean) => void;
|
||||||
|
} = {}) {
|
||||||
|
const [isDocumentVisible, setIsDocumentVisible] = useState(
|
||||||
|
() => document.visibilityState === 'visible',
|
||||||
|
);
|
||||||
|
|
||||||
|
const onChangeRef = useRef(onChange);
|
||||||
|
useEffect(() => {
|
||||||
|
onChangeRef.current = onChange;
|
||||||
|
}, [onChange]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
function handleVisibilityChange() {
|
||||||
|
const isVisible = document.visibilityState === 'visible';
|
||||||
|
|
||||||
|
setIsDocumentVisible(isVisible);
|
||||||
|
onChangeRef.current?.(isVisible);
|
||||||
|
}
|
||||||
|
window.addEventListener('visibilitychange', handleVisibilityChange);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
window.removeEventListener('visibilitychange', handleVisibilityChange);
|
||||||
|
};
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return isDocumentVisible;
|
||||||
|
}
|
||||||
|
|
@ -9,6 +9,7 @@ interface InitialStateMeta {
|
||||||
activity_api_enabled: boolean;
|
activity_api_enabled: boolean;
|
||||||
admin: string;
|
admin: string;
|
||||||
boost_modal?: boolean;
|
boost_modal?: boolean;
|
||||||
|
quick_boosting?: boolean;
|
||||||
delete_modal?: boolean;
|
delete_modal?: boolean;
|
||||||
missing_alt_text_modal?: boolean;
|
missing_alt_text_modal?: boolean;
|
||||||
disable_swiping?: boolean;
|
disable_swiping?: boolean;
|
||||||
|
|
@ -32,13 +33,13 @@ interface InitialStateMeta {
|
||||||
single_user_mode: boolean;
|
single_user_mode: boolean;
|
||||||
source_url: string;
|
source_url: string;
|
||||||
streaming_api_base_url: string;
|
streaming_api_base_url: string;
|
||||||
local_live_feed_access: 'public' | 'authenticated';
|
local_live_feed_access: 'public' | 'authenticated' | 'disabled';
|
||||||
remote_live_feed_access: 'public' | 'authenticated';
|
remote_live_feed_access: 'public' | 'authenticated' | 'disabled';
|
||||||
local_topic_feed_access: 'public' | 'authenticated';
|
local_topic_feed_access: 'public' | 'authenticated' | 'disabled';
|
||||||
remote_topic_feed_access: 'public' | 'authenticated';
|
remote_topic_feed_access: 'public' | 'authenticated' | 'disabled';
|
||||||
title: string;
|
title: string;
|
||||||
show_trends: boolean;
|
show_trends: boolean;
|
||||||
trends_as_landing_page: boolean;
|
landing_page: 'about' | 'trends' | 'local_feed';
|
||||||
use_blurhash: boolean;
|
use_blurhash: boolean;
|
||||||
use_pending_items?: boolean;
|
use_pending_items?: boolean;
|
||||||
version: string;
|
version: string;
|
||||||
|
|
@ -89,6 +90,7 @@ function getMeta<K extends keyof InitialStateMeta>(
|
||||||
export const activityApiEnabled = getMeta('activity_api_enabled');
|
export const activityApiEnabled = getMeta('activity_api_enabled');
|
||||||
export const autoPlayGif = getMeta('auto_play_gif');
|
export const autoPlayGif = getMeta('auto_play_gif');
|
||||||
export const boostModal = getMeta('boost_modal');
|
export const boostModal = getMeta('boost_modal');
|
||||||
|
export const quickBoosting = getMeta('quick_boosting');
|
||||||
export const deleteModal = getMeta('delete_modal');
|
export const deleteModal = getMeta('delete_modal');
|
||||||
export const missingAltTextModal = getMeta('missing_alt_text_modal');
|
export const missingAltTextModal = getMeta('missing_alt_text_modal');
|
||||||
export const disableSwiping = getMeta('disable_swiping');
|
export const disableSwiping = getMeta('disable_swiping');
|
||||||
|
|
@ -118,7 +120,7 @@ export const remoteLiveFeedAccess = getMeta('remote_live_feed_access');
|
||||||
export const localTopicFeedAccess = getMeta('local_topic_feed_access');
|
export const localTopicFeedAccess = getMeta('local_topic_feed_access');
|
||||||
export const remoteTopicFeedAccess = getMeta('remote_topic_feed_access');
|
export const remoteTopicFeedAccess = getMeta('remote_topic_feed_access');
|
||||||
export const title = getMeta('title');
|
export const title = getMeta('title');
|
||||||
export const trendsAsLanding = getMeta('trends_as_landing_page');
|
export const landingPage = getMeta('landing_page');
|
||||||
export const useBlurhash = getMeta('use_blurhash');
|
export const useBlurhash = getMeta('use_blurhash');
|
||||||
export const usePendingItems = getMeta('use_pending_items');
|
export const usePendingItems = getMeta('use_pending_items');
|
||||||
export const version = getMeta('version');
|
export const version = getMeta('version');
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@
|
||||||
"account.edit_profile_short": "Рэдагаваць",
|
"account.edit_profile_short": "Рэдагаваць",
|
||||||
"account.enable_notifications": "Апавяшчаць мяне пра допісы @{name}",
|
"account.enable_notifications": "Апавяшчаць мяне пра допісы @{name}",
|
||||||
"account.endorse": "Паказваць у профілі",
|
"account.endorse": "Паказваць у профілі",
|
||||||
"account.familiar_followers_many": "Мае сярод падпісчыкаў {name1}, {name2}, і {othersCount, plural, one {яшчэ # чалавека, знаёмага вам} few {яшчэ # чалавекі, знаёмыя вам} many {яшчэ # чалавек, знаёмых вам} other {яшчэ # чалавекі, знаёмыя вам}}",
|
"account.familiar_followers_many": "Мае сярод падпісчыкаў {name1}, {name2}, і {othersCount, plural, one {яшчэ # чалавека, знаёмага Вам} few {яшчэ # чалавекі, знаёмыя Вам} many {яшчэ # чалавек, знаёмых Вам} other {яшчэ # чалавекі, знаёмыя Вам}}",
|
||||||
"account.familiar_followers_one": "Мае сярод падпісчыкаў {name1}",
|
"account.familiar_followers_one": "Мае сярод падпісчыкаў {name1}",
|
||||||
"account.familiar_followers_two": "Мае сярод падпісчыкаў {name1} і {name2}",
|
"account.familiar_followers_two": "Мае сярод падпісчыкаў {name1} і {name2}",
|
||||||
"account.featured": "Рэкамендаванае",
|
"account.featured": "Рэкамендаванае",
|
||||||
|
|
@ -49,7 +49,7 @@
|
||||||
"account.followers": "Падпісчыкі",
|
"account.followers": "Падпісчыкі",
|
||||||
"account.followers.empty": "Ніхто пакуль не падпісаны на гэтага карыстальніка.",
|
"account.followers.empty": "Ніхто пакуль не падпісаны на гэтага карыстальніка.",
|
||||||
"account.followers_counter": "{count, plural, one {{counter} падпісчык} few {{counter} падпісчыкі} many {{counter} падпісчыкаў} other {{counter} падпісчыка}}",
|
"account.followers_counter": "{count, plural, one {{counter} падпісчык} few {{counter} падпісчыкі} many {{counter} падпісчыкаў} other {{counter} падпісчыка}}",
|
||||||
"account.followers_you_know_counter": "{count, plural, one {{counter}, знаёмы вам} other {{counter}, знаёмых вам}}",
|
"account.followers_you_know_counter": "{count, plural, one {{counter} знаёмы Вам} few {{counter} знаёмыя Вам} other {{counter} знаёмых Вам}}",
|
||||||
"account.following": "Падпіскі",
|
"account.following": "Падпіскі",
|
||||||
"account.following_counter": "{count, plural, one {{counter} падпіска} few {{counter} падпіскі} many {{counter} падпісак} other {{counter} падпіскі}}",
|
"account.following_counter": "{count, plural, one {{counter} падпіска} few {{counter} падпіскі} many {{counter} падпісак} other {{counter} падпіскі}}",
|
||||||
"account.follows.empty": "Карыстальнік ні на каго не падпісаны.",
|
"account.follows.empty": "Карыстальнік ні на каго не падпісаны.",
|
||||||
|
|
@ -249,7 +249,7 @@
|
||||||
"confirmations.quiet_post_quote_info.message": "Калі будзеце цытаваць ціхі публічны допіс, Ваш допіс будзе схаваны ад трэндавых стужак.",
|
"confirmations.quiet_post_quote_info.message": "Калі будзеце цытаваць ціхі публічны допіс, Ваш допіс будзе схаваны ад трэндавых стужак.",
|
||||||
"confirmations.quiet_post_quote_info.title": "Цытаванне ціхіх публічных допісаў",
|
"confirmations.quiet_post_quote_info.title": "Цытаванне ціхіх публічных допісаў",
|
||||||
"confirmations.redraft.confirm": "Выдаліць і перапісаць",
|
"confirmations.redraft.confirm": "Выдаліць і перапісаць",
|
||||||
"confirmations.redraft.message": "Вы ўпэўнены, што хочаце выдаліць допіс і перапісаць яго? Упадабанні і пашырэнні згубяцца, а адказы да арыгінальнага допісу асірацеюць.",
|
"confirmations.redraft.message": "Вы ўпэўненыя, што хочаце выдаліць допіс і перапісаць яго? Упадабанні і пашырэнні згубяцца, а адказы да арыгінальнага допісу асірацеюць.",
|
||||||
"confirmations.redraft.title": "Выдаліць і перапісаць допіс?",
|
"confirmations.redraft.title": "Выдаліць і перапісаць допіс?",
|
||||||
"confirmations.remove_from_followers.confirm": "Выдаліць падпісчыка",
|
"confirmations.remove_from_followers.confirm": "Выдаліць падпісчыка",
|
||||||
"confirmations.remove_from_followers.message": "{name} больш не будзе падпісаны(-ая) на Вас. Упэўненыя, што хочаце працягнуць?",
|
"confirmations.remove_from_followers.message": "{name} больш не будзе падпісаны(-ая) на Вас. Упэўненыя, што хочаце працягнуць?",
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "У Вашых закладках яшчэ няма допісаў. Калі Вы дадасце закладку, яна з’явіцца тут.",
|
"empty_column.bookmarked_statuses": "У Вашых закладках яшчэ няма допісаў. Калі Вы дадасце закладку, яна з’явіцца тут.",
|
||||||
"empty_column.community": "Мясцовая стужка пустая. Напішыце нешта публічнае, каб разварушыць справу!",
|
"empty_column.community": "Мясцовая стужка пустая. Напішыце нешта публічнае, каб разварушыць справу!",
|
||||||
"empty_column.direct": "Пакуль у Вас няма асабістых згадванняў. Калі Вы дашляце або атрымаеце штосьці, яно з’явіцца тут.",
|
"empty_column.direct": "Пакуль у Вас няма асабістых згадванняў. Калі Вы дашляце або атрымаеце штосьці, яно з’явіцца тут.",
|
||||||
|
"empty_column.disabled_feed": "Гэта стужка была адключаная Вашымі адміністратарамі сервера.",
|
||||||
"empty_column.domain_blocks": "Заблакіраваных даменаў пакуль няма.",
|
"empty_column.domain_blocks": "Заблакіраваных даменаў пакуль няма.",
|
||||||
"empty_column.explore_statuses": "Зараз не ў трэндзе. Праверце пазней",
|
"empty_column.explore_statuses": "Зараз не ў трэндзе. Праверце пазней",
|
||||||
"empty_column.favourited_statuses": "Вы яшчэ не ўпадабалі ніводны допіс. Калі гэта адбудзецца, Вы ўбачыце яго тут.",
|
"empty_column.favourited_statuses": "Вы яшчэ не ўпадабалі ніводны допіс. Калі гэта адбудзецца, Вы ўбачыце яго тут.",
|
||||||
|
|
@ -876,7 +877,7 @@
|
||||||
"status.contains_quote": "Утрымлівае цытату",
|
"status.contains_quote": "Утрымлівае цытату",
|
||||||
"status.context.loading": "Загружаюцца іншыя адказы",
|
"status.context.loading": "Загружаюцца іншыя адказы",
|
||||||
"status.context.loading_error": "Немагчыма загрузіць новыя адказы",
|
"status.context.loading_error": "Немагчыма загрузіць новыя адказы",
|
||||||
"status.context.loading_success": "Усе адказы загружаныя",
|
"status.context.loading_success": "Новыя адказы загружаныя",
|
||||||
"status.context.more_replies_found": "Знойдзеныя іншыя адказы",
|
"status.context.more_replies_found": "Знойдзеныя іншыя адказы",
|
||||||
"status.context.retry": "Паспрабаваць зноў",
|
"status.context.retry": "Паспрабаваць зноў",
|
||||||
"status.context.show": "Паказаць",
|
"status.context.show": "Паказаць",
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@
|
||||||
"account.disable_notifications": "Спиране на известяване при публикуване от @{name}",
|
"account.disable_notifications": "Спиране на известяване при публикуване от @{name}",
|
||||||
"account.domain_blocking": "Блокиране на домейн",
|
"account.domain_blocking": "Блокиране на домейн",
|
||||||
"account.edit_profile": "Редактиране на профила",
|
"account.edit_profile": "Редактиране на профила",
|
||||||
|
"account.edit_profile_short": "Редактиране",
|
||||||
"account.enable_notifications": "Известяване при публикуване от @{name}",
|
"account.enable_notifications": "Известяване при публикуване от @{name}",
|
||||||
"account.endorse": "Представи в профила",
|
"account.endorse": "Представи в профила",
|
||||||
"account.familiar_followers_many": "Последвано от {name1}, {name2}, и {othersCount, plural, one {един друг, когото познавате} other {# други, които познавате}}",
|
"account.familiar_followers_many": "Последвано от {name1}, {name2}, и {othersCount, plural, one {един друг, когото познавате} other {# други, които познавате}}",
|
||||||
|
|
@ -40,6 +41,9 @@
|
||||||
"account.featured_tags.last_status_never": "Няма публикации",
|
"account.featured_tags.last_status_never": "Няма публикации",
|
||||||
"account.follow": "Последване",
|
"account.follow": "Последване",
|
||||||
"account.follow_back": "Последване взаимно",
|
"account.follow_back": "Последване взаимно",
|
||||||
|
"account.follow_request_cancel": "Отказване на заявката",
|
||||||
|
"account.follow_request_cancel_short": "Отказ",
|
||||||
|
"account.follow_request_short": "Заявка",
|
||||||
"account.followers": "Последователи",
|
"account.followers": "Последователи",
|
||||||
"account.followers.empty": "Още никой не следва потребителя.",
|
"account.followers.empty": "Още никой не следва потребителя.",
|
||||||
"account.followers_counter": "{count, plural, one {{counter} последовател} other {{counter} последователи}}",
|
"account.followers_counter": "{count, plural, one {{counter} последовател} other {{counter} последователи}}",
|
||||||
|
|
@ -238,6 +242,9 @@
|
||||||
"confirmations.missing_alt_text.secondary": "Все пак да се публикува",
|
"confirmations.missing_alt_text.secondary": "Все пак да се публикува",
|
||||||
"confirmations.missing_alt_text.title": "Добавяте ли алтернативен текст?",
|
"confirmations.missing_alt_text.title": "Добавяте ли алтернативен текст?",
|
||||||
"confirmations.mute.confirm": "Заглушаване",
|
"confirmations.mute.confirm": "Заглушаване",
|
||||||
|
"confirmations.quiet_post_quote_info.dismiss": "Без друго напомняне",
|
||||||
|
"confirmations.quiet_post_quote_info.got_it": "Схванах",
|
||||||
|
"confirmations.quiet_post_quote_info.title": "Цитиране на публикации за тиха публика",
|
||||||
"confirmations.redraft.confirm": "Изтриване и преработване",
|
"confirmations.redraft.confirm": "Изтриване и преработване",
|
||||||
"confirmations.redraft.message": "Наистина ли искате да изтриете тази публикация и да я направите чернова? Означаванията като любими и подсилванията ще се изгубят, а и отговорите към първоначалната публикация ще осиротеят.",
|
"confirmations.redraft.message": "Наистина ли искате да изтриете тази публикация и да я направите чернова? Означаванията като любими и подсилванията ще се изгубят, а и отговорите към първоначалната публикация ще осиротеят.",
|
||||||
"confirmations.redraft.title": "Изтривате и преработвате ли публикацията?",
|
"confirmations.redraft.title": "Изтривате и преработвате ли публикацията?",
|
||||||
|
|
@ -247,7 +254,11 @@
|
||||||
"confirmations.revoke_quote.confirm": "Премахване на публикация",
|
"confirmations.revoke_quote.confirm": "Премахване на публикация",
|
||||||
"confirmations.revoke_quote.message": "Действието е неотменимо.",
|
"confirmations.revoke_quote.message": "Действието е неотменимо.",
|
||||||
"confirmations.revoke_quote.title": "Премахвате ли публикацията?",
|
"confirmations.revoke_quote.title": "Премахвате ли публикацията?",
|
||||||
|
"confirmations.unblock.confirm": "Отблокиране",
|
||||||
|
"confirmations.unblock.title": "Отблокирате ли @{name}?",
|
||||||
"confirmations.unfollow.confirm": "Без следване",
|
"confirmations.unfollow.confirm": "Без следване",
|
||||||
|
"confirmations.unfollow.title": "Спирате ли следване на {name}?",
|
||||||
|
"confirmations.withdraw_request.confirm": "Оттегляне на заявката",
|
||||||
"content_warning.hide": "Скриване на публ.",
|
"content_warning.hide": "Скриване на публ.",
|
||||||
"content_warning.show": "Нека се покаже",
|
"content_warning.show": "Нека се покаже",
|
||||||
"content_warning.show_more": "Показване на още",
|
"content_warning.show_more": "Показване на още",
|
||||||
|
|
@ -442,10 +453,12 @@
|
||||||
"ignore_notifications_modal.private_mentions_title": "Пренебрегвате ли известия от непоискани лични споменавания?",
|
"ignore_notifications_modal.private_mentions_title": "Пренебрегвате ли известия от непоискани лични споменавания?",
|
||||||
"info_button.label": "Помощ",
|
"info_button.label": "Помощ",
|
||||||
"info_button.what_is_alt_text": "<h1>Какво е алтернативен текст?</h1> <p>Алтернативният текст осигурява описания на изображение за хора със зрителни увреждания, връзки с ниска честотна лента или търсещите допълнителен контекст.</p> <p>Може да подобрите достъпността и разбираемостта за всеки, пишейки ясен, кратък и обективен алтернативен текст.</p> <ul> <li>Уловете важните елементи</li> <li>Обобщете текста в образите</li> <li>Употребявайте правилна структура на изречението</li> <li>Избягвайте излишна информация</li> <li>Съсредоточете се върху тенденциите и ключови констатации в сложни онагледявания (като диаграми и карти)</li> </ul>",
|
"info_button.what_is_alt_text": "<h1>Какво е алтернативен текст?</h1> <p>Алтернативният текст осигурява описания на изображение за хора със зрителни увреждания, връзки с ниска честотна лента или търсещите допълнителен контекст.</p> <p>Може да подобрите достъпността и разбираемостта за всеки, пишейки ясен, кратък и обективен алтернативен текст.</p> <ul> <li>Уловете важните елементи</li> <li>Обобщете текста в образите</li> <li>Употребявайте правилна структура на изречението</li> <li>Избягвайте излишна информация</li> <li>Съсредоточете се върху тенденциите и ключови констатации в сложни онагледявания (като диаграми и карти)</li> </ul>",
|
||||||
|
"interaction_modal.action": "Трябва да влезете с акаунта си, в който и да е сървър на Mastodon, когото използвате, за да взаимодействате с публикация на {name}.",
|
||||||
"interaction_modal.go": "Напред",
|
"interaction_modal.go": "Напред",
|
||||||
"interaction_modal.no_account_yet": "Още ли нямате акаунт?",
|
"interaction_modal.no_account_yet": "Още ли нямате акаунт?",
|
||||||
"interaction_modal.on_another_server": "На различен сървър",
|
"interaction_modal.on_another_server": "На различен сървър",
|
||||||
"interaction_modal.on_this_server": "На този сървър",
|
"interaction_modal.on_this_server": "На този сървър",
|
||||||
|
"interaction_modal.title": "Влезте, за да продължите",
|
||||||
"interaction_modal.username_prompt": "Напр. {example}",
|
"interaction_modal.username_prompt": "Напр. {example}",
|
||||||
"intervals.full.days": "{number, plural, one {# ден} other {# дни}}",
|
"intervals.full.days": "{number, plural, one {# ден} other {# дни}}",
|
||||||
"intervals.full.hours": "{number, plural, one {# час} other {# часа}}",
|
"intervals.full.hours": "{number, plural, one {# час} other {# часа}}",
|
||||||
|
|
@ -596,6 +609,7 @@
|
||||||
"notification.moderation_warning.action_suspend": "Вашият акаунт е спрян.",
|
"notification.moderation_warning.action_suspend": "Вашият акаунт е спрян.",
|
||||||
"notification.own_poll": "Анкетата ви приключи",
|
"notification.own_poll": "Анкетата ви приключи",
|
||||||
"notification.poll": "Анкета, в която гласувахте, приключи",
|
"notification.poll": "Анкета, в която гласувахте, приключи",
|
||||||
|
"notification.quoted_update": "{name} редактира публикация, която цитирахте",
|
||||||
"notification.reblog": "{name} подсили ваша публикация",
|
"notification.reblog": "{name} подсили ваша публикация",
|
||||||
"notification.reblog.name_and_others_with_link": "{name} и <a>{count, plural, one {# друг} other {# други}}</a> подсилиха ваша публикация",
|
"notification.reblog.name_and_others_with_link": "{name} и <a>{count, plural, one {# друг} other {# други}}</a> подсилиха ваша публикация",
|
||||||
"notification.relationships_severance_event": "Изгуби се връзката с {name}",
|
"notification.relationships_severance_event": "Изгуби се връзката с {name}",
|
||||||
|
|
@ -715,10 +729,17 @@
|
||||||
"privacy.private.short": "Последователи",
|
"privacy.private.short": "Последователи",
|
||||||
"privacy.public.long": "Всеки във и извън Mastodon",
|
"privacy.public.long": "Всеки във и извън Mastodon",
|
||||||
"privacy.public.short": "Публично",
|
"privacy.public.short": "Публично",
|
||||||
|
"privacy.quote.anyone": "{visibility}, всеки може да цитира",
|
||||||
|
"privacy.quote.disabled": "{visibility}, цитатите са изключени",
|
||||||
|
"privacy.quote.limited": "{visibility}, цитатите са ограничени",
|
||||||
"privacy.unlisted.additional": "Това действие е точно като публичното, с изключение на това, че публикацията няма да се появява в каналите на живо, хаштаговете, разглеждането или търсенето в Mastodon, дори ако сте избрали да се публично видими на ниво акаунт.",
|
"privacy.unlisted.additional": "Това действие е точно като публичното, с изключение на това, че публикацията няма да се появява в каналите на живо, хаштаговете, разглеждането или търсенето в Mastodon, дори ако сте избрали да се публично видими на ниво акаунт.",
|
||||||
"privacy.unlisted.short": "Тиха публика",
|
"privacy.unlisted.short": "Тиха публика",
|
||||||
"privacy_policy.last_updated": "Последно осъвременяване на {date}",
|
"privacy_policy.last_updated": "Последно осъвременяване на {date}",
|
||||||
"privacy_policy.title": "Политика за поверителност",
|
"privacy_policy.title": "Политика за поверителност",
|
||||||
|
"quote_error.edit": "Не може да се добавят цитати, редайтирайки публикация.",
|
||||||
|
"quote_error.poll": "Не може да се цитира при анкетиране.",
|
||||||
|
"quote_error.unauthorized": "Нямате право да цитирате тази публикация.",
|
||||||
|
"quote_error.upload": "Цитирането не е позволено с мултимедийни прикачвания.",
|
||||||
"recommended": "Препоръчано",
|
"recommended": "Препоръчано",
|
||||||
"refresh": "Опресняване",
|
"refresh": "Опресняване",
|
||||||
"regeneration_indicator.please_stand_by": "Изчакайте.",
|
"regeneration_indicator.please_stand_by": "Изчакайте.",
|
||||||
|
|
@ -734,6 +755,8 @@
|
||||||
"relative_time.minutes": "{number}м.",
|
"relative_time.minutes": "{number}м.",
|
||||||
"relative_time.seconds": "{number}с.",
|
"relative_time.seconds": "{number}с.",
|
||||||
"relative_time.today": "днес",
|
"relative_time.today": "днес",
|
||||||
|
"remove_quote_hint.button_label": "Схванах",
|
||||||
|
"remove_quote_hint.message": "Може да го направите от менюто възможности {icon}.",
|
||||||
"reply_indicator.attachments": "{count, plural, one {# прикаване} other {# прикачвания}}",
|
"reply_indicator.attachments": "{count, plural, one {# прикаване} other {# прикачвания}}",
|
||||||
"reply_indicator.cancel": "Отказ",
|
"reply_indicator.cancel": "Отказ",
|
||||||
"reply_indicator.poll": "Анкета",
|
"reply_indicator.poll": "Анкета",
|
||||||
|
|
@ -825,13 +848,22 @@
|
||||||
"status.admin_account": "Отваряне на интерфейс за модериране за @{name}",
|
"status.admin_account": "Отваряне на интерфейс за модериране за @{name}",
|
||||||
"status.admin_domain": "Отваряне на модериращия интерфейс за {domain}",
|
"status.admin_domain": "Отваряне на модериращия интерфейс за {domain}",
|
||||||
"status.admin_status": "Отваряне на публикацията в модериращия интерфейс",
|
"status.admin_status": "Отваряне на публикацията в модериращия интерфейс",
|
||||||
|
"status.all_disabled": "Подсилването и цитатите са изключени",
|
||||||
"status.block": "Блокиране на @{name}",
|
"status.block": "Блокиране на @{name}",
|
||||||
"status.bookmark": "Отмятане",
|
"status.bookmark": "Отмятане",
|
||||||
"status.cancel_reblog_private": "Край на подсилването",
|
"status.cancel_reblog_private": "Край на подсилването",
|
||||||
|
"status.cannot_quote": "Не е позволено да цитирате тази публикация",
|
||||||
"status.cannot_reblog": "Публикацията не може да се подсилва",
|
"status.cannot_reblog": "Публикацията не може да се подсилва",
|
||||||
|
"status.context.loading": "Зареждане на още отговори",
|
||||||
|
"status.context.loading_error": "Не можаха да се заредят нови отговори",
|
||||||
|
"status.context.loading_success": "Новите отговори заредени",
|
||||||
|
"status.context.more_replies_found": "Още намерени отговори",
|
||||||
|
"status.context.retry": "Друг опит",
|
||||||
|
"status.context.show": "Показване",
|
||||||
"status.continued_thread": "Продължена нишка",
|
"status.continued_thread": "Продължена нишка",
|
||||||
"status.copy": "Копиране на връзката към публикация",
|
"status.copy": "Копиране на връзката към публикация",
|
||||||
"status.delete": "Изтриване",
|
"status.delete": "Изтриване",
|
||||||
|
"status.delete.success": "Публикацията е изтрита",
|
||||||
"status.detailed_status": "Подробен изглед на разговора",
|
"status.detailed_status": "Подробен изглед на разговора",
|
||||||
"status.direct": "Частно споменаване на @{name}",
|
"status.direct": "Частно споменаване на @{name}",
|
||||||
"status.direct_indicator": "Частно споменаване",
|
"status.direct_indicator": "Частно споменаване",
|
||||||
|
|
@ -855,23 +887,32 @@
|
||||||
"status.open": "Разширяване на публикацията",
|
"status.open": "Разширяване на публикацията",
|
||||||
"status.pin": "Закачане в профила",
|
"status.pin": "Закачане в профила",
|
||||||
"status.quote_error.filtered": "Скрито поради един от филтрите ви",
|
"status.quote_error.filtered": "Скрито поради един от филтрите ви",
|
||||||
|
"status.quote_error.limited_account_hint.title": "Този акаунт е бил скрит от модераторите на {domain}.",
|
||||||
"status.quote_error.not_available": "Неналична публикация",
|
"status.quote_error.not_available": "Неналична публикация",
|
||||||
"status.quote_error.pending_approval": "Публикацията чака одобрение",
|
"status.quote_error.pending_approval": "Публикацията чака одобрение",
|
||||||
|
"status.quote_error.revoked": "Премахната публикация от автора",
|
||||||
|
"status.quote_followers_only": "Само последователи могат да цитират тази публикация",
|
||||||
|
"status.quote_manual_review": "Авторът ще преглежда ръчно",
|
||||||
"status.quote_policy_change": "Промяна кой може да цитира",
|
"status.quote_policy_change": "Промяна кой може да цитира",
|
||||||
"status.quote_post_author": "Цитирах публикация от @{name}",
|
"status.quote_post_author": "Цитирах публикация от @{name}",
|
||||||
|
"status.quote_private": "Частните публикации не може да се цитират",
|
||||||
"status.read_more": "Още за четене",
|
"status.read_more": "Още за четене",
|
||||||
"status.reblog": "Подсилване",
|
"status.reblog": "Подсилване",
|
||||||
|
"status.reblog_or_quote": "Подсилване или цитиране",
|
||||||
|
"status.reblog_private": "Споделете пак с последователите си",
|
||||||
"status.reblogged_by": "{name} подсили",
|
"status.reblogged_by": "{name} подсили",
|
||||||
"status.reblogs": "{count, plural, one {подсилване} other {подсилвания}}",
|
"status.reblogs": "{count, plural, one {подсилване} other {подсилвания}}",
|
||||||
"status.reblogs.empty": "Още никого не е подсилвал публикацията. Подсилващият ще се покаже тук.",
|
"status.reblogs.empty": "Още никого не е подсилвал публикацията. Подсилващият ще се покаже тук.",
|
||||||
"status.redraft": "Изтриване и преработване",
|
"status.redraft": "Изтриване и преработване",
|
||||||
"status.remove_bookmark": "Премахване на отметката",
|
"status.remove_bookmark": "Премахване на отметката",
|
||||||
"status.remove_favourite": "Премахване от любими",
|
"status.remove_favourite": "Премахване от любими",
|
||||||
|
"status.remove_quote": "Премахване",
|
||||||
"status.replied_in_thread": "Отговорено в нишката",
|
"status.replied_in_thread": "Отговорено в нишката",
|
||||||
"status.replied_to": "В отговор до {name}",
|
"status.replied_to": "В отговор до {name}",
|
||||||
"status.reply": "Отговор",
|
"status.reply": "Отговор",
|
||||||
"status.replyAll": "Отговор на нишка",
|
"status.replyAll": "Отговор на нишка",
|
||||||
"status.report": "Докладване на @{name}",
|
"status.report": "Докладване на @{name}",
|
||||||
|
"status.request_quote": "Заявка за цитиране",
|
||||||
"status.revoke_quote": "Премахване на моя публикация от публикацията на @{name}",
|
"status.revoke_quote": "Премахване на моя публикация от публикацията на @{name}",
|
||||||
"status.sensitive_warning": "Деликатно съдържание",
|
"status.sensitive_warning": "Деликатно съдържание",
|
||||||
"status.share": "Споделяне",
|
"status.share": "Споделяне",
|
||||||
|
|
@ -910,6 +951,7 @@
|
||||||
"upload_button.label": "Добавете файл с образ, видео или звук",
|
"upload_button.label": "Добавете файл с образ, видео или звук",
|
||||||
"upload_error.limit": "Превишено ограничението за качване на файлове.",
|
"upload_error.limit": "Превишено ограничението за качване на файлове.",
|
||||||
"upload_error.poll": "Качването на файлове не е позволено с анкети.",
|
"upload_error.poll": "Качването на файлове не е позволено с анкети.",
|
||||||
|
"upload_error.quote": "Цитирайки, не може да качвате файл.",
|
||||||
"upload_form.drag_and_drop.instructions": "Натиснете интервал или enter, за да подберете мултимедийно прикачване. Провлачвайки, ползвайте клавишите със стрелки, за да премествате мултимедията във всяка дадена посока. Натиснете пак интервал или enter, за да се стовари мултимедийното прикачване в новото си положение или натиснете Esc за отмяна.",
|
"upload_form.drag_and_drop.instructions": "Натиснете интервал или enter, за да подберете мултимедийно прикачване. Провлачвайки, ползвайте клавишите със стрелки, за да премествате мултимедията във всяка дадена посока. Натиснете пак интервал или enter, за да се стовари мултимедийното прикачване в новото си положение или натиснете Esc за отмяна.",
|
||||||
"upload_form.drag_and_drop.on_drag_cancel": "Провлачването е отменено. Мултимедийното прикачване {item} е спуснато.",
|
"upload_form.drag_and_drop.on_drag_cancel": "Провлачването е отменено. Мултимедийното прикачване {item} е спуснато.",
|
||||||
"upload_form.drag_and_drop.on_drag_end": "Мултимедийното прикачване {item} е спуснато.",
|
"upload_form.drag_and_drop.on_drag_end": "Мултимедийното прикачване {item} е спуснато.",
|
||||||
|
|
@ -935,6 +977,11 @@
|
||||||
"video.volume_up": "Увеличаване на звука",
|
"video.volume_up": "Увеличаване на звука",
|
||||||
"visibility_modal.button_title": "Задаване на видимост",
|
"visibility_modal.button_title": "Задаване на видимост",
|
||||||
"visibility_modal.header": "Видимост и взаимодействие",
|
"visibility_modal.header": "Видимост и взаимодействие",
|
||||||
|
"visibility_modal.helper.privacy_editing": "Видимостта не може да се променя след публикуване на публикацията.",
|
||||||
|
"visibility_modal.privacy_label": "Видимост",
|
||||||
"visibility_modal.quote_followers": "Само последователи",
|
"visibility_modal.quote_followers": "Само последователи",
|
||||||
"visibility_modal.quote_public": "Някой"
|
"visibility_modal.quote_label": "Кой може да цитира",
|
||||||
|
"visibility_modal.quote_nobody": "Само аз",
|
||||||
|
"visibility_modal.quote_public": "Някой",
|
||||||
|
"visibility_modal.save": "Запазване"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -871,7 +871,6 @@
|
||||||
"status.contains_quote": "Conté una cita",
|
"status.contains_quote": "Conté una cita",
|
||||||
"status.context.loading": "Es carreguen més respostes",
|
"status.context.loading": "Es carreguen més respostes",
|
||||||
"status.context.loading_error": "No s'han pogut carregar respostes noves",
|
"status.context.loading_error": "No s'han pogut carregar respostes noves",
|
||||||
"status.context.loading_success": "S'han carregat totes les respostes",
|
|
||||||
"status.context.more_replies_found": "S'han trobat més respostes",
|
"status.context.more_replies_found": "S'han trobat més respostes",
|
||||||
"status.context.retry": "Torna-ho a provar",
|
"status.context.retry": "Torna-ho a provar",
|
||||||
"status.context.show": "Mostra",
|
"status.context.show": "Mostra",
|
||||||
|
|
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Zatím v záložkách nemáte žádné příspěvky. Až si do nich nějaký přidáte, zobrazí se zde.",
|
"empty_column.bookmarked_statuses": "Zatím v záložkách nemáte žádné příspěvky. Až si do nich nějaký přidáte, zobrazí se zde.",
|
||||||
"empty_column.community": "Místní časová osa je prázdná. Napište něco veřejně a rozhýbejte to tu!",
|
"empty_column.community": "Místní časová osa je prázdná. Napište něco veřejně a rozhýbejte to tu!",
|
||||||
"empty_column.direct": "Zatím nemáte žádné soukromé zmínky. Až nějakou pošlete nebo dostanete, zobrazí se zde.",
|
"empty_column.direct": "Zatím nemáte žádné soukromé zmínky. Až nějakou pošlete nebo dostanete, zobrazí se zde.",
|
||||||
|
"empty_column.disabled_feed": "Tento kanál byl zakázán administrátory vašeho serveru.",
|
||||||
"empty_column.domain_blocks": "Ještě nemáte žádné zablokované domény.",
|
"empty_column.domain_blocks": "Ještě nemáte žádné zablokované domény.",
|
||||||
"empty_column.explore_statuses": "Momentálně není nic populární. Vraťte se později!",
|
"empty_column.explore_statuses": "Momentálně není nic populární. Vraťte se později!",
|
||||||
"empty_column.favourited_statuses": "Zatím nemáte žádné oblíbené příspěvky. Až si nějaký oblíbíte, zobrazí se zde.",
|
"empty_column.favourited_statuses": "Zatím nemáte žádné oblíbené příspěvky. Až si nějaký oblíbíte, zobrazí se zde.",
|
||||||
|
|
@ -876,7 +877,7 @@
|
||||||
"status.contains_quote": "Obsahuje citaci",
|
"status.contains_quote": "Obsahuje citaci",
|
||||||
"status.context.loading": "Načítání dalších odpovědí",
|
"status.context.loading": "Načítání dalších odpovědí",
|
||||||
"status.context.loading_error": "Nelze načíst nové odpovědi",
|
"status.context.loading_error": "Nelze načíst nové odpovědi",
|
||||||
"status.context.loading_success": "Všechny odpovědi načteny",
|
"status.context.loading_success": "Nové odpovědi načteny",
|
||||||
"status.context.more_replies_found": "Nalezeny další odpovědi",
|
"status.context.more_replies_found": "Nalezeny další odpovědi",
|
||||||
"status.context.retry": "Zkusit znovu",
|
"status.context.retry": "Zkusit znovu",
|
||||||
"status.context.show": "Zobrazit",
|
"status.context.show": "Zobrazit",
|
||||||
|
|
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Does gennych chi ddim unrhyw bostiad wedi'u cadw fel nod tudalen eto. Pan fyddwch yn gosod nod tudalen i un, mi fydd yn ymddangos yma.",
|
"empty_column.bookmarked_statuses": "Does gennych chi ddim unrhyw bostiad wedi'u cadw fel nod tudalen eto. Pan fyddwch yn gosod nod tudalen i un, mi fydd yn ymddangos yma.",
|
||||||
"empty_column.community": "Mae'r ffrwd lleol yn wag. Beth am ysgrifennu rhywbeth cyhoeddus!",
|
"empty_column.community": "Mae'r ffrwd lleol yn wag. Beth am ysgrifennu rhywbeth cyhoeddus!",
|
||||||
"empty_column.direct": "Does gennych chi unrhyw grybwylliadau preifat eto. Pan fyddwch chi'n anfon neu'n derbyn un, bydd yn ymddangos yma.",
|
"empty_column.direct": "Does gennych chi unrhyw grybwylliadau preifat eto. Pan fyddwch chi'n anfon neu'n derbyn un, bydd yn ymddangos yma.",
|
||||||
|
"empty_column.disabled_feed": "Mae'r ffrwd hon wedi'i hanalluogi gan weinyddwyr eich gweinydd.",
|
||||||
"empty_column.domain_blocks": "Does dim parthau wedi'u rhwystro eto.",
|
"empty_column.domain_blocks": "Does dim parthau wedi'u rhwystro eto.",
|
||||||
"empty_column.explore_statuses": "Does dim pynciau llosg ar hyn o bryd. Dewch nôl nes ymlaen!",
|
"empty_column.explore_statuses": "Does dim pynciau llosg ar hyn o bryd. Dewch nôl nes ymlaen!",
|
||||||
"empty_column.favourited_statuses": "Rydych chi heb ffafrio unrhyw bostiadau eto. Pan byddwch chi'n ffafrio un, bydd yn ymddangos yma.",
|
"empty_column.favourited_statuses": "Rydych chi heb ffafrio unrhyw bostiadau eto. Pan byddwch chi'n ffafrio un, bydd yn ymddangos yma.",
|
||||||
|
|
@ -753,6 +754,7 @@
|
||||||
"privacy.unlisted.short": "Tewi'r cyhoeddus",
|
"privacy.unlisted.short": "Tewi'r cyhoeddus",
|
||||||
"privacy_policy.last_updated": "Diweddarwyd ddiwethaf ar {date}",
|
"privacy_policy.last_updated": "Diweddarwyd ddiwethaf ar {date}",
|
||||||
"privacy_policy.title": "Polisi Preifatrwydd",
|
"privacy_policy.title": "Polisi Preifatrwydd",
|
||||||
|
"quote_error.edit": "Does dim modd ychwanegu dyfyniadau wrth olygu postiad.",
|
||||||
"quote_error.poll": "Dyw dyfynnu ddim yn cael ei ganiatáu gyda pholau.",
|
"quote_error.poll": "Dyw dyfynnu ddim yn cael ei ganiatáu gyda pholau.",
|
||||||
"quote_error.quote": "Dim ond un dyfyniad ar y tro sy'n cael ei ganiatáu.",
|
"quote_error.quote": "Dim ond un dyfyniad ar y tro sy'n cael ei ganiatáu.",
|
||||||
"quote_error.unauthorized": "Does gennych chi ddim awdurdod i ddyfynnu'r postiad hwn.",
|
"quote_error.unauthorized": "Does gennych chi ddim awdurdod i ddyfynnu'r postiad hwn.",
|
||||||
|
|
@ -875,7 +877,7 @@
|
||||||
"status.contains_quote": "Yn cynnwys dyfyniad",
|
"status.contains_quote": "Yn cynnwys dyfyniad",
|
||||||
"status.context.loading": "Yn llwytho mwy o atebion",
|
"status.context.loading": "Yn llwytho mwy o atebion",
|
||||||
"status.context.loading_error": "Wedi methu llwytho atebion newydd",
|
"status.context.loading_error": "Wedi methu llwytho atebion newydd",
|
||||||
"status.context.loading_success": "Wedi llwytho'r holl atebion",
|
"status.context.loading_success": "Atebion newydd wedi'u llwytho",
|
||||||
"status.context.more_replies_found": "Mwy o atebion wedi'u canfod",
|
"status.context.more_replies_found": "Mwy o atebion wedi'u canfod",
|
||||||
"status.context.retry": "Ceisio eto",
|
"status.context.retry": "Ceisio eto",
|
||||||
"status.context.show": "Dangos",
|
"status.context.show": "Dangos",
|
||||||
|
|
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Du har ingen bogmærkede indlæg endnu. Når du bogmærker ét, vil det dukke op hér.",
|
"empty_column.bookmarked_statuses": "Du har ingen bogmærkede indlæg endnu. Når du bogmærker ét, vil det dukke op hér.",
|
||||||
"empty_column.community": "Den lokale tidslinje er tom. Skriv noget offentligt for at sætte tingene i gang!",
|
"empty_column.community": "Den lokale tidslinje er tom. Skriv noget offentligt for at sætte tingene i gang!",
|
||||||
"empty_column.direct": "Du har ikke nogen private omtaler endnu. Når du sender eller modtager en, vil den blive vist her.",
|
"empty_column.direct": "Du har ikke nogen private omtaler endnu. Når du sender eller modtager en, vil den blive vist her.",
|
||||||
|
"empty_column.disabled_feed": "Dette feed er blevet deaktiveret af dine serveradministratorer.",
|
||||||
"empty_column.domain_blocks": "Ingen blokerede domæner endnu.",
|
"empty_column.domain_blocks": "Ingen blokerede domæner endnu.",
|
||||||
"empty_column.explore_statuses": "Ingen nye trends lige nu. Tjek igen senere!",
|
"empty_column.explore_statuses": "Ingen nye trends lige nu. Tjek igen senere!",
|
||||||
"empty_column.favourited_statuses": "Du har endnu ingen favoritindlæg. Når du føjer et opslag til favoritter, vil det dukke op her.",
|
"empty_column.favourited_statuses": "Du har endnu ingen favoritindlæg. Når du føjer et opslag til favoritter, vil det dukke op her.",
|
||||||
|
|
@ -876,7 +877,7 @@
|
||||||
"status.contains_quote": "Indeholder citat",
|
"status.contains_quote": "Indeholder citat",
|
||||||
"status.context.loading": "Indlæser flere svar",
|
"status.context.loading": "Indlæser flere svar",
|
||||||
"status.context.loading_error": "Kunne ikke indlæse nye svar",
|
"status.context.loading_error": "Kunne ikke indlæse nye svar",
|
||||||
"status.context.loading_success": "Alle svar indlæst",
|
"status.context.loading_success": "Nye svar indlæst",
|
||||||
"status.context.more_replies_found": "Flere svar fundet",
|
"status.context.more_replies_found": "Flere svar fundet",
|
||||||
"status.context.retry": "Prøv igen",
|
"status.context.retry": "Prøv igen",
|
||||||
"status.context.show": "Vis",
|
"status.context.show": "Vis",
|
||||||
|
|
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Du hast bisher keine Beiträge als Lesezeichen abgelegt. Sobald du einen Beitrag als Lesezeichen speicherst, wird er hier erscheinen.",
|
"empty_column.bookmarked_statuses": "Du hast bisher keine Beiträge als Lesezeichen abgelegt. Sobald du einen Beitrag als Lesezeichen speicherst, wird er hier erscheinen.",
|
||||||
"empty_column.community": "Die lokale Timeline ist leer. Schreibe einen öffentlichen Beitrag, um den Stein ins Rollen zu bringen!",
|
"empty_column.community": "Die lokale Timeline ist leer. Schreibe einen öffentlichen Beitrag, um den Stein ins Rollen zu bringen!",
|
||||||
"empty_column.direct": "Du hast noch keine privaten Erwähnungen. Sobald du eine sendest oder erhältst, wird sie hier erscheinen.",
|
"empty_column.direct": "Du hast noch keine privaten Erwähnungen. Sobald du eine sendest oder erhältst, wird sie hier erscheinen.",
|
||||||
|
"empty_column.disabled_feed": "Diesen Feed haben deine Server-Administrator*innen deaktiviert.",
|
||||||
"empty_column.domain_blocks": "Du hast noch keine Domains blockiert.",
|
"empty_column.domain_blocks": "Du hast noch keine Domains blockiert.",
|
||||||
"empty_column.explore_statuses": "Momentan ist nichts im Trend. Schau später wieder vorbei!",
|
"empty_column.explore_statuses": "Momentan ist nichts im Trend. Schau später wieder vorbei!",
|
||||||
"empty_column.favourited_statuses": "Du hast noch keine Beiträge favorisiert. Sobald du einen favorisierst, wird er hier erscheinen.",
|
"empty_column.favourited_statuses": "Du hast noch keine Beiträge favorisiert. Sobald du einen favorisierst, wird er hier erscheinen.",
|
||||||
|
|
@ -876,7 +877,7 @@
|
||||||
"status.contains_quote": "Enthält Zitat",
|
"status.contains_quote": "Enthält Zitat",
|
||||||
"status.context.loading": "Weitere Antworten laden",
|
"status.context.loading": "Weitere Antworten laden",
|
||||||
"status.context.loading_error": "Weitere Antworten konnten nicht geladen werden",
|
"status.context.loading_error": "Weitere Antworten konnten nicht geladen werden",
|
||||||
"status.context.loading_success": "Alle weiteren Antworten geladen",
|
"status.context.loading_success": "Neue Antworten geladen",
|
||||||
"status.context.more_replies_found": "Weitere Antworten verfügbar",
|
"status.context.more_replies_found": "Weitere Antworten verfügbar",
|
||||||
"status.context.retry": "Erneut versuchen",
|
"status.context.retry": "Erneut versuchen",
|
||||||
"status.context.show": "Anzeigen",
|
"status.context.show": "Anzeigen",
|
||||||
|
|
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Δεν έχεις καμία ανάρτηση με σελιδοδείκτη ακόμα. Μόλις βάλεις κάποιον, θα εμφανιστεί εδώ.",
|
"empty_column.bookmarked_statuses": "Δεν έχεις καμία ανάρτηση με σελιδοδείκτη ακόμα. Μόλις βάλεις κάποιον, θα εμφανιστεί εδώ.",
|
||||||
"empty_column.community": "Η τοπική ροή είναι κενή. Γράψε κάτι δημόσια για να αρχίσει να κυλά η μπάλα!",
|
"empty_column.community": "Η τοπική ροή είναι κενή. Γράψε κάτι δημόσια για να αρχίσει να κυλά η μπάλα!",
|
||||||
"empty_column.direct": "Δεν έχεις καμία προσωπική επισήμανση ακόμα. Όταν στείλεις ή λάβεις μία, θα εμφανιστεί εδώ.",
|
"empty_column.direct": "Δεν έχεις καμία προσωπική επισήμανση ακόμα. Όταν στείλεις ή λάβεις μία, θα εμφανιστεί εδώ.",
|
||||||
|
"empty_column.disabled_feed": "Αυτή η ροή έχει απενεργοποιηθεί από τους διαχειριστές του διακομιστή σας.",
|
||||||
"empty_column.domain_blocks": "Δεν υπάρχουν αποκλεισμένοι τομείς ακόμα.",
|
"empty_column.domain_blocks": "Δεν υπάρχουν αποκλεισμένοι τομείς ακόμα.",
|
||||||
"empty_column.explore_statuses": "Τίποτα δεν βρίσκεται στις τάσεις αυτή τη στιγμή. Έλεγξε αργότερα!",
|
"empty_column.explore_statuses": "Τίποτα δεν βρίσκεται στις τάσεις αυτή τη στιγμή. Έλεγξε αργότερα!",
|
||||||
"empty_column.favourited_statuses": "Δεν έχεις καμία αγαπημένη ανάρτηση ακόμα. Μόλις αγαπήσεις κάποια, θα εμφανιστεί εδώ.",
|
"empty_column.favourited_statuses": "Δεν έχεις καμία αγαπημένη ανάρτηση ακόμα. Μόλις αγαπήσεις κάποια, θα εμφανιστεί εδώ.",
|
||||||
|
|
@ -876,7 +877,7 @@
|
||||||
"status.contains_quote": "Περιέχει παράθεση",
|
"status.contains_quote": "Περιέχει παράθεση",
|
||||||
"status.context.loading": "Φόρτωση περισσότερων απαντήσεων",
|
"status.context.loading": "Φόρτωση περισσότερων απαντήσεων",
|
||||||
"status.context.loading_error": "Αδυναμία φόρτωσης νέων απαντήσεων",
|
"status.context.loading_error": "Αδυναμία φόρτωσης νέων απαντήσεων",
|
||||||
"status.context.loading_success": "Όλες οι απαντήσεις φορτώθηκαν",
|
"status.context.loading_success": "Νέες απαντήσεις φορτώθηκαν",
|
||||||
"status.context.more_replies_found": "Βρέθηκαν περισσότερες απαντήσεις",
|
"status.context.more_replies_found": "Βρέθηκαν περισσότερες απαντήσεις",
|
||||||
"status.context.retry": "Επανάληψη",
|
"status.context.retry": "Επανάληψη",
|
||||||
"status.context.show": "Εμφάνιση",
|
"status.context.show": "Εμφάνιση",
|
||||||
|
|
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "You don't have any bookmarked posts yet. When you bookmark one, it will show up here.",
|
"empty_column.bookmarked_statuses": "You don't have any bookmarked posts yet. When you bookmark one, it will show up here.",
|
||||||
"empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
|
"empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
|
||||||
"empty_column.direct": "You don't have any private mentions yet. When you send or receive one, it will show up here.",
|
"empty_column.direct": "You don't have any private mentions yet. When you send or receive one, it will show up here.",
|
||||||
|
"empty_column.disabled_feed": "This feed has been disabled by your server administrators.",
|
||||||
"empty_column.domain_blocks": "There are no blocked domains yet.",
|
"empty_column.domain_blocks": "There are no blocked domains yet.",
|
||||||
"empty_column.explore_statuses": "Nothing is trending right now. Check back later!",
|
"empty_column.explore_statuses": "Nothing is trending right now. Check back later!",
|
||||||
"empty_column.favourited_statuses": "You don't have any favorite posts yet. When you favorite one, it will show up here.",
|
"empty_column.favourited_statuses": "You don't have any favorite posts yet. When you favorite one, it will show up here.",
|
||||||
|
|
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Todavía no tenés mensajes guardados en \"Marcadores\". Cuando guardés uno en \"Marcadores\", se mostrará acá.",
|
"empty_column.bookmarked_statuses": "Todavía no tenés mensajes guardados en \"Marcadores\". Cuando guardés uno en \"Marcadores\", se mostrará acá.",
|
||||||
"empty_column.community": "La línea temporal local está vacía. ¡Escribí algo en modo público para que se empiece a correr la bola!",
|
"empty_column.community": "La línea temporal local está vacía. ¡Escribí algo en modo público para que se empiece a correr la bola!",
|
||||||
"empty_column.direct": "Todavía no tenés ninguna mención privada. Cuando enviés o recibás una, se mostrará acá.",
|
"empty_column.direct": "Todavía no tenés ninguna mención privada. Cuando enviés o recibás una, se mostrará acá.",
|
||||||
|
"empty_column.disabled_feed": "Esta línea temporal fue deshabilitada por los administradores de tu servidor.",
|
||||||
"empty_column.domain_blocks": "Todavía no hay dominios bloqueados.",
|
"empty_column.domain_blocks": "Todavía no hay dominios bloqueados.",
|
||||||
"empty_column.explore_statuses": "No hay nada en tendencia ahora mismo. ¡Volvé a revisar más tarde!",
|
"empty_column.explore_statuses": "No hay nada en tendencia ahora mismo. ¡Volvé a revisar más tarde!",
|
||||||
"empty_column.favourited_statuses": "Todavía no tenés mensajes favoritos. Cuando marqués uno como favorito, se mostrará acá.",
|
"empty_column.favourited_statuses": "Todavía no tenés mensajes favoritos. Cuando marqués uno como favorito, se mostrará acá.",
|
||||||
|
|
@ -876,7 +877,7 @@
|
||||||
"status.contains_quote": "Contiene cita",
|
"status.contains_quote": "Contiene cita",
|
||||||
"status.context.loading": "Cargando más respuestas",
|
"status.context.loading": "Cargando más respuestas",
|
||||||
"status.context.loading_error": "No se pudieron cargar nuevas respuestas",
|
"status.context.loading_error": "No se pudieron cargar nuevas respuestas",
|
||||||
"status.context.loading_success": "Se cargaron todas las respuestas",
|
"status.context.loading_success": "Se cargaron nuevas respuestas",
|
||||||
"status.context.more_replies_found": "Se encontraron más respuestas",
|
"status.context.more_replies_found": "Se encontraron más respuestas",
|
||||||
"status.context.retry": "Reintentar",
|
"status.context.retry": "Reintentar",
|
||||||
"status.context.show": "Mostrar",
|
"status.context.show": "Mostrar",
|
||||||
|
|
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Aún no tienes ninguna publicación guardada como marcador. Cuando guardes una, se mostrará aquí.",
|
"empty_column.bookmarked_statuses": "Aún no tienes ninguna publicación guardada como marcador. Cuando guardes una, se mostrará aquí.",
|
||||||
"empty_column.community": "La cronología local está vacía. ¡Escribe algo públicamente para ponerla en marcha!",
|
"empty_column.community": "La cronología local está vacía. ¡Escribe algo públicamente para ponerla en marcha!",
|
||||||
"empty_column.direct": "Aún no tienes menciones privadas. Cuando envíes o recibas una, aparecerán aquí.",
|
"empty_column.direct": "Aún no tienes menciones privadas. Cuando envíes o recibas una, aparecerán aquí.",
|
||||||
|
"empty_column.disabled_feed": "Esta cronología ha sido desactivada por los administradores del servidor.",
|
||||||
"empty_column.domain_blocks": "Todavía no hay dominios ocultos.",
|
"empty_column.domain_blocks": "Todavía no hay dominios ocultos.",
|
||||||
"empty_column.explore_statuses": "Nada es tendencia en este momento. ¡Revisa más tarde!",
|
"empty_column.explore_statuses": "Nada es tendencia en este momento. ¡Revisa más tarde!",
|
||||||
"empty_column.favourited_statuses": "Todavía no tienes publicaciones favoritas. Cuando le des favorito a una publicación se mostrarán acá.",
|
"empty_column.favourited_statuses": "Todavía no tienes publicaciones favoritas. Cuando le des favorito a una publicación se mostrarán acá.",
|
||||||
|
|
@ -753,7 +754,7 @@
|
||||||
"privacy.unlisted.short": "Pública, pero discreta",
|
"privacy.unlisted.short": "Pública, pero discreta",
|
||||||
"privacy_policy.last_updated": "Actualizado por última vez {date}",
|
"privacy_policy.last_updated": "Actualizado por última vez {date}",
|
||||||
"privacy_policy.title": "Política de Privacidad",
|
"privacy_policy.title": "Política de Privacidad",
|
||||||
"quote_error.edit": "No se pueden añadir citas mientras se edita una publicación.",
|
"quote_error.edit": "No se pueden añadir citas cuando se edita una publicación.",
|
||||||
"quote_error.poll": "No se permite citar encuestas.",
|
"quote_error.poll": "No se permite citar encuestas.",
|
||||||
"quote_error.quote": "Solo se permite una cita a la vez.",
|
"quote_error.quote": "Solo se permite una cita a la vez.",
|
||||||
"quote_error.unauthorized": "No estás autorizado a citar esta publicación.",
|
"quote_error.unauthorized": "No estás autorizado a citar esta publicación.",
|
||||||
|
|
@ -876,7 +877,7 @@
|
||||||
"status.contains_quote": "Contiene cita",
|
"status.contains_quote": "Contiene cita",
|
||||||
"status.context.loading": "Cargando más respuestas",
|
"status.context.loading": "Cargando más respuestas",
|
||||||
"status.context.loading_error": "No se pudieron cargar nuevas respuestas",
|
"status.context.loading_error": "No se pudieron cargar nuevas respuestas",
|
||||||
"status.context.loading_success": "Todas las respuestas cargadas",
|
"status.context.loading_success": "Cargadas nuevas respuestas",
|
||||||
"status.context.more_replies_found": "Se han encontrado más respuestas",
|
"status.context.more_replies_found": "Se han encontrado más respuestas",
|
||||||
"status.context.retry": "Reintentar",
|
"status.context.retry": "Reintentar",
|
||||||
"status.context.show": "Mostrar",
|
"status.context.show": "Mostrar",
|
||||||
|
|
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Aún no tienes ninguna publicación guardada como marcador. Cuando guardes una, se mostrará aquí.",
|
"empty_column.bookmarked_statuses": "Aún no tienes ninguna publicación guardada como marcador. Cuando guardes una, se mostrará aquí.",
|
||||||
"empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!",
|
"empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!",
|
||||||
"empty_column.direct": "Aún no tienes menciones privadas. Cuando envíes o recibas una, aparecerán aquí.",
|
"empty_column.direct": "Aún no tienes menciones privadas. Cuando envíes o recibas una, aparecerán aquí.",
|
||||||
|
"empty_column.disabled_feed": "Esta cronología ha sido desactivada por los administradores del servidor.",
|
||||||
"empty_column.domain_blocks": "Todavía no hay dominios bloqueados.",
|
"empty_column.domain_blocks": "Todavía no hay dominios bloqueados.",
|
||||||
"empty_column.explore_statuses": "No hay nada en tendencia en este momento. ¡Revisa más tarde!",
|
"empty_column.explore_statuses": "No hay nada en tendencia en este momento. ¡Revisa más tarde!",
|
||||||
"empty_column.favourited_statuses": "Todavía no tienes publicaciones favoritas. Cuando marques una publicación como favorita, se mostrarán aquí.",
|
"empty_column.favourited_statuses": "Todavía no tienes publicaciones favoritas. Cuando marques una publicación como favorita, se mostrarán aquí.",
|
||||||
|
|
@ -753,7 +754,7 @@
|
||||||
"privacy.unlisted.short": "Pública silenciosa",
|
"privacy.unlisted.short": "Pública silenciosa",
|
||||||
"privacy_policy.last_updated": "Actualizado por última vez {date}",
|
"privacy_policy.last_updated": "Actualizado por última vez {date}",
|
||||||
"privacy_policy.title": "Política de Privacidad",
|
"privacy_policy.title": "Política de Privacidad",
|
||||||
"quote_error.edit": "No se pueden añadir citas mientras se edita una publicación.",
|
"quote_error.edit": "No se pueden añadir citas cuando se edita una publicación.",
|
||||||
"quote_error.poll": "No es posible citar encuestas.",
|
"quote_error.poll": "No es posible citar encuestas.",
|
||||||
"quote_error.quote": "Solo se permite una cita a la vez.",
|
"quote_error.quote": "Solo se permite una cita a la vez.",
|
||||||
"quote_error.unauthorized": "No tienes permiso para citar esta publicación.",
|
"quote_error.unauthorized": "No tienes permiso para citar esta publicación.",
|
||||||
|
|
@ -876,7 +877,7 @@
|
||||||
"status.contains_quote": "Contiene cita",
|
"status.contains_quote": "Contiene cita",
|
||||||
"status.context.loading": "Cargando más respuestas",
|
"status.context.loading": "Cargando más respuestas",
|
||||||
"status.context.loading_error": "No se pudieron cargar nuevas respuestas",
|
"status.context.loading_error": "No se pudieron cargar nuevas respuestas",
|
||||||
"status.context.loading_success": "Se cargaron todas las respuestas",
|
"status.context.loading_success": "Cargadas nuevas respuestas",
|
||||||
"status.context.more_replies_found": "Se encontraron más respuestas",
|
"status.context.more_replies_found": "Se encontraron más respuestas",
|
||||||
"status.context.retry": "Reintentar",
|
"status.context.retry": "Reintentar",
|
||||||
"status.context.show": "Mostrar",
|
"status.context.show": "Mostrar",
|
||||||
|
|
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Järjehoidjatesse pole veel lisatud postitusi. Kui lisad mõne, näed neid siin.",
|
"empty_column.bookmarked_statuses": "Järjehoidjatesse pole veel lisatud postitusi. Kui lisad mõne, näed neid siin.",
|
||||||
"empty_column.community": "Kohalik ajajoon on tühi. Kirjuta midagi avalikult, et pall veerema ajada!",
|
"empty_column.community": "Kohalik ajajoon on tühi. Kirjuta midagi avalikult, et pall veerema ajada!",
|
||||||
"empty_column.direct": "Sul pole veel ühtegi privaatset mainimist. Kui saadad või saad mõne, ilmuvad need siin.",
|
"empty_column.direct": "Sul pole veel ühtegi privaatset mainimist. Kui saadad või saad mõne, ilmuvad need siin.",
|
||||||
|
"empty_column.disabled_feed": "See infovoog on serveri peakasutajate poolt välja lülitatud.",
|
||||||
"empty_column.domain_blocks": "Siin ei ole veel peidetud domeene.",
|
"empty_column.domain_blocks": "Siin ei ole veel peidetud domeene.",
|
||||||
"empty_column.explore_statuses": "Praegu pole ühtegi trendi. Tule hiljem tagasi!",
|
"empty_column.explore_statuses": "Praegu pole ühtegi trendi. Tule hiljem tagasi!",
|
||||||
"empty_column.favourited_statuses": "Pole veel lemmikpostitusi. Kui märgid mõne, näed neid siin.",
|
"empty_column.favourited_statuses": "Pole veel lemmikpostitusi. Kui märgid mõne, näed neid siin.",
|
||||||
|
|
@ -753,6 +754,7 @@
|
||||||
"privacy.unlisted.short": "Vaikselt avalik",
|
"privacy.unlisted.short": "Vaikselt avalik",
|
||||||
"privacy_policy.last_updated": "Viimati uuendatud {date}",
|
"privacy_policy.last_updated": "Viimati uuendatud {date}",
|
||||||
"privacy_policy.title": "Isikuandmete kaitse",
|
"privacy_policy.title": "Isikuandmete kaitse",
|
||||||
|
"quote_error.edit": "Postituse muutmisel ei saa tsitaati lisada.",
|
||||||
"quote_error.poll": "Tsiteerimine pole küsitlustes lubatud.",
|
"quote_error.poll": "Tsiteerimine pole küsitlustes lubatud.",
|
||||||
"quote_error.quote": "Korraga on lubatud vaid üks tsitaat.",
|
"quote_error.quote": "Korraga on lubatud vaid üks tsitaat.",
|
||||||
"quote_error.unauthorized": "Sul pole õigust seda postitust tsiteerida.",
|
"quote_error.unauthorized": "Sul pole õigust seda postitust tsiteerida.",
|
||||||
|
|
@ -875,7 +877,7 @@
|
||||||
"status.contains_quote": "Sisaldab tsitaati",
|
"status.contains_quote": "Sisaldab tsitaati",
|
||||||
"status.context.loading": "Laadin veel vastuseid",
|
"status.context.loading": "Laadin veel vastuseid",
|
||||||
"status.context.loading_error": "Uute vastuste laadimine ei õnnestunud",
|
"status.context.loading_error": "Uute vastuste laadimine ei õnnestunud",
|
||||||
"status.context.loading_success": "Kõik vastused on laaditud",
|
"status.context.loading_success": "Uued vastused on laaditud",
|
||||||
"status.context.more_replies_found": "Leidub veel vastuseid",
|
"status.context.more_replies_found": "Leidub veel vastuseid",
|
||||||
"status.context.retry": "Proovi uuesti",
|
"status.context.retry": "Proovi uuesti",
|
||||||
"status.context.show": "Näita",
|
"status.context.show": "Näita",
|
||||||
|
|
|
||||||
|
|
@ -876,7 +876,7 @@
|
||||||
"status.contains_quote": "Sisältää lainauksen",
|
"status.contains_quote": "Sisältää lainauksen",
|
||||||
"status.context.loading": "Ladataan lisää vastauksia",
|
"status.context.loading": "Ladataan lisää vastauksia",
|
||||||
"status.context.loading_error": "Ei voitu ladata lisää vastauksia",
|
"status.context.loading_error": "Ei voitu ladata lisää vastauksia",
|
||||||
"status.context.loading_success": "Kaikki vastaukset ladattu",
|
"status.context.loading_success": "Uudet vastaukset ladattu",
|
||||||
"status.context.more_replies_found": "Löytyi lisää vastauksia",
|
"status.context.more_replies_found": "Löytyi lisää vastauksia",
|
||||||
"status.context.retry": "Yritä uudelleen",
|
"status.context.retry": "Yritä uudelleen",
|
||||||
"status.context.show": "Näytä",
|
"status.context.show": "Näytä",
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@
|
||||||
"account.follows.empty": "Hesin brúkari fylgir ongum enn.",
|
"account.follows.empty": "Hesin brúkari fylgir ongum enn.",
|
||||||
"account.follows_you": "Fylgir tær",
|
"account.follows_you": "Fylgir tær",
|
||||||
"account.go_to_profile": "Far til vanga",
|
"account.go_to_profile": "Far til vanga",
|
||||||
"account.hide_reblogs": "Fjal lyft frá @{name}",
|
"account.hide_reblogs": "Fjal stimbran frá @{name}",
|
||||||
"account.in_memoriam": "In memoriam.",
|
"account.in_memoriam": "In memoriam.",
|
||||||
"account.joined_short": "Gjørdist limur",
|
"account.joined_short": "Gjørdist limur",
|
||||||
"account.languages": "Broyt fylgd mál",
|
"account.languages": "Broyt fylgd mál",
|
||||||
|
|
@ -79,7 +79,7 @@
|
||||||
"account.requested_follow": "{name} hevur biðið um at fylgja tær",
|
"account.requested_follow": "{name} hevur biðið um at fylgja tær",
|
||||||
"account.requests_to_follow_you": "Umbønir um at fylgja tær",
|
"account.requests_to_follow_you": "Umbønir um at fylgja tær",
|
||||||
"account.share": "Deil vanga @{name}'s",
|
"account.share": "Deil vanga @{name}'s",
|
||||||
"account.show_reblogs": "Vís lyft frá @{name}",
|
"account.show_reblogs": "Vís stimbran frá @{name}",
|
||||||
"account.statuses_counter": "{count, plural, one {{counter} postur} other {{counter} postar}}",
|
"account.statuses_counter": "{count, plural, one {{counter} postur} other {{counter} postar}}",
|
||||||
"account.unblock": "Banna ikki @{name}",
|
"account.unblock": "Banna ikki @{name}",
|
||||||
"account.unblock_domain": "Banna ikki økisnavnið {domain}",
|
"account.unblock_domain": "Banna ikki økisnavnið {domain}",
|
||||||
|
|
@ -122,7 +122,7 @@
|
||||||
"annual_report.summary.followers.total": "{count} íalt",
|
"annual_report.summary.followers.total": "{count} íalt",
|
||||||
"annual_report.summary.here_it_is": "Her er ein samandráttur av {year}:",
|
"annual_report.summary.here_it_is": "Her er ein samandráttur av {year}:",
|
||||||
"annual_report.summary.highlighted_post.by_favourites": "mest dámdi postur",
|
"annual_report.summary.highlighted_post.by_favourites": "mest dámdi postur",
|
||||||
"annual_report.summary.highlighted_post.by_reblogs": "oftast lyfti postur",
|
"annual_report.summary.highlighted_post.by_reblogs": "oftast stimbraði postur",
|
||||||
"annual_report.summary.highlighted_post.by_replies": "postur við flestum svarum",
|
"annual_report.summary.highlighted_post.by_replies": "postur við flestum svarum",
|
||||||
"annual_report.summary.highlighted_post.possessive": "hjá {name}",
|
"annual_report.summary.highlighted_post.possessive": "hjá {name}",
|
||||||
"annual_report.summary.most_used_app.most_used_app": "mest brúkta app",
|
"annual_report.summary.most_used_app.most_used_app": "mest brúkta app",
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Tú hevur enn einki goymt uppslag. Tú tú goymir eitt uppslag, kemur tað her.",
|
"empty_column.bookmarked_statuses": "Tú hevur enn einki goymt uppslag. Tú tú goymir eitt uppslag, kemur tað her.",
|
||||||
"empty_column.community": "Lokala tíðarlinjan er tóm. Skriva okkurt alment fyri at fáa boltin á rull!",
|
"empty_column.community": "Lokala tíðarlinjan er tóm. Skriva okkurt alment fyri at fáa boltin á rull!",
|
||||||
"empty_column.direct": "Tú hevur ongar privatar umrøður enn. Tá tú sendir ella móttekur eina privata umrøðu, so verður hon sjónlig her.",
|
"empty_column.direct": "Tú hevur ongar privatar umrøður enn. Tá tú sendir ella móttekur eina privata umrøðu, so verður hon sjónlig her.",
|
||||||
|
"empty_column.disabled_feed": "Hendan rásin er gjørd óvirkin av ambætaraumsitarunum hjá tær.",
|
||||||
"empty_column.domain_blocks": "Enn eru eingi blokeraði domenir.",
|
"empty_column.domain_blocks": "Enn eru eingi blokeraði domenir.",
|
||||||
"empty_column.explore_statuses": "Einki rák er beint nú. Royn aftur seinni!",
|
"empty_column.explore_statuses": "Einki rák er beint nú. Royn aftur seinni!",
|
||||||
"empty_column.favourited_statuses": "Tú hevur ongar yndispostar enn. Tá tú gevur einum posti yndismerki, so sært tú hann her.",
|
"empty_column.favourited_statuses": "Tú hevur ongar yndispostar enn. Tá tú gevur einum posti yndismerki, so sært tú hann her.",
|
||||||
|
|
@ -441,7 +442,7 @@
|
||||||
"hints.profiles.see_more_follows": "Sí fleiri, ið viðkomandi fylgir, á {domain}",
|
"hints.profiles.see_more_follows": "Sí fleiri, ið viðkomandi fylgir, á {domain}",
|
||||||
"hints.profiles.see_more_posts": "Sí fleiri postar á {domain}",
|
"hints.profiles.see_more_posts": "Sí fleiri postar á {domain}",
|
||||||
"home.column_settings.show_quotes": "Vís siteringar",
|
"home.column_settings.show_quotes": "Vís siteringar",
|
||||||
"home.column_settings.show_reblogs": "Vís lyft",
|
"home.column_settings.show_reblogs": "Vís stimbranir",
|
||||||
"home.column_settings.show_replies": "Vís svar",
|
"home.column_settings.show_replies": "Vís svar",
|
||||||
"home.hide_announcements": "Fjal kunngerðir",
|
"home.hide_announcements": "Fjal kunngerðir",
|
||||||
"home.pending_critical_update.body": "Vinarliga dagfør Mastodon ambætaran hjá tær so skjótt sum møguligt!",
|
"home.pending_critical_update.body": "Vinarliga dagfør Mastodon ambætaran hjá tær so skjótt sum møguligt!",
|
||||||
|
|
@ -473,7 +474,7 @@
|
||||||
"intervals.full.minutes": "{number, plural, one {# minuttur} other {# minuttir}}",
|
"intervals.full.minutes": "{number, plural, one {# minuttur} other {# minuttir}}",
|
||||||
"keyboard_shortcuts.back": "Bakka",
|
"keyboard_shortcuts.back": "Bakka",
|
||||||
"keyboard_shortcuts.blocked": "Siggj listan við bannaðum brúkarum",
|
"keyboard_shortcuts.blocked": "Siggj listan við bannaðum brúkarum",
|
||||||
"keyboard_shortcuts.boost": "Lyft post",
|
"keyboard_shortcuts.boost": "Stimbra post",
|
||||||
"keyboard_shortcuts.column": "Fá teig í miðdepilin",
|
"keyboard_shortcuts.column": "Fá teig í miðdepilin",
|
||||||
"keyboard_shortcuts.compose": "Fá skriviøkið í miðdeplin",
|
"keyboard_shortcuts.compose": "Fá skriviøkið í miðdeplin",
|
||||||
"keyboard_shortcuts.description": "Frágreiðing",
|
"keyboard_shortcuts.description": "Frágreiðing",
|
||||||
|
|
@ -626,7 +627,7 @@
|
||||||
"notification.own_poll": "Tín atkvøðugreiðsla er endað",
|
"notification.own_poll": "Tín atkvøðugreiðsla er endað",
|
||||||
"notification.poll": "Ein atkvøðugreiðsla, har tú atkvøddi, er endað",
|
"notification.poll": "Ein atkvøðugreiðsla, har tú atkvøddi, er endað",
|
||||||
"notification.quoted_update": "{name} rættaði ein post, sum tú hevur siterað",
|
"notification.quoted_update": "{name} rættaði ein post, sum tú hevur siterað",
|
||||||
"notification.reblog": "{name} lyfti tín post",
|
"notification.reblog": "{name} stimbraði tín post",
|
||||||
"notification.reblog.name_and_others_with_link": "{name} og <a>{count, plural, one {# annar/onnur} other {# onnur}}</a> framhevjaðu tín post",
|
"notification.reblog.name_and_others_with_link": "{name} og <a>{count, plural, one {# annar/onnur} other {# onnur}}</a> framhevjaðu tín post",
|
||||||
"notification.relationships_severance_event": "Mist sambond við {name}",
|
"notification.relationships_severance_event": "Mist sambond við {name}",
|
||||||
"notification.relationships_severance_event.account_suspension": "Ein umsitari frá {from} hevur gjørt {target} óvirkna, sum merkir, at tú ikki kanst móttaka dagføringar ella virka saman við teimum longur.",
|
"notification.relationships_severance_event.account_suspension": "Ein umsitari frá {from} hevur gjørt {target} óvirkna, sum merkir, at tú ikki kanst móttaka dagføringar ella virka saman við teimum longur.",
|
||||||
|
|
@ -876,7 +877,7 @@
|
||||||
"status.contains_quote": "Inniheldur sitat",
|
"status.contains_quote": "Inniheldur sitat",
|
||||||
"status.context.loading": "Tekur fleiri svar niður",
|
"status.context.loading": "Tekur fleiri svar niður",
|
||||||
"status.context.loading_error": "Fekk ikki tikið nýggj svar niður",
|
"status.context.loading_error": "Fekk ikki tikið nýggj svar niður",
|
||||||
"status.context.loading_success": "Øll svar tikin niður",
|
"status.context.loading_success": "Nýggj svar tikin niður",
|
||||||
"status.context.more_replies_found": "Fleiri svar funnin",
|
"status.context.more_replies_found": "Fleiri svar funnin",
|
||||||
"status.context.retry": "Royn aftur",
|
"status.context.retry": "Royn aftur",
|
||||||
"status.context.show": "Vís",
|
"status.context.show": "Vís",
|
||||||
|
|
|
||||||
|
|
@ -869,7 +869,6 @@
|
||||||
"status.contains_quote": "Contient la citation",
|
"status.contains_quote": "Contient la citation",
|
||||||
"status.context.loading": "Chargement de réponses supplémentaires",
|
"status.context.loading": "Chargement de réponses supplémentaires",
|
||||||
"status.context.loading_error": "Impossible de charger les nouvelles réponses",
|
"status.context.loading_error": "Impossible de charger les nouvelles réponses",
|
||||||
"status.context.loading_success": "Toutes les réponses sont chargées",
|
|
||||||
"status.context.more_replies_found": "Plus de réponses trouvées",
|
"status.context.more_replies_found": "Plus de réponses trouvées",
|
||||||
"status.context.retry": "Réessayer",
|
"status.context.retry": "Réessayer",
|
||||||
"status.context.show": "Montrer",
|
"status.context.show": "Montrer",
|
||||||
|
|
|
||||||
|
|
@ -869,7 +869,6 @@
|
||||||
"status.contains_quote": "Contient la citation",
|
"status.contains_quote": "Contient la citation",
|
||||||
"status.context.loading": "Chargement de réponses supplémentaires",
|
"status.context.loading": "Chargement de réponses supplémentaires",
|
||||||
"status.context.loading_error": "Impossible de charger les nouvelles réponses",
|
"status.context.loading_error": "Impossible de charger les nouvelles réponses",
|
||||||
"status.context.loading_success": "Toutes les réponses sont chargées",
|
|
||||||
"status.context.more_replies_found": "Plus de réponses trouvées",
|
"status.context.more_replies_found": "Plus de réponses trouvées",
|
||||||
"status.context.retry": "Réessayer",
|
"status.context.retry": "Réessayer",
|
||||||
"status.context.show": "Montrer",
|
"status.context.show": "Montrer",
|
||||||
|
|
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Níl aon phostáil leabharmharcaithe agat fós. Nuair a dhéanann tú leabharmharc, beidh sé le feiceáil anseo.",
|
"empty_column.bookmarked_statuses": "Níl aon phostáil leabharmharcaithe agat fós. Nuair a dhéanann tú leabharmharc, beidh sé le feiceáil anseo.",
|
||||||
"empty_column.community": "Tá an amlíne áitiúil folamh. Foilsigh rud éigin go poiblí le tús a chur le cúrsaí!",
|
"empty_column.community": "Tá an amlíne áitiúil folamh. Foilsigh rud éigin go poiblí le tús a chur le cúrsaí!",
|
||||||
"empty_column.direct": "Níl aon tagairtí príobháideacha agat fós. Nuair a sheolann tú nó a gheobhaidh tú ceann, beidh sé le feiceáil anseo.",
|
"empty_column.direct": "Níl aon tagairtí príobháideacha agat fós. Nuair a sheolann tú nó a gheobhaidh tú ceann, beidh sé le feiceáil anseo.",
|
||||||
|
"empty_column.disabled_feed": "Tá an fotha seo díchumasaithe ag riarthóirí do fhreastalaí.",
|
||||||
"empty_column.domain_blocks": "Níl aon fearainn bhactha ann go fóill.",
|
"empty_column.domain_blocks": "Níl aon fearainn bhactha ann go fóill.",
|
||||||
"empty_column.explore_statuses": "Níl rud ar bith ag treochtáil faoi láthair. Tar ar ais ar ball!",
|
"empty_column.explore_statuses": "Níl rud ar bith ag treochtáil faoi láthair. Tar ar ais ar ball!",
|
||||||
"empty_column.favourited_statuses": "Níl aon postálacha is fearr leat fós. Nuair is fearr leat ceann, beidh sé le feiceáil anseo.",
|
"empty_column.favourited_statuses": "Níl aon postálacha is fearr leat fós. Nuair is fearr leat ceann, beidh sé le feiceáil anseo.",
|
||||||
|
|
@ -753,6 +754,7 @@
|
||||||
"privacy.unlisted.short": "Poiblí ciúin",
|
"privacy.unlisted.short": "Poiblí ciúin",
|
||||||
"privacy_policy.last_updated": "Nuashonraithe {date}",
|
"privacy_policy.last_updated": "Nuashonraithe {date}",
|
||||||
"privacy_policy.title": "Polasaí príobháideachais",
|
"privacy_policy.title": "Polasaí príobháideachais",
|
||||||
|
"quote_error.edit": "Ní féidir Sleachta a chur leis agus post á chur in eagar.",
|
||||||
"quote_error.poll": "Ní cheadaítear lua le pobalbhreitheanna.",
|
"quote_error.poll": "Ní cheadaítear lua le pobalbhreitheanna.",
|
||||||
"quote_error.quote": "Ní cheadaítear ach luachan amháin ag an am.",
|
"quote_error.quote": "Ní cheadaítear ach luachan amháin ag an am.",
|
||||||
"quote_error.unauthorized": "Níl údarás agat an post seo a lua.",
|
"quote_error.unauthorized": "Níl údarás agat an post seo a lua.",
|
||||||
|
|
@ -875,7 +877,7 @@
|
||||||
"status.contains_quote": "Tá luachan ann",
|
"status.contains_quote": "Tá luachan ann",
|
||||||
"status.context.loading": "Ag lódáil tuilleadh freagraí",
|
"status.context.loading": "Ag lódáil tuilleadh freagraí",
|
||||||
"status.context.loading_error": "Níorbh fhéidir freagraí nua a lódáil",
|
"status.context.loading_error": "Níorbh fhéidir freagraí nua a lódáil",
|
||||||
"status.context.loading_success": "Luchtaithe na freagraí uile",
|
"status.context.loading_success": "Freagraí nua luchtaithe",
|
||||||
"status.context.more_replies_found": "Tuilleadh freagraí aimsithe",
|
"status.context.more_replies_found": "Tuilleadh freagraí aimsithe",
|
||||||
"status.context.retry": "Déan iarracht arís",
|
"status.context.retry": "Déan iarracht arís",
|
||||||
"status.context.show": "Taispeáin",
|
"status.context.show": "Taispeáin",
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@
|
||||||
"account.disable_notifications": "Na cuir brath thugam tuilleadh nuair a chuireas @{name} post ris",
|
"account.disable_notifications": "Na cuir brath thugam tuilleadh nuair a chuireas @{name} post ris",
|
||||||
"account.domain_blocking": "Àrainn ’ga bacadh",
|
"account.domain_blocking": "Àrainn ’ga bacadh",
|
||||||
"account.edit_profile": "Deasaich a’ phròifil",
|
"account.edit_profile": "Deasaich a’ phròifil",
|
||||||
|
"account.edit_profile_short": "Deasaich",
|
||||||
"account.enable_notifications": "Cuir brath thugam nuair a chuireas @{name} post ris",
|
"account.enable_notifications": "Cuir brath thugam nuair a chuireas @{name} post ris",
|
||||||
"account.endorse": "Brosnaich air a’ phròifil",
|
"account.endorse": "Brosnaich air a’ phròifil",
|
||||||
"account.familiar_followers_many": "’Ga leantainn le {name1}, {name2}, and {othersCount, plural, one {# eile air a bheil thu eòlach} other {# eile air a bheil thu eòlach}}",
|
"account.familiar_followers_many": "’Ga leantainn le {name1}, {name2}, and {othersCount, plural, one {# eile air a bheil thu eòlach} other {# eile air a bheil thu eòlach}}",
|
||||||
|
|
@ -40,6 +41,11 @@
|
||||||
"account.featured_tags.last_status_never": "Gun phost",
|
"account.featured_tags.last_status_never": "Gun phost",
|
||||||
"account.follow": "Lean",
|
"account.follow": "Lean",
|
||||||
"account.follow_back": "Lean air ais",
|
"account.follow_back": "Lean air ais",
|
||||||
|
"account.follow_back_short": "Lean air ais",
|
||||||
|
"account.follow_request": "Iarr leantainn",
|
||||||
|
"account.follow_request_cancel": "Sguir dhen iarrtas",
|
||||||
|
"account.follow_request_cancel_short": "Sguir dheth",
|
||||||
|
"account.follow_request_short": "Iarr",
|
||||||
"account.followers": "Luchd-leantainn",
|
"account.followers": "Luchd-leantainn",
|
||||||
"account.followers.empty": "Chan eil neach sam bith a’ leantainn air a’ chleachdaiche seo fhathast.",
|
"account.followers.empty": "Chan eil neach sam bith a’ leantainn air a’ chleachdaiche seo fhathast.",
|
||||||
"account.followers_counter": "{count, plural, one {{counter} neach-leantainn} other {{counter} luchd-leantainn}}",
|
"account.followers_counter": "{count, plural, one {{counter} neach-leantainn} other {{counter} luchd-leantainn}}",
|
||||||
|
|
@ -125,7 +131,7 @@
|
||||||
"annual_report.summary.new_posts.new_posts": "postaichean ùra",
|
"annual_report.summary.new_posts.new_posts": "postaichean ùra",
|
||||||
"annual_report.summary.percentile.text": "<topLabel>Tha thu am measg</topLabel><percentage></percentage><bottomLabel>dhen luchd-cleachdaidh as cliùitiche air {domain}.</bottomLabel>",
|
"annual_report.summary.percentile.text": "<topLabel>Tha thu am measg</topLabel><percentage></percentage><bottomLabel>dhen luchd-cleachdaidh as cliùitiche air {domain}.</bottomLabel>",
|
||||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Ainmeil ’nad latha ’s ’nad linn.",
|
"annual_report.summary.percentile.we_wont_tell_bernie": "Ainmeil ’nad latha ’s ’nad linn.",
|
||||||
"annual_report.summary.thanks": "Mòran taing airson conaltradh air Mastodon.",
|
"annual_report.summary.thanks": "Mòran taing airson conaltradh air Mastodon!",
|
||||||
"attachments_list.unprocessed": "(gun phròiseasadh)",
|
"attachments_list.unprocessed": "(gun phròiseasadh)",
|
||||||
"audio.hide": "Falaich an fhuaim",
|
"audio.hide": "Falaich an fhuaim",
|
||||||
"block_modal.remote_users_caveat": "Iarraidh sinn air an fhrithealaiche {domain} gun gèill iad ri do cho-dhùnadh. Gidheadh, chan eil barantas gun gèill iad on a làimhsicheas cuid a fhrithealaichean bacaidhean air dòigh eadar-dhealaichte. Dh’fhaoidte gum faic daoine gun chlàradh a-steach na postaichean poblach agad fhathast.",
|
"block_modal.remote_users_caveat": "Iarraidh sinn air an fhrithealaiche {domain} gun gèill iad ri do cho-dhùnadh. Gidheadh, chan eil barantas gun gèill iad on a làimhsicheas cuid a fhrithealaichean bacaidhean air dòigh eadar-dhealaichte. Dh’fhaoidte gum faic daoine gun chlàradh a-steach na postaichean poblach agad fhathast.",
|
||||||
|
|
@ -251,7 +257,12 @@
|
||||||
"confirmations.revoke_quote.confirm": "Thoir am post air falbh",
|
"confirmations.revoke_quote.confirm": "Thoir am post air falbh",
|
||||||
"confirmations.revoke_quote.message": "Cha ghabh seo a neo-dhèanamh.",
|
"confirmations.revoke_quote.message": "Cha ghabh seo a neo-dhèanamh.",
|
||||||
"confirmations.revoke_quote.title": "A bheil thu airson am post a thoirt air falbh?",
|
"confirmations.revoke_quote.title": "A bheil thu airson am post a thoirt air falbh?",
|
||||||
|
"confirmations.unblock.confirm": "Dì-bhac",
|
||||||
|
"confirmations.unblock.title": "A bheil thu airson {name} a dhì-bhacadh?",
|
||||||
"confirmations.unfollow.confirm": "Na lean tuilleadh",
|
"confirmations.unfollow.confirm": "Na lean tuilleadh",
|
||||||
|
"confirmations.unfollow.title": "A bheil thu airson sgur de {name} a leantainn?",
|
||||||
|
"confirmations.withdraw_request.confirm": "Cuir d’ iarrtas dhan dàrna taobh",
|
||||||
|
"confirmations.withdraw_request.title": "A bheil thu airson d’ iarrtas gus {name} a leantainn a chur dhan dàrna taobh?",
|
||||||
"content_warning.hide": "Falaich am post",
|
"content_warning.hide": "Falaich am post",
|
||||||
"content_warning.show": "Seall e co-dhiù",
|
"content_warning.show": "Seall e co-dhiù",
|
||||||
"content_warning.show_more": "Seall barrachd dheth",
|
"content_warning.show_more": "Seall barrachd dheth",
|
||||||
|
|
@ -734,14 +745,15 @@
|
||||||
"privacy.private.short": "Luchd-leantainn",
|
"privacy.private.short": "Luchd-leantainn",
|
||||||
"privacy.public.long": "Duine sam bith taobh a-staigh no a-muigh Mhastodon",
|
"privacy.public.long": "Duine sam bith taobh a-staigh no a-muigh Mhastodon",
|
||||||
"privacy.public.short": "Poblach",
|
"privacy.public.short": "Poblach",
|
||||||
"privacy.quote.anyone": "{visibility}, faodaidh neach sam bith a luaidh",
|
"privacy.quote.anyone": "{visibility}, luaidhidh neach sam bith e",
|
||||||
"privacy.quote.disabled": "{visibility}, luaidhean à comas",
|
"privacy.quote.disabled": "{visibility}, luaidh à comas",
|
||||||
"privacy.quote.limited": "{visibility}, luaidhean cuingichte",
|
"privacy.quote.limited": "{visibility}, luaidh cuingichte",
|
||||||
"privacy.unlisted.additional": "Tha seo coltach ris an fhaicsinneachd phoblach ach cha nochd am post air loidhnichean-ama an t-saoghail phoblaich, nan tagaichean hais no an rùrachaidh no ann an toraidhean luirg Mhastodon fiù ’s ma thug thu ro-aonta airson sin seachad.",
|
"privacy.unlisted.additional": "Tha seo coltach ris an fhaicsinneachd phoblach ach cha nochd am post air loidhnichean-ama an t-saoghail phoblaich, nan tagaichean hais no an rùrachaidh no ann an toraidhean luirg Mhastodon fiù ’s ma thug thu ro-aonta airson sin seachad.",
|
||||||
"privacy.unlisted.long": "Falaichte o na toraidhean-luirg, na treandaichean ’s na loichnichean-ama poblach",
|
"privacy.unlisted.long": "Falaichte o na toraidhean-luirg, na treandaichean ’s na loichnichean-ama poblach",
|
||||||
"privacy.unlisted.short": "Poblach ach sàmhach",
|
"privacy.unlisted.short": "Poblach ach sàmhach",
|
||||||
"privacy_policy.last_updated": "An t-ùrachadh mu dheireadh {date}",
|
"privacy_policy.last_updated": "An t-ùrachadh mu dheireadh {date}",
|
||||||
"privacy_policy.title": "Poileasaidh prìobhaideachd",
|
"privacy_policy.title": "Poileasaidh prìobhaideachd",
|
||||||
|
"quote_error.edit": "Chan urrainn dhut luaidh a chur ris nuair a bhios tu ri deasachadh puist.",
|
||||||
"quote_error.poll": "Chan fhaod thu luaidh a chur an cois cunntais-bheachd.",
|
"quote_error.poll": "Chan fhaod thu luaidh a chur an cois cunntais-bheachd.",
|
||||||
"quote_error.quote": "Chan eil taic ach ri aon luaidh aig an aon àm.",
|
"quote_error.quote": "Chan eil taic ach ri aon luaidh aig an aon àm.",
|
||||||
"quote_error.unauthorized": "Chan fhaod thu am post seo a luaidh.",
|
"quote_error.unauthorized": "Chan fhaod thu am post seo a luaidh.",
|
||||||
|
|
@ -861,6 +873,13 @@
|
||||||
"status.cancel_reblog_private": "Na brosnaich tuilleadh",
|
"status.cancel_reblog_private": "Na brosnaich tuilleadh",
|
||||||
"status.cannot_quote": "Chan fhaod thu am post seo a luaidh",
|
"status.cannot_quote": "Chan fhaod thu am post seo a luaidh",
|
||||||
"status.cannot_reblog": "Cha ghabh am post seo brosnachadh",
|
"status.cannot_reblog": "Cha ghabh am post seo brosnachadh",
|
||||||
|
"status.contains_quote": "Tha luaidh na bhroinn",
|
||||||
|
"status.context.loading": "A’ luchdadh barrachd fhreagairtean",
|
||||||
|
"status.context.loading_error": "Cha b’ urrainn dhuinn nam freagairtean ùra a luchdadh",
|
||||||
|
"status.context.loading_success": "Chaidh na freagairtean ùra a luchdadh",
|
||||||
|
"status.context.more_replies_found": "Fhuair sinn lorg air barrachd fhreagairtean",
|
||||||
|
"status.context.retry": "Feuch ris a-rithist",
|
||||||
|
"status.context.show": "Seall",
|
||||||
"status.continued_thread": "Pàirt de shnàithlean",
|
"status.continued_thread": "Pàirt de shnàithlean",
|
||||||
"status.copy": "Dèan lethbhreac dhen cheangal dhan phost",
|
"status.copy": "Dèan lethbhreac dhen cheangal dhan phost",
|
||||||
"status.delete": "Sguab às",
|
"status.delete": "Sguab às",
|
||||||
|
|
@ -890,17 +909,22 @@
|
||||||
"status.quote": "Luaidh",
|
"status.quote": "Luaidh",
|
||||||
"status.quote.cancel": "Sguir dhen luaidh",
|
"status.quote.cancel": "Sguir dhen luaidh",
|
||||||
"status.quote_error.filtered": "Falaichte le criathrag a th’ agad",
|
"status.quote_error.filtered": "Falaichte le criathrag a th’ agad",
|
||||||
|
"status.quote_error.limited_account_hint.action": "Seall e co-dhiù",
|
||||||
|
"status.quote_error.limited_account_hint.title": "Chaidh an cunntas seo fhalach le maoir {domain}.",
|
||||||
"status.quote_error.not_available": "Chan eil am post ri fhaighinn",
|
"status.quote_error.not_available": "Chan eil am post ri fhaighinn",
|
||||||
"status.quote_error.pending_approval": "Cha deach dèiligeadh ris a’ phost fhathast",
|
"status.quote_error.pending_approval": "Cha deach dèiligeadh ris a’ phost fhathast",
|
||||||
"status.quote_error.pending_approval_popout.body": "Air Mastodon, ’s urrainn dhut stiùireadh am faod cuideigin do luaidh gus nach fhaod. Tha am post seo a’ feitheamh air aonta an ùghdair thùsail.",
|
"status.quote_error.pending_approval_popout.body": "Air Mastodon, ’s urrainn dhut stiùireadh am faod cuideigin do luaidh gus nach fhaod. Tha am post seo a’ feitheamh air aonta an ùghdair thùsail.",
|
||||||
"status.quote_error.revoked": "Chaidh am post a thoirt air falbh leis an ùghdar",
|
"status.quote_error.revoked": "Chaidh am post a thoirt air falbh leis an ùghdar",
|
||||||
"status.quote_followers_only": "Chan fhaod ach luchd-leantainn am post seo a luaidh",
|
"status.quote_followers_only": "Chan fhaod ach luchd-leantainn am post seo a luaidh",
|
||||||
"status.quote_manual_review": "Nì an t-ùghdar lèirmheas air a làimh",
|
"status.quote_manual_review": "Nì an t-ùghdar lèirmheas air a làimh",
|
||||||
|
"status.quote_noun": "Luaidh",
|
||||||
"status.quote_policy_change": "Atharraich cò dh’fhaodas luaidh",
|
"status.quote_policy_change": "Atharraich cò dh’fhaodas luaidh",
|
||||||
"status.quote_post_author": "Luaidh air post le @{name}",
|
"status.quote_post_author": "Luaidh air post le @{name}",
|
||||||
"status.quote_private": "Chan fhaodar postaichean prìobhaideach a luaidh",
|
"status.quote_private": "Chan fhaodar postaichean prìobhaideach a luaidh",
|
||||||
"status.quotes": "{count, plural, one {luaidh} two {luaidh} few {luaidhean} other {luaidh}}",
|
"status.quotes": "{count, plural, one {luaidh} two {luaidh} few {luaidhean} other {luaidh}}",
|
||||||
"status.quotes.empty": "Chan deach am post seo a luaidh le duine sam bith fhathast. Nuair a luaidheas cuideigin e, nochdaidh iad an-seo.",
|
"status.quotes.empty": "Chan deach am post seo a luaidh le duine sam bith fhathast. Nuair a luaidheas cuideigin e, nochdaidh iad an-seo.",
|
||||||
|
"status.quotes.local_other_disclaimer": "Cha tèid luaidhean a dhiùilt an ùghdar a shealltainn.",
|
||||||
|
"status.quotes.remote_other_disclaimer": "Cha dèid ach luaidhean o {domain} a shealltainn an-seo le cinnt. Cha dèid luaidhean a dhiùilt an ùghdar a shealltainn.",
|
||||||
"status.read_more": "Leugh an còrr",
|
"status.read_more": "Leugh an còrr",
|
||||||
"status.reblog": "Brosnaich",
|
"status.reblog": "Brosnaich",
|
||||||
"status.reblog_or_quote": "Brosnaich no luaidh",
|
"status.reblog_or_quote": "Brosnaich no luaidh",
|
||||||
|
|
@ -987,11 +1011,11 @@
|
||||||
"visibility_modal.helper.privacy_private_self_quote": "Chan fhaodar fèin-luaidhean air postaichean prìobhaideach a dhèanamh poblach.",
|
"visibility_modal.helper.privacy_private_self_quote": "Chan fhaodar fèin-luaidhean air postaichean prìobhaideach a dhèanamh poblach.",
|
||||||
"visibility_modal.helper.private_quoting": "Chan urrainn do chàch postaichean dhan luchd-leantainn a-mhàin a chaidh a sgrìobhadh le Mastodon a luaidh.",
|
"visibility_modal.helper.private_quoting": "Chan urrainn do chàch postaichean dhan luchd-leantainn a-mhàin a chaidh a sgrìobhadh le Mastodon a luaidh.",
|
||||||
"visibility_modal.helper.unlisted_quoting": "Nuair a luaidheas daoine thu, thèid am post aca-san fhalach o loidhnichean-ama nan treandaichean.",
|
"visibility_modal.helper.unlisted_quoting": "Nuair a luaidheas daoine thu, thèid am post aca-san fhalach o loidhnichean-ama nan treandaichean.",
|
||||||
"visibility_modal.instructions": "Stiùirich cò dh’fhaodas eadar-ghabhahil leis a’ phost seo. ’S urrainn dhut do roghainnean airson nam postaichean ri teachd a thaghadh aig <link>Roghainnean > Bun-roghainnean a’ phostaidh</link>",
|
"visibility_modal.instructions": "Stiùirich cò dh’fhaodas eadar-ghabhahil leis a’ phost seo. ’S urrainn dhut do roghainnean airson nam postaichean ri teachd a thaghadh aig <link>Roghainnean > Bun-roghainnean a’ phostaidh</link>.",
|
||||||
"visibility_modal.privacy_label": "Faicsinneachd",
|
"visibility_modal.privacy_label": "Faicsinneachd",
|
||||||
"visibility_modal.quote_followers": "Luchd-leantainn a-mhàin",
|
"visibility_modal.quote_followers": "Luchd-leantainn a-mhàin",
|
||||||
"visibility_modal.quote_label": "Cò dh’fhaodas luaidh",
|
"visibility_modal.quote_label": "Cò dh’fhaodas luaidh",
|
||||||
"visibility_modal.quote_nobody": "Mi fhìn a-mhàin",
|
"visibility_modal.quote_nobody": "Mi fhìn a-mhàin",
|
||||||
"visibility_modal.quote_public": "Duine sam bith",
|
"visibility_modal.quote_public": "Neach sam bith",
|
||||||
"visibility_modal.save": "Sàbhail"
|
"visibility_modal.save": "Sàbhail"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Aínda non marcaches ningunha publicación. Cando o fagas, aparecerán aquí.",
|
"empty_column.bookmarked_statuses": "Aínda non marcaches ningunha publicación. Cando o fagas, aparecerán aquí.",
|
||||||
"empty_column.community": "A cronoloxía local está baleira. Escribe algo de xeito público para espallalo!",
|
"empty_column.community": "A cronoloxía local está baleira. Escribe algo de xeito público para espallalo!",
|
||||||
"empty_column.direct": "Aínda non tes mencións privadas. Cando envíes ou recibas unha, aparecerá aquí.",
|
"empty_column.direct": "Aínda non tes mencións privadas. Cando envíes ou recibas unha, aparecerá aquí.",
|
||||||
|
"empty_column.disabled_feed": "A administración do teu servidor desactivou esta canle.",
|
||||||
"empty_column.domain_blocks": "Aínda non hai dominios agochados.",
|
"empty_column.domain_blocks": "Aínda non hai dominios agochados.",
|
||||||
"empty_column.explore_statuses": "Non hai temas en voga. Volve máis tarde!",
|
"empty_column.explore_statuses": "Non hai temas en voga. Volve máis tarde!",
|
||||||
"empty_column.favourited_statuses": "Aínda non tes publicacións favoritas. Cando favorezas unha, aparecerá aquí.",
|
"empty_column.favourited_statuses": "Aínda non tes publicacións favoritas. Cando favorezas unha, aparecerá aquí.",
|
||||||
|
|
@ -876,7 +877,7 @@
|
||||||
"status.contains_quote": "Contén unha cita",
|
"status.contains_quote": "Contén unha cita",
|
||||||
"status.context.loading": "Cargando máis respostas",
|
"status.context.loading": "Cargando máis respostas",
|
||||||
"status.context.loading_error": "Non se puideron mostrar novas respostas",
|
"status.context.loading_error": "Non se puideron mostrar novas respostas",
|
||||||
"status.context.loading_success": "Móstranse todas as respostas",
|
"status.context.loading_success": "Móstranse novas respostas",
|
||||||
"status.context.more_replies_found": "Existen máis respostas",
|
"status.context.more_replies_found": "Existen máis respostas",
|
||||||
"status.context.retry": "Volver tentar",
|
"status.context.retry": "Volver tentar",
|
||||||
"status.context.show": "Mostrar",
|
"status.context.show": "Mostrar",
|
||||||
|
|
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "אין עדיין הודעות שחיבבת. כשתחבב את הראשונה, היא תופיע כאן.",
|
"empty_column.bookmarked_statuses": "אין עדיין הודעות שחיבבת. כשתחבב את הראשונה, היא תופיע כאן.",
|
||||||
"empty_column.community": "פיד השרת המקומי ריק. יש לפרסם משהו כדי שדברים יתרחילו להתגלגל!",
|
"empty_column.community": "פיד השרת המקומי ריק. יש לפרסם משהו כדי שדברים יתרחילו להתגלגל!",
|
||||||
"empty_column.direct": "אין לך שום הודעות פרטיות עדיין. כשתשלחו או תקבלו אחת, היא תופיע כאן.",
|
"empty_column.direct": "אין לך שום הודעות פרטיות עדיין. כשתשלחו או תקבלו אחת, היא תופיע כאן.",
|
||||||
|
"empty_column.disabled_feed": "פיד זה נחסם לשימוש על ידי מנהלי השרת שלך.",
|
||||||
"empty_column.domain_blocks": "אין עדיין קהילות מוסתרות.",
|
"empty_column.domain_blocks": "אין עדיין קהילות מוסתרות.",
|
||||||
"empty_column.explore_statuses": "אין נושאים חמים כרגע. אולי אחר כך!",
|
"empty_column.explore_statuses": "אין נושאים חמים כרגע. אולי אחר כך!",
|
||||||
"empty_column.favourited_statuses": "אין עדיין הודעות שחיבבת. כשתחבב/י את הראשונה, היא תופיע כאן.",
|
"empty_column.favourited_statuses": "אין עדיין הודעות שחיבבת. כשתחבב/י את הראשונה, היא תופיע כאן.",
|
||||||
|
|
@ -876,7 +877,7 @@
|
||||||
"status.contains_quote": "הודעה מכילה ציטוט",
|
"status.contains_quote": "הודעה מכילה ציטוט",
|
||||||
"status.context.loading": "נטענות תשובות נוספות",
|
"status.context.loading": "נטענות תשובות נוספות",
|
||||||
"status.context.loading_error": "טעינת תשובות נוספות נכשלה",
|
"status.context.loading_error": "טעינת תשובות נוספות נכשלה",
|
||||||
"status.context.loading_success": "כל התשובות נטענו",
|
"status.context.loading_success": "תשובות חדשות נטענו",
|
||||||
"status.context.more_replies_found": "תשובות נוספות נמצאו",
|
"status.context.more_replies_found": "תשובות נוספות נמצאו",
|
||||||
"status.context.retry": "נסה שוב",
|
"status.context.retry": "נסה שוב",
|
||||||
"status.context.show": "הצג",
|
"status.context.show": "הצג",
|
||||||
|
|
@ -919,7 +920,7 @@
|
||||||
"status.quote_manual_review": "מחבר.ת ההודעה יחזרו אליך אחרי בדיקה",
|
"status.quote_manual_review": "מחבר.ת ההודעה יחזרו אליך אחרי בדיקה",
|
||||||
"status.quote_noun": "ציטוט",
|
"status.quote_noun": "ציטוט",
|
||||||
"status.quote_policy_change": "הגדרת הרשאה לציטוט הודעותיך",
|
"status.quote_policy_change": "הגדרת הרשאה לציטוט הודעותיך",
|
||||||
"status.quote_post_author": "ההודעה צוטטה על ידי @{name}",
|
"status.quote_post_author": "ההודעה היא ציטוט של @{name}",
|
||||||
"status.quote_private": "הודעות פרטיות לא ניתנות לציטוט",
|
"status.quote_private": "הודעות פרטיות לא ניתנות לציטוט",
|
||||||
"status.quotes": "{count, plural,one {ציטוט}other {ציטוטים}}",
|
"status.quotes": "{count, plural,one {ציטוט}other {ציטוטים}}",
|
||||||
"status.quotes.empty": "עוד לא ציטטו את ההודעה הזו. כאשר זה יקרה, הציטוטים יופיעו כאן.",
|
"status.quotes.empty": "עוד לא ציטטו את ההודעה הזו. כאשר זה יקרה, הציטוטים יופיעו כאן.",
|
||||||
|
|
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Még nincs egyetlen könyvjelzőzött bejegyzésed sem. Ha könyvjelzőzöl egyet, itt fog megjelenni.",
|
"empty_column.bookmarked_statuses": "Még nincs egyetlen könyvjelzőzött bejegyzésed sem. Ha könyvjelzőzöl egyet, itt fog megjelenni.",
|
||||||
"empty_column.community": "A helyi idővonal üres. Tégy közzé valamit nyilvánosan, hogy elindítsd az eseményeket!",
|
"empty_column.community": "A helyi idővonal üres. Tégy közzé valamit nyilvánosan, hogy elindítsd az eseményeket!",
|
||||||
"empty_column.direct": "Még nincs egy személyes említésed sem. Küldéskor vagy fogadáskor itt fognak megjelenni.",
|
"empty_column.direct": "Még nincs egy személyes említésed sem. Küldéskor vagy fogadáskor itt fognak megjelenni.",
|
||||||
|
"empty_column.disabled_feed": "A kiszolgálód rendszergazdái letiltották ezt a hírfolyamot.",
|
||||||
"empty_column.domain_blocks": "Még nem lett letiltva egyetlen domain sem.",
|
"empty_column.domain_blocks": "Még nem lett letiltva egyetlen domain sem.",
|
||||||
"empty_column.explore_statuses": "Jelenleg semmi sem felkapott. Nézz vissza később!",
|
"empty_column.explore_statuses": "Jelenleg semmi sem felkapott. Nézz vissza később!",
|
||||||
"empty_column.favourited_statuses": "Még nincs egyetlen kedvenc bejegyzésed sem. Ha kedvencnek jelölsz egyet, itt fog megjelenni.",
|
"empty_column.favourited_statuses": "Még nincs egyetlen kedvenc bejegyzésed sem. Ha kedvencnek jelölsz egyet, itt fog megjelenni.",
|
||||||
|
|
@ -876,7 +877,7 @@
|
||||||
"status.contains_quote": "Idézést tartalmaz",
|
"status.contains_quote": "Idézést tartalmaz",
|
||||||
"status.context.loading": "Több válasz betöltése",
|
"status.context.loading": "Több válasz betöltése",
|
||||||
"status.context.loading_error": "Az új válaszok nem tölthetőek be",
|
"status.context.loading_error": "Az új válaszok nem tölthetőek be",
|
||||||
"status.context.loading_success": "Összes válasz betöltve",
|
"status.context.loading_success": "Új válaszok betöltve",
|
||||||
"status.context.more_replies_found": "Több válasz található",
|
"status.context.more_replies_found": "Több válasz található",
|
||||||
"status.context.retry": "Újra",
|
"status.context.retry": "Újra",
|
||||||
"status.context.show": "Megjelenítés",
|
"status.context.show": "Megjelenítés",
|
||||||
|
|
@ -914,7 +915,7 @@
|
||||||
"status.quote_error.not_available": "A bejegyzés nem érhető el",
|
"status.quote_error.not_available": "A bejegyzés nem érhető el",
|
||||||
"status.quote_error.pending_approval": "A bejegyzés függőben van",
|
"status.quote_error.pending_approval": "A bejegyzés függőben van",
|
||||||
"status.quote_error.pending_approval_popout.body": "A Mastodonon te mondod meg, hogy valaki idézhet-e. Ez a bejegyzés addig függőben marad, amíg az eredeti szerző nem engedélyezi azt.",
|
"status.quote_error.pending_approval_popout.body": "A Mastodonon te mondod meg, hogy valaki idézhet-e. Ez a bejegyzés addig függőben marad, amíg az eredeti szerző nem engedélyezi azt.",
|
||||||
"status.quote_error.revoked": "A szerző eltávolítta a bejegyzést",
|
"status.quote_error.revoked": "A szerző eltávolította a bejegyzést",
|
||||||
"status.quote_followers_only": "Csak a követők idézhetik ezt a bejegyzést",
|
"status.quote_followers_only": "Csak a követők idézhetik ezt a bejegyzést",
|
||||||
"status.quote_manual_review": "A szerző kézileg fogja jóváhagyni",
|
"status.quote_manual_review": "A szerző kézileg fogja jóváhagyni",
|
||||||
"status.quote_noun": "Idézés",
|
"status.quote_noun": "Idézés",
|
||||||
|
|
|
||||||
|
|
@ -172,7 +172,7 @@
|
||||||
"column.domain_blocks": "Dominios blocate",
|
"column.domain_blocks": "Dominios blocate",
|
||||||
"column.edit_list": "Modificar lista",
|
"column.edit_list": "Modificar lista",
|
||||||
"column.favourites": "Favorites",
|
"column.favourites": "Favorites",
|
||||||
"column.firehose": "Fluxos in directo",
|
"column.firehose": "Fluxos in vivo",
|
||||||
"column.follow_requests": "Requestas de sequimento",
|
"column.follow_requests": "Requestas de sequimento",
|
||||||
"column.home": "Initio",
|
"column.home": "Initio",
|
||||||
"column.list_members": "Gerer le membros del lista",
|
"column.list_members": "Gerer le membros del lista",
|
||||||
|
|
@ -257,7 +257,12 @@
|
||||||
"confirmations.revoke_quote.confirm": "Remover message",
|
"confirmations.revoke_quote.confirm": "Remover message",
|
||||||
"confirmations.revoke_quote.message": "Iste action non pote esser disfacite.",
|
"confirmations.revoke_quote.message": "Iste action non pote esser disfacite.",
|
||||||
"confirmations.revoke_quote.title": "Remover message?",
|
"confirmations.revoke_quote.title": "Remover message?",
|
||||||
|
"confirmations.unblock.confirm": "Disblocar",
|
||||||
|
"confirmations.unblock.title": "Disblocar {name}?",
|
||||||
"confirmations.unfollow.confirm": "Non plus sequer",
|
"confirmations.unfollow.confirm": "Non plus sequer",
|
||||||
|
"confirmations.unfollow.title": "Cessar de sequer {name}?",
|
||||||
|
"confirmations.withdraw_request.confirm": "Retirar requesta",
|
||||||
|
"confirmations.withdraw_request.title": "Retirar le requesta de sequer {name}?",
|
||||||
"content_warning.hide": "Celar le message",
|
"content_warning.hide": "Celar le message",
|
||||||
"content_warning.show": "Monstrar in omne caso",
|
"content_warning.show": "Monstrar in omne caso",
|
||||||
"content_warning.show_more": "Monstrar plus",
|
"content_warning.show_more": "Monstrar plus",
|
||||||
|
|
@ -328,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Tu non ha ancora messages in marcapaginas. Quando tu adde un message al marcapaginas, illo apparera hic.",
|
"empty_column.bookmarked_statuses": "Tu non ha ancora messages in marcapaginas. Quando tu adde un message al marcapaginas, illo apparera hic.",
|
||||||
"empty_column.community": "Le chronologia local es vacue. Scribe qualcosa public pro poner le cosas in marcha!",
|
"empty_column.community": "Le chronologia local es vacue. Scribe qualcosa public pro poner le cosas in marcha!",
|
||||||
"empty_column.direct": "Tu non ha ancora mentiones private. Quando tu invia o recipe un mention, illo apparera hic.",
|
"empty_column.direct": "Tu non ha ancora mentiones private. Quando tu invia o recipe un mention, illo apparera hic.",
|
||||||
|
"empty_column.disabled_feed": "Iste canal ha essite disactivate per le adminsistratores de tu servitor.",
|
||||||
"empty_column.domain_blocks": "Il non ha dominios blocate ancora.",
|
"empty_column.domain_blocks": "Il non ha dominios blocate ancora.",
|
||||||
"empty_column.explore_statuses": "Il non ha tendentias in iste momento. Reveni plus tarde!",
|
"empty_column.explore_statuses": "Il non ha tendentias in iste momento. Reveni plus tarde!",
|
||||||
"empty_column.favourited_statuses": "Tu non ha alcun message favorite ancora. Quando tu marca un message como favorite, illo apparera hic.",
|
"empty_column.favourited_statuses": "Tu non ha alcun message favorite ancora. Quando tu marca un message como favorite, illo apparera hic.",
|
||||||
|
|
@ -455,7 +461,7 @@
|
||||||
"ignore_notifications_modal.not_following_title": "Ignorar notificationes de personas que tu non seque?",
|
"ignore_notifications_modal.not_following_title": "Ignorar notificationes de personas que tu non seque?",
|
||||||
"ignore_notifications_modal.private_mentions_title": "Ignorar notificationes de mentiones private non requestate?",
|
"ignore_notifications_modal.private_mentions_title": "Ignorar notificationes de mentiones private non requestate?",
|
||||||
"info_button.label": "Adjuta",
|
"info_button.label": "Adjuta",
|
||||||
"info_button.what_is_alt_text": "<h1>Que es texto alternative?</h1><p>Le texto alternative forni descriptiones de imagines a personas con impedimentos visual, con connexiones lente, o qui cerca contexto additional.</p><p>Tu pote meliorar le accessibilitate e le comprension pro totes scribente un texto alternative clar, concise e objective.</p><ul><li>Captura le elementos importante</li><li>Summarisa texto in imagines</li><li>Usa le structura de phrase normal</li><li>Evita information redundante</li><li>In figuras complexe (como diagrammas o mappas), concentra te sur le tendentias e punctos clave</li></ul>",
|
"info_button.what_is_alt_text": "<h1>Que es texto alternative?</h1><p>Le texto alternative forni descriptiones de imagines a personas con impedimentos visual, con connexiones lente a internet, o qui cerca contexto supplementari.</p><p>Tu pote meliorar le accessibilitate e le comprension pro totes si tu scribe un texto alternative clar, concise e objective.</p><ul><li>Captura le elementos importante</li><li>Summarisa texto in imagines</li><li>Usa un structura conventional de phrases</li><li>Evita information redundante</li><li>In figuras complexe (como diagrammas o mappas), concentra te sur le tendentias e punctos clave</li></ul>",
|
||||||
"interaction_modal.action": "Pro interager con le message de {name}, tu debe acceder a tu conto sur le servitor Mastodon que tu usa.",
|
"interaction_modal.action": "Pro interager con le message de {name}, tu debe acceder a tu conto sur le servitor Mastodon que tu usa.",
|
||||||
"interaction_modal.go": "Revenir",
|
"interaction_modal.go": "Revenir",
|
||||||
"interaction_modal.no_account_yet": "Tu non ha ancora un conto?",
|
"interaction_modal.no_account_yet": "Tu non ha ancora un conto?",
|
||||||
|
|
@ -569,8 +575,8 @@
|
||||||
"navigation_bar.follows_and_followers": "Sequites e sequitores",
|
"navigation_bar.follows_and_followers": "Sequites e sequitores",
|
||||||
"navigation_bar.import_export": "Importar e exportar",
|
"navigation_bar.import_export": "Importar e exportar",
|
||||||
"navigation_bar.lists": "Listas",
|
"navigation_bar.lists": "Listas",
|
||||||
"navigation_bar.live_feed_local": "Canal in directo (local)",
|
"navigation_bar.live_feed_local": "Canal in vivo (local)",
|
||||||
"navigation_bar.live_feed_public": "Canal in directo (public)",
|
"navigation_bar.live_feed_public": "Canal in vivo (public)",
|
||||||
"navigation_bar.logout": "Clauder session",
|
"navigation_bar.logout": "Clauder session",
|
||||||
"navigation_bar.moderation": "Moderation",
|
"navigation_bar.moderation": "Moderation",
|
||||||
"navigation_bar.more": "Plus",
|
"navigation_bar.more": "Plus",
|
||||||
|
|
@ -743,11 +749,12 @@
|
||||||
"privacy.quote.anyone": "{visibility}, omnes pote citar",
|
"privacy.quote.anyone": "{visibility}, omnes pote citar",
|
||||||
"privacy.quote.disabled": "{visibility}, citation disactivate",
|
"privacy.quote.disabled": "{visibility}, citation disactivate",
|
||||||
"privacy.quote.limited": "{visibility}, citation limitate",
|
"privacy.quote.limited": "{visibility}, citation limitate",
|
||||||
"privacy.unlisted.additional": "Isto es exactemente como public, excepte que le message non apparera in fluxos in directo, in hashtags, in Explorar, o in le recerca de Mastodon, mesmo si tu ha optate pro render tote le conto discoperibile.",
|
"privacy.unlisted.additional": "Isto es exactemente como public, excepte que le message non apparera in fluxos in vivo, in hashtags, in Explorar, o in le recerca de Mastodon, mesmo si tu ha optate pro render tote le conto discoperibile.",
|
||||||
"privacy.unlisted.long": "Non apparera in le resultatos de recerca, tendentias e chronologias public de Mastodon",
|
"privacy.unlisted.long": "Non apparera in le resultatos de recerca, tendentias e chronologias public de Mastodon",
|
||||||
"privacy.unlisted.short": "Public, non listate",
|
"privacy.unlisted.short": "Public, non listate",
|
||||||
"privacy_policy.last_updated": "Ultime actualisation {date}",
|
"privacy_policy.last_updated": "Ultime actualisation {date}",
|
||||||
"privacy_policy.title": "Politica de confidentialitate",
|
"privacy_policy.title": "Politica de confidentialitate",
|
||||||
|
"quote_error.edit": "Non es possibile adder citationes quando se modifica un message.",
|
||||||
"quote_error.poll": "Non es permittite citar sondages.",
|
"quote_error.poll": "Non es permittite citar sondages.",
|
||||||
"quote_error.quote": "Solmente un citation al vice es permittite.",
|
"quote_error.quote": "Solmente un citation al vice es permittite.",
|
||||||
"quote_error.unauthorized": "Tu non es autorisate a citar iste message.",
|
"quote_error.unauthorized": "Tu non es autorisate a citar iste message.",
|
||||||
|
|
@ -870,7 +877,7 @@
|
||||||
"status.contains_quote": "Contine un citation",
|
"status.contains_quote": "Contine un citation",
|
||||||
"status.context.loading": "Cargante plus responsas",
|
"status.context.loading": "Cargante plus responsas",
|
||||||
"status.context.loading_error": "Non poteva cargar nove responsas",
|
"status.context.loading_error": "Non poteva cargar nove responsas",
|
||||||
"status.context.loading_success": "Tote le responsas cargate",
|
"status.context.loading_success": "Nove responsas cargate",
|
||||||
"status.context.more_replies_found": "Plus responsas trovate",
|
"status.context.more_replies_found": "Plus responsas trovate",
|
||||||
"status.context.retry": "Tentar de novo",
|
"status.context.retry": "Tentar de novo",
|
||||||
"status.context.show": "Monstrar",
|
"status.context.show": "Monstrar",
|
||||||
|
|
@ -917,6 +924,8 @@
|
||||||
"status.quote_private": "Le messages private non pote esser citate",
|
"status.quote_private": "Le messages private non pote esser citate",
|
||||||
"status.quotes": "{count, plural, one {citation} other {citationes}}",
|
"status.quotes": "{count, plural, one {citation} other {citationes}}",
|
||||||
"status.quotes.empty": "Necuno ha ancora citate iste message. Quando alcuno lo face, illo apparera hic.",
|
"status.quotes.empty": "Necuno ha ancora citate iste message. Quando alcuno lo face, illo apparera hic.",
|
||||||
|
"status.quotes.local_other_disclaimer": "Le citationes rejectate per le autor non essera monstrate.",
|
||||||
|
"status.quotes.remote_other_disclaimer": "Solmente le citationes de {domain} se garanti de esser monstrate hic. Citationes rejectate per le autor non essera monstrate.",
|
||||||
"status.read_more": "Leger plus",
|
"status.read_more": "Leger plus",
|
||||||
"status.reblog": "Impulsar",
|
"status.reblog": "Impulsar",
|
||||||
"status.reblog_or_quote": "Impulsar o citar",
|
"status.reblog_or_quote": "Impulsar o citar",
|
||||||
|
|
|
||||||
|
|
@ -312,9 +312,9 @@
|
||||||
"emoji_button.custom": "Sérsniðin",
|
"emoji_button.custom": "Sérsniðin",
|
||||||
"emoji_button.flags": "Flögg",
|
"emoji_button.flags": "Flögg",
|
||||||
"emoji_button.food": "Matur og drykkur",
|
"emoji_button.food": "Matur og drykkur",
|
||||||
"emoji_button.label": "Setja inn tjáningartákn",
|
"emoji_button.label": "Setja inn lyndistákn",
|
||||||
"emoji_button.nature": "Náttúra",
|
"emoji_button.nature": "Náttúra",
|
||||||
"emoji_button.not_found": "Engin samsvarandi tjáningartákn fundust",
|
"emoji_button.not_found": "Engin samsvarandi lyndistákn fundust",
|
||||||
"emoji_button.objects": "Hlutir",
|
"emoji_button.objects": "Hlutir",
|
||||||
"emoji_button.people": "Fólk",
|
"emoji_button.people": "Fólk",
|
||||||
"emoji_button.recent": "Oft notuð",
|
"emoji_button.recent": "Oft notuð",
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Þú ert ekki ennþá með neinar bókamerktar færslur. Þegar þú bókamerkir færslu, mun það birtast hér.",
|
"empty_column.bookmarked_statuses": "Þú ert ekki ennþá með neinar bókamerktar færslur. Þegar þú bókamerkir færslu, mun það birtast hér.",
|
||||||
"empty_column.community": "Staðværa tímalínan er tóm. Skrifaðu eitthvað opinberlega til að láta boltann fara að rúlla!",
|
"empty_column.community": "Staðværa tímalínan er tóm. Skrifaðu eitthvað opinberlega til að láta boltann fara að rúlla!",
|
||||||
"empty_column.direct": "Þú ert ekki ennþá með neitt einkaspjall við neinn. Þegar þú sendir eða tekur við slíku, mun það birtast hér.",
|
"empty_column.direct": "Þú ert ekki ennþá með neitt einkaspjall við neinn. Þegar þú sendir eða tekur við slíku, mun það birtast hér.",
|
||||||
|
"empty_column.disabled_feed": "Þetta streymi hefur verið gert óvirkt af stjórnendum netþjónis þíns.",
|
||||||
"empty_column.domain_blocks": "Það eru ennþá engin útilokuð lén.",
|
"empty_column.domain_blocks": "Það eru ennþá engin útilokuð lén.",
|
||||||
"empty_column.explore_statuses": "Ekkert er á uppleið í augnablikinu. Athugaðu aftur síðar!",
|
"empty_column.explore_statuses": "Ekkert er á uppleið í augnablikinu. Athugaðu aftur síðar!",
|
||||||
"empty_column.favourited_statuses": "Þú ert ekki ennþá með neinar eftirlætisfærslur. Þegar þú setur færslu í eftirlæti, munu þau birtast hér.",
|
"empty_column.favourited_statuses": "Þú ert ekki ennþá með neinar eftirlætisfærslur. Þegar þú setur færslu í eftirlæti, munu þau birtast hér.",
|
||||||
|
|
@ -753,6 +754,7 @@
|
||||||
"privacy.unlisted.short": "Hljóðlátt opinbert",
|
"privacy.unlisted.short": "Hljóðlátt opinbert",
|
||||||
"privacy_policy.last_updated": "Síðast uppfært {date}",
|
"privacy_policy.last_updated": "Síðast uppfært {date}",
|
||||||
"privacy_policy.title": "Persónuverndarstefna",
|
"privacy_policy.title": "Persónuverndarstefna",
|
||||||
|
"quote_error.edit": "Ekki er hægt að bæta við tilvitnunum þegar færslum er breytt.",
|
||||||
"quote_error.poll": "Ekki er leyft að vitna í kannanir.",
|
"quote_error.poll": "Ekki er leyft að vitna í kannanir.",
|
||||||
"quote_error.quote": "Einungis ein tilvitnun er leyfð í einu.",
|
"quote_error.quote": "Einungis ein tilvitnun er leyfð í einu.",
|
||||||
"quote_error.unauthorized": "Þú hefur ekki heimild til að vitna í þessa færslu.",
|
"quote_error.unauthorized": "Þú hefur ekki heimild til að vitna í þessa færslu.",
|
||||||
|
|
@ -875,7 +877,7 @@
|
||||||
"status.contains_quote": "Inniheldur tilvitnun",
|
"status.contains_quote": "Inniheldur tilvitnun",
|
||||||
"status.context.loading": "Hleð inn fleiri svörum",
|
"status.context.loading": "Hleð inn fleiri svörum",
|
||||||
"status.context.loading_error": "Gat ekki hlaðið inn nýjum svörum",
|
"status.context.loading_error": "Gat ekki hlaðið inn nýjum svörum",
|
||||||
"status.context.loading_success": "Öllum svörum hlaðið inn",
|
"status.context.loading_success": "Nýjum svörum hlaðið inn",
|
||||||
"status.context.more_replies_found": "Fleiri svör fundust",
|
"status.context.more_replies_found": "Fleiri svör fundust",
|
||||||
"status.context.retry": "Reyna aftur",
|
"status.context.retry": "Reyna aftur",
|
||||||
"status.context.show": "Sýna",
|
"status.context.show": "Sýna",
|
||||||
|
|
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Non hai ancora salvato nei segnalibri alcun post. Quando lo farai, apparirà qui.",
|
"empty_column.bookmarked_statuses": "Non hai ancora salvato nei segnalibri alcun post. Quando lo farai, apparirà qui.",
|
||||||
"empty_column.community": "La cronologia locale è vuota. Scrivi qualcosa pubblicamente per dare inizio alla festa!",
|
"empty_column.community": "La cronologia locale è vuota. Scrivi qualcosa pubblicamente per dare inizio alla festa!",
|
||||||
"empty_column.direct": "Non hai ancora alcuna menzione privata. Quando ne invierai o riceverai una, apparirà qui.",
|
"empty_column.direct": "Non hai ancora alcuna menzione privata. Quando ne invierai o riceverai una, apparirà qui.",
|
||||||
|
"empty_column.disabled_feed": "Questo feed è stato disabilitato dagli amministratori del tuo server.",
|
||||||
"empty_column.domain_blocks": "Ancora nessun dominio bloccato.",
|
"empty_column.domain_blocks": "Ancora nessun dominio bloccato.",
|
||||||
"empty_column.explore_statuses": "Nulla è in tendenza al momento. Ricontrolla più tardi!",
|
"empty_column.explore_statuses": "Nulla è in tendenza al momento. Ricontrolla più tardi!",
|
||||||
"empty_column.favourited_statuses": "Non hai ancora alcun post preferito. Quando ne salverai uno tra i preferiti, apparirà qui.",
|
"empty_column.favourited_statuses": "Non hai ancora alcun post preferito. Quando ne salverai uno tra i preferiti, apparirà qui.",
|
||||||
|
|
@ -753,6 +754,7 @@
|
||||||
"privacy.unlisted.short": "Pubblico silenzioso",
|
"privacy.unlisted.short": "Pubblico silenzioso",
|
||||||
"privacy_policy.last_updated": "Ultimo aggiornamento {date}",
|
"privacy_policy.last_updated": "Ultimo aggiornamento {date}",
|
||||||
"privacy_policy.title": "Politica sulla Privacy",
|
"privacy_policy.title": "Politica sulla Privacy",
|
||||||
|
"quote_error.edit": "Le citazioni non possono essere aggiunte quando si modifica un post.",
|
||||||
"quote_error.poll": "Nei sondaggi non sono consentite le citazioni.",
|
"quote_error.poll": "Nei sondaggi non sono consentite le citazioni.",
|
||||||
"quote_error.quote": "È consentita una sola citazione alla volta.",
|
"quote_error.quote": "È consentita una sola citazione alla volta.",
|
||||||
"quote_error.unauthorized": "Non sei autorizzato a citare questo post.",
|
"quote_error.unauthorized": "Non sei autorizzato a citare questo post.",
|
||||||
|
|
@ -875,7 +877,7 @@
|
||||||
"status.contains_quote": "Contiene una citazione",
|
"status.contains_quote": "Contiene una citazione",
|
||||||
"status.context.loading": "Caricamento di altre risposte",
|
"status.context.loading": "Caricamento di altre risposte",
|
||||||
"status.context.loading_error": "Impossibile caricare nuove risposte",
|
"status.context.loading_error": "Impossibile caricare nuove risposte",
|
||||||
"status.context.loading_success": "Tutte le risposte caricate",
|
"status.context.loading_success": "Nuove risposte caricate",
|
||||||
"status.context.more_replies_found": "Sono state trovate altre risposte",
|
"status.context.more_replies_found": "Sono state trovate altre risposte",
|
||||||
"status.context.retry": "Riprova",
|
"status.context.retry": "Riprova",
|
||||||
"status.context.show": "Mostra",
|
"status.context.show": "Mostra",
|
||||||
|
|
|
||||||
|
|
@ -742,7 +742,7 @@
|
||||||
"privacy_policy.title": "개인정보처리방침",
|
"privacy_policy.title": "개인정보처리방침",
|
||||||
"quote_error.poll": "인용과 투표를 함께 사용할 수 없습니다.",
|
"quote_error.poll": "인용과 투표를 함께 사용할 수 없습니다.",
|
||||||
"quote_error.quote": "한 번의 인용만 허용됩니다.",
|
"quote_error.quote": "한 번의 인용만 허용됩니다.",
|
||||||
"quote_error.unauthorized": "이 글을 인용할 권한이 없습니다.",
|
"quote_error.unauthorized": "이 게시물을 인용할 권한이 없습니다.",
|
||||||
"quote_error.upload": "인용과 미디어 첨부를 함께 사용할 수 없습니다.",
|
"quote_error.upload": "인용과 미디어 첨부를 함께 사용할 수 없습니다.",
|
||||||
"recommended": "추천함",
|
"recommended": "추천함",
|
||||||
"refresh": "새로고침",
|
"refresh": "새로고침",
|
||||||
|
|
@ -857,7 +857,9 @@
|
||||||
"status.block": "@{name} 차단",
|
"status.block": "@{name} 차단",
|
||||||
"status.bookmark": "북마크",
|
"status.bookmark": "북마크",
|
||||||
"status.cancel_reblog_private": "부스트 취소",
|
"status.cancel_reblog_private": "부스트 취소",
|
||||||
|
"status.cannot_quote": "인용을 비허용한 게시물",
|
||||||
"status.cannot_reblog": "이 게시물은 부스트 할 수 없습니다",
|
"status.cannot_reblog": "이 게시물은 부스트 할 수 없습니다",
|
||||||
|
"status.contains_quote": "인용 포함",
|
||||||
"status.continued_thread": "이어지는 글타래",
|
"status.continued_thread": "이어지는 글타래",
|
||||||
"status.copy": "게시물 링크 복사",
|
"status.copy": "게시물 링크 복사",
|
||||||
"status.delete": "삭제",
|
"status.delete": "삭제",
|
||||||
|
|
@ -889,12 +891,13 @@
|
||||||
"status.quote_error.filtered": "필터에 의해 가려짐",
|
"status.quote_error.filtered": "필터에 의해 가려짐",
|
||||||
"status.quote_error.not_available": "게시물 사용 불가",
|
"status.quote_error.not_available": "게시물 사용 불가",
|
||||||
"status.quote_error.pending_approval": "게시물 대기중",
|
"status.quote_error.pending_approval": "게시물 대기중",
|
||||||
"status.quote_followers_only": "팔로워만 이 게시물을 인용할 수 있습니다",
|
"status.quote_followers_only": "팔로워만 인용할 수 있는 게시물",
|
||||||
"status.quote_manual_review": "작성자가 직접 검토합니다",
|
"status.quote_manual_review": "작성자가 직접 검토합니다",
|
||||||
|
"status.quote_noun": "인용",
|
||||||
"status.quote_policy_change": "누가 인용할 수 있는지",
|
"status.quote_policy_change": "누가 인용할 수 있는지",
|
||||||
"status.quote_post_author": "인용된 @{name} 님의 게시물",
|
"status.quote_post_author": "인용된 @{name} 님의 게시물",
|
||||||
"status.quote_private": "비공개 게시물은 인용할 수 없습니다",
|
"status.quote_private": "비공개 게시물은 인용할 수 없습니다",
|
||||||
"status.quotes": "{count, plural, other {#}} 인용",
|
"status.quotes": "{count, plural, other {인용}}",
|
||||||
"status.quotes.empty": "아직 아무도 이 게시물을 인용하지 않았습니다. 누군가 인용한다면 여기에 표시됩니다.",
|
"status.quotes.empty": "아직 아무도 이 게시물을 인용하지 않았습니다. 누군가 인용한다면 여기에 표시됩니다.",
|
||||||
"status.read_more": "더 보기",
|
"status.read_more": "더 보기",
|
||||||
"status.reblog": "부스트",
|
"status.reblog": "부스트",
|
||||||
|
|
@ -976,7 +979,8 @@
|
||||||
"video.volume_up": "음량 증가",
|
"video.volume_up": "음량 증가",
|
||||||
"visibility_modal.button_title": "공개범위 설정",
|
"visibility_modal.button_title": "공개범위 설정",
|
||||||
"visibility_modal.header": "공개범위와 반응",
|
"visibility_modal.header": "공개범위와 반응",
|
||||||
"visibility_modal.helper.unlisted_quoting": "사람들이 나를 인용한 경우 그 게시물 또한 유행에서 제외됩니다.",
|
"visibility_modal.helper.unlisted_quoting": "사람들에게 인용된 경우, 인용한 게시물도 유행 타임라인에서 감추게 됩니다.",
|
||||||
|
"visibility_modal.instructions": "누가 이 게시물과 상호작용할 수 있는 지 제어합니다. 또한 <link>환경설정 > 게시물 기본설정</link>으로 이동해 향후 모든 게시물의 설정을 적용할 수 있습니다.",
|
||||||
"visibility_modal.privacy_label": "공개 범위",
|
"visibility_modal.privacy_label": "공개 범위",
|
||||||
"visibility_modal.quote_followers": "팔로워만",
|
"visibility_modal.quote_followers": "팔로워만",
|
||||||
"visibility_modal.quote_label": "인용할 수 있는 사람",
|
"visibility_modal.quote_label": "인용할 수 있는 사람",
|
||||||
|
|
|
||||||
|
|
@ -223,7 +223,7 @@
|
||||||
"empty_column.explore_statuses": "Tiştek niha di rojevê de tune. Paşê vegere!",
|
"empty_column.explore_statuses": "Tiştek niha di rojevê de tune. Paşê vegere!",
|
||||||
"empty_column.follow_requests": "Hê jî daxwaza şopandinê tunne ye. Dema daxwazek hat, yê li vir were nîşan kirin.",
|
"empty_column.follow_requests": "Hê jî daxwaza şopandinê tunne ye. Dema daxwazek hat, yê li vir were nîşan kirin.",
|
||||||
"empty_column.hashtag": "Di vê hashtagê de hêj tiştekî tune.",
|
"empty_column.hashtag": "Di vê hashtagê de hêj tiştekî tune.",
|
||||||
"empty_column.home": "Rojeva demnameya te vala ye! Ji bona tijîkirinê bêtir mirovan bişopîne. {suggestions}",
|
"empty_column.home": "Rojeva demnameya te vala ye! Bo tijîkirina wê bêtir mirovan bişopîne.",
|
||||||
"empty_column.list": "Di vê rêzokê de hîn tiştek tune ye. Gava ku endamên vê rêzokê peyamên nû biweşînin, ew ê li vir xuya bibin.",
|
"empty_column.list": "Di vê rêzokê de hîn tiştek tune ye. Gava ku endamên vê rêzokê peyamên nû biweşînin, ew ê li vir xuya bibin.",
|
||||||
"empty_column.mutes": "Te tu bikarhêner bêdeng nekiriye.",
|
"empty_column.mutes": "Te tu bikarhêner bêdeng nekiriye.",
|
||||||
"empty_column.notifications": "Hêj hişyariyên te tunene. Dema ku mirovên din bi we re têkilî danîn, hûn ê wê li vir bibînin.",
|
"empty_column.notifications": "Hêj hişyariyên te tunene. Dema ku mirovên din bi we re têkilî danîn, hûn ê wê li vir bibînin.",
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@
|
||||||
"account.disable_notifications": "Desha de avizarme sovre publikasyones de @{name}",
|
"account.disable_notifications": "Desha de avizarme sovre publikasyones de @{name}",
|
||||||
"account.domain_blocking": "Blokando el domeno",
|
"account.domain_blocking": "Blokando el domeno",
|
||||||
"account.edit_profile": "Edita profil",
|
"account.edit_profile": "Edita profil",
|
||||||
|
"account.edit_profile_short": "Edita",
|
||||||
"account.enable_notifications": "Avizame kuando @{name} publike",
|
"account.enable_notifications": "Avizame kuando @{name} publike",
|
||||||
"account.endorse": "Avalia en profil",
|
"account.endorse": "Avalia en profil",
|
||||||
"account.featured.accounts": "Profiles",
|
"account.featured.accounts": "Profiles",
|
||||||
|
|
@ -36,6 +37,11 @@
|
||||||
"account.featured_tags.last_status_never": "No ay publikasyones",
|
"account.featured_tags.last_status_never": "No ay publikasyones",
|
||||||
"account.follow": "Sige",
|
"account.follow": "Sige",
|
||||||
"account.follow_back": "Sige tamyen",
|
"account.follow_back": "Sige tamyen",
|
||||||
|
"account.follow_back_short": "Sige tambyen",
|
||||||
|
"account.follow_request": "Solisita segirle",
|
||||||
|
"account.follow_request_cancel": "Anula solisitud",
|
||||||
|
"account.follow_request_cancel_short": "Anula",
|
||||||
|
"account.follow_request_short": "Solisitud",
|
||||||
"account.followers": "Suivantes",
|
"account.followers": "Suivantes",
|
||||||
"account.followers.empty": "Por agora dingun no sige a este utilizador.",
|
"account.followers.empty": "Por agora dingun no sige a este utilizador.",
|
||||||
"account.followers_counter": "{count, plural, one {{counter} suivante} other {{counter} suivantes}}",
|
"account.followers_counter": "{count, plural, one {{counter} suivante} other {{counter} suivantes}}",
|
||||||
|
|
@ -58,6 +64,7 @@
|
||||||
"account.mute_short": "Silensia",
|
"account.mute_short": "Silensia",
|
||||||
"account.muted": "Silensiado",
|
"account.muted": "Silensiado",
|
||||||
"account.muting": "Silensyando",
|
"account.muting": "Silensyando",
|
||||||
|
"account.mutual": "Vos sigesh mutualmente",
|
||||||
"account.no_bio": "No ay deskripsion.",
|
"account.no_bio": "No ay deskripsion.",
|
||||||
"account.open_original_page": "Avre pajina orijnala",
|
"account.open_original_page": "Avre pajina orijnala",
|
||||||
"account.posts": "Publikasyones",
|
"account.posts": "Publikasyones",
|
||||||
|
|
@ -93,6 +100,7 @@
|
||||||
"alert.unexpected.title": "Atyo!",
|
"alert.unexpected.title": "Atyo!",
|
||||||
"alt_text_badge.title": "Teksto alternativo",
|
"alt_text_badge.title": "Teksto alternativo",
|
||||||
"alt_text_modal.add_alt_text": "Adjusta teksto alternativo",
|
"alt_text_modal.add_alt_text": "Adjusta teksto alternativo",
|
||||||
|
"alt_text_modal.add_text_from_image": "Adjusta teksto de imaje",
|
||||||
"alt_text_modal.cancel": "Anula",
|
"alt_text_modal.cancel": "Anula",
|
||||||
"alt_text_modal.change_thumbnail": "Troka minyatura",
|
"alt_text_modal.change_thumbnail": "Troka minyatura",
|
||||||
"alt_text_modal.done": "Fecho",
|
"alt_text_modal.done": "Fecho",
|
||||||
|
|
@ -206,14 +214,22 @@
|
||||||
"confirmations.logout.message": "Estas siguro ke keres salir de tu kuento?",
|
"confirmations.logout.message": "Estas siguro ke keres salir de tu kuento?",
|
||||||
"confirmations.logout.title": "Salir?",
|
"confirmations.logout.title": "Salir?",
|
||||||
"confirmations.missing_alt_text.confirm": "Adjusta teksto alternativo",
|
"confirmations.missing_alt_text.confirm": "Adjusta teksto alternativo",
|
||||||
|
"confirmations.missing_alt_text.secondary": "Puvlika de todos modos",
|
||||||
"confirmations.missing_alt_text.title": "Adjustar teksto alternativo?",
|
"confirmations.missing_alt_text.title": "Adjustar teksto alternativo?",
|
||||||
"confirmations.mute.confirm": "Silensia",
|
"confirmations.mute.confirm": "Silensia",
|
||||||
|
"confirmations.quiet_post_quote_info.got_it": "Entyendo",
|
||||||
"confirmations.redraft.confirm": "Efasa i reeskrive",
|
"confirmations.redraft.confirm": "Efasa i reeskrive",
|
||||||
"confirmations.redraft.message": "Estas siguro ke keres efasar esta publikasyon i reeskrivirla? Pedreras todos los favoritos i repartajasyones asosiados kon esta publikasyon i repuestas a eya seran guerfanadas.",
|
"confirmations.redraft.message": "Estas siguro ke keres efasar esta publikasyon i reeskrivirla? Pedreras todos los favoritos i repartajasyones asosiados kon esta publikasyon i repuestas a eya seran guerfanadas.",
|
||||||
"confirmations.redraft.title": "Efasar i reeskrivir?",
|
"confirmations.redraft.title": "Efasar i reeskrivir?",
|
||||||
|
"confirmations.remove_from_followers.confirm": "Kita suivante",
|
||||||
|
"confirmations.remove_from_followers.title": "Kitar suivante?",
|
||||||
"confirmations.revoke_quote.confirm": "Kita puvlikasyon",
|
"confirmations.revoke_quote.confirm": "Kita puvlikasyon",
|
||||||
"confirmations.revoke_quote.title": "Kitar puvlikasyon?",
|
"confirmations.revoke_quote.title": "Kitar puvlikasyon?",
|
||||||
|
"confirmations.unblock.confirm": "Dezbloka",
|
||||||
|
"confirmations.unblock.title": "Dezblokar a @{name}?",
|
||||||
"confirmations.unfollow.confirm": "Desige",
|
"confirmations.unfollow.confirm": "Desige",
|
||||||
|
"confirmations.unfollow.title": "Desegir a @{name}?",
|
||||||
|
"confirmations.withdraw_request.confirm": "Anula solisitud",
|
||||||
"content_warning.hide": "Eskonde puvlikasyon",
|
"content_warning.hide": "Eskonde puvlikasyon",
|
||||||
"content_warning.show": "Amostra entanto",
|
"content_warning.show": "Amostra entanto",
|
||||||
"content_warning.show_more": "Amostra mas",
|
"content_warning.show_more": "Amostra mas",
|
||||||
|
|
@ -245,6 +261,7 @@
|
||||||
"domain_pill.username": "Nombre de utilizador",
|
"domain_pill.username": "Nombre de utilizador",
|
||||||
"domain_pill.whats_in_a_handle": "En ke konsiste el alias?",
|
"domain_pill.whats_in_a_handle": "En ke konsiste el alias?",
|
||||||
"domain_pill.your_handle": "Tu alias:",
|
"domain_pill.your_handle": "Tu alias:",
|
||||||
|
"dropdown.empty": "Eskoje una opsyon",
|
||||||
"embed.instructions": "Enkrusta esta publikasyon en tu sitio internetiko kopiando este kodiche.",
|
"embed.instructions": "Enkrusta esta publikasyon en tu sitio internetiko kopiando este kodiche.",
|
||||||
"embed.preview": "Paresera ansina:",
|
"embed.preview": "Paresera ansina:",
|
||||||
"emoji_button.activity": "Aktivita",
|
"emoji_button.activity": "Aktivita",
|
||||||
|
|
@ -370,6 +387,7 @@
|
||||||
"hints.profiles.see_more_followers": "Ve mas suivantes en {domain}",
|
"hints.profiles.see_more_followers": "Ve mas suivantes en {domain}",
|
||||||
"hints.profiles.see_more_follows": "Ve mas segidos en {domain}",
|
"hints.profiles.see_more_follows": "Ve mas segidos en {domain}",
|
||||||
"hints.profiles.see_more_posts": "Ve mas puvlikasyones en {domain}",
|
"hints.profiles.see_more_posts": "Ve mas puvlikasyones en {domain}",
|
||||||
|
"home.column_settings.show_quotes": "Muestra sitas",
|
||||||
"home.column_settings.show_reblogs": "Amostra repartajasyones",
|
"home.column_settings.show_reblogs": "Amostra repartajasyones",
|
||||||
"home.column_settings.show_replies": "Amostra repuestas",
|
"home.column_settings.show_replies": "Amostra repuestas",
|
||||||
"home.hide_announcements": "Eskonde pregones",
|
"home.hide_announcements": "Eskonde pregones",
|
||||||
|
|
@ -384,6 +402,7 @@
|
||||||
"ignore_notifications_modal.not_following_title": "Inyorar avizos de personas a las kualas no siges?",
|
"ignore_notifications_modal.not_following_title": "Inyorar avizos de personas a las kualas no siges?",
|
||||||
"ignore_notifications_modal.private_mentions_title": "Ignorar avizos de mensyones privadas no solisitadas?",
|
"ignore_notifications_modal.private_mentions_title": "Ignorar avizos de mensyones privadas no solisitadas?",
|
||||||
"info_button.label": "Ayuda",
|
"info_button.label": "Ayuda",
|
||||||
|
"interaction_modal.go": "Va",
|
||||||
"interaction_modal.on_another_server": "En otro sirvidor",
|
"interaction_modal.on_another_server": "En otro sirvidor",
|
||||||
"interaction_modal.on_this_server": "En este sirvidor",
|
"interaction_modal.on_this_server": "En este sirvidor",
|
||||||
"interaction_modal.username_prompt": "Por enshemplo {example}",
|
"interaction_modal.username_prompt": "Por enshemplo {example}",
|
||||||
|
|
@ -414,6 +433,7 @@
|
||||||
"keyboard_shortcuts.open_media": "Avre multimedia",
|
"keyboard_shortcuts.open_media": "Avre multimedia",
|
||||||
"keyboard_shortcuts.pinned": "Avre lista de publikasyones fiksadas",
|
"keyboard_shortcuts.pinned": "Avre lista de publikasyones fiksadas",
|
||||||
"keyboard_shortcuts.profile": "Avre profil del autor",
|
"keyboard_shortcuts.profile": "Avre profil del autor",
|
||||||
|
"keyboard_shortcuts.quote": "Sita puvlikasyon",
|
||||||
"keyboard_shortcuts.reply": "Arisponde a publikasyon",
|
"keyboard_shortcuts.reply": "Arisponde a publikasyon",
|
||||||
"keyboard_shortcuts.requests": "Avre lista de solisitudes de suivantes",
|
"keyboard_shortcuts.requests": "Avre lista de solisitudes de suivantes",
|
||||||
"keyboard_shortcuts.search": "Enfoka en la vara de bushkeda",
|
"keyboard_shortcuts.search": "Enfoka en la vara de bushkeda",
|
||||||
|
|
@ -422,8 +442,10 @@
|
||||||
"keyboard_shortcuts.toggle_hidden": "Amostra/eskonde teksto detras de avertensya de kontenido (CW)",
|
"keyboard_shortcuts.toggle_hidden": "Amostra/eskonde teksto detras de avertensya de kontenido (CW)",
|
||||||
"keyboard_shortcuts.toggle_sensitivity": "Amostra/eskonde multimedia",
|
"keyboard_shortcuts.toggle_sensitivity": "Amostra/eskonde multimedia",
|
||||||
"keyboard_shortcuts.toot": "Eskrive mueva publikasyon",
|
"keyboard_shortcuts.toot": "Eskrive mueva publikasyon",
|
||||||
|
"keyboard_shortcuts.translate": "para trezladar una puvlikasyon",
|
||||||
"keyboard_shortcuts.unfocus": "No enfoka en el area de eskrivir/bushkeda",
|
"keyboard_shortcuts.unfocus": "No enfoka en el area de eskrivir/bushkeda",
|
||||||
"keyboard_shortcuts.up": "Move verso arriva en la lista",
|
"keyboard_shortcuts.up": "Move verso arriva en la lista",
|
||||||
|
"learn_more_link.got_it": "Entyendo",
|
||||||
"learn_more_link.learn_more": "Ambezate mas",
|
"learn_more_link.learn_more": "Ambezate mas",
|
||||||
"lightbox.close": "Serra",
|
"lightbox.close": "Serra",
|
||||||
"lightbox.next": "Sigiente",
|
"lightbox.next": "Sigiente",
|
||||||
|
|
@ -440,8 +462,13 @@
|
||||||
"lists.delete": "Efasa lista",
|
"lists.delete": "Efasa lista",
|
||||||
"lists.done": "Fecho",
|
"lists.done": "Fecho",
|
||||||
"lists.edit": "Edita lista",
|
"lists.edit": "Edita lista",
|
||||||
|
"lists.find_users_to_add": "Bushka utilizadores para adjustar",
|
||||||
"lists.list_name": "Nombre de lista",
|
"lists.list_name": "Nombre de lista",
|
||||||
"lists.new_list_name": "Nombre de mueva lista",
|
"lists.new_list_name": "Nombre de mueva lista",
|
||||||
|
"lists.no_lists_yet": "Ainda no ay listas.",
|
||||||
|
"lists.no_members_yet": "Ainda no ay myembros.",
|
||||||
|
"lists.no_results_found": "No se toparon rezultados.",
|
||||||
|
"lists.remove_member": "Kita",
|
||||||
"lists.replies_policy.followed": "Kualseker utilizador segido",
|
"lists.replies_policy.followed": "Kualseker utilizador segido",
|
||||||
"lists.replies_policy.list": "Miembros de la lista",
|
"lists.replies_policy.list": "Miembros de la lista",
|
||||||
"lists.replies_policy.none": "Dinguno",
|
"lists.replies_policy.none": "Dinguno",
|
||||||
|
|
@ -461,6 +488,7 @@
|
||||||
"navigation_bar.about": "Sovre mozotros",
|
"navigation_bar.about": "Sovre mozotros",
|
||||||
"navigation_bar.administration": "Administrasyon",
|
"navigation_bar.administration": "Administrasyon",
|
||||||
"navigation_bar.advanced_interface": "Avre en la enterfaz avanzada",
|
"navigation_bar.advanced_interface": "Avre en la enterfaz avanzada",
|
||||||
|
"navigation_bar.automated_deletion": "Efasasyon otomatika de publikasyones",
|
||||||
"navigation_bar.blocks": "Utilizadores blokados",
|
"navigation_bar.blocks": "Utilizadores blokados",
|
||||||
"navigation_bar.bookmarks": "Markadores",
|
"navigation_bar.bookmarks": "Markadores",
|
||||||
"navigation_bar.direct": "Enmentaduras privadas",
|
"navigation_bar.direct": "Enmentaduras privadas",
|
||||||
|
|
@ -480,6 +508,8 @@
|
||||||
"navigation_bar.preferences": "Preferensyas",
|
"navigation_bar.preferences": "Preferensyas",
|
||||||
"navigation_bar.privacy_and_reach": "Privasita i alkanse",
|
"navigation_bar.privacy_and_reach": "Privasita i alkanse",
|
||||||
"navigation_bar.search": "Bushka",
|
"navigation_bar.search": "Bushka",
|
||||||
|
"navigation_bar.search_trends": "Bushka / Trendes",
|
||||||
|
"navigation_panel.expand_lists": "Espande menu de lista",
|
||||||
"not_signed_in_indicator.not_signed_in": "Nesesitas konektarse kon tu kuento para akseder este rekurso.",
|
"not_signed_in_indicator.not_signed_in": "Nesesitas konektarse kon tu kuento para akseder este rekurso.",
|
||||||
"notification.admin.report": "{name} raporto {target}",
|
"notification.admin.report": "{name} raporto {target}",
|
||||||
"notification.admin.report_statuses": "{name} raporto {target} por {category}",
|
"notification.admin.report_statuses": "{name} raporto {target} por {category}",
|
||||||
|
|
@ -531,6 +561,7 @@
|
||||||
"notifications.column_settings.mention": "Enmentaduras:",
|
"notifications.column_settings.mention": "Enmentaduras:",
|
||||||
"notifications.column_settings.poll": "Rizultados de anketas:",
|
"notifications.column_settings.poll": "Rizultados de anketas:",
|
||||||
"notifications.column_settings.push": "Avizos arrepushados",
|
"notifications.column_settings.push": "Avizos arrepushados",
|
||||||
|
"notifications.column_settings.quote": "Sitas:",
|
||||||
"notifications.column_settings.reblog": "Repartajasyones:",
|
"notifications.column_settings.reblog": "Repartajasyones:",
|
||||||
"notifications.column_settings.show": "Amostra en kolumna",
|
"notifications.column_settings.show": "Amostra en kolumna",
|
||||||
"notifications.column_settings.sound": "Reproduse son",
|
"notifications.column_settings.sound": "Reproduse son",
|
||||||
|
|
@ -606,6 +637,7 @@
|
||||||
"privacy_policy.title": "Politika de privasita",
|
"privacy_policy.title": "Politika de privasita",
|
||||||
"recommended": "Rekomendado",
|
"recommended": "Rekomendado",
|
||||||
"refresh": "Arefreska",
|
"refresh": "Arefreska",
|
||||||
|
"regeneration_indicator.please_stand_by": "Aspera por favor.",
|
||||||
"relative_time.days": "{number} d",
|
"relative_time.days": "{number} d",
|
||||||
"relative_time.full.days": "antes {number, plural, one {# diya} other {# diyas}}",
|
"relative_time.full.days": "antes {number, plural, one {# diya} other {# diyas}}",
|
||||||
"relative_time.full.hours": "antes {number, plural, one {# ora} other {# oras}}",
|
"relative_time.full.hours": "antes {number, plural, one {# ora} other {# oras}}",
|
||||||
|
|
@ -617,6 +649,7 @@
|
||||||
"relative_time.minutes": "{number} m",
|
"relative_time.minutes": "{number} m",
|
||||||
"relative_time.seconds": "{number} s",
|
"relative_time.seconds": "{number} s",
|
||||||
"relative_time.today": "oy",
|
"relative_time.today": "oy",
|
||||||
|
"remove_quote_hint.button_label": "Entyendo",
|
||||||
"reply_indicator.attachments": "{count, plural, one {# anekso} other {# aneksos}}",
|
"reply_indicator.attachments": "{count, plural, one {# anekso} other {# aneksos}}",
|
||||||
"reply_indicator.cancel": "Anula",
|
"reply_indicator.cancel": "Anula",
|
||||||
"reply_indicator.poll": "Anketa",
|
"reply_indicator.poll": "Anketa",
|
||||||
|
|
@ -707,8 +740,15 @@
|
||||||
"status.bookmark": "Marka",
|
"status.bookmark": "Marka",
|
||||||
"status.cancel_reblog_private": "No repartaja",
|
"status.cancel_reblog_private": "No repartaja",
|
||||||
"status.cannot_reblog": "Esta publikasyon no se puede repartajar",
|
"status.cannot_reblog": "Esta publikasyon no se puede repartajar",
|
||||||
|
"status.contains_quote": "Kontriene sita",
|
||||||
|
"status.context.loading_success": "Muevas repuestas kargadas",
|
||||||
|
"status.context.more_replies_found": "Se toparon mas repuestas",
|
||||||
|
"status.context.retry": "Reprova",
|
||||||
|
"status.context.show": "Amostra",
|
||||||
|
"status.continued_thread": "Kontinuasion del filo",
|
||||||
"status.copy": "Kopia atadijo de publikasyon",
|
"status.copy": "Kopia atadijo de publikasyon",
|
||||||
"status.delete": "Efasa",
|
"status.delete": "Efasa",
|
||||||
|
"status.delete.success": "Puvlikasyon kitada",
|
||||||
"status.detailed_status": "Vista de konversasyon detalyada",
|
"status.detailed_status": "Vista de konversasyon detalyada",
|
||||||
"status.direct": "Enmenta a @{name} en privado",
|
"status.direct": "Enmenta a @{name} en privado",
|
||||||
"status.direct_indicator": "Enmentadura privada",
|
"status.direct_indicator": "Enmentadura privada",
|
||||||
|
|
@ -729,13 +769,26 @@
|
||||||
"status.mute_conversation": "Silensia konversasyon",
|
"status.mute_conversation": "Silensia konversasyon",
|
||||||
"status.open": "Espande publikasyon",
|
"status.open": "Espande publikasyon",
|
||||||
"status.pin": "Fiksa en profil",
|
"status.pin": "Fiksa en profil",
|
||||||
|
"status.quote": "Sita",
|
||||||
|
"status.quote.cancel": "Anula la sita",
|
||||||
|
"status.quote_error.limited_account_hint.action": "Amostra entanto",
|
||||||
|
"status.quote_error.limited_account_hint.title": "Este kuento fue eskondido por los moderadores de {domain}.",
|
||||||
|
"status.quote_error.not_available": "Puvlikasyon no desponivle",
|
||||||
|
"status.quote_error.pending_approval": "Puvlikasyon esta asperando",
|
||||||
|
"status.quote_noun": "Sita",
|
||||||
|
"status.quote_policy_change": "Troka ken puede sitar",
|
||||||
|
"status.quote_post_author": "Sito una puvlikasyon de @{name}",
|
||||||
|
"status.quote_private": "No se puede sitar puvlikasyones privadas",
|
||||||
|
"status.quotes": "{count, plural, one {sita} other {sitas}}",
|
||||||
"status.read_more": "Melda mas",
|
"status.read_more": "Melda mas",
|
||||||
"status.reblog": "Repartaja",
|
"status.reblog": "Repartaja",
|
||||||
|
"status.reblog_or_quote": "Repartaja o partaja",
|
||||||
"status.reblogged_by": "{name} repartajo",
|
"status.reblogged_by": "{name} repartajo",
|
||||||
"status.reblogs.empty": "Ainda nadie tiene repartajado esta publikasyon. Kuando algien lo aga, se amostrara aki.",
|
"status.reblogs.empty": "Ainda nadie tiene repartajado esta publikasyon. Kuando algien lo aga, se amostrara aki.",
|
||||||
"status.redraft": "Efasa i eskrive de muevo",
|
"status.redraft": "Efasa i eskrive de muevo",
|
||||||
"status.remove_bookmark": "Kita markador",
|
"status.remove_bookmark": "Kita markador",
|
||||||
"status.remove_favourite": "Kita de los favoritos",
|
"status.remove_favourite": "Kita de los favoritos",
|
||||||
|
"status.remove_quote": "Kita",
|
||||||
"status.replied_in_thread": "Arispondo en filo",
|
"status.replied_in_thread": "Arispondo en filo",
|
||||||
"status.replied_to": "Arispondio a {name}",
|
"status.replied_to": "Arispondio a {name}",
|
||||||
"status.reply": "Arisponde",
|
"status.reply": "Arisponde",
|
||||||
|
|
@ -790,7 +843,12 @@
|
||||||
"video.pause": "Pauza",
|
"video.pause": "Pauza",
|
||||||
"video.play": "Reproduze",
|
"video.play": "Reproduze",
|
||||||
"video.unmute": "Desilensia",
|
"video.unmute": "Desilensia",
|
||||||
|
"visibility_modal.button_title": "Konfigura la vizibilita",
|
||||||
|
"visibility_modal.header": "Vizibilita i enteraksyon",
|
||||||
"visibility_modal.privacy_label": "Vizivilita",
|
"visibility_modal.privacy_label": "Vizivilita",
|
||||||
"visibility_modal.quote_followers": "Solo suivantes",
|
"visibility_modal.quote_followers": "Solo suivantes",
|
||||||
|
"visibility_modal.quote_label": "Ken puede sitar",
|
||||||
|
"visibility_modal.quote_nobody": "Solo yo",
|
||||||
|
"visibility_modal.quote_public": "Todos",
|
||||||
"visibility_modal.save": "Guadra"
|
"visibility_modal.save": "Guadra"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,17 +17,18 @@
|
||||||
"account.add_or_remove_from_list": "Pievienot vai Noņemt no sarakstiem",
|
"account.add_or_remove_from_list": "Pievienot vai Noņemt no sarakstiem",
|
||||||
"account.badges.bot": "Automatizēts",
|
"account.badges.bot": "Automatizēts",
|
||||||
"account.badges.group": "Grupa",
|
"account.badges.group": "Grupa",
|
||||||
"account.block": "Bloķēt @{name}",
|
"account.block": "Liegt @{name}",
|
||||||
"account.block_domain": "Bloķēt domēnu {domain}",
|
"account.block_domain": "Bloķēt domēnu {domain}",
|
||||||
"account.block_short": "Bloķēt",
|
"account.block_short": "Liegt",
|
||||||
"account.blocked": "Bloķēts",
|
"account.blocked": "Liegts",
|
||||||
"account.blocking": "Bloķēts",
|
"account.blocking": "Liegts",
|
||||||
"account.cancel_follow_request": "Atsaukt sekošanas pieprasījumu",
|
"account.cancel_follow_request": "Atsaukt sekošanas pieprasījumu",
|
||||||
"account.copy": "Ievietot saiti uz profilu starpliktuvē",
|
"account.copy": "Ievietot saiti uz profilu starpliktuvē",
|
||||||
"account.direct": "Pieminēt @{name} privāti",
|
"account.direct": "Pieminēt @{name} privāti",
|
||||||
"account.disable_notifications": "Pārtraukt man paziņot, kad @{name} izveido ierakstu",
|
"account.disable_notifications": "Pārtraukt man paziņot, kad @{name} izveido ierakstu",
|
||||||
"account.domain_blocking": "Bloķēts domēns",
|
"account.domain_blocking": "Liegts domēns",
|
||||||
"account.edit_profile": "Labot profilu",
|
"account.edit_profile": "Labot profilu",
|
||||||
|
"account.edit_profile_short": "Labot",
|
||||||
"account.enable_notifications": "Paziņot man, kad @{name} izveido ierakstu",
|
"account.enable_notifications": "Paziņot man, kad @{name} izveido ierakstu",
|
||||||
"account.endorse": "Izcelts profilā",
|
"account.endorse": "Izcelts profilā",
|
||||||
"account.familiar_followers_many": "Kam seko {name1}, {name2}, un {othersCount, plural, zero {pārējie # jums pazīstami} one {vēl viens jums pazīstams} other {pārējie # jums pazīstami}}",
|
"account.familiar_followers_many": "Kam seko {name1}, {name2}, un {othersCount, plural, zero {pārējie # jums pazīstami} one {vēl viens jums pazīstams} other {pārējie # jums pazīstami}}",
|
||||||
|
|
@ -40,6 +41,10 @@
|
||||||
"account.featured_tags.last_status_never": "Nav ierakstu",
|
"account.featured_tags.last_status_never": "Nav ierakstu",
|
||||||
"account.follow": "Sekot",
|
"account.follow": "Sekot",
|
||||||
"account.follow_back": "Sekot atpakaļ",
|
"account.follow_back": "Sekot atpakaļ",
|
||||||
|
"account.follow_request": "Pieprasīt sekot",
|
||||||
|
"account.follow_request_cancel": "Atcelt pieprasījumu",
|
||||||
|
"account.follow_request_cancel_short": "Atcelt",
|
||||||
|
"account.follow_request_short": "Pieprasīt",
|
||||||
"account.followers": "Sekotāji",
|
"account.followers": "Sekotāji",
|
||||||
"account.followers.empty": "Šim lietotājam vēl nav sekotāju.",
|
"account.followers.empty": "Šim lietotājam vēl nav sekotāju.",
|
||||||
"account.followers_counter": "{count, plural, zero {{count} sekotāju} one {{count} sekotājs} other {{count} sekotāji}}",
|
"account.followers_counter": "{count, plural, zero {{count} sekotāju} one {{count} sekotājs} other {{count} sekotāji}}",
|
||||||
|
|
@ -75,9 +80,9 @@
|
||||||
"account.share": "Dalīties ar @{name} profilu",
|
"account.share": "Dalīties ar @{name} profilu",
|
||||||
"account.show_reblogs": "Parādīt @{name} pastiprinātos ierakstus",
|
"account.show_reblogs": "Parādīt @{name} pastiprinātos ierakstus",
|
||||||
"account.statuses_counter": "{count, plural, zero {{counter} ierakstu} one {{counter} ieraksts} other {{counter} ieraksti}}",
|
"account.statuses_counter": "{count, plural, zero {{counter} ierakstu} one {{counter} ieraksts} other {{counter} ieraksti}}",
|
||||||
"account.unblock": "Atbloķēt @{name}",
|
"account.unblock": "Atcelt liegšanu @{name}",
|
||||||
"account.unblock_domain": "Atbloķēt domēnu {domain}",
|
"account.unblock_domain": "Atcelt domēna {domain} liegšanu",
|
||||||
"account.unblock_domain_short": "Atbloķēt",
|
"account.unblock_domain_short": "Atcelt liegšanu",
|
||||||
"account.unblock_short": "Atbloķēt",
|
"account.unblock_short": "Atbloķēt",
|
||||||
"account.unendorse": "Neizcelt profilā",
|
"account.unendorse": "Neizcelt profilā",
|
||||||
"account.unfollow": "Pārstāt sekot",
|
"account.unfollow": "Pārstāt sekot",
|
||||||
|
|
@ -131,7 +136,7 @@
|
||||||
"block_modal.show_more": "Parādīt mazāk",
|
"block_modal.show_more": "Parādīt mazāk",
|
||||||
"block_modal.they_cant_mention": "Nevar Tevi pieminēt vai sekot Tev.",
|
"block_modal.they_cant_mention": "Nevar Tevi pieminēt vai sekot Tev.",
|
||||||
"block_modal.they_cant_see_posts": "Lietotajs nevarēs redzēt Tavus ierakstus, un Tu neredzēsi lietotāja.",
|
"block_modal.they_cant_see_posts": "Lietotajs nevarēs redzēt Tavus ierakstus, un Tu neredzēsi lietotāja.",
|
||||||
"block_modal.title": "Bloķēt lietotāju?",
|
"block_modal.title": "Liegt lietotāju?",
|
||||||
"block_modal.you_wont_see_mentions": "Tu neredzēsi ierakstus, kuros ir minēts šis lietotājs.",
|
"block_modal.you_wont_see_mentions": "Tu neredzēsi ierakstus, kuros ir minēts šis lietotājs.",
|
||||||
"boost_modal.combo": "Nospied {combo}, lai nākamreiz šo izlaistu",
|
"boost_modal.combo": "Nospied {combo}, lai nākamreiz šo izlaistu",
|
||||||
"boost_modal.reblog": "Pastiprināt ierakstu?",
|
"boost_modal.reblog": "Pastiprināt ierakstu?",
|
||||||
|
|
@ -154,13 +159,13 @@
|
||||||
"closed_registrations_modal.preamble": "Mastodon ir decentralizēts, tāpēc neatkarīgi no tā, kur Tu izveido savu kontu, varēsi sekot un mijiedarboties ar ikvienu šajā serverī. Tu pat vari to pašizvietot!",
|
"closed_registrations_modal.preamble": "Mastodon ir decentralizēts, tāpēc neatkarīgi no tā, kur Tu izveido savu kontu, varēsi sekot un mijiedarboties ar ikvienu šajā serverī. Tu pat vari to pašizvietot!",
|
||||||
"closed_registrations_modal.title": "Reģistrēšanās Mastodon",
|
"closed_registrations_modal.title": "Reģistrēšanās Mastodon",
|
||||||
"column.about": "Par",
|
"column.about": "Par",
|
||||||
"column.blocks": "Bloķētie lietotāji",
|
"column.blocks": "Liegtie lietotāji",
|
||||||
"column.bookmarks": "Grāmatzīmes",
|
"column.bookmarks": "Grāmatzīmes",
|
||||||
"column.community": "Vietējā laika līnija",
|
"column.community": "Vietējā laika līnija",
|
||||||
"column.create_list": "Izveidot sarakstu",
|
"column.create_list": "Izveidot sarakstu",
|
||||||
"column.direct": "Privātas pieminēšanas",
|
"column.direct": "Privātas pieminēšanas",
|
||||||
"column.directory": "Pārlūkot profilus",
|
"column.directory": "Pārlūkot profilus",
|
||||||
"column.domain_blocks": "Bloķētie domēni",
|
"column.domain_blocks": "Liegtie domēni",
|
||||||
"column.edit_list": "Labot sarakstu",
|
"column.edit_list": "Labot sarakstu",
|
||||||
"column.favourites": "Izlase",
|
"column.favourites": "Izlase",
|
||||||
"column.firehose": "Tiešraides plūsmas",
|
"column.firehose": "Tiešraides plūsmas",
|
||||||
|
|
@ -208,7 +213,7 @@
|
||||||
"compose_form.spoiler.unmarked": "Pievienot satura brīdinājumu",
|
"compose_form.spoiler.unmarked": "Pievienot satura brīdinājumu",
|
||||||
"compose_form.spoiler_placeholder": "Satura brīdinājums (pēc izvēles)",
|
"compose_form.spoiler_placeholder": "Satura brīdinājums (pēc izvēles)",
|
||||||
"confirmation_modal.cancel": "Atcelt",
|
"confirmation_modal.cancel": "Atcelt",
|
||||||
"confirmations.block.confirm": "Bloķēt",
|
"confirmations.block.confirm": "Liegt",
|
||||||
"confirmations.delete.confirm": "Dzēst",
|
"confirmations.delete.confirm": "Dzēst",
|
||||||
"confirmations.delete.message": "Vai tiešām izdzēst šo ierakstu?",
|
"confirmations.delete.message": "Vai tiešām izdzēst šo ierakstu?",
|
||||||
"confirmations.delete.title": "Izdzēst ierakstu?",
|
"confirmations.delete.title": "Izdzēst ierakstu?",
|
||||||
|
|
@ -243,6 +248,8 @@
|
||||||
"confirmations.revoke_quote.message": "Šo darbību nevar atsaukt.",
|
"confirmations.revoke_quote.message": "Šo darbību nevar atsaukt.",
|
||||||
"confirmations.revoke_quote.title": "Noņemt ierakstu?",
|
"confirmations.revoke_quote.title": "Noņemt ierakstu?",
|
||||||
"confirmations.unfollow.confirm": "Pārstāt sekot",
|
"confirmations.unfollow.confirm": "Pārstāt sekot",
|
||||||
|
"confirmations.unfollow.title": "Pārtraukt sekot {name}?",
|
||||||
|
"confirmations.withdraw_request.confirm": "Atsaukt pieprasījumu",
|
||||||
"content_warning.hide": "Paslēpt ierakstu",
|
"content_warning.hide": "Paslēpt ierakstu",
|
||||||
"content_warning.show": "Tomēr rādīt",
|
"content_warning.show": "Tomēr rādīt",
|
||||||
"content_warning.show_more": "Rādīt vairāk",
|
"content_warning.show_more": "Rādīt vairāk",
|
||||||
|
|
@ -262,11 +269,11 @@
|
||||||
"dismissable_banner.community_timeline": "Šie ir jaunākie publiskie ieraksti no cilvēkiem, kuru konti ir mitināti {domain}.",
|
"dismissable_banner.community_timeline": "Šie ir jaunākie publiskie ieraksti no cilvēkiem, kuru konti ir mitināti {domain}.",
|
||||||
"dismissable_banner.dismiss": "Atcelt",
|
"dismissable_banner.dismiss": "Atcelt",
|
||||||
"dismissable_banner.public_timeline": "Šie ir jaunākie Fediverse lietotāju publiskie ieraksti, kuriem {domain} seko cilvēki.",
|
"dismissable_banner.public_timeline": "Šie ir jaunākie Fediverse lietotāju publiskie ieraksti, kuriem {domain} seko cilvēki.",
|
||||||
"domain_block_modal.block": "Bloķēt serveri",
|
"domain_block_modal.block": "Liegt serveri",
|
||||||
"domain_block_modal.block_account_instead": "Tā vietā liegt @{name}",
|
"domain_block_modal.block_account_instead": "Tā vietā liegt @{name}",
|
||||||
"domain_block_modal.they_cant_follow": "Neviens šajā serverī nevar Tev sekot.",
|
"domain_block_modal.they_cant_follow": "Neviens šajā serverī nevar Tev sekot.",
|
||||||
"domain_block_modal.they_wont_know": "Viņi nezinās, ka tikuši bloķēti.",
|
"domain_block_modal.they_wont_know": "Viņi nezinās, ka tikuši liegti.",
|
||||||
"domain_block_modal.title": "Bloķēt domēnu?",
|
"domain_block_modal.title": "Liegt domēnu?",
|
||||||
"domain_pill.activitypub_lets_connect": "Tas ļauj savienoties un mijiedarboties ar cilvēkiem ne tikai no Mastodon, bet arī starp dažādām sabiedriskajām lietotnēm.",
|
"domain_pill.activitypub_lets_connect": "Tas ļauj savienoties un mijiedarboties ar cilvēkiem ne tikai no Mastodon, bet arī starp dažādām sabiedriskajām lietotnēm.",
|
||||||
"domain_pill.activitypub_like_language": "ActivityPub ir kā valoda, kurā Mastodon sazināš ar citiem sabiedriskajiem tīkliem.",
|
"domain_pill.activitypub_like_language": "ActivityPub ir kā valoda, kurā Mastodon sazināš ar citiem sabiedriskajiem tīkliem.",
|
||||||
"domain_pill.server": "Serveris",
|
"domain_pill.server": "Serveris",
|
||||||
|
|
@ -299,11 +306,11 @@
|
||||||
"empty_column.account_suspended": "Konta darbība ir apturēta",
|
"empty_column.account_suspended": "Konta darbība ir apturēta",
|
||||||
"empty_column.account_timeline": "Šeit nav ierakstu.",
|
"empty_column.account_timeline": "Šeit nav ierakstu.",
|
||||||
"empty_column.account_unavailable": "Profils nav pieejams",
|
"empty_column.account_unavailable": "Profils nav pieejams",
|
||||||
"empty_column.blocks": "Pašreiz tu neesi nevienu bloķējis.",
|
"empty_column.blocks": "Pagaidām Tu neesi liedzis nevienu lietotāju.",
|
||||||
"empty_column.bookmarked_statuses": "Pašlaik Tev nav neviena grāmatzīmēs pievienota ieraksta. Kad tādu pievienosi, tas parādīsies šeit.",
|
"empty_column.bookmarked_statuses": "Pašlaik Tev nav neviena grāmatzīmēs pievienota ieraksta. Kad tādu pievienosi, tas parādīsies šeit.",
|
||||||
"empty_column.community": "Vietējā laika līnija ir tukša. Uzraksti kaut ko publiski, lai iekustinātu visu!",
|
"empty_column.community": "Vietējā laika līnija ir tukša. Uzraksti kaut ko publiski, lai iekustinātu visu!",
|
||||||
"empty_column.direct": "Tev vēl nav privātu pieminēšanu. Kad Tu nosūtīsi vai saņemsi kādu, tā pārādīsies šeit.",
|
"empty_column.direct": "Tev vēl nav privātu pieminēšanu. Kad Tu nosūtīsi vai saņemsi kādu, tā pārādīsies šeit.",
|
||||||
"empty_column.domain_blocks": "Vēl nav neviena bloķēta domēna.",
|
"empty_column.domain_blocks": "Vēl nav neviena liegta domēna.",
|
||||||
"empty_column.explore_statuses": "Pašlaik nav nekā aktuāla. Ieskaties šeit vēlāk!",
|
"empty_column.explore_statuses": "Pašlaik nav nekā aktuāla. Ieskaties šeit vēlāk!",
|
||||||
"empty_column.favourited_statuses": "Tev vēl nav izlasei pievienotu ierakstu. Kad pievienosi kādu, tas tiks parādīts šeit.",
|
"empty_column.favourited_statuses": "Tev vēl nav izlasei pievienotu ierakstu. Kad pievienosi kādu, tas tiks parādīts šeit.",
|
||||||
"empty_column.favourites": "Šo ierakstu vēl neviens nav pievienojis izlasei. Kad kāds to izdarīs, tas parādīsies šeit.",
|
"empty_column.favourites": "Šo ierakstu vēl neviens nav pievienojis izlasei. Kad kāds to izdarīs, tas parādīsies šeit.",
|
||||||
|
|
@ -418,7 +425,7 @@
|
||||||
"intervals.full.hours": "{number, plural, one {# stunda} other {# stundas}}",
|
"intervals.full.hours": "{number, plural, one {# stunda} other {# stundas}}",
|
||||||
"intervals.full.minutes": "{number, plural, one {# minūte} other {# minūtes}}",
|
"intervals.full.minutes": "{number, plural, one {# minūte} other {# minūtes}}",
|
||||||
"keyboard_shortcuts.back": "Pāriet atpakaļ",
|
"keyboard_shortcuts.back": "Pāriet atpakaļ",
|
||||||
"keyboard_shortcuts.blocked": "Atvērt bloķēto lietotāju sarakstu",
|
"keyboard_shortcuts.blocked": "Atvērt liegto lietotāju sarakstu",
|
||||||
"keyboard_shortcuts.boost": "Pastiprināt ierakstu",
|
"keyboard_shortcuts.boost": "Pastiprināt ierakstu",
|
||||||
"keyboard_shortcuts.column": "Fokusēt kolonnu",
|
"keyboard_shortcuts.column": "Fokusēt kolonnu",
|
||||||
"keyboard_shortcuts.compose": "Fokusēt veidojamā teksta lauku",
|
"keyboard_shortcuts.compose": "Fokusēt veidojamā teksta lauku",
|
||||||
|
|
@ -492,10 +499,10 @@
|
||||||
"navigation_bar.administration": "Pārvaldība",
|
"navigation_bar.administration": "Pārvaldība",
|
||||||
"navigation_bar.advanced_interface": "Atvērt paplašinātā tīmekļa saskarnē",
|
"navigation_bar.advanced_interface": "Atvērt paplašinātā tīmekļa saskarnē",
|
||||||
"navigation_bar.automated_deletion": "Automātiska ziņu dzēšana",
|
"navigation_bar.automated_deletion": "Automātiska ziņu dzēšana",
|
||||||
"navigation_bar.blocks": "Bloķētie lietotāji",
|
"navigation_bar.blocks": "Liegtie lietotāji",
|
||||||
"navigation_bar.bookmarks": "Grāmatzīmes",
|
"navigation_bar.bookmarks": "Grāmatzīmes",
|
||||||
"navigation_bar.direct": "Privātas pieminēšanas",
|
"navigation_bar.direct": "Privātas pieminēšanas",
|
||||||
"navigation_bar.domain_blocks": "Bloķētie domēni",
|
"navigation_bar.domain_blocks": "Liegtie domēni",
|
||||||
"navigation_bar.favourites": "Izlase",
|
"navigation_bar.favourites": "Izlase",
|
||||||
"navigation_bar.filters": "Apklusinātie vārdi",
|
"navigation_bar.filters": "Apklusinātie vārdi",
|
||||||
"navigation_bar.follow_requests": "Sekošanas pieprasījumi",
|
"navigation_bar.follow_requests": "Sekošanas pieprasījumi",
|
||||||
|
|
@ -641,8 +648,8 @@
|
||||||
"reply_indicator.attachments": "{count, plural, zero{# pielikumu} one {# pielikums} other {# pielikumi}}",
|
"reply_indicator.attachments": "{count, plural, zero{# pielikumu} one {# pielikums} other {# pielikumi}}",
|
||||||
"reply_indicator.cancel": "Atcelt",
|
"reply_indicator.cancel": "Atcelt",
|
||||||
"reply_indicator.poll": "Aptauja",
|
"reply_indicator.poll": "Aptauja",
|
||||||
"report.block": "Bloķēt",
|
"report.block": "Liegt",
|
||||||
"report.block_explanation": "Tu neredzēsi viņu ierakstus. Viņi nevarēs redzēt Tavus ierakstus vai sekot tev. Viņi varēs saprast, ka ir liegti.",
|
"report.block_explanation": "Tu neredzēsi viņu ierakstus. Viņi nevarēs redzēt Tavus ierakstus vai sekot Tev. Viņi varēs saprast, ka ir liegti.",
|
||||||
"report.categories.legal": "Tiesisks",
|
"report.categories.legal": "Tiesisks",
|
||||||
"report.categories.other": "Citi",
|
"report.categories.other": "Citi",
|
||||||
"report.categories.spam": "Mēstule",
|
"report.categories.spam": "Mēstule",
|
||||||
|
|
@ -723,7 +730,7 @@
|
||||||
"status.admin_account": "Atvērt @{name} satura pārraudzības saskarni",
|
"status.admin_account": "Atvērt @{name} satura pārraudzības saskarni",
|
||||||
"status.admin_domain": "Atvērt {domain} satura pārraudzības saskarni",
|
"status.admin_domain": "Atvērt {domain} satura pārraudzības saskarni",
|
||||||
"status.admin_status": "Atvērt šo ziņu satura pārraudzības saskarnē",
|
"status.admin_status": "Atvērt šo ziņu satura pārraudzības saskarnē",
|
||||||
"status.block": "Bloķēt @{name}",
|
"status.block": "Liegt @{name}",
|
||||||
"status.bookmark": "Grāmatzīme",
|
"status.bookmark": "Grāmatzīme",
|
||||||
"status.cancel_reblog_private": "Nepastiprināt",
|
"status.cancel_reblog_private": "Nepastiprināt",
|
||||||
"status.cannot_reblog": "Šo ierakstu nevar pastiprināt",
|
"status.cannot_reblog": "Šo ierakstu nevar pastiprināt",
|
||||||
|
|
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Lí iáu無加添任何冊籤。Nā是lí加添冊籤,伊ē佇tsia顯示。",
|
"empty_column.bookmarked_statuses": "Lí iáu無加添任何冊籤。Nā是lí加添冊籤,伊ē佇tsia顯示。",
|
||||||
"empty_column.community": "本站時間線是空ê。緊來公開PO文oh!",
|
"empty_column.community": "本站時間線是空ê。緊來公開PO文oh!",
|
||||||
"empty_column.direct": "Lí iáu無任何ê私人訊息。Nā是lí送á是收著私人訊息,ē佇tsia顯示。.",
|
"empty_column.direct": "Lí iáu無任何ê私人訊息。Nā是lí送á是收著私人訊息,ē佇tsia顯示。.",
|
||||||
|
"empty_column.disabled_feed": "Tsit ê feed已經hōo lí ê服侍器ê管理員停用。",
|
||||||
"empty_column.domain_blocks": "Iáu無封鎖任何網域。",
|
"empty_column.domain_blocks": "Iáu無封鎖任何網域。",
|
||||||
"empty_column.explore_statuses": "目前iáu無有流行ê趨勢,請sió等tsi̍t-ē,koh確認。",
|
"empty_column.explore_statuses": "目前iáu無有流行ê趨勢,請sió等tsi̍t-ē,koh確認。",
|
||||||
"empty_column.favourited_statuses": "Lí iáu無加添任何收藏 ê PO文。Nā是lí加收藏,伊ē佇tsia顯示。",
|
"empty_column.favourited_statuses": "Lí iáu無加添任何收藏 ê PO文。Nā是lí加收藏,伊ē佇tsia顯示。",
|
||||||
|
|
@ -753,6 +754,7 @@
|
||||||
"privacy.unlisted.short": "恬靜公開",
|
"privacy.unlisted.short": "恬靜公開",
|
||||||
"privacy_policy.last_updated": "上尾更新tī:{date}",
|
"privacy_policy.last_updated": "上尾更新tī:{date}",
|
||||||
"privacy_policy.title": "隱私權政策",
|
"privacy_policy.title": "隱私權政策",
|
||||||
|
"quote_error.edit": "佇編輯PO文ê時陣bē當加引文。",
|
||||||
"quote_error.poll": "有投票ê PO文bē當引用。",
|
"quote_error.poll": "有投票ê PO文bē當引用。",
|
||||||
"quote_error.quote": "Tsi̍t改kan-ta ē當引用tsi̍t篇PO文。",
|
"quote_error.quote": "Tsi̍t改kan-ta ē當引用tsi̍t篇PO文。",
|
||||||
"quote_error.unauthorized": "Lí bô權利引用tsit篇PO文。",
|
"quote_error.unauthorized": "Lí bô權利引用tsit篇PO文。",
|
||||||
|
|
@ -875,7 +877,7 @@
|
||||||
"status.contains_quote": "包含引用",
|
"status.contains_quote": "包含引用",
|
||||||
"status.context.loading": "載入其他回應",
|
"status.context.loading": "載入其他回應",
|
||||||
"status.context.loading_error": "Bē當載入新回應",
|
"status.context.loading_error": "Bē當載入新回應",
|
||||||
"status.context.loading_success": "回應lóng載入ah",
|
"status.context.loading_success": "新ê回應載入ah",
|
||||||
"status.context.more_replies_found": "Tshuē-tio̍h其他回應",
|
"status.context.more_replies_found": "Tshuē-tio̍h其他回應",
|
||||||
"status.context.retry": "Koh試",
|
"status.context.retry": "Koh試",
|
||||||
"status.context.show": "顯示",
|
"status.context.show": "顯示",
|
||||||
|
|
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Jij hebt nog geen berichten aan je bladwijzers toegevoegd. Wanneer je er een aan jouw bladwijzers toevoegt, valt deze hier te zien.",
|
"empty_column.bookmarked_statuses": "Jij hebt nog geen berichten aan je bladwijzers toegevoegd. Wanneer je er een aan jouw bladwijzers toevoegt, valt deze hier te zien.",
|
||||||
"empty_column.community": "De lokale tijdlijn is nog leeg. Plaats een openbaar bericht om de spits af te bijten!",
|
"empty_column.community": "De lokale tijdlijn is nog leeg. Plaats een openbaar bericht om de spits af te bijten!",
|
||||||
"empty_column.direct": "Je hebt nog geen privéberichten. Wanneer je er een verstuurt of ontvangt, komen deze hier te staan.",
|
"empty_column.direct": "Je hebt nog geen privéberichten. Wanneer je er een verstuurt of ontvangt, komen deze hier te staan.",
|
||||||
|
"empty_column.disabled_feed": "Deze tijdlijn is uitgeschakeld door je serverbeheerders.",
|
||||||
"empty_column.domain_blocks": "Er zijn nog geen geblokkeerde servers.",
|
"empty_column.domain_blocks": "Er zijn nog geen geblokkeerde servers.",
|
||||||
"empty_column.explore_statuses": "Momenteel zijn er geen trends. Kom later terug!",
|
"empty_column.explore_statuses": "Momenteel zijn er geen trends. Kom later terug!",
|
||||||
"empty_column.favourited_statuses": "Jij hebt nog geen favoriete berichten. Wanneer je een bericht als favoriet markeert, valt deze hier te zien.",
|
"empty_column.favourited_statuses": "Jij hebt nog geen favoriete berichten. Wanneer je een bericht als favoriet markeert, valt deze hier te zien.",
|
||||||
|
|
@ -876,7 +877,7 @@
|
||||||
"status.contains_quote": "Bevat citaat",
|
"status.contains_quote": "Bevat citaat",
|
||||||
"status.context.loading": "Meer reacties laden",
|
"status.context.loading": "Meer reacties laden",
|
||||||
"status.context.loading_error": "Kon geen nieuwe reacties laden",
|
"status.context.loading_error": "Kon geen nieuwe reacties laden",
|
||||||
"status.context.loading_success": "Alle reacties zijn geladen",
|
"status.context.loading_success": "Nieuwe reacties geladen",
|
||||||
"status.context.more_replies_found": "Meer reacties gevonden",
|
"status.context.more_replies_found": "Meer reacties gevonden",
|
||||||
"status.context.retry": "Opnieuw proberen",
|
"status.context.retry": "Opnieuw proberen",
|
||||||
"status.context.show": "Tonen",
|
"status.context.show": "Tonen",
|
||||||
|
|
@ -912,7 +913,7 @@
|
||||||
"status.quote_error.limited_account_hint.action": "Alsnog tonen",
|
"status.quote_error.limited_account_hint.action": "Alsnog tonen",
|
||||||
"status.quote_error.limited_account_hint.title": "Dit account is door de moderatoren van {domain} verborgen.",
|
"status.quote_error.limited_account_hint.title": "Dit account is door de moderatoren van {domain} verborgen.",
|
||||||
"status.quote_error.not_available": "Bericht niet beschikbaar",
|
"status.quote_error.not_available": "Bericht niet beschikbaar",
|
||||||
"status.quote_error.pending_approval": "Bericht in afwachting",
|
"status.quote_error.pending_approval": "Bericht in afwachting van goedkeuring",
|
||||||
"status.quote_error.pending_approval_popout.body": "Op Mastodon kun je bepalen of iemand je mag citeren. Dit bericht is in afwachting van de goedkeuring van de oorspronkelijke auteur.",
|
"status.quote_error.pending_approval_popout.body": "Op Mastodon kun je bepalen of iemand je mag citeren. Dit bericht is in afwachting van de goedkeuring van de oorspronkelijke auteur.",
|
||||||
"status.quote_error.revoked": "Bericht verwijderd door auteur",
|
"status.quote_error.revoked": "Bericht verwijderd door auteur",
|
||||||
"status.quote_followers_only": "Alleen volgers mogen dit bericht citeren",
|
"status.quote_followers_only": "Alleen volgers mogen dit bericht citeren",
|
||||||
|
|
|
||||||
|
|
@ -753,6 +753,7 @@
|
||||||
"privacy.unlisted.short": "Stille offentleg",
|
"privacy.unlisted.short": "Stille offentleg",
|
||||||
"privacy_policy.last_updated": "Sist oppdatert {date}",
|
"privacy_policy.last_updated": "Sist oppdatert {date}",
|
||||||
"privacy_policy.title": "Personvernsreglar",
|
"privacy_policy.title": "Personvernsreglar",
|
||||||
|
"quote_error.edit": "Du kan ikkje leggja til sitat når du redigerer eit innlegg.",
|
||||||
"quote_error.poll": "Du kan ikkje sitera meiningsmålingar.",
|
"quote_error.poll": "Du kan ikkje sitera meiningsmålingar.",
|
||||||
"quote_error.quote": "Det er berre lov med eitt sitat om gongen.",
|
"quote_error.quote": "Det er berre lov med eitt sitat om gongen.",
|
||||||
"quote_error.unauthorized": "Du har ikkje løyve til å sitera dette innlegget.",
|
"quote_error.unauthorized": "Du har ikkje løyve til å sitera dette innlegget.",
|
||||||
|
|
@ -875,7 +876,7 @@
|
||||||
"status.contains_quote": "Inneheld eit sitat",
|
"status.contains_quote": "Inneheld eit sitat",
|
||||||
"status.context.loading": "Lastar fleire svar",
|
"status.context.loading": "Lastar fleire svar",
|
||||||
"status.context.loading_error": "Kunne ikkje lasta nye svar",
|
"status.context.loading_error": "Kunne ikkje lasta nye svar",
|
||||||
"status.context.loading_success": "Alle svara er lasta",
|
"status.context.loading_success": "Dei nye svara er lasta",
|
||||||
"status.context.more_replies_found": "Fann fleire svar",
|
"status.context.more_replies_found": "Fann fleire svar",
|
||||||
"status.context.retry": "Prøv om att",
|
"status.context.retry": "Prøv om att",
|
||||||
"status.context.show": "Vis",
|
"status.context.show": "Vis",
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
"account.block": "Blokuj @{name}",
|
"account.block": "Blokuj @{name}",
|
||||||
"account.block_domain": "Blokuj wszystko z {domain}",
|
"account.block_domain": "Blokuj wszystko z {domain}",
|
||||||
"account.block_short": "Zablokuj",
|
"account.block_short": "Zablokuj",
|
||||||
"account.blocked": "Zablokowany(-a)",
|
"account.blocked": "Zablokowano",
|
||||||
"account.blocking": "Blokowanie",
|
"account.blocking": "Blokowanie",
|
||||||
"account.cancel_follow_request": "Nie obserwuj",
|
"account.cancel_follow_request": "Nie obserwuj",
|
||||||
"account.copy": "Skopiuj link do profilu",
|
"account.copy": "Skopiuj link do profilu",
|
||||||
|
|
@ -28,11 +28,12 @@
|
||||||
"account.disable_notifications": "Przestań powiadamiać mnie o wpisach @{name}",
|
"account.disable_notifications": "Przestań powiadamiać mnie o wpisach @{name}",
|
||||||
"account.domain_blocking": "Blokowanie domeny",
|
"account.domain_blocking": "Blokowanie domeny",
|
||||||
"account.edit_profile": "Edytuj profil",
|
"account.edit_profile": "Edytuj profil",
|
||||||
|
"account.edit_profile_short": "Edytuj",
|
||||||
"account.enable_notifications": "Powiadamiaj mnie o wpisach @{name}",
|
"account.enable_notifications": "Powiadamiaj mnie o wpisach @{name}",
|
||||||
"account.endorse": "Wyróżnij na profilu",
|
"account.endorse": "Wyróżnij na profilu",
|
||||||
"account.familiar_followers_many": "Obserwowane przez: {name1}, {name2} i {othersCount, plural, one {jeszcze jedną osobę, którą znasz} few {# inne osoby, które znasz} many {# innych osób, które znasz} other {# innych osób, które znasz}}",
|
"account.familiar_followers_many": "To konto jest obserwowane przez {name1}, {name2} i {othersCount, plural, one {jedną inną znaną ci osobę} few {# inne znane ci osoby} many {# innych znanych ci osób} other {# innych znanych ci osób}}",
|
||||||
"account.familiar_followers_one": "Obserwowane przez {name1}",
|
"account.familiar_followers_one": "To konto jest obserwowane przez {name1}",
|
||||||
"account.familiar_followers_two": "Obserwowane przez {name1} i {name2}",
|
"account.familiar_followers_two": "To konto jest obserwowane przez {name1} i {name2}",
|
||||||
"account.featured": "Wyróżnione",
|
"account.featured": "Wyróżnione",
|
||||||
"account.featured.accounts": "Profile",
|
"account.featured.accounts": "Profile",
|
||||||
"account.featured.hashtags": "Tagi",
|
"account.featured.hashtags": "Tagi",
|
||||||
|
|
@ -40,10 +41,15 @@
|
||||||
"account.featured_tags.last_status_never": "Brak postów",
|
"account.featured_tags.last_status_never": "Brak postów",
|
||||||
"account.follow": "Obserwuj",
|
"account.follow": "Obserwuj",
|
||||||
"account.follow_back": "Również obserwuj",
|
"account.follow_back": "Również obserwuj",
|
||||||
|
"account.follow_back_short": "Również obserwuj",
|
||||||
|
"account.follow_request": "Poproś o zgodę na obserwowanie",
|
||||||
|
"account.follow_request_cancel": "Anuluj",
|
||||||
|
"account.follow_request_cancel_short": "Anuluj",
|
||||||
|
"account.follow_request_short": "Poproś",
|
||||||
"account.followers": "Obserwujący",
|
"account.followers": "Obserwujący",
|
||||||
"account.followers.empty": "Nikt jeszcze nie obserwuje tego użytkownika.",
|
"account.followers.empty": "Nikt jeszcze nie obserwuje tego użytkownika.",
|
||||||
"account.followers_counter": "{count, plural, one {{counter} obserwujący} few {{counter} obserwujących} many {{counter} obserwujących} other {{counter} obserwujących}}",
|
"account.followers_counter": "{count, plural, one {{counter} obserwujący} few {{counter} obserwujących} many {{counter} obserwujących} other {{counter} obserwujących}}",
|
||||||
"account.followers_you_know_counter": "{counter} które znasz",
|
"account.followers_you_know_counter": "znasz {counter}",
|
||||||
"account.following": "Obserwowani",
|
"account.following": "Obserwowani",
|
||||||
"account.following_counter": "{count, plural, one {{counter} obserwowany} few {{counter} obserwowanych} many {{counter} obserwowanych} other {{counter} obserwowanych}}",
|
"account.following_counter": "{count, plural, one {{counter} obserwowany} few {{counter} obserwowanych} many {{counter} obserwowanych} other {{counter} obserwowanych}}",
|
||||||
"account.follows.empty": "Ten użytkownik nie obserwuje jeszcze nikogo.",
|
"account.follows.empty": "Ten użytkownik nie obserwuje jeszcze nikogo.",
|
||||||
|
|
@ -62,15 +68,15 @@
|
||||||
"account.mute_notifications_short": "Wycisz powiadomienia",
|
"account.mute_notifications_short": "Wycisz powiadomienia",
|
||||||
"account.mute_short": "Wycisz",
|
"account.mute_short": "Wycisz",
|
||||||
"account.muted": "Wyciszony",
|
"account.muted": "Wyciszony",
|
||||||
"account.muting": "Wyciszenie",
|
"account.muting": "Wyciszanie",
|
||||||
"account.mutual": "Obserwujecie siebie nazwajem",
|
"account.mutual": "Obserwujecie się wzajemnie",
|
||||||
"account.no_bio": "Brak opisu.",
|
"account.no_bio": "Brak opisu.",
|
||||||
"account.open_original_page": "Otwórz stronę oryginalną",
|
"account.open_original_page": "Otwórz stronę oryginalną",
|
||||||
"account.posts": "Wpisy",
|
"account.posts": "Wpisy",
|
||||||
"account.posts_with_replies": "Wpisy i odpowiedzi",
|
"account.posts_with_replies": "Wpisy i odpowiedzi",
|
||||||
"account.remove_from_followers": "Usuń {name} z obserwujących",
|
"account.remove_from_followers": "Usuń {name} z obserwujących",
|
||||||
"account.report": "Zgłoś @{name}",
|
"account.report": "Zgłoś @{name}",
|
||||||
"account.requested_follow": "{name} chce cię zaobserwować",
|
"account.requested_follow": "{name} chce cię obserwować",
|
||||||
"account.requests_to_follow_you": "Prośby o obserwowanie",
|
"account.requests_to_follow_you": "Prośby o obserwowanie",
|
||||||
"account.share": "Udostępnij profil @{name}",
|
"account.share": "Udostępnij profil @{name}",
|
||||||
"account.show_reblogs": "Pokazuj podbicia od @{name}",
|
"account.show_reblogs": "Pokazuj podbicia od @{name}",
|
||||||
|
|
@ -85,8 +91,8 @@
|
||||||
"account.unmute_notifications_short": "Nie wyciszaj powiadomień",
|
"account.unmute_notifications_short": "Nie wyciszaj powiadomień",
|
||||||
"account.unmute_short": "Nie wyciszaj",
|
"account.unmute_short": "Nie wyciszaj",
|
||||||
"account_note.placeholder": "Kliknij, aby dodać notatkę",
|
"account_note.placeholder": "Kliknij, aby dodać notatkę",
|
||||||
"admin.dashboard.daily_retention": "Wskaźnik utrzymania użytkowników po dniach od rejestracji",
|
"admin.dashboard.daily_retention": "Wskaźnik utrzymania użytkowników według dni od rejestracji",
|
||||||
"admin.dashboard.monthly_retention": "Wskaźnik utrzymania użytkowników po miesiącach od rejestracji",
|
"admin.dashboard.monthly_retention": "Wskaźnik utrzymania użytkowników według miesięcy od rejestracji",
|
||||||
"admin.dashboard.retention.average": "Średnia",
|
"admin.dashboard.retention.average": "Średnia",
|
||||||
"admin.dashboard.retention.cohort": "Miesiąc rejestracji",
|
"admin.dashboard.retention.cohort": "Miesiąc rejestracji",
|
||||||
"admin.dashboard.retention.cohort_size": "Nowi użytkownicy",
|
"admin.dashboard.retention.cohort_size": "Nowi użytkownicy",
|
||||||
|
|
@ -111,10 +117,10 @@
|
||||||
"annual_report.summary.archetype.lurker": "Czyhający",
|
"annual_report.summary.archetype.lurker": "Czyhający",
|
||||||
"annual_report.summary.archetype.oracle": "Wyrocznia",
|
"annual_report.summary.archetype.oracle": "Wyrocznia",
|
||||||
"annual_report.summary.archetype.pollster": "Ankieter",
|
"annual_report.summary.archetype.pollster": "Ankieter",
|
||||||
"annual_report.summary.archetype.replier": "Motyl społeczny",
|
"annual_report.summary.archetype.replier": "Towarzyski motyl",
|
||||||
"annual_report.summary.followers.followers": "obserwujących",
|
"annual_report.summary.followers.followers": "obserwujących",
|
||||||
"annual_report.summary.followers.total": "łącznie {count}",
|
"annual_report.summary.followers.total": "łącznie {count}",
|
||||||
"annual_report.summary.here_it_is": "Oto przegląd Twojego {year} roku:",
|
"annual_report.summary.here_it_is": "Oto przegląd twojego {year} roku:",
|
||||||
"annual_report.summary.highlighted_post.by_favourites": "najbardziej lubiany wpis",
|
"annual_report.summary.highlighted_post.by_favourites": "najbardziej lubiany wpis",
|
||||||
"annual_report.summary.highlighted_post.by_reblogs": "najczęściej podbijany wpis",
|
"annual_report.summary.highlighted_post.by_reblogs": "najczęściej podbijany wpis",
|
||||||
"annual_report.summary.highlighted_post.by_replies": "wpis z największą liczbą komentarzy",
|
"annual_report.summary.highlighted_post.by_replies": "wpis z największą liczbą komentarzy",
|
||||||
|
|
@ -187,7 +193,7 @@
|
||||||
"community.column_settings.media_only": "Tylko multimedia",
|
"community.column_settings.media_only": "Tylko multimedia",
|
||||||
"community.column_settings.remote_only": "Tylko zdalne",
|
"community.column_settings.remote_only": "Tylko zdalne",
|
||||||
"compose.language.change": "Zmień język",
|
"compose.language.change": "Zmień język",
|
||||||
"compose.language.search": "Szukaj języków...",
|
"compose.language.search": "Wyszukaj języki...",
|
||||||
"compose.published.body": "Wpis został opublikowany.",
|
"compose.published.body": "Wpis został opublikowany.",
|
||||||
"compose.published.open": "Otwórz",
|
"compose.published.open": "Otwórz",
|
||||||
"compose.saved.body": "Wpis został zapisany.",
|
"compose.saved.body": "Wpis został zapisany.",
|
||||||
|
|
@ -220,14 +226,14 @@
|
||||||
"confirmations.delete_list.title": "Usunąć listę?",
|
"confirmations.delete_list.title": "Usunąć listę?",
|
||||||
"confirmations.discard_draft.confirm": "Odrzuć i kontynuuj",
|
"confirmations.discard_draft.confirm": "Odrzuć i kontynuuj",
|
||||||
"confirmations.discard_draft.edit.cancel": "Wznów edytowanie",
|
"confirmations.discard_draft.edit.cancel": "Wznów edytowanie",
|
||||||
"confirmations.discard_draft.edit.message": "Kontynuowanie spowoduje utratę wszystkich zmian wprowadzonych przez Ciebie w aktualnie edytowanym poście.",
|
"confirmations.discard_draft.edit.message": "Kontynuowanie spowoduje utratę wszelkich zmian wprowadzonych w aktualnie edytowanym wpisie.",
|
||||||
"confirmations.discard_draft.edit.title": "Odrzucić zmiany w poście?",
|
"confirmations.discard_draft.edit.title": "Czy chcesz odrzucić zmiany w swoim wpisie?",
|
||||||
"confirmations.discard_draft.post.cancel": "Wznów wersję roboczą",
|
"confirmations.discard_draft.post.cancel": "Wznów szkic",
|
||||||
"confirmations.discard_draft.post.message": "Kontynuacja odrzuci aktualnie tworzony post.",
|
"confirmations.discard_draft.post.message": "Kontynuowanie spowoduje usunięcie aktualnie tworzonego wpisu.",
|
||||||
"confirmations.discard_draft.post.title": "Anulować wersję roboczą?",
|
"confirmations.discard_draft.post.title": "Odrzucić szkic wpisu?",
|
||||||
"confirmations.discard_edit_media.confirm": "Odrzuć",
|
"confirmations.discard_edit_media.confirm": "Odrzuć",
|
||||||
"confirmations.discard_edit_media.message": "Masz niezapisane zmiany w opisie lub podglądzie, odrzucić je mimo to?",
|
"confirmations.discard_edit_media.message": "Masz niezapisane zmiany w opisie lub podglądzie multimediów. Czy chcesz je mimo to odrzucić?",
|
||||||
"confirmations.follow_to_list.confirm": "Zaobserwuj i dodaj do listy",
|
"confirmations.follow_to_list.confirm": "Obserwuj i dodaj do listy",
|
||||||
"confirmations.follow_to_list.message": "Musisz obserwować {name}, aby dodać do listy.",
|
"confirmations.follow_to_list.message": "Musisz obserwować {name}, aby dodać do listy.",
|
||||||
"confirmations.follow_to_list.title": "Zaobserwować?",
|
"confirmations.follow_to_list.title": "Zaobserwować?",
|
||||||
"confirmations.logout.confirm": "Wyloguj",
|
"confirmations.logout.confirm": "Wyloguj",
|
||||||
|
|
@ -235,19 +241,28 @@
|
||||||
"confirmations.logout.title": "Wylogować?",
|
"confirmations.logout.title": "Wylogować?",
|
||||||
"confirmations.missing_alt_text.confirm": "Dodaj opis pomocniczy",
|
"confirmations.missing_alt_text.confirm": "Dodaj opis pomocniczy",
|
||||||
"confirmations.missing_alt_text.message": "Twój wpis zawiera multimedia bez tekstu alternatywnego. Dodanie opisów pomaga zwiększyć dostępność tych treści dla większej liczby osób.",
|
"confirmations.missing_alt_text.message": "Twój wpis zawiera multimedia bez tekstu alternatywnego. Dodanie opisów pomaga zwiększyć dostępność tych treści dla większej liczby osób.",
|
||||||
"confirmations.missing_alt_text.secondary": "Opublikuj mimo to ",
|
"confirmations.missing_alt_text.secondary": "Opublikuj mimo wszystko",
|
||||||
"confirmations.missing_alt_text.title": "Dodać tekst pomocniczy?",
|
"confirmations.missing_alt_text.title": "Dodać tekst pomocniczy?",
|
||||||
"confirmations.mute.confirm": "Wycisz",
|
"confirmations.mute.confirm": "Wycisz",
|
||||||
|
"confirmations.quiet_post_quote_info.dismiss": "Nie przypominaj mi ponownie",
|
||||||
|
"confirmations.quiet_post_quote_info.got_it": "Rozumiem",
|
||||||
|
"confirmations.quiet_post_quote_info.message": "Kiedy cytujesz niewidoczny wpis publiczny, twój wpis zostanie ukryty z popularnych osi czasu.",
|
||||||
|
"confirmations.quiet_post_quote_info.title": "Cytowanie niewidocznych wpisów publicznych",
|
||||||
"confirmations.redraft.confirm": "Usuń i popraw",
|
"confirmations.redraft.confirm": "Usuń i popraw",
|
||||||
"confirmations.redraft.message": "Czy na pewno chcesz usunąć i poprawić ten wpis? Polubienia, podbicia i komentarze pierwotnego wpisu zostaną utracone.",
|
"confirmations.redraft.message": "Czy na pewno chcesz usunąć i poprawić ten wpis? Polubienia, podbicia i komentarze pierwotnego wpisu zostaną utracone.",
|
||||||
"confirmations.redraft.title": "Usunąć i poprawić wpis?",
|
"confirmations.redraft.title": "Usunąć i poprawić wpis?",
|
||||||
"confirmations.remove_from_followers.confirm": "Usuń obserwującego",
|
"confirmations.remove_from_followers.confirm": "Usuń z obserwujących",
|
||||||
"confirmations.remove_from_followers.message": "{name} przestanie Cię obserwować. Czy na pewno chcesz kontynuować?",
|
"confirmations.remove_from_followers.message": "{name} przestanie cię obserwować. Czy na pewno chcesz kontynuować?",
|
||||||
"confirmations.remove_from_followers.title": "Usunąć obserwującego?",
|
"confirmations.remove_from_followers.title": "Usunąć z obserwujących?",
|
||||||
"confirmations.revoke_quote.confirm": "Usuń post",
|
"confirmations.revoke_quote.confirm": "Usuń wpis",
|
||||||
"confirmations.revoke_quote.message": "Tej akcji nie można cofnąć.",
|
"confirmations.revoke_quote.message": "Tej czynności nie można cofnąć.",
|
||||||
"confirmations.revoke_quote.title": "Usuń post?",
|
"confirmations.revoke_quote.title": "Usunąć wpis?",
|
||||||
|
"confirmations.unblock.confirm": "Odblokuj",
|
||||||
|
"confirmations.unblock.title": "Odblokować {name}?",
|
||||||
"confirmations.unfollow.confirm": "Nie obserwuj",
|
"confirmations.unfollow.confirm": "Nie obserwuj",
|
||||||
|
"confirmations.unfollow.title": "Przestać obserwować {name}?",
|
||||||
|
"confirmations.withdraw_request.confirm": "Wycofaj prośbę",
|
||||||
|
"confirmations.withdraw_request.title": "Wycofać prośbę o zgodę na obserwowanie {name}?",
|
||||||
"content_warning.hide": "Ukryj wpis",
|
"content_warning.hide": "Ukryj wpis",
|
||||||
"content_warning.show": "Pokaż mimo to",
|
"content_warning.show": "Pokaż mimo to",
|
||||||
"content_warning.show_more": "Pokaż więcej",
|
"content_warning.show_more": "Pokaż więcej",
|
||||||
|
|
@ -281,7 +296,7 @@
|
||||||
"domain_pill.server": "Serwer",
|
"domain_pill.server": "Serwer",
|
||||||
"domain_pill.their_handle": "Nazwa:",
|
"domain_pill.their_handle": "Nazwa:",
|
||||||
"domain_pill.their_server": "Cyfrowy dom wszystkich wpisów tej osoby.",
|
"domain_pill.their_server": "Cyfrowy dom wszystkich wpisów tej osoby.",
|
||||||
"domain_pill.their_username": "Unikalny identyfikator na serwerze. Możliwe jest znalezienie użytkowników o tej samej nazwie użytkownika na różnych serwerach.",
|
"domain_pill.their_username": "Unikalny identyfikator na serwerze. Możliwe jest znalezienie użytkowników o tej samej nazwie na różnych serwerach.",
|
||||||
"domain_pill.username": "Nazwa użytkownika",
|
"domain_pill.username": "Nazwa użytkownika",
|
||||||
"domain_pill.whats_in_a_handle": "Z czego składa się nazwa?",
|
"domain_pill.whats_in_a_handle": "Z czego składa się nazwa?",
|
||||||
"domain_pill.who_they_are": "Dzięki temu, że nazwy wskazują, kim ktoś jest i gdzie się znajduje, możesz wchodzić w interakcje z innymi z różnych <button>sieci społecznościowych opartych na ActivityPub</button>.",
|
"domain_pill.who_they_are": "Dzięki temu, że nazwy wskazują, kim ktoś jest i gdzie się znajduje, możesz wchodzić w interakcje z innymi z różnych <button>sieci społecznościowych opartych na ActivityPub</button>.",
|
||||||
|
|
@ -303,12 +318,12 @@
|
||||||
"emoji_button.objects": "Obiekty",
|
"emoji_button.objects": "Obiekty",
|
||||||
"emoji_button.people": "Ludzie",
|
"emoji_button.people": "Ludzie",
|
||||||
"emoji_button.recent": "Najczęściej używane",
|
"emoji_button.recent": "Najczęściej używane",
|
||||||
"emoji_button.search": "Szukaj…",
|
"emoji_button.search": "Wyszukaj...",
|
||||||
"emoji_button.search_results": "Wyniki wyszukiwania",
|
"emoji_button.search_results": "Wyniki wyszukiwania",
|
||||||
"emoji_button.symbols": "Symbole",
|
"emoji_button.symbols": "Symbole",
|
||||||
"emoji_button.travel": "Podróże i miejsca",
|
"emoji_button.travel": "Podróże i miejsca",
|
||||||
"empty_column.account_featured.me": "Niczego jeszcze nie poleciłeś. Czy wiesz, że możesz wyświetlać swoje hashtagi, z których korzystasz najbardziej, a nawet konta znajomego na swoim profilu?",
|
"empty_column.account_featured.me": "Nie dodano jeszcze żadnych polecanych treści. Czy wiesz, że możesz wyróżnić najczęściej używane hashtagi, a nawet konta znajomych na swoim profilu?",
|
||||||
"empty_column.account_featured.other": "{acct} nie wyróżnił jeszcze nic. Czy wiesz, że możesz wyświetlać swoje hashtagi, z których korzystasz najbardziej, a nawet konta znajomego na swoim profilu?",
|
"empty_column.account_featured.other": "Konto {acct} nie wyróżniło jeszcze żadnych treści. Czy wiesz, że możesz wyróżnić najczęściej używane hashtagi, a nawet konta znajomych w swoim profilu?",
|
||||||
"empty_column.account_featured_other.unknown": "To konto nie zostało jeszcze wyróżnione.",
|
"empty_column.account_featured_other.unknown": "To konto nie zostało jeszcze wyróżnione.",
|
||||||
"empty_column.account_hides_collections": "Ta osoba postanowiła nie udostępniać tych informacji",
|
"empty_column.account_hides_collections": "Ta osoba postanowiła nie udostępniać tych informacji",
|
||||||
"empty_column.account_suspended": "Konto zawieszone",
|
"empty_column.account_suspended": "Konto zawieszone",
|
||||||
|
|
@ -318,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Nie dodano jeszcze żadnego wpisu do zakładek. Gdy to zrobisz, pojawi się tutaj.",
|
"empty_column.bookmarked_statuses": "Nie dodano jeszcze żadnego wpisu do zakładek. Gdy to zrobisz, pojawi się tutaj.",
|
||||||
"empty_column.community": "Lokalna oś czasu jest pusta. Opublikuj coś, by ruszyć z kopyta!",
|
"empty_column.community": "Lokalna oś czasu jest pusta. Opublikuj coś, by ruszyć z kopyta!",
|
||||||
"empty_column.direct": "Nie ma tu jeszcze żadnych wzmianek bezpośrednich. Gdy je wyślesz lub otrzymasz, pojawią się tutaj.",
|
"empty_column.direct": "Nie ma tu jeszcze żadnych wzmianek bezpośrednich. Gdy je wyślesz lub otrzymasz, pojawią się tutaj.",
|
||||||
|
"empty_column.disabled_feed": "Ten kanał został wyłączony przez administratorów serwera.",
|
||||||
"empty_column.domain_blocks": "Brak zablokowanych domen.",
|
"empty_column.domain_blocks": "Brak zablokowanych domen.",
|
||||||
"empty_column.explore_statuses": "Nic nie cieszy się teraz popularnością. Sprawdź później!",
|
"empty_column.explore_statuses": "Nic nie cieszy się teraz popularnością. Sprawdź później!",
|
||||||
"empty_column.favourited_statuses": "Nie polubiono jeszcze żadnego wpisu. Gdy to zrobisz, pojawi się tutaj.",
|
"empty_column.favourited_statuses": "Nie polubiono jeszcze żadnego wpisu. Gdy to zrobisz, pojawi się tutaj.",
|
||||||
|
|
@ -342,10 +358,10 @@
|
||||||
"explore.trending_links": "Aktualności",
|
"explore.trending_links": "Aktualności",
|
||||||
"explore.trending_statuses": "Wpisy",
|
"explore.trending_statuses": "Wpisy",
|
||||||
"explore.trending_tags": "Hasztagi",
|
"explore.trending_tags": "Hasztagi",
|
||||||
"featured_carousel.header": "{count, plural, one {Przypięty post} other {Przypięte posty}}",
|
"featured_carousel.header": "{count, plural, one {przypięty wpis} few {przypięte wpisy} many {przypięte wpisy} other {przypięte wpisy}}",
|
||||||
"featured_carousel.next": "Następny",
|
"featured_carousel.next": "Dalej",
|
||||||
"featured_carousel.post": "Opublikuj",
|
"featured_carousel.post": "Opublikuj",
|
||||||
"featured_carousel.previous": "Poprzedni",
|
"featured_carousel.previous": "Wstecz",
|
||||||
"featured_carousel.slide": "{index} z {total}",
|
"featured_carousel.slide": "{index} z {total}",
|
||||||
"filter_modal.added.context_mismatch_explanation": "To filtrowanie nie dotyczy kategorii, w której pojawił się ten wpis. Jeśli chcesz, aby wpis był filtrowany również w tym kontekście, musisz edytować ustawienia filtrowania.",
|
"filter_modal.added.context_mismatch_explanation": "To filtrowanie nie dotyczy kategorii, w której pojawił się ten wpis. Jeśli chcesz, aby wpis był filtrowany również w tym kontekście, musisz edytować ustawienia filtrowania.",
|
||||||
"filter_modal.added.context_mismatch_title": "Niewłaściwy kontekst!",
|
"filter_modal.added.context_mismatch_title": "Niewłaściwy kontekst!",
|
||||||
|
|
@ -446,10 +462,12 @@
|
||||||
"ignore_notifications_modal.private_mentions_title": "Ignorować powiadomienia od niechcianych wzmianek bezpośrednich?",
|
"ignore_notifications_modal.private_mentions_title": "Ignorować powiadomienia od niechcianych wzmianek bezpośrednich?",
|
||||||
"info_button.label": "Pomoc",
|
"info_button.label": "Pomoc",
|
||||||
"info_button.what_is_alt_text": "<h1>Czym jest tekst alternatywny?</h1><p>Tekst alternatywny zawiera opisy zdjęć dla osób niedowidzących, korzystających z połączeń o niskiej przepustowości lub szukających dodatkowego kontekstu.</p>\n<p>Możesz poprawić dostępność i czytelność dla wszystkich, pisząc jasny, zwięzły i precyzyjny tekst alternatywny.</p>\n<ul>\n<li>Podkreśl ważne elementy</li>\n<li>Streść tekst widoczny na zdjęciach</li>\n<li>Używaj poprawnej struktury zdań</li>\n<li>Unikaj zbędnych informacji</li>\n<li>Skoncentruj się na kluczowych informacjach zawartych w złożonych wizualizacjach (takich jak diagramy lub mapy)</li>\n</ul>",
|
"info_button.what_is_alt_text": "<h1>Czym jest tekst alternatywny?</h1><p>Tekst alternatywny zawiera opisy zdjęć dla osób niedowidzących, korzystających z połączeń o niskiej przepustowości lub szukających dodatkowego kontekstu.</p>\n<p>Możesz poprawić dostępność i czytelność dla wszystkich, pisząc jasny, zwięzły i precyzyjny tekst alternatywny.</p>\n<ul>\n<li>Podkreśl ważne elementy</li>\n<li>Streść tekst widoczny na zdjęciach</li>\n<li>Używaj poprawnej struktury zdań</li>\n<li>Unikaj zbędnych informacji</li>\n<li>Skoncentruj się na kluczowych informacjach zawartych w złożonych wizualizacjach (takich jak diagramy lub mapy)</li>\n</ul>",
|
||||||
|
"interaction_modal.action": "Aby wejść w interakcję z wpisem od {name}, musisz zalogować się na swoje konto na dowolnym serwerze Mastodon, na którym masz już konto.",
|
||||||
"interaction_modal.go": "Dalej",
|
"interaction_modal.go": "Dalej",
|
||||||
"interaction_modal.no_account_yet": "Nie masz jeszcze konta?",
|
"interaction_modal.no_account_yet": "Nie masz jeszcze konta?",
|
||||||
"interaction_modal.on_another_server": "Na innym serwerze",
|
"interaction_modal.on_another_server": "Na innym serwerze",
|
||||||
"interaction_modal.on_this_server": "Na tym serwerze",
|
"interaction_modal.on_this_server": "Na tym serwerze",
|
||||||
|
"interaction_modal.title": "Zaloguj się, aby kontynuować",
|
||||||
"interaction_modal.username_prompt": "Np. {example}",
|
"interaction_modal.username_prompt": "Np. {example}",
|
||||||
"intervals.full.days": "{number, plural, one {# dzień} few {# dni} many {# dni} other {# dni}}",
|
"intervals.full.days": "{number, plural, one {# dzień} few {# dni} many {# dni} other {# dni}}",
|
||||||
"intervals.full.hours": "{number, plural, one {# godzina} few {# godziny} many {# godzin} other {# godzin}}",
|
"intervals.full.hours": "{number, plural, one {# godzina} few {# godziny} many {# godzin} other {# godzin}}",
|
||||||
|
|
@ -470,6 +488,7 @@
|
||||||
"keyboard_shortcuts.home": "Otwórz stronę główną",
|
"keyboard_shortcuts.home": "Otwórz stronę główną",
|
||||||
"keyboard_shortcuts.hotkey": "Skrót klawiszowy",
|
"keyboard_shortcuts.hotkey": "Skrót klawiszowy",
|
||||||
"keyboard_shortcuts.legend": "Wyświetl skróty klawiszowe",
|
"keyboard_shortcuts.legend": "Wyświetl skróty klawiszowe",
|
||||||
|
"keyboard_shortcuts.load_more": "Aktywuj przycisk \"Załaduj więcej\"",
|
||||||
"keyboard_shortcuts.local": "Otwórz lokalną oś czasu",
|
"keyboard_shortcuts.local": "Otwórz lokalną oś czasu",
|
||||||
"keyboard_shortcuts.mention": "Dodaj wzmiankę",
|
"keyboard_shortcuts.mention": "Dodaj wzmiankę",
|
||||||
"keyboard_shortcuts.muted": "Otwórz listę wyciszonych",
|
"keyboard_shortcuts.muted": "Otwórz listę wyciszonych",
|
||||||
|
|
@ -731,9 +750,15 @@
|
||||||
"privacy.quote.disabled": "{visibility}, cytaty wyłączone",
|
"privacy.quote.disabled": "{visibility}, cytaty wyłączone",
|
||||||
"privacy.quote.limited": "{visibility}, cytaty ograniczone",
|
"privacy.quote.limited": "{visibility}, cytaty ograniczone",
|
||||||
"privacy.unlisted.additional": "Dostępny podobnie jak wpis publiczny, ale nie będzie widoczny w aktualnościach, hashtagach ani wyszukiwarce Mastodon, nawet jeśli twoje konto jest widoczne.",
|
"privacy.unlisted.additional": "Dostępny podobnie jak wpis publiczny, ale nie będzie widoczny w aktualnościach, hashtagach ani wyszukiwarce Mastodon, nawet jeśli twoje konto jest widoczne.",
|
||||||
|
"privacy.unlisted.long": "Ukryte w wynikach wyszukiwania Mastodona, trendach i publicznych osiach czasu",
|
||||||
"privacy.unlisted.short": "Niewidoczny",
|
"privacy.unlisted.short": "Niewidoczny",
|
||||||
"privacy_policy.last_updated": "Data ostatniej aktualizacji: {date}",
|
"privacy_policy.last_updated": "Data ostatniej aktualizacji: {date}",
|
||||||
"privacy_policy.title": "Polityka prywatności",
|
"privacy_policy.title": "Polityka prywatności",
|
||||||
|
"quote_error.edit": "Podczas edycji wpisu nie można dodawać cytatów.",
|
||||||
|
"quote_error.poll": "W ankietach nie można cytować.",
|
||||||
|
"quote_error.quote": "Dozwolone jest tylko jedno cytowanie na raz.",
|
||||||
|
"quote_error.unauthorized": "Nie masz uprawnień do cytowania tego wpisu.",
|
||||||
|
"quote_error.upload": "Cytowanie nie jest dozwolone w przypadku załączników multimedialnych.",
|
||||||
"recommended": "Zalecane",
|
"recommended": "Zalecane",
|
||||||
"refresh": "Odśwież",
|
"refresh": "Odśwież",
|
||||||
"regeneration_indicator.please_stand_by": "Proszę czekać.",
|
"regeneration_indicator.please_stand_by": "Proszę czekać.",
|
||||||
|
|
@ -750,6 +775,7 @@
|
||||||
"relative_time.seconds": "{number} s.",
|
"relative_time.seconds": "{number} s.",
|
||||||
"relative_time.today": "dzisiaj",
|
"relative_time.today": "dzisiaj",
|
||||||
"remove_quote_hint.button_label": "Rozumiem",
|
"remove_quote_hint.button_label": "Rozumiem",
|
||||||
|
"remove_quote_hint.message": "Można to zrobić z poziomu menu opcji {icon}.",
|
||||||
"remove_quote_hint.title": "Czy chcesz usunąć swój cytowany post?",
|
"remove_quote_hint.title": "Czy chcesz usunąć swój cytowany post?",
|
||||||
"reply_indicator.attachments": "{count, plural, one {# załącznik} few {# załączniki} many {# załączników} other {# załączników}}",
|
"reply_indicator.attachments": "{count, plural, one {# załącznik} few {# załączniki} many {# załączników} other {# załączników}}",
|
||||||
"reply_indicator.cancel": "Anuluj",
|
"reply_indicator.cancel": "Anuluj",
|
||||||
|
|
@ -842,10 +868,19 @@
|
||||||
"status.admin_account": "Otwórz interfejs moderacyjny dla @{name}",
|
"status.admin_account": "Otwórz interfejs moderacyjny dla @{name}",
|
||||||
"status.admin_domain": "Otwórz interfejs moderacyjny dla {domain}",
|
"status.admin_domain": "Otwórz interfejs moderacyjny dla {domain}",
|
||||||
"status.admin_status": "Otwórz ten wpis w interfejsie moderacyjnym",
|
"status.admin_status": "Otwórz ten wpis w interfejsie moderacyjnym",
|
||||||
|
"status.all_disabled": "Podbicia i cytaty są wyłączone",
|
||||||
"status.block": "Zablokuj @{name}",
|
"status.block": "Zablokuj @{name}",
|
||||||
"status.bookmark": "Dodaj zakładkę",
|
"status.bookmark": "Dodaj zakładkę",
|
||||||
"status.cancel_reblog_private": "Cofnij podbicie",
|
"status.cancel_reblog_private": "Cofnij podbicie",
|
||||||
|
"status.cannot_quote": "Nie można cytować tego wpisu",
|
||||||
"status.cannot_reblog": "Ten wpis nie może zostać podbity",
|
"status.cannot_reblog": "Ten wpis nie może zostać podbity",
|
||||||
|
"status.contains_quote": "Zawiera cytat",
|
||||||
|
"status.context.loading": "Wczytywanie kolejnych komentarzy",
|
||||||
|
"status.context.loading_error": "Nie można wczytać nowych komentarzy",
|
||||||
|
"status.context.loading_success": "Wczytano nowe komentarze",
|
||||||
|
"status.context.more_replies_found": "Znaleziono więcej komentarzy",
|
||||||
|
"status.context.retry": "Spróbuj ponownie",
|
||||||
|
"status.context.show": "Pokaż",
|
||||||
"status.continued_thread": "Ciąg dalszy wątku",
|
"status.continued_thread": "Ciąg dalszy wątku",
|
||||||
"status.copy": "Skopiuj odnośnik do wpisu",
|
"status.copy": "Skopiuj odnośnik do wpisu",
|
||||||
"status.delete": "Usuń",
|
"status.delete": "Usuń",
|
||||||
|
|
@ -875,26 +910,39 @@
|
||||||
"status.quote": "Cytuj",
|
"status.quote": "Cytuj",
|
||||||
"status.quote.cancel": "Anuluj cytat",
|
"status.quote.cancel": "Anuluj cytat",
|
||||||
"status.quote_error.filtered": "Ukryte z powodu jednego z Twoich filtrów",
|
"status.quote_error.filtered": "Ukryte z powodu jednego z Twoich filtrów",
|
||||||
|
"status.quote_error.limited_account_hint.action": "Pokaż mimo wszystko",
|
||||||
|
"status.quote_error.limited_account_hint.title": "To konto zostało ukryte przez moderatorów {domain}.",
|
||||||
"status.quote_error.not_available": "Post niedostępny",
|
"status.quote_error.not_available": "Post niedostępny",
|
||||||
"status.quote_error.pending_approval": "Post oczekujący",
|
"status.quote_error.pending_approval": "Post oczekujący",
|
||||||
|
"status.quote_error.pending_approval_popout.body": "Na Mastodon możesz kontrolować, czy ktoś może cytować twoje wpisy. Ten wpis oczekuje na zatwierdzenie przez autora.",
|
||||||
|
"status.quote_error.revoked": "Wpis został usunięty przez autora",
|
||||||
"status.quote_followers_only": "Tylko obserwatorzy mogą cytować ten post",
|
"status.quote_followers_only": "Tylko obserwatorzy mogą cytować ten post",
|
||||||
|
"status.quote_manual_review": "Autor zatwierdzi ręcznie",
|
||||||
|
"status.quote_noun": "Cytuj",
|
||||||
"status.quote_policy_change": "Zmień kto może cytować",
|
"status.quote_policy_change": "Zmień kto może cytować",
|
||||||
"status.quote_post_author": "Zacytowano post @{name}",
|
"status.quote_post_author": "Zacytowano post @{name}",
|
||||||
"status.quote_private": "Prywatne posty nie mogą być cytowane",
|
"status.quote_private": "Prywatne posty nie mogą być cytowane",
|
||||||
|
"status.quotes": "{count, plural, one {cytat} few {cytaty} many {cytatów} other {cytatów}}",
|
||||||
|
"status.quotes.empty": "Nikt jeszcze nie zacytował tego wpisu. Gdy ktoś to zrobi, pojawi się on tutaj.",
|
||||||
|
"status.quotes.local_other_disclaimer": "Cytaty odrzucone przez autora nie będą wyświetlane.",
|
||||||
|
"status.quotes.remote_other_disclaimer": "Będą tutaj wyświetlane tylko cytaty z {domain}. Cytaty odrzucone przez autora nie będą wyświetlane.",
|
||||||
"status.read_more": "Czytaj dalej",
|
"status.read_more": "Czytaj dalej",
|
||||||
"status.reblog": "Podbij",
|
"status.reblog": "Podbij",
|
||||||
"status.reblog_or_quote": "Podbij lub cytuj",
|
"status.reblog_or_quote": "Podbij lub cytuj",
|
||||||
|
"status.reblog_private": "Udostępnij ponownie swoim obserwującym",
|
||||||
"status.reblogged_by": "Podbite przez {name}",
|
"status.reblogged_by": "Podbite przez {name}",
|
||||||
"status.reblogs": "{count, plural, one {podbicie} few {podbicia} other {podbić}}",
|
"status.reblogs": "{count, plural, one {podbicie} few {podbicia} other {podbić}}",
|
||||||
"status.reblogs.empty": "Nikt nie podbił jeszcze tego wpisu. Gdy ktoś to zrobi, pojawi się tutaj.",
|
"status.reblogs.empty": "Nikt nie podbił jeszcze tego wpisu. Gdy ktoś to zrobi, pojawi się tutaj.",
|
||||||
"status.redraft": "Usuń i przeredaguj",
|
"status.redraft": "Usuń i przeredaguj",
|
||||||
"status.remove_bookmark": "Usuń zakładkę",
|
"status.remove_bookmark": "Usuń zakładkę",
|
||||||
"status.remove_favourite": "Usuń z ulubionych",
|
"status.remove_favourite": "Usuń z ulubionych",
|
||||||
|
"status.remove_quote": "Usuń",
|
||||||
"status.replied_in_thread": "Odpowiedź w wątku",
|
"status.replied_in_thread": "Odpowiedź w wątku",
|
||||||
"status.replied_to": "Odpowiedź do wpisu użytkownika {name}",
|
"status.replied_to": "Odpowiedź do wpisu użytkownika {name}",
|
||||||
"status.reply": "Odpowiedz",
|
"status.reply": "Odpowiedz",
|
||||||
"status.replyAll": "Odpowiedz na wątek",
|
"status.replyAll": "Odpowiedz na wątek",
|
||||||
"status.report": "Zgłoś @{name}",
|
"status.report": "Zgłoś @{name}",
|
||||||
|
"status.request_quote": "Poproś o możliwość cytowania",
|
||||||
"status.revoke_quote": "Usuń mój wpis z postu @{name}",
|
"status.revoke_quote": "Usuń mój wpis z postu @{name}",
|
||||||
"status.sensitive_warning": "Wrażliwa zawartość",
|
"status.sensitive_warning": "Wrażliwa zawartość",
|
||||||
"status.share": "Udostępnij",
|
"status.share": "Udostępnij",
|
||||||
|
|
@ -959,6 +1007,12 @@
|
||||||
"video.volume_up": "Zwiększ głośność",
|
"video.volume_up": "Zwiększ głośność",
|
||||||
"visibility_modal.button_title": "Ustaw widoczność",
|
"visibility_modal.button_title": "Ustaw widoczność",
|
||||||
"visibility_modal.header": "Widoczność i interakcja",
|
"visibility_modal.header": "Widoczność i interakcja",
|
||||||
|
"visibility_modal.helper.direct_quoting": "Prywatne wzmianki opublikowane na Mastodonie nie mogą być cytowane przez inne osoby.",
|
||||||
|
"visibility_modal.helper.privacy_editing": "Widoczność nie może być zmieniona po opublikowaniu wpisu.",
|
||||||
|
"visibility_modal.helper.privacy_private_self_quote": "Cytaty z prywatnych wpisów nie mogą być publiczne.",
|
||||||
|
"visibility_modal.helper.private_quoting": "Wpisy publikowane na Mastodonie wyłącznie dla obserwujących nie mogą być cytowane przez inne osoby.",
|
||||||
|
"visibility_modal.helper.unlisted_quoting": "Kiedy ktoś cytuje twoje wpisy, będą one również ukryte na popularnych osiach czasu.",
|
||||||
|
"visibility_modal.instructions": "Kontroluj, kto może wchodzić w interakcję z tym wpisem. Możesz również zastosować ustawienia do wszystkich przyszłych wpisów, przechodząc do <link>Preferencje > Domyślne ustawienia publikowania</link>.",
|
||||||
"visibility_modal.privacy_label": "Widoczność",
|
"visibility_modal.privacy_label": "Widoczność",
|
||||||
"visibility_modal.quote_followers": "Tylko dla obserwujących",
|
"visibility_modal.quote_followers": "Tylko dla obserwujących",
|
||||||
"visibility_modal.quote_label": "Kto może cytować",
|
"visibility_modal.quote_label": "Kto może cytować",
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@
|
||||||
"account.disable_notifications": "Cancelar notificações de @{name}",
|
"account.disable_notifications": "Cancelar notificações de @{name}",
|
||||||
"account.domain_blocking": "Bloqueando domínio",
|
"account.domain_blocking": "Bloqueando domínio",
|
||||||
"account.edit_profile": "Editar perfil",
|
"account.edit_profile": "Editar perfil",
|
||||||
|
"account.edit_profile_short": "Editar",
|
||||||
"account.enable_notifications": "Notificar novos toots de @{name}",
|
"account.enable_notifications": "Notificar novos toots de @{name}",
|
||||||
"account.endorse": "Recomendar",
|
"account.endorse": "Recomendar",
|
||||||
"account.familiar_followers_many": "Seguido por {name1}, {name2}, e {othersCount, plural, one {um outro que você conhece} other {# outros que você conhece}}",
|
"account.familiar_followers_many": "Seguido por {name1}, {name2}, e {othersCount, plural, one {um outro que você conhece} other {# outros que você conhece}}",
|
||||||
|
|
@ -40,6 +41,11 @@
|
||||||
"account.featured_tags.last_status_never": "Sem publicações",
|
"account.featured_tags.last_status_never": "Sem publicações",
|
||||||
"account.follow": "Seguir",
|
"account.follow": "Seguir",
|
||||||
"account.follow_back": "Seguir de volta",
|
"account.follow_back": "Seguir de volta",
|
||||||
|
"account.follow_back_short": "Seguir de volta",
|
||||||
|
"account.follow_request": "Pedir para seguir",
|
||||||
|
"account.follow_request_cancel": "Cancelar solicitação",
|
||||||
|
"account.follow_request_cancel_short": "Cancelar",
|
||||||
|
"account.follow_request_short": "Solicitação",
|
||||||
"account.followers": "Seguidores",
|
"account.followers": "Seguidores",
|
||||||
"account.followers.empty": "Nada aqui.",
|
"account.followers.empty": "Nada aqui.",
|
||||||
"account.followers_counter": "{count, plural, one {{counter} seguidor} other {{counter} seguidores}}",
|
"account.followers_counter": "{count, plural, one {{counter} seguidor} other {{counter} seguidores}}",
|
||||||
|
|
@ -240,6 +246,8 @@
|
||||||
"confirmations.mute.confirm": "Silenciar",
|
"confirmations.mute.confirm": "Silenciar",
|
||||||
"confirmations.quiet_post_quote_info.dismiss": "Não me lembrar novamente",
|
"confirmations.quiet_post_quote_info.dismiss": "Não me lembrar novamente",
|
||||||
"confirmations.quiet_post_quote_info.got_it": "Entendi",
|
"confirmations.quiet_post_quote_info.got_it": "Entendi",
|
||||||
|
"confirmations.quiet_post_quote_info.message": "Ao citar uma publicação pública silenciosa, sua postagem será oculta das linhas de tempo em tendência.",
|
||||||
|
"confirmations.quiet_post_quote_info.title": "Citando publicações públicas silenciadas",
|
||||||
"confirmations.redraft.confirm": "Excluir e rascunhar",
|
"confirmations.redraft.confirm": "Excluir e rascunhar",
|
||||||
"confirmations.redraft.message": "Você tem certeza de que quer apagar essa postagem e rascunhá-la? Favoritos e impulsos serão perdidos, e respostas à postagem original ficarão órfãs.",
|
"confirmations.redraft.message": "Você tem certeza de que quer apagar essa postagem e rascunhá-la? Favoritos e impulsos serão perdidos, e respostas à postagem original ficarão órfãs.",
|
||||||
"confirmations.redraft.title": "Excluir e rascunhar publicação?",
|
"confirmations.redraft.title": "Excluir e rascunhar publicação?",
|
||||||
|
|
@ -249,7 +257,12 @@
|
||||||
"confirmations.revoke_quote.confirm": "Remover publicação",
|
"confirmations.revoke_quote.confirm": "Remover publicação",
|
||||||
"confirmations.revoke_quote.message": "Essa ação não pode ser desfeita.",
|
"confirmations.revoke_quote.message": "Essa ação não pode ser desfeita.",
|
||||||
"confirmations.revoke_quote.title": "Remover publicação?",
|
"confirmations.revoke_quote.title": "Remover publicação?",
|
||||||
|
"confirmations.unblock.confirm": "Desbloquear",
|
||||||
|
"confirmations.unblock.title": "Desbloquear {name}?",
|
||||||
"confirmations.unfollow.confirm": "Deixar de seguir",
|
"confirmations.unfollow.confirm": "Deixar de seguir",
|
||||||
|
"confirmations.unfollow.title": "Deixar de seguir {name}?",
|
||||||
|
"confirmations.withdraw_request.confirm": "Retirar solicitação",
|
||||||
|
"confirmations.withdraw_request.title": "Cancelar solicitação para seguir {name}?",
|
||||||
"content_warning.hide": "Ocultar post",
|
"content_warning.hide": "Ocultar post",
|
||||||
"content_warning.show": "Mostrar mesmo assim",
|
"content_warning.show": "Mostrar mesmo assim",
|
||||||
"content_warning.show_more": "Mostrar mais",
|
"content_warning.show_more": "Mostrar mais",
|
||||||
|
|
@ -320,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Nada aqui. Quando você salvar um toot, ele aparecerá aqui.",
|
"empty_column.bookmarked_statuses": "Nada aqui. Quando você salvar um toot, ele aparecerá aqui.",
|
||||||
"empty_column.community": "A linha local está vazia. Publique algo para começar!",
|
"empty_column.community": "A linha local está vazia. Publique algo para começar!",
|
||||||
"empty_column.direct": "Você ainda não tem mensagens privadas. Quando você enviar ou receber uma, será exibida aqui.",
|
"empty_column.direct": "Você ainda não tem mensagens privadas. Quando você enviar ou receber uma, será exibida aqui.",
|
||||||
|
"empty_column.disabled_feed": "Este feed foi desativado pelos administradores do servidor.",
|
||||||
"empty_column.domain_blocks": "Nada aqui.",
|
"empty_column.domain_blocks": "Nada aqui.",
|
||||||
"empty_column.explore_statuses": "Nada está em alta no momento. Volte mais tarde!",
|
"empty_column.explore_statuses": "Nada está em alta no momento. Volte mais tarde!",
|
||||||
"empty_column.favourited_statuses": "Você ainda não tem publicações favoritas. Quanto você marcar uma como favorita, ela aparecerá aqui.",
|
"empty_column.favourited_statuses": "Você ainda não tem publicações favoritas. Quanto você marcar uma como favorita, ela aparecerá aqui.",
|
||||||
|
|
@ -448,10 +462,12 @@
|
||||||
"ignore_notifications_modal.private_mentions_title": "Ignorar notificações de menções privadas não solicitadas?",
|
"ignore_notifications_modal.private_mentions_title": "Ignorar notificações de menções privadas não solicitadas?",
|
||||||
"info_button.label": "Ajuda",
|
"info_button.label": "Ajuda",
|
||||||
"info_button.what_is_alt_text": "<h1>O que é texto alternativo?</h1><p>O texto alternativo fornece descrições de imagens para pessoas com deficiências visuais, conexões de internet de baixa largura de banda ou aquelas que buscam mais contexto.</p><p>Você pode melhorar a acessibilidade e a compreensão para todos escrevendo texto alternativo claro, conciso e objetivo.</p> <ul> <li>Capture elementos importantes</li> <li>Resuma textos em imagens</li> <li>Use estrutura de frases regular</li> <li>Evite informações redundantes</li> <li>Foque em tendências e descobertas principais em visuais complexos (como diagramas ou mapas)</li> </ul>",
|
"info_button.what_is_alt_text": "<h1>O que é texto alternativo?</h1><p>O texto alternativo fornece descrições de imagens para pessoas com deficiências visuais, conexões de internet de baixa largura de banda ou aquelas que buscam mais contexto.</p><p>Você pode melhorar a acessibilidade e a compreensão para todos escrevendo texto alternativo claro, conciso e objetivo.</p> <ul> <li>Capture elementos importantes</li> <li>Resuma textos em imagens</li> <li>Use estrutura de frases regular</li> <li>Evite informações redundantes</li> <li>Foque em tendências e descobertas principais em visuais complexos (como diagramas ou mapas)</li> </ul>",
|
||||||
|
"interaction_modal.action": "Para interagir com o post de {name}, você precisa entrar em sua conta em qualquer servidor Mastodon que você use.",
|
||||||
"interaction_modal.go": "Ir",
|
"interaction_modal.go": "Ir",
|
||||||
"interaction_modal.no_account_yet": "Não possui uma conta ainda?",
|
"interaction_modal.no_account_yet": "Não possui uma conta ainda?",
|
||||||
"interaction_modal.on_another_server": "Em um servidor diferente",
|
"interaction_modal.on_another_server": "Em um servidor diferente",
|
||||||
"interaction_modal.on_this_server": "Neste servidor",
|
"interaction_modal.on_this_server": "Neste servidor",
|
||||||
|
"interaction_modal.title": "Faça login para continuar",
|
||||||
"interaction_modal.username_prompt": "p. e.x.: {example}",
|
"interaction_modal.username_prompt": "p. e.x.: {example}",
|
||||||
"intervals.full.days": "{number, plural, one {# dia} other {# dias}}",
|
"intervals.full.days": "{number, plural, one {# dia} other {# dias}}",
|
||||||
"intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
|
"intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
|
||||||
|
|
@ -734,9 +750,11 @@
|
||||||
"privacy.quote.disabled": "{visibility} Citações desabilitadas",
|
"privacy.quote.disabled": "{visibility} Citações desabilitadas",
|
||||||
"privacy.quote.limited": "{visibility} Citações limitadas",
|
"privacy.quote.limited": "{visibility} Citações limitadas",
|
||||||
"privacy.unlisted.additional": "Isso se comporta exatamente como público, exceto que a publicação não aparecerá nos _feeds ao vivo_ ou nas _hashtags_, explorar, ou barra de busca, mesmo que você seja escolhido em toda a conta.",
|
"privacy.unlisted.additional": "Isso se comporta exatamente como público, exceto que a publicação não aparecerá nos _feeds ao vivo_ ou nas _hashtags_, explorar, ou barra de busca, mesmo que você seja escolhido em toda a conta.",
|
||||||
"privacy.unlisted.short": "Público (silencioso)",
|
"privacy.unlisted.long": "Oculto para os resultados de pesquisa do Mastodon, tendências e linhas do tempo públicas",
|
||||||
|
"privacy.unlisted.short": "Público silenciado",
|
||||||
"privacy_policy.last_updated": "Atualizado {date}",
|
"privacy_policy.last_updated": "Atualizado {date}",
|
||||||
"privacy_policy.title": "Política de privacidade",
|
"privacy_policy.title": "Política de privacidade",
|
||||||
|
"quote_error.edit": "Citações não podem ser adicionadas durante a edição de uma publicação.",
|
||||||
"quote_error.poll": "Citações não permitidas com enquetes.",
|
"quote_error.poll": "Citações não permitidas com enquetes.",
|
||||||
"quote_error.quote": "Apenas uma citação por vez é permitido.",
|
"quote_error.quote": "Apenas uma citação por vez é permitido.",
|
||||||
"quote_error.unauthorized": "Você não é autorizado a citar essa publicação.",
|
"quote_error.unauthorized": "Você não é autorizado a citar essa publicação.",
|
||||||
|
|
@ -756,6 +774,9 @@
|
||||||
"relative_time.minutes": "{number}m",
|
"relative_time.minutes": "{number}m",
|
||||||
"relative_time.seconds": "{number}s",
|
"relative_time.seconds": "{number}s",
|
||||||
"relative_time.today": "hoje",
|
"relative_time.today": "hoje",
|
||||||
|
"remove_quote_hint.button_label": "Entendi",
|
||||||
|
"remove_quote_hint.message": "Você pode fazê-lo no menu de opções {icon}.",
|
||||||
|
"remove_quote_hint.title": "Deseja remover sua citação publicada?",
|
||||||
"reply_indicator.attachments": "{count, plural, one {# attachment} other {# attachments}}",
|
"reply_indicator.attachments": "{count, plural, one {# attachment} other {# attachments}}",
|
||||||
"reply_indicator.cancel": "Cancelar",
|
"reply_indicator.cancel": "Cancelar",
|
||||||
"reply_indicator.poll": "Enquete",
|
"reply_indicator.poll": "Enquete",
|
||||||
|
|
@ -851,7 +872,15 @@
|
||||||
"status.block": "Bloquear @{name}",
|
"status.block": "Bloquear @{name}",
|
||||||
"status.bookmark": "Salvar",
|
"status.bookmark": "Salvar",
|
||||||
"status.cancel_reblog_private": "Desfazer boost",
|
"status.cancel_reblog_private": "Desfazer boost",
|
||||||
|
"status.cannot_quote": "Você não tem permissão para citar esta publicação",
|
||||||
"status.cannot_reblog": "Este toot não pode receber boost",
|
"status.cannot_reblog": "Este toot não pode receber boost",
|
||||||
|
"status.contains_quote": "Contém citação",
|
||||||
|
"status.context.loading": "Carregando mais respostas",
|
||||||
|
"status.context.loading_error": "Não foi possível carregar novas respostas",
|
||||||
|
"status.context.loading_success": "Novas respostas carregadas",
|
||||||
|
"status.context.more_replies_found": "Mais respostas encontradas",
|
||||||
|
"status.context.retry": "Tentar novamente",
|
||||||
|
"status.context.show": "Mostrar",
|
||||||
"status.continued_thread": "Continuação da conversa",
|
"status.continued_thread": "Continuação da conversa",
|
||||||
"status.copy": "Copiar link",
|
"status.copy": "Copiar link",
|
||||||
"status.delete": "Excluir",
|
"status.delete": "Excluir",
|
||||||
|
|
@ -881,24 +910,33 @@
|
||||||
"status.quote": "Citar",
|
"status.quote": "Citar",
|
||||||
"status.quote.cancel": "Cancelar citação",
|
"status.quote.cancel": "Cancelar citação",
|
||||||
"status.quote_error.filtered": "Oculto devido a um dos seus filtros",
|
"status.quote_error.filtered": "Oculto devido a um dos seus filtros",
|
||||||
|
"status.quote_error.limited_account_hint.action": "Mostrar mesmo assim",
|
||||||
|
"status.quote_error.limited_account_hint.title": "Esta conta foi oculta pelos moderadores do {domain}.",
|
||||||
"status.quote_error.not_available": "Publicação indisponível",
|
"status.quote_error.not_available": "Publicação indisponível",
|
||||||
"status.quote_error.pending_approval": "Publicação pendente",
|
"status.quote_error.pending_approval": "Publicação pendente",
|
||||||
|
"status.quote_error.pending_approval_popout.body": "No Mastodon, você pode controlar se alguém pode citar você. Esta publicação está pendente enquanto estamos recebendo a aprovação do autor original.",
|
||||||
|
"status.quote_error.revoked": "Publicação removida pelo autor",
|
||||||
"status.quote_followers_only": "Apenas seguidores podem citar sua publicação",
|
"status.quote_followers_only": "Apenas seguidores podem citar sua publicação",
|
||||||
"status.quote_manual_review": "Autor irá revisar manualmente",
|
"status.quote_manual_review": "Autor irá revisar manualmente",
|
||||||
|
"status.quote_noun": "Citar",
|
||||||
"status.quote_policy_change": "Mude quem pode citar",
|
"status.quote_policy_change": "Mude quem pode citar",
|
||||||
"status.quote_post_author": "Publicação citada por @{name}",
|
"status.quote_post_author": "Publicação citada por @{name}",
|
||||||
"status.quote_private": "Publicações privadas não podem ser citadas",
|
"status.quote_private": "Publicações privadas não podem ser citadas",
|
||||||
"status.quotes": "{count, plural, one {# voto} other {# votos}}",
|
"status.quotes": "{count, plural, one {# voto} other {# votos}}",
|
||||||
"status.quotes.empty": "Ninguém citou essa publicação até agora. Quando alguém citar aparecerá aqui.",
|
"status.quotes.empty": "Ninguém citou essa publicação até agora. Quando alguém citar aparecerá aqui.",
|
||||||
|
"status.quotes.local_other_disclaimer": "Citações rejeitadas pelo autor não serão exibidas.",
|
||||||
|
"status.quotes.remote_other_disclaimer": "Apenas citações do {domain} têm a garantia de serem exibidas aqui. Citações rejeitadas pelo autor não serão exibidas.",
|
||||||
"status.read_more": "Ler mais",
|
"status.read_more": "Ler mais",
|
||||||
"status.reblog": "Dar boost",
|
"status.reblog": "Dar boost",
|
||||||
"status.reblog_or_quote": "Acelerar ou citar",
|
"status.reblog_or_quote": "Acelerar ou citar",
|
||||||
|
"status.reblog_private": "Compartilhar novamente com seus seguidores",
|
||||||
"status.reblogged_by": "{name} deu boost",
|
"status.reblogged_by": "{name} deu boost",
|
||||||
"status.reblogs": "{count, plural, one {boost} other {boosts}}",
|
"status.reblogs": "{count, plural, one {boost} other {boosts}}",
|
||||||
"status.reblogs.empty": "Nada aqui. Quando alguém der boost, o usuário aparecerá aqui.",
|
"status.reblogs.empty": "Nada aqui. Quando alguém der boost, o usuário aparecerá aqui.",
|
||||||
"status.redraft": "Excluir e rascunhar",
|
"status.redraft": "Excluir e rascunhar",
|
||||||
"status.remove_bookmark": "Remover do Salvos",
|
"status.remove_bookmark": "Remover do Salvos",
|
||||||
"status.remove_favourite": "Remover dos favoritos",
|
"status.remove_favourite": "Remover dos favoritos",
|
||||||
|
"status.remove_quote": "Remover",
|
||||||
"status.replied_in_thread": "Respondido na conversa",
|
"status.replied_in_thread": "Respondido na conversa",
|
||||||
"status.replied_to": "Em resposta a {name}",
|
"status.replied_to": "Em resposta a {name}",
|
||||||
"status.reply": "Responder",
|
"status.reply": "Responder",
|
||||||
|
|
@ -970,6 +1008,8 @@
|
||||||
"visibility_modal.button_title": "Selecionar Visibilidade",
|
"visibility_modal.button_title": "Selecionar Visibilidade",
|
||||||
"visibility_modal.header": "Visibilidade e interação",
|
"visibility_modal.header": "Visibilidade e interação",
|
||||||
"visibility_modal.helper.direct_quoting": "Menções privadas escritas no Mastodon.",
|
"visibility_modal.helper.direct_quoting": "Menções privadas escritas no Mastodon.",
|
||||||
|
"visibility_modal.helper.privacy_editing": "A visibilidade não pode ser alterada após uma publicação ser publicada.",
|
||||||
|
"visibility_modal.helper.privacy_private_self_quote": "As auto-citações de publicações privadas não podem ser públicas.",
|
||||||
"visibility_modal.helper.private_quoting": "Posts somente para seguidores feitos no Mastodon não podem ser citados por outros.",
|
"visibility_modal.helper.private_quoting": "Posts somente para seguidores feitos no Mastodon não podem ser citados por outros.",
|
||||||
"visibility_modal.helper.unlisted_quoting": "Quando as pessoas citam você, sua publicação também será ocultada das linhas de tempo de tendência.",
|
"visibility_modal.helper.unlisted_quoting": "Quando as pessoas citam você, sua publicação também será ocultada das linhas de tempo de tendência.",
|
||||||
"visibility_modal.instructions": "Controle quem pode interagir com este post. Você também pode aplicar as configurações para todos os posts futuros navegando para <link>Preferências > Postagem padrão</link>.",
|
"visibility_modal.instructions": "Controle quem pode interagir com este post. Você também pode aplicar as configurações para todos os posts futuros navegando para <link>Preferências > Postagem padrão</link>.",
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@
|
||||||
"account.follows.empty": "Este utilizador ainda não segue ninguém.",
|
"account.follows.empty": "Este utilizador ainda não segue ninguém.",
|
||||||
"account.follows_you": "Segue-te",
|
"account.follows_you": "Segue-te",
|
||||||
"account.go_to_profile": "Ir para o perfil",
|
"account.go_to_profile": "Ir para o perfil",
|
||||||
"account.hide_reblogs": "Esconder partilhas impulsionadas de @{name}",
|
"account.hide_reblogs": "Esconder partilhas de @{name}",
|
||||||
"account.in_memoriam": "Em Memória.",
|
"account.in_memoriam": "Em Memória.",
|
||||||
"account.joined_short": "Juntou-se a",
|
"account.joined_short": "Juntou-se a",
|
||||||
"account.languages": "Alterar idiomas subscritos",
|
"account.languages": "Alterar idiomas subscritos",
|
||||||
|
|
@ -79,7 +79,7 @@
|
||||||
"account.requested_follow": "{name} pediu para seguir-te",
|
"account.requested_follow": "{name} pediu para seguir-te",
|
||||||
"account.requests_to_follow_you": "Pediu para seguir-te",
|
"account.requests_to_follow_you": "Pediu para seguir-te",
|
||||||
"account.share": "Partilhar o perfil @{name}",
|
"account.share": "Partilhar o perfil @{name}",
|
||||||
"account.show_reblogs": "Mostrar partilhas impulsionadas de @{name}",
|
"account.show_reblogs": "Mostrar partilhas de @{name}",
|
||||||
"account.statuses_counter": "{count, plural, one {{counter} publicação} other {{counter} publicações}}",
|
"account.statuses_counter": "{count, plural, one {{counter} publicação} other {{counter} publicações}}",
|
||||||
"account.unblock": "Desbloquear @{name}",
|
"account.unblock": "Desbloquear @{name}",
|
||||||
"account.unblock_domain": "Desbloquear o domínio {domain}",
|
"account.unblock_domain": "Desbloquear o domínio {domain}",
|
||||||
|
|
@ -113,7 +113,7 @@
|
||||||
"alt_text_modal.describe_for_people_with_visual_impairments": "Descreve isto para pessoas com problemas de visão…",
|
"alt_text_modal.describe_for_people_with_visual_impairments": "Descreve isto para pessoas com problemas de visão…",
|
||||||
"alt_text_modal.done": "Concluído",
|
"alt_text_modal.done": "Concluído",
|
||||||
"announcement.announcement": "Mensagem de manutenção",
|
"announcement.announcement": "Mensagem de manutenção",
|
||||||
"annual_report.summary.archetype.booster": "O caçador de frescura",
|
"annual_report.summary.archetype.booster": "O caçador de tendências",
|
||||||
"annual_report.summary.archetype.lurker": "O espreitador",
|
"annual_report.summary.archetype.lurker": "O espreitador",
|
||||||
"annual_report.summary.archetype.oracle": "O oráculo",
|
"annual_report.summary.archetype.oracle": "O oráculo",
|
||||||
"annual_report.summary.archetype.pollster": "O sondagens",
|
"annual_report.summary.archetype.pollster": "O sondagens",
|
||||||
|
|
@ -122,7 +122,7 @@
|
||||||
"annual_report.summary.followers.total": "{count} no total",
|
"annual_report.summary.followers.total": "{count} no total",
|
||||||
"annual_report.summary.here_it_is": "Aqui está um resumo do ano {year}:",
|
"annual_report.summary.here_it_is": "Aqui está um resumo do ano {year}:",
|
||||||
"annual_report.summary.highlighted_post.by_favourites": "publicação mais favorita",
|
"annual_report.summary.highlighted_post.by_favourites": "publicação mais favorita",
|
||||||
"annual_report.summary.highlighted_post.by_reblogs": "publicação mais impulsionada",
|
"annual_report.summary.highlighted_post.by_reblogs": "publicação mais partilhada",
|
||||||
"annual_report.summary.highlighted_post.by_replies": "publicação com o maior número de respostas",
|
"annual_report.summary.highlighted_post.by_replies": "publicação com o maior número de respostas",
|
||||||
"annual_report.summary.highlighted_post.possessive": "{name}",
|
"annual_report.summary.highlighted_post.possessive": "{name}",
|
||||||
"annual_report.summary.most_used_app.most_used_app": "aplicação mais utilizada",
|
"annual_report.summary.most_used_app.most_used_app": "aplicação mais utilizada",
|
||||||
|
|
@ -142,9 +142,9 @@
|
||||||
"block_modal.they_will_know": "Ele pode ver que o bloqueaste.",
|
"block_modal.they_will_know": "Ele pode ver que o bloqueaste.",
|
||||||
"block_modal.title": "Bloquear utilizador?",
|
"block_modal.title": "Bloquear utilizador?",
|
||||||
"block_modal.you_wont_see_mentions": "Não verás publicações que mencionem este utilizador.",
|
"block_modal.you_wont_see_mentions": "Não verás publicações que mencionem este utilizador.",
|
||||||
"boost_modal.combo": "Podes premir {combo} para não voltares a ver isto",
|
"boost_modal.combo": "Pode clicar em {combo} para não voltar a ver isto",
|
||||||
"boost_modal.reblog": "Impulsionar a publicação?",
|
"boost_modal.reblog": "Partilhar a publicação?",
|
||||||
"boost_modal.undo_reblog": "Não impulsionar a publicação?",
|
"boost_modal.undo_reblog": "Deixar de partilhar a publicação?",
|
||||||
"bundle_column_error.copy_stacktrace": "Copiar relatório de erros",
|
"bundle_column_error.copy_stacktrace": "Copiar relatório de erros",
|
||||||
"bundle_column_error.error.body": "A página solicitada não pôde ser sintetizada. Isto pode ser devido a uma falha no nosso código ou a um problema de compatibilidade com o navegador.",
|
"bundle_column_error.error.body": "A página solicitada não pôde ser sintetizada. Isto pode ser devido a uma falha no nosso código ou a um problema de compatibilidade com o navegador.",
|
||||||
"bundle_column_error.error.title": "Ó, não!",
|
"bundle_column_error.error.title": "Ó, não!",
|
||||||
|
|
@ -249,7 +249,7 @@
|
||||||
"confirmations.quiet_post_quote_info.message": "Ao citar uma publicação não listada, a sua publicação não será exibida nos destaques.",
|
"confirmations.quiet_post_quote_info.message": "Ao citar uma publicação não listada, a sua publicação não será exibida nos destaques.",
|
||||||
"confirmations.quiet_post_quote_info.title": "Citação de publicação não listada",
|
"confirmations.quiet_post_quote_info.title": "Citação de publicação não listada",
|
||||||
"confirmations.redraft.confirm": "Eliminar e reescrever",
|
"confirmations.redraft.confirm": "Eliminar e reescrever",
|
||||||
"confirmations.redraft.message": "Tens a certeza de que queres eliminar e tornar a escrever esta publicação? Os favoritos e as publicações impulsionadas perder-se-ão e as respostas à publicação original ficarão órfãs.",
|
"confirmations.redraft.message": "Tem a certeza que pretende eliminar e tornar a escrever esta publicação? Os favoritos e as partilhas perder-se-ão e as respostas à publicação original ficarão órfãs.",
|
||||||
"confirmations.redraft.title": "Eliminar e reescrever publicação?",
|
"confirmations.redraft.title": "Eliminar e reescrever publicação?",
|
||||||
"confirmations.remove_from_followers.confirm": "Remover seguidor",
|
"confirmations.remove_from_followers.confirm": "Remover seguidor",
|
||||||
"confirmations.remove_from_followers.message": "{name} vai parar de seguir-te. Tens a certeza que prentedes continuar?",
|
"confirmations.remove_from_followers.message": "{name} vai parar de seguir-te. Tens a certeza que prentedes continuar?",
|
||||||
|
|
@ -257,7 +257,12 @@
|
||||||
"confirmations.revoke_quote.confirm": "Remover publicação",
|
"confirmations.revoke_quote.confirm": "Remover publicação",
|
||||||
"confirmations.revoke_quote.message": "Esta ação é irreversível.",
|
"confirmations.revoke_quote.message": "Esta ação é irreversível.",
|
||||||
"confirmations.revoke_quote.title": "Remover publicação?",
|
"confirmations.revoke_quote.title": "Remover publicação?",
|
||||||
|
"confirmations.unblock.confirm": "Desbloquear",
|
||||||
|
"confirmations.unblock.title": "Desbloquear {name}?",
|
||||||
"confirmations.unfollow.confirm": "Deixar de seguir",
|
"confirmations.unfollow.confirm": "Deixar de seguir",
|
||||||
|
"confirmations.unfollow.title": "Deixar de seguir {name}?",
|
||||||
|
"confirmations.withdraw_request.confirm": "Retirar pedido",
|
||||||
|
"confirmations.withdraw_request.title": "Retirar pedido para seguir {name}?",
|
||||||
"content_warning.hide": "Ocultar publicação",
|
"content_warning.hide": "Ocultar publicação",
|
||||||
"content_warning.show": "Mostrar mesmo assim",
|
"content_warning.show": "Mostrar mesmo assim",
|
||||||
"content_warning.show_more": "Mostrar mais",
|
"content_warning.show_more": "Mostrar mais",
|
||||||
|
|
@ -325,9 +330,10 @@
|
||||||
"empty_column.account_timeline": "Sem publicações por aqui!",
|
"empty_column.account_timeline": "Sem publicações por aqui!",
|
||||||
"empty_column.account_unavailable": "Perfil indisponível",
|
"empty_column.account_unavailable": "Perfil indisponível",
|
||||||
"empty_column.blocks": "Ainda não bloqueaste nenhum utilizador.",
|
"empty_column.blocks": "Ainda não bloqueaste nenhum utilizador.",
|
||||||
"empty_column.bookmarked_statuses": "Ainda não tens nenhuma publicação marcada. Quando marcares uma, ela aparecerá aqui.",
|
"empty_column.bookmarked_statuses": "Ainda não tem nenhuma publicação salva. Quando salvar uma, ela aparecerá aqui.",
|
||||||
"empty_column.community": "A cronologia local está vazia. Escreve algo publicamente para começar!",
|
"empty_column.community": "A cronologia local está vazia. Escreve algo publicamente para começar!",
|
||||||
"empty_column.direct": "Ainda não tens qualquer menção privada. Quando enviares ou receberes uma, ela irá aparecer aqui.",
|
"empty_column.direct": "Ainda não tens qualquer menção privada. Quando enviares ou receberes uma, ela irá aparecer aqui.",
|
||||||
|
"empty_column.disabled_feed": "Esta cronologia foi desativada pelos administradores do seu servidor.",
|
||||||
"empty_column.domain_blocks": "Ainda não há qualquer domínio bloqueado.",
|
"empty_column.domain_blocks": "Ainda não há qualquer domínio bloqueado.",
|
||||||
"empty_column.explore_statuses": "Não há nada em destaque neste momento. Volte mais tarde!",
|
"empty_column.explore_statuses": "Não há nada em destaque neste momento. Volte mais tarde!",
|
||||||
"empty_column.favourited_statuses": "Ainda não assinalaste qualquer publicação como favorita. Quando o fizeres, ela aparecerá aqui.",
|
"empty_column.favourited_statuses": "Ainda não assinalaste qualquer publicação como favorita. Quando o fizeres, ela aparecerá aqui.",
|
||||||
|
|
@ -361,7 +367,7 @@
|
||||||
"filter_modal.added.context_mismatch_title": "O contexto não coincide!",
|
"filter_modal.added.context_mismatch_title": "O contexto não coincide!",
|
||||||
"filter_modal.added.expired_explanation": "Esta categoria de filtro expirou, tens de alterar a data de validade para que ele seja aplicado.",
|
"filter_modal.added.expired_explanation": "Esta categoria de filtro expirou, tens de alterar a data de validade para que ele seja aplicado.",
|
||||||
"filter_modal.added.expired_title": "Filtro expirado!",
|
"filter_modal.added.expired_title": "Filtro expirado!",
|
||||||
"filter_modal.added.review_and_configure": "Para rever e configurar mais detalhadamente esta categoria de filtro, vai a {settings_link}.",
|
"filter_modal.added.review_and_configure": "Para rever e configurar mais detalhadamente esta categoria de filtro, vá a {settings_link}.",
|
||||||
"filter_modal.added.review_and_configure_title": "Definições do filtro",
|
"filter_modal.added.review_and_configure_title": "Definições do filtro",
|
||||||
"filter_modal.added.settings_link": "página de definições",
|
"filter_modal.added.settings_link": "página de definições",
|
||||||
"filter_modal.added.short_explanation": "Esta publicação foi adicionada à seguinte categoria de filtro: {title}.",
|
"filter_modal.added.short_explanation": "Esta publicação foi adicionada à seguinte categoria de filtro: {title}.",
|
||||||
|
|
@ -424,10 +430,10 @@
|
||||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} publicação} other {{counter} publicações}}",
|
"hashtag.counter_by_uses": "{count, plural, one {{counter} publicação} other {{counter} publicações}}",
|
||||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicação} other {{counter} publicações}} hoje",
|
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicação} other {{counter} publicações}} hoje",
|
||||||
"hashtag.feature": "Destacar no perfil",
|
"hashtag.feature": "Destacar no perfil",
|
||||||
"hashtag.follow": "Seguir #etiqueta",
|
"hashtag.follow": "Seguir etiqueta",
|
||||||
"hashtag.mute": "Silenciar #{hashtag}",
|
"hashtag.mute": "Silenciar #{hashtag}",
|
||||||
"hashtag.unfeature": "Não destacar no perfil",
|
"hashtag.unfeature": "Não destacar no perfil",
|
||||||
"hashtag.unfollow": "Deixar de seguir #etiqueta",
|
"hashtag.unfollow": "Deixar de seguir a etiqueta",
|
||||||
"hashtags.and_other": "…e {count, plural, other {mais #}}",
|
"hashtags.and_other": "…e {count, plural, other {mais #}}",
|
||||||
"hints.profiles.followers_may_be_missing": "É possível que não estejam a ser mostrados todos os seguidores deste perfil.",
|
"hints.profiles.followers_may_be_missing": "É possível que não estejam a ser mostrados todos os seguidores deste perfil.",
|
||||||
"hints.profiles.follows_may_be_missing": "É possível que não estejam a ser mostrados todos os seguidos por este perfil.",
|
"hints.profiles.follows_may_be_missing": "É possível que não estejam a ser mostrados todos os seguidos por este perfil.",
|
||||||
|
|
@ -436,7 +442,7 @@
|
||||||
"hints.profiles.see_more_follows": "Ver mais perfis seguidos em {domain}",
|
"hints.profiles.see_more_follows": "Ver mais perfis seguidos em {domain}",
|
||||||
"hints.profiles.see_more_posts": "Ver mais publicações em {domain}",
|
"hints.profiles.see_more_posts": "Ver mais publicações em {domain}",
|
||||||
"home.column_settings.show_quotes": "Mostrar citações",
|
"home.column_settings.show_quotes": "Mostrar citações",
|
||||||
"home.column_settings.show_reblogs": "Mostrar impulsos",
|
"home.column_settings.show_reblogs": "Mostrar partilhas",
|
||||||
"home.column_settings.show_replies": "Mostrar respostas",
|
"home.column_settings.show_replies": "Mostrar respostas",
|
||||||
"home.hide_announcements": "Ocultar mensagens de manutenção",
|
"home.hide_announcements": "Ocultar mensagens de manutenção",
|
||||||
"home.pending_critical_update.body": "Atualiza o teu servidor Mastodon assim que possível!",
|
"home.pending_critical_update.body": "Atualiza o teu servidor Mastodon assim que possível!",
|
||||||
|
|
@ -468,7 +474,7 @@
|
||||||
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
|
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
|
||||||
"keyboard_shortcuts.back": "voltar atrás",
|
"keyboard_shortcuts.back": "voltar atrás",
|
||||||
"keyboard_shortcuts.blocked": "abrir a lista de utilizadores bloqueados",
|
"keyboard_shortcuts.blocked": "abrir a lista de utilizadores bloqueados",
|
||||||
"keyboard_shortcuts.boost": "impulsionar a publicação",
|
"keyboard_shortcuts.boost": "Partilhar a publicação",
|
||||||
"keyboard_shortcuts.column": "focar uma publicação numa das colunas",
|
"keyboard_shortcuts.column": "focar uma publicação numa das colunas",
|
||||||
"keyboard_shortcuts.compose": "focar área de texto da publicação",
|
"keyboard_shortcuts.compose": "focar área de texto da publicação",
|
||||||
"keyboard_shortcuts.description": "Descrição",
|
"keyboard_shortcuts.description": "Descrição",
|
||||||
|
|
@ -559,7 +565,7 @@
|
||||||
"navigation_bar.advanced_interface": "Abrir na interface web avançada",
|
"navigation_bar.advanced_interface": "Abrir na interface web avançada",
|
||||||
"navigation_bar.automated_deletion": "Eliminação automática de publicações",
|
"navigation_bar.automated_deletion": "Eliminação automática de publicações",
|
||||||
"navigation_bar.blocks": "Utilizadores bloqueados",
|
"navigation_bar.blocks": "Utilizadores bloqueados",
|
||||||
"navigation_bar.bookmarks": "Marcadores",
|
"navigation_bar.bookmarks": "Itens salvos",
|
||||||
"navigation_bar.direct": "Menções privadas",
|
"navigation_bar.direct": "Menções privadas",
|
||||||
"navigation_bar.domain_blocks": "Domínios escondidos",
|
"navigation_bar.domain_blocks": "Domínios escondidos",
|
||||||
"navigation_bar.favourites": "Favoritos",
|
"navigation_bar.favourites": "Favoritos",
|
||||||
|
|
@ -621,8 +627,8 @@
|
||||||
"notification.own_poll": "A tua sondagem terminou",
|
"notification.own_poll": "A tua sondagem terminou",
|
||||||
"notification.poll": "Terminou uma sondagem em que votaste",
|
"notification.poll": "Terminou uma sondagem em que votaste",
|
||||||
"notification.quoted_update": "{name} editou uma publicação que citou",
|
"notification.quoted_update": "{name} editou uma publicação que citou",
|
||||||
"notification.reblog": "{name} impulsionou a tua publicação",
|
"notification.reblog": "{name} partilhou a sua publicação",
|
||||||
"notification.reblog.name_and_others_with_link": "{name} e <a>{count, plural, one {# outro} other {# outros}}</a> impulsionaram a tua publicação",
|
"notification.reblog.name_and_others_with_link": "{name} e <a>{count, plural, one {# outro} other {# outros}}</a> partilharam a sua publicação",
|
||||||
"notification.relationships_severance_event": "Perdeu as ligações com {name}",
|
"notification.relationships_severance_event": "Perdeu as ligações com {name}",
|
||||||
"notification.relationships_severance_event.account_suspension": "Um administrador de {from} suspendeu {target}, o que significa que já não podes receber atualizações dele ou interagir com ele.",
|
"notification.relationships_severance_event.account_suspension": "Um administrador de {from} suspendeu {target}, o que significa que já não podes receber atualizações dele ou interagir com ele.",
|
||||||
"notification.relationships_severance_event.domain_block": "Um administrador de {from} bloqueou {target}, incluindo {followersCount} dos teus seguidores e {followingCount, plural, one {# conta} other {# contas}} que segues.",
|
"notification.relationships_severance_event.domain_block": "Um administrador de {from} bloqueou {target}, incluindo {followersCount} dos teus seguidores e {followingCount, plural, one {# conta} other {# contas}} que segues.",
|
||||||
|
|
@ -665,7 +671,7 @@
|
||||||
"notifications.column_settings.poll": "Resultados da sondagem:",
|
"notifications.column_settings.poll": "Resultados da sondagem:",
|
||||||
"notifications.column_settings.push": "Notificações \"push\"",
|
"notifications.column_settings.push": "Notificações \"push\"",
|
||||||
"notifications.column_settings.quote": "Citações:",
|
"notifications.column_settings.quote": "Citações:",
|
||||||
"notifications.column_settings.reblog": "Impulsos:",
|
"notifications.column_settings.reblog": "Partilhas:",
|
||||||
"notifications.column_settings.show": "Mostrar na coluna",
|
"notifications.column_settings.show": "Mostrar na coluna",
|
||||||
"notifications.column_settings.sound": "Reproduzir som",
|
"notifications.column_settings.sound": "Reproduzir som",
|
||||||
"notifications.column_settings.status": "Novas publicações:",
|
"notifications.column_settings.status": "Novas publicações:",
|
||||||
|
|
@ -673,7 +679,7 @@
|
||||||
"notifications.column_settings.unread_notifications.highlight": "Destacar notificações por ler",
|
"notifications.column_settings.unread_notifications.highlight": "Destacar notificações por ler",
|
||||||
"notifications.column_settings.update": "Edições:",
|
"notifications.column_settings.update": "Edições:",
|
||||||
"notifications.filter.all": "Todas",
|
"notifications.filter.all": "Todas",
|
||||||
"notifications.filter.boosts": "Impulsos",
|
"notifications.filter.boosts": "Partilhas",
|
||||||
"notifications.filter.favourites": "Favoritos",
|
"notifications.filter.favourites": "Favoritos",
|
||||||
"notifications.filter.follows": "Seguidores",
|
"notifications.filter.follows": "Seguidores",
|
||||||
"notifications.filter.mentions": "Menções",
|
"notifications.filter.mentions": "Menções",
|
||||||
|
|
@ -748,6 +754,7 @@
|
||||||
"privacy.unlisted.short": "Público silencioso",
|
"privacy.unlisted.short": "Público silencioso",
|
||||||
"privacy_policy.last_updated": "Última atualização em {date}",
|
"privacy_policy.last_updated": "Última atualização em {date}",
|
||||||
"privacy_policy.title": "Política de privacidade",
|
"privacy_policy.title": "Política de privacidade",
|
||||||
|
"quote_error.edit": "Não é possível adicionar citações ao editar uma publicação.",
|
||||||
"quote_error.poll": "Não é permitido citar sondagens.",
|
"quote_error.poll": "Não é permitido citar sondagens.",
|
||||||
"quote_error.quote": "Apenas é permitida uma citação de cada vez.",
|
"quote_error.quote": "Apenas é permitida uma citação de cada vez.",
|
||||||
"quote_error.unauthorized": "Não está autorizado a citar esta publicação.",
|
"quote_error.unauthorized": "Não está autorizado a citar esta publicação.",
|
||||||
|
|
@ -861,16 +868,16 @@
|
||||||
"status.admin_account": "Abrir a interface de moderação para @{name}",
|
"status.admin_account": "Abrir a interface de moderação para @{name}",
|
||||||
"status.admin_domain": "Abrir interface de moderação para {domain}",
|
"status.admin_domain": "Abrir interface de moderação para {domain}",
|
||||||
"status.admin_status": "Abrir esta publicação na interface de moderação",
|
"status.admin_status": "Abrir esta publicação na interface de moderação",
|
||||||
"status.all_disabled": "Impulsos e citações estão desativados",
|
"status.all_disabled": "Partilhas e citações estão desativados",
|
||||||
"status.block": "Bloquear @{name}",
|
"status.block": "Bloquear @{name}",
|
||||||
"status.bookmark": "Guardar nos marcadores",
|
"status.bookmark": "Guardar nos marcadores",
|
||||||
"status.cancel_reblog_private": "Retirar impulso",
|
"status.cancel_reblog_private": "Deixar de partilhar",
|
||||||
"status.cannot_quote": "Não lhe é permitido citar esta publicação",
|
"status.cannot_quote": "Não lhe é permitido citar esta publicação",
|
||||||
"status.cannot_reblog": "Esta publicação não pode ser impulsionada",
|
"status.cannot_reblog": "Esta publicação não pode ser partilhada",
|
||||||
"status.contains_quote": "Contém citação",
|
"status.contains_quote": "Contém citação",
|
||||||
"status.context.loading": "A carregar mais respostas",
|
"status.context.loading": "A carregar mais respostas",
|
||||||
"status.context.loading_error": "Não foi possível carregar novas respostas",
|
"status.context.loading_error": "Não foi possível carregar novas respostas",
|
||||||
"status.context.loading_success": "Todas as respostas carregadas",
|
"status.context.loading_success": "Novas respostas carregadas",
|
||||||
"status.context.more_replies_found": "Foram encontradas mais respostas",
|
"status.context.more_replies_found": "Foram encontradas mais respostas",
|
||||||
"status.context.retry": "Repetir",
|
"status.context.retry": "Repetir",
|
||||||
"status.context.show": "Mostrar",
|
"status.context.show": "Mostrar",
|
||||||
|
|
@ -917,13 +924,15 @@
|
||||||
"status.quote_private": "Publicações privadas não podem ser citadas",
|
"status.quote_private": "Publicações privadas não podem ser citadas",
|
||||||
"status.quotes": "{count, plural, one {citação} other {citações}}",
|
"status.quotes": "{count, plural, one {citação} other {citações}}",
|
||||||
"status.quotes.empty": "Ainda ninguém citou esta publicação. Quando alguém o fizer, aparecerá aqui.",
|
"status.quotes.empty": "Ainda ninguém citou esta publicação. Quando alguém o fizer, aparecerá aqui.",
|
||||||
|
"status.quotes.local_other_disclaimer": "As citações rejeitadas pelo autor não serão exibidas.",
|
||||||
|
"status.quotes.remote_other_disclaimer": "Apenas citações de {domain} serão garantidamente exibidas aqui. Citações rejeitadas pelo autor não serão exibidas.",
|
||||||
"status.read_more": "Ler mais",
|
"status.read_more": "Ler mais",
|
||||||
"status.reblog": "Impulsionar",
|
"status.reblog": "Partilhar",
|
||||||
"status.reblog_or_quote": "Partilhe ou cite",
|
"status.reblog_or_quote": "Partilhe ou cite",
|
||||||
"status.reblog_private": "Partilhe novamente com os seus seguidores",
|
"status.reblog_private": "Partilhe novamente com os seus seguidores",
|
||||||
"status.reblogged_by": "{name} impulsionou",
|
"status.reblogged_by": "{name} partilhou",
|
||||||
"status.reblogs": "{count, plural, one {impulso} other {impulsos}}",
|
"status.reblogs": "{count, plural, one {partilha} other {partilhas}}",
|
||||||
"status.reblogs.empty": "Ainda ninguém impulsionou esta publicação. Quando alguém o fizer, aparecerá aqui.",
|
"status.reblogs.empty": "Ainda ninguém partilhou esta publicação. Quando alguém o fizer, aparecerá aqui.",
|
||||||
"status.redraft": "Eliminar e reescrever",
|
"status.redraft": "Eliminar e reescrever",
|
||||||
"status.remove_bookmark": "Retirar dos marcadores",
|
"status.remove_bookmark": "Retirar dos marcadores",
|
||||||
"status.remove_favourite": "Remover dos favoritos",
|
"status.remove_favourite": "Remover dos favoritos",
|
||||||
|
|
|
||||||
|
|
@ -329,6 +329,7 @@
|
||||||
"empty_column.bookmarked_statuses": "S’keni faqeruajtur ende ndonjë mesazh. Kur faqeruani një të tillë, ai do të shfaqet këtu.",
|
"empty_column.bookmarked_statuses": "S’keni faqeruajtur ende ndonjë mesazh. Kur faqeruani një të tillë, ai do të shfaqet këtu.",
|
||||||
"empty_column.community": "Rrjedha kohore vendore është e zbrazët. Shkruani diçka publikisht që t’i hyhet valles!",
|
"empty_column.community": "Rrjedha kohore vendore është e zbrazët. Shkruani diçka publikisht që t’i hyhet valles!",
|
||||||
"empty_column.direct": "S’keni ende ndonjë përmendje private. Kur dërgoni ose merrni një të tillë, do të shfaqet këtu.",
|
"empty_column.direct": "S’keni ende ndonjë përmendje private. Kur dërgoni ose merrni një të tillë, do të shfaqet këtu.",
|
||||||
|
"empty_column.disabled_feed": "Kjo prurje është çaktivizuar nga përgjegjësit e shërbyesit tuaj.",
|
||||||
"empty_column.domain_blocks": "Ende s’ka përkatësi të fshehura.",
|
"empty_column.domain_blocks": "Ende s’ka përkatësi të fshehura.",
|
||||||
"empty_column.explore_statuses": "Asgjë në modë tani. Kontrolloni më vonë!",
|
"empty_column.explore_statuses": "Asgjë në modë tani. Kontrolloni më vonë!",
|
||||||
"empty_column.favourited_statuses": "S’keni ende ndonjë postim të parapëlqyer. Kur të parapëlqeni një të tillë, do të shfaqet këtu.",
|
"empty_column.favourited_statuses": "S’keni ende ndonjë postim të parapëlqyer. Kur të parapëlqeni një të tillë, do të shfaqet këtu.",
|
||||||
|
|
@ -872,7 +873,7 @@
|
||||||
"status.contains_quote": "Përmban citim",
|
"status.contains_quote": "Përmban citim",
|
||||||
"status.context.loading": "Po ngarkohen më tepër përgjigje",
|
"status.context.loading": "Po ngarkohen më tepër përgjigje",
|
||||||
"status.context.loading_error": "S’u ngarkuan dot përgjigje të reja",
|
"status.context.loading_error": "S’u ngarkuan dot përgjigje të reja",
|
||||||
"status.context.loading_success": "Janë ngarkuar krejt përgjigjet",
|
"status.context.loading_success": "U ngarkuan përgjigje të reja",
|
||||||
"status.context.more_replies_found": "U gjetën më tepër përgjigje",
|
"status.context.more_replies_found": "U gjetën më tepër përgjigje",
|
||||||
"status.context.retry": "Riprovoni",
|
"status.context.retry": "Riprovoni",
|
||||||
"status.context.show": "Shfaqe",
|
"status.context.show": "Shfaqe",
|
||||||
|
|
|
||||||
|
|
@ -876,7 +876,7 @@
|
||||||
"status.contains_quote": "Alıntı içeriyor",
|
"status.contains_quote": "Alıntı içeriyor",
|
||||||
"status.context.loading": "Daha fazla yanıt yükleniyor",
|
"status.context.loading": "Daha fazla yanıt yükleniyor",
|
||||||
"status.context.loading_error": "Yeni yanıtlar yüklenemiyor",
|
"status.context.loading_error": "Yeni yanıtlar yüklenemiyor",
|
||||||
"status.context.loading_success": "Tüm yanıtlar yüklendi",
|
"status.context.loading_success": "Yeni yanıtlar yüklendi",
|
||||||
"status.context.more_replies_found": "Daha fazla yanıt bulundu",
|
"status.context.more_replies_found": "Daha fazla yanıt bulundu",
|
||||||
"status.context.retry": "Yeniden dene",
|
"status.context.retry": "Yeniden dene",
|
||||||
"status.context.show": "Göster",
|
"status.context.show": "Göster",
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,12 @@
|
||||||
"account.badges.group": "گۇرۇپپا",
|
"account.badges.group": "گۇرۇپپا",
|
||||||
"account.block": "@{name} نى توس",
|
"account.block": "@{name} نى توس",
|
||||||
"account.block_domain": "{domain} دائىرىنى توس",
|
"account.block_domain": "{domain} دائىرىنى توس",
|
||||||
|
"account.block_short": "توس",
|
||||||
|
"account.blocked": "توسۇلدى",
|
||||||
|
"account.blocking": "توسۇۋاتىدۇ",
|
||||||
"account.cancel_follow_request": "ئەگىشىش ئىلتىماسىدىن ۋاز كەچ",
|
"account.cancel_follow_request": "ئەگىشىش ئىلتىماسىدىن ۋاز كەچ",
|
||||||
|
"account.copy": "تەرجىمىھال ئۇلانمىسىنى كۆچۈر",
|
||||||
|
"account.direct": "@{name} نى يوشۇرۇن ئاتا",
|
||||||
"account.posts": "يازما",
|
"account.posts": "يازما",
|
||||||
"account.posts_with_replies": "يازما ۋە ئىنكاس",
|
"account.posts_with_replies": "يازما ۋە ئىنكاس",
|
||||||
"account.report": "@{name} نى پاش قىل",
|
"account.report": "@{name} نى پاش قىل",
|
||||||
|
|
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "Bạn chưa lưu tút nào. Nếu có, nó sẽ hiển thị ở đây.",
|
"empty_column.bookmarked_statuses": "Bạn chưa lưu tút nào. Nếu có, nó sẽ hiển thị ở đây.",
|
||||||
"empty_column.community": "Máy chủ của bạn chưa có tút nào công khai. Bạn hãy thử viết gì đó đi!",
|
"empty_column.community": "Máy chủ của bạn chưa có tút nào công khai. Bạn hãy thử viết gì đó đi!",
|
||||||
"empty_column.direct": "Bạn chưa có tin nhắn riêng nào. Khi bạn gửi hoặc nhận một tin nhắn riêng, nó sẽ xuất hiện ở đây.",
|
"empty_column.direct": "Bạn chưa có tin nhắn riêng nào. Khi bạn gửi hoặc nhận một tin nhắn riêng, nó sẽ xuất hiện ở đây.",
|
||||||
|
"empty_column.disabled_feed": "Bảng tin này bị vô hiệu hóa bởi quản trị viên máy chủ của bạn.",
|
||||||
"empty_column.domain_blocks": "Chưa ẩn bất kỳ máy chủ nào.",
|
"empty_column.domain_blocks": "Chưa ẩn bất kỳ máy chủ nào.",
|
||||||
"empty_column.explore_statuses": "Chưa có gì hot. Kiểm tra lại sau!",
|
"empty_column.explore_statuses": "Chưa có gì hot. Kiểm tra lại sau!",
|
||||||
"empty_column.favourited_statuses": "Bạn chưa thích tút nào. Hãy thử đi, nó sẽ xuất hiện ở đây.",
|
"empty_column.favourited_statuses": "Bạn chưa thích tút nào. Hãy thử đi, nó sẽ xuất hiện ở đây.",
|
||||||
|
|
@ -753,6 +754,7 @@
|
||||||
"privacy.unlisted.short": "Hạn chế",
|
"privacy.unlisted.short": "Hạn chế",
|
||||||
"privacy_policy.last_updated": "Cập nhật lần cuối {date}",
|
"privacy_policy.last_updated": "Cập nhật lần cuối {date}",
|
||||||
"privacy_policy.title": "Chính sách bảo mật",
|
"privacy_policy.title": "Chính sách bảo mật",
|
||||||
|
"quote_error.edit": "Không thể thêm trích dẫn khi sửa tút.",
|
||||||
"quote_error.poll": "Không thể trích dẫn vốt.",
|
"quote_error.poll": "Không thể trích dẫn vốt.",
|
||||||
"quote_error.quote": "Chỉ được trích dẫn một lần.",
|
"quote_error.quote": "Chỉ được trích dẫn một lần.",
|
||||||
"quote_error.unauthorized": "Bạn không được cấp quyền trích dẫn tút này.",
|
"quote_error.unauthorized": "Bạn không được cấp quyền trích dẫn tút này.",
|
||||||
|
|
@ -875,7 +877,7 @@
|
||||||
"status.contains_quote": "Chứa trích dẫn",
|
"status.contains_quote": "Chứa trích dẫn",
|
||||||
"status.context.loading": "Tải thêm các trả lời",
|
"status.context.loading": "Tải thêm các trả lời",
|
||||||
"status.context.loading_error": "Không thể tải những trả lời mới",
|
"status.context.loading_error": "Không thể tải những trả lời mới",
|
||||||
"status.context.loading_success": "Đã tải toàn bộ trả lời",
|
"status.context.loading_success": "Đã tải những lượt trả lời mới",
|
||||||
"status.context.more_replies_found": "Có trả lời mới",
|
"status.context.more_replies_found": "Có trả lời mới",
|
||||||
"status.context.retry": "Thử lại",
|
"status.context.retry": "Thử lại",
|
||||||
"status.context.show": "Hiện",
|
"status.context.show": "Hiện",
|
||||||
|
|
|
||||||
|
|
@ -876,7 +876,7 @@
|
||||||
"status.contains_quote": "包含引用",
|
"status.contains_quote": "包含引用",
|
||||||
"status.context.loading": "正在加载更多回复",
|
"status.context.loading": "正在加载更多回复",
|
||||||
"status.context.loading_error": "无法加载新回复",
|
"status.context.loading_error": "无法加载新回复",
|
||||||
"status.context.loading_success": "已加载所有回复",
|
"status.context.loading_success": "已加载新回复",
|
||||||
"status.context.more_replies_found": "已找到更多回复",
|
"status.context.more_replies_found": "已找到更多回复",
|
||||||
"status.context.retry": "重试",
|
"status.context.retry": "重试",
|
||||||
"status.context.show": "显示",
|
"status.context.show": "显示",
|
||||||
|
|
|
||||||
|
|
@ -105,8 +105,8 @@
|
||||||
"alert.unexpected.message": "發生非預期的錯誤。",
|
"alert.unexpected.message": "發生非預期的錯誤。",
|
||||||
"alert.unexpected.title": "哎呀!",
|
"alert.unexpected.title": "哎呀!",
|
||||||
"alt_text_badge.title": "ALT 說明文字",
|
"alt_text_badge.title": "ALT 說明文字",
|
||||||
"alt_text_modal.add_alt_text": "新增說明文字",
|
"alt_text_modal.add_alt_text": "新增 ALT 說明文字",
|
||||||
"alt_text_modal.add_text_from_image": "自圖片新增說明文字",
|
"alt_text_modal.add_text_from_image": "自圖片新增 ALT 說明文字",
|
||||||
"alt_text_modal.cancel": "取消",
|
"alt_text_modal.cancel": "取消",
|
||||||
"alt_text_modal.change_thumbnail": "變更預覽圖",
|
"alt_text_modal.change_thumbnail": "變更預覽圖",
|
||||||
"alt_text_modal.describe_for_people_with_hearing_impairments": "替聽覺障礙人士描述...",
|
"alt_text_modal.describe_for_people_with_hearing_impairments": "替聽覺障礙人士描述...",
|
||||||
|
|
@ -239,10 +239,10 @@
|
||||||
"confirmations.logout.confirm": "登出",
|
"confirmations.logout.confirm": "登出",
|
||||||
"confirmations.logout.message": "您確定要登出嗎?",
|
"confirmations.logout.message": "您確定要登出嗎?",
|
||||||
"confirmations.logout.title": "您確定要登出嗎?",
|
"confirmations.logout.title": "您確定要登出嗎?",
|
||||||
"confirmations.missing_alt_text.confirm": "新增說明文字",
|
"confirmations.missing_alt_text.confirm": "新增 ALT 說明文字",
|
||||||
"confirmations.missing_alt_text.message": "您的嘟文中的多媒體內容未附上說明文字。添加說明文字描述能幫助更多人存取您的內容。",
|
"confirmations.missing_alt_text.message": "您的嘟文中的多媒體內容未附上 ALT 說明文字。添加說明文字描述能幫助更多人存取您的內容。",
|
||||||
"confirmations.missing_alt_text.secondary": "仍要發嘟",
|
"confirmations.missing_alt_text.secondary": "仍要發嘟",
|
||||||
"confirmations.missing_alt_text.title": "是否新增說明文字?",
|
"confirmations.missing_alt_text.title": "是否新增 ALT 說明文字?",
|
||||||
"confirmations.mute.confirm": "靜音",
|
"confirmations.mute.confirm": "靜音",
|
||||||
"confirmations.quiet_post_quote_info.dismiss": "不要再提醒我",
|
"confirmations.quiet_post_quote_info.dismiss": "不要再提醒我",
|
||||||
"confirmations.quiet_post_quote_info.got_it": "了解",
|
"confirmations.quiet_post_quote_info.got_it": "了解",
|
||||||
|
|
@ -333,6 +333,7 @@
|
||||||
"empty_column.bookmarked_statuses": "您還沒有新增任何書籤。當您新增書籤時,它將於此顯示。",
|
"empty_column.bookmarked_statuses": "您還沒有新增任何書籤。當您新增書籤時,它將於此顯示。",
|
||||||
"empty_column.community": "本站時間軸是空的。快公開嘟些文搶頭香啊!",
|
"empty_column.community": "本站時間軸是空的。快公開嘟些文搶頭香啊!",
|
||||||
"empty_column.direct": "您還沒有收到任何私訊。當您私訊別人或收到私訊時,它將於此顯示。",
|
"empty_column.direct": "您還沒有收到任何私訊。當您私訊別人或收到私訊時,它將於此顯示。",
|
||||||
|
"empty_column.disabled_feed": "此內容已被您的伺服器管理員停用。",
|
||||||
"empty_column.domain_blocks": "尚未封鎖任何網域。",
|
"empty_column.domain_blocks": "尚未封鎖任何網域。",
|
||||||
"empty_column.explore_statuses": "目前沒有熱門討論,請稍候再回來看看!",
|
"empty_column.explore_statuses": "目前沒有熱門討論,請稍候再回來看看!",
|
||||||
"empty_column.favourited_statuses": "您還沒有加過任何嘟文至最愛。當您收藏嘟文時,它將於此顯示。",
|
"empty_column.favourited_statuses": "您還沒有加過任何嘟文至最愛。當您收藏嘟文時,它將於此顯示。",
|
||||||
|
|
@ -876,7 +877,7 @@
|
||||||
"status.contains_quote": "包含引用嘟文",
|
"status.contains_quote": "包含引用嘟文",
|
||||||
"status.context.loading": "讀取更多回嘟",
|
"status.context.loading": "讀取更多回嘟",
|
||||||
"status.context.loading_error": "無法讀取新回嘟",
|
"status.context.loading_error": "無法讀取新回嘟",
|
||||||
"status.context.loading_success": "已讀取所有回嘟",
|
"status.context.loading_success": "已讀取新回嘟",
|
||||||
"status.context.more_replies_found": "已有更多回嘟",
|
"status.context.more_replies_found": "已有更多回嘟",
|
||||||
"status.context.retry": "再試一次",
|
"status.context.retry": "再試一次",
|
||||||
"status.context.show": "顯示",
|
"status.context.show": "顯示",
|
||||||
|
|
@ -912,8 +913,8 @@
|
||||||
"status.quote_error.limited_account_hint.action": "仍要顯示",
|
"status.quote_error.limited_account_hint.action": "仍要顯示",
|
||||||
"status.quote_error.limited_account_hint.title": "此個人檔案已被 {domain} 的管理員隱藏。",
|
"status.quote_error.limited_account_hint.title": "此個人檔案已被 {domain} 的管理員隱藏。",
|
||||||
"status.quote_error.not_available": "無法取得該嘟文",
|
"status.quote_error.not_available": "無法取得該嘟文",
|
||||||
"status.quote_error.pending_approval": "嘟文正在發送中",
|
"status.quote_error.pending_approval": "嘟文正在等候審核中",
|
||||||
"status.quote_error.pending_approval_popout.body": "您能於 Mastodon 控制是否允許引用您的嘟文。此嘟文正在等待原始作者核准。",
|
"status.quote_error.pending_approval_popout.body": "您能於 Mastodon 控制是否允許引用您的嘟文。此嘟文正在等待原始作者審核。",
|
||||||
"status.quote_error.revoked": "嘟文已被作者刪除",
|
"status.quote_error.revoked": "嘟文已被作者刪除",
|
||||||
"status.quote_followers_only": "只有我的跟隨者能引用此嘟文",
|
"status.quote_followers_only": "只有我的跟隨者能引用此嘟文",
|
||||||
"status.quote_manual_review": "嘟文作者將人工審閱",
|
"status.quote_manual_review": "嘟文作者將人工審閱",
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
export const PEMRISSION_VIEW_FEEDS = 0x0000000000100000;
|
||||||
export const PERMISSION_INVITE_USERS = 0x0000000000010000;
|
export const PERMISSION_INVITE_USERS = 0x0000000000010000;
|
||||||
export const PERMISSION_MANAGE_USERS = 0x0000000000000400;
|
export const PERMISSION_MANAGE_USERS = 0x0000000000000400;
|
||||||
export const PERMISSION_MANAGE_TAXONOMIES = 0x0000000000000100;
|
export const PERMISSION_MANAGE_TAXONOMIES = 0x0000000000000100;
|
||||||
|
|
@ -22,3 +23,19 @@ export function canManageReports(permissions: number) {
|
||||||
(permissions & PERMISSION_MANAGE_REPORTS) === PERMISSION_MANAGE_REPORTS
|
(permissions & PERMISSION_MANAGE_REPORTS) === PERMISSION_MANAGE_REPORTS
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const canViewFeed = (
|
||||||
|
signedIn: boolean,
|
||||||
|
permissions: number,
|
||||||
|
setting: 'public' | 'authenticated' | 'disabled' | undefined,
|
||||||
|
) => {
|
||||||
|
switch (setting) {
|
||||||
|
case 'public':
|
||||||
|
return true;
|
||||||
|
case 'authenticated':
|
||||||
|
return signedIn;
|
||||||
|
case 'disabled':
|
||||||
|
default:
|
||||||
|
return (permissions & PEMRISSION_VIEW_FEEDS) === PEMRISSION_VIEW_FEEDS;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,6 @@
|
||||||
// If there are no polyfills, then this is just Promise.resolve() which means
|
// If there are no polyfills, then this is just Promise.resolve() which means
|
||||||
// it will execute in the same tick of the event loop (i.e. near-instant).
|
// it will execute in the same tick of the event loop (i.e. near-instant).
|
||||||
|
|
||||||
// eslint-disable-next-line import/extensions -- This file is virtual so it thinks it has an extension
|
|
||||||
import 'vite/modulepreload-polyfill';
|
|
||||||
|
|
||||||
import { loadIntlPolyfills } from './intl';
|
import { loadIntlPolyfills } from './intl';
|
||||||
|
|
||||||
function importExtraPolyfills() {
|
function importExtraPolyfills() {
|
||||||
|
|
@ -17,6 +14,7 @@ export function loadPolyfills() {
|
||||||
const needsExtraPolyfills = !window.requestIdleCallback;
|
const needsExtraPolyfills = !window.requestIdleCallback;
|
||||||
|
|
||||||
return Promise.all([
|
return Promise.all([
|
||||||
|
loadVitePreloadPolyfill(),
|
||||||
loadIntlPolyfills(),
|
loadIntlPolyfills(),
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- those properties might not exist in old browsers, even if they are always here in types
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- those properties might not exist in old browsers, even if they are always here in types
|
||||||
needsExtraPolyfills ? importExtraPolyfills() : Promise.resolve(),
|
needsExtraPolyfills ? importExtraPolyfills() : Promise.resolve(),
|
||||||
|
|
@ -31,5 +29,13 @@ async function loadEmojiPolyfills() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Loads Vite's module preload polyfill for older browsers, but not in a Worker context.
|
||||||
|
function loadVitePreloadPolyfill() {
|
||||||
|
if (typeof document === 'undefined') return;
|
||||||
|
// @ts-expect-error -- This is a virtual module provided by Vite.
|
||||||
|
// eslint-disable-next-line import/extensions
|
||||||
|
return import('vite/modulepreload-polyfill');
|
||||||
|
}
|
||||||
|
|
||||||
// Null unless polyfill is needed.
|
// Null unless polyfill is needed.
|
||||||
export let emojiRegexPolyfill: RegExp | null = null;
|
export let emojiRegexPolyfill: RegExp | null = null;
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ export function isProduction() {
|
||||||
else return import.meta.env.PROD;
|
else return import.meta.env.PROD;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type Features = 'modern_emojis' | 'fasp' | 'http_message_signatures';
|
export type Features = 'modern_emojis' | 'fasp';
|
||||||
|
|
||||||
export function isFeatureEnabled(feature: Features) {
|
export function isFeatureEnabled(feature: Features) {
|
||||||
return initialState?.features.includes(feature) ?? false;
|
return initialState?.features.includes(feature) ?? false;
|
||||||
|
|
|
||||||
|
|
@ -524,3 +524,7 @@ a.sparkline {
|
||||||
opacity: 0.25;
|
opacity: 0.25;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kbd {
|
||||||
|
background-color: color.change($ui-highlight-color, $alpha: 0.1);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -488,6 +488,14 @@ body,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kbd {
|
||||||
|
font-family: Courier, monospace;
|
||||||
|
background-color: color.change($ui-secondary-color, $alpha: 0.1);
|
||||||
|
padding: 4px;
|
||||||
|
padding-bottom: 2px;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
.filters {
|
.filters {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
|
|
@ -1955,60 +1963,77 @@ a.sparkline {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
|
|
||||||
|
&.status--has-quote {
|
||||||
|
.quote-inline {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.status__quote & {
|
||||||
|
// Remove the border from the .status__card within .status__quote
|
||||||
|
border: none;
|
||||||
|
|
||||||
|
.display-name__account {
|
||||||
|
line-height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status__avatar,
|
||||||
|
.status__avatar .account__avatar {
|
||||||
|
width: 32px;
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.status__prepend {
|
.status__prepend {
|
||||||
padding: 0 0 15px;
|
padding: 0 0 15px;
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.status__content {
|
> details {
|
||||||
padding-top: 0;
|
summary {
|
||||||
|
display: block;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background: var(--nested-card-background);
|
||||||
|
color: var(--nested-card-text);
|
||||||
|
border: var(--nested-card-border);
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 8px 13px;
|
||||||
|
position: relative;
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 22px;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
> details {
|
&::after {
|
||||||
summary {
|
content: attr(data-show, 'Show more');
|
||||||
|
margin-top: 8px;
|
||||||
display: block;
|
display: block;
|
||||||
box-sizing: border-box;
|
|
||||||
background: var(--nested-card-background);
|
|
||||||
color: var(--nested-card-text);
|
|
||||||
border: var(--nested-card-border);
|
|
||||||
border-radius: 8px;
|
|
||||||
padding: 8px 13px;
|
|
||||||
position: relative;
|
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
line-height: 22px;
|
line-height: 20px;
|
||||||
|
color: $highlight-text-color;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
border: 0;
|
||||||
&::after {
|
background: transparent;
|
||||||
content: attr(data-show, 'Show more');
|
padding: 0;
|
||||||
margin-top: 8px;
|
text-decoration: none;
|
||||||
display: block;
|
font-weight: 500;
|
||||||
font-size: 15px;
|
|
||||||
line-height: 20px;
|
|
||||||
color: $highlight-text-color;
|
|
||||||
cursor: pointer;
|
|
||||||
border: 0;
|
|
||||||
background: transparent;
|
|
||||||
padding: 0;
|
|
||||||
text-decoration: none;
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover,
|
|
||||||
&:focus-visible {
|
|
||||||
&::after {
|
|
||||||
text-decoration: underline !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&[open] summary {
|
&:hover,
|
||||||
margin-bottom: 16px;
|
&:focus-visible {
|
||||||
|
|
||||||
&::after {
|
&::after {
|
||||||
content: attr(data-hide, 'Hide post');
|
text-decoration: underline !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&[open] summary {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
content: attr(data-hide, 'Hide post');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.preview-card {
|
.preview-card {
|
||||||
|
|
@ -2065,6 +2090,14 @@ a.sparkline {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.detailed-status__meta {
|
||||||
|
.detailed-status__application,
|
||||||
|
.detailed-status__datetime,
|
||||||
|
.detailed-status__link {
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.admin {
|
.admin {
|
||||||
|
|
|
||||||
|
|
@ -1101,8 +1101,7 @@
|
||||||
font-size: inherit;
|
font-size: inherit;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
object-fit: contain;
|
object-fit: contain;
|
||||||
margin: -0.2ex 0.15em 0.2ex;
|
margin: -0.2ex 0.15em 0;
|
||||||
width: 16px;
|
|
||||||
height: 16px;
|
height: 16px;
|
||||||
|
|
||||||
img {
|
img {
|
||||||
|
|
@ -1144,7 +1143,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.emojione {
|
.emojione {
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
height: 20px;
|
||||||
margin: -3px 0 0;
|
margin: -3px 0 0;
|
||||||
}
|
}
|
||||||
|
|
@ -1367,7 +1365,6 @@
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
|
||||||
.emojione {
|
.emojione {
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
height: 20px;
|
||||||
margin: -3px 0 0;
|
margin: -3px 0 0;
|
||||||
}
|
}
|
||||||
|
|
@ -1794,7 +1791,6 @@
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
|
|
||||||
.emojione {
|
.emojione {
|
||||||
width: 24px;
|
|
||||||
height: 24px;
|
height: 24px;
|
||||||
margin: -1px 0 0;
|
margin: -1px 0 0;
|
||||||
}
|
}
|
||||||
|
|
@ -7089,7 +7085,6 @@ a.status-card {
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
|
|
||||||
.emojione {
|
.emojione {
|
||||||
width: 24px;
|
|
||||||
height: 24px;
|
height: 24px;
|
||||||
margin: -1px 0 0;
|
margin: -1px 0 0;
|
||||||
}
|
}
|
||||||
|
|
@ -8421,7 +8416,6 @@ noscript {
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
|
|
||||||
.emojione {
|
.emojione {
|
||||||
width: 22px;
|
|
||||||
height: 22px;
|
height: 22px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -9368,19 +9362,13 @@ noscript {
|
||||||
|
|
||||||
&__shared {
|
&__shared {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: baseline;
|
||||||
color: $darker-text-color;
|
color: $darker-text-color;
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
|
|
||||||
& > span {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&__pill {
|
&__pill {
|
||||||
background: var(--surface-variant-background-color);
|
background: var(--surface-variant-background-color);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
|
|
@ -9390,6 +9378,7 @@ noscript {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
line-height: 16px;
|
line-height: 16px;
|
||||||
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__author-link {
|
&__author-link {
|
||||||
|
|
|
||||||
|
|
@ -152,6 +152,9 @@
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
position: relative;
|
position: relative;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
display: inline-flex !important;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:hover::before {
|
&:hover::before {
|
||||||
|
|
|
||||||
|
|
@ -224,6 +224,10 @@ code {
|
||||||
list-style: disc;
|
list-style: disc;
|
||||||
margin-inline-start: 18px;
|
margin-inline-start: 18px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
vertical-align: -3px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.hint {
|
ul.hint {
|
||||||
|
|
@ -755,6 +759,12 @@ code {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.hidden-on-touch-devices {
|
||||||
|
@media screen and (pointer: coarse) {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
color: $darker-text-color;
|
color: $darker-text-color;
|
||||||
|
|
|
||||||
|
|
@ -356,7 +356,7 @@ a.table-action-link {
|
||||||
|
|
||||||
// Reset the status card to not have borders, background or padding when
|
// Reset the status card to not have borders, background or padding when
|
||||||
// inline in the table of statuses
|
// inline in the table of statuses
|
||||||
.status__card {
|
.batch-table__row__content > .status__card {
|
||||||
border: none;
|
border: none;
|
||||||
background: none;
|
background: none;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ class ActivityPub::Activity::QuoteRequest < ActivityPub::Activity
|
||||||
return if non_matching_uri_hosts?(@account.uri, @json['id'])
|
return if non_matching_uri_hosts?(@account.uri, @json['id'])
|
||||||
|
|
||||||
quoted_status = status_from_uri(object_uri)
|
quoted_status = status_from_uri(object_uri)
|
||||||
return if quoted_status.nil? || !quoted_status.account.local? || !quoted_status.distributable?
|
return if quoted_status.nil? || !quoted_status.account.local? || !quoted_status.distributable? || quoted_status.reblog?
|
||||||
|
|
||||||
if StatusPolicy.new(@account, quoted_status).quote?
|
if StatusPolicy.new(@account, quoted_status).quote?
|
||||||
accept_quote_request!(quoted_status)
|
accept_quote_request!(quoted_status)
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ module Extractor
|
||||||
end
|
end
|
||||||
|
|
||||||
def extract_hashtags_with_indices(text, _options = {})
|
def extract_hashtags_with_indices(text, _options = {})
|
||||||
return [] unless text&.index('#')
|
return [] unless text&.index(/[##]/)
|
||||||
|
|
||||||
possible_entries = []
|
possible_entries = []
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -153,6 +153,7 @@ class SignedRequest
|
||||||
'signature-input' => @request.headers['signature-input'],
|
'signature-input' => @request.headers['signature-input'],
|
||||||
'signature' => @request.headers['signature'],
|
'signature' => @request.headers['signature'],
|
||||||
})
|
})
|
||||||
|
@message = Linzer::Message.new(@request.rack_request)
|
||||||
end
|
end
|
||||||
|
|
||||||
def key_id
|
def key_id
|
||||||
|
|
@ -174,7 +175,7 @@ class SignedRequest
|
||||||
def verified?(actor)
|
def verified?(actor)
|
||||||
key = Linzer.new_rsa_v1_5_sha256_public_key(actor.public_key)
|
key = Linzer.new_rsa_v1_5_sha256_public_key(actor.public_key)
|
||||||
|
|
||||||
Linzer.verify!(@request.rack_request, key:)
|
Linzer.verify(key, @message, @signature)
|
||||||
rescue Linzer::VerifyError
|
rescue Linzer::VerifyError
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
@ -187,9 +188,9 @@ class SignedRequest
|
||||||
|
|
||||||
def verify_body_digest!
|
def verify_body_digest!
|
||||||
return unless signed_headers.include?('content-digest')
|
return unless signed_headers.include?('content-digest')
|
||||||
raise Mastodon::SignatureVerificationError, 'Content-Digest header missing' unless @request.headers.key?('content-digest')
|
raise Mastodon::SignatureVerificationError, 'Content-Digest header missing' if @message.header('content-digest').nil?
|
||||||
|
|
||||||
digests = Starry.parse_dictionary(@request.headers['content-digest'])
|
digests = Starry.parse_dictionary(@message.header('content-digest'))
|
||||||
raise Mastodon::SignatureVerificationError, "Mastodon only supports SHA-256 in Content-Digest header. Offered algorithms: #{digests.keys.join(', ')}" unless digests.key?('sha-256')
|
raise Mastodon::SignatureVerificationError, "Mastodon only supports SHA-256 in Content-Digest header. Offered algorithms: #{digests.keys.join(', ')}" unless digests.key?('sha-256')
|
||||||
|
|
||||||
received_digest = Base64.strict_encode64(digests['sha-256'].value)
|
received_digest = Base64.strict_encode64(digests['sha-256'].value)
|
||||||
|
|
@ -237,7 +238,7 @@ class SignedRequest
|
||||||
|
|
||||||
def initialize(request)
|
def initialize(request)
|
||||||
@signature =
|
@signature =
|
||||||
if Mastodon::Feature.http_message_signatures_enabled? && request.headers['signature-input'].present?
|
if request.headers['signature-input'].present?
|
||||||
HttpMessageSignature.new(request)
|
HttpMessageSignature.new(request)
|
||||||
else
|
else
|
||||||
HttpSignature.new(request)
|
HttpSignature.new(request)
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,7 @@ class StatusCacheHydrator
|
||||||
payload[:filtered] = payload[:reblog][:filtered]
|
payload[:filtered] = payload[:reblog][:filtered]
|
||||||
payload[:favourited] = payload[:reblog][:favourited]
|
payload[:favourited] = payload[:reblog][:favourited]
|
||||||
payload[:reblogged] = payload[:reblog][:reblogged]
|
payload[:reblogged] = payload[:reblog][:reblogged]
|
||||||
|
payload[:quote_approval] = payload[:reblog][:quote_approval]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,12 +17,16 @@ class Vacuum::MediaAttachmentsVacuum
|
||||||
def vacuum_cached_files!
|
def vacuum_cached_files!
|
||||||
media_attachments_past_retention_period.find_in_batches do |media_attachments|
|
media_attachments_past_retention_period.find_in_batches do |media_attachments|
|
||||||
AttachmentBatch.new(MediaAttachment, media_attachments).clear
|
AttachmentBatch.new(MediaAttachment, media_attachments).clear
|
||||||
|
rescue => e
|
||||||
|
Rails.logger.error("Skipping batch while removing cached media attachments due to error: #{e}")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def vacuum_orphaned_records!
|
def vacuum_orphaned_records!
|
||||||
orphaned_media_attachments.find_in_batches do |media_attachments|
|
orphaned_media_attachments.find_in_batches do |media_attachments|
|
||||||
AttachmentBatch.new(MediaAttachment, media_attachments).delete
|
AttachmentBatch.new(MediaAttachment, media_attachments).delete
|
||||||
|
rescue => e
|
||||||
|
Rails.logger.error("Skipping batch while removing orphaned media attachments due to error: #{e}")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,8 @@ class Vacuum::PreviewCardsVacuum
|
||||||
def vacuum_cached_images!
|
def vacuum_cached_images!
|
||||||
preview_cards_past_retention_period.find_in_batches do |preview_card|
|
preview_cards_past_retention_period.find_in_batches do |preview_card|
|
||||||
AttachmentBatch.new(PreviewCard, preview_card).clear
|
AttachmentBatch.new(PreviewCard, preview_card).clear
|
||||||
|
rescue => e
|
||||||
|
Rails.logger.error("Skipping batch while removing cached preview cards due to error: #{e}")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ module Status::InteractionPolicyConcern
|
||||||
|
|
||||||
# Returns `:automatic`, `:manual`, `:unknown` or `:denied`
|
# Returns `:automatic`, `:manual`, `:unknown` or `:denied`
|
||||||
def quote_policy_for_account(other_account, preloaded_relations: {})
|
def quote_policy_for_account(other_account, preloaded_relations: {})
|
||||||
return :denied if other_account.nil? || direct_visibility?
|
return :denied if other_account.nil? || direct_visibility? || reblog?
|
||||||
|
|
||||||
following_author = nil
|
following_author = nil
|
||||||
followed_by_author = nil
|
followed_by_author = nil
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,10 @@ module User::HasSettings
|
||||||
settings['web.reblog_modal']
|
settings['web.reblog_modal']
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def setting_quick_boosting
|
||||||
|
settings['web.quick_boosting']
|
||||||
|
end
|
||||||
|
|
||||||
def setting_delete_modal
|
def setting_delete_modal
|
||||||
settings['web.delete_modal']
|
settings['web.delete_modal']
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ class Export
|
||||||
def to_bookmarks_csv
|
def to_bookmarks_csv
|
||||||
CSV.generate do |csv|
|
CSV.generate do |csv|
|
||||||
account.bookmarks.includes(:status).reorder(id: :desc).each do |bookmark|
|
account.bookmarks.includes(:status).reorder(id: :desc).each do |bookmark|
|
||||||
csv << [ActivityPub::TagManager.instance.uri_for(bookmark.status)]
|
csv << [ActivityPub::TagManager.instance.uri_for(bookmark.status)] if bookmark.status.present?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,6 @@ class Form::AdminSettings
|
||||||
thumbnail
|
thumbnail
|
||||||
mascot
|
mascot
|
||||||
trends
|
trends
|
||||||
trends_as_landing_page
|
|
||||||
trendable_by_default
|
trendable_by_default
|
||||||
show_domain_blocks
|
show_domain_blocks
|
||||||
show_domain_blocks_rationale
|
show_domain_blocks_rationale
|
||||||
|
|
@ -44,6 +43,7 @@ class Form::AdminSettings
|
||||||
remote_live_feed_access
|
remote_live_feed_access
|
||||||
local_topic_feed_access
|
local_topic_feed_access
|
||||||
remote_topic_feed_access
|
remote_topic_feed_access
|
||||||
|
landing_page
|
||||||
).freeze
|
).freeze
|
||||||
|
|
||||||
INTEGER_KEYS = %i(
|
INTEGER_KEYS = %i(
|
||||||
|
|
@ -61,7 +61,6 @@ class Form::AdminSettings
|
||||||
preview_sensitive_media
|
preview_sensitive_media
|
||||||
profile_directory
|
profile_directory
|
||||||
trends
|
trends
|
||||||
trends_as_landing_page
|
|
||||||
trendable_by_default
|
trendable_by_default
|
||||||
noindex
|
noindex
|
||||||
require_invite_text
|
require_invite_text
|
||||||
|
|
@ -87,7 +86,8 @@ class Form::AdminSettings
|
||||||
DESCRIPTION_LIMIT = 200
|
DESCRIPTION_LIMIT = 200
|
||||||
DOMAIN_BLOCK_AUDIENCES = %w(disabled users all).freeze
|
DOMAIN_BLOCK_AUDIENCES = %w(disabled users all).freeze
|
||||||
REGISTRATION_MODES = %w(open approved none).freeze
|
REGISTRATION_MODES = %w(open approved none).freeze
|
||||||
FEED_ACCESS_MODES = %w(public authenticated).freeze
|
FEED_ACCESS_MODES = %w(public authenticated disabled).freeze
|
||||||
|
LANDING_PAGE = %w(trends about local_feed).freeze
|
||||||
|
|
||||||
attr_accessor(*KEYS)
|
attr_accessor(*KEYS)
|
||||||
|
|
||||||
|
|
@ -106,6 +106,7 @@ class Form::AdminSettings
|
||||||
validates :site_short_description, length: { maximum: DESCRIPTION_LIMIT }, if: -> { defined?(@site_short_description) }
|
validates :site_short_description, length: { maximum: DESCRIPTION_LIMIT }, if: -> { defined?(@site_short_description) }
|
||||||
validates :status_page_url, url: true, allow_blank: true
|
validates :status_page_url, url: true, allow_blank: true
|
||||||
validate :validate_site_uploads
|
validate :validate_site_uploads
|
||||||
|
validates :landing_page, inclusion: { in: LANDING_PAGE }, if: -> { defined?(@landing_page) }
|
||||||
|
|
||||||
KEYS.each do |key|
|
KEYS.each do |key|
|
||||||
define_method(key) do
|
define_method(key) do
|
||||||
|
|
|
||||||
|
|
@ -15,18 +15,30 @@ class LinkFeed < PublicFeed
|
||||||
# @param [Integer] min_id
|
# @param [Integer] min_id
|
||||||
# @return [Array<Status>]
|
# @return [Array<Status>]
|
||||||
def get(limit, max_id = nil, since_id = nil, min_id = nil)
|
def get(limit, max_id = nil, since_id = nil, min_id = nil)
|
||||||
|
return [] if incompatible_feed_settings?
|
||||||
|
|
||||||
scope = public_scope
|
scope = public_scope
|
||||||
|
|
||||||
scope.merge!(discoverable)
|
scope.merge!(discoverable)
|
||||||
scope.merge!(attached_to_preview_card)
|
scope.merge!(attached_to_preview_card)
|
||||||
scope.merge!(account_filters_scope) if account?
|
scope.merge!(account_filters_scope) if account?
|
||||||
scope.merge!(language_scope) if account&.chosen_languages.present?
|
scope.merge!(language_scope) if account&.chosen_languages.present?
|
||||||
|
scope.merge!(local_only_scope) if local_only?
|
||||||
|
scope.merge!(remote_only_scope) if remote_only?
|
||||||
|
|
||||||
scope.to_a_paginated_by_id(limit, max_id: max_id, since_id: since_id, min_id: min_id)
|
scope.to_a_paginated_by_id(limit, max_id: max_id, since_id: since_id, min_id: min_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def local_feed_setting
|
||||||
|
Setting.local_topic_feed_access
|
||||||
|
end
|
||||||
|
|
||||||
|
def remote_feed_setting
|
||||||
|
Setting.remote_topic_feed_access
|
||||||
|
end
|
||||||
|
|
||||||
def attached_to_preview_card
|
def attached_to_preview_card
|
||||||
Status.joins(:preview_cards_status).where(preview_cards_status: { preview_card_id: @preview_card.id })
|
Status.joins(:preview_cards_status).where(preview_cards_status: { preview_card_id: @preview_card.id })
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@ class PublicFeed
|
||||||
# @param [Integer] min_id
|
# @param [Integer] min_id
|
||||||
# @return [Array<Status>]
|
# @return [Array<Status>]
|
||||||
def get(limit, max_id = nil, since_id = nil, min_id = nil)
|
def get(limit, max_id = nil, since_id = nil, min_id = nil)
|
||||||
|
return [] if incompatible_feed_settings?
|
||||||
|
|
||||||
scope = public_scope
|
scope = public_scope
|
||||||
|
|
||||||
scope.merge!(without_replies_scope) unless with_replies?
|
scope.merge!(without_replies_scope) unless with_replies?
|
||||||
|
|
@ -36,6 +38,21 @@ class PublicFeed
|
||||||
|
|
||||||
attr_reader :account, :options
|
attr_reader :account, :options
|
||||||
|
|
||||||
|
def incompatible_feed_settings?
|
||||||
|
(local_only? && !user_has_access_to_feed?(local_feed_setting)) || (remote_only? && !user_has_access_to_feed?(remote_feed_setting))
|
||||||
|
end
|
||||||
|
|
||||||
|
def user_has_access_to_feed?(setting)
|
||||||
|
case setting
|
||||||
|
when 'public'
|
||||||
|
true
|
||||||
|
when 'authenticated'
|
||||||
|
@account&.user&.functional?
|
||||||
|
when 'disabled'
|
||||||
|
@account&.user&.can?(:view_feeds)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def with_reblogs?
|
def with_reblogs?
|
||||||
options[:with_reblogs]
|
options[:with_reblogs]
|
||||||
end
|
end
|
||||||
|
|
@ -44,12 +61,20 @@ class PublicFeed
|
||||||
options[:with_replies]
|
options[:with_replies]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def local_feed_setting
|
||||||
|
Setting.local_live_feed_access
|
||||||
|
end
|
||||||
|
|
||||||
|
def remote_feed_setting
|
||||||
|
Setting.remote_live_feed_access
|
||||||
|
end
|
||||||
|
|
||||||
def local_only?
|
def local_only?
|
||||||
options[:local] && !options[:remote]
|
(options[:local] && !options[:remote]) || !user_has_access_to_feed?(remote_feed_setting)
|
||||||
end
|
end
|
||||||
|
|
||||||
def remote_only?
|
def remote_only?
|
||||||
options[:remote] && !options[:local]
|
(options[:remote] && !options[:local]) || !user_has_access_to_feed?(local_feed_setting)
|
||||||
end
|
end
|
||||||
|
|
||||||
def account?
|
def account?
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@ class Quote < ApplicationRecord
|
||||||
validates :activity_uri, presence: true, if: -> { account.local? && quoted_account&.remote? }
|
validates :activity_uri, presence: true, if: -> { account.local? && quoted_account&.remote? }
|
||||||
validates :approval_uri, absence: true, if: -> { quoted_account&.local? }
|
validates :approval_uri, absence: true, if: -> { quoted_account&.local? }
|
||||||
validate :validate_visibility
|
validate :validate_visibility
|
||||||
|
validate :validate_original_quoted_status
|
||||||
|
|
||||||
after_create_commit :increment_counter_caches!
|
after_create_commit :increment_counter_caches!
|
||||||
after_destroy_commit :decrement_counter_caches!
|
after_destroy_commit :decrement_counter_caches!
|
||||||
|
|
@ -85,6 +86,10 @@ class Quote < ApplicationRecord
|
||||||
errors.add(:quoted_status_id, :visibility_mismatch)
|
errors.add(:quoted_status_id, :visibility_mismatch)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def validate_original_quoted_status
|
||||||
|
errors.add(:quoted_status_id, :reblog_unallowed) if quoted_status&.reblog?
|
||||||
|
end
|
||||||
|
|
||||||
def set_activity_uri
|
def set_activity_uri
|
||||||
self.activity_uri = [ActivityPub::TagManager.instance.uri_for(account), '/quote_requests/', SecureRandom.uuid].join
|
self.activity_uri = [ActivityPub::TagManager.instance.uri_for(account), '/quote_requests/', SecureRandom.uuid].join
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ class Tag < ApplicationRecord
|
||||||
HASHTAG_LAST_SEQUENCE = '([[:word:]_]*[[:alpha:]][[:word:]_]*)'
|
HASHTAG_LAST_SEQUENCE = '([[:word:]_]*[[:alpha:]][[:word:]_]*)'
|
||||||
HASHTAG_NAME_PAT = "#{HASHTAG_FIRST_SEQUENCE}|#{HASHTAG_LAST_SEQUENCE}".freeze
|
HASHTAG_NAME_PAT = "#{HASHTAG_FIRST_SEQUENCE}|#{HASHTAG_LAST_SEQUENCE}".freeze
|
||||||
|
|
||||||
HASHTAG_RE = %r{(?<![=/)\p{Alnum}])#(#{HASHTAG_NAME_PAT})}
|
HASHTAG_RE = %r{(?<![=/)\p{Alnum}])[#|#](#{HASHTAG_NAME_PAT})}
|
||||||
HASHTAG_NAME_RE = /\A(#{HASHTAG_NAME_PAT})\z/i
|
HASHTAG_NAME_RE = /\A(#{HASHTAG_NAME_PAT})\z/i
|
||||||
HASHTAG_INVALID_CHARS_RE = /[^[:alnum:]\u0E47-\u0E4E#{HASHTAG_SEPARATORS}]/
|
HASHTAG_INVALID_CHARS_RE = /[^[:alnum:]\u0E47-\u0E4E#{HASHTAG_SEPARATORS}]/
|
||||||
|
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user