mirror of
https://github.com/mastodon/mastodon.git
synced 2025-12-04 13:23:39 +00:00
Merge branch 'main' into compose-language-detection
This commit is contained in:
commit
eed4c3df5b
1
.github/workflows/build-security.yml
vendored
1
.github/workflows/build-security.yml
vendored
|
|
@ -9,7 +9,6 @@ permissions:
|
|||
jobs:
|
||||
compute-suffix:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'mastodon/mastodon'
|
||||
steps:
|
||||
- id: version_vars
|
||||
env:
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
* - Please do NOT modify this file.
|
||||
*/
|
||||
|
||||
const PACKAGE_VERSION = '2.10.2'
|
||||
const PACKAGE_VERSION = '2.10.4'
|
||||
const INTEGRITY_CHECKSUM = 'f5825c521429caf22a4dd13b66e243af'
|
||||
const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
|
||||
const activeClientIds = new Set()
|
||||
|
|
|
|||
|
|
@ -583,7 +583,6 @@ The following changelog entries focus on changes visible to users, administrator
|
|||
You can now separately filter or drop notifications from people you don't follow, people who don't follow you, accounts created within the past 30 days, as well as unsolicited private mentions, and accounts limited by the moderation.\
|
||||
Instead of being outright dropped, notifications that you chose to filter are put in a separate “Filtered notifications” box that you can review separately without it clogging your main notifications.\
|
||||
This adds the following REST API endpoints:
|
||||
|
||||
- `GET /api/v2/notifications/policy`: https://docs.joinmastodon.org/methods/notifications/#get-policy
|
||||
- `PATCH /api/v2/notifications/policy`: https://docs.joinmastodon.org/methods/notifications/#update-the-filtering-policy-for-notifications
|
||||
- `GET /api/v1/notifications/requests`: https://docs.joinmastodon.org/methods/notifications/#get-requests
|
||||
|
|
@ -595,7 +594,6 @@ The following changelog entries focus on changes visible to users, administrator
|
|||
- `GET /api/v1/notifications/requests/merged`: https://docs.joinmastodon.org/methods/notifications/#requests-merged
|
||||
|
||||
In addition, accepting one or more notification requests generates a new streaming event:
|
||||
|
||||
- `notifications_merged`: an event of this type indicates accepted notification requests have finished merging, and the notifications list should be refreshed
|
||||
|
||||
- **Add notifications of severed relationships** (#27511, #29665, #29668, #29670, #29700, #29714, #29712, and #29731 by @ClearlyClaire and @Gargron)\
|
||||
|
|
|
|||
35
Dockerfile
35
Dockerfile
|
|
@ -17,11 +17,11 @@ ARG RUBY_VERSION="3.4.5"
|
|||
# # Node.js version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"]
|
||||
# renovate: datasource=node-version depName=node
|
||||
ARG NODE_MAJOR_VERSION="22"
|
||||
# Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="bookworm"]
|
||||
ARG DEBIAN_VERSION="bookworm"
|
||||
# Node.js image to use for base image based on combined variables (ex: 20-bookworm-slim)
|
||||
# Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="trixie"]
|
||||
ARG DEBIAN_VERSION="trixie"
|
||||
# Node.js image to use for base image based on combined variables (ex: 20-trixie-slim)
|
||||
FROM ${BASE_REGISTRY}/node:${NODE_MAJOR_VERSION}-${DEBIAN_VERSION}-slim AS node
|
||||
# Ruby image to use for base image based on combined variables (ex: 3.4.x-slim-bookworm)
|
||||
# Ruby image to use for base image based on combined variables (ex: 3.4.x-slim-trixie)
|
||||
FROM ${BASE_REGISTRY}/ruby:${RUBY_VERSION}-slim-${DEBIAN_VERSION} AS ruby
|
||||
|
||||
# Resulting version string is vX.X.X-MASTODON_VERSION_PRERELEASE+MASTODON_VERSION_METADATA
|
||||
|
|
@ -96,9 +96,6 @@ RUN \
|
|||
# Set /opt/mastodon as working directory
|
||||
WORKDIR /opt/mastodon
|
||||
|
||||
# Add backport repository for some specific packages where we need the latest version
|
||||
RUN echo 'deb http://deb.debian.org/debian bookworm-backports main' >> /etc/apt/sources.list
|
||||
|
||||
# hadolint ignore=DL3008,DL3005
|
||||
RUN \
|
||||
# Mount Apt cache and lib directories from Docker buildx caches
|
||||
|
|
@ -161,11 +158,11 @@ RUN \
|
|||
libexif-dev \
|
||||
libexpat1-dev \
|
||||
libgirepository1.0-dev \
|
||||
libheif-dev/bookworm-backports \
|
||||
libheif-dev \
|
||||
libhwy-dev \
|
||||
libimagequant-dev \
|
||||
libjpeg62-turbo-dev \
|
||||
liblcms2-dev \
|
||||
liborc-dev \
|
||||
libspng-dev \
|
||||
libtiff-dev \
|
||||
libwebp-dev \
|
||||
|
|
@ -209,7 +206,7 @@ FROM build AS ffmpeg
|
|||
|
||||
# ffmpeg version to compile, change with [--build-arg FFMPEG_VERSION="7.0.x"]
|
||||
# renovate: datasource=repology depName=ffmpeg packageName=openpkg_current/ffmpeg
|
||||
ARG FFMPEG_VERSION=7.1
|
||||
ARG FFMPEG_VERSION=7.1.1
|
||||
# ffmpeg download URL, change with [--build-arg FFMPEG_URL="https://ffmpeg.org/releases"]
|
||||
ARG FFMPEG_URL=https://ffmpeg.org/releases
|
||||
|
||||
|
|
@ -327,28 +324,28 @@ RUN \
|
|||
# Apt update install non-dev versions of necessary components
|
||||
apt-get install -y --no-install-recommends \
|
||||
libexpat1 \
|
||||
libglib2.0-0 \
|
||||
libicu72 \
|
||||
libglib2.0-0t64 \
|
||||
libicu76 \
|
||||
libidn12 \
|
||||
libpq5 \
|
||||
libreadline8 \
|
||||
libssl3 \
|
||||
libreadline8t64 \
|
||||
libssl3t64 \
|
||||
libyaml-0-2 \
|
||||
# libvips components
|
||||
libcgif0 \
|
||||
libexif12 \
|
||||
libheif1/bookworm-backports \
|
||||
libheif1 \
|
||||
libhwy1t64 \
|
||||
libimagequant0 \
|
||||
libjpeg62-turbo \
|
||||
liblcms2-2 \
|
||||
liborc-0.4-0 \
|
||||
libspng0 \
|
||||
libtiff6 \
|
||||
libwebp7 \
|
||||
libwebpdemux2 \
|
||||
libwebpmux3 \
|
||||
# ffmpeg components
|
||||
libdav1d6 \
|
||||
libdav1d7 \
|
||||
libmp3lame0 \
|
||||
libopencore-amrnb0 \
|
||||
libopencore-amrwb0 \
|
||||
|
|
@ -358,9 +355,9 @@ RUN \
|
|||
libvorbis0a \
|
||||
libvorbisenc2 \
|
||||
libvorbisfile3 \
|
||||
libvpx7 \
|
||||
libvpx9 \
|
||||
libx264-164 \
|
||||
libx265-199 \
|
||||
libx265-215 \
|
||||
;
|
||||
|
||||
# Copy Mastodon sources into final layer
|
||||
|
|
|
|||
16
Gemfile
16
Gemfile
|
|
@ -82,13 +82,13 @@ gem 'rqrcode', '~> 3.0'
|
|||
gem 'ruby-progressbar', '~> 1.13'
|
||||
gem 'sanitize', '~> 7.0'
|
||||
gem 'scenic', '~> 1.7'
|
||||
gem 'sidekiq', '< 8'
|
||||
gem 'sidekiq', '< 9'
|
||||
gem 'sidekiq-bulk', '~> 0.2.0'
|
||||
gem 'sidekiq-scheduler', '~> 6.0'
|
||||
gem 'sidekiq-unique-jobs', '> 8'
|
||||
gem 'simple_form', '~> 5.2'
|
||||
gem 'simple-navigation', '~> 4.4'
|
||||
gem 'stoplight', '~> 4.1'
|
||||
gem 'stoplight'
|
||||
gem 'strong_migrations'
|
||||
gem 'tty-prompt', '~> 0.23', require: false
|
||||
gem 'twitter-text', '~> 3.1.0'
|
||||
|
|
@ -102,17 +102,17 @@ gem 'rdf-normalize', '~> 0.5'
|
|||
|
||||
gem 'prometheus_exporter', '~> 2.2', require: false
|
||||
|
||||
gem 'opentelemetry-api', '~> 1.5.0'
|
||||
gem 'opentelemetry-api', '~> 1.6.0'
|
||||
|
||||
group :opentelemetry do
|
||||
gem 'opentelemetry-exporter-otlp', '~> 0.30.0', require: false
|
||||
gem 'opentelemetry-instrumentation-active_job', '~> 0.8.0', require: false
|
||||
gem 'opentelemetry-instrumentation-active_model_serializers', '~> 0.22.0', require: false
|
||||
gem 'opentelemetry-instrumentation-concurrent_ruby', '~> 0.22.0', require: false
|
||||
gem 'opentelemetry-instrumentation-excon', '~> 0.23.0', require: false
|
||||
gem 'opentelemetry-instrumentation-faraday', '~> 0.27.0', require: false
|
||||
gem 'opentelemetry-instrumentation-excon', '~> 0.24.0', require: false
|
||||
gem 'opentelemetry-instrumentation-faraday', '~> 0.28.0', require: false
|
||||
gem 'opentelemetry-instrumentation-http', '~> 0.25.0', require: false
|
||||
gem 'opentelemetry-instrumentation-http_client', '~> 0.23.0', require: false
|
||||
gem 'opentelemetry-instrumentation-http_client', '~> 0.24.0', require: false
|
||||
gem 'opentelemetry-instrumentation-net_http', '~> 0.23.0', require: false
|
||||
gem 'opentelemetry-instrumentation-pg', '~> 0.30.0', require: false
|
||||
gem 'opentelemetry-instrumentation-rack', '~> 0.26.0', require: false
|
||||
|
|
@ -146,7 +146,7 @@ group :test do
|
|||
gem 'climate_control'
|
||||
|
||||
# Validate schemas in specs
|
||||
gem 'json-schema', '~> 5.0'
|
||||
gem 'json-schema', '~> 6.0'
|
||||
|
||||
# Test harness fo rack components
|
||||
gem 'rack-test', '~> 2.1'
|
||||
|
|
@ -223,7 +223,7 @@ gem 'connection_pool', require: false
|
|||
gem 'xorcist', '~> 1.1'
|
||||
|
||||
gem 'net-http', '~> 0.6.0'
|
||||
gem 'rubyzip', '~> 2.3'
|
||||
gem 'rubyzip', '~> 3.0'
|
||||
|
||||
gem 'hcaptcha', '~> 7.1'
|
||||
|
||||
|
|
|
|||
174
Gemfile.lock
174
Gemfile.lock
|
|
@ -10,29 +10,29 @@ GIT
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
actioncable (8.0.2)
|
||||
actionpack (= 8.0.2)
|
||||
activesupport (= 8.0.2)
|
||||
actioncable (8.0.2.1)
|
||||
actionpack (= 8.0.2.1)
|
||||
activesupport (= 8.0.2.1)
|
||||
nio4r (~> 2.0)
|
||||
websocket-driver (>= 0.6.1)
|
||||
zeitwerk (~> 2.6)
|
||||
actionmailbox (8.0.2)
|
||||
actionpack (= 8.0.2)
|
||||
activejob (= 8.0.2)
|
||||
activerecord (= 8.0.2)
|
||||
activestorage (= 8.0.2)
|
||||
activesupport (= 8.0.2)
|
||||
actionmailbox (8.0.2.1)
|
||||
actionpack (= 8.0.2.1)
|
||||
activejob (= 8.0.2.1)
|
||||
activerecord (= 8.0.2.1)
|
||||
activestorage (= 8.0.2.1)
|
||||
activesupport (= 8.0.2.1)
|
||||
mail (>= 2.8.0)
|
||||
actionmailer (8.0.2)
|
||||
actionpack (= 8.0.2)
|
||||
actionview (= 8.0.2)
|
||||
activejob (= 8.0.2)
|
||||
activesupport (= 8.0.2)
|
||||
actionmailer (8.0.2.1)
|
||||
actionpack (= 8.0.2.1)
|
||||
actionview (= 8.0.2.1)
|
||||
activejob (= 8.0.2.1)
|
||||
activesupport (= 8.0.2.1)
|
||||
mail (>= 2.8.0)
|
||||
rails-dom-testing (~> 2.2)
|
||||
actionpack (8.0.2)
|
||||
actionview (= 8.0.2)
|
||||
activesupport (= 8.0.2)
|
||||
actionpack (8.0.2.1)
|
||||
actionview (= 8.0.2.1)
|
||||
activesupport (= 8.0.2.1)
|
||||
nokogiri (>= 1.8.5)
|
||||
rack (>= 2.2.4)
|
||||
rack-session (>= 1.0.1)
|
||||
|
|
@ -40,15 +40,15 @@ GEM
|
|||
rails-dom-testing (~> 2.2)
|
||||
rails-html-sanitizer (~> 1.6)
|
||||
useragent (~> 0.16)
|
||||
actiontext (8.0.2)
|
||||
actionpack (= 8.0.2)
|
||||
activerecord (= 8.0.2)
|
||||
activestorage (= 8.0.2)
|
||||
activesupport (= 8.0.2)
|
||||
actiontext (8.0.2.1)
|
||||
actionpack (= 8.0.2.1)
|
||||
activerecord (= 8.0.2.1)
|
||||
activestorage (= 8.0.2.1)
|
||||
activesupport (= 8.0.2.1)
|
||||
globalid (>= 0.6.0)
|
||||
nokogiri (>= 1.8.5)
|
||||
actionview (8.0.2)
|
||||
activesupport (= 8.0.2)
|
||||
actionview (8.0.2.1)
|
||||
activesupport (= 8.0.2.1)
|
||||
builder (~> 3.1)
|
||||
erubi (~> 1.11)
|
||||
rails-dom-testing (~> 2.2)
|
||||
|
|
@ -58,22 +58,22 @@ GEM
|
|||
activemodel (>= 4.1)
|
||||
case_transform (>= 0.2)
|
||||
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
|
||||
activejob (8.0.2)
|
||||
activesupport (= 8.0.2)
|
||||
activejob (8.0.2.1)
|
||||
activesupport (= 8.0.2.1)
|
||||
globalid (>= 0.3.6)
|
||||
activemodel (8.0.2)
|
||||
activesupport (= 8.0.2)
|
||||
activerecord (8.0.2)
|
||||
activemodel (= 8.0.2)
|
||||
activesupport (= 8.0.2)
|
||||
activemodel (8.0.2.1)
|
||||
activesupport (= 8.0.2.1)
|
||||
activerecord (8.0.2.1)
|
||||
activemodel (= 8.0.2.1)
|
||||
activesupport (= 8.0.2.1)
|
||||
timeout (>= 0.4.0)
|
||||
activestorage (8.0.2)
|
||||
actionpack (= 8.0.2)
|
||||
activejob (= 8.0.2)
|
||||
activerecord (= 8.0.2)
|
||||
activesupport (= 8.0.2)
|
||||
activestorage (8.0.2.1)
|
||||
actionpack (= 8.0.2.1)
|
||||
activejob (= 8.0.2.1)
|
||||
activerecord (= 8.0.2.1)
|
||||
activesupport (= 8.0.2.1)
|
||||
marcel (~> 1.0)
|
||||
activesupport (8.0.2)
|
||||
activesupport (8.0.2.1)
|
||||
base64
|
||||
benchmark (>= 0.3)
|
||||
bigdecimal
|
||||
|
|
@ -300,8 +300,8 @@ GEM
|
|||
highline (3.1.2)
|
||||
reline
|
||||
hiredis (0.6.3)
|
||||
hiredis-client (0.25.1)
|
||||
redis-client (= 0.25.1)
|
||||
hiredis-client (0.25.2)
|
||||
redis-client (= 0.25.2)
|
||||
hkdf (0.3.0)
|
||||
htmlentities (4.3.4)
|
||||
http (5.3.1)
|
||||
|
|
@ -315,7 +315,7 @@ GEM
|
|||
http_accept_language (2.1.1)
|
||||
httpclient (2.9.0)
|
||||
mutex_m
|
||||
httplog (1.7.2)
|
||||
httplog (1.7.3)
|
||||
rack (>= 2.0)
|
||||
rainbow (>= 2.0.0)
|
||||
i18n (1.14.7)
|
||||
|
|
@ -365,7 +365,7 @@ GEM
|
|||
json-ld-preloaded (3.3.2)
|
||||
json-ld (~> 3.3)
|
||||
rdf (~> 3.3)
|
||||
json-schema (5.2.1)
|
||||
json-schema (6.0.0)
|
||||
addressable (~> 2.8)
|
||||
bigdecimal (~> 3.1)
|
||||
jsonapi-renderer (0.2.2)
|
||||
|
|
@ -497,7 +497,7 @@ GEM
|
|||
openssl (3.3.0)
|
||||
openssl-signature_algorithm (1.3.0)
|
||||
openssl (> 2.0)
|
||||
opentelemetry-api (1.5.0)
|
||||
opentelemetry-api (1.6.0)
|
||||
opentelemetry-common (0.22.0)
|
||||
opentelemetry-api (~> 1.0)
|
||||
opentelemetry-exporter-otlp (0.30.0)
|
||||
|
|
@ -547,19 +547,19 @@ GEM
|
|||
opentelemetry-instrumentation-concurrent_ruby (0.22.0)
|
||||
opentelemetry-api (~> 1.0)
|
||||
opentelemetry-instrumentation-base (~> 0.23.0)
|
||||
opentelemetry-instrumentation-excon (0.23.0)
|
||||
opentelemetry-instrumentation-excon (0.24.0)
|
||||
opentelemetry-api (~> 1.0)
|
||||
opentelemetry-instrumentation-base (~> 0.23.0)
|
||||
opentelemetry-instrumentation-faraday (0.27.0)
|
||||
opentelemetry-instrumentation-faraday (0.28.0)
|
||||
opentelemetry-api (~> 1.0)
|
||||
opentelemetry-instrumentation-base (~> 0.23.0)
|
||||
opentelemetry-instrumentation-http (0.25.1)
|
||||
opentelemetry-api (~> 1.0)
|
||||
opentelemetry-instrumentation-base (~> 0.23.0)
|
||||
opentelemetry-instrumentation-http_client (0.23.0)
|
||||
opentelemetry-instrumentation-http_client (0.24.0)
|
||||
opentelemetry-api (~> 1.0)
|
||||
opentelemetry-instrumentation-base (~> 0.23.0)
|
||||
opentelemetry-instrumentation-net_http (0.23.0)
|
||||
opentelemetry-instrumentation-net_http (0.23.1)
|
||||
opentelemetry-api (~> 1.0)
|
||||
opentelemetry-instrumentation-base (~> 0.23.0)
|
||||
opentelemetry-instrumentation-pg (0.30.1)
|
||||
|
|
@ -589,7 +589,7 @@ GEM
|
|||
opentelemetry-instrumentation-base (~> 0.23.0)
|
||||
opentelemetry-registry (0.4.0)
|
||||
opentelemetry-api (~> 1.1)
|
||||
opentelemetry-sdk (1.8.0)
|
||||
opentelemetry-sdk (1.8.1)
|
||||
opentelemetry-api (~> 1.1)
|
||||
opentelemetry-common (~> 0.20)
|
||||
opentelemetry-registry (~> 0.2)
|
||||
|
|
@ -625,7 +625,7 @@ GEM
|
|||
premailer (~> 1.7, >= 1.7.9)
|
||||
prettyprint (0.2.0)
|
||||
prism (1.4.0)
|
||||
prometheus_exporter (2.2.0)
|
||||
prometheus_exporter (2.3.0)
|
||||
webrick
|
||||
propshaft (1.2.1)
|
||||
actionpack (>= 7.0.0)
|
||||
|
|
@ -667,20 +667,20 @@ GEM
|
|||
rack (>= 1.3)
|
||||
rackup (2.2.1)
|
||||
rack (>= 3)
|
||||
rails (8.0.2)
|
||||
actioncable (= 8.0.2)
|
||||
actionmailbox (= 8.0.2)
|
||||
actionmailer (= 8.0.2)
|
||||
actionpack (= 8.0.2)
|
||||
actiontext (= 8.0.2)
|
||||
actionview (= 8.0.2)
|
||||
activejob (= 8.0.2)
|
||||
activemodel (= 8.0.2)
|
||||
activerecord (= 8.0.2)
|
||||
activestorage (= 8.0.2)
|
||||
activesupport (= 8.0.2)
|
||||
rails (8.0.2.1)
|
||||
actioncable (= 8.0.2.1)
|
||||
actionmailbox (= 8.0.2.1)
|
||||
actionmailer (= 8.0.2.1)
|
||||
actionpack (= 8.0.2.1)
|
||||
actiontext (= 8.0.2.1)
|
||||
actionview (= 8.0.2.1)
|
||||
activejob (= 8.0.2.1)
|
||||
activemodel (= 8.0.2.1)
|
||||
activerecord (= 8.0.2.1)
|
||||
activestorage (= 8.0.2.1)
|
||||
activesupport (= 8.0.2.1)
|
||||
bundler (>= 1.15.0)
|
||||
railties (= 8.0.2)
|
||||
railties (= 8.0.2.1)
|
||||
rails-dom-testing (2.3.0)
|
||||
activesupport (>= 5.0.0)
|
||||
minitest
|
||||
|
|
@ -688,12 +688,12 @@ GEM
|
|||
rails-html-sanitizer (1.6.2)
|
||||
loofah (~> 2.21)
|
||||
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
|
||||
rails-i18n (8.0.1)
|
||||
rails-i18n (8.0.2)
|
||||
i18n (>= 0.7, < 2)
|
||||
railties (>= 8.0.0, < 9)
|
||||
railties (8.0.2)
|
||||
actionpack (= 8.0.2)
|
||||
activesupport (= 8.0.2)
|
||||
railties (8.0.2.1)
|
||||
actionpack (= 8.0.2.1)
|
||||
activesupport (= 8.0.2.1)
|
||||
irb (~> 1.13)
|
||||
rackup (>= 1.0.0)
|
||||
rake (>= 12.2)
|
||||
|
|
@ -717,11 +717,9 @@ GEM
|
|||
reline
|
||||
redcarpet (3.6.1)
|
||||
redis (4.8.1)
|
||||
redis-client (0.25.1)
|
||||
redis-client (0.25.2)
|
||||
connection_pool
|
||||
redlock (1.3.2)
|
||||
redis (>= 3.0.0, < 6.0)
|
||||
regexp_parser (2.11.0)
|
||||
regexp_parser (2.11.2)
|
||||
reline (0.6.2)
|
||||
io-console (~> 0.5)
|
||||
request_store (1.7.0)
|
||||
|
|
@ -751,7 +749,7 @@ GEM
|
|||
rspec-mocks (3.13.5)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.13.0)
|
||||
rspec-rails (8.0.1)
|
||||
rspec-rails (8.0.2)
|
||||
actionpack (>= 7.2)
|
||||
activesupport (>= 7.2)
|
||||
railties (>= 7.2)
|
||||
|
|
@ -789,7 +787,7 @@ GEM
|
|||
lint_roller (~> 1.1)
|
||||
rubocop (>= 1.75.0, < 2.0)
|
||||
rubocop-ast (>= 1.38.0, < 2.0)
|
||||
rubocop-rails (2.32.0)
|
||||
rubocop-rails (2.33.3)
|
||||
activesupport (>= 4.2.0)
|
||||
lint_roller (~> 1.1)
|
||||
rack (>= 1.1)
|
||||
|
|
@ -811,7 +809,7 @@ GEM
|
|||
ruby-vips (2.2.4)
|
||||
ffi (~> 1.12)
|
||||
logger
|
||||
rubyzip (2.4.1)
|
||||
rubyzip (3.0.1)
|
||||
rufus-scheduler (3.9.2)
|
||||
fugit (~> 1.1, >= 1.11.1)
|
||||
safety_net_attestation (0.4.0)
|
||||
|
|
@ -825,12 +823,12 @@ GEM
|
|||
securerandom (0.4.1)
|
||||
shoulda-matchers (6.5.0)
|
||||
activesupport (>= 5.2.0)
|
||||
sidekiq (7.3.9)
|
||||
base64
|
||||
connection_pool (>= 2.3.0)
|
||||
logger
|
||||
rack (>= 2.2.4)
|
||||
redis-client (>= 0.22.2)
|
||||
sidekiq (8.0.7)
|
||||
connection_pool (>= 2.5.0)
|
||||
json (>= 2.9.0)
|
||||
logger (>= 1.6.2)
|
||||
rack (>= 3.1.0)
|
||||
redis-client (>= 0.23.2)
|
||||
sidekiq-bulk (0.2.0)
|
||||
sidekiq
|
||||
sidekiq-scheduler (6.0.1)
|
||||
|
|
@ -855,8 +853,8 @@ GEM
|
|||
stackprof (0.2.27)
|
||||
starry (0.2.0)
|
||||
base64
|
||||
stoplight (4.1.1)
|
||||
redlock (~> 1.0)
|
||||
stoplight (5.3.1)
|
||||
zeitwerk
|
||||
stringio (3.1.7)
|
||||
strong_migrations (2.5.0)
|
||||
activerecord (>= 7.1)
|
||||
|
|
@ -1005,7 +1003,7 @@ DEPENDENCIES
|
|||
jd-paperclip-azure (~> 3.0)
|
||||
json-ld
|
||||
json-ld-preloaded (~> 3.2)
|
||||
json-schema (~> 5.0)
|
||||
json-schema (~> 6.0)
|
||||
kaminari (~> 1.2)
|
||||
kt-paperclip (~> 7.2)
|
||||
letter_opener (~> 1.8)
|
||||
|
|
@ -1027,15 +1025,15 @@ DEPENDENCIES
|
|||
omniauth-rails_csrf_protection (~> 1.0)
|
||||
omniauth-saml (~> 2.0)
|
||||
omniauth_openid_connect (~> 0.8.0)
|
||||
opentelemetry-api (~> 1.5.0)
|
||||
opentelemetry-api (~> 1.6.0)
|
||||
opentelemetry-exporter-otlp (~> 0.30.0)
|
||||
opentelemetry-instrumentation-active_job (~> 0.8.0)
|
||||
opentelemetry-instrumentation-active_model_serializers (~> 0.22.0)
|
||||
opentelemetry-instrumentation-concurrent_ruby (~> 0.22.0)
|
||||
opentelemetry-instrumentation-excon (~> 0.23.0)
|
||||
opentelemetry-instrumentation-faraday (~> 0.27.0)
|
||||
opentelemetry-instrumentation-excon (~> 0.24.0)
|
||||
opentelemetry-instrumentation-faraday (~> 0.28.0)
|
||||
opentelemetry-instrumentation-http (~> 0.25.0)
|
||||
opentelemetry-instrumentation-http_client (~> 0.23.0)
|
||||
opentelemetry-instrumentation-http_client (~> 0.24.0)
|
||||
opentelemetry-instrumentation-net_http (~> 0.23.0)
|
||||
opentelemetry-instrumentation-pg (~> 0.30.0)
|
||||
opentelemetry-instrumentation-rack (~> 0.26.0)
|
||||
|
|
@ -1075,11 +1073,11 @@ DEPENDENCIES
|
|||
ruby-prof
|
||||
ruby-progressbar (~> 1.13)
|
||||
ruby-vips (~> 2.2)
|
||||
rubyzip (~> 2.3)
|
||||
rubyzip (~> 3.0)
|
||||
sanitize (~> 7.0)
|
||||
scenic (~> 1.7)
|
||||
shoulda-matchers
|
||||
sidekiq (< 8)
|
||||
sidekiq (< 9)
|
||||
sidekiq-bulk (~> 0.2.0)
|
||||
sidekiq-scheduler (~> 6.0)
|
||||
sidekiq-unique-jobs (> 8)
|
||||
|
|
@ -1088,7 +1086,7 @@ DEPENDENCIES
|
|||
simplecov (~> 0.22)
|
||||
simplecov-lcov (~> 0.8)
|
||||
stackprof
|
||||
stoplight (~> 4.1)
|
||||
stoplight
|
||||
strong_migrations
|
||||
test-prof
|
||||
thor (~> 1.2)
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ Mastodon is a **free, open-source social network server** based on [ActivityPub]
|
|||
|
||||
- **Ruby** 3.2+
|
||||
- **PostgreSQL** 13+
|
||||
- **Redis** 6.2+
|
||||
- **Redis** 7.0+
|
||||
- **Node.js** 20+
|
||||
|
||||
This repository includes deployment configurations for **Docker and docker-compose**, as well as for other environments like Heroku and Scalingo. For Helm charts, reference the [mastodon/chart repository](https://github.com/mastodon/chart). A [**standalone** installation guide](https://docs.joinmastodon.org/admin/install/) is available in the main documentation.
|
||||
|
|
|
|||
3
Vagrantfile
vendored
3
Vagrantfile
vendored
|
|
@ -54,6 +54,7 @@ sudo apt-get install \
|
|||
pkg-config \
|
||||
protobuf-compiler \
|
||||
zlib1g-dev \
|
||||
libvips42t64 \
|
||||
-y
|
||||
|
||||
# Install rvm
|
||||
|
|
@ -134,7 +135,7 @@ VAGRANTFILE_API_VERSION = "2"
|
|||
|
||||
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
||||
|
||||
config.vm.box = "ubuntu/focal64"
|
||||
config.vm.box = "bento/ubuntu-24.04"
|
||||
|
||||
config.vm.provider :virtualbox do |vb|
|
||||
vb.name = "mastodon"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Api::V1::Statuses::InteractionPoliciesController < Api::V1::Statuses::BaseController
|
||||
include Api::InteractionPoliciesConcern
|
||||
|
||||
before_action -> { doorkeeper_authorize! :write, :'write:statuses' }
|
||||
before_action -> { check_feature_enabled }
|
||||
|
||||
def update
|
||||
authorize @status, :update?
|
||||
|
||||
@status.update!(quote_approval_policy: quote_approval_policy)
|
||||
|
||||
broadcast_updates! if @status.quote_approval_policy_previously_changed?
|
||||
|
||||
render json: @status, serializer: REST::StatusSerializer
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def status_params
|
||||
params.permit(:quote_approval_policy)
|
||||
end
|
||||
|
||||
def check_feature_enabled
|
||||
raise ActionController::RoutingError unless Mastodon::Feature.outgoing_quotes_enabled?
|
||||
end
|
||||
|
||||
def broadcast_updates!
|
||||
DistributionWorker.perform_async(@status.id, { 'update' => true })
|
||||
ActivityPub::StatusUpdateDistributionWorker.perform_async(@status.id, { 'updated_at' => Time.now.utc.iso8601 })
|
||||
end
|
||||
end
|
||||
|
|
@ -3,6 +3,7 @@
|
|||
class Api::V1::StatusesController < Api::BaseController
|
||||
include Authorization
|
||||
include AsyncRefreshesConcern
|
||||
include Api::InteractionPoliciesConcern
|
||||
|
||||
before_action -> { authorize_if_got_token! :read, :'read:statuses' }, except: [:create, :update, :destroy]
|
||||
before_action -> { doorkeeper_authorize! :write, :'write:statuses' }, only: [:create, :update, :destroy]
|
||||
|
|
@ -205,23 +206,6 @@ class Api::V1::StatusesController < Api::BaseController
|
|||
)
|
||||
end
|
||||
|
||||
def quote_approval_policy
|
||||
# TODO: handle `nil` separately
|
||||
return nil unless Mastodon::Feature.outgoing_quotes_enabled? && status_params[:quote_approval_policy].present?
|
||||
|
||||
case status_params[:quote_approval_policy]
|
||||
when 'public'
|
||||
Status::QUOTE_APPROVAL_POLICY_FLAGS[:public] << 16
|
||||
when 'followers'
|
||||
Status::QUOTE_APPROVAL_POLICY_FLAGS[:followers] << 16
|
||||
when 'nobody'
|
||||
0
|
||||
else
|
||||
# TODO: raise more useful message
|
||||
raise ActiveRecord::RecordInvalid
|
||||
end
|
||||
end
|
||||
|
||||
def serializer_for_status
|
||||
@status.is_a?(ScheduledStatus) ? REST::ScheduledStatusSerializer : REST::StatusSerializer
|
||||
end
|
||||
|
|
|
|||
|
|
@ -23,11 +23,11 @@ class Auth::RegistrationsController < Devise::RegistrationsController
|
|||
super(&:build_invite_request)
|
||||
end
|
||||
|
||||
def edit # rubocop:disable Lint/UselessMethodDefinition
|
||||
def edit
|
||||
super
|
||||
end
|
||||
|
||||
def create # rubocop:disable Lint/UselessMethodDefinition
|
||||
def create
|
||||
super
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@ class Auth::SessionsController < Devise::SessionsController
|
|||
skip_before_action :require_functional!
|
||||
skip_before_action :update_user_sign_in
|
||||
|
||||
around_action :preserve_stored_location, only: :destroy, if: :continue_after?
|
||||
|
||||
prepend_before_action :check_suspicious!, only: [:create]
|
||||
|
||||
include Auth::TwoFactorAuthenticationConcern
|
||||
|
|
@ -31,11 +33,9 @@ class Auth::SessionsController < Devise::SessionsController
|
|||
end
|
||||
|
||||
def destroy
|
||||
tmp_stored_location = stored_location_for(:user)
|
||||
super
|
||||
session.delete(:challenge_passed_at)
|
||||
flash.delete(:notice)
|
||||
store_location_for(:user, tmp_stored_location) if continue_after?
|
||||
end
|
||||
|
||||
def webauthn_options
|
||||
|
|
@ -96,6 +96,12 @@ class Auth::SessionsController < Devise::SessionsController
|
|||
|
||||
private
|
||||
|
||||
def preserve_stored_location
|
||||
original_stored_location = stored_location_for(:user)
|
||||
yield
|
||||
store_location_for(:user, original_stored_location)
|
||||
end
|
||||
|
||||
def check_suspicious!
|
||||
user = find_user
|
||||
@login_is_suspicious = suspicious_sign_in?(user) unless user.nil?
|
||||
|
|
|
|||
22
app/controllers/concerns/api/interaction_policies_concern.rb
Normal file
22
app/controllers/concerns/api/interaction_policies_concern.rb
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api::InteractionPoliciesConcern
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
def quote_approval_policy
|
||||
# TODO: handle `nil` separately
|
||||
return nil unless Mastodon::Feature.outgoing_quotes_enabled? && status_params[:quote_approval_policy].present?
|
||||
|
||||
case status_params[:quote_approval_policy]
|
||||
when 'public'
|
||||
Status::QUOTE_APPROVAL_POLICY_FLAGS[:public] << 16
|
||||
when 'followers'
|
||||
Status::QUOTE_APPROVAL_POLICY_FLAGS[:followers] << 16
|
||||
when 'nobody'
|
||||
0
|
||||
else
|
||||
# TODO: raise more useful message
|
||||
raise ActiveRecord::RecordInvalid
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -9,6 +9,8 @@ module SignatureVerification
|
|||
|
||||
EXPIRATION_WINDOW_LIMIT = 12.hours
|
||||
CLOCK_SKEW_MARGIN = 1.hour
|
||||
STOPLIGHT_COOL_OFF_TIME = 5.minutes.seconds
|
||||
STOPLIGHT_THRESHOLD = 1
|
||||
|
||||
def require_account_signature!
|
||||
render json: signature_verification_failure_reason, status: signature_verification_failure_code unless signed_request_account
|
||||
|
|
@ -107,10 +109,12 @@ module SignatureVerification
|
|||
end
|
||||
|
||||
def stoplight_wrapper
|
||||
Stoplight("source:#{request.remote_ip}")
|
||||
.with_threshold(1)
|
||||
.with_cool_off_time(5.minutes.seconds)
|
||||
.with_error_handler { |error, handle| error.is_a?(HTTP::Error) || error.is_a?(OpenSSL::SSL::SSLError) ? handle.call(error) : raise(error) }
|
||||
Stoplight(
|
||||
"source:#{request.remote_ip}",
|
||||
cool_off_time: STOPLIGHT_COOL_OFF_TIME,
|
||||
threshold: STOPLIGHT_THRESHOLD,
|
||||
tracked_errors: [HTTP::Error, OpenSSL::SSL::SSLError]
|
||||
)
|
||||
end
|
||||
|
||||
def actor_refresh_key!(actor)
|
||||
|
|
|
|||
|
|
@ -183,7 +183,7 @@ export function directCompose(account) {
|
|||
};
|
||||
}
|
||||
|
||||
export function submitCompose() {
|
||||
export function submitCompose(successCallback) {
|
||||
return function (dispatch, getState) {
|
||||
const status = getState().getIn(['compose', 'text'], '');
|
||||
const media = getState().getIn(['compose', 'media_attachments']);
|
||||
|
|
@ -228,6 +228,8 @@ export function submitCompose() {
|
|||
visibility: getState().getIn(['compose', 'privacy']),
|
||||
poll: getState().getIn(['compose', 'poll'], null),
|
||||
language: getState().getIn(['compose', 'language']),
|
||||
quoted_status_id: getState().getIn(['compose', 'quoted_status_id']),
|
||||
quote_approval_policy: getState().getIn(['compose', 'quote_policy']),
|
||||
},
|
||||
headers: {
|
||||
'Idempotency-Key': getState().getIn(['compose', 'idempotencyKey']),
|
||||
|
|
@ -239,6 +241,9 @@ export function submitCompose() {
|
|||
|
||||
dispatch(insertIntoTagHistory(response.data.tags, status));
|
||||
dispatch(submitComposeSuccess({ ...response.data }));
|
||||
if (typeof successCallback === 'function') {
|
||||
successCallback(response.data);
|
||||
}
|
||||
|
||||
// To make the app more responsive, immediately push the status
|
||||
// into the columns
|
||||
|
|
|
|||
|
|
@ -1,9 +1,18 @@
|
|||
import { createAction } from '@reduxjs/toolkit';
|
||||
import type { List as ImmutableList, Map as ImmutableMap } from 'immutable';
|
||||
|
||||
import { apiUpdateMedia } from 'mastodon/api/compose';
|
||||
import type { ApiMediaAttachmentJSON } from 'mastodon/api_types/media_attachments';
|
||||
import type { MediaAttachment } from 'mastodon/models/media_attachment';
|
||||
import { createDataLoadingThunk } from 'mastodon/store/typed_functions';
|
||||
import {
|
||||
createDataLoadingThunk,
|
||||
createAppThunk,
|
||||
} from 'mastodon/store/typed_functions';
|
||||
|
||||
import type { ApiQuotePolicy } from '../api_types/quotes';
|
||||
import type { Status } from '../models/status';
|
||||
|
||||
import { ensureComposeIsVisible } from './compose';
|
||||
|
||||
type SimulatedMediaAttachmentJSON = ApiMediaAttachmentJSON & {
|
||||
unattached?: boolean;
|
||||
|
|
@ -68,3 +77,26 @@ export const changeUploadCompose = createDataLoadingThunk(
|
|||
useLoadingBar: false,
|
||||
},
|
||||
);
|
||||
|
||||
export const quoteComposeByStatus = createAppThunk(
|
||||
'compose/quoteComposeStatus',
|
||||
(status: Status, { getState }) => {
|
||||
ensureComposeIsVisible(getState);
|
||||
return status;
|
||||
},
|
||||
);
|
||||
|
||||
export const quoteComposeById = createAppThunk(
|
||||
(statusId: string, { dispatch, getState }) => {
|
||||
const status = getState().statuses.get(statusId);
|
||||
if (status) {
|
||||
dispatch(quoteComposeByStatus(status));
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const quoteComposeCancel = createAction('compose/quoteComposeCancel');
|
||||
|
||||
export const setQuotePolicy = createAction<ApiQuotePolicy>(
|
||||
'compose/setQuotePolicy',
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
import { createAction } from '@reduxjs/toolkit';
|
||||
|
||||
import { apiGetContext } from 'mastodon/api/statuses';
|
||||
import { apiGetContext, apiSetQuotePolicy } from 'mastodon/api/statuses';
|
||||
import { createDataLoadingThunk } from 'mastodon/store/typed_functions';
|
||||
|
||||
import type { ApiQuotePolicy } from '../api_types/quotes';
|
||||
|
||||
import { importFetchedStatuses } from './importer';
|
||||
|
||||
export const fetchContext = createDataLoadingThunk(
|
||||
|
|
@ -23,3 +25,10 @@ export const fetchContext = createDataLoadingThunk(
|
|||
export const completeContextRefresh = createAction<{ statusId: string }>(
|
||||
'status/context/complete',
|
||||
);
|
||||
|
||||
export const setStatusQuotePolicy = createDataLoadingThunk(
|
||||
'status/setQuotePolicy',
|
||||
({ statusId, policy }: { statusId: string; policy: ApiQuotePolicy }) => {
|
||||
return apiSetQuotePolicy(statusId, policy);
|
||||
},
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,10 @@
|
|||
import api, { getAsyncRefreshHeader } from 'mastodon/api';
|
||||
import type { ApiContextJSON } from 'mastodon/api_types/statuses';
|
||||
import api, { apiRequestPut, getAsyncRefreshHeader } from 'mastodon/api';
|
||||
import type {
|
||||
ApiContextJSON,
|
||||
ApiStatusJSON,
|
||||
} from 'mastodon/api_types/statuses';
|
||||
|
||||
import type { ApiQuotePolicy } from '../api_types/quotes';
|
||||
|
||||
export const apiGetContext = async (statusId: string) => {
|
||||
const response = await api().request<ApiContextJSON>({
|
||||
|
|
@ -12,3 +17,15 @@ export const apiGetContext = async (statusId: string) => {
|
|||
refresh: getAsyncRefreshHeader(response),
|
||||
};
|
||||
};
|
||||
|
||||
export const apiSetQuotePolicy = async (
|
||||
statusId: string,
|
||||
policy: ApiQuotePolicy,
|
||||
) => {
|
||||
return apiRequestPut<ApiStatusJSON>(
|
||||
`v1/statuses/${statusId}/interaction_policy`,
|
||||
{
|
||||
quote_approval_policy: policy,
|
||||
},
|
||||
);
|
||||
};
|
||||
|
|
|
|||
33
app/javascript/mastodon/api_types/quotes.ts
Normal file
33
app/javascript/mastodon/api_types/quotes.ts
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
import type { ApiStatusJSON } from './statuses';
|
||||
|
||||
export type ApiQuoteState = 'accepted' | 'pending' | 'revoked' | 'unauthorized';
|
||||
export type ApiQuotePolicy = 'public' | 'followers' | 'nobody' | 'unknown';
|
||||
|
||||
interface ApiQuoteEmptyJSON {
|
||||
state: Exclude<ApiQuoteState, 'accepted'>;
|
||||
quoted_status: null;
|
||||
}
|
||||
|
||||
interface ApiNestedQuoteJSON {
|
||||
state: 'accepted';
|
||||
quoted_status_id: string;
|
||||
}
|
||||
|
||||
interface ApiQuoteAcceptedJSON {
|
||||
state: 'accepted';
|
||||
quoted_status: Omit<ApiStatusJSON, 'quote'> & {
|
||||
quote: ApiNestedQuoteJSON | ApiQuoteEmptyJSON;
|
||||
};
|
||||
}
|
||||
|
||||
export type ApiQuoteJSON = ApiQuoteAcceptedJSON | ApiQuoteEmptyJSON;
|
||||
|
||||
export interface ApiQuotePolicyJSON {
|
||||
automatic: ApiQuotePolicy[];
|
||||
manual: ApiQuotePolicy[];
|
||||
current_user: ApiQuotePolicy;
|
||||
}
|
||||
|
||||
export function isQuotePolicy(policy: string): policy is ApiQuotePolicy {
|
||||
return ['public', 'followers', 'nobody'].includes(policy);
|
||||
}
|
||||
|
|
@ -4,6 +4,7 @@ import type { ApiAccountJSON } from './accounts';
|
|||
import type { ApiCustomEmojiJSON } from './custom_emoji';
|
||||
import type { ApiMediaAttachmentJSON } from './media_attachments';
|
||||
import type { ApiPollJSON } from './polls';
|
||||
import type { ApiQuoteJSON, ApiQuotePolicyJSON } from './quotes';
|
||||
|
||||
// See app/modals/status.rb
|
||||
export type StatusVisibility =
|
||||
|
|
@ -118,9 +119,17 @@ export interface ApiStatusJSON {
|
|||
|
||||
card?: ApiPreviewCardJSON;
|
||||
poll?: ApiPollJSON;
|
||||
quote?: ApiQuoteJSON;
|
||||
quote_approval?: ApiQuotePolicyJSON;
|
||||
}
|
||||
|
||||
export interface ApiContextJSON {
|
||||
ancestors: ApiStatusJSON[];
|
||||
descendants: ApiStatusJSON[];
|
||||
}
|
||||
|
||||
export interface ApiStatusSourceJSON {
|
||||
id: string;
|
||||
text: string;
|
||||
spoiler_text: string;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ const AutosuggestTextarea = forwardRef(({
|
|||
onFocus,
|
||||
autoFocus = true,
|
||||
lang,
|
||||
className,
|
||||
}, textareaRef) => {
|
||||
|
||||
const [suggestionsHidden, setSuggestionsHidden] = useState(true);
|
||||
|
|
@ -192,7 +193,7 @@ const AutosuggestTextarea = forwardRef(({
|
|||
};
|
||||
|
||||
return (
|
||||
<div className='autosuggest-textarea'>
|
||||
<div className={classNames('autosuggest-textarea', className)}>
|
||||
<Textarea
|
||||
ref={textareaRef}
|
||||
className='autosuggest-textarea__textarea'
|
||||
|
|
|
|||
114
app/javascript/mastodon/components/dropdown/index.tsx
Normal file
114
app/javascript/mastodon/components/dropdown/index.tsx
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
import { useCallback, useId, useMemo, useRef, useState } from 'react';
|
||||
import type { ComponentPropsWithoutRef, FC } from 'react';
|
||||
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
import type { MessageDescriptor } from 'react-intl';
|
||||
|
||||
import classNames from 'classnames';
|
||||
|
||||
import Overlay from 'react-overlays/Overlay';
|
||||
|
||||
import type { SelectItem } from '../dropdown_selector';
|
||||
import { DropdownSelector } from '../dropdown_selector';
|
||||
|
||||
interface DropdownProps {
|
||||
title: string;
|
||||
disabled?: boolean;
|
||||
items: SelectItem[];
|
||||
onChange: (value: string) => void;
|
||||
current: string;
|
||||
emptyText?: MessageDescriptor;
|
||||
classPrefix: string;
|
||||
}
|
||||
|
||||
export const Dropdown: FC<
|
||||
DropdownProps & Omit<ComponentPropsWithoutRef<'button'>, keyof DropdownProps>
|
||||
> = ({
|
||||
title,
|
||||
disabled,
|
||||
items,
|
||||
current,
|
||||
onChange,
|
||||
classPrefix,
|
||||
className,
|
||||
...buttonProps
|
||||
}) => {
|
||||
const buttonRef = useRef<HTMLButtonElement>(null);
|
||||
const accessibilityId = useId();
|
||||
|
||||
const [open, setOpen] = useState(false);
|
||||
const handleToggle = useCallback(() => {
|
||||
if (!disabled) {
|
||||
setOpen((prevOpen) => !prevOpen);
|
||||
}
|
||||
}, [disabled]);
|
||||
const handleClose = useCallback(() => {
|
||||
setOpen(false);
|
||||
}, []);
|
||||
const currentText = useMemo(
|
||||
() => items.find((i) => i.value === current)?.text,
|
||||
[current, items],
|
||||
);
|
||||
return (
|
||||
<>
|
||||
<button
|
||||
type='button'
|
||||
{...buttonProps}
|
||||
title={title}
|
||||
aria-expanded={open}
|
||||
aria-controls={accessibilityId}
|
||||
onClick={handleToggle}
|
||||
disabled={disabled}
|
||||
className={classNames(
|
||||
`${classPrefix}__button`,
|
||||
{
|
||||
active: open,
|
||||
disabled,
|
||||
},
|
||||
className,
|
||||
)}
|
||||
ref={buttonRef}
|
||||
>
|
||||
{currentText ?? (
|
||||
<FormattedMessage
|
||||
id='dropdown.empty'
|
||||
defaultMessage='Select an option'
|
||||
/>
|
||||
)}
|
||||
</button>
|
||||
|
||||
<Overlay
|
||||
show={open}
|
||||
offset={[0, 4]}
|
||||
placement='bottom-start'
|
||||
onHide={handleClose}
|
||||
flip
|
||||
target={buttonRef.current}
|
||||
popperConfig={{
|
||||
strategy: 'fixed',
|
||||
}}
|
||||
>
|
||||
{({ props, placement }) => (
|
||||
<div {...props} className={`${classPrefix}__overlay`}>
|
||||
<div
|
||||
className={classNames(
|
||||
'dropdown-animation',
|
||||
`${classPrefix}__dropdown`,
|
||||
placement,
|
||||
)}
|
||||
id={accessibilityId}
|
||||
>
|
||||
<DropdownSelector
|
||||
items={items}
|
||||
value={current}
|
||||
onClose={handleClose}
|
||||
onChange={onChange}
|
||||
classNamePrefix={classPrefix}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</Overlay>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
|
@ -13,8 +13,8 @@ const listenerOptions = supportsPassiveEvents
|
|||
? { passive: true, capture: true }
|
||||
: true;
|
||||
|
||||
export interface SelectItem {
|
||||
value: string;
|
||||
export interface SelectItem<Value extends string = string> {
|
||||
value: Value;
|
||||
icon?: string;
|
||||
iconComponent?: IconProp;
|
||||
text: string;
|
||||
|
|
@ -24,7 +24,7 @@ export interface SelectItem {
|
|||
|
||||
interface Props {
|
||||
value: string;
|
||||
classNamePrefix: string;
|
||||
classNamePrefix?: string;
|
||||
style?: React.CSSProperties;
|
||||
items: SelectItem[];
|
||||
onChange: (value: string) => void;
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component';
|
|||
|
||||
import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react';
|
||||
import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react';
|
||||
import CancelFillIcon from '@/material-icons/400-24px/cancel-fill.svg?react';
|
||||
import { Hotkeys } from 'mastodon/components/hotkeys';
|
||||
import { ContentWarning } from 'mastodon/components/content_warning';
|
||||
import { FilterWarning } from 'mastodon/components/filter_warning';
|
||||
|
|
@ -34,6 +35,8 @@ import StatusActionBar from './status_action_bar';
|
|||
import StatusContent from './status_content';
|
||||
import { StatusThreadLabel } from './status_thread_label';
|
||||
import { VisibilityIcon } from './visibility_icon';
|
||||
import { IconButton } from './icon_button';
|
||||
|
||||
const domParser = new DOMParser();
|
||||
|
||||
export const textForScreenReader = (intl, status, rebloggedByText = false) => {
|
||||
|
|
@ -75,6 +78,7 @@ const messages = defineMessages({
|
|||
private_short: { id: 'privacy.private.short', defaultMessage: 'Followers' },
|
||||
direct_short: { id: 'privacy.direct.short', defaultMessage: 'Specific people' },
|
||||
edited: { id: 'status.edited', defaultMessage: 'Edited {date}' },
|
||||
quote_cancel: { id: 'status.quote.cancel', defaultMessage: 'Cancel quote' },
|
||||
});
|
||||
|
||||
class Status extends ImmutablePureComponent {
|
||||
|
|
@ -126,6 +130,7 @@ class Status extends ImmutablePureComponent {
|
|||
inUse: PropTypes.bool,
|
||||
available: PropTypes.bool,
|
||||
}),
|
||||
contextType: PropTypes.string,
|
||||
...WithOptionalRouterPropTypes,
|
||||
};
|
||||
|
||||
|
|
@ -359,6 +364,10 @@ class Status extends ImmutablePureComponent {
|
|||
this.setState(state => ({ ...state, showDespiteFilter: !state.showDespiteFilter }));
|
||||
};
|
||||
|
||||
handleQuoteCancel = () => {
|
||||
this.props.onQuoteCancel?.();
|
||||
}
|
||||
|
||||
_properStatus () {
|
||||
const { status } = this.props;
|
||||
|
||||
|
|
@ -573,6 +582,16 @@ class Status extends ImmutablePureComponent {
|
|||
|
||||
<DisplayName account={status.get('account')} />
|
||||
</Link>
|
||||
|
||||
{this.props.contextType === 'compose' && isQuotedPost && (
|
||||
<IconButton
|
||||
onClick={this.handleQuoteCancel}
|
||||
className='status__quote-cancel'
|
||||
title={intl.formatMessage(messages.quote_cancel)}
|
||||
icon="cancel-fill"
|
||||
iconComponent={CancelFillIcon}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{matchedFilters && <FilterWarning title={matchedFilters.join(', ')} expanded={this.state.showDespiteFilter} onClick={this.handleFilterToggle} />}
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import { Dropdown } from 'mastodon/components/dropdown_menu';
|
|||
import { me } from '../initial_state';
|
||||
|
||||
import { IconButton } from './icon_button';
|
||||
import { isFeatureEnabled } from '../utils/environment';
|
||||
|
||||
const messages = defineMessages({
|
||||
delete: { id: 'status.delete', defaultMessage: 'Delete' },
|
||||
|
|
@ -68,6 +69,7 @@ const messages = defineMessages({
|
|||
filter: { id: 'status.filter', defaultMessage: 'Filter this post' },
|
||||
openOriginalPage: { id: 'account.open_original_page', defaultMessage: 'Open original page' },
|
||||
revokeQuote: { id: 'status.revoke_quote', defaultMessage: 'Remove my post from @{name}’s post' },
|
||||
quotePolicyChange: { id: 'status.quote_policy_change', defaultMessage: 'Change who can quote' },
|
||||
});
|
||||
|
||||
const mapStateToProps = (state, { status }) => {
|
||||
|
|
@ -89,6 +91,7 @@ class StatusActionBar extends ImmutablePureComponent {
|
|||
onReblog: PropTypes.func,
|
||||
onDelete: PropTypes.func,
|
||||
onRevokeQuote: PropTypes.func,
|
||||
onQuotePolicyChange: PropTypes.func,
|
||||
onDirect: PropTypes.func,
|
||||
onMention: PropTypes.func,
|
||||
onMute: PropTypes.func,
|
||||
|
|
@ -200,7 +203,11 @@ class StatusActionBar extends ImmutablePureComponent {
|
|||
|
||||
handleRevokeQuoteClick = () => {
|
||||
this.props.onRevokeQuote(this.props.status);
|
||||
}
|
||||
};
|
||||
|
||||
handleQuotePolicyChange = () => {
|
||||
this.props.onQuotePolicyChange(this.props.status);
|
||||
};
|
||||
|
||||
handleBlockClick = () => {
|
||||
const { status, relationship, onBlock, onUnblock } = this.props;
|
||||
|
|
@ -291,6 +298,9 @@ class StatusActionBar extends ImmutablePureComponent {
|
|||
|
||||
if (writtenByMe || withDismiss) {
|
||||
menu.push({ text: intl.formatMessage(mutingConversation ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMuteClick });
|
||||
if (writtenByMe && isFeatureEnabled('outgoing_quotes') && !['private', 'direct'].includes(status.get('visibility'))) {
|
||||
menu.push({ text: intl.formatMessage(messages.quotePolicyChange), action: this.handleQuotePolicyChange });
|
||||
}
|
||||
menu.push(null);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ import {
|
|||
import Status from '../components/status';
|
||||
import { deleteModal } from '../initial_state';
|
||||
import { makeGetStatus, makeGetPictureInPicture } from '../selectors';
|
||||
import { quoteComposeCancel } from '../actions/compose_typed';
|
||||
|
||||
const makeMapStateToProps = () => {
|
||||
const getStatus = makeGetStatus();
|
||||
|
|
@ -111,10 +112,20 @@ const mapDispatchToProps = (dispatch, { contextType }) => ({
|
|||
}
|
||||
},
|
||||
|
||||
onQuoteCancel() {
|
||||
if (contextType === 'compose') {
|
||||
dispatch(quoteComposeCancel());
|
||||
}
|
||||
},
|
||||
|
||||
onRevokeQuote (status) {
|
||||
dispatch(openModal({ modalType: 'CONFIRM_REVOKE_QUOTE', modalProps: { statusId: status.get('id'), quotedStatusId: status.getIn(['quote', 'quoted_status']) }}));
|
||||
},
|
||||
|
||||
onQuotePolicyChange(status) {
|
||||
dispatch(openModal({ modalType: 'COMPOSE_PRIVACY', modalProps: { statusId: status.get('id') } }));
|
||||
},
|
||||
|
||||
onEdit (status) {
|
||||
dispatch((_, getState) => {
|
||||
let state = getState();
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ import { PollForm } from "./poll_form";
|
|||
import { ReplyIndicator } from './reply_indicator';
|
||||
import { UploadForm } from './upload_form';
|
||||
import { Warning } from './warning';
|
||||
import { ComposeQuotedStatus } from './quoted_post';
|
||||
|
||||
const allowedAroundShortCode = '><\u0085\u0020\u00a0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\u0009\u000a\u000b\u000c\u000d';
|
||||
|
||||
|
|
@ -72,6 +73,7 @@ class ComposeForm extends ImmutablePureComponent {
|
|||
singleColumn: PropTypes.bool,
|
||||
lang: PropTypes.string,
|
||||
maxChars: PropTypes.number,
|
||||
redirectOnSuccess: PropTypes.bool,
|
||||
};
|
||||
|
||||
static defaultProps = {
|
||||
|
|
@ -254,62 +256,62 @@ class ComposeForm extends ImmutablePureComponent {
|
|||
<Warning />
|
||||
|
||||
<div className={classNames('compose-form__highlightable', { active: highlighted })} ref={this.setRef}>
|
||||
<div className='compose-form__scrollable'>
|
||||
<EditIndicator />
|
||||
<EditIndicator />
|
||||
|
||||
{this.props.spoiler && (
|
||||
<div className='spoiler-input'>
|
||||
<div className='spoiler-input__border' />
|
||||
|
||||
<AutosuggestInput
|
||||
placeholder={intl.formatMessage(messages.spoiler_placeholder)}
|
||||
value={this.props.spoilerText}
|
||||
disabled={isSubmitting}
|
||||
onChange={this.handleChangeSpoilerText}
|
||||
onKeyDown={this.handleKeyDownSpoiler}
|
||||
ref={this.setSpoilerText}
|
||||
suggestions={this.props.suggestions}
|
||||
onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}
|
||||
onSuggestionsClearRequested={this.onSuggestionsClearRequested}
|
||||
onSuggestionSelected={this.onSpoilerSuggestionSelected}
|
||||
searchTokens={[':']}
|
||||
id='cw-spoiler-input'
|
||||
className='spoiler-input__input'
|
||||
lang={this.props.lang}
|
||||
spellCheck
|
||||
/>
|
||||
|
||||
<div className='spoiler-input__border' />
|
||||
</div>
|
||||
)}
|
||||
|
||||
<AutosuggestTextarea
|
||||
ref={this.textareaRef}
|
||||
placeholder={intl.formatMessage(messages.placeholder)}
|
||||
disabled={isSubmitting}
|
||||
value={this.props.text}
|
||||
onChange={this.handleChange}
|
||||
suggestions={this.props.suggestions}
|
||||
onFocus={this.handleFocus}
|
||||
onKeyDown={this.handleKeyDownPost}
|
||||
onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}
|
||||
onSuggestionsClearRequested={this.onSuggestionsClearRequested}
|
||||
onSuggestionSelected={this.onSuggestionSelected}
|
||||
onPaste={onPaste}
|
||||
autoFocus={autoFocus}
|
||||
lang={this.props.lang}
|
||||
/>
|
||||
<div className='compose-form__dropdowns'>
|
||||
<PrivacyDropdownContainer disabled={this.props.isEditing} />
|
||||
<LanguageDropdown />
|
||||
</div>
|
||||
|
||||
{this.props.spoiler && (
|
||||
<div className='spoiler-input'>
|
||||
<div className='spoiler-input__border' />
|
||||
|
||||
<AutosuggestInput
|
||||
placeholder={intl.formatMessage(messages.spoiler_placeholder)}
|
||||
value={this.props.spoilerText}
|
||||
disabled={isSubmitting}
|
||||
onChange={this.handleChangeSpoilerText}
|
||||
onKeyDown={this.handleKeyDownSpoiler}
|
||||
ref={this.setSpoilerText}
|
||||
suggestions={this.props.suggestions}
|
||||
onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}
|
||||
onSuggestionsClearRequested={this.onSuggestionsClearRequested}
|
||||
onSuggestionSelected={this.onSpoilerSuggestionSelected}
|
||||
searchTokens={[':']}
|
||||
id='cw-spoiler-input'
|
||||
className='spoiler-input__input'
|
||||
lang={this.props.lang}
|
||||
spellCheck
|
||||
/>
|
||||
|
||||
<div className='spoiler-input__border' />
|
||||
</div>
|
||||
)}
|
||||
|
||||
<AutosuggestTextarea
|
||||
ref={this.textareaRef}
|
||||
placeholder={intl.formatMessage(messages.placeholder)}
|
||||
disabled={isSubmitting}
|
||||
value={this.props.text}
|
||||
onChange={this.handleChange}
|
||||
suggestions={this.props.suggestions}
|
||||
onFocus={this.handleFocus}
|
||||
onKeyDown={this.handleKeyDownPost}
|
||||
onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}
|
||||
onSuggestionsClearRequested={this.onSuggestionsClearRequested}
|
||||
onSuggestionSelected={this.onSuggestionSelected}
|
||||
onPaste={onPaste}
|
||||
autoFocus={autoFocus}
|
||||
lang={this.props.lang}
|
||||
className='compose-form__input'
|
||||
/>
|
||||
|
||||
<UploadForm />
|
||||
<PollForm />
|
||||
<ComposeQuotedStatus />
|
||||
|
||||
<div className='compose-form__footer'>
|
||||
<div className='compose-form__dropdowns'>
|
||||
<PrivacyDropdownContainer disabled={this.props.isEditing} />
|
||||
<LanguageDropdown />
|
||||
</div>
|
||||
|
||||
<div className='compose-form__actions'>
|
||||
<div className='compose-form__buttons'>
|
||||
<UploadButtonContainer />
|
||||
|
|
|
|||
|
|
@ -409,7 +409,7 @@ export const LanguageDropdown: React.FC = () => {
|
|||
warning: guess !== '' && guess !== value,
|
||||
})}
|
||||
>
|
||||
<Icon id='' icon={TranslateIcon} />
|
||||
<Icon id='translate' icon={TranslateIcon} />
|
||||
<span className='dropdown-button__label'>{current[2] ?? value}</span>
|
||||
</button>
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import QuietTimeIcon from '@/material-icons/400-24px/quiet_time.svg?react';
|
|||
import { DropdownSelector } from 'mastodon/components/dropdown_selector';
|
||||
import { Icon } from 'mastodon/components/icon';
|
||||
|
||||
const messages = defineMessages({
|
||||
export const messages = defineMessages({
|
||||
public_short: { id: 'privacy.public.short', defaultMessage: 'Public' },
|
||||
public_long: { id: 'privacy.public.long', defaultMessage: 'Anyone on and off Mastodon' },
|
||||
unlisted_short: { id: 'privacy.unlisted.short', defaultMessage: 'Quiet public' },
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
import { useMemo } from 'react';
|
||||
import type { FC } from 'react';
|
||||
|
||||
import { Map } from 'immutable';
|
||||
|
||||
import { QuotedStatus } from '@/mastodon/components/status_quoted';
|
||||
import { useAppSelector } from '@/mastodon/store';
|
||||
|
||||
export const ComposeQuotedStatus: FC = () => {
|
||||
const quotedStatusId = useAppSelector(
|
||||
(state) => state.compose.get('quoted_status_id') as string | null,
|
||||
);
|
||||
const quote = useMemo(
|
||||
() =>
|
||||
quotedStatusId
|
||||
? Map<'state' | 'quoted_status', string>([
|
||||
['state', 'accepted'],
|
||||
['quoted_status', quotedStatusId],
|
||||
])
|
||||
: null,
|
||||
[quotedStatusId],
|
||||
);
|
||||
if (!quote) {
|
||||
return null;
|
||||
}
|
||||
return <QuotedStatus quote={quote} contextType='compose' />;
|
||||
};
|
||||
|
|
@ -25,7 +25,7 @@ export const ReplyIndicator = () => {
|
|||
<div className='reply-indicator__line' />
|
||||
|
||||
<Link to={`/@${account.get('acct')}`} className='detailed-status__display-avatar'>
|
||||
<Avatar account={account} size={46} />
|
||||
<Avatar key={`avatar-${account.get('id')}`} account={account} size={46} />
|
||||
</Link>
|
||||
|
||||
<div className='reply-indicator__main'>
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ const mapStateToProps = state => ({
|
|||
maxChars: state.getIn(['server', 'server', 'configuration', 'statuses', 'max_characters'], 500),
|
||||
});
|
||||
|
||||
const mapDispatchToProps = (dispatch) => ({
|
||||
const mapDispatchToProps = (dispatch, props) => ({
|
||||
|
||||
onChange (text) {
|
||||
dispatch(changeCompose(text));
|
||||
|
|
@ -47,7 +47,11 @@ const mapDispatchToProps = (dispatch) => ({
|
|||
modalProps: {},
|
||||
}));
|
||||
} else {
|
||||
dispatch(submitCompose());
|
||||
dispatch(submitCompose((status) => {
|
||||
if (props.redirectOnSuccess) {
|
||||
window.location.assign(status.url);
|
||||
}
|
||||
}));
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -3,10 +3,16 @@ import { connect } from 'react-redux';
|
|||
import { addPoll, removePoll } from '../../../actions/compose';
|
||||
import PollButton from '../components/poll_button';
|
||||
|
||||
const mapStateToProps = state => ({
|
||||
disabled: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size > 0),
|
||||
active: state.getIn(['compose', 'poll']) !== null,
|
||||
});
|
||||
const mapStateToProps = state => {
|
||||
const readyAttachmentsSize = state.compose.get('media_attachments').size ?? 0;
|
||||
const hasAttachments = readyAttachmentsSize > 0 || !!state.compose.get('is_uploading');
|
||||
const hasQuote = !!state.compose.get('quoted_status_id');
|
||||
|
||||
return ({
|
||||
disabled: hasAttachments || hasQuote,
|
||||
active: state.getIn(['compose', 'poll']) !== null,
|
||||
});
|
||||
};
|
||||
|
||||
const mapDispatchToProps = dispatch => ({
|
||||
|
||||
|
|
|
|||
|
|
@ -11,9 +11,10 @@ const mapStateToProps = state => {
|
|||
const attachmentsSize = readyAttachmentsSize + pendingAttachmentsSize;
|
||||
const isOverLimit = attachmentsSize > state.getIn(['server', 'server', 'configuration', 'statuses', 'max_media_attachments'])-1;
|
||||
const hasVideoOrAudio = state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type')));
|
||||
const hasQuote = !!state.compose.get('quoted_status_id');
|
||||
|
||||
return {
|
||||
disabled: isPoll || isUploading || isOverLimit || hasVideoOrAudio,
|
||||
disabled: isPoll || isUploading || isOverLimit || hasVideoOrAudio || hasQuote,
|
||||
resetFileKey: state.getIn(['compose', 'resetFileKey']),
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -38,11 +38,7 @@ export const EmojiHTML = <Element extends ElementType>(
|
|||
if (isModernEmojiEnabled()) {
|
||||
return <ModernEmojiHTML {...props} />;
|
||||
}
|
||||
const Wrapper = props.as ?? 'div';
|
||||
return (
|
||||
<Wrapper
|
||||
{...props}
|
||||
dangerouslySetInnerHTML={{ __html: props.htmlString }}
|
||||
/>
|
||||
);
|
||||
const { as: asElement, htmlString, extraEmojis, ...rest } = props;
|
||||
const Wrapper = asElement ?? 'div';
|
||||
return <Wrapper {...rest} dangerouslySetInnerHTML={{ __html: htmlString }} />;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import ModalContainer from 'mastodon/features/ui/containers/modal_container';
|
|||
|
||||
const Compose = () => (
|
||||
<>
|
||||
<ComposeFormContainer autoFocus withoutNavigation />
|
||||
<ComposeFormContainer autoFocus withoutNavigation redirectOnSuccess />
|
||||
<AlertsController />
|
||||
<ModalContainer />
|
||||
<LoadingBarContainer className='loading-bar' />
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_FEDERATION } from 'mastodon/
|
|||
import { IconButton } from '../../../components/icon_button';
|
||||
import { Dropdown } from 'mastodon/components/dropdown_menu';
|
||||
import { me } from '../../../initial_state';
|
||||
import { isFeatureEnabled } from '@/mastodon/utils/environment';
|
||||
|
||||
const messages = defineMessages({
|
||||
delete: { id: 'status.delete', defaultMessage: 'Delete' },
|
||||
|
|
@ -62,6 +63,7 @@ const messages = defineMessages({
|
|||
unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' },
|
||||
openOriginalPage: { id: 'account.open_original_page', defaultMessage: 'Open original page' },
|
||||
revokeQuote: { id: 'status.revoke_quote', defaultMessage: 'Remove my post from @{name}’s post' },
|
||||
quotePolicyChange: { id: 'status.quote_policy_change', defaultMessage: 'Change who can quote' },
|
||||
});
|
||||
|
||||
const mapStateToProps = (state, { status }) => {
|
||||
|
|
@ -84,6 +86,7 @@ class ActionBar extends PureComponent {
|
|||
onBookmark: PropTypes.func.isRequired,
|
||||
onDelete: PropTypes.func.isRequired,
|
||||
onRevokeQuote: PropTypes.func,
|
||||
onQuotePolicyChange: PropTypes.func,
|
||||
onEdit: PropTypes.func.isRequired,
|
||||
onDirect: PropTypes.func.isRequired,
|
||||
onMention: PropTypes.func.isRequired,
|
||||
|
|
@ -122,7 +125,11 @@ class ActionBar extends PureComponent {
|
|||
|
||||
handleRevokeQuoteClick = () => {
|
||||
this.props.onRevokeQuote(this.props.status);
|
||||
}
|
||||
};
|
||||
|
||||
handleQuotePolicyChange = () => {
|
||||
this.props.onQuotePolicyChange(this.props.status);
|
||||
};
|
||||
|
||||
handleRedraftClick = () => {
|
||||
this.props.onDelete(this.props.status, true);
|
||||
|
|
@ -240,6 +247,9 @@ class ActionBar extends PureComponent {
|
|||
}
|
||||
|
||||
menu.push({ text: intl.formatMessage(mutingConversation ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMuteClick });
|
||||
if (isFeatureEnabled('outgoing_quotes') && !['private', 'direct'].includes(status.get('visibility'))) {
|
||||
menu.push({ text: intl.formatMessage(messages.quotePolicyChange), action: this.handleQuotePolicyChange });
|
||||
}
|
||||
menu.push(null);
|
||||
menu.push({ text: intl.formatMessage(messages.edit), action: this.handleEditClick });
|
||||
menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick, dangerous: true });
|
||||
|
|
|
|||
|
|
@ -265,6 +265,11 @@ class Status extends ImmutablePureComponent {
|
|||
dispatch(openModal({ modalType: 'CONFIRM_REVOKE_QUOTE', modalProps: { statusId: status.get('id'), quotedStatusId: status.getIn(['quote', 'quoted_status']) }}));
|
||||
};
|
||||
|
||||
handleQuotePolicyChange = (status) => {
|
||||
const { dispatch } = this.props;
|
||||
dispatch(openModal({ modalType: 'COMPOSE_PRIVACY', modalProps: { statusId: status.get('id') } }));
|
||||
};
|
||||
|
||||
handleEditClick = (status) => {
|
||||
const { dispatch, askReplyConfirmation } = this.props;
|
||||
|
||||
|
|
@ -642,6 +647,7 @@ class Status extends ImmutablePureComponent {
|
|||
onBookmark={this.handleBookmarkClick}
|
||||
onDelete={this.handleDeleteClick}
|
||||
onRevokeQuote={this.handleRevokeQuoteClick}
|
||||
onQuotePolicyChange={this.handleQuotePolicyChange}
|
||||
onEdit={this.handleEditClick}
|
||||
onDirect={this.handleDirectClick}
|
||||
onMention={this.handleMentionClick}
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ import { ImageModal } from './image_modal';
|
|||
import MediaModal from './media_modal';
|
||||
import { ModalPlaceholder } from './modal_placeholder';
|
||||
import VideoModal from './video_modal';
|
||||
import { VisibilityModal } from './visibility_modal';
|
||||
|
||||
export const MODAL_COMPONENTS = {
|
||||
'MEDIA': () => Promise.resolve({ default: MediaModal }),
|
||||
|
|
@ -76,6 +77,7 @@ export const MODAL_COMPONENTS = {
|
|||
'CLOSED_REGISTRATIONS': ClosedRegistrationsModal,
|
||||
'IGNORE_NOTIFICATIONS': IgnoreNotificationsModal,
|
||||
'ANNUAL_REPORT': AnnualReportModal,
|
||||
'COMPOSE_PRIVACY': () => Promise.resolve({ default: VisibilityModal }),
|
||||
};
|
||||
|
||||
export default class ModalRoot extends PureComponent {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,293 @@
|
|||
import { forwardRef, useCallback, useId, useMemo } from 'react';
|
||||
import type { FC } from 'react';
|
||||
|
||||
import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
|
||||
|
||||
import classNames from 'classnames';
|
||||
|
||||
import { changeComposeVisibility } from '@/mastodon/actions/compose';
|
||||
import { setStatusQuotePolicy } from '@/mastodon/actions/statuses_typed';
|
||||
import type { ApiQuotePolicy } from '@/mastodon/api_types/quotes';
|
||||
import { isQuotePolicy } from '@/mastodon/api_types/quotes';
|
||||
import type { StatusVisibility } from '@/mastodon/api_types/statuses';
|
||||
import { Dropdown } from '@/mastodon/components/dropdown';
|
||||
import type { SelectItem } from '@/mastodon/components/dropdown_selector';
|
||||
import { IconButton } from '@/mastodon/components/icon_button';
|
||||
import { messages as privacyMessages } from '@/mastodon/features/compose/components/privacy_dropdown';
|
||||
import {
|
||||
createAppSelector,
|
||||
useAppDispatch,
|
||||
useAppSelector,
|
||||
} from '@/mastodon/store';
|
||||
import CloseIcon from '@/material-icons/400-24px/close.svg?react';
|
||||
|
||||
import type { BaseConfirmationModalProps } from './confirmation_modals/confirmation_modal';
|
||||
|
||||
const messages = defineMessages({
|
||||
close: { id: 'lightbox.close', defaultMessage: 'Close' },
|
||||
buttonTitle: {
|
||||
id: 'visibility_modal.button_title',
|
||||
defaultMessage: 'Set visibility',
|
||||
},
|
||||
quotePublic: {
|
||||
id: 'visibility_modal.quote_public',
|
||||
defaultMessage: 'Anyone',
|
||||
},
|
||||
quoteFollowers: {
|
||||
id: 'visibility_modal.quote_followers',
|
||||
defaultMessage: 'Followers only',
|
||||
},
|
||||
quoteNobody: {
|
||||
id: 'visibility_modal.quote_nobody',
|
||||
defaultMessage: 'No one',
|
||||
},
|
||||
});
|
||||
|
||||
interface VisibilityModalProps extends BaseConfirmationModalProps {
|
||||
statusId: string;
|
||||
}
|
||||
|
||||
const selectStatusPolicy = createAppSelector(
|
||||
[(state) => state.statuses, (_state, statusId: string) => statusId],
|
||||
(statuses, statusId) => {
|
||||
const status = statuses.get(statusId);
|
||||
if (!status) {
|
||||
return 'public';
|
||||
}
|
||||
const policy =
|
||||
(status.getIn(['quote_approval', 'automatic', 0]) as string) || 'nobody';
|
||||
const visibility = status.get('visibility') as StatusVisibility;
|
||||
|
||||
// If the status is private or direct, it cannot be quoted by anyone.
|
||||
if (visibility === 'private' || visibility === 'direct') {
|
||||
return 'nobody';
|
||||
}
|
||||
|
||||
// If the status has a specific quote policy, return it.
|
||||
if (isQuotePolicy(policy)) {
|
||||
return policy;
|
||||
}
|
||||
|
||||
// Otherwise, return the default based on visibility.
|
||||
if (visibility === 'unlisted') {
|
||||
return 'followers';
|
||||
}
|
||||
return 'public';
|
||||
},
|
||||
);
|
||||
|
||||
export const VisibilityModal: FC<VisibilityModalProps> = forwardRef(
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
({ onClose, statusId }, ref) => {
|
||||
const intl = useIntl();
|
||||
const currentVisibility = useAppSelector(
|
||||
(state) =>
|
||||
(state.statuses.getIn([statusId, 'visibility'], 'public') as
|
||||
| StatusVisibility
|
||||
| undefined) ?? 'public',
|
||||
);
|
||||
const currentQuotePolicy = useAppSelector((state) =>
|
||||
selectStatusPolicy(state, statusId),
|
||||
);
|
||||
const disableQuotePolicy =
|
||||
currentVisibility === 'private' || currentVisibility === 'direct';
|
||||
const isSaving = useAppSelector(
|
||||
(state) =>
|
||||
state.statuses.getIn([statusId, 'isSavingQuotePolicy']) === true,
|
||||
);
|
||||
|
||||
const visibilityItems = useMemo<SelectItem<StatusVisibility>[]>(
|
||||
() => [
|
||||
{
|
||||
value: 'public',
|
||||
text: intl.formatMessage(privacyMessages.public_short),
|
||||
meta: intl.formatMessage(privacyMessages.public_long),
|
||||
},
|
||||
{
|
||||
value: 'unlisted',
|
||||
text: intl.formatMessage(privacyMessages.unlisted_short),
|
||||
meta: intl.formatMessage(privacyMessages.unlisted_long),
|
||||
},
|
||||
{
|
||||
value: 'private',
|
||||
text: intl.formatMessage(privacyMessages.private_short),
|
||||
meta: intl.formatMessage(privacyMessages.private_long),
|
||||
},
|
||||
{
|
||||
value: 'direct',
|
||||
text: intl.formatMessage(privacyMessages.direct_short),
|
||||
meta: intl.formatMessage(privacyMessages.direct_long),
|
||||
},
|
||||
],
|
||||
[intl],
|
||||
);
|
||||
const quoteItems = useMemo<SelectItem<ApiQuotePolicy>[]>(
|
||||
() => [
|
||||
{ value: 'public', text: intl.formatMessage(messages.quotePublic) },
|
||||
{
|
||||
value: 'followers',
|
||||
text: intl.formatMessage(messages.quoteFollowers),
|
||||
},
|
||||
{ value: 'nobody', text: intl.formatMessage(messages.quoteNobody) },
|
||||
],
|
||||
[intl],
|
||||
);
|
||||
|
||||
const dispatch = useAppDispatch();
|
||||
const handleVisibilityChange = useCallback(
|
||||
(value: string) => {
|
||||
// Published statuses cannot change visibility.
|
||||
if (statusId) {
|
||||
return;
|
||||
}
|
||||
dispatch(changeComposeVisibility(value));
|
||||
},
|
||||
[dispatch, statusId],
|
||||
);
|
||||
const handleQuotePolicyChange = useCallback(
|
||||
(value: string) => {
|
||||
if (isQuotePolicy(value) && !disableQuotePolicy) {
|
||||
void dispatch(setStatusQuotePolicy({ policy: value, statusId }));
|
||||
}
|
||||
},
|
||||
[disableQuotePolicy, dispatch, statusId],
|
||||
);
|
||||
|
||||
const privacyDropdownId = useId();
|
||||
const quoteDropdownId = useId();
|
||||
|
||||
return (
|
||||
<div className='modal-root__modal dialog-modal visibility-modal'>
|
||||
<div className='dialog-modal__header'>
|
||||
<IconButton
|
||||
className='dialog-modal__header__close'
|
||||
title={intl.formatMessage(messages.close)}
|
||||
icon='times'
|
||||
iconComponent={CloseIcon}
|
||||
onClick={onClose}
|
||||
/>
|
||||
<FormattedMessage
|
||||
id='visibility_modal.header'
|
||||
defaultMessage='Visibility and interaction'
|
||||
>
|
||||
{(chunks) => (
|
||||
<span className='dialog-modal__header__title'>{chunks}</span>
|
||||
)}
|
||||
</FormattedMessage>
|
||||
</div>
|
||||
<div className='dialog-modal__content'>
|
||||
<div className='dialog-modal__content__description'>
|
||||
<FormattedMessage
|
||||
id='visibility_modal.instructions'
|
||||
defaultMessage='Control who can interact with this post. Global settings can be found under <link>Preferences > Other</link>.'
|
||||
values={{
|
||||
link: (chunks) => (
|
||||
<a href='/settings/preferences/other'>{chunks}</a>
|
||||
),
|
||||
}}
|
||||
tagName='p'
|
||||
/>
|
||||
</div>
|
||||
<div className='dialog-modal__content__form'>
|
||||
<label
|
||||
htmlFor={privacyDropdownId}
|
||||
className={classNames('visibility-dropdown__label', {
|
||||
disabled: isSaving || !!statusId,
|
||||
})}
|
||||
>
|
||||
<FormattedMessage
|
||||
id='visibility_modal.privacy_label'
|
||||
defaultMessage='Privacy'
|
||||
/>
|
||||
|
||||
<Dropdown
|
||||
items={visibilityItems}
|
||||
classPrefix='visibility-dropdown'
|
||||
current={currentVisibility}
|
||||
onChange={handleVisibilityChange}
|
||||
title={intl.formatMessage(privacyMessages.change_privacy)}
|
||||
disabled={isSaving || !!statusId}
|
||||
id={privacyDropdownId}
|
||||
/>
|
||||
{!!statusId && (
|
||||
<p className='visibility-dropdown__helper'>
|
||||
<FormattedMessage
|
||||
id='visibility_modal.helper.privacy_editing'
|
||||
defaultMessage="Visibility can't be changed after a post is published."
|
||||
/>
|
||||
</p>
|
||||
)}
|
||||
</label>
|
||||
|
||||
<label
|
||||
htmlFor={quoteDropdownId}
|
||||
className={classNames('visibility-dropdown__label', {
|
||||
disabled: disableQuotePolicy || isSaving,
|
||||
})}
|
||||
>
|
||||
<FormattedMessage
|
||||
id='visibility_modal.quote_label'
|
||||
defaultMessage='Change who can quote'
|
||||
/>
|
||||
|
||||
<Dropdown
|
||||
items={quoteItems}
|
||||
onChange={handleQuotePolicyChange}
|
||||
classPrefix='visibility-dropdown'
|
||||
current={currentQuotePolicy}
|
||||
title={intl.formatMessage(messages.buttonTitle)}
|
||||
disabled={disableQuotePolicy || isSaving}
|
||||
id={quoteDropdownId}
|
||||
/>
|
||||
<QuotePolicyHelper
|
||||
policy={currentQuotePolicy}
|
||||
visibility={currentVisibility}
|
||||
/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
);
|
||||
VisibilityModal.displayName = 'VisibilityModal';
|
||||
|
||||
const QuotePolicyHelper: FC<{
|
||||
policy: ApiQuotePolicy;
|
||||
visibility: StatusVisibility;
|
||||
}> = ({ policy, visibility }) => {
|
||||
if (visibility === 'unlisted' && policy !== 'nobody') {
|
||||
return (
|
||||
<p className='visibility-dropdown__helper'>
|
||||
<FormattedMessage
|
||||
id='visibility_modal.helper.unlisted_quoting'
|
||||
defaultMessage='When people quote you, their post will also be hidden from trending timelines.'
|
||||
/>
|
||||
</p>
|
||||
);
|
||||
}
|
||||
|
||||
if (visibility === 'private') {
|
||||
return (
|
||||
<p className='visibility-dropdown__helper'>
|
||||
<FormattedMessage
|
||||
id='visibility_modal.helper.private_quoting'
|
||||
defaultMessage="Follower-only posts can't be quoted."
|
||||
/>
|
||||
</p>
|
||||
);
|
||||
}
|
||||
|
||||
if (visibility === 'direct') {
|
||||
return (
|
||||
<p className='visibility-dropdown__helper'>
|
||||
<FormattedMessage
|
||||
id='visibility_modal.helper.direct_quoting'
|
||||
defaultMessage="Private mentions can't be quoted."
|
||||
/>
|
||||
</p>
|
||||
);
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
|
@ -49,12 +49,12 @@
|
|||
"account.follows.empty": "Bu istifadəçi hələ ki, heç kimi izləmir.",
|
||||
"account.follows_you": "Sizi izləyir",
|
||||
"account.go_to_profile": "Profilə get",
|
||||
"account.hide_reblogs": "@{name} istifadəçisindən olan gücləndirmələri gizlət",
|
||||
"account.hide_reblogs": "@{name} - təkrar paylaşımlarını gizlət",
|
||||
"account.in_memoriam": "Xatirə.",
|
||||
"account.joined_short": "Qoşulub",
|
||||
"account.languages": "Abunə olunmuş dilləri dəyiş",
|
||||
"account.link_verified_on": "Bu linkin dəqiqliyi {date} tarixində yoxlanılıb",
|
||||
"account.locked_info": "Bu hesabın məxfilik statusu kilidlənib. Hesabın sahibi onu kimin izləyə biləcəyini manual olaraq təyin edir.",
|
||||
"account.locked_info": "Bu hesabın məxfilik statusu kilidlənib. Sahibi, onu kimin izləyə biləcəyini manual olaraq incələyir.",
|
||||
"account.media": "Media",
|
||||
"account.mention": "@{name} istifadəçisini teq et",
|
||||
"account.moved_to": "{name} onun yeni hesabının artıq bu olduğunu bildirdi:",
|
||||
|
|
@ -74,7 +74,7 @@
|
|||
"account.requested_follow": "{name} sizi izləmək sorğusu göndərib",
|
||||
"account.requests_to_follow_you": "Sizi izləmək istəyir",
|
||||
"account.share": "@{name} profilini paylaş",
|
||||
"account.show_reblogs": "@{name} istifadəçisindən olan gücləndirmələri göstər",
|
||||
"account.show_reblogs": "@{name} - təkrar paylaşımlarını göstər",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} paylaşım} other {{counter} paylaşım}}",
|
||||
"account.unblock": "@{name} blokunu aç",
|
||||
"account.unblock_domain": "{domain} domeninin blokunu aç",
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"annual_report.summary.followers.total": "Cəmi {count}",
|
||||
"annual_report.summary.here_it_is": "{year} icmalınız:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "ən çox sevilən postu",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "ən çox gücləndirilən paylaşımı",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "ən çox təkrar paylaşılan göndəriş",
|
||||
"annual_report.summary.highlighted_post.by_replies": "ən çox cavabı olan paylaşımı",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name} istifadəçisinin",
|
||||
"annual_report.summary.most_used_app.most_used_app": "ən çox istifadə etdiyi tətbiq",
|
||||
|
|
@ -129,7 +129,7 @@
|
|||
"annual_report.summary.thanks": "Mastodonun bir parçası olduğunuz üçün təşəkkür edirik!",
|
||||
"attachments_list.unprocessed": "(emal edilməyib)",
|
||||
"audio.hide": "Audionu gizlət",
|
||||
"block_modal.remote_users_caveat": "Biz {domain} serverindən qərarınıza hörmət etməsini xahiş edəcəyik. Bununla belə, bəzi serverlər blokları fərqli şəkildə idarə edə bildiyi üçün uyğunluğa zəmanət verilmir. İctimai paylaşımlar hələ də daxil olmayan istifadəçilərə görünə bilər.",
|
||||
"block_modal.remote_users_caveat": "{domain} serverindən qərarınıza hörmət etməsini xahiş edəcəyik. Ancaq, bəzi serverlər əngəlləmələri fərqli şəkildə idarə edə bilər deyə, qərarınıza uymağına zəmanət verilmir. Hər kəsə açıq göndərişlər, hələ də sistemə giriş etməmiş istifadəçilərə görünə bilər.",
|
||||
"block_modal.show_less": "Daha az göstər",
|
||||
"block_modal.show_more": "Daha çox göstər",
|
||||
"block_modal.they_cant_mention": "O səni teq edə bilməz və ya izləyə bilməz.",
|
||||
|
|
@ -138,8 +138,8 @@
|
|||
"block_modal.title": "İstifadəçi bloklansın?",
|
||||
"block_modal.you_wont_see_mentions": "Onu teq edən postları görməyəcəksən.",
|
||||
"boost_modal.combo": "Növbəti dəfə bunu atlamaq üçün {combo} klikləyə bilərsən",
|
||||
"boost_modal.reblog": "Paylaşım gücləndirilsin?",
|
||||
"boost_modal.undo_reblog": "Paylaşımın gücləndirilməsi ləğv edilsin?",
|
||||
"boost_modal.reblog": "Paylaşım təkrar paylaşılsın?",
|
||||
"boost_modal.undo_reblog": "Təkrar paylaşım ləğv edilsin?",
|
||||
"bundle_column_error.copy_stacktrace": "Xəta hesabatını kopyala",
|
||||
"bundle_column_error.error.body": "Tələb olunan səhifəni göstərmək mümkün olmadı. Bu, kodumuzdakı səhv və ya brauzer uyğunluğu problemi ilə bağlı ola bilər.",
|
||||
"bundle_column_error.error.title": "Ah, yox!",
|
||||
|
|
@ -174,7 +174,7 @@
|
|||
"column.lists": "Siyahılar",
|
||||
"column.mutes": "Səssizləşdirilmiş istifadəçilər",
|
||||
"column.notifications": "Bildirişlər",
|
||||
"column.pins": "Bərkidilmiş paylaşımlar",
|
||||
"column.pins": "Sancılmış göndərişlər",
|
||||
"column.public": "Federasiya zaman qrafiki",
|
||||
"column_back_button.label": "Geriyə",
|
||||
"column_header.hide_settings": "Ayarları gizlət",
|
||||
|
|
@ -240,7 +240,7 @@
|
|||
"confirmations.missing_alt_text.title": "Alternativ mətn əlavə edilsin?",
|
||||
"confirmations.mute.confirm": "Səssizləşdir",
|
||||
"confirmations.redraft.confirm": "Sil və qaralamaya köçür",
|
||||
"confirmations.redraft.message": "Bu paylaşımı silmək və qaralamaya köçürmək istədiyinizə əminsiniz? Bəyənmələr və gücləndirmələr itəcək və orijinal paylaşıma olan cavablar tənha qalacaq.",
|
||||
"confirmations.redraft.message": "Bu göndərişi silib yenidən qaralama kimi saxlamaq istədiyinizə əminsiniz? Sevimlilər və təkrar paylaşımlar silinəcək, orijinal göndərişə verilən cavablar isə əlaqəsiz qalacaq.",
|
||||
"confirmations.redraft.title": "Paylaşım silinsin & qaralamaya köçürülsün?",
|
||||
"confirmations.remove_from_followers.confirm": "İzləyicini çıxart",
|
||||
"confirmations.remove_from_followers.message": "{name} sizi izləməyəcək. Davam etmək istədiyinizə əminsiniz?",
|
||||
|
|
@ -292,6 +292,7 @@
|
|||
"domain_pill.your_handle": "Tanıdıcınız:",
|
||||
"domain_pill.your_server": "Bütün paylaşımlarınızın yaşadığı rəqəmsal ev. Buranı bəyənmirsiniz? İstədiyiniz vaxt serverdən köçün və izləyicilərinizi də aparın.",
|
||||
"domain_pill.your_username": "Serverdəki unikal identifikatoruz. Fərqli serverlərdə eyni istifadəçi adı ilə istifadəçilər tapmaq mümkündür.",
|
||||
"dropdown.empty": "Bir seçim et",
|
||||
"embed.instructions": "Aşağıdakı kodu kopyalayaraq bu postu veb-saytınıza yerləşdirin.",
|
||||
"embed.preview": "Belə görünəcək:",
|
||||
"emoji_button.activity": "Aktivlik",
|
||||
|
|
@ -324,7 +325,16 @@
|
|||
"empty_column.follow_requests": "İzləmə sorğularınız yoxdur. Qəbul etdikdə burada görəcəksiniz.",
|
||||
"empty_column.followed_tags": "Heç bir heşteq izləmirsiniz. İzlədikdə burada görünəcək.",
|
||||
"empty_column.hashtag": "Bu heşteqdə hələ ki, heç nə yoxdur.",
|
||||
"empty_column.home": "Əsas zaman xəttiniz boşdur! Doldurmaq üçün bir neçə istifadəçini izləyin.",
|
||||
"empty_column.list": "Hələ bu siyahıda heç nə yoxdur. Bu siyahıdakı üzvlər yeni göndəriş paylaşdığı zaman burada görünəcək.",
|
||||
"empty_column.mutes": "Hələ heç bir istifadəçini səssizə almamısınız.",
|
||||
"empty_column.notification_requests": "Hamısı hazırdır! Burada heç nə yoxdur. Yeni bildiriş aldığınız zaman, ayarlarınıza görə burada görünəcək.",
|
||||
"empty_column.notifications": "Hələ heç bir bildirişiniz yoxdur. Başqaları sizinlə qarşılıqlı əlaqə qurduğu zaman, onu burada görəcəksiniz.",
|
||||
"empty_column.public": "Burada hələ heç nə yoxdur! Buranı doldurmaq üçün hər kəsə açıq bir şey yazın və ya digər serverlərdəki istifadəçiləri izləyin.",
|
||||
"error.unexpected_crash.explanation": "Kodumuzdakı bir xətaya, ya da brauzer uyumluluq probleminə görə, bu səhifə düzgün nümayiş etdirilə bilmədi.",
|
||||
"error.unexpected_crash.explanation_addons": "Bu səhifə düzgün nümayiş etdirilə bilmədi. Bu xəta, yəqin ki, brauzer əlavəsi və ya avtomatik tərcümə alətlərindən qaynaqlanır.",
|
||||
"error.unexpected_crash.next_steps": "Səhifəni təzələməyi sınayın. Bu kömək etməzsə, Mastodon-u başqa bir brauzer və ya yerli tətbiq vasitəsilə istifadə edə bilərsiniz.",
|
||||
"error.unexpected_crash.next_steps_addons": "Onları sıradan çıxartmağı və səhifəni təzələməyi sınayın. Bu kömək etməzsə, Mastodon-u başqa bir brauzer və ya yerli tətbiq vasitəsilə istifadə edə bilərsiniz.",
|
||||
"errors.unexpected_crash.report_issue": "Problemi bildir",
|
||||
"explore.suggested_follows": "İnsanlar",
|
||||
"explore.title": "Trendlər",
|
||||
|
|
@ -345,9 +355,46 @@
|
|||
"filter_modal.added.settings_link": "ayarlar səhifəsi",
|
||||
"filter_modal.added.short_explanation": "Bu göndəriş, aşağıdakı filtr kateqoriyasına əlavə edilib: {title}.",
|
||||
"filter_modal.added.title": "Filtr əlavə edilib!",
|
||||
"filter_modal.select_filter.context_mismatch": "bu kontektsə tətbiq olunmur",
|
||||
"filter_modal.select_filter.expired": "müddəti bitib",
|
||||
"filter_modal.select_filter.prompt_new": "Yeni kateqoriya: {name}",
|
||||
"filter_modal.select_filter.search": "Axtar və ya yarat",
|
||||
"filter_modal.select_filter.subtitle": "Mövcud bir kateqoriyanı istifadə et, ya da yenisini yarat",
|
||||
"filter_modal.select_filter.title": "Bu göndərişi filtrlə",
|
||||
"filter_modal.title.status": "Bir göndərişi filtrlə",
|
||||
"filter_warning.matches_filter": "“<span>{title}</span>” filtri ilə uyuşur",
|
||||
"filtered_notifications_banner.pending_requests": "Tanıdığınız {count, plural, =0 {heç kimdən} one {bir şəxsdən} other {# şəxsdən}}",
|
||||
"filtered_notifications_banner.title": "Filtrlənmiş bildirişlər",
|
||||
"firehose.all": "Hamısı",
|
||||
"firehose.local": "Bu server",
|
||||
"firehose.remote": "Digər serverlər",
|
||||
"follow_request.authorize": "Səlahiyyət ver",
|
||||
"follow_request.reject": "Rədd et",
|
||||
"follow_requests.unlocked_explanation": "Hesabınız kilidli olmasa da, {domain} heyəti bu hesabların izləmə tələblərini manual olaraq incələmək istəyə biləcəyinizi düşündü.",
|
||||
"follow_suggestions.curated_suggestion": "Heyətin seçimi",
|
||||
"follow_suggestions.dismiss": "Təkrar göstərmə",
|
||||
"follow_suggestions.featured_longer": "{domain} komandası tərəfindən əllə seçildi",
|
||||
"follow_suggestions.friends_of_friends_longer": "İzlədiyiniz insanlar arasında məşhur",
|
||||
"follow_suggestions.hints.featured": "Bu profil {domain} komandası tərəfindən əllə seçilib.",
|
||||
"follow_suggestions.hints.friends_of_friends": "Bu profil izlədiyiniz insanlar arasında populyardır.",
|
||||
"follow_suggestions.hints.most_followed": "Bu profil {domain} serverində ən çox izlənilənlərdən biridir.",
|
||||
"follow_suggestions.hints.most_interactions": "Bu profil son zamanlar {domain} üzərində çox diqqət çəkir.",
|
||||
"follow_suggestions.hints.similar_to_recently_followed": "Bu profil, son vaxtlar izlədiyiniz profillərə bənzəyir.",
|
||||
"follow_suggestions.personalized_suggestion": "Fərdiləşdirilmiş təklif",
|
||||
"follow_suggestions.popular_suggestion": "Məşhur təklif",
|
||||
"follow_suggestions.popular_suggestion_longer": "{domain} üzərində məşhur",
|
||||
"follow_suggestions.similar_to_recently_followed_longer": "Son zaman izlədiyiniz profillərə oxşar",
|
||||
"follow_suggestions.view_all": "Hamısına bax",
|
||||
"follow_suggestions.who_to_follow": "İzləyə bilərsən",
|
||||
"followed_tags": "İzlənilən mövzu etiketləri",
|
||||
"footer.about": "Haqqında",
|
||||
"footer.directory": "Profil kataloqu",
|
||||
"footer.get_app": "Tətbiqi əldə et",
|
||||
"footer.keyboard_shortcuts": "Klaviatura qısayolları",
|
||||
"footer.privacy_policy": "Gizlilik siyasəti",
|
||||
"footer.source_code": "Mənbə koduna bax",
|
||||
"footer.status": "Status",
|
||||
"footer.terms_of_service": "Xidmət şərtləri",
|
||||
"generic.saved": "Saxlanıldı",
|
||||
"getting_started.heading": "Başlayaq",
|
||||
"hashtag.admin_moderation": "#{name} üçün moderasiya interfeysini aç",
|
||||
|
|
@ -365,19 +412,31 @@
|
|||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} iştirakçı} other {{counter} iştirakçı}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} göndəriş} other {{counter} göndəriş}}",
|
||||
"hashtag.counter_by_uses_today": "Bu gün {count, plural, one {{counter} göndəriş} other {{counter} göndəriş}}",
|
||||
"hashtag.feature": "Profildə önə çıxart",
|
||||
"hashtag.follow": "Mövzu etiketini izlə",
|
||||
"hashtag.mute": "#{hashtag} - səssizə al",
|
||||
"hashtag.unfeature": "Profildə önə çıxarılmasın",
|
||||
"hashtag.unfollow": "Mövzu etiketini izləmə",
|
||||
"hashtags.and_other": "…və daha {count, plural, one {}other {# ədəd}}",
|
||||
"hints.profiles.followers_may_be_missing": "Bu profilin izləyiciləri əskik ola bilər.",
|
||||
"hints.profiles.follows_may_be_missing": "Bu profilin izləyənləri əskik ola bilər.",
|
||||
"hints.profiles.posts_may_be_missing": "Bu profilin bəzi göndərişləri əskik ola bilər.",
|
||||
"hints.profiles.see_more_followers": "{domain} üzərində daha çox izləyici gör",
|
||||
"hints.profiles.see_more_follows": "{domain} üzərində izlənilən gör",
|
||||
"hints.profiles.see_more_posts": "{domain} üzərində daha çox göndəriş gör",
|
||||
"home.column_settings.show_quotes": "Sitatları göstər",
|
||||
"home.column_settings.show_reblogs": "Təkrar paylaşmaları göstər",
|
||||
"home.column_settings.show_replies": "Cavabları göstər",
|
||||
"home.hide_announcements": "Elanları gizlət",
|
||||
"home.pending_critical_update.body": "Lütfən Mastodon serverinizi mümkün olan ən qısa müddətdə güncəlləyin!",
|
||||
"home.pending_critical_update.link": "Güncəlləmələrə bax",
|
||||
"home.pending_critical_update.title": "Kritik güvənlik güncəlləməsi mövcuddur!",
|
||||
"home.show_announcements": "Elanları göstər",
|
||||
"ignore_notifications_modal.disclaimer": "Mastodon, bildirişlərini yox saydığınız istifadəçiləri məlumatlandırmır. Bildirişləri yox saymaq, mesajların göndərilməsini dayandırmayacaq.",
|
||||
"ignore_notifications_modal.filter_instead": "Əvəzinə filtrlə",
|
||||
"ignore_notifications_modal.filter_to_act_users": "Hələ də istifadəçiləri qəbul edə, rədd edə və ya bildirə bilərsiniz",
|
||||
"ignore_notifications_modal.filter_to_avoid_confusion": "Filtrləmə, mümkün çaşqınlığın qarşısını almağa kömək edir.",
|
||||
"ignore_notifications_modal.filter_to_review_separately": "Filtrlənmiş bildirişləri ayrı-ayrı incələyə bilərsiniz",
|
||||
"ignore_notifications_modal.ignore": "Bildirişləri yox say",
|
||||
"ignore_notifications_modal.limited_accounts_title": "Moderasiya edilmiş hesabların bildirişləri yox sayılsın?",
|
||||
"ignore_notifications_modal.new_accounts_title": "Yeni hesabların bildirişləri yox sayılsın?",
|
||||
|
|
@ -390,19 +449,158 @@
|
|||
"interaction_modal.action.reblog": "Davam etmək üçün hesabınızdan təkrar göndərməlisiniz.",
|
||||
"interaction_modal.action.reply": "Davam etmək üçün hesabınızdan cavab verməlisiniz.",
|
||||
"interaction_modal.action.vote": "Davam etmək üçün hesabınızdan səs verməlisiniz.",
|
||||
"interaction_modal.go": "Get",
|
||||
"interaction_modal.no_account_yet": "Hələ heç bir hesabınız yoxdur?",
|
||||
"interaction_modal.on_another_server": "Fərqli bir serverdə",
|
||||
"interaction_modal.on_this_server": "Bu serverdə",
|
||||
"interaction_modal.title.favourite": "{name} - göndərişini sevimlilərə əlavə et",
|
||||
"interaction_modal.title.follow": "{name} - izlə",
|
||||
"interaction_modal.title.reblog": "{name} - göndərişini təkrar paylaş",
|
||||
"interaction_modal.title.reply": "{name} - göndərişinə cavab ver",
|
||||
"interaction_modal.title.vote": "{name} - anketində səs ver",
|
||||
"interaction_modal.username_prompt": "Məs: {example}",
|
||||
"intervals.full.days": "{number, plural, one {# gün} other {# gün}}",
|
||||
"intervals.full.hours": "{number, plural, one {# saat} other {# saat}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# dəqiqə} other {# dəqiqə}}",
|
||||
"keyboard_shortcuts.back": "Geri get",
|
||||
"keyboard_shortcuts.blocked": "Əngəllənən istifadəçilərin siyahısını aç",
|
||||
"keyboard_shortcuts.boost": "Göndərişi təkrar paylaş",
|
||||
"keyboard_shortcuts.column": "Sütuna fokuslan",
|
||||
"keyboard_shortcuts.compose": "Mətn yazma sahəsinə fokuslan",
|
||||
"keyboard_shortcuts.description": "Açıqlama",
|
||||
"keyboard_shortcuts.direct": "şəxsi adçəkmələr sütununu açmaq üçün",
|
||||
"keyboard_shortcuts.down": "Siyahıda aşağı daşı",
|
||||
"keyboard_shortcuts.enter": "Göndərişi aç",
|
||||
"keyboard_shortcuts.favourite": "Göndərişi sevimlilərə əlavə et",
|
||||
"keyboard_shortcuts.favourites": "Sevimli siyahını aç",
|
||||
"keyboard_shortcuts.heading": "Klaviatura qısayolları",
|
||||
"keyboard_shortcuts.home": "Əsas ekran zaman xəttini aç",
|
||||
"keyboard_shortcuts.hotkey": "Qısayol düyməsi",
|
||||
"keyboard_shortcuts.legend": "Bu əfsanəni nümayiş etdir",
|
||||
"keyboard_shortcuts.local": "Lokal zaman xəttini aç",
|
||||
"keyboard_shortcuts.mention": "Müəllifin adını çək",
|
||||
"keyboard_shortcuts.muted": "Səssizdəki istifadəçilərin siyahısını aç",
|
||||
"keyboard_shortcuts.my_profile": "Profilinizi açın",
|
||||
"keyboard_shortcuts.notifications": "Bildirişlər sütununu aç",
|
||||
"keyboard_shortcuts.open_media": "Medianı aç",
|
||||
"keyboard_shortcuts.pinned": "Sancılmış göndərişlərin siyahısını aç",
|
||||
"keyboard_shortcuts.profile": "Müəllifin profilini aç",
|
||||
"keyboard_shortcuts.reply": "Göndərişə cavab ver",
|
||||
"keyboard_shortcuts.requests": "İzləmə istəyi siyahısını aç",
|
||||
"keyboard_shortcuts.search": "Axtarış çubuğuna fokuslan",
|
||||
"keyboard_shortcuts.spoilers": "CW xanasını göstər/gizlət",
|
||||
"keyboard_shortcuts.start": "\"Başlayaq\" sütununu aç",
|
||||
"keyboard_shortcuts.toggle_hidden": "CW arxasındakı mətni göstər/gizlət",
|
||||
"keyboard_shortcuts.toggle_sensitivity": "Medianı göstər/gizlət",
|
||||
"keyboard_shortcuts.toot": "Yeni bir göndəriş başlat",
|
||||
"keyboard_shortcuts.translate": "bir göndərişi tərcümə etmək üçün",
|
||||
"keyboard_shortcuts.unfocus": "Fokusu göndəriş yazma xanasından/axtarışdan götür",
|
||||
"keyboard_shortcuts.up": "Siyahıda yuxarı daşı",
|
||||
"learn_more_link.got_it": "Anladım",
|
||||
"learn_more_link.learn_more": "Daha ətraflı",
|
||||
"lightbox.close": "Bağla",
|
||||
"lightbox.next": "Növbəti",
|
||||
"lightbox.previous": "Əvvəlki",
|
||||
"lightbox.zoom_in": "Həqiqi ölçüyə qayıt",
|
||||
"lightbox.zoom_out": "Sığacaq şəkildə yaxınlaşdır",
|
||||
"limited_account_hint.action": "Yenə də profili göstər",
|
||||
"limited_account_hint.title": "Bu profil, {domain} moderatorları tərəfindən gizlədildi.",
|
||||
"link_preview.author": "Müəllif: {name}",
|
||||
"link_preview.more_from_author": "{name} - daha çox",
|
||||
"link_preview.shares": "{count, plural, one {{counter} göndəriş} other {{counter} göndəriş}}",
|
||||
"lists.add_member": "Əlavə et",
|
||||
"lists.add_to_list": "Siyahıya əlavə et",
|
||||
"lists.add_to_lists": "{name} - siyahılara əlavə et",
|
||||
"lists.create": "Yarat",
|
||||
"lists.create_a_list_to_organize": "Əsas ekran lentinizi təşkil etmək üçün yeni bir siyahı yaradın",
|
||||
"lists.create_list": "Siyahı yarat",
|
||||
"lists.delete": "Siyahını sil",
|
||||
"lists.done": "Hazırdır",
|
||||
"lists.edit": "Siyahıya düzəliş et",
|
||||
"lists.exclusive": "Əsas ekranda üzvləri gizlət",
|
||||
"lists.exclusive_hint": "Kimsə bu siyahıdadırsa, onun göndərişləri bir dəfədən çox görünməməsi üçün Əsas ekran lentində gizlədilir.",
|
||||
"lists.find_users_to_add": "Əlavə ediləcək istifadəçiləri tap",
|
||||
"lists.list_members_count": "{count, plural, one {# üzv} other {# üzv}}",
|
||||
"lists.list_name": "Siyahı adı",
|
||||
"lists.new_list_name": "Yeni siyahı adı",
|
||||
"lists.no_lists_yet": "Hələ siyahı yoxdur.",
|
||||
"lists.no_members_yet": "Hələ üzv yoxdur.",
|
||||
"lists.no_results_found": "Heç bir nəticə tapılmadı.",
|
||||
"lists.remove_member": "Çıxart",
|
||||
"lists.replies_policy.followed": "İstənilən izlənilən istifadəçi",
|
||||
"lists.replies_policy.list": "Siyahıdakı üzvlər",
|
||||
"lists.replies_policy.none": "Heç kim",
|
||||
"lists.save": "Saxla",
|
||||
"lists.search": "Axtar",
|
||||
"lists.show_replies_to": "Siyahı üzvlərinin cavablarını daxil et",
|
||||
"load_pending": "{count, plural, one {# yeni element} other {# yeni element}}",
|
||||
"loading_indicator.label": "Yüklənir…",
|
||||
"media_gallery.hide": "Gizlət",
|
||||
"moved_to_account_banner.text": "{disabledAccount} hesabınız, {movedToAccount} hesabına keçdiyiniz üçün hazırda sıradan çıxarılıb.",
|
||||
"mute_modal.hide_from_notifications": "Bildirişlərdə gizlət",
|
||||
"mute_modal.hide_options": "Seçimləri gizlət",
|
||||
"mute_modal.indefinite": "Mən səsini açana qədər",
|
||||
"mute_modal.show_options": "Seçimləri göstər",
|
||||
"mute_modal.they_can_mention_and_follow": "Sizin adınızı çəkə və sizi izləyə bilər, ancaq siz onları görə bilməzsiniz.",
|
||||
"mute_modal.they_wont_know": "Onlar, səssizə alındıqlarını bilməyəcəklər.",
|
||||
"mute_modal.title": "İstifadəçi səssizə alınsın?",
|
||||
"mute_modal.you_wont_see_mentions": "Onların adı çəkilən göndərişləri görməyəcəksiniz.",
|
||||
"mute_modal.you_wont_see_posts": "Onlar hələ də göndərişlərinizi görə biləcək, ancaq onların göndərişlərini görməyəcəksiniz.",
|
||||
"navigation_bar.about": "Haqqında",
|
||||
"navigation_bar.account_settings": "Parol və təhlükəsizlik",
|
||||
"navigation_bar.administration": "Administrasiya",
|
||||
"navigation_bar.advanced_interface": "Qabaqcıl veb interfeysində aç",
|
||||
"navigation_bar.automated_deletion": "Göndərişin avtomatik silinməsi",
|
||||
"navigation_bar.blocks": "Əngəllənmiş istifadəçilər",
|
||||
"navigation_bar.bookmarks": "Əlfəcinlər",
|
||||
"navigation_bar.direct": "Şəxsi adçəkmələr",
|
||||
"navigation_bar.domain_blocks": "Əngəllənmiş domenlər",
|
||||
"navigation_bar.favourites": "Sevimlilər",
|
||||
"navigation_bar.filters": "Səssizə alınmış sözlər",
|
||||
"navigation_bar.follow_requests": "İzləmə istəkləri",
|
||||
"navigation_bar.followed_tags": "İzlənilən mövzu etiketləri",
|
||||
"navigation_bar.follows_and_followers": "İzlənilənlər və izləyicilər",
|
||||
"navigation_bar.import_export": "Daxilə və xaricə köçürmə",
|
||||
"navigation_bar.lists": "Siyahılar",
|
||||
"navigation_bar.live_feed_local": "Canlı lent (lokal)",
|
||||
"navigation_bar.live_feed_public": "Canlı lent (hər kəsə açıq)",
|
||||
"navigation_bar.logout": "Çıxış",
|
||||
"navigation_bar.moderation": "Moderasiya",
|
||||
"navigation_bar.more": "Daha çox",
|
||||
"navigation_bar.mutes": "Səssizə alınmış istifadəçilər",
|
||||
"navigation_bar.opened_in_classic_interface": "Göndərişlər, hesablar və digər müəyyən səhifələr klassik veb interfeysində ilkin olaraq açılır.",
|
||||
"navigation_bar.preferences": "Tərcihlər",
|
||||
"navigation_bar.privacy_and_reach": "Gizlilik və əlçatanlıq",
|
||||
"navigation_bar.search": "Axtar",
|
||||
"navigation_bar.search_trends": "Axtar / Trendlər",
|
||||
"navigation_panel.collapse_followed_tags": "İzlənilən mövzu etiketləri menyusunu yığcamlaşdır",
|
||||
"navigation_panel.collapse_lists": "Siyahı menyusunu yığcamlaşdır",
|
||||
"navigation_panel.expand_followed_tags": "İzlənilən mövzu etiketləri menyusunu genişləndir",
|
||||
"navigation_panel.expand_lists": "Siyahı menyusunu genişləndir",
|
||||
"not_signed_in_indicator.not_signed_in": "Bu resursa erişmək üçün giriş etməlisiniz.",
|
||||
"notification.admin.report": "{name} şikayət etdi: {target}",
|
||||
"notification.admin.report_account": "{name}, {category} üçün şikayət etdi: {target} - {count, plural, one {bir göndəriş} other {# göndəriş}}",
|
||||
"notification.admin.report_account_other": "{name} şikayət etdi: {target} - {count, plural, one {bir göndəriş} other {# göndəriş}}",
|
||||
"notification.admin.report_statuses": "{name}, {category} üçün şikayət etdi: {target}",
|
||||
"notification.admin.report_statuses_other": "{name} şikayət etdi: {target}",
|
||||
"notification.admin.sign_up": "{name} qeydiyyatdan keçib",
|
||||
"notification.admin.sign_up.name_and_others": "{name} və digər {count, plural, one {# nəfər} other {# nəfər}} qeydiyyatdan keçib",
|
||||
"notification.annual_report.view": "#Wrapstodon-a bax",
|
||||
"notification.favourite": "{name} göndərişinizi sevimlilərinə əlavə etdi",
|
||||
"notification.favourite.name_and_others_with_link": "{name} və digər <a>{count, plural, one {# nəfər} other {# nəfər}}</a> göndərişinizi sevimlilərinə əlavə etdi",
|
||||
"notification.favourite_pm": "{name}, şəxsi adçəkmənizi sevimlilərinə əlavə etdi",
|
||||
"notification.favourite_pm.name_and_others_with_link": "{name} və digər <a>{count, plural, one {# nəfər} other {# nəfər}}</a> şəxsi adçəkmənizi sevimlilərinə əlavə etdi",
|
||||
"notification.follow": "{name} sizi izləyir",
|
||||
"notification.follow.name_and_others": "{name} və digər <a>{count, plural, one {# nəfər} other {# nəfər}}</a> sizi izləyir",
|
||||
"notification.follow_request": "{name} sizi izləmək üçün istək göndərdi",
|
||||
"notification.follow_request.name_and_others": "{name} və digər {count, plural, one {# nəfər} other {# nəfər}} sizi izləmək üçün istək göndərdi",
|
||||
"notification.label.mention": "Adçəkmə",
|
||||
"notification.label.private_mention": "Şəxsi adçəkmə",
|
||||
"notification.label.private_reply": "Şəxsi cavab",
|
||||
"notification.label.quote": "{name} göndərişinizi sitat gətirdi",
|
||||
"notification.label.reply": "Cavab",
|
||||
"notification.mention": "Adçəkmə",
|
||||
"notification.mentioned_you": "{name} adınızı çəkdi",
|
||||
"notification.moderation-warning.learn_more": "Daha ətraflı",
|
||||
"notification.moderation_warning": "Bir moderasiya xəbərdarlığı aldınız",
|
||||
"notification.moderation_warning.action_delete_statuses": "Bəzi göndərişləriniz silindi.",
|
||||
|
|
@ -412,16 +610,189 @@
|
|||
"notification.moderation_warning.action_sensitive": "Göndərişləriniz artıq həssas olaraq işarələnəcək.",
|
||||
"notification.moderation_warning.action_silence": "Hesabınız məhdudlaşdırılıb.",
|
||||
"notification.moderation_warning.action_suspend": "Hesabınızın fəaliyyəti dayandırılıb.",
|
||||
"notification.own_poll": "Anketiniz bitdi",
|
||||
"notification.poll": "Səs verdiyiniz anket bitdi",
|
||||
"notification.reblog": "{name} göndərişinizi təkrar paylaşdı",
|
||||
"notification.reblog.name_and_others_with_link": "{name} və <a>{count, plural, one {digər # nəfər} other {digər # nəfər}}</a> göndərişinizi təkrar paylaşdı",
|
||||
"notification.relationships_severance_event": "{name} ilə bağlantı qopdu",
|
||||
"notification.relationships_severance_event.account_suspension": "{from} admini {target} fəaliyyətini dayandırıb, bu da o deməkdir ki, artıq onlardan güncəlləmələr ala və ya onlarla qarşılıqlı əlaqə qura bilməyəcəyiniz.",
|
||||
"notification.relationships_severance_event.domain_block": "{target}, {from} admini tərəfindən əngəllənib, buna {followersCount} izləyiciniz və izlədiyiniz {followingCount, plural, one {# hesab} other {# hesab}} daxildir.",
|
||||
"notification.relationships_severance_event.learn_more": "Daha ətraflı",
|
||||
"notification.relationships_severance_event.user_domain_block": "{target} əngəlləmisiniz, bununla {followersCount} izləyiciniz və izlədiyiniz {followingCount, plural, one {# hesab} other {# hesab}} silinib.",
|
||||
"notification.status": "{name} indicə paylaşdı",
|
||||
"notification.update": "{name} bir göndərişə düzəliş etdi",
|
||||
"notification_requests.accept": "Qəbul et",
|
||||
"notification_requests.accept_multiple": "{count, plural, one {# istəyi qəbul et…} other {# istəyi qəbul et…}}",
|
||||
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {İstəyi qəbul et} other {İstəkləri qəbul et}}",
|
||||
"notification_requests.confirm_accept_multiple.message": "{count, plural, one {Bir bildiriş istəyini} other {# bildiriş istəklərini}} qəbul etmək üzrəsiniz. Davam etmək istədiyinizə əminsiniz?",
|
||||
"notification_requests.confirm_accept_multiple.title": "Bildiriş istəkləri qəbul edilsin?",
|
||||
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {İstəyi rədd et} other {İstəkləri rədd et}}",
|
||||
"notification_requests.confirm_dismiss_multiple.message": "{count, plural, one {bir bildiriş sorğusunu} other {# bildiriş sorğusunu}} bağlamaq üzrəsiniz. {count, plural, one {Ona} other {Onlara}} yenidən asanlıqla erişə bilməyəcəksiniz. Davam etmək istədiyinizə əminsiniz?",
|
||||
"notification_requests.confirm_dismiss_multiple.title": "Bildiriş istəklərinə rədd cavabı verilsin?",
|
||||
"notification_requests.dismiss": "Rədd et",
|
||||
"notification_requests.dismiss_multiple": "{count, plural, one {# istəyi rədd et…} other {# istəyi rədd et…}}",
|
||||
"notification_requests.edit_selection": "Düzəliş et",
|
||||
"notification_requests.exit_selection": "Hazırdır",
|
||||
"notification_requests.explainer_for_limited_account": "Hesab, bir moderator tərəfindən məhdudlaşdırıldığı üçün bu hesabın bildirişləri filtrləndi.",
|
||||
"notification_requests.explainer_for_limited_remote_account": "Hesab və ya onun serveri, bir moderator tərəfindən məhdudlaşdırıldığı üçün bu hesabın bildirişləri filtrləndi.",
|
||||
"notification_requests.maximize": "Böyüt",
|
||||
"notification_requests.minimize_banner": "Filtrlənmiş bildirişlər bannerini kiçilt",
|
||||
"notification_requests.notifications_from": "{name} - bildirişləri",
|
||||
"notification_requests.title": "Filtrlənmiş bildirişlər",
|
||||
"notification_requests.view": "Bildirişlərə bax",
|
||||
"notifications.clear": "Bildirişləri təmizlə",
|
||||
"notifications.clear_confirmation": "Bütün bildirişlərinizi həmişəlik təmizləmək istədiyinizə əminsiniz?",
|
||||
"notifications.clear_title": "Bildirişlər təmizlənsin?",
|
||||
"notifications.column_settings.admin.report": "Yeni hesabatlar:",
|
||||
"notifications.column_settings.admin.sign_up": "Yeni qeydiyyatlar:",
|
||||
"notifications.column_settings.alert": "Masaüstü bildirişlər",
|
||||
"notifications.column_settings.favourite": "Sevimlilər:",
|
||||
"notifications.column_settings.filter_bar.advanced": "Bütün kateqoriyaları nümayiş etdir",
|
||||
"notifications.column_settings.filter_bar.category": "Cəld filtr çubuğu",
|
||||
"notifications.column_settings.follow": "Yeni izləyicilər:",
|
||||
"notifications.column_settings.follow_request": "Yeni izləmə istəkləri:",
|
||||
"notifications.column_settings.group": "Qrup",
|
||||
"notifications.column_settings.mention": "Adçəkmələr:",
|
||||
"notifications.column_settings.poll": "Anket nəticələri:",
|
||||
"notifications.column_settings.push": "Ani bildirişlər",
|
||||
"notifications.column_settings.quote": "Sitatlar:",
|
||||
"notifications.column_settings.reblog": "Təkrar paylaşmalar:",
|
||||
"notifications.column_settings.show": "Sütunda göstər",
|
||||
"notifications.column_settings.sound": "Səs oxut",
|
||||
"notifications.column_settings.status": "Yeni göndərişlər:",
|
||||
"notifications.column_settings.unread_notifications.category": "Oxunmamış bildirişlər",
|
||||
"notifications.column_settings.unread_notifications.highlight": "Oxunmamış bildirişləri vurğula",
|
||||
"notifications.column_settings.update": "Düzəlişlər:",
|
||||
"notifications.filter.all": "Hamısı",
|
||||
"notifications.filter.boosts": "Təkrar paylaşmalar",
|
||||
"notifications.filter.favourites": "Sevimlilər",
|
||||
"notifications.filter.follows": "İzlənilənlər",
|
||||
"notifications.filter.mentions": "Adçəkmələr",
|
||||
"notifications.filter.polls": "Anket nəticələri",
|
||||
"notifications.filter.statuses": "İzlədiyiniz şəxslərdən güncəlləmələr",
|
||||
"notifications.grant_permission": "İcazəni ver.",
|
||||
"notifications.group": "{count} bildiriş",
|
||||
"notifications.mark_as_read": "Hər bir bildiriş oxunmuş olaraq işarələ",
|
||||
"notifications.permission_denied": "Brauzer icazələri istəyinə daha əvvəl rədd cavabı verildiyi üçün masaüstü bildirişləri əlçatmazdır",
|
||||
"notifications.permission_denied_alert": "Brauzer icazəsinə daha əvvəl rədd cavabı verildiyi üçün masaüstü bildirişləri fəallaşdırıla bilmir",
|
||||
"notifications.permission_required": "Tələb olunan icazə verilmədiyi üçün masaüstü bildirişləri əlçatmazdır.",
|
||||
"notifications.policy.accept": "Qəbul et",
|
||||
"notifications.policy.accept_hint": "Bildirişlərdə göstər",
|
||||
"notifications.policy.drop": "Yox say",
|
||||
"notifications.policy.filter": "Filtr",
|
||||
"notifications.policy.filter_hint": "Filtrlənmiş bildirişlər gələn qutusuna göndər",
|
||||
"notifications.policy.filter_limited_accounts_hint": "Server moderatorları tərəfindən məhdudlaşdırılıb",
|
||||
"notifications.policy.filter_limited_accounts_title": "Moderasiya edilmiş hesablar",
|
||||
"notifications.policy.filter_new_accounts.hint": "Son {days, plural, one {bir gündə} other {# gündə}} yaradıldı",
|
||||
"notifications.policy.filter_new_accounts_title": "Yeni hesablar",
|
||||
"notifications.policy.filter_not_followers_hint": "Sizi {days, plural, one {bir gündən} other {# gündən}} az müddətdir izləyən insanlar daxildir",
|
||||
"notifications.policy.filter_not_followers_title": "Sizi izləməyən insanlar",
|
||||
"notifications.policy.filter_not_following_hint": "Onları manual qəbul edənə qədər",
|
||||
"notifications.policy.filter_not_following_title": "İzləmədiyiniz insanlar",
|
||||
"notifications.policy.title": "Bildirişləri idarə et…",
|
||||
"notifications_permission_banner.enable": "Masaüstü bildirişləri fəallaşdır",
|
||||
"notifications_permission_banner.title": "Heç nəyi buraxmayın",
|
||||
"onboarding.follows.back": "Geri",
|
||||
"onboarding.follows.done": "Hazırdır",
|
||||
"onboarding.follows.search": "Axtar",
|
||||
"onboarding.follows.title": "Başlamaq üçün insanları izləyin",
|
||||
"onboarding.profile.discoverable": "Profilimi kəşf edilə bilən et",
|
||||
"onboarding.profile.discoverable_hint": "Mastodon-da kəşf edilə bilməni aktivləşdirsəniz, göndərişləriniz axtarış nəticələrində və trendlərdə görünə bilər və profiliniz sizinlə oxşar maraqlara sahib şəxslərə təklif edilə bilər.",
|
||||
"onboarding.profile.display_name": "Ekran adı",
|
||||
"onboarding.profile.display_name_hint": "Tam adınız və ya ləqəbiniz…",
|
||||
"onboarding.profile.note": "Bioqrafiya",
|
||||
"onboarding.profile.note_hint": "Digər insanların @adını_çəkə və ya #mövzu_etiketləri istifadə edə bilərsiniz…",
|
||||
"onboarding.profile.save_and_continue": "Saxla və davam et",
|
||||
"onboarding.profile.title": "Profili ayarla",
|
||||
"onboarding.profile.upload_avatar": "Profil şəkli yüklə",
|
||||
"onboarding.profile.upload_header": "Profil başlığı yüklə",
|
||||
"password_confirmation.exceeds_maxlength": "Parol təsdiqi, maksimum parol uzunluğunu aşır",
|
||||
"password_confirmation.mismatching": "Parol təsdiqi uyuşmur",
|
||||
"picture_in_picture.restore": "Geri qoy",
|
||||
"poll.closed": "Bağlandı",
|
||||
"poll.refresh": "Təzələ",
|
||||
"poll.reveal": "Nəticələrə bax",
|
||||
"poll.total_people": "{count, plural, one {# nəfər} other {# nəfər}}",
|
||||
"poll.total_votes": "{count, plural, one {# səs} other {# səs}}",
|
||||
"poll.vote": "Səs ver",
|
||||
"poll.voted": "Bu cavaba səs verdiniz",
|
||||
"poll.votes": "{votes, plural, one {# səs} other {# səs}}",
|
||||
"poll_button.add_poll": "Bir anket əlavə et",
|
||||
"poll_button.remove_poll": "Anketi sil",
|
||||
"privacy.change": "Göndəriş gizliliyini dəyişdir",
|
||||
"privacy.direct.long": "Göndərişdə adı çəkilən hər kəs",
|
||||
"privacy.direct.short": "Şəxsi adçəkmə",
|
||||
"privacy.private.long": "Yalnız izləyiciləriniz",
|
||||
"privacy.private.short": "İzləyicilər",
|
||||
"privacy.public.long": "Mastodon-da olan və olmayan hər kəs",
|
||||
"privacy.public.short": "Hər kəsə açıq",
|
||||
"privacy.unlisted.short": "Səssiz hər kəsə açıq",
|
||||
"privacy_policy.last_updated": "Son güncəlləmə {date}",
|
||||
"privacy_policy.title": "Gizlilik Siyasəti",
|
||||
"recommended": "Tövsiyə edilən",
|
||||
"refresh": "Təzələ",
|
||||
"regeneration_indicator.please_stand_by": "Lütfən gözləyin.",
|
||||
"regeneration_indicator.preparing_your_home_feed": "Əsas ekran lentiniz hazırlanır…",
|
||||
"relative_time.days": "{number} gü",
|
||||
"relative_time.full.days": "{number, plural, one {# gün} other {# gün}} əvvəl",
|
||||
"relative_time.full.hours": "{number, plural, one {# saat} other {# saat}} əvvəl",
|
||||
"relative_time.full.just_now": "indicə",
|
||||
"relative_time.full.minutes": "{number, plural, one {# dəqiqə} other {# dəqiqə}} əvvəl",
|
||||
"relative_time.full.seconds": "{number, plural, one {# saniyə} other {# saniyə}} əvvəl",
|
||||
"relative_time.hours": "{number} sa",
|
||||
"relative_time.just_now": "indi",
|
||||
"relative_time.minutes": "{number} dəq",
|
||||
"relative_time.seconds": "{number} san",
|
||||
"relative_time.today": "bu gün",
|
||||
"reply_indicator.attachments": "{count, plural, one {# qoşma} other {# qoşma}}",
|
||||
"reply_indicator.cancel": "İmtina",
|
||||
"reply_indicator.poll": "Anket",
|
||||
"report.block": "Əngəllə",
|
||||
"report.block_explanation": "Onun göndərişlərini görməyəcəksiniz. O, göndərişlərinizi görə və ya sizi izləyə bilməz. Əngəllədiyinizi anlaya biləcək.",
|
||||
"report.categories.legal": "Hüquqi",
|
||||
"report.categories.other": "Digər",
|
||||
"report.categories.spam": "Spam",
|
||||
"report.categories.violation": "Məzmun, bir və ya daha çox server qaydasını pozur",
|
||||
"report.category.subtitle": "Ən çox uyuşanı seçin",
|
||||
"report.category.title": "Bu {type} ilə bağlı nələrin baş verdiyini bizə deyin",
|
||||
"report.category.title_account": "profil",
|
||||
"report.category.title_status": "göndəriş",
|
||||
"report.close": "Hazırdır",
|
||||
"report.comment.title": "Bilməyimizi istədiyiniz başqa nəsə var?",
|
||||
"report.forward": "Bura yönləndir: {target}",
|
||||
"report.forward_hint": "Hesab, başqa bir serverdəndir. Hesabatın anonim bir kopyası ora da göndərilsin?",
|
||||
"report.mute": "Səssizə al",
|
||||
"report.mute_explanation": "Onun göndərişlərini görməyəcəksiniz. O, sizi izləməyə və göndərişlərinizi görməyə davam edə bilər, ancaq səssizə alındığını bilməyəcək.",
|
||||
"report.next": "Növbəti",
|
||||
"report.placeholder": "Əlavə rəylər",
|
||||
"report.reasons.dislike": "Bunu bəyənmədim",
|
||||
"report.reasons.dislike_description": "Bu, görmək istədiyiniz bir şey deyil",
|
||||
"report.reasons.legal": "Qanunsuzdur",
|
||||
"report.reasons.legal_description": "Sizin və ya serverinizin olduğu ölkənin qanunlarını pozduğuna inanırsınız",
|
||||
"report.reasons.other": "Başqa bir şeydir",
|
||||
"report.reasons.other_description": "Problem, digər kateqoriyalara uyğun gəlmir",
|
||||
"report.reasons.spam": "Spamdır",
|
||||
"report.reasons.spam_description": "Zərərli keçidlər, saxta qarşılıqlı əlaqə və ya təkrarlanan cavablar",
|
||||
"report.reasons.violation": "Server qaydalarını pozur",
|
||||
"report.reasons.violation_description": "Müəyyən qaydaları pozduğundan xəbərdarsınız",
|
||||
"report.rules.subtitle": "Uyğun olanların hamısını seçin",
|
||||
"report.rules.title": "Hansı qaydalar pozulub?",
|
||||
"report.statuses.subtitle": "Uyğun olanların hamısını seçin",
|
||||
"report.statuses.title": "Bu şikayəti dəstəkləyən hər hansısa bir göndəriş var?",
|
||||
"report.submit": "Təqdim et",
|
||||
"report.target": "{target} şikayət edilir",
|
||||
"report.thanks.take_action": "Mastodon-da nə görə biləcəyinizi idarə etmək üçün seçimləriniz bunlardır:",
|
||||
"report.thanks.take_action_actionable": "Biz bunu incələdiyimiz müddətdə, siz @{name} ilə bağlı bunları edə bilərsiniz:",
|
||||
"report.thanks.title": "Bunu görmək istəmirsiniz?",
|
||||
"report.thanks.title_actionable": "Şikayət etdiyiniz üçün təşəkkürlər, məsələyə baxacağıq.",
|
||||
"report.unfollow": "@{name} - izləmədən çıxart",
|
||||
"report.unfollow_explanation": "Bu hesabı izləyirsiniz. Əsas ekran lentinizdə onun göndərişlərini artıq görmək istəmirsinizsə, onu izləmədən çıxarın.",
|
||||
"report_notification.attached_statuses": "{count, plural, one {{count} göndəriş} other {{count} göndəriş}} əlavə edildi",
|
||||
"report_notification.categories.legal": "Hüquqi",
|
||||
"report_notification.categories.legal_sentence": "qanunsuz məzmun",
|
||||
"report_notification.categories.other": "Digər",
|
||||
"report_notification.categories.other_sentence": "digər",
|
||||
"report_notification.categories.spam": "Spam",
|
||||
"report_notification.categories.spam_sentence": "spam",
|
||||
"report_notification.categories.violation": "Qayda pozuntusu",
|
||||
"report_notification.categories.violation_sentence": "qayda pozuntusu",
|
||||
|
|
@ -453,6 +824,7 @@
|
|||
"search_results.title": "\"{q}\" axtar",
|
||||
"server_banner.about_active_users": "Son 30 gündə bu serveri istifadə edənlər (aylıq aktiv istifadəçilər)",
|
||||
"server_banner.active_users": "aktiv istifadəçilər",
|
||||
"server_banner.administered_by": "Administrasiya:",
|
||||
"server_banner.is_one_of_many": "{domain}, fediverse-də iştirak etmək üçün istifadə edə biləcəyiniz bir neçə müstəqil Mastodon serverlərindən biridir.",
|
||||
"server_banner.server_stats": "Server statistikaları:",
|
||||
"sign_in_banner.create_account": "Hesab yarat",
|
||||
|
|
@ -465,9 +837,14 @@
|
|||
"status.admin_status": "Moderasiya interfeysində bu göndərişi aç",
|
||||
"status.block": "Əngəllə: @{name}",
|
||||
"status.bookmark": "Əlfəcin",
|
||||
"status.cancel_reblog_private": "Təkrar paylaşımı geri al",
|
||||
"status.cannot_reblog": "Bu göndəriş təkrar paylaşıla bilməz",
|
||||
"status.context.load_new_replies": "Yeni cavablar mövcuddur",
|
||||
"status.context.loading": "Daha çox cavab yoxlanılır",
|
||||
"status.continued_thread": "Davam edən mövzu",
|
||||
"status.copy": "Göndəriş keçidini kopyala",
|
||||
"status.delete": "Sil",
|
||||
"status.detailed_status": "Detallı danışıq görünüşü",
|
||||
"status.direct": "Şəxsi olaraq adını çək: @{name}",
|
||||
"status.direct_indicator": "Şəxsi olaraq adını çək",
|
||||
"status.edit": "Düzəliş et",
|
||||
|
|
@ -487,24 +864,38 @@
|
|||
"status.mute": "@{name} - səssizə al",
|
||||
"status.mute_conversation": "Danışığın səsini kəs",
|
||||
"status.open": "Bu göndərişi genişləndir",
|
||||
"status.pin": "Profildə sanc",
|
||||
"status.quote_error.filtered": "Bəzi filtrlərinizə görə gizlidir",
|
||||
"status.quote_error.not_available": "Göndəriş əlçatmazdır",
|
||||
"status.quote_error.pending_approval": "Göndəriş gözləmədədir",
|
||||
"status.quote_error.pending_approval_popout.title": "Gözləyən sitat var? Səbrli olun.",
|
||||
"status.quote_post_author": "@{name} göndərişini sitat gətirdi",
|
||||
"status.read_more": "Daha çoxunu oxu",
|
||||
"status.reblog": "Təkrar paylaş",
|
||||
"status.reblog_private": "Orijinal görünmə ilə təkrar paylaş",
|
||||
"status.reblogged_by": "{name} təkrar paylaşdı",
|
||||
"status.reblogs": "{count, plural, one {təkrar paylaşma} other {təkrar paylaşma}}",
|
||||
"status.reblogs.empty": "Hələ heç kim bu göndərişi təkrar paylaşmayıb. Kimsə paylaşdığı zaman, burada görünəcək.",
|
||||
"status.remove_bookmark": "Əlfəcini sil",
|
||||
"status.remove_favourite": "Sevimlilərdən sil",
|
||||
"status.replied_in_thread": "Mövzuda cavablandırıldı",
|
||||
"status.replied_to": "Cavab verildi: {name}",
|
||||
"status.reply": "Cavabla",
|
||||
"status.replyAll": "Mövzuda cavab ver",
|
||||
"status.report": "Bildir: @{name}",
|
||||
"status.revoke_quote": "@{name} - göndərişindən mənim göndərişimi sil",
|
||||
"status.sensitive_warning": "Həssas məzmun",
|
||||
"status.share": "Paylaş",
|
||||
"status.show_less_all": "Hamısı üçün daha az göstər",
|
||||
"status.show_more_all": "Hamısı üçün daha çox göstər",
|
||||
"status.show_original": "Orijinalı göstər",
|
||||
"status.title.with_attachments": "{user} {attachmentCount, plural, one {bir qoşma} other {{attachmentCount} qoşma}} paylaşdı",
|
||||
"status.translate": "Tərcümə et",
|
||||
"status.translated_from_with": "{provider} ilə {lang} dilindən tərcümə edilib",
|
||||
"status.uncached_media_warning": "Önizləmə mövcud deyil",
|
||||
"status.unmute_conversation": "Danışığın səsini aç",
|
||||
"status.unpin": "Profil sancağı götür",
|
||||
"subscribed_languages.lead": "Dəyişiklikdən sonra əsas ekran və siyahı zaman xəttinizdə yalnız seçdiyiniz dillərdəki göndərişlər görünəcək. Bütün dillərdə göndəriş almaq üçün heç birini seçməyin.",
|
||||
"subscribed_languages.save": "Dəyişiklikləri saxla",
|
||||
"subscribed_languages.target": "{target} üçün abunə olunmuş dilləri dəyişdir",
|
||||
"tabs_bar.home": "Ana səhifə",
|
||||
|
|
@ -520,6 +911,7 @@
|
|||
"time_remaining.minutes": "{number, plural, one {# dəqiqə} other {# dəqiqə}} qalıb",
|
||||
"time_remaining.moments": "Bir neçə dəqiqə qalıb",
|
||||
"time_remaining.seconds": "{number, plural, one {# saniyə} other {# saniyə}} qalıb",
|
||||
"trends.counter_by_accounts": "Son {days, plural, one {bir gündə} other {{days} gündə}} {count, plural, one {{counter} nəfər} other {{counter} nəfər}}",
|
||||
"trends.trending_now": "İndi trenddədir",
|
||||
"ui.beforeunload": "Mastodon-u tərk etsəniz, qaralamanız itəcək.",
|
||||
"units.short.billion": "{count} mlyrd",
|
||||
|
|
@ -551,5 +943,17 @@
|
|||
"video.skip_forward": "İrəli ötür",
|
||||
"video.unmute": "Səsi aç",
|
||||
"video.volume_down": "Həcmi azalt",
|
||||
"video.volume_up": "Həcmi artır"
|
||||
"video.volume_up": "Həcmi artır",
|
||||
"visibility_modal.button_title": "Görünməni ayarla",
|
||||
"visibility_modal.header": "Görünmə və qarşılıqlı əlaqə",
|
||||
"visibility_modal.helper.direct_quoting": "Şəxsi adçəkmələr, sitat gətirilə bilməz.",
|
||||
"visibility_modal.helper.privacy_editing": "Dərc edilən göndərişlərin görünməsi dəyişdirilə bilməz.",
|
||||
"visibility_modal.helper.private_quoting": "Yalnız izləyicilərə xas göndərişlər, sitat gətirilə bilməz.",
|
||||
"visibility_modal.helper.unlisted_quoting": "İnsanlar sizdən sitat gətirdiyi zaman, onların göndərişləri də trend zaman xəttindən gizlədiləcək.",
|
||||
"visibility_modal.instructions": "Bu göndərişlə kimin əlaqə qura biləcəyini idarə edin. Qlobal ayarlar <link>Tərcihlər > Digər</link> bölməsinin altında tapıla bilər.",
|
||||
"visibility_modal.privacy_label": "Gizlilik",
|
||||
"visibility_modal.quote_followers": "Yalnız izləyicilər",
|
||||
"visibility_modal.quote_label": "Kimin sitat gətirə biləcəyini dəyişdir",
|
||||
"visibility_modal.quote_nobody": "Heç kim",
|
||||
"visibility_modal.quote_public": "Hər kəs"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@
|
|||
"account.followers": "Падпісчыкі",
|
||||
"account.followers.empty": "Ніхто пакуль не падпісаны на гэтага карыстальніка.",
|
||||
"account.followers_counter": "{count, plural, one {{counter} падпісчык} few {{counter} падпісчыкі} many {{counter} падпісчыкаў} other {{counter} падпісчыка}}",
|
||||
"account.followers_you_know_counter": "{count, one {{counter}, знаёмы вам} other {{counter}, знаёмых вам}}",
|
||||
"account.followers_you_know_counter": "{count, plural, one {{counter}, знаёмы вам} other {{counter}, знаёмых вам}}",
|
||||
"account.following": "Падпіскі",
|
||||
"account.following_counter": "{count, plural, one {{counter} падпіска} few {{counter} падпіскі} many {{counter} падпісак} other {{counter} падпіскі}}",
|
||||
"account.follows.empty": "Карыстальнік ні на каго не падпісаны.",
|
||||
|
|
@ -62,6 +62,7 @@
|
|||
"account.mute_notifications_short": "Не апавяшчаць",
|
||||
"account.mute_short": "Ігнараваць",
|
||||
"account.muted": "Ігнаруецца",
|
||||
"account.muting": "Ігнараванне",
|
||||
"account.mutual": "Вы падпісаны адно на аднаго",
|
||||
"account.no_bio": "Апісанне адсутнічае.",
|
||||
"account.open_original_page": "Адкрыць арыгінальную старонку",
|
||||
|
|
@ -103,6 +104,8 @@
|
|||
"alt_text_modal.add_text_from_image": "Дадаць тэкст з відарыса",
|
||||
"alt_text_modal.cancel": "Скасаваць",
|
||||
"alt_text_modal.change_thumbnail": "Змяніць мініяцюру",
|
||||
"alt_text_modal.describe_for_people_with_hearing_impairments": "Апішыце гэта людзям з праблемамі са слыхам…",
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "Апішыце гэта людзям з праблемамі са зрокам…",
|
||||
"alt_text_modal.done": "Гатова",
|
||||
"announcement.announcement": "Аб'ява",
|
||||
"annual_report.summary.archetype.booster": "Паляўнічы на трэнды",
|
||||
|
|
@ -112,25 +115,25 @@
|
|||
"annual_report.summary.archetype.replier": "Душа кампаніі",
|
||||
"annual_report.summary.followers.followers": "падпісчыкі",
|
||||
"annual_report.summary.followers.total": "Агулам {count}",
|
||||
"annual_report.summary.here_it_is": "Вось вашы вынікі {year} за год:",
|
||||
"annual_report.summary.here_it_is": "Вось Вашы вынікі {year} за год:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "самы ўпадабаны допіс",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "самы пашыраны допіс",
|
||||
"annual_report.summary.highlighted_post.by_replies": "самы каментаваны допіс",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}",
|
||||
"annual_report.summary.most_used_app.most_used_app": "праграма, якой карысталіся часцей",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "хэштэг, якім карысталіся часцей",
|
||||
"annual_report.summary.most_used_app.most_used_app": "праграма, якой карысталіся найчасцей",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "хэштэг, якім карысталіся найчасцей",
|
||||
"annual_report.summary.most_used_hashtag.none": "Няма",
|
||||
"annual_report.summary.new_posts.new_posts": "новыя допісы",
|
||||
"annual_report.summary.percentile.text": "<topLabel>З-за гэтага, вы знаходзіцеся ў топе</topLabel><percentage></percentage><bottomLabel> карыстальнікаў {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Гэта падымае Вас у топ</topLabel><percentage></percentage><bottomLabel> карыстальнікаў {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "КДБ пра гэта не даведаецца.",
|
||||
"annual_report.summary.thanks": "Дзякуй за ўдзел у Mastodon!",
|
||||
"attachments_list.unprocessed": "(неапрацаваны)",
|
||||
"audio.hide": "Схаваць аўдыя",
|
||||
"block_modal.remote_users_caveat": "Мы папросім сервер {domain} паважаць ваш выбар. Аднак гэта не гарантуецца, паколькі некаторыя серверы могуць апрацоўваць блакіроўкі іншым чынам. Публічныя паведамленні могуць заставацца бачнымі для ананімных карыстальнікаў.",
|
||||
"block_modal.remote_users_caveat": "Мы папросім сервер {domain} паважаць Ваш выбар. Аднак гэта не гарантуецца, паколькі некаторыя серверы могуць апрацоўваць блакіроўкі іншым чынам. Публічныя паведамленні могуць заставацца бачнымі для ананімных карыстальнікаў.",
|
||||
"block_modal.show_less": "Паказаць меньш",
|
||||
"block_modal.show_more": "Паказаць больш",
|
||||
"block_modal.they_cant_mention": "Карыстальнік не зможа згадваць або сачыць за вамі.",
|
||||
"block_modal.they_cant_see_posts": "Карыстальнік не будзе бачыць вашых допісаў, а вы — карыстальніка.",
|
||||
"block_modal.they_cant_see_posts": "Карыстальнік не будзе бачыць Вашых допісаў, а Вы — ягоных.",
|
||||
"block_modal.they_will_know": "Карыстальнік убачыць, што адбылася блакіроўка.",
|
||||
"block_modal.title": "Заблакіраваць карыстальніка?",
|
||||
"block_modal.you_wont_see_mentions": "Вы не ўбачыце паведамленняў са згадваннем карыстальніка.",
|
||||
|
|
@ -159,7 +162,7 @@
|
|||
"column.bookmarks": "Закладкі",
|
||||
"column.community": "Лакальная стужка",
|
||||
"column.create_list": "Стварыць спіс",
|
||||
"column.direct": "Асабістыя згадванні",
|
||||
"column.direct": "Прыватныя згадванні",
|
||||
"column.directory": "Праглядзець профілі",
|
||||
"column.domain_blocks": "Заблакіраваныя дамены",
|
||||
"column.edit_list": "Рэдагаваць спіс",
|
||||
|
|
@ -214,9 +217,15 @@
|
|||
"confirmations.delete.message": "Вы ўпэўненыя, што хочаце выдаліць гэты допіс?",
|
||||
"confirmations.delete.title": "Выдаліць допіс?",
|
||||
"confirmations.delete_list.confirm": "Выдаліць",
|
||||
"confirmations.delete_list.message": "Вы ўпэўненыя, што хочаце беззваротна выдаліць гэты чарнавік?",
|
||||
"confirmations.delete_list.message": "Вы ўпэўненыя, што хочаце беззваротна выдаліць гэты спіс?",
|
||||
"confirmations.delete_list.title": "Выдаліць спіс?",
|
||||
"confirmations.discard_draft.confirm": "Адмовіцца і працягнуць",
|
||||
"confirmations.discard_draft.edit.cancel": "Працягнуць рэдагаванне",
|
||||
"confirmations.discard_draft.edit.message": "Калі працягнуць, то ўсе змены, што Вы зрабілі ў гэтым допісе, будуць адмененыя.",
|
||||
"confirmations.discard_draft.edit.title": "Адмовіцца ад змен у Вашым допісе?",
|
||||
"confirmations.discard_draft.post.cancel": "Працягнуць чарнавік",
|
||||
"confirmations.discard_draft.post.message": "Калі працягнуць, то допіс, які Вы зараз пішаце, не будзе апублікаваны.",
|
||||
"confirmations.discard_draft.post.title": "Скасаваць чарнавік?",
|
||||
"confirmations.discard_edit_media.confirm": "Адмяніць",
|
||||
"confirmations.discard_edit_media.message": "У вас ёсць незахаваныя змены ў апісанні або прэв'ю, усе роўна скасаваць іх?",
|
||||
"confirmations.follow_to_list.confirm": "Падпісацца і дадаць у спіс",
|
||||
|
|
@ -226,6 +235,7 @@
|
|||
"confirmations.logout.message": "Вы ўпэўненыя, што хочаце выйсці?",
|
||||
"confirmations.logout.title": "Выйсці?",
|
||||
"confirmations.missing_alt_text.confirm": "Дадаць альтэрнатыўны тэкст",
|
||||
"confirmations.missing_alt_text.message": "У Вашым допісе ёсць медыя без альтэрнатыўнага тэксту. Дадаванне апісання дапамагае зрабіць Ваш допіс даступным для большай колькасці людзей.",
|
||||
"confirmations.missing_alt_text.secondary": "Усё адно апублікаваць",
|
||||
"confirmations.missing_alt_text.title": "Дадаць альтэрнатыўны тэкст?",
|
||||
"confirmations.mute.confirm": "Ігнараваць",
|
||||
|
|
@ -233,7 +243,11 @@
|
|||
"confirmations.redraft.message": "Вы ўпэўнены, што хочаце выдаліць допіс і перапісаць яго? Упадабанні і пашырэнні згубяцца, а адказы да арыгінальнага допісу асірацеюць.",
|
||||
"confirmations.redraft.title": "Выдаліць і перапісаць допіс?",
|
||||
"confirmations.remove_from_followers.confirm": "Выдаліць падпісчыка",
|
||||
"confirmations.remove_from_followers.message": "Карыстальнік {name} больш не будзе падпісаны на Вас. Упэўненыя, што хочаце працягнуць?",
|
||||
"confirmations.remove_from_followers.title": "Выдаліць падпісчыка?",
|
||||
"confirmations.revoke_quote.confirm": "Выдаліць допіс",
|
||||
"confirmations.revoke_quote.message": "Гэтае дзеянне немагчыма адмяніць.",
|
||||
"confirmations.revoke_quote.title": "Выдаліць допіс?",
|
||||
"confirmations.unfollow.confirm": "Адпісацца",
|
||||
"confirmations.unfollow.message": "Вы ўпэўненыя, што хочаце адпісацца ад {name}?",
|
||||
"confirmations.unfollow.title": "Адпісацца ад карыстальніка?",
|
||||
|
|
@ -247,7 +261,7 @@
|
|||
"copy_icon_button.copied": "Скапіявана ў буфер абмену",
|
||||
"copypaste.copied": "Скапіравана",
|
||||
"copypaste.copy_to_clipboard": "Скапіяваць у буфер абмену",
|
||||
"directory.federated": "З вядомага федэсвету",
|
||||
"directory.federated": "З вядомага федэральнага сусвету",
|
||||
"directory.local": "Толькі з {domain}",
|
||||
"directory.new_arrivals": "Новыя карыстальнікі",
|
||||
"directory.recently_active": "Нядаўна актыўныя",
|
||||
|
|
@ -255,7 +269,7 @@
|
|||
"disabled_account_banner.text": "Ваш уліковы запіс {disabledAccount} часова адключаны.",
|
||||
"dismissable_banner.community_timeline": "Гэта самыя апошнія допісы ад людзей, уліковыя запісы якіх размяшчаюцца на {domain}.",
|
||||
"dismissable_banner.dismiss": "Адхіліць",
|
||||
"dismissable_banner.public_timeline": "Вось апошнія публічныя допісы ад карыстальнікаў fediverse на якіх падпісаны карыстальнікі {domain}.",
|
||||
"dismissable_banner.public_timeline": "Вось апошнія публічныя допісы ад карыстальнікаў федэральнага сусвету, на якіх падпісаныя карыстальнікі {domain}.",
|
||||
"domain_block_modal.block": "Заблакіраваць сервер",
|
||||
"domain_block_modal.block_account_instead": "Заблакіраваць @{name} замест гэтага",
|
||||
"domain_block_modal.they_can_interact_with_old_posts": "Людзі з гэтага сервера змогуць узаемадзейнічаць з вашымі старымі допісамі.",
|
||||
|
|
@ -273,12 +287,13 @@
|
|||
"domain_pill.their_username": "Унікальны ідэнтыфікатар карыстальніка на серверы. Можна знайсці карыстальнікаў з аднолькавым іменем карыстальніка на розных серверах.",
|
||||
"domain_pill.username": "Імя карыстальніка",
|
||||
"domain_pill.whats_in_a_handle": "Што такое ідэнтыфікатар карыстальніка?",
|
||||
"domain_pill.who_they_are": "Паколькі ідэнтыфікатары кажуць аб тым, хто гэты чалавек і якім серверам ён карыстаецца, вы можаце ўзаемадзейнічаць з карыстальнікамі <button> платформ, якія падтрымліваюць ActivityPub</button>.",
|
||||
"domain_pill.who_you_are": "Паколькі ваш ідэнтыфікатар кажа аб тым, хто вы і дзе знаходзіцеся, людзі могуць узаемадзейнічаць з вамі ў сацыяльнай сетцы <button> на платформах, якія падтрымліваюць ActivityPub</button>.",
|
||||
"domain_pill.who_they_are": "Паколькі ідэнтыфікатары кажуць аб тым, хто гэты чалавек і якім серверам ён карыстаецца, Вы можаце ўзаемадзейнічаць з карыстальнікамі <button> платформ, якія падтрымліваюць ActivityPub</button>.",
|
||||
"domain_pill.who_you_are": "Паколькі Ваш ідэнтыфікатар кажа аб тым, хто Вы і дзе знаходзіцеся, людзі могуць узаемадзейнічаць з вамі ў сацыяльнай сетцы <button> на платформах, якія падтрымліваюць ActivityPub</button>.",
|
||||
"domain_pill.your_handle": "Ваш ідэнтыфікатар:",
|
||||
"domain_pill.your_server": "Ваш лічбавы дом, дзе захоўваюцца ўсе вашыя допісы. Не падабаецца гэты сервер? Змяніце сервер у любы час з захаваннем сваіх падпісчыкаў.",
|
||||
"domain_pill.your_username": "Ваш унікальны ідэнтыфікатар на гэтым серверы. Можна знайсці карыстальнікаў з аднолькавым іменем карыстальніка на розных серверах.",
|
||||
"embed.instructions": "Убудуйце гэты пост на свой сайт, скапіраваўшы прыведзены ніжэй код",
|
||||
"dropdown.empty": "Выбраць варыянт",
|
||||
"embed.instructions": "Убудуйце гэты допіс на свой сайт, скапіраваўшы прыведзены ніжэй код.",
|
||||
"embed.preview": "Вось як гэта будзе выглядаць:",
|
||||
"emoji_button.activity": "Актыўнасць",
|
||||
"emoji_button.clear": "Ачысціць",
|
||||
|
|
@ -290,36 +305,39 @@
|
|||
"emoji_button.not_found": "Адпаведныя эмодзі не знойдзены",
|
||||
"emoji_button.objects": "Прадметы",
|
||||
"emoji_button.people": "Людзі",
|
||||
"emoji_button.recent": "Чата выкарыстаныя",
|
||||
"emoji_button.recent": "Часта выкарыстоўваемыя",
|
||||
"emoji_button.search": "Пошук...",
|
||||
"emoji_button.search_results": "Вынікі пошуку",
|
||||
"emoji_button.symbols": "Сімвалы",
|
||||
"emoji_button.travel": "Падарожжы і месцы",
|
||||
"empty_column.account_featured.me": "Вы яшчэ нічога не паказалі. Ці ведалі Вы, што ў сваім профілі Вы можаце паказаць свае хэштэгі, якімі найбольш карыстаецеся, і нават профілі сваіх сяброў?",
|
||||
"empty_column.account_featured.other": "{acct} яшчэ нічога не паказаў. Ці ведалі Вы, што ў сваім профілі Вы можаце паказаць свае хэштэгі, якімі найбольш карыстаецеся, і нават профілі сваіх сяброў?",
|
||||
"empty_column.account_featured_other.unknown": "Гэты ўліковы запіс яшчэ нічога не паказаў.",
|
||||
"empty_column.account_hides_collections": "Гэты карыстальнік вырашыў схаваць гэтую інфармацыю",
|
||||
"empty_column.account_suspended": "Уліковы запіс прыпынены",
|
||||
"empty_column.account_timeline": "Тут няма допісаў!",
|
||||
"empty_column.account_unavailable": "Профіль недаступны",
|
||||
"empty_column.blocks": "Вы яшчэ нікога не заблакіравалі.",
|
||||
"empty_column.bookmarked_statuses": "У вашых закладках яшчэ няма допісаў. Калі вы дадасце закладку, яна з’явіцца тут.",
|
||||
"empty_column.bookmarked_statuses": "У Вашых закладках яшчэ няма допісаў. Калі Вы дадасце закладку, яна з’явіцца тут.",
|
||||
"empty_column.community": "Мясцовая стужка пустая. Напішыце нешта публічнае, каб разварушыць справу!",
|
||||
"empty_column.direct": "Пакуль у вас няма асабістых згадванняў. Калі вы дашляце або атрымаеце штосьці, яно з’явіцца тут.",
|
||||
"empty_column.direct": "Пакуль у Вас няма асабістых згадванняў. Калі Вы дашляце або атрымаеце штосьці, яно з’явіцца тут.",
|
||||
"empty_column.domain_blocks": "Заблакіраваных даменаў пакуль няма.",
|
||||
"empty_column.explore_statuses": "Зараз не ў трэндзе. Праверце пазней",
|
||||
"empty_column.favourited_statuses": "Вы яшчэ не ўпадабалі ніводны допіс. Калі гэта адбудзецца, вы ўбачыце яго тут.",
|
||||
"empty_column.favourites": "Ніхто яшчэ не ўпадабаў гэты допіс. Калі гэта адбудзецца, вы ўбачыце гэтых людзей тут.",
|
||||
"empty_column.follow_requests": "У вас яшчэ няма запытаў на падпіску. Калі вы атрымаеце запыт, ён з’явіцца тут.",
|
||||
"empty_column.favourited_statuses": "Вы яшчэ не ўпадабалі ніводны допіс. Калі гэта адбудзецца, Вы ўбачыце яго тут.",
|
||||
"empty_column.favourites": "Ніхто яшчэ не ўпадабаў гэты допіс. Калі гэта адбудзецца, Вы ўбачыце гэтых людзей тут.",
|
||||
"empty_column.follow_requests": "У Вас яшчэ няма запытаў на падпіску. Калі Вы атрымаеце запыт, ён з’явіцца тут.",
|
||||
"empty_column.followed_tags": "Вы пакуль не падпісаны ні на адзін хэштэг. Калі падпішацеся, яны з’явяцца тут.",
|
||||
"empty_column.hashtag": "Па гэтаму хэштэгу пакуль што нічога няма.",
|
||||
"empty_column.home": "Галоўная стужка пустая! Падпішыцеся на іншых людзей, каб запоўніць яе. {suggestions}",
|
||||
"empty_column.list": "У гэтым спісе пакуль што нічога няма. Калі члены лісту апублікуюць новыя запісы, яны з'явяцца тут.",
|
||||
"empty_column.list": "У гэтым спісе пакуль што нічога няма. Калі члены спіса апублікуюць новыя запісы, яны з'явяцца тут.",
|
||||
"empty_column.mutes": "Вы яшчэ нікога не ігнаруеце.",
|
||||
"empty_column.notification_requests": "Чысціня! Тут нічога няма. Калі вы будзеце атрымліваць новыя апавяшчэння, яны будуць з'яўляцца тут у адпаведнасці з вашымі наладамі.",
|
||||
"empty_column.notifications": "У вас няма ніякіх апавяшчэнняў. Калі іншыя людзі ўзаемадзейнічаюць з вамі, вы ўбачыце гэта тут.",
|
||||
"empty_column.notification_requests": "Чысціня! Тут нічога няма. Калі Вы будзеце атрымліваць новыя апавяшчэнні, яны будуць з'яўляцца тут у адпаведнасці з Вашымі наладамі.",
|
||||
"empty_column.notifications": "У Вас няма ніякіх апавяшчэнняў. Калі іншыя людзі захочуць узаемадзейнічаць з Вамі, Вы ўбачыце гэта тут.",
|
||||
"empty_column.public": "Тут нічога няма! Апублікуйце што-небудзь, або падпішыцеся на карыстальнікаў з другіх сервераў",
|
||||
"error.unexpected_crash.explanation": "Гэта старонка не можа быць адлюстравана карэктна з-за памылкі ў нашым кодзе, або праблемы з сумяшчальнасцю браўзера.",
|
||||
"error.unexpected_crash.explanation_addons": "Гэтая старонка не можа быць адлюстравана карэктна. Верагодна, гэтая памылка выклікана дадатковым кампанентам браўзера або інструментамі аўтаматычнага перакладу",
|
||||
"error.unexpected_crash.next_steps": "Паспрабуйце абнавіць старонку. Калі гэта не дапаможа, вы можаце паспрабаваць іншы браўзер, альбо выкарыстаць усталяваную праграму.",
|
||||
"error.unexpected_crash.next_steps_addons": "Паспрабуйце выключыць іх і абнавіць старонку. Калі гэта не дапамагае, вы ўсё яшчэ можаце карыстацца Mastodon праз іншы браўзер ці натыўную праграму.",
|
||||
"error.unexpected_crash.explanation_addons": "Гэтая старонка не можа быць адлюстравана карэктна. Верагодна, гэтая памылка выкліканая дадатковым кампанентам браўзера або інструментамі аўтаматычнага перакладу.",
|
||||
"error.unexpected_crash.next_steps": "Паспрабуйце абнавіць старонку. Калі гэта не дапаможа, Вы можаце паспрабаваць іншы браўзер, альбо выкарыстаць усталяваную праграму.",
|
||||
"error.unexpected_crash.next_steps_addons": "Паспрабуйце выключыць іх і абнавіць старонку. Калі гэта не дапамагае, Вы ўсё яшчэ можаце карыстацца Mastodon праз іншы браўзер ці асобную праграму.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Дадаць дыягнастычны стэк у буфер абмену",
|
||||
"errors.unexpected_crash.report_issue": "Паведаміць аб праблеме",
|
||||
"explore.suggested_follows": "Людзі",
|
||||
|
|
@ -327,18 +345,19 @@
|
|||
"explore.trending_links": "Навіны",
|
||||
"explore.trending_statuses": "Допісы",
|
||||
"explore.trending_tags": "Хэштэгі",
|
||||
"featured_carousel.header": "{count, plural,one {Замацаваны допіс} other {Замацаваныя допісы}}",
|
||||
"featured_carousel.next": "Далей",
|
||||
"featured_carousel.post": "Допіс",
|
||||
"featured_carousel.previous": "Назад",
|
||||
"featured_carousel.slide": "{index} з {total}",
|
||||
"filter_modal.added.context_mismatch_explanation": "Гэтая катэгорыя фільтра не прымяняецца да кантэксту, у якім вы адкрылі гэты пост. Калі вы хочаце, каб паведамленне таксама было адфільтравана ў гэтым кантэксце, вам трэба будзе адрэдагаваць фільтр",
|
||||
"filter_modal.added.context_mismatch_explanation": "Гэтая катэгорыя фільтра не прымяняецца да кантэксту, у якім Вы адкрылі гэты допіс. Калі Вы хочаце, каб паведамленне таксама было адфільтраванае ў гэтым кантэксце, Вам трэба будзе адрэдагаваць фільтр.",
|
||||
"filter_modal.added.context_mismatch_title": "Неадпаведны кантэкст!",
|
||||
"filter_modal.added.expired_explanation": "Тэрмін дзеяння гэтай катэгорыі фільтраў скончыўся, вам трэба будзе змяніць дату заканчэння тэрміну дзеяння, каб яна прымянялася",
|
||||
"filter_modal.added.expired_title": "Пратэрмінаваны фільтр!",
|
||||
"filter_modal.added.review_and_configure": "Для прагляду і наступнай канфігурацыі фільтра катэгорый, перайдзіце на {settings_link}.",
|
||||
"filter_modal.added.review_and_configure_title": "Налады фільтра",
|
||||
"filter_modal.added.settings_link": "старонка наладаў",
|
||||
"filter_modal.added.short_explanation": "Гэты пост быў дабаўлены ў катэгорыю з наступным фільтрам: {title}.",
|
||||
"filter_modal.added.short_explanation": "Гэты допіс быў дададзены ў катэгорыю з наступным фільтрам: {title}.",
|
||||
"filter_modal.added.title": "Фільтр дабаўлены!",
|
||||
"filter_modal.select_filter.context_mismatch": "Не мае дачынення да кантэксту ",
|
||||
"filter_modal.select_filter.expired": "пратэрмінавана",
|
||||
|
|
@ -348,27 +367,27 @@
|
|||
"filter_modal.select_filter.title": "Фільтраваць гэты допіс",
|
||||
"filter_modal.title.status": "Фільтраваць допіс",
|
||||
"filter_warning.matches_filter": "Адпавядае фільтру \"<span>{title}</span>\"",
|
||||
"filtered_notifications_banner.pending_requests": "Ад {count, plural, =0 {# людзей якіх} one {# чалавека якіх} few {# чалавек якіх} many {# людзей якіх} other {# чалавека якіх}} вы магчыма ведаеце",
|
||||
"filtered_notifications_banner.pending_requests": "Ад {count, plural, =0 {# людзей якіх} one {# чалавека якіх} few {# чалавек якіх} many {# людзей якіх} other {# чалавека якіх}} Вы магчыма ведаеце",
|
||||
"filtered_notifications_banner.title": "Адфільтраваныя апавяшчэнні",
|
||||
"firehose.all": "Усе",
|
||||
"firehose.local": "Гэты сервер",
|
||||
"firehose.remote": "Іншыя серверы",
|
||||
"follow_request.authorize": "Аўтарызацыя",
|
||||
"follow_request.reject": "Адхіліць",
|
||||
"follow_requests.unlocked_explanation": "Ваш акаўнт не схаваны, аднак прадстаўнікі {domain} палічылі, што вы можаце захацець праглядзець запыты на падпіску з гэтых профіляў уручную.",
|
||||
"follow_requests.unlocked_explanation": "Ваш уліковы запіс не схаваны, аднак прадстаўнікі {domain} палічылі, што Вы можаце захацець праглядзець запыты на падпіску з гэтых уліковых запісаў уручную.",
|
||||
"follow_suggestions.curated_suggestion": "Выбар адміністрацыі",
|
||||
"follow_suggestions.dismiss": "Не паказваць зноў",
|
||||
"follow_suggestions.featured_longer": "Адабраныя камандай {domain} уручную",
|
||||
"follow_suggestions.friends_of_friends_longer": "Папулярнае сярод людзей, на якіх Вы падпісаны",
|
||||
"follow_suggestions.friends_of_friends_longer": "Папулярнае сярод людзей, на якіх Вы падпісаныя",
|
||||
"follow_suggestions.hints.featured": "Гэты профіль быў выбраны ўручную камандай {domain}.",
|
||||
"follow_suggestions.hints.friends_of_friends": "Гэты профіль папулярны сярод людзей, на якіх вы падпісаліся.",
|
||||
"follow_suggestions.hints.friends_of_friends": "Гэты профіль папулярны сярод людзей, на якіх Вы падпісаліся.",
|
||||
"follow_suggestions.hints.most_followed": "Гэты профіль - адзін з профіляў з самай вялікай колькасцю падпісак на {domain}.",
|
||||
"follow_suggestions.hints.most_interactions": "У апошні час гэты профіль прыцягвае шмат увагі на {domain}.",
|
||||
"follow_suggestions.hints.similar_to_recently_followed": "Гэты профіль падобны на профілі, на якія вы нядаўна падпісаліся.",
|
||||
"follow_suggestions.hints.similar_to_recently_followed": "Гэты профіль падобны на профілі, на якія Вы нядаўна падпісаліся.",
|
||||
"follow_suggestions.personalized_suggestion": "Персаналізаваная прапанова",
|
||||
"follow_suggestions.popular_suggestion": "Папулярная прапанова",
|
||||
"follow_suggestions.popular_suggestion_longer": "Папулярнае на {domain}",
|
||||
"follow_suggestions.similar_to_recently_followed_longer": "Падобныя профілі, за якімі вы нядаўна сачылі",
|
||||
"follow_suggestions.similar_to_recently_followed_longer": "Падобныя профілі, за якімі Вы нядаўна сачылі",
|
||||
"follow_suggestions.view_all": "Праглядзець усё",
|
||||
"follow_suggestions.who_to_follow": "На каго падпісацца",
|
||||
"followed_tags": "Падпіскі",
|
||||
|
|
@ -383,6 +402,8 @@
|
|||
"generic.saved": "Захавана",
|
||||
"getting_started.heading": "Пачатак працы",
|
||||
"hashtag.admin_moderation": "Адкрыць інтэрфейс мадэратара для #{name}",
|
||||
"hashtag.browse": "Праглядзець допісы ў #{hashtag}",
|
||||
"hashtag.browse_from_account": "Праглядзець допісы ад @{name} у #{hashtag}",
|
||||
"hashtag.column_header.tag_mode.all": "і {additional}",
|
||||
"hashtag.column_header.tag_mode.any": "або {additional}",
|
||||
"hashtag.column_header.tag_mode.none": "без {additional}",
|
||||
|
|
@ -395,7 +416,10 @@
|
|||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} удзельнік} few {{counter} удзельніка} many {{counter} удзельнікаў} other {{counter} удзельніка}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} допіс} few {{counter} допісы} many {{counter} допісаў} other {{counter} допісу}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} допіс} few {{counter} допісы} many {{counter} допісаў} other {{counter} допісу}} за сёння",
|
||||
"hashtag.feature": "Паказваць у профілі",
|
||||
"hashtag.follow": "Падпісацца на хэштэг",
|
||||
"hashtag.mute": "Ігнараваць #{hashtag}",
|
||||
"hashtag.unfeature": "Не паказваць у профілі",
|
||||
"hashtag.unfollow": "Адпісацца ад хэштэга",
|
||||
"hashtags.and_other": "…і яшчэ {count, plural, other {#}}",
|
||||
"hints.profiles.followers_may_be_missing": "Падпісчыкі гэтага профілю могуць адсутнічаць.",
|
||||
|
|
@ -412,7 +436,7 @@
|
|||
"home.pending_critical_update.link": "Прагледзець абнаўленні",
|
||||
"home.pending_critical_update.title": "Даступна крытычнае абнаўленне бяспекі!",
|
||||
"home.show_announcements": "Паказаць аб'явы",
|
||||
"ignore_notifications_modal.disclaimer": "Mastodon не можа паведамляць карыстальнікам, што вы праігнаравалі апавяшчэнні ад іх. Ігнараванне апавяшчэнняў не спыніць адпраўку саміх паведамленняў.",
|
||||
"ignore_notifications_modal.disclaimer": "Mastodon не можа паведамляць карыстальнікам, што Вы праігнаравалі апавяшчэнні ад іх. Ігнараванне апавяшчэнняў не спыніць адпраўку саміх паведамленняў.",
|
||||
"ignore_notifications_modal.filter_instead": "Замест гэтага адфільтраваць",
|
||||
"ignore_notifications_modal.filter_to_act_users": "Вы па-ранейшаму зможаце прымаць, адхіляць ці скардзіцца на карыстальнікаў",
|
||||
"ignore_notifications_modal.filter_to_avoid_confusion": "Выкарыстанне фільтраў дапамагае пазбягаць патэнцыйнай блытаніны",
|
||||
|
|
@ -421,11 +445,15 @@
|
|||
"ignore_notifications_modal.limited_accounts_title": "Ігнараваць апавяшчэнні ад уліковых запісаў пад мадэрацыяй?",
|
||||
"ignore_notifications_modal.new_accounts_title": "Ігнараваць апавяшчэнні ад новых уліковых запісаў?",
|
||||
"ignore_notifications_modal.not_followers_title": "Ігнараваць апавяшчэнні ад людзей, якія не падпісаныя на вас?",
|
||||
"ignore_notifications_modal.not_following_title": "Ігнараваць апавяшчэнні ад людзей на якіх вы не падпісаны?",
|
||||
"ignore_notifications_modal.private_mentions_title": "Ігнараваць апавяшчэнні пра непажаданыя асабістыя згадванні?",
|
||||
"ignore_notifications_modal.not_following_title": "Ігнараваць апавяшчэнні ад людзей, на якіх Вы не падпісаныя?",
|
||||
"ignore_notifications_modal.private_mentions_title": "Ігнараваць апавяшчэнні пра непажаданыя прыватныя згадванні?",
|
||||
"info_button.label": "Даведка",
|
||||
"interaction_modal.action.favourite": "Каб працягнуць, вы мусіце ўпадабаць нешта са свайго ўліковага запісу.",
|
||||
"interaction_modal.action.follow": "Каб працягнуць, вы мусіце падпісацца на некага са свайго ўліковага запісу.",
|
||||
"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.favourite": "Каб працягнуць, Вы мусіце ўпадабаць нешта са свайго ўліковага запісу.",
|
||||
"interaction_modal.action.follow": "Каб працягнуць, Вы мусіце падпісацца на некага са свайго ўліковага запісу.",
|
||||
"interaction_modal.action.reblog": "Каб працягнуць, Вам трэба пашырыць допіс са свайго ўліковага запісу.",
|
||||
"interaction_modal.action.reply": "Каб працягнуць, Вам трэба адказаць са свайго ўліковага запісу.",
|
||||
"interaction_modal.action.vote": "Каб працягнуць, Вам трэба прагаласаваць са свайго ўліковага запісу.",
|
||||
"interaction_modal.go": "Перайсці",
|
||||
"interaction_modal.no_account_yet": "Не маеце ўліковага запісу?",
|
||||
"interaction_modal.on_another_server": "На іншым серверы",
|
||||
|
|
@ -434,6 +462,7 @@
|
|||
"interaction_modal.title.follow": "Падпісацца на {name}",
|
||||
"interaction_modal.title.reblog": "Пашырыць допіс ад {name}",
|
||||
"interaction_modal.title.reply": "Адказаць на допіс {name}",
|
||||
"interaction_modal.title.vote": "Прагаласуйце ў апытанні {name}",
|
||||
"interaction_modal.username_prompt": "Напр., {example}",
|
||||
"intervals.full.days": "{number, plural, one {# дзень} few {# дні} many {# дзён} other {# дня}}",
|
||||
"intervals.full.hours": "{number, plural, one {# гадзіна} few {# гадзіны} many {# гадзін} other {# гадзіны}}",
|
||||
|
|
@ -471,15 +500,17 @@
|
|||
"keyboard_shortcuts.toggle_sensitivity": "Паказаць/схаваць медыя",
|
||||
"keyboard_shortcuts.toot": "Стварыць новы допіс",
|
||||
"keyboard_shortcuts.translate": "каб перакласці допіс",
|
||||
"keyboard_shortcuts.unfocus": "Расфакусаваць тэкставую вобласць/пошукавы радок",
|
||||
"keyboard_shortcuts.unfocus": "Расфакусіраваць тэкставую вобласць/пошукавы радок",
|
||||
"keyboard_shortcuts.up": "Перамясціцца ўверх па спісе",
|
||||
"learn_more_link.got_it": "Зразумеў(-ла)",
|
||||
"learn_more_link.learn_more": "Падрабязней",
|
||||
"lightbox.close": "Закрыць",
|
||||
"lightbox.next": "Далей",
|
||||
"lightbox.previous": "Назад",
|
||||
"lightbox.zoom_in": "Маштабаваць да фактычнага памеру",
|
||||
"lightbox.zoom_out": "Дапасаваць усё змесціва пад памеры экрана",
|
||||
"limited_account_hint.action": "Усе роўна паказваць профіль",
|
||||
"limited_account_hint.title": "Гэты профіль быў схаваны мадэратарамі",
|
||||
"limited_account_hint.title": "Гэты профіль быў схаваны мадэратарамі {domain}.",
|
||||
"link_preview.author": "Ад {name}",
|
||||
"link_preview.more_from_author": "Больш ад {name}",
|
||||
"link_preview.shares": "{count, plural, one {{counter} допіс} few {{counter} допісы} many {{counter} допісаў} other {{counter} допісу}}",
|
||||
|
|
@ -487,34 +518,40 @@
|
|||
"lists.add_to_list": "Дадаць у спіс",
|
||||
"lists.add_to_lists": "Дадаць {name} у спісы",
|
||||
"lists.create": "Стварыць",
|
||||
"lists.create_a_list_to_organize": "Стварыце новы спіс, каб арганізаваць сваю Галоўную старонку",
|
||||
"lists.create_list": "Стварыць спіс",
|
||||
"lists.delete": "Выдаліць спіс",
|
||||
"lists.done": "Гатова",
|
||||
"lists.edit": "Рэдагаваць спіс",
|
||||
"lists.exclusive": "Схаваць карыстальнікаў на Галоўнай старонцы",
|
||||
"lists.exclusive_hint": "Калі ў гэтым спісе нехта ёсць, схавайце яго на сваёй Галоўнай старонцы, каб не бачыць яго допісы двойчы.",
|
||||
"lists.find_users_to_add": "Знайсці карыстальнікаў, каб дадаць",
|
||||
"lists.list_members_count": "{count, plural,one {# карыстальнік}other {# карыстальнікі}}",
|
||||
"lists.list_name": "Назва спіса",
|
||||
"lists.new_list_name": "Назва новага спіса",
|
||||
"lists.no_lists_yet": "Пакуль няма спісаў.",
|
||||
"lists.no_members_yet": "Пакуль няма ўдзельнікаў.",
|
||||
"lists.no_results_found": "Нічога не знойдзена.",
|
||||
"lists.remove_member": "Выдаліць",
|
||||
"lists.replies_policy.followed": "Любы карыстальнік, на якога вы падпісаліся",
|
||||
"lists.replies_policy.followed": "Любы карыстальнік, на якога Вы падпісаліся",
|
||||
"lists.replies_policy.list": "Удзельнікі гэтага спісу",
|
||||
"lists.replies_policy.none": "Нікога",
|
||||
"lists.save": "Захаваць",
|
||||
"lists.search": "Пошук",
|
||||
"lists.show_replies_to": "Уключыць адказы ад карыстальнікаў са спіса",
|
||||
"load_pending": "{count, plural, one {# новы элемент} few {# новыя элементы} many {# новых элементаў} other {# новых элементаў}}",
|
||||
"loading_indicator.label": "Ідзе загрузка…",
|
||||
"media_gallery.hide": "Схаваць",
|
||||
"moved_to_account_banner.text": "Ваш уліковы запіс {disabledAccount} зараз адключаны таму што вы перанесены на {movedToAccount}.",
|
||||
"moved_to_account_banner.text": "Ваш уліковы запіс {disabledAccount} зараз адключаны, таму што Вы перайшлі на {movedToAccount}.",
|
||||
"mute_modal.hide_from_notifications": "Схаваць з апавяшчэнняў",
|
||||
"mute_modal.hide_options": "Схаваць опцыі",
|
||||
"mute_modal.indefinite": "Пакуль я не прыбяру ігнараванне",
|
||||
"mute_modal.show_options": "Паказаць опцыі",
|
||||
"mute_modal.they_can_mention_and_follow": "Карыстальнік зможа згадваць вас і падпісацца на вас, але вы гэтага не ўбачыце.",
|
||||
"mute_modal.they_can_mention_and_follow": "Карыстальнік зможа згадваць Вас і падпісацца на Вас, але Вы гэтага не ўбачыце.",
|
||||
"mute_modal.they_wont_know": "Карыстальнік не будзе ведаць пра ігнараванне.",
|
||||
"mute_modal.title": "Ігнараваць карыстальніка?",
|
||||
"mute_modal.you_wont_see_mentions": "Вы не ўбачыце паведамленняў са згадваннем карыстальніка.",
|
||||
"mute_modal.you_wont_see_posts": "Карыстальнік па-ранейшаму будзе бачыць вашыя паведамленні, але вы не будзеце паведамленні карыстальніка.",
|
||||
"mute_modal.you_wont_see_posts": "Карыстальнік па-ранейшаму будзе бачыць Вашыя допісы, але Вы не будзеце бачыць ягоныя.",
|
||||
"navigation_bar.about": "Пра нас",
|
||||
"navigation_bar.account_settings": "Пароль і бяспека",
|
||||
"navigation_bar.administration": "Адміністрацыя",
|
||||
|
|
@ -522,7 +559,7 @@
|
|||
"navigation_bar.automated_deletion": "Аўтаматычнае выдаленне допісаў",
|
||||
"navigation_bar.blocks": "Заблакіраваныя карыстальнікі",
|
||||
"navigation_bar.bookmarks": "Закладкі",
|
||||
"navigation_bar.direct": "Асабістыя згадванні",
|
||||
"navigation_bar.direct": "Прыватныя згадванні",
|
||||
"navigation_bar.domain_blocks": "Заблакіраваныя дамены",
|
||||
"navigation_bar.favourites": "Упадабанае",
|
||||
"navigation_bar.filters": "Ігнараваныя словы",
|
||||
|
|
@ -544,6 +581,8 @@
|
|||
"navigation_bar.search_trends": "Пошук / Трэндавае",
|
||||
"navigation_panel.collapse_followed_tags": "Згарнуць меню падпісак на хэштэгі",
|
||||
"navigation_panel.collapse_lists": "Згарнуць меню спісаў",
|
||||
"navigation_panel.expand_followed_tags": "Разгарнуць меню падпісак на хэштэгі",
|
||||
"navigation_panel.expand_lists": "Разгарнуць меню спіса",
|
||||
"not_signed_in_indicator.not_signed_in": "Вам трэба ўвайсці каб атрымаць доступ да гэтага рэсурсу.",
|
||||
"notification.admin.report": "{name} паскардзіўся на {target}",
|
||||
"notification.admin.report_account": "{name} паскардзіўся на {count, plural, one {# допіс} many {# допісаў} other {# допіса}} ад {target} з прычыны {category}",
|
||||
|
|
@ -551,45 +590,58 @@
|
|||
"notification.admin.report_statuses": "{name} паскардзіўся на {target} з прычыны {category}",
|
||||
"notification.admin.report_statuses_other": "{name} паскардзіўся на {target}",
|
||||
"notification.admin.sign_up": "{name} зарэгістраваўся",
|
||||
"notification.admin.sign_up.name_and_others": "{name} і {count, plural, one {# іншы} other {# іншых}} зарэгістраваліся",
|
||||
"notification.annual_report.message": "Вас чакае Ваш #Wrapstodon нумар {year}! Падзяліцеся сваімі галоўнымі падзеямі і запамінальнымі момантамі ў Mastodon!",
|
||||
"notification.annual_report.view": "Перайсці да #Wrapstodon",
|
||||
"notification.favourite": "Ваш допіс упадабаны {name}",
|
||||
"notification.favourite": "Карыстальнік {name} упадабаў Ваш допіс",
|
||||
"notification.favourite.name_and_others_with_link": "{name} і <a>{count, plural, one {# іншы} other {# іншыя}}</a> ўпадабалі Ваш допіс",
|
||||
"notification.favourite_pm": "Ваша асабістае згадванне ўпадабана {name}",
|
||||
"notification.favourite_pm.name_and_others_with_link": "{name} і <a>{count, plural, one {# іншы} few {# іншыя} many {# іншых} other {# іншых}}</a> ўпадабалі ваша асабістае згадванне",
|
||||
"notification.follow": "{name} падпісаўся на вас",
|
||||
"notification.follow.name_and_others": "{name} і <a>{count, plural, one {# іншы} other {# іншыя}}</a> падпісаліся на Вас",
|
||||
"notification.follow_request": "{name} адправіў запыт на падпіску",
|
||||
"notification.follow_request.name_and_others": "{name} і {count, plural, one {# іншы} many {# іншых} other {# іншых}} запыталіся падпісацца на вас",
|
||||
"notification.label.mention": "Згадванне",
|
||||
"notification.label.private_mention": "Асабістае згадванне",
|
||||
"notification.label.private_reply": "Асабісты адказ",
|
||||
"notification.label.quote": "Карыстальнік {name} цытаваў Ваш допіс",
|
||||
"notification.label.reply": "Адказ",
|
||||
"notification.mention": "Згадванне",
|
||||
"notification.mentioned_you": "{name} згадаў вас",
|
||||
"notification.moderation-warning.learn_more": "Даведацца больш",
|
||||
"notification.moderation_warning": "Вы атрымалі папярэджанне ад мадэратараў",
|
||||
"notification.moderation_warning.action_delete_statuses": "Некаторыя вашыя допісы былі выдаленыя.",
|
||||
"notification.moderation_warning.action_delete_statuses": "Некаторыя Вашыя допісы былі выдаленыя.",
|
||||
"notification.moderation_warning.action_disable": "Ваш уліковы запіс быў адключаны.",
|
||||
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Некаторыя з вашых допісаў былі пазначаныя як далікатныя.",
|
||||
"notification.moderation_warning.action_none": "Ваш уліковы запіс атрымаў папярэджанне ад мадэратараў.",
|
||||
"notification.moderation_warning.action_sensitive": "З гэтага моманту вашыя допісы будуць пазначаныя як далікатныя.",
|
||||
"notification.moderation_warning.action_silence": "Ваш уліковы запіс быў абмежаваны.",
|
||||
"notification.moderation_warning.action_suspend": "Ваш уліковы запіс быў прыпынены.",
|
||||
"notification.moderation_warning.action_suspend": "Ваш уліковы запіс быў заблакіраваны.",
|
||||
"notification.own_poll": "Ваша апытанне скончылася",
|
||||
"notification.poll": "Апытанне, дзе вы прынялі ўдзел, скончылася",
|
||||
"notification.poll": "Апытанне, дзе Вы прынялі ўдзел, скончылася",
|
||||
"notification.reblog": "{name} пашырыў ваш допіс",
|
||||
"notification.reblog.name_and_others_with_link": "{name} і <a>{count, plural, one {# іншы} many {# іншых} other {# іншых}}</a> абагулілі ваш допіс",
|
||||
"notification.reblog.name_and_others_with_link": "{name} і <a>{count, plural, one {# іншы} many {# іншых} other {# іншых}}</a> пашырылі ваш допіс",
|
||||
"notification.relationships_severance_event": "Страціў сувязь з {name}",
|
||||
"notification.relationships_severance_event.account_suspension": "Адміністратар з {from} прыпыніў працу {target}, што азначае, што вы больш не можаце атрымліваць ад іх абнаўлення ці ўзаемадзейнічаць з імі.",
|
||||
"notification.relationships_severance_event.account_suspension": "Адміністратар з {from} прыпыніў працу ўліковага запісу {target}, што азначае, што Вы больш не можаце атрымліваць ад іх абнаўленні ці ўзаемадзейнічаць з імі.",
|
||||
"notification.relationships_severance_event.domain_block": "Адміністратар з {from} заблакіраваў {target}, у тым ліку {followersCount} вашых падпісчыка(-аў) і {followingCount, plural, one {# уліковы запіс} few {# уліковыя запісы} many {# уліковых запісаў} other {# уліковых запісаў}}.",
|
||||
"notification.relationships_severance_event.learn_more": "Даведацца больш",
|
||||
"notification.relationships_severance_event.user_domain_block": "Вы заблакіравалі {target} выдаліўшы {followersCount} сваіх падпісчыкаў і {followingCount, plural, one {# уліковы запіс} few {# уліковыя запісы} many {# уліковых запісаў} other {# уліковых запісаў}}, за якімі вы сочыце.",
|
||||
"notification.relationships_severance_event.user_domain_block": "Вы заблакіравалі {target} выдаліўшы {followersCount} сваіх падпісчыкаў і {followingCount, plural, one {# уліковы запіс} few {# уліковыя запісы} many {# уліковых запісаў} other {# уліковых запісаў}}, за якімі Вы сочыце.",
|
||||
"notification.status": "Новы допіс ад {name}",
|
||||
"notification.update": "Допіс {name} адрэдагаваны",
|
||||
"notification_requests.accept": "Прыняць",
|
||||
"notification_requests.accept_multiple": "{count, plural,one {Прыняць # запыт…} other {Прыняць # запытаў…}}",
|
||||
"notification_requests.confirm_accept_multiple.button": "{count, plural,one {Прыняць запыт} other {Прыняць запыты}}",
|
||||
"notification_requests.confirm_accept_multiple.message": "Вы збіраецеся прыняць {count, plural, one {адзін запыт на апавяшчэнне} other {# запытаў на апавяшчэнне}}. Упэўненыя, што хочаце працягнуць?",
|
||||
"notification_requests.confirm_accept_multiple.title": "Прыняць запыты на апавяшчэнні?",
|
||||
"notification_requests.confirm_dismiss_multiple.button": "{count, plural,one {Адмовіцца ад запыту} other {Адмовіцца ад запытаў}}",
|
||||
"notification_requests.confirm_dismiss_multiple.message": "Вы збіраецеся адмовіцца ад {count, plural, one {аднаго запыту на апавяшчэнне} other {# запытаў на апавяшчэнне}}. Вы не зможаце зноў лёгка атрымаць доступ да {count, plural, one {яго} other {іх}}. Упэўненыя, што хочаце працягнуць?",
|
||||
"notification_requests.confirm_dismiss_multiple.title": "Адхіліць запыты на апавяшчэнні?",
|
||||
"notification_requests.dismiss": "Адхіліць",
|
||||
"notification_requests.dismiss_multiple": "{count, plural,one {Адмовіцца ад запыту…} other {Адмовіцца ад запытаў…}}",
|
||||
"notification_requests.edit_selection": "Рэдагаваць",
|
||||
"notification_requests.exit_selection": "Гатова",
|
||||
"notification_requests.explainer_for_limited_account": "Апавяшчэнне з гэтага ўліковага запісу было адфільтраванае, бо гэты ўліковы запіс абмежаваў мадэратар.",
|
||||
"notification_requests.explainer_for_limited_remote_account": "Апавяшчэнні з гэтага ўліковага запісу былі адфільтраваныя, бо гэты ўліковы запіс абмежаваў мадэратар.",
|
||||
"notification_requests.maximize": "Разгарнуць",
|
||||
"notification_requests.minimize_banner": "Згарнуць банер адфільтраваных апавяшчэнняў",
|
||||
"notification_requests.notifications_from": "Апавяшчэнні ад {name}",
|
||||
|
|
@ -610,6 +662,7 @@
|
|||
"notifications.column_settings.mention": "Згадванні:",
|
||||
"notifications.column_settings.poll": "Вынікі апытання:",
|
||||
"notifications.column_settings.push": "Push-апавяшчэнні",
|
||||
"notifications.column_settings.quote": "Цытаваныя допісы:",
|
||||
"notifications.column_settings.reblog": "Пашырэнні:",
|
||||
"notifications.column_settings.show": "Паказваць у слупку",
|
||||
"notifications.column_settings.sound": "Прайграваць гук",
|
||||
|
|
@ -623,7 +676,7 @@
|
|||
"notifications.filter.follows": "Падпісаны на",
|
||||
"notifications.filter.mentions": "Згадванні",
|
||||
"notifications.filter.polls": "Вынікі апытання",
|
||||
"notifications.filter.statuses": "Навіны ад людзей, на якіх вы падпісаны",
|
||||
"notifications.filter.statuses": "Навіны ад людзей, на якіх Вы падпісаныя",
|
||||
"notifications.grant_permission": "Дазволіць.",
|
||||
"notifications.group": "{count} Апавяшчэнняў",
|
||||
"notifications.mark_as_read": "Пазначыць усе апавяшчэнні як прачытаныя",
|
||||
|
|
@ -633,27 +686,30 @@
|
|||
"notifications.policy.accept": "Прыняць",
|
||||
"notifications.policy.accept_hint": "Паказваць у апавяшчэннях",
|
||||
"notifications.policy.drop": "Iгнараваць",
|
||||
"notifications.policy.drop_hint": "Адправіць у бездань, адкуль больш ніколі не ўбачыце",
|
||||
"notifications.policy.filter": "Фільтраваць",
|
||||
"notifications.policy.filter_hint": "Адправіць у скрыню адфільтраваных апавяшчэнняў",
|
||||
"notifications.policy.filter_limited_accounts_hint": "Абмежавана мадэратарамі сервера",
|
||||
"notifications.policy.filter_limited_accounts_title": "Уліковыя запісы пад мадэрацыяй",
|
||||
"notifications.policy.filter_new_accounts.hint": "Створаныя на працягу {days, plural, one {апошняга # дня} few {апошніх # дзён} many {апошніх # дзён} other {апошняй # дня}}",
|
||||
"notifications.policy.filter_new_accounts_title": "Новыя ўліковыя запісы",
|
||||
"notifications.policy.filter_not_followers_hint": "Уключаючы людзей, якія падпісаны на вас менш, чым {days, plural, one {# дзень} few {# дні} many {# дзён} other {# дня}}",
|
||||
"notifications.policy.filter_not_followers_title": "Людзі, якія не падпісаны на вас",
|
||||
"notifications.policy.filter_not_following_hint": "Пакуль вы не пацвердзіце іх уручную",
|
||||
"notifications.policy.filter_not_following_title": "Людзі, на якіх вы не падпісаны",
|
||||
"notifications.policy.filter_private_mentions_hint": "Фільтруецца за выключэннем адказу на вашае згадванне ці калі вы падпісаны на адпраўніка",
|
||||
"notifications.policy.filter_private_mentions_title": "Непажаданыя асаблівыя згадванні",
|
||||
"notifications.policy.filter_not_following_title": "Людзі, на якіх Вы не падпісаныя",
|
||||
"notifications.policy.filter_private_mentions_hint": "Фільтруецца, за выключэннем адказу на Вашае згадванне ці калі Вы падпісаныя на адпраўніка",
|
||||
"notifications.policy.filter_private_mentions_title": "Непажаданыя прыватныя згадванні",
|
||||
"notifications.policy.title": "Наладзіць апавяшчэнні ад…",
|
||||
"notifications_permission_banner.enable": "Уключыць апавяшчэнні на працоўным стале",
|
||||
"notifications_permission_banner.how_to_control": "Каб атрымліваць апавяшчэнні, калі Mastodon не адкрыты, уключыце апавяшчэнні працоўнага стала. Вы зможаце дакладна кантраляваць, якія падзеі будуць ствараць апавяшчэнні з дапамогай {icon} кнопкі, як толькі яны будуць уключаны.",
|
||||
"notifications_permission_banner.title": "Не прапусціце нічога",
|
||||
"onboarding.follows.back": "Назад",
|
||||
"onboarding.follows.done": "Гатова",
|
||||
"onboarding.follows.empty": "На жаль, зараз немагчыма паказаць вынікі. Вы можаце паспрабаваць выкарыстоўваць пошук і праглядзець старонку агляду, каб знайсці людзей, на якіх можна падпісацца, або паўтарыце спробу пазней.",
|
||||
"onboarding.follows.empty": "На жаль, зараз немагчыма паказаць вынікі. Вы можаце паспрабаваць выкарыстоўваць пошук і праглядзець старонку агляду, каб знайсці людзей, на якіх можна падпісацца, або паўтарыць спробу пазней.",
|
||||
"onboarding.follows.search": "Пошук",
|
||||
"onboarding.follows.title": "Падпішыцеся на некага, каб пачаць",
|
||||
"onboarding.profile.discoverable": "Зрабіць мой профіль бачным",
|
||||
"onboarding.profile.discoverable_hint": "Калі вы звяртаецеся да адкрытасці на Mastodon, вашы паведамленні могуць з'яўляцца ў выніках пошуку і тэндэнцый, а ваш профіль можа быць прапанаваны людзям з такімі ж інтарэсамі.",
|
||||
"onboarding.profile.discoverable_hint": "Калі Вы звяртаецеся да адкрытасці на Mastodon, Вашы допісы могуць з'яўляцца ў выніках пошуку і трэндах, а Ваш профіль можа быць прапанаваны людзям з такімі ж інтарэсамі.",
|
||||
"onboarding.profile.display_name": "Бачнае імя",
|
||||
"onboarding.profile.display_name_hint": "Ваша поўнае імя або ваш псеўданім…",
|
||||
"onboarding.profile.note": "Біяграфія",
|
||||
|
|
@ -662,7 +718,7 @@
|
|||
"onboarding.profile.title": "Налады профілю",
|
||||
"onboarding.profile.upload_avatar": "Загрузіць фота профілю",
|
||||
"onboarding.profile.upload_header": "Загрузіць шапку профілю",
|
||||
"password_confirmation.exceeds_maxlength": "Пароль пацьверджання перавышае максімальна дапушчальную даўжыню",
|
||||
"password_confirmation.exceeds_maxlength": "Пароль пацвярджэння перавышае максімальна дапушчальную даўжыню",
|
||||
"password_confirmation.mismatching": "Пароль пацьверджання не супадае",
|
||||
"picture_in_picture.restore": "Вярніце назад",
|
||||
"poll.closed": "Закрыта",
|
||||
|
|
@ -682,7 +738,7 @@
|
|||
"privacy.private.short": "Падпісчыкі",
|
||||
"privacy.public.long": "Усе, хто ёсць і каго няма ў Mastodon",
|
||||
"privacy.public.short": "Публічны",
|
||||
"privacy.unlisted.additional": "Паводзіць сябе гэтак жа, як і публічны, за выключэннем таго, што пост не будзе адлюстроўвацца ў жывой стужцы, хэштэгах, аглядзе або ў пошуку Mastodon, нават калі вы ўключылі бачнасць у пошуку ў наладах.",
|
||||
"privacy.unlisted.additional": "Паводзіць сябе гэтак жа, як і публічны, за выключэннем таго, што допіс не будзе адлюстроўвацца ў жывой стужцы, хэштэгах, аглядзе або ў пошуку Mastodon, нават калі Вы ўключылі бачнасць у пошуку ў наладах.",
|
||||
"privacy.unlisted.long": "Менш фанфар ад алгарытмаў",
|
||||
"privacy.unlisted.short": "Ціхі публічны",
|
||||
"privacy_policy.last_updated": "Адноўлена {date}",
|
||||
|
|
@ -706,7 +762,7 @@
|
|||
"reply_indicator.cancel": "Скасаваць",
|
||||
"reply_indicator.poll": "Апытанне",
|
||||
"report.block": "Заблакіраваць",
|
||||
"report.block_explanation": "Вы перастанеце бачыць допісы гэтага карыстальніка. Ён не зможа сачыць за вамі і бачыць вашы допісы. Ён зможа зразумець, што яго заблакіравалі.",
|
||||
"report.block_explanation": "Вы перастанеце бачыць допісы гэтага карыстальніка. Ён не зможа сачыць за Вамі і бачыць Вашы допісы. Ён зможа зразумець, што яго заблакіравалі.",
|
||||
"report.categories.legal": "Звязанае з правам",
|
||||
"report.categories.other": "Іншае",
|
||||
"report.categories.spam": "Спам",
|
||||
|
|
@ -720,9 +776,9 @@
|
|||
"report.forward": "Пераслаць на {target}",
|
||||
"report.forward_hint": "Гэты ўліковы запіс з іншага сервера. Даслаць ананімную копію скаргі і туды?",
|
||||
"report.mute": "Ігнараваць",
|
||||
"report.mute_explanation": "Вы не будзеце бачыць допісы гэтага карыстальніка. Ён усё яшчэ зможа сачыць за вамі і бачыць вашы допісы, не ведаючы, што яго ігнаруюць.",
|
||||
"report.mute_explanation": "Вы не будзеце бачыць допісы гэтага карыстальніка. Ён усё яшчэ зможа сачыць за Вамі і бачыць Вашы допісы, не ведаючы, што яго ігнаруюць.",
|
||||
"report.next": "Далей",
|
||||
"report.placeholder": "Дадатковы каментар",
|
||||
"report.placeholder": "Дадатковыя каментарыі",
|
||||
"report.reasons.dislike": "Мне ён не падабаецца",
|
||||
"report.reasons.dislike_description": "Гэта тое, што Вы не хочаце бачыць",
|
||||
"report.reasons.legal": "Гэта незаконна",
|
||||
|
|
@ -739,9 +795,9 @@
|
|||
"report.statuses.title": "Ці ёсць допісы, каб падмацаваць гэтую скаргу?",
|
||||
"report.submit": "Адправіць",
|
||||
"report.target": "Скарга на {target}",
|
||||
"report.thanks.take_action": "Вось вашыя варыянты кантролю над тым, што вы бачыце в Mastodon:",
|
||||
"report.thanks.take_action_actionable": "Пакуль мы разглядаем яе, вы можаце распачаць дзеянні супраць @{name}:",
|
||||
"report.thanks.title": "Ці хочаце вы бачыць гэта?",
|
||||
"report.thanks.take_action": "Вось Вашыя варыянты кантролю над тым, што Вы бачыце в Mastodon:",
|
||||
"report.thanks.take_action_actionable": "Пакуль мы разглядаем яе, Вы можаце распачаць дзеянні супраць @{name}:",
|
||||
"report.thanks.title": "Ці хочаце Вы бачыць гэта?",
|
||||
"report.thanks.title_actionable": "Дзякуем за зварот, мы разбяромся з гэтым.",
|
||||
"report.unfollow": "Адпісацца ад @{name}",
|
||||
"report.unfollow_explanation": "Вы падпісаныя на гэты ўліковы запіс. Каб не бачыць допісы з яго ў вашай стужцы, адпішыцеся.",
|
||||
|
|
@ -755,6 +811,7 @@
|
|||
"report_notification.categories.violation": "Парушэнне правілаў",
|
||||
"report_notification.categories.violation_sentence": "парушэнне правілаў",
|
||||
"report_notification.open": "Адкрыць скаргу",
|
||||
"search.clear": "Ачысціць пошук",
|
||||
"search.no_recent_searches": "Гісторыя пошуку пустая",
|
||||
"search.placeholder": "Пошук",
|
||||
"search.quick_action.account_search": "Супадзенне профіляў {x}",
|
||||
|
|
@ -782,10 +839,10 @@
|
|||
"server_banner.about_active_users": "Людзі, якія карыстаюцца гэтым сервера на працягу апошніх 30 дзён (Штомесячна Актыўныя Карыстальнікі)",
|
||||
"server_banner.active_users": "актыўныя карыстальнікі",
|
||||
"server_banner.administered_by": "Адміністратар:",
|
||||
"server_banner.is_one_of_many": "{domain} - гэта адзін з многіх незалежных сервераў Mastodon, якія вы можаце выкарыстоўваць для ўдзелу ў fediverse.",
|
||||
"server_banner.is_one_of_many": "{domain} - гэта адзін з многіх незалежных сервераў Mastodon, які Вы можаце выкарыстоўваць для ўдзелу ў федэральным сусвеце.",
|
||||
"server_banner.server_stats": "Статыстыка сервера:",
|
||||
"sign_in_banner.create_account": "Стварыць уліковы запіс",
|
||||
"sign_in_banner.follow_anyone": "Сачыце за кім заўгодна ва ўсім fediverse і глядзіце ўсё ў храналагічным парадку. Ніякіх алгарытмаў, рэкламы або клікбэйту.",
|
||||
"sign_in_banner.follow_anyone": "Падпісвайцеся на каго захочаце ва ўсім федэральным сусвеце і глядзіце ўсё ў храналагічным парадку. Ніякіх алгарытмаў, рэкламы або клікбэйту.",
|
||||
"sign_in_banner.mastodon_is": "Mastodon - лепшы спосаб быць у курсе ўсяго, што адбываецца.",
|
||||
"sign_in_banner.sign_in": "Увайсці",
|
||||
"sign_in_banner.sso_redirect": "Уваход ці рэгістрацыя",
|
||||
|
|
@ -795,7 +852,9 @@
|
|||
"status.block": "Заблакаваць @{name}",
|
||||
"status.bookmark": "Дадаць закладку",
|
||||
"status.cancel_reblog_private": "Прыбраць",
|
||||
"status.cannot_reblog": "Гэты пост нельга пашырыць",
|
||||
"status.cannot_reblog": "Гэты допіс нельга пашырыць",
|
||||
"status.context.load_new_replies": "Даступныя новыя адказы",
|
||||
"status.context.loading": "Правяраюцца новыя адказы",
|
||||
"status.continued_thread": "Працяг ланцужка",
|
||||
"status.copy": "Скапіраваць спасылку на допіс",
|
||||
"status.delete": "Выдаліць",
|
||||
|
|
@ -807,7 +866,7 @@
|
|||
"status.edited_x_times": "Рэдагавана {count, plural, one {{count} раз} few {{count} разы} many {{count} разоў} other {{count} разу}}",
|
||||
"status.embed": "Атрымаць убудаваны код",
|
||||
"status.favourite": "Упадабанае",
|
||||
"status.favourites": "{count, plural, one {# упадабанае} few {# упадабаныя} many {# упадабаных} other {# упадабанага}}",
|
||||
"status.favourites": "{count, plural, one {упадабанне} few {упадабанні} other {упадабанняў}}",
|
||||
"status.filter": "Фільтраваць гэты допіс",
|
||||
"status.history.created": "Створана {name} {date}",
|
||||
"status.history.edited": "Адрэдагавана {name} {date}",
|
||||
|
|
@ -821,19 +880,28 @@
|
|||
"status.mute_conversation": "Ігнараваць размову",
|
||||
"status.open": "Разгарнуць гэты допіс",
|
||||
"status.pin": "Замацаваць у профілі",
|
||||
"status.quote_error.filtered": "Схавана адным з Вашых фільтраў",
|
||||
"status.quote_error.not_available": "Допіс недаступны",
|
||||
"status.quote_error.pending_approval": "Допіс чакае пацвярджэння",
|
||||
"status.quote_error.pending_approval_popout.body": "Допісы, якія былі цытаваныя паміж серверамі Fediverse, могуць доўга загружацца, паколькі розныя серверы маюць розныя пратаколы.",
|
||||
"status.quote_error.pending_approval_popout.title": "Цытаваны допіс чакае пацвярджэння? Захоўвайце спакой",
|
||||
"status.quote_policy_change": "Змяніць, хто можа цытаваць",
|
||||
"status.quote_post_author": "Цытаваў допіс @{name}",
|
||||
"status.read_more": "Чытаць болей",
|
||||
"status.reblog": "Пашырыць",
|
||||
"status.reblog_private": "Пашырыць з першапачатковай бачнасцю",
|
||||
"status.reblogged_by": "{name} пашырыў(-ла)",
|
||||
"status.reblogs": "{count, plural, one {# пашырэнне} few {# пашырэнні} many {# пашырэнняў} other {# пашырэння}}",
|
||||
"status.reblogged_by": "Карыстальнік {name} пашырыў",
|
||||
"status.reblogs": "{count, plural, one {пашырэнне} few {пашырэнні} many {пашырэнняў} other {пашырэння}}",
|
||||
"status.reblogs.empty": "Гэты допіс яшчэ ніхто не пашырыў. Калі гэта адбудзецца, гэтых людзей будзе бачна тут.",
|
||||
"status.redraft": "Выдаліць і паправіць",
|
||||
"status.redraft": "Выдаліць і перапісаць",
|
||||
"status.remove_bookmark": "Выдаліць закладку",
|
||||
"status.remove_favourite": "Выдаліць з упадабаных",
|
||||
"status.replied_in_thread": "Адказаў у ланцужку",
|
||||
"status.replied_to": "Адказаў {name}",
|
||||
"status.reply": "Адказаць",
|
||||
"status.replyAll": "Адказаць у ланцугу",
|
||||
"status.report": "Паскардзіцца на @{name}",
|
||||
"status.revoke_quote": "Выдаліць мой допіс з допісу @{name}",
|
||||
"status.sensitive_warning": "Уражвальны змест",
|
||||
"status.share": "Абагуліць",
|
||||
"status.show_less_all": "Згарнуць усё",
|
||||
|
|
@ -853,7 +921,9 @@
|
|||
"tabs_bar.notifications": "Апавяшчэнні",
|
||||
"tabs_bar.publish": "Новы допіс",
|
||||
"tabs_bar.search": "Пошук",
|
||||
"terms_of_service.effective_as_of": "Дзейнічае да {date}",
|
||||
"terms_of_service.title": "Умовы выкарыстання",
|
||||
"terms_of_service.upcoming_changes_on": "Змены, якія адбудуцца {date}",
|
||||
"time_remaining.days": "{number, plural, one {застаўся # дзень} few {засталося # дні} many {засталося # дзён} other {засталося # дня}}",
|
||||
"time_remaining.hours": "{number, plural, one {засталася # гадзіна} few {засталося # гадзіны} many {засталося # гадзін} other {засталося # гадзіны}}",
|
||||
"time_remaining.minutes": "{number, plural, one {засталася # хвіліна} few {засталося # хвіліны} many {засталося # хвілін} other {засталося # хвіліны}}",
|
||||
|
|
@ -861,7 +931,7 @@
|
|||
"time_remaining.seconds": "{number, plural, one {засталася # секунда} few {засталося # секунды} many {засталося # секунд} other {засталося # секунды}}",
|
||||
"trends.counter_by_accounts": "{count, plural, one {{counter} чалавек} few {{counter} чалавекі} many {{counter} людзей} other {{counter} чалавек}} за {days, plural, one {{days} апошні дзень} few {{days} апошнія дні} many {{days} апошніх дзён} other {{days} апошніх дзён}}",
|
||||
"trends.trending_now": "Актуальнае",
|
||||
"ui.beforeunload": "Ваш чарнавік знішчыцца калі вы пакінеце Mastodon.",
|
||||
"ui.beforeunload": "Ваш чарнавік будзе страчаны, калі Вы пакінеце Mastodon.",
|
||||
"units.short.billion": "{count} млрд.",
|
||||
"units.short.million": "{count} міл.",
|
||||
"units.short.thousand": "{count} тыс.",
|
||||
|
|
@ -869,6 +939,11 @@
|
|||
"upload_button.label": "Дадаць выяву, відэа- ці аўдыяфайл",
|
||||
"upload_error.limit": "Перавышана колькасць файлаў.",
|
||||
"upload_error.poll": "Немагчыма прымацаваць файл да апытання.",
|
||||
"upload_form.drag_and_drop.instructions": "Каб абраць медыя ўлажэнне, націсніце прабел ці Enter. Падчас перасоўвання выкарыстоўвайце кнопкі са стрэлкамі, каб пасунуць медыя далучэнне ў любым напрамку. Націсніце прабел ці Enter зноў, каб перасунуць медыя далучэнне ў новае месца, або Escape для адмены.",
|
||||
"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_over": "Медыя ўлажэнне {item} перасунутае.",
|
||||
"upload_form.drag_and_drop.on_drag_start": "Абранае медыя ўлажэнне {item}.",
|
||||
"upload_form.edit": "Рэдагаваць",
|
||||
"upload_progress.label": "Запампоўванне...",
|
||||
"upload_progress.processing": "Апрацоўка…",
|
||||
|
|
@ -886,5 +961,17 @@
|
|||
"video.skip_forward": "Праматаць уперад",
|
||||
"video.unmute": "Уключыць гук",
|
||||
"video.volume_down": "Паменшыць гучнасць",
|
||||
"video.volume_up": "Павялічыць гучнасць"
|
||||
"video.volume_up": "Павялічыць гучнасць",
|
||||
"visibility_modal.button_title": "Вызначыць бачнасць",
|
||||
"visibility_modal.header": "Бачнасць і ўзаемадзеянне",
|
||||
"visibility_modal.helper.direct_quoting": "Прыватныя згадванні нельга цытаваць.",
|
||||
"visibility_modal.helper.privacy_editing": "Апублікаваным допісам нельга змяняць бачнасць.",
|
||||
"visibility_modal.helper.private_quoting": "Допісы для падпісчыкаў нельга цытаваць.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Калі людзі працытуюць Вас, іх допіс таксама будзе схаваны ад стужкі трэндаў.",
|
||||
"visibility_modal.instructions": "Кантралюйце, хто можа ўзаемадзейнічаць з Вашым допісам. Глабальныя налады можна знайсці ў <link>Налады > Іншае</link>.",
|
||||
"visibility_modal.privacy_label": "Прыватнасць",
|
||||
"visibility_modal.quote_followers": "Толькі падпісчыкі",
|
||||
"visibility_modal.quote_label": "Змяніць, хто можа цытаваць",
|
||||
"visibility_modal.quote_nobody": "Ніхто",
|
||||
"visibility_modal.quote_public": "Усе"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"about.blocks": "Модерирани сървъри",
|
||||
"about.contact": "За контакти:",
|
||||
"about.default_locale": "По подразбиране",
|
||||
"about.disclaimer": "Mastodon е безплатен софтуер с отворен изходен код и търговска марка на Mastodon gGmbH.",
|
||||
"about.domain_blocks.no_reason_available": "Няма налична причина",
|
||||
"about.domain_blocks.preamble": "Mastodon обикновено позволява да разглеждате съдържание и да взаимодействате с други потребители от всякакви сървъри във Федивселената. Има изключения, направени конкретно за този сървър.",
|
||||
|
|
@ -244,6 +245,9 @@
|
|||
"confirmations.remove_from_followers.confirm": "Премахване на последовател",
|
||||
"confirmations.remove_from_followers.message": "{name} ще спре да ви следва. Наистина ли искате да продължите?",
|
||||
"confirmations.remove_from_followers.title": "Премахвате ли последовател?",
|
||||
"confirmations.revoke_quote.confirm": "Премахване на публикация",
|
||||
"confirmations.revoke_quote.message": "Действието е неотменимо.",
|
||||
"confirmations.revoke_quote.title": "Премахвате ли публикацията?",
|
||||
"confirmations.unfollow.confirm": "Без следване",
|
||||
"confirmations.unfollow.message": "Наистина ли искате вече да не следвате {name}?",
|
||||
"confirmations.unfollow.title": "Спирате ли да следвате потребителя?",
|
||||
|
|
@ -288,6 +292,7 @@
|
|||
"domain_pill.your_handle": "Вашият адрес:",
|
||||
"domain_pill.your_server": "Цифровият ви дом, където живеят всичките ви публикации. Не харесвате ли този? Прехвърляте се на сървъри по всяко време и докарвате последователите си също.",
|
||||
"domain_pill.your_username": "Неповторимият ви идентификатор на този сървър. Възможно е да се намерят потребители със същото потребителско име на други сървъри.",
|
||||
"dropdown.empty": "Изберете възможност",
|
||||
"embed.instructions": "Вградете публикацията в уебсайта си, копирайки кода долу.",
|
||||
"embed.preview": "Ето как ще изглежда:",
|
||||
"emoji_button.activity": "Дейност",
|
||||
|
|
@ -493,6 +498,8 @@
|
|||
"keyboard_shortcuts.translate": "за превод на публикация",
|
||||
"keyboard_shortcuts.unfocus": "Разфокусиране на текстовото поле за съставяне/търсене",
|
||||
"keyboard_shortcuts.up": "Преместване нагоре в списъка",
|
||||
"learn_more_link.got_it": "Разбрах",
|
||||
"learn_more_link.learn_more": "Научете повече",
|
||||
"lightbox.close": "Затваряне",
|
||||
"lightbox.next": "Напред",
|
||||
"lightbox.previous": "Назад",
|
||||
|
|
@ -587,6 +594,7 @@
|
|||
"notification.label.mention": "Споменаване",
|
||||
"notification.label.private_mention": "Частно споменаване",
|
||||
"notification.label.private_reply": "Личен отговор",
|
||||
"notification.label.quote": "{name} цитира ваша публикация",
|
||||
"notification.label.reply": "Отговор",
|
||||
"notification.mention": "Споменаване",
|
||||
"notification.mentioned_you": "{name} ви спомена",
|
||||
|
|
@ -644,6 +652,7 @@
|
|||
"notifications.column_settings.mention": "Споменавания:",
|
||||
"notifications.column_settings.poll": "Резултати от анкета:",
|
||||
"notifications.column_settings.push": "Изскачащи известия",
|
||||
"notifications.column_settings.quote": "Цитати:",
|
||||
"notifications.column_settings.reblog": "Подсилвания:",
|
||||
"notifications.column_settings.show": "Показване в колоната",
|
||||
"notifications.column_settings.sound": "Пускане на звук",
|
||||
|
|
@ -834,6 +843,8 @@
|
|||
"status.bookmark": "Отмятане",
|
||||
"status.cancel_reblog_private": "Край на подсилването",
|
||||
"status.cannot_reblog": "Публикацията не може да се подсилва",
|
||||
"status.context.load_new_replies": "Има нови отговори",
|
||||
"status.context.loading": "Проверка за още отговори",
|
||||
"status.continued_thread": "Продължена нишка",
|
||||
"status.copy": "Копиране на връзката към публикация",
|
||||
"status.delete": "Изтриване",
|
||||
|
|
@ -860,6 +871,10 @@
|
|||
"status.open": "Разширяване на публикацията",
|
||||
"status.pin": "Закачане в профила",
|
||||
"status.quote_error.filtered": "Скрито поради един от филтрите ви",
|
||||
"status.quote_error.not_available": "Неналична публикация",
|
||||
"status.quote_error.pending_approval": "Публикацията чака одобрение",
|
||||
"status.quote_policy_change": "Промяна кой може да цитира",
|
||||
"status.quote_post_author": "Цитирах публикация от @{name}",
|
||||
"status.read_more": "Още за четене",
|
||||
"status.reblog": "Подсилване",
|
||||
"status.reblog_private": "Подсилване с оригиналната видимост",
|
||||
|
|
@ -874,6 +889,7 @@
|
|||
"status.reply": "Отговор",
|
||||
"status.replyAll": "Отговор на нишка",
|
||||
"status.report": "Докладване на @{name}",
|
||||
"status.revoke_quote": "Премахване на моя публикация от публикацията на @{name}",
|
||||
"status.sensitive_warning": "Деликатно съдържание",
|
||||
"status.share": "Споделяне",
|
||||
"status.show_less_all": "Показване на по-малко за всички",
|
||||
|
|
@ -933,5 +949,15 @@
|
|||
"video.skip_forward": "Прескок напред",
|
||||
"video.unmute": "Без заглушаване",
|
||||
"video.volume_down": "Намаляване на звука",
|
||||
"video.volume_up": "Увеличаване на звука"
|
||||
"video.volume_up": "Увеличаване на звука",
|
||||
"visibility_modal.button_title": "Задаване на видимост",
|
||||
"visibility_modal.header": "Видимост и взаимодействие",
|
||||
"visibility_modal.helper.direct_quoting": "Частни споменавания не може да се цитират.",
|
||||
"visibility_modal.helper.privacy_editing": "Публикуваните публикации не може да променят видимостта си.",
|
||||
"visibility_modal.instructions": "Управлявайте кой може да взаимодейства с тази публикация. Глобалните настройки може да се намерят под <link>Предпочитания> Друго</link>.",
|
||||
"visibility_modal.privacy_label": "Поверителност",
|
||||
"visibility_modal.quote_followers": "Само последователи",
|
||||
"visibility_modal.quote_label": "Промяна кой може да цитира",
|
||||
"visibility_modal.quote_nobody": "Никого",
|
||||
"visibility_modal.quote_public": "Някой"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -637,5 +637,9 @@
|
|||
"video.fullscreen": "Skramm a-bezh",
|
||||
"video.hide": "Kuzhat ar video",
|
||||
"video.pause": "Paouez",
|
||||
"video.play": "Lenn"
|
||||
"video.play": "Lenn",
|
||||
"visibility_modal.privacy_label": "Prevezded",
|
||||
"visibility_modal.quote_followers": "Tud koumanantet hepken",
|
||||
"visibility_modal.quote_nobody": "Den ebet",
|
||||
"visibility_modal.quote_public": "Pep den"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -245,7 +245,9 @@
|
|||
"confirmations.remove_from_followers.confirm": "Elimina el seguidor",
|
||||
"confirmations.remove_from_followers.message": "{name} deixarà de seguir-vos. Tirem endavant?",
|
||||
"confirmations.remove_from_followers.title": "Eliminem el seguidor?",
|
||||
"confirmations.revoke_quote.confirm": "Eliminar la publicació",
|
||||
"confirmations.revoke_quote.message": "Aquesta acció no es pot desfer.",
|
||||
"confirmations.revoke_quote.title": "Eliminar la publicació?",
|
||||
"confirmations.unfollow.confirm": "Deixa de seguir",
|
||||
"confirmations.unfollow.message": "Segur que vols deixar de seguir {name}?",
|
||||
"confirmations.unfollow.title": "Deixar de seguir l'usuari?",
|
||||
|
|
@ -290,6 +292,7 @@
|
|||
"domain_pill.your_handle": "El vostre identificador:",
|
||||
"domain_pill.your_server": "La vostra llar digital, on són totes les vostres publicacions. No us agrada aquesta? Canvieu de servidor quan vulgueu i emporteu-vos els vostres seguidors.",
|
||||
"domain_pill.your_username": "El vostre identificador únic en aquest servidor. Hi pot haver usuaris amb el mateix nom a diferents servidors.",
|
||||
"dropdown.empty": "Seleccioneu una opció",
|
||||
"embed.instructions": "Incrusta aquest tut a la teva pàgina web copiant el codi següent.",
|
||||
"embed.preview": "Aquest aspecte tindrà:",
|
||||
"emoji_button.activity": "Activitat",
|
||||
|
|
@ -876,11 +879,13 @@
|
|||
"status.mute_conversation": "Silencia la conversa",
|
||||
"status.open": "Amplia el tut",
|
||||
"status.pin": "Fixa en el perfil",
|
||||
"status.quote.cancel": "Canceŀlar la citació",
|
||||
"status.quote_error.filtered": "No es mostra a causa d'un dels vostres filtres",
|
||||
"status.quote_error.not_available": "Publicació no disponible",
|
||||
"status.quote_error.pending_approval": "Publicació pendent",
|
||||
"status.quote_error.pending_approval_popout.body": "Les citacions compartides a través del Fediverse poden trigar en aparèixer, perquè diferents servidors tenen diferents protocols.",
|
||||
"status.quote_error.pending_approval_popout.title": "Publicació pendent? Mantinguem la calma",
|
||||
"status.quote_policy_change": "Canvieu qui us pot citar",
|
||||
"status.quote_post_author": "S'ha citat una publicació de @{name}",
|
||||
"status.read_more": "Més informació",
|
||||
"status.reblog": "Impulsa",
|
||||
|
|
@ -956,5 +961,17 @@
|
|||
"video.skip_forward": "Salta endavant",
|
||||
"video.unmute": "Deixa de silenciar",
|
||||
"video.volume_down": "Abaixa el volum",
|
||||
"video.volume_up": "Apuja el volum"
|
||||
"video.volume_up": "Apuja el volum",
|
||||
"visibility_modal.button_title": "Establiu la visibilitat",
|
||||
"visibility_modal.header": "Visibilitat i interacció",
|
||||
"visibility_modal.helper.direct_quoting": "No es poden citar les mencions privades.",
|
||||
"visibility_modal.helper.privacy_editing": "No es pot canviar la visibilitat de les publicacions ja fetes.",
|
||||
"visibility_modal.helper.private_quoting": "No es poden citar les publicacions només per a seguidors.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Quan la gent et citi les seves publicacions estaran amagades de les línies de temps de tendències.",
|
||||
"visibility_modal.instructions": "Controleu qui pot interactuar amb aquesta publicació. La configuració global es troba a <link>Preferències>Altres</link>.",
|
||||
"visibility_modal.privacy_label": "Privacitat",
|
||||
"visibility_modal.quote_followers": "Només seguidors",
|
||||
"visibility_modal.quote_label": "Canvieu qui us pot citar",
|
||||
"visibility_modal.quote_nobody": "Ningú",
|
||||
"visibility_modal.quote_public": "Qualsevol"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -292,6 +292,7 @@
|
|||
"domain_pill.your_handle": "Tvůj handle:",
|
||||
"domain_pill.your_server": "Tvůj digitální domov, kde žijí všechny tvé příspěvky. Nelíbí se ti? Kdykoliv se přesuň na jiný server a vezmi si sebou i své sledující.",
|
||||
"domain_pill.your_username": "Tvůj jedinečný identifikátor na tomto serveru. Je možné najít uživatele se stejným uživatelským jménem na jiných serverech.",
|
||||
"dropdown.empty": "Vyberte možnost",
|
||||
"embed.instructions": "Pro přidání příspěvku na vaši webovou stránku zkopírujte níže uvedený kód.",
|
||||
"embed.preview": "Takhle to bude vypadat:",
|
||||
"emoji_button.activity": "Aktivita",
|
||||
|
|
@ -510,7 +511,7 @@
|
|||
"lightbox.zoom_out": "Přizpůsobit velikost",
|
||||
"limited_account_hint.action": "Přesto profil zobrazit",
|
||||
"limited_account_hint.title": "Tento profil byl skryt moderátory {domain}.",
|
||||
"link_preview.author": "Podle {name}",
|
||||
"link_preview.author": "Od {name}",
|
||||
"link_preview.more_from_author": "Více od {name}",
|
||||
"link_preview.shares": "{count, plural, one {{counter} příspěvek} few {{counter} příspěvky} many {{counter} příspěvků} other {{counter} příspěvků}}",
|
||||
"lists.add_member": "Přidat",
|
||||
|
|
@ -884,6 +885,7 @@
|
|||
"status.quote_error.pending_approval": "Příspěvek čeká na schválení",
|
||||
"status.quote_error.pending_approval_popout.body": "Zobrazení citátů sdílených napříč Fediversem může chvíli trvat, protože různé servery používají různé protokoly.",
|
||||
"status.quote_error.pending_approval_popout.title": "Příspěvek čeká na schválení? Buďte klidní",
|
||||
"status.quote_policy_change": "Změňte, kdo může citovat",
|
||||
"status.quote_post_author": "Citovali příspěvek od @{name}",
|
||||
"status.read_more": "Číst více",
|
||||
"status.reblog": "Boostnout",
|
||||
|
|
@ -959,5 +961,17 @@
|
|||
"video.skip_forward": "Přeskočit vpřed",
|
||||
"video.unmute": "Zrušit ztlumení",
|
||||
"video.volume_down": "Snížit hlasitost",
|
||||
"video.volume_up": "Zvýšit hlasitost"
|
||||
"video.volume_up": "Zvýšit hlasitost",
|
||||
"visibility_modal.button_title": "Nastavit viditelnost",
|
||||
"visibility_modal.header": "Viditelnost a interakce",
|
||||
"visibility_modal.helper.direct_quoting": "Soukromé zmínky nemohou být citovány.",
|
||||
"visibility_modal.helper.privacy_editing": "Publikované příspěvky nemohou změnit svou viditelnost.",
|
||||
"visibility_modal.helper.private_quoting": "Nelze citovat příspěvky, které jsou pouze pro sledující.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Když vás lidé citují, jejich příspěvek bude v časové ose populárních příspěvků také skryt.",
|
||||
"visibility_modal.instructions": "Kontrolujte, kdo může interagovat s tímto příspěvkem. Globální nastavení můžete najít pod <link>Nastavení > Ostatní</link>.",
|
||||
"visibility_modal.privacy_label": "Soukromí",
|
||||
"visibility_modal.quote_followers": "Pouze sledující",
|
||||
"visibility_modal.quote_label": "Změňte, kdo může citovat",
|
||||
"visibility_modal.quote_nobody": "Nikdo",
|
||||
"visibility_modal.quote_public": "Kdokoliv"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -245,6 +245,9 @@
|
|||
"confirmations.remove_from_followers.confirm": "Dileu dilynwr",
|
||||
"confirmations.remove_from_followers.message": "Bydd {name} yn rhoi'r gorau i'ch dilyn. A ydych yn siŵr eich bod am fwrw ymlaen?",
|
||||
"confirmations.remove_from_followers.title": "Tynnu dilynwr?",
|
||||
"confirmations.revoke_quote.confirm": "Dileu'r postiad",
|
||||
"confirmations.revoke_quote.message": "Does dim modd dadwneud y weithred hon.",
|
||||
"confirmations.revoke_quote.title": "Dileu'r postiad?",
|
||||
"confirmations.unfollow.confirm": "Dad-ddilyn",
|
||||
"confirmations.unfollow.message": "Ydych chi'n siŵr eich bod am ddad-ddilyn {name}?",
|
||||
"confirmations.unfollow.title": "Dad-ddilyn defnyddiwr?",
|
||||
|
|
@ -289,6 +292,7 @@
|
|||
"domain_pill.your_handle": "Eich handlen:",
|
||||
"domain_pill.your_server": "Eich cartref digidol, lle mae'ch holl bostiadau'n byw. Ddim yn hoffi'r un hon? Trosglwyddwch weinyddion ar unrhyw adeg a dewch â'ch dilynwyr hefyd.",
|
||||
"domain_pill.your_username": "Eich dynodwr unigryw ar y gweinydd hwn. Mae'n bosibl dod o hyd i ddefnyddwyr gyda'r un enw defnyddiwr ar wahanol weinyddion.",
|
||||
"dropdown.empty": "Dewis dewis",
|
||||
"embed.instructions": "Gosodwch y post hwn ar eich gwefan drwy gopïo'r côd isod.",
|
||||
"embed.preview": "Dyma sut olwg fydd arno:",
|
||||
"emoji_button.activity": "Gweithgarwch",
|
||||
|
|
@ -498,6 +502,8 @@
|
|||
"keyboard_shortcuts.translate": "i gyfieithu postiad",
|
||||
"keyboard_shortcuts.unfocus": "Dad-ffocysu ardal cyfansoddi testun/chwilio",
|
||||
"keyboard_shortcuts.up": "Symud yn uwch yn y rhestr",
|
||||
"learn_more_link.got_it": "Iawn",
|
||||
"learn_more_link.learn_more": "Dysgu rhagor",
|
||||
"lightbox.close": "Cau",
|
||||
"lightbox.next": "Nesaf",
|
||||
"lightbox.previous": "Blaenorol",
|
||||
|
|
@ -558,7 +564,7 @@
|
|||
"navigation_bar.favourites": "Ffefrynnau",
|
||||
"navigation_bar.filters": "Geiriau wedi'u tewi",
|
||||
"navigation_bar.follow_requests": "Ceisiadau dilyn",
|
||||
"navigation_bar.followed_tags": "Hashnodau a ddilynir",
|
||||
"navigation_bar.followed_tags": "Hashnodau sy'n cael eu dilyn",
|
||||
"navigation_bar.follows_and_followers": "Yn dilyn a dilynwyr",
|
||||
"navigation_bar.import_export": "Mewnforio ac allforio",
|
||||
"navigation_bar.lists": "Rhestrau",
|
||||
|
|
@ -598,6 +604,7 @@
|
|||
"notification.label.mention": "Crybwyll",
|
||||
"notification.label.private_mention": "Crybwyll preifat",
|
||||
"notification.label.private_reply": "Ymateb preifat",
|
||||
"notification.label.quote": "Mae {name} wedi dyfynnu eich postiad",
|
||||
"notification.label.reply": "Ymateb",
|
||||
"notification.mention": "Crybwyll",
|
||||
"notification.mentioned_you": "Rydych wedi'ch crybwyll gan {name}",
|
||||
|
|
@ -655,6 +662,7 @@
|
|||
"notifications.column_settings.mention": "Crybwylliadau:",
|
||||
"notifications.column_settings.poll": "Canlyniadau pleidlais:",
|
||||
"notifications.column_settings.push": "Hysbysiadau gwthio",
|
||||
"notifications.column_settings.quote": "Dyfyniadau:",
|
||||
"notifications.column_settings.reblog": "Hybiau:",
|
||||
"notifications.column_settings.show": "Dangos yn y golofn",
|
||||
"notifications.column_settings.sound": "Chwarae sain",
|
||||
|
|
@ -845,6 +853,8 @@
|
|||
"status.bookmark": "Nod tudalen",
|
||||
"status.cancel_reblog_private": "Dadhybu",
|
||||
"status.cannot_reblog": "Does dim modd hybu'r postiad hwn",
|
||||
"status.context.load_new_replies": "Mae atebion newydd ar gael",
|
||||
"status.context.loading": "Yn chwilio am fwy o atebion",
|
||||
"status.continued_thread": "Edefyn parhaus",
|
||||
"status.copy": "Copïo dolen i'r post",
|
||||
"status.delete": "Dileu",
|
||||
|
|
@ -871,6 +881,12 @@
|
|||
"status.open": "Ehangu'r post hwn",
|
||||
"status.pin": "Pinio ar y proffil",
|
||||
"status.quote_error.filtered": "Wedi'i guddio oherwydd un o'ch hidlwyr",
|
||||
"status.quote_error.not_available": "Postiad ddim ar gael",
|
||||
"status.quote_error.pending_approval": "Postiad yn yr arfaeth",
|
||||
"status.quote_error.pending_approval_popout.body": "Gall dyfyniadau sy'n cael eu rhannu ar draws y Ffedysawd gymryd amser i'w dangos, gan fod gan wahanol weinyddion brotocolau gwahanol.",
|
||||
"status.quote_error.pending_approval_popout.title": "Dyfyniad yn aros? Amynedd :-)",
|
||||
"status.quote_policy_change": "Newid pwy all ddyfynnu",
|
||||
"status.quote_post_author": "Wedi dyfynnu postiad gan @{name}",
|
||||
"status.read_more": "Darllen rhagor",
|
||||
"status.reblog": "Hybu",
|
||||
"status.reblog_private": "Hybu i'r gynulleidfa wreiddiol",
|
||||
|
|
@ -885,6 +901,7 @@
|
|||
"status.reply": "Ymateb",
|
||||
"status.replyAll": "Ateb edefyn",
|
||||
"status.report": "Adrodd ar @{name}",
|
||||
"status.revoke_quote": "Dileu fy mhostiad o bostiad @{name}",
|
||||
"status.sensitive_warning": "Cynnwys sensitif",
|
||||
"status.share": "Rhannu",
|
||||
"status.show_less_all": "Dangos llai i bawb",
|
||||
|
|
@ -944,5 +961,17 @@
|
|||
"video.skip_forward": "Symud ymlaen",
|
||||
"video.unmute": "Dad-dewi",
|
||||
"video.volume_down": "Lefel sain i lawr",
|
||||
"video.volume_up": "Lefel sain i fyny"
|
||||
"video.volume_up": "Lefel sain i fyny",
|
||||
"visibility_modal.button_title": "Gosod gwelededd",
|
||||
"visibility_modal.header": "Gwelededd a rhyngweithio",
|
||||
"visibility_modal.helper.direct_quoting": "Does dim modd dyfynnu crybwylliadau preifat.",
|
||||
"visibility_modal.helper.privacy_editing": "Does dim modd newid gwelededd postiadau wedi'u cyhoeddi.",
|
||||
"visibility_modal.helper.private_quoting": "Does dim modd dyfynnu postiadau dilynwyr yn unig.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Pan fydd pobl yn eich dyfynnu, bydd eu postiad hefyd yn cael ei guddio rhag llinellau amser sy'n trendio.",
|
||||
"visibility_modal.instructions": "Rheolwch bwy all ryngweithio â'r postiad hwn. Mae modd dod o hyd i osodiadau eang o dan <link>Dewisiadau > Arall</link>.",
|
||||
"visibility_modal.privacy_label": "Preifatrwydd",
|
||||
"visibility_modal.quote_followers": "Dilynwyr yn unig",
|
||||
"visibility_modal.quote_label": "Newid pwy all ddyfynnu",
|
||||
"visibility_modal.quote_nobody": "Neb",
|
||||
"visibility_modal.quote_public": "Pawb"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -292,6 +292,7 @@
|
|||
"domain_pill.your_handle": "Dit handle:",
|
||||
"domain_pill.your_server": "Dit digitale hjem, hvor alle dine indlæg lever. Synes ikke om den her server? Du kan til enhver tid rykke over på en anden server og beholde dine følgere.",
|
||||
"domain_pill.your_username": "Din entydige identifikator på denne server. Det er muligt at finde brugere med samme brugernavn på forskellige servere.",
|
||||
"dropdown.empty": "Vælg en indstillingsmulighed",
|
||||
"embed.instructions": "Indlejr dette indlæg på din hjemmeside ved at kopiere nedenstående kode.",
|
||||
"embed.preview": "Sådan kommer det til at se ud:",
|
||||
"emoji_button.activity": "Aktivitet",
|
||||
|
|
@ -884,6 +885,7 @@
|
|||
"status.quote_error.pending_approval": "Afventende indlæg",
|
||||
"status.quote_error.pending_approval_popout.body": "Citater delt på tværs af Fediverset kan tage tid at vise, da forskellige servere har forskellige protokoller.",
|
||||
"status.quote_error.pending_approval_popout.title": "Afventende citat? Tag det roligt",
|
||||
"status.quote_policy_change": "Ændr hvem der kan citere",
|
||||
"status.quote_post_author": "Citerede et indlæg fra @{name}",
|
||||
"status.read_more": "Læs mere",
|
||||
"status.reblog": "Fremhæv",
|
||||
|
|
@ -899,7 +901,7 @@
|
|||
"status.reply": "Besvar",
|
||||
"status.replyAll": "Svar alle",
|
||||
"status.report": "Anmeld @{name}",
|
||||
"status.revoke_quote": "Fjern mit indlæg fra @{name}'s indlæg",
|
||||
"status.revoke_quote": "Fjern eget indlæg fra @{name}s indlæg",
|
||||
"status.sensitive_warning": "Følsomt indhold",
|
||||
"status.share": "Del",
|
||||
"status.show_less_all": "Vis mindre for alle",
|
||||
|
|
@ -959,5 +961,17 @@
|
|||
"video.skip_forward": "Overspring fremad",
|
||||
"video.unmute": "Slå lyd tl",
|
||||
"video.volume_down": "Lydstyrke ned",
|
||||
"video.volume_up": "Lydstyrke op"
|
||||
"video.volume_up": "Lydstyrke op",
|
||||
"visibility_modal.button_title": "Indstil synlighed",
|
||||
"visibility_modal.header": "Synlighed og interaktion",
|
||||
"visibility_modal.helper.direct_quoting": "Private omtaler kan ikke citeres.",
|
||||
"visibility_modal.helper.privacy_editing": "Publicerede indlægs synlighed kan ikke ændres.",
|
||||
"visibility_modal.helper.private_quoting": "Indlæg kun for følgere kan ikke citeres.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Når man citeres af andre, skjules deres indlæg også på tendenstidslinjer.",
|
||||
"visibility_modal.instructions": "Styr, hvem der kan interagere med dette indlæg. Globale indstillinger findes under <link>Præferencer > Andet</link>.",
|
||||
"visibility_modal.privacy_label": "Fortrolighed",
|
||||
"visibility_modal.quote_followers": "Kun følgere",
|
||||
"visibility_modal.quote_label": "Ændr hvem der kan citere",
|
||||
"visibility_modal.quote_nobody": "Ingen",
|
||||
"visibility_modal.quote_public": "Alle"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@
|
|||
"account.mute_short": "Stummschalten",
|
||||
"account.muted": "Stummgeschaltet",
|
||||
"account.muting": "Stummgeschaltet",
|
||||
"account.mutual": "Ihr folgt euch",
|
||||
"account.mutual": "Ihr folgt einander",
|
||||
"account.no_bio": "Keine Beschreibung verfügbar.",
|
||||
"account.open_original_page": "Ursprüngliche Seite öffnen",
|
||||
"account.posts": "Beiträge",
|
||||
|
|
@ -292,6 +292,7 @@
|
|||
"domain_pill.your_handle": "Deine Adresse:",
|
||||
"domain_pill.your_server": "Deine digitale Heimat. Hier „leben“ alle Beiträge von dir. Falls es dir hier nicht gefällt, kannst du jederzeit den Server wechseln und ebenso deine Follower übertragen.",
|
||||
"domain_pill.your_username": "Deine eindeutige Identität auf diesem Server. Es ist möglich, Profile mit dem gleichen Profilnamen auf verschiedenen Servern zu finden.",
|
||||
"dropdown.empty": "Option auswählen",
|
||||
"embed.instructions": "Du kannst diesen Beitrag auf deiner Website einbetten, indem du den nachfolgenden Code kopierst.",
|
||||
"embed.preview": "Vorschau:",
|
||||
"emoji_button.activity": "Aktivitäten",
|
||||
|
|
@ -879,11 +880,13 @@
|
|||
"status.mute_conversation": "Unterhaltung stummschalten",
|
||||
"status.open": "Beitrag öffnen",
|
||||
"status.pin": "Im Profil anheften",
|
||||
"status.quote.cancel": "Zitat abbrechen",
|
||||
"status.quote_error.filtered": "Ausgeblendet wegen eines deiner Filter",
|
||||
"status.quote_error.not_available": "Beitrag nicht verfügbar",
|
||||
"status.quote_error.pending_approval": "Beitragsveröffentlichung ausstehend",
|
||||
"status.quote_error.pending_approval_popout.body": "Zitierte Beiträge, die im Fediverse geteilt werden, benötigen einige Zeit, bis sie überall angezeigt werden, da die verschiedenen Server unterschiedliche Protokolle nutzen.",
|
||||
"status.quote_error.pending_approval_popout.title": "Zitierter Beitrag noch nicht freigegeben? Immer mit der Ruhe",
|
||||
"status.quote_policy_change": "Ändern, wer zitieren darf",
|
||||
"status.quote_post_author": "Zitierte einen Beitrag von @{name}",
|
||||
"status.read_more": "Gesamten Beitrag anschauen",
|
||||
"status.reblog": "Teilen",
|
||||
|
|
@ -959,5 +962,17 @@
|
|||
"video.skip_forward": "Vorspulen",
|
||||
"video.unmute": "Stummschaltung aufheben",
|
||||
"video.volume_down": "Leiser",
|
||||
"video.volume_up": "Lauter"
|
||||
"video.volume_up": "Lauter",
|
||||
"visibility_modal.button_title": "Sichtbarkeit festlegen",
|
||||
"visibility_modal.header": "Sichtbarkeit und Interaktion",
|
||||
"visibility_modal.helper.direct_quoting": "Private Erwähnungen können nicht zitiert werden.",
|
||||
"visibility_modal.helper.privacy_editing": "Die Sichtbarkeit bereits veröffentlichter Beiträge kann nachträglich nicht mehr geändert werden.",
|
||||
"visibility_modal.helper.private_quoting": "Beiträge, die nur für deine Follower bestimmt sind, können nicht zitiert werden.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Sollten dich andere zitieren, werden ihre zitierten Beiträge ebenfalls nicht in den Trends und öffentlichen Timelines angezeigt.",
|
||||
"visibility_modal.instructions": "Bestimme, wer mit diesem Beitrag interagieren darf. Allgemeingültige Einstellungen findest du unter <link>Einstellungen > Erweitert</link>.",
|
||||
"visibility_modal.privacy_label": "Datenschutz",
|
||||
"visibility_modal.quote_followers": "Nur Follower",
|
||||
"visibility_modal.quote_label": "Ändern, wer zitieren darf",
|
||||
"visibility_modal.quote_nobody": "Niemand",
|
||||
"visibility_modal.quote_public": "Alle"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -245,6 +245,9 @@
|
|||
"confirmations.remove_from_followers.confirm": "Αφαίρεση ακολούθου",
|
||||
"confirmations.remove_from_followers.message": "Ο χρήστης {name} θα σταματήσει να σε ακολουθεί. Σίγουρα θες να συνεχίσεις;",
|
||||
"confirmations.remove_from_followers.title": "Αφαίρεση ακολούθου;",
|
||||
"confirmations.revoke_quote.confirm": "Αφαίρεση ανάρτησης",
|
||||
"confirmations.revoke_quote.message": "Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.",
|
||||
"confirmations.revoke_quote.title": "Αφαίρεση ανάρτησης;",
|
||||
"confirmations.unfollow.confirm": "Άρση ακολούθησης",
|
||||
"confirmations.unfollow.message": "Σίγουρα θες να πάψεις να ακολουθείς τον/την {name};",
|
||||
"confirmations.unfollow.title": "Άρση ακολούθησης;",
|
||||
|
|
@ -289,6 +292,7 @@
|
|||
"domain_pill.your_handle": "Το πλήρες όνομα χρήστη σου:",
|
||||
"domain_pill.your_server": "Το ψηφιακό σου σπίτι, όπου ζουν όλες σου οι αναρτήσεις. Δε σ' αρέσει αυτός; Μετακινήσου σε διακομιστές ανά πάσα στιγμή και πάρε και τους ακόλουθούς σου.",
|
||||
"domain_pill.your_username": "Το μοναδικό σου αναγνωριστικό σε τούτο τον διακομιστή. Είναι πιθανό να βρεις χρήστες με το ίδιο όνομα χρήστη σε διαφορετικούς διακομιστές.",
|
||||
"dropdown.empty": "Διαλέξτε μια επιλογή",
|
||||
"embed.instructions": "Ενσωμάτωσε αυτή την ανάρτηση στην ιστοσελίδα σου αντιγράφοντας τον παρακάτω κώδικα.",
|
||||
"embed.preview": "Ορίστε πως θα φαίνεται:",
|
||||
"emoji_button.activity": "Δραστηριότητα",
|
||||
|
|
@ -881,6 +885,7 @@
|
|||
"status.quote_error.pending_approval": "Ανάρτηση σε αναμονή",
|
||||
"status.quote_error.pending_approval_popout.body": "Οι παραθέσεις που μοιράζονται στο Fediverse μπορεί να χρειαστούν χρόνο για να εμφανιστούν, καθώς διαφορετικοί διακομιστές έχουν διαφορετικά πρωτόκολλα.",
|
||||
"status.quote_error.pending_approval_popout.title": "Παράθεση σε εκκρεμότητα; Μείνετε ψύχραιμοι",
|
||||
"status.quote_policy_change": "Αλλάξτε ποιός μπορεί να κάνει παράθεση",
|
||||
"status.quote_post_author": "Παρατίθεται μια ανάρτηση από @{name}",
|
||||
"status.read_more": "Διάβασε περισότερα",
|
||||
"status.reblog": "Ενίσχυση",
|
||||
|
|
@ -896,6 +901,7 @@
|
|||
"status.reply": "Απάντησε",
|
||||
"status.replyAll": "Απάντησε στο νήμα συζήτησης",
|
||||
"status.report": "Αναφορά @{name}",
|
||||
"status.revoke_quote": "Αφαίρεση της ανάρτησης μου από την ανάρτηση του/της @{name}",
|
||||
"status.sensitive_warning": "Ευαίσθητο περιεχόμενο",
|
||||
"status.share": "Κοινοποίηση",
|
||||
"status.show_less_all": "Δείξε λιγότερο για όλες",
|
||||
|
|
@ -955,5 +961,17 @@
|
|||
"video.skip_forward": "Παράλειψη εμπρός",
|
||||
"video.unmute": "Άρση σίγασης",
|
||||
"video.volume_down": "Μείωση έντασης",
|
||||
"video.volume_up": "Αύξηση έντασης"
|
||||
"video.volume_up": "Αύξηση έντασης",
|
||||
"visibility_modal.button_title": "Ορισμός ορατότητας",
|
||||
"visibility_modal.header": "Ορατότητα και αλληλεπίδραση",
|
||||
"visibility_modal.helper.direct_quoting": "Ιδιωτικές επισημάνσεις δεν μπορούν να παρατεθούν.",
|
||||
"visibility_modal.helper.privacy_editing": "Δημοσιευμένες αναρτήσεις δεν μπορούν να αλλάξουν την ορατότητά τους.",
|
||||
"visibility_modal.helper.private_quoting": "Οι αναρτήσεις μόνο για ακολούθους δεν μπορούν να παρατεθούν.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Όταν οι άνθρωποι σας παραθέτουν, η ανάρτηση τους θα είναι επίσης κρυμμένη από τα δημοφιλή χρονοδιαγράμματα.",
|
||||
"visibility_modal.instructions": "Ελέγξτε ποιός μπορεί να αλληλεπιδράσει με αυτή την ανάρτηση. Οι καθολικές ρυθμίσεις μπορούν να βρεθούν κάτω από <link>Προτιμήσεις > Άλλα</link>.",
|
||||
"visibility_modal.privacy_label": "Απόρρητο",
|
||||
"visibility_modal.quote_followers": "Μόνο ακόλουθοι",
|
||||
"visibility_modal.quote_label": "Αλλάξτε ποιός μπορεί να κάνει παράθεση",
|
||||
"visibility_modal.quote_nobody": "Κανένας",
|
||||
"visibility_modal.quote_public": "Οποιοσδήποτε"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -292,6 +292,7 @@
|
|||
"domain_pill.your_handle": "Your handle:",
|
||||
"domain_pill.your_server": "Your digital home, where all of your posts live. Don’t like this one? Transfer servers at any time and bring your followers, too.",
|
||||
"domain_pill.your_username": "Your unique identifier on this server. It’s possible to find users with the same username on different servers.",
|
||||
"dropdown.empty": "Select an option",
|
||||
"embed.instructions": "Embed this post on your website by copying the code below.",
|
||||
"embed.preview": "Here is what it will look like:",
|
||||
"emoji_button.activity": "Activity",
|
||||
|
|
@ -879,11 +880,13 @@
|
|||
"status.mute_conversation": "Mute conversation",
|
||||
"status.open": "Expand this post",
|
||||
"status.pin": "Pin on profile",
|
||||
"status.quote.cancel": "Cancel quote",
|
||||
"status.quote_error.filtered": "Hidden due to one of your filters",
|
||||
"status.quote_error.not_available": "Post unavailable",
|
||||
"status.quote_error.pending_approval": "Post pending",
|
||||
"status.quote_error.pending_approval_popout.body": "Quotes shared across the Fediverse may take time to display, as different servers have different protocols.",
|
||||
"status.quote_error.pending_approval_popout.title": "Pending quote? Remain calm",
|
||||
"status.quote_policy_change": "Change who can quote",
|
||||
"status.quote_post_author": "Quoted a post by @{name}",
|
||||
"status.read_more": "Read more",
|
||||
"status.reblog": "Boost",
|
||||
|
|
@ -959,5 +962,17 @@
|
|||
"video.skip_forward": "Skip forward",
|
||||
"video.unmute": "Unmute",
|
||||
"video.volume_down": "Volume down",
|
||||
"video.volume_up": "Volume up"
|
||||
"video.volume_up": "Volume up",
|
||||
"visibility_modal.button_title": "Set visibility",
|
||||
"visibility_modal.header": "Visibility and interaction",
|
||||
"visibility_modal.helper.direct_quoting": "Private mentions can't be quoted.",
|
||||
"visibility_modal.helper.privacy_editing": "Published posts cannot change their visibility.",
|
||||
"visibility_modal.helper.private_quoting": "Follower-only posts can't be quoted.",
|
||||
"visibility_modal.helper.unlisted_quoting": "When people quote you, their post will also be hidden from trending timelines.",
|
||||
"visibility_modal.instructions": "Control who can interact with this post. Global settings can be found under <link>Preferences > Other</link>.",
|
||||
"visibility_modal.privacy_label": "Privacy",
|
||||
"visibility_modal.quote_followers": "Followers only",
|
||||
"visibility_modal.quote_label": "Change who can quote",
|
||||
"visibility_modal.quote_nobody": "No one",
|
||||
"visibility_modal.quote_public": "Anyone"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -287,6 +287,7 @@
|
|||
"domain_pill.your_handle": "Via identigo:",
|
||||
"domain_pill.your_server": "Via cifereca hejmo, kie loĝas ĉiuj viaj afiŝoj. Ĉu vi ne ŝatas ĉi tiun? Transloku servilojn iam ajn kaj alportu ankaŭ viajn sekvantojn.",
|
||||
"domain_pill.your_username": "Via unika identigilo sur ĉi tiu servilo. Eblas trovi uzantojn kun la sama uzantnomo sur malsamaj serviloj.",
|
||||
"dropdown.empty": "Elektu opcion",
|
||||
"embed.instructions": "Enkorpigu ĉi tiun afiŝon en vian retejon per kopio de la suba kodo.",
|
||||
"embed.preview": "Ĝi aperos tiel:",
|
||||
"emoji_button.activity": "Agadoj",
|
||||
|
|
@ -940,5 +941,16 @@
|
|||
"video.skip_forward": "Preterpasi antaŭen",
|
||||
"video.unmute": "Ne plu silentigi",
|
||||
"video.volume_down": "Laŭteco Malpliigi",
|
||||
"video.volume_up": "Laŭteco pliigi"
|
||||
"video.volume_up": "Laŭteco pliigi",
|
||||
"visibility_modal.button_title": "Agordu videblon",
|
||||
"visibility_modal.header": "Videblo kaj interago",
|
||||
"visibility_modal.helper.direct_quoting": "Privataj mencioj ne povas esti cititaj.",
|
||||
"visibility_modal.helper.privacy_editing": "Publikigitaj afiŝoj ne povas ŝanĝi sian videblon.",
|
||||
"visibility_modal.helper.private_quoting": "Afiŝoj nur por sekvantoj ne povas esti cititaj.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Kiam homoj citas vin, ilia afiŝo ankaŭ estos kaŝita de tendencaj templinioj.",
|
||||
"visibility_modal.privacy_label": "Privateco",
|
||||
"visibility_modal.quote_followers": "Nur sekvantoj",
|
||||
"visibility_modal.quote_label": "Ŝanĝi kiu povas citi",
|
||||
"visibility_modal.quote_nobody": "Neniu",
|
||||
"visibility_modal.quote_public": "Iu ajn"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -292,6 +292,7 @@
|
|||
"domain_pill.your_handle": "Tu alias:",
|
||||
"domain_pill.your_server": "Tu hogar digital, donde residen todos tus mensajes. ¿No te gusta este sitio? Mudate a otro servidor en cualquier momento y llevate a tus seguidores.",
|
||||
"domain_pill.your_username": "Tu identificador único en este servidor. Es posible encontrar cuentas con el mismo nombre de usuario en diferentes servidores.",
|
||||
"dropdown.empty": "Seleccioná una opción",
|
||||
"embed.instructions": "Insertá este mensaje a tu sitio web copiando el código de abajo.",
|
||||
"embed.preview": "Así es cómo se verá:",
|
||||
"emoji_button.activity": "Actividad",
|
||||
|
|
@ -879,11 +880,13 @@
|
|||
"status.mute_conversation": "Silenciar conversación",
|
||||
"status.open": "Expandir este mensaje",
|
||||
"status.pin": "Fijar en el perfil",
|
||||
"status.quote.cancel": "Cancelar cita",
|
||||
"status.quote_error.filtered": "Oculto debido a uno de tus filtros",
|
||||
"status.quote_error.not_available": "Mensaje no disponible",
|
||||
"status.quote_error.pending_approval": "Mensaje pendiente",
|
||||
"status.quote_error.pending_approval_popout.body": "Las citas compartidas a través del Fediverso pueden tardar en mostrarse, ya que diferentes servidores tienen diferentes protocolos.",
|
||||
"status.quote_error.pending_approval_popout.title": "¿Cita pendiente? Esperá un momento",
|
||||
"status.quote_policy_change": "Cambiá quién puede citar",
|
||||
"status.quote_post_author": "Se citó un mensaje de @{name}",
|
||||
"status.read_more": "Leé más",
|
||||
"status.reblog": "Adherir",
|
||||
|
|
@ -959,5 +962,17 @@
|
|||
"video.skip_forward": "Adelantar",
|
||||
"video.unmute": "Quitar silenciado",
|
||||
"video.volume_down": "Bajar volumen",
|
||||
"video.volume_up": "Subir volumen"
|
||||
"video.volume_up": "Subir volumen",
|
||||
"visibility_modal.button_title": "Establecer visibilidad",
|
||||
"visibility_modal.header": "Visibilidad e interacción",
|
||||
"visibility_modal.helper.direct_quoting": "No se pueden citar las menciones privadas.",
|
||||
"visibility_modal.helper.privacy_editing": "No se puede cambiar la visibilidad a los mensajes ya enviados.",
|
||||
"visibility_modal.helper.private_quoting": "No se pueden citar los mensajes destinados solo a seguidores.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Cuando otras cuentas te citen, sus publicaciones también se ocultarán de las líneas temporales de tendencias.",
|
||||
"visibility_modal.instructions": "Controlá quién puede interactuar con este mensaje. Los ajustes globales se pueden encontrar en <link>«Configuración» > «Otras opciones»</link>.",
|
||||
"visibility_modal.privacy_label": "Privacidad",
|
||||
"visibility_modal.quote_followers": "Solo para seguidores",
|
||||
"visibility_modal.quote_label": "Cambiá quién puede citar",
|
||||
"visibility_modal.quote_nobody": "Ninguna cuenta",
|
||||
"visibility_modal.quote_public": "Cualquier cuenta"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -292,6 +292,7 @@
|
|||
"domain_pill.your_handle": "Tu alias:",
|
||||
"domain_pill.your_server": "Tu hogar digital, donde residen todas tus publicaciones. ¿No te gusta este sitio? Muévete a otro servidor en cualquier momento y llévate a tus seguidores.",
|
||||
"domain_pill.your_username": "Tu identificador único en este servidor. Es posible encontrar usuarios con el mismo nombre de usuario en diferentes servidores.",
|
||||
"dropdown.empty": "Elige una opción",
|
||||
"embed.instructions": "Añade esta publicación a tu sitio web con el siguiente código.",
|
||||
"embed.preview": "Así es como se verá:",
|
||||
"emoji_button.activity": "Actividad",
|
||||
|
|
@ -879,11 +880,13 @@
|
|||
"status.mute_conversation": "Silenciar conversación",
|
||||
"status.open": "Expandir estado",
|
||||
"status.pin": "Fijar",
|
||||
"status.quote.cancel": "Cancelar cita",
|
||||
"status.quote_error.filtered": "Oculto debido a uno de tus filtros",
|
||||
"status.quote_error.not_available": "Publicación no disponible",
|
||||
"status.quote_error.pending_approval": "Publicación pendiente",
|
||||
"status.quote_error.pending_approval_popout.body": "Las citas compartidas en el Fediverso pueden tardar en mostrarse, ya que cada servidor tiene un protocolo diferente.",
|
||||
"status.quote_error.pending_approval_popout.title": "¿Cita pendiente? Mantén la calma",
|
||||
"status.quote_policy_change": "Cambia quién puede citarte",
|
||||
"status.quote_post_author": "Ha citado una publicación de @{name}",
|
||||
"status.read_more": "Leer más",
|
||||
"status.reblog": "Impulsar",
|
||||
|
|
@ -959,5 +962,17 @@
|
|||
"video.skip_forward": "Saltar adelante",
|
||||
"video.unmute": "Dejar de silenciar",
|
||||
"video.volume_down": "Bajar el volumen",
|
||||
"video.volume_up": "Subir el volumen"
|
||||
"video.volume_up": "Subir el volumen",
|
||||
"visibility_modal.button_title": "Establece la visibilidad",
|
||||
"visibility_modal.header": "Visibilidad e interacción",
|
||||
"visibility_modal.helper.direct_quoting": "Las menciones privadas no pueden citarse.",
|
||||
"visibility_modal.helper.privacy_editing": "Las publicaciones ya enviadas no pueden cambiar su visibilidad.",
|
||||
"visibility_modal.helper.private_quoting": "Las publicaciones para seguidores no pueden citarse.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Cuando las personas te citen, sus publicaciones también se ocultarán de las cronologías de tendencias.",
|
||||
"visibility_modal.instructions": "Controla quién puede interactuar con esta publicación. La configuración global se encuentra en <link>Preferencias > Otros</link>.",
|
||||
"visibility_modal.privacy_label": "Privacidad",
|
||||
"visibility_modal.quote_followers": "Solo seguidores",
|
||||
"visibility_modal.quote_label": "Cambia quién puede citarte",
|
||||
"visibility_modal.quote_nobody": "Nadie",
|
||||
"visibility_modal.quote_public": "Cualquiera"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -292,6 +292,7 @@
|
|||
"domain_pill.your_handle": "Tu alias:",
|
||||
"domain_pill.your_server": "Tu hogar digital, donde residen todas tus publicaciones. ¿No te gusta este sitio? Muévete a otro servidor en cualquier momento y llévate a tus seguidores.",
|
||||
"domain_pill.your_username": "Tu identificador único en este servidor. Es posible encontrar usuarios con el mismo nombre de usuario en diferentes servidores.",
|
||||
"dropdown.empty": "Selecciona una opción",
|
||||
"embed.instructions": "Añade esta publicación a tu sitio web con el siguiente código.",
|
||||
"embed.preview": "Así es como se verá:",
|
||||
"emoji_button.activity": "Actividad",
|
||||
|
|
@ -879,11 +880,13 @@
|
|||
"status.mute_conversation": "Silenciar conversación",
|
||||
"status.open": "Expandir publicación",
|
||||
"status.pin": "Fijar",
|
||||
"status.quote.cancel": "Cancelar cita",
|
||||
"status.quote_error.filtered": "Oculto debido a uno de tus filtros",
|
||||
"status.quote_error.not_available": "Publicación no disponible",
|
||||
"status.quote_error.pending_approval": "Publicación pendiente",
|
||||
"status.quote_error.pending_approval_popout.body": "Las citas compartidas a través del Fediverso pueden tardar en mostrarse, ya que los diferentes servidores tienen diferentes protocolos.",
|
||||
"status.quote_error.pending_approval_popout.title": "¿Cita pendiente? Mantén la calma",
|
||||
"status.quote_policy_change": "Cambia quién puede citarte",
|
||||
"status.quote_post_author": "Ha citado una publicación de @{name}",
|
||||
"status.read_more": "Leer más",
|
||||
"status.reblog": "Impulsar",
|
||||
|
|
@ -959,5 +962,17 @@
|
|||
"video.skip_forward": "Adelantar",
|
||||
"video.unmute": "Dejar de silenciar",
|
||||
"video.volume_down": "Bajar volumen",
|
||||
"video.volume_up": "Subir volumen"
|
||||
"video.volume_up": "Subir volumen",
|
||||
"visibility_modal.button_title": "Configura la visibilidad",
|
||||
"visibility_modal.header": "Visibilidad e interacciones",
|
||||
"visibility_modal.helper.direct_quoting": "Las menciones privadas no se pueden citar.",
|
||||
"visibility_modal.helper.privacy_editing": "Las publicaciones no pueden cambiar su visibilidad.",
|
||||
"visibility_modal.helper.private_quoting": "Las publicaciones para seguidores no pueden citarse.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Cuando la gente te cite, su publicación tampoco se mostrará en las cronologías públicas.",
|
||||
"visibility_modal.instructions": "Controla quién puede interactuar con esta publicación. Puedes encontrar los ajustes globales en <link>Preferencias > Otros</link>.",
|
||||
"visibility_modal.privacy_label": "Privacidad",
|
||||
"visibility_modal.quote_followers": "Sólo seguidores",
|
||||
"visibility_modal.quote_label": "Cambia quién puede citarte",
|
||||
"visibility_modal.quote_nobody": "Nadie",
|
||||
"visibility_modal.quote_public": "Cualquiera"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@
|
|||
"account.featured_tags.last_status_at": "آخرین فرسته در {date}",
|
||||
"account.featured_tags.last_status_never": "بدون فرسته",
|
||||
"account.follow": "پیگرفتن",
|
||||
"account.follow_back": "دنبال کردن متقابل",
|
||||
"account.follow_back": "پیگیری متقابل",
|
||||
"account.followers": "پیگیرندگان",
|
||||
"account.followers.empty": "هنوز کسی پیگیر این کاربر نیست.",
|
||||
"account.followers_counter": "{count, plural, one {{counter} پیگیرنده} other {{counter} پیگیرنده}}",
|
||||
|
|
@ -292,6 +292,7 @@
|
|||
"domain_pill.your_handle": "شناسهتان:",
|
||||
"domain_pill.your_server": "خانهٔ رقمیتان. جایی که همهٔ فرستههایتان میزیند. دوستش ندارید؟ در هر زمان کارسازتان را جابهجا کرده و پیگیرندگانتان را نیز بیاورید.",
|
||||
"domain_pill.your_username": "شناسهٔ یکتایتان روی این کارساز. ممکن است کاربرانی با نام کاربری مشابه روی کارسازهای دیگر باشند.",
|
||||
"dropdown.empty": "انتخاب یک گزینه",
|
||||
"embed.instructions": "جاسازی این فرسته روی پایگاهتان با رونوشت کردن کد زیر.",
|
||||
"embed.preview": "این گونه دیده خواهد شد:",
|
||||
"emoji_button.activity": "فعالیت",
|
||||
|
|
@ -881,7 +882,10 @@
|
|||
"status.pin": "سنجاق به نمایه",
|
||||
"status.quote_error.filtered": "نهفته بنا بر یکی از پالایههایتان",
|
||||
"status.quote_error.not_available": "فرسته در دسترس نیست",
|
||||
"status.quote_error.pending_approval": "فرسته منتظر",
|
||||
"status.quote_error.pending_approval_popout.body": "نقلقولهایی که در سراسر فدیورس همرسانی میشوند ممکن است زمانبر باشند تا نمایش داده شوند، چون کارسازهای مختلف از شیوهنامههای متفاوتی استفاده میکنند.",
|
||||
"status.quote_error.pending_approval_popout.title": "منتظر نقل؟ خونسرد بمانید",
|
||||
"status.quote_policy_change": "تغییر کسانی که میتوانند نقل کنند",
|
||||
"status.quote_post_author": "فرستهای از @{name} نقل شد",
|
||||
"status.read_more": "بیشتر بخوانید",
|
||||
"status.reblog": "تقویت",
|
||||
|
|
@ -957,5 +961,17 @@
|
|||
"video.skip_forward": "پرش به پیش",
|
||||
"video.unmute": "ناخموشی",
|
||||
"video.volume_down": "کاهش حجم صدا",
|
||||
"video.volume_up": "افزایش حجم صدا"
|
||||
"video.volume_up": "افزایش حجم صدا",
|
||||
"visibility_modal.button_title": "تنظیم نمایانی",
|
||||
"visibility_modal.header": "نمایانی و برهمکنش",
|
||||
"visibility_modal.helper.direct_quoting": "نامبریهای خصوصی قابل نقل نیستند.",
|
||||
"visibility_modal.helper.privacy_editing": "نمیتوان نمایانی فرستههای منتشر شده را تغییر داد.",
|
||||
"visibility_modal.helper.private_quoting": "فرستههای فقط برای پیگیرندگان نمیتوانند نقل شوند.",
|
||||
"visibility_modal.helper.unlisted_quoting": "هنگامی که افراد نقلتان میکنند فرستهشان هم از خطزمانیهای داغ پنهان خواهد بود.",
|
||||
"visibility_modal.instructions": "واپایش کسانی که میتوانند با این فرسته برهمکنش داشته باشند. تنظیمات سراسری میتواند در <link>ترجیحات > دیگر</link> پیدا شود.",
|
||||
"visibility_modal.privacy_label": "محرمانگی",
|
||||
"visibility_modal.quote_followers": "فقط پیگیرندگان",
|
||||
"visibility_modal.quote_label": "تغییر کسانی که میتوانند نقل کنند",
|
||||
"visibility_modal.quote_nobody": "هیچکس",
|
||||
"visibility_modal.quote_public": "هرکسی"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -245,6 +245,9 @@
|
|||
"confirmations.remove_from_followers.confirm": "Poista seuraaja",
|
||||
"confirmations.remove_from_followers.message": "{name} lakkaa seuraamasta sinua. Haluatko varmasti jatkaa?",
|
||||
"confirmations.remove_from_followers.title": "Poistetaanko seuraaja?",
|
||||
"confirmations.revoke_quote.confirm": "Poista julkaisu",
|
||||
"confirmations.revoke_quote.message": "Tätä toimea ei voi peruuttaa.",
|
||||
"confirmations.revoke_quote.title": "Poistetaanko julkaisu?",
|
||||
"confirmations.unfollow.confirm": "Lopeta seuraaminen",
|
||||
"confirmations.unfollow.message": "Haluatko varmasti lopettaa profiilin {name} seuraamisen?",
|
||||
"confirmations.unfollow.title": "Lopetetaanko käyttäjän seuraaminen?",
|
||||
|
|
@ -289,6 +292,7 @@
|
|||
"domain_pill.your_handle": "Käyttäjätunnuksesi:",
|
||||
"domain_pill.your_server": "Digitaalinen kotisi, jossa kaikki julkaisusi sijaitsevat. Etkö pidä tästä? Siirry palvelimelta toiselle milloin tahansa ja tuo myös seuraajasi mukanasi.",
|
||||
"domain_pill.your_username": "Yksilöllinen tunnisteesi tällä palvelimella. Eri palvelimilta on mahdollista löytää käyttäjiä, joilla on sama käyttäjänimi.",
|
||||
"dropdown.empty": "Valitse vaihtoehto",
|
||||
"embed.instructions": "Upota julkaisu verkkosivullesi kopioimalla alla oleva koodi.",
|
||||
"embed.preview": "Tältä se näyttää:",
|
||||
"emoji_button.activity": "Aktiviteetit",
|
||||
|
|
@ -876,11 +880,13 @@
|
|||
"status.mute_conversation": "Mykistä keskustelu",
|
||||
"status.open": "Laajenna julkaisu",
|
||||
"status.pin": "Kiinnitä profiiliin",
|
||||
"status.quote.cancel": "Peruuta lainaus",
|
||||
"status.quote_error.filtered": "Piilotettu jonkin asettamasi suodattimen takia",
|
||||
"status.quote_error.not_available": "Julkaisu ei saatavilla",
|
||||
"status.quote_error.pending_approval": "Julkaisu odottaa",
|
||||
"status.quote_error.pending_approval_popout.body": "Saattaa viedä jonkin ainaa ennen kuin fediversumin kautta jaetut julkaisut tulevat näkyviin, sillä eri palvelimet käyttävät eri protokollia.",
|
||||
"status.quote_error.pending_approval_popout.title": "Odottava lainaus? Pysy rauhallisena",
|
||||
"status.quote_policy_change": "Vaihda, kuka voi lainata",
|
||||
"status.quote_post_author": "Lainaa käyttäjän @{name} julkaisua",
|
||||
"status.read_more": "Näytä enemmän",
|
||||
"status.reblog": "Tehosta",
|
||||
|
|
@ -896,6 +902,7 @@
|
|||
"status.reply": "Vastaa",
|
||||
"status.replyAll": "Vastaa ketjuun",
|
||||
"status.report": "Raportoi @{name}",
|
||||
"status.revoke_quote": "Poista julkaisuni käyttäjän @{name} julkaisusta",
|
||||
"status.sensitive_warning": "Arkaluonteista sisältöä",
|
||||
"status.share": "Jaa",
|
||||
"status.show_less_all": "Näytä kaikista vähemmän",
|
||||
|
|
@ -955,5 +962,17 @@
|
|||
"video.skip_forward": "Siirry eteenpäin",
|
||||
"video.unmute": "Poista mykistys",
|
||||
"video.volume_down": "Vähennä äänenvoimakkuutta",
|
||||
"video.volume_up": "Lisää äänenvoimakkuutta"
|
||||
"video.volume_up": "Lisää äänenvoimakkuutta",
|
||||
"visibility_modal.button_title": "Aseta näkyvyys",
|
||||
"visibility_modal.header": "Näkyvyys ja vuorovaikutus",
|
||||
"visibility_modal.helper.direct_quoting": "Yksityismainintoja ei voi lainata.",
|
||||
"visibility_modal.helper.privacy_editing": "Lähetettyjen julkaisujen näkyvyyttä ei voi vaihtaa.",
|
||||
"visibility_modal.helper.private_quoting": "Vain seuraajille tarkoitettuja julkaisuja ei voi lainata.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Kun ihmiset lainaavat sinua, myös heidän julkaisunsa piilotetaan suosittujen julkaisujen aikajanoilta.",
|
||||
"visibility_modal.instructions": "Hallitse, kuka voi olla vuorovaikutuksessa tämän julkaisun kanssa. Yleiset asetukset sijaitsevat kohdassa <link>Asetukset > Muut</link>.",
|
||||
"visibility_modal.privacy_label": "Yksityisyys",
|
||||
"visibility_modal.quote_followers": "Vain seuraajat",
|
||||
"visibility_modal.quote_label": "Vaihda, kuka voi lainata",
|
||||
"visibility_modal.quote_nobody": "Ei kukaan",
|
||||
"visibility_modal.quote_public": "Kuka tahansa"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -292,6 +292,7 @@
|
|||
"domain_pill.your_handle": "Títt hald:",
|
||||
"domain_pill.your_server": "Títt talgilda heim, har allir tínir postar liva. Dámar tað ikki hendan? Flyt til ein annan ambætara tá tú hevur hug til tess og tak fylgjarar tínar við eisini.",
|
||||
"domain_pill.your_username": "Títt eyðmerki á hesum ambætaranum. Tað er møguligt at finna brúkarar við tí sama brúkaranavninum á ymiskum ambætarum.",
|
||||
"dropdown.empty": "Vel ein møguleika",
|
||||
"embed.instructions": "Fell hendan postin inní á tínum vevstaði við at taka avrit av koduni niðanfyri.",
|
||||
"embed.preview": "Soleiðis fer tað at síggja út:",
|
||||
"emoji_button.activity": "Virksemi",
|
||||
|
|
@ -879,11 +880,13 @@
|
|||
"status.mute_conversation": "Doyv samrøðu",
|
||||
"status.open": "Víðka henda postin",
|
||||
"status.pin": "Ger fastan í vangan",
|
||||
"status.quote.cancel": "Ógilda sitat",
|
||||
"status.quote_error.filtered": "Eitt av tínum filtrum fjalir hetta",
|
||||
"status.quote_error.not_available": "Postur ikki tøkur",
|
||||
"status.quote_error.pending_approval": "Postur bíðar",
|
||||
"status.quote_error.pending_approval_popout.body": "Sitatir, sum eru deild tvørtur um fediversið, kunnu taka nakað av tíð at vísast, tí ymiskir ambætarar hava ymiskar protokollir.",
|
||||
"status.quote_error.pending_approval_popout.title": "Bíðar eftir sitati? Tak tað róligt",
|
||||
"status.quote_policy_change": "Broyt hvør kann sitera",
|
||||
"status.quote_post_author": "Siteraði ein post hjá @{name}",
|
||||
"status.read_more": "Les meira",
|
||||
"status.reblog": "Stimbra",
|
||||
|
|
@ -959,5 +962,17 @@
|
|||
"video.skip_forward": "Leyp um frameftir",
|
||||
"video.unmute": "Doyv ikki",
|
||||
"video.volume_down": "Minka ljóðstyrki",
|
||||
"video.volume_up": "Øk um ljóðstyrki"
|
||||
"video.volume_up": "Øk um ljóðstyrki",
|
||||
"visibility_modal.button_title": "Set sýni",
|
||||
"visibility_modal.header": "Sýni og samvirkni",
|
||||
"visibility_modal.helper.direct_quoting": "Privatar umrøður kunnu ikki siterast.",
|
||||
"visibility_modal.helper.privacy_editing": "Útgivnir postar kunnnu ikki broyta sýni.",
|
||||
"visibility_modal.helper.private_quoting": "Postar, sum einans eru fyri fylgjarar, kunnu ikki siterast.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Tá fólk sitera teg, so vera teirra postar eisini fjaldir frá tíðarlinjum við ráki.",
|
||||
"visibility_modal.instructions": "Stýr, hvør kann virka saman við hesum postinum. Globalar stillingar finnast undir <link>Stilingar > Onnur</link>.",
|
||||
"visibility_modal.privacy_label": "Privatlív",
|
||||
"visibility_modal.quote_followers": "Einans fylgjarar",
|
||||
"visibility_modal.quote_label": "Broyt hvør kann sitera",
|
||||
"visibility_modal.quote_nobody": "Eingin",
|
||||
"visibility_modal.quote_public": "Ein og hvør"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -245,6 +245,9 @@
|
|||
"confirmations.remove_from_followers.confirm": "Bain leantóir",
|
||||
"confirmations.remove_from_followers.message": "Scoirfidh {name} de bheith ag leanúint leat. An bhfuil tú cinnte gur mian leat leanúint ar aghaidh?",
|
||||
"confirmations.remove_from_followers.title": "Bain an leantóir?",
|
||||
"confirmations.revoke_quote.confirm": "Bain postáil",
|
||||
"confirmations.revoke_quote.message": "Ní féidir an gníomh seo a chealú.",
|
||||
"confirmations.revoke_quote.title": "Bain postáil?",
|
||||
"confirmations.unfollow.confirm": "Ná lean",
|
||||
"confirmations.unfollow.message": "An bhfuil tú cinnte gur mhaith leat {name} a dhíleanúint?",
|
||||
"confirmations.unfollow.title": "Dílean an t-úsáideoir?",
|
||||
|
|
@ -289,6 +292,7 @@
|
|||
"domain_pill.your_handle": "Do láimhseáil:",
|
||||
"domain_pill.your_server": "Do theach digiteach, áit a bhfuil do phoist go léir ina gcónaí. Nach maith leat an ceann seo? Aistrigh freastalaithe am ar bith agus tabhair leat do leantóirí freisin.",
|
||||
"domain_pill.your_username": "D'aitheantóir uathúil ar an bhfreastalaí seo. Is féidir teacht ar úsáideoirí leis an ainm úsáideora céanna ar fhreastalaithe éagsúla.",
|
||||
"dropdown.empty": "Roghnaigh rogha",
|
||||
"embed.instructions": "Embed this status on your website by copying the code below.",
|
||||
"embed.preview": "Seo an chuma a bheidh air:",
|
||||
"emoji_button.activity": "Gníomhaíocht",
|
||||
|
|
@ -881,6 +885,7 @@
|
|||
"status.quote_error.pending_approval": "Post ar feitheamh",
|
||||
"status.quote_error.pending_approval_popout.body": "D’fhéadfadh sé go dtógfadh sé tamall le Sleachta a roinntear ar fud Fediverse a thaispeáint, toisc go mbíonn prótacail éagsúla ag freastalaithe éagsúla.",
|
||||
"status.quote_error.pending_approval_popout.title": "Ag fanacht le luachan? Fan socair",
|
||||
"status.quote_policy_change": "Athraigh cé a fhéadann luachan a thabhairt",
|
||||
"status.quote_post_author": "Luaigh mé post le @{name}",
|
||||
"status.read_more": "Léan a thuilleadh",
|
||||
"status.reblog": "Treisiú",
|
||||
|
|
@ -896,6 +901,7 @@
|
|||
"status.reply": "Freagair",
|
||||
"status.replyAll": "Freagair le snáithe",
|
||||
"status.report": "Tuairiscigh @{name}",
|
||||
"status.revoke_quote": "Bain mo phost ó phost @{name}",
|
||||
"status.sensitive_warning": "Ábhar íogair",
|
||||
"status.share": "Comhroinn",
|
||||
"status.show_less_all": "Taispeáin níos lú d'uile",
|
||||
|
|
@ -955,5 +961,17 @@
|
|||
"video.skip_forward": "Scipeáil ar aghaidh",
|
||||
"video.unmute": "Díbhalbhú",
|
||||
"video.volume_down": "Toirt síos",
|
||||
"video.volume_up": "Toirt suas"
|
||||
"video.volume_up": "Toirt suas",
|
||||
"visibility_modal.button_title": "Socraigh infheictheacht",
|
||||
"visibility_modal.header": "Infheictheacht agus idirghníomhaíocht",
|
||||
"visibility_modal.helper.direct_quoting": "Ní féidir lua a thabhairt ar luanna príobháideacha.",
|
||||
"visibility_modal.helper.privacy_editing": "Ní féidir infheictheacht postálacha foilsithe a athrú.",
|
||||
"visibility_modal.helper.private_quoting": "Ní féidir poist atá dírithe ar leanúna amháin a lua.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Nuair a luann daoine thú, beidh a bpost i bhfolach ó amlínte treochta freisin.",
|
||||
"visibility_modal.instructions": "Rialú cé a fhéadfaidh idirghníomhú leis an bpost seo. Is féidir socruithe domhanda a fháil faoi <link>Sainroghanna > Eile</link>.",
|
||||
"visibility_modal.privacy_label": "Príobháideacht",
|
||||
"visibility_modal.quote_followers": "Leantóirí amháin",
|
||||
"visibility_modal.quote_label": "Athraigh cé a fhéadann luachan a thabhairt",
|
||||
"visibility_modal.quote_nobody": "Níl aon duine",
|
||||
"visibility_modal.quote_public": "Aon duine"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -292,6 +292,7 @@
|
|||
"domain_pill.your_handle": "O teu alcume:",
|
||||
"domain_pill.your_server": "O teu fogar dixital, onde están as túas publicacións. Non é do teu agrado? Podes cambiar de servidor cando queiras levando as túas seguidoras contigo.",
|
||||
"domain_pill.your_username": "O teu identificador único neste servidor. É posible que atopes usuarias co mesmo nome de usuaria en outros servidores.",
|
||||
"dropdown.empty": "Escolle unha opción",
|
||||
"embed.instructions": "Inclúe esta publicación no teu sitio web copiando o seguinte código.",
|
||||
"embed.preview": "Vaise ver así:",
|
||||
"emoji_button.activity": "Actividade",
|
||||
|
|
@ -879,11 +880,13 @@
|
|||
"status.mute_conversation": "Silenciar conversa",
|
||||
"status.open": "Estender esta publicación",
|
||||
"status.pin": "Fixar no perfil",
|
||||
"status.quote.cancel": "Cancelar a cita",
|
||||
"status.quote_error.filtered": "Oculto debido a un dos teus filtros",
|
||||
"status.quote_error.not_available": "Publicación non dispoñible",
|
||||
"status.quote_error.pending_approval": "Publicación pendente",
|
||||
"status.quote_error.pending_approval_popout.body": "As citas compartidas no Fediverso poderían tardar en mostrarse, xa que os diferentes servidores teñen diferentes protocolos.",
|
||||
"status.quote_error.pending_approval_popout.title": "Cita pendente? Non te apures",
|
||||
"status.quote_policy_change": "Cambia quen pode citarte",
|
||||
"status.quote_post_author": "Citou unha publicación de @{name}",
|
||||
"status.read_more": "Ler máis",
|
||||
"status.reblog": "Promover",
|
||||
|
|
@ -959,5 +962,17 @@
|
|||
"video.skip_forward": "Avanzar",
|
||||
"video.unmute": "Non silenciar",
|
||||
"video.volume_down": "Baixar volume",
|
||||
"video.volume_up": "Subir volume"
|
||||
"video.volume_up": "Subir volume",
|
||||
"visibility_modal.button_title": "Establece a visibilidade",
|
||||
"visibility_modal.header": "Visibilidade e interaccións",
|
||||
"visibility_modal.helper.direct_quoting": "A mencións privadas non se poden citar.",
|
||||
"visibility_modal.helper.privacy_editing": "Non se pode cambiar a visibilidade das publicacións xa publicadas.",
|
||||
"visibility_modal.helper.private_quoting": "As publicacións só para seguidoras non se poden citar.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Cando alguén te cite, a súa publicación non aparecerá nas cronoloxías de popularidade.",
|
||||
"visibility_modal.instructions": "Controla quen pode interactuar con esta publicación. Os axustes xerais están en <link>Preferencias > Outros</link>.",
|
||||
"visibility_modal.privacy_label": "Privacidade",
|
||||
"visibility_modal.quote_followers": "Só para seguidoras",
|
||||
"visibility_modal.quote_label": "Cambia quen pode citarte",
|
||||
"visibility_modal.quote_nobody": "Ninguén",
|
||||
"visibility_modal.quote_public": "Calquera"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -292,6 +292,7 @@
|
|||
"domain_pill.your_handle": "הכינוי שלך:",
|
||||
"domain_pill.your_server": "הבית המקוון שלך, היכן ששוכנות כל הודעותיך. לא מוצא חן בעיניך? ניתן לעבור שרתים בכל עת וגם לשמור על העוקבים.",
|
||||
"domain_pill.your_username": "המזהה הייחודי שלך על שרת זה. ניתן למצוא משתמשים עם שם משתמש זהה על שרתים שונים.",
|
||||
"dropdown.empty": "בחירת אפשרות",
|
||||
"embed.instructions": "ניתן להטמיע את ההודעה הזו באתרך ע\"י העתקת הקוד שלהלן.",
|
||||
"embed.preview": "דוגמא כיצד זה יראה:",
|
||||
"emoji_button.activity": "פעילות",
|
||||
|
|
@ -879,11 +880,13 @@
|
|||
"status.mute_conversation": "השתקת שיחה",
|
||||
"status.open": "הרחבת הודעה זו",
|
||||
"status.pin": "הצמדה לפרופיל שלי",
|
||||
"status.quote.cancel": "ביטול הודעת ציטוט",
|
||||
"status.quote_error.filtered": "מוסתר בהתאם לסננים שלך",
|
||||
"status.quote_error.not_available": "ההודעה לא זמינה",
|
||||
"status.quote_error.pending_approval": "ההודעה בהמתנה לאישור",
|
||||
"status.quote_error.pending_approval_popout.body": "ציטוטים ששותפו בפדיוורס עשויים להתפרסם אחרי עיכוב קל, כיוון ששרתים שונים משתמשים בפרוטוקולים שונים.",
|
||||
"status.quote_error.pending_approval_popout.title": "ההודעה בהמתנה? המתינו ברוגע",
|
||||
"status.quote_policy_change": "הגדרת הרשאה לציטוט הודעותיך",
|
||||
"status.quote_post_author": "ההודעה צוטטה על ידי @{name}",
|
||||
"status.read_more": "לקרוא עוד",
|
||||
"status.reblog": "הדהוד",
|
||||
|
|
@ -959,5 +962,17 @@
|
|||
"video.skip_forward": "דילוג קדימה",
|
||||
"video.unmute": "ביטול השתקה",
|
||||
"video.volume_down": "הנמכת עוצמת השמע",
|
||||
"video.volume_up": "הגברת עוצמת שמע"
|
||||
"video.volume_up": "הגברת עוצמת שמע",
|
||||
"visibility_modal.button_title": "בחירת רמת חשיפה",
|
||||
"visibility_modal.header": "חשיפה והידוּד (אינטראקציה)",
|
||||
"visibility_modal.helper.direct_quoting": "הודעות פרטיות לא ניתנות לציטוט.",
|
||||
"visibility_modal.helper.privacy_editing": "לא ניתן לשנות את דרגת החשיפה של הודעות שפורסמו.",
|
||||
"visibility_modal.helper.private_quoting": "לא ניתן לצטט הודעות שחשופות לעוקבים בלבד.",
|
||||
"visibility_modal.helper.unlisted_quoting": "כאשר אחרים מצטטים אותך, ההודעות שלהם יוסתרו גם מ\"נושאים חמים\".",
|
||||
"visibility_modal.instructions": "שליטה בהרשאה להידוּד (תגובות וציטוטים) עם הודעה זו. הגדרות ברירת המחדל ניתן למצוא תחת <link>העדפות > אחרים</link>.",
|
||||
"visibility_modal.privacy_label": "פרטיות",
|
||||
"visibility_modal.quote_followers": "לעוקבים בלבד",
|
||||
"visibility_modal.quote_label": "הגדרת הרשאה לציטוט הודעותיך",
|
||||
"visibility_modal.quote_nobody": "אף אחד",
|
||||
"visibility_modal.quote_public": "כולם"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -245,6 +245,9 @@
|
|||
"confirmations.remove_from_followers.confirm": "Követő eltávolítása",
|
||||
"confirmations.remove_from_followers.message": "{name} követ téged. Biztos, hogy folytatod?",
|
||||
"confirmations.remove_from_followers.title": "Követő eltávolítása?",
|
||||
"confirmations.revoke_quote.confirm": "Bejegyzés eltávolítása",
|
||||
"confirmations.revoke_quote.message": "Ez a művelet nem vonható vissza.",
|
||||
"confirmations.revoke_quote.title": "Bejegyzés eltávolítása?",
|
||||
"confirmations.unfollow.confirm": "Követés visszavonása",
|
||||
"confirmations.unfollow.message": "Biztos, hogy vissza szeretnéd vonni {name} követését?",
|
||||
"confirmations.unfollow.title": "Megszünteted a felhasználó követését?",
|
||||
|
|
@ -289,6 +292,7 @@
|
|||
"domain_pill.your_handle": "Saját fióknév:",
|
||||
"domain_pill.your_server": "A digitális otthonod, ahol a bejegyzéseid találhatók. Nem tetszik a mostani? Válts kiszolgálót bármikor, és vidd magaddal a követőidet is.",
|
||||
"domain_pill.your_username": "Az egyedi azonosítód ezen a kiszolgálón. Lehet, hogy ugyanazon felhasználónév különböző kiszolgálókon is megtalálható.",
|
||||
"dropdown.empty": "Válassz egy lehetőséget",
|
||||
"embed.instructions": "Ágyazd be ezt a bejegyzést a weboldaladba az alábbi kód kimásolásával.",
|
||||
"embed.preview": "Így fog kinézni:",
|
||||
"emoji_button.activity": "Tevékenység",
|
||||
|
|
@ -881,6 +885,7 @@
|
|||
"status.quote_error.pending_approval": "A bejegyzés függőben van",
|
||||
"status.quote_error.pending_approval_popout.body": "A Födiverzumon keresztül megosztott idézetek megjelenítése eltarthat egy darabig, mivel a különböző kiszolgálók különböző protokollokat használnak.",
|
||||
"status.quote_error.pending_approval_popout.title": "Függőben lévő idézet? Maradj nyugodt.",
|
||||
"status.quote_policy_change": "Módosítás, hogy kik idézhetnek",
|
||||
"status.quote_post_author": "Idézte @{name} bejegyzését",
|
||||
"status.read_more": "Bővebben",
|
||||
"status.reblog": "Megtolás",
|
||||
|
|
@ -896,6 +901,7 @@
|
|||
"status.reply": "Válasz",
|
||||
"status.replyAll": "Válasz a beszélgetésre",
|
||||
"status.report": "@{name} bejelentése",
|
||||
"status.revoke_quote": "Saját bejegyzés eltávolítása @{name} bejegyzéséből",
|
||||
"status.sensitive_warning": "Kényes tartalom",
|
||||
"status.share": "Megosztás",
|
||||
"status.show_less_all": "Kevesebbet mindenhol",
|
||||
|
|
@ -955,5 +961,17 @@
|
|||
"video.skip_forward": "Előreugrás",
|
||||
"video.unmute": "Némítás feloldása",
|
||||
"video.volume_down": "Hangerő le",
|
||||
"video.volume_up": "Hangerő fel"
|
||||
"video.volume_up": "Hangerő fel",
|
||||
"visibility_modal.button_title": "Láthatóság beállítása",
|
||||
"visibility_modal.header": "Láthatóság és interakció",
|
||||
"visibility_modal.helper.direct_quoting": "A privát említések nem idézhetőek.",
|
||||
"visibility_modal.helper.privacy_editing": "A közzétett bejegyzések láthatósága nem módosítható.",
|
||||
"visibility_modal.helper.private_quoting": "A csak követőknek szánt bejegyzéseket nem lehet idézni.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Amikor idéznek tőled, a bejegyzésük rejtve lesz a felkapott bejegyzések hírfolyamain is.",
|
||||
"visibility_modal.instructions": "Döntsd el, hogy ki léphet interakcióba a bejegyzéssel. A globális beállítások a <link>Beállítások > Egyéb</link> alatt találhatóak.",
|
||||
"visibility_modal.privacy_label": "Adatvédelem",
|
||||
"visibility_modal.quote_followers": "Csak követőknek",
|
||||
"visibility_modal.quote_label": "Módosítás, hogy kik idézhetnek",
|
||||
"visibility_modal.quote_nobody": "Senki",
|
||||
"visibility_modal.quote_public": "Bárki"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -292,6 +292,7 @@
|
|||
"domain_pill.your_handle": "Kennislóðin þín:",
|
||||
"domain_pill.your_server": "Stafrænt heimili þitt, þar sem allar færslur þínar eru hýstar. Kanntu ekki við þennan netþjón? Þú getur flutt þig á milli netþjóna hvenær sem er og tekið með þér alla fylgjendurna þína.",
|
||||
"domain_pill.your_username": "Sértækt auðkenni þitt á þessum netþjóni. Það er mögulegt að finna notendur með sama notandanafn á mismunandi netþjónum.",
|
||||
"dropdown.empty": "Veldu valkost",
|
||||
"embed.instructions": "Felldu þessa færslu inn í vefsvæðið þitt með því að afrita kóðann hér fyrir neðan.",
|
||||
"embed.preview": "Svona mun þetta líta út:",
|
||||
"emoji_button.activity": "Virkni",
|
||||
|
|
@ -879,11 +880,13 @@
|
|||
"status.mute_conversation": "Þagga niður í samtali",
|
||||
"status.open": "Opna þessa færslu",
|
||||
"status.pin": "Festa á notandasnið",
|
||||
"status.quote.cancel": "Hætta við tilvitnun",
|
||||
"status.quote_error.filtered": "Falið vegna einnar síu sem er virk",
|
||||
"status.quote_error.not_available": "Færsla ekki tiltæk",
|
||||
"status.quote_error.pending_approval": "Færsla í bið",
|
||||
"status.quote_error.pending_approval_popout.body": "Tilvitnanir sem deilt er út um samfélagsnetið geta þurft nokkurn tíma áður en þær birtast, því mismunandi netþjónar geta haft mismunandi samskiptareglur.",
|
||||
"status.quote_error.pending_approval_popout.title": "Færsla í bið? Verum róleg",
|
||||
"status.quote_policy_change": "Breyttu því hver getur tilvitnað",
|
||||
"status.quote_post_author": "Vitnaði í færslu frá @{name}",
|
||||
"status.read_more": "Lesa meira",
|
||||
"status.reblog": "Endurbirting",
|
||||
|
|
@ -959,5 +962,17 @@
|
|||
"video.skip_forward": "Stökkva áfram",
|
||||
"video.unmute": "Hætta að þagga",
|
||||
"video.volume_down": "Lækka hljóðstyrk",
|
||||
"video.volume_up": "Hækka hljóðstyrk"
|
||||
"video.volume_up": "Hækka hljóðstyrk",
|
||||
"visibility_modal.button_title": "Stilla sýnileika",
|
||||
"visibility_modal.header": "Sýnileiki og gagnvirkni",
|
||||
"visibility_modal.helper.direct_quoting": "Ekki er hægt að vitna í einkaspjall.",
|
||||
"visibility_modal.helper.privacy_editing": "Ekki er hægt að breyta sýnileika birtra færslna.",
|
||||
"visibility_modal.helper.private_quoting": "Ekki er hægt að vitna í færslur sem eingöngu eru til fylgjenda.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Þegar fólk vitnar í þig verða færslurnar þeirr einnig faldar á vinsældatímalínum.",
|
||||
"visibility_modal.instructions": "Stýrðu hverjir geta átt við þessa færslu. Víðværar stillingar finnast undir <link>Kjörstillingar > Annað</link>.",
|
||||
"visibility_modal.privacy_label": "Persónuvernd",
|
||||
"visibility_modal.quote_followers": "Einungis fylgjendur",
|
||||
"visibility_modal.quote_label": "Breyttu því hver getur tilvitnað",
|
||||
"visibility_modal.quote_nobody": "Enginn",
|
||||
"visibility_modal.quote_public": "Hver sem er"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -85,9 +85,11 @@
|
|||
"alt_text_modal.cancel": "Semmet",
|
||||
"alt_text_modal.done": "Immed",
|
||||
"announcement.announcement": "Ulɣu",
|
||||
"annual_report.summary.followers.followers": "imeḍfaṛen",
|
||||
"annual_report.summary.most_used_app.most_used_app": "asnas yettwasqedcen s waṭas",
|
||||
"annual_report.summary.most_used_hashtag.none": "Ula yiwen",
|
||||
"annual_report.summary.new_posts.new_posts": "tisuffaɣ timaynutin",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Ur as-neqqar i yiwen.",
|
||||
"annual_report.summary.thanks": "Tanemmirt imi i tettekkiḍ deg Mastodon!",
|
||||
"audio.hide": "Ffer amesli",
|
||||
"block_modal.show_less": "Ssken-d drus",
|
||||
|
|
@ -123,6 +125,7 @@
|
|||
"column.firehose": "Isuddam usriden",
|
||||
"column.follow_requests": "Isuturen n teḍfeṛt",
|
||||
"column.home": "Agejdan",
|
||||
"column.list_members": "Sefrek iεeggalen n tebdart",
|
||||
"column.lists": "Tibdarin",
|
||||
"column.mutes": "Imiḍanen yettwasgugmen",
|
||||
"column.notifications": "Ilɣa",
|
||||
|
|
@ -160,6 +163,7 @@
|
|||
"compose_form.save_changes": "Leqqem",
|
||||
"compose_form.spoiler.marked": "Kkes aḍris yettwaffren deffir n walɣu",
|
||||
"compose_form.spoiler.unmarked": "Rnu aḍris yettwaffren deffir n walɣu",
|
||||
"compose_form.spoiler_placeholder": "Alɣu n ugbur (afrayan)",
|
||||
"confirmation_modal.cancel": "Sefsex",
|
||||
"confirmations.block.confirm": "Sewḥel",
|
||||
"confirmations.delete.confirm": "Kkes",
|
||||
|
|
@ -168,8 +172,10 @@
|
|||
"confirmations.delete_list.confirm": "Kkes",
|
||||
"confirmations.delete_list.message": "Tebɣiḍ s tidet ad tekkseḍ umuɣ-agi i lebda?",
|
||||
"confirmations.delete_list.title": "Tukksa n tebdart?",
|
||||
"confirmations.discard_draft.confirm": "Ttu-t u kemmel",
|
||||
"confirmations.discard_edit_media.confirm": "Sefsex",
|
||||
"confirmations.follow_to_list.confirm": "Ḍfeṛ-it sakin rnu-t ɣer tebdart",
|
||||
"confirmations.follow_to_list.title": "Ḍfer aseqdac?",
|
||||
"confirmations.logout.confirm": "Ffeɣ",
|
||||
"confirmations.logout.message": "D tidet tebɣiḍ ad teffɣeḍ?",
|
||||
"confirmations.logout.title": "Tebɣiḍ ad teffɣeḍ ssya?",
|
||||
|
|
@ -178,6 +184,8 @@
|
|||
"confirmations.missing_alt_text.title": "Rnu aḍris amlellay?",
|
||||
"confirmations.mute.confirm": "Sgugem",
|
||||
"confirmations.redraft.confirm": "Kkes sakin ɛiwed tira",
|
||||
"confirmations.remove_from_followers.confirm": "Kkes aneḍfar",
|
||||
"confirmations.revoke_quote.confirm": "Kkes tasuffeɣt",
|
||||
"confirmations.unfollow.confirm": "Ur ḍḍafaṛ ara",
|
||||
"confirmations.unfollow.message": "Tetḥeqqeḍ belli tebɣiḍ ur teṭafaṛeḍ ara {name}?",
|
||||
"content_warning.hide": "Ffer tasuffeɣt",
|
||||
|
|
@ -203,7 +211,12 @@
|
|||
"domain_block_modal.you_wont_see_posts": "Ur tettuɣaleḍ ara ttwaliḍ tisuffaɣ neɣ ulɣuten n iseqdacen n uqeddac-a.",
|
||||
"domain_pill.activitypub_like_language": "ActivityPub am tutlayt yettmeslay Mastodon d izeḍwan inmettiyen nniḍen.",
|
||||
"domain_pill.server": "Aqeddac",
|
||||
"domain_pill.their_handle": "Asulay-is:",
|
||||
"domain_pill.username": "Isem n useqdac",
|
||||
"domain_pill.whats_in_a_handle": "D acu i yellan deg usulay?",
|
||||
"domain_pill.who_they_are": "Imi isulayen qqaren-d anwa i d yiwen d wanda yella, tzemreḍ ad temyigweḍ d yemdanen deg web anmetti yebnan s <button>tɣeṛɣaṛ yemmugen s ActivityPub</button>.",
|
||||
"domain_pill.who_you_are": "Imi isulay-ik·im yeqqar-d anwa i d kečč·kemmi d wanda i telliḍ, zemren medden ad myigwen yid-k·m deg web anmetti yebnan s <button>tɣeṛɣaṛ yemmugen s ActivityPub</button>.",
|
||||
"domain_pill.your_handle": "Asulay-ik·im:",
|
||||
"domain_pill.your_server": "D axxam-inek·inem umḍin, anda i zedɣent akk tsuffaɣ-ik·im. Ur k·m-yeεǧib ara wa? Ssenfel-d iqeddacen melmi i ak·m-yehwa, awi-d daɣen ineḍfaren-ik·im yid-k·m.",
|
||||
"embed.instructions": "Ẓẓu addad-agi deg usmel-inek·inem s wenɣal n tangalt yellan sdaw-agi.",
|
||||
"embed.preview": "Akka ara d-iban:",
|
||||
|
|
@ -264,6 +277,7 @@
|
|||
"firehose.remote": "Iqeddacen nniḍen",
|
||||
"follow_request.authorize": "Ssireg",
|
||||
"follow_request.reject": "Agi",
|
||||
"follow_suggestions.curated_suggestion": "Yettwafren sɣur tarbaɛt",
|
||||
"follow_suggestions.dismiss": "Dayen ur t-id-skan ara",
|
||||
"follow_suggestions.featured_longer": "Yettwafraned s ufus sɣur agraw n {domain}",
|
||||
"follow_suggestions.friends_of_friends_longer": "D aɣeṛfan ar wid i teṭṭafareḍ",
|
||||
|
|
@ -301,6 +315,7 @@
|
|||
"hashtag.follow": "Ḍfeṛ ahacṭag",
|
||||
"hashtag.mute": "Sgugem #{hashtag}",
|
||||
"hashtags.and_other": "…d {count, plural, one {}other {# nniḍen}}",
|
||||
"home.column_settings.show_quotes": "Sken-d tibdarin",
|
||||
"home.column_settings.show_reblogs": "Ssken-d beṭṭu",
|
||||
"home.column_settings.show_replies": "Ssken-d tiririyin",
|
||||
"home.hide_announcements": "Ffer ulɣuyen",
|
||||
|
|
@ -354,6 +369,7 @@
|
|||
"keyboard_shortcuts.toggle_hidden": "i uskan/tuffra n uḍris deffir CW",
|
||||
"keyboard_shortcuts.toggle_sensitivity": "i teskent/tuffra n yimidyaten",
|
||||
"keyboard_shortcuts.toot": "i wakken attebdud tajewwaqt tamaynut",
|
||||
"keyboard_shortcuts.translate": "i usuqel n tsuffeɣt",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "i tulin ɣer d asawen n tebdart",
|
||||
"learn_more_link.got_it": "Gziɣ-t",
|
||||
|
|
@ -458,6 +474,7 @@
|
|||
"notifications.column_settings.mention": "Abdar:",
|
||||
"notifications.column_settings.poll": "Igemmaḍ n usenqed:",
|
||||
"notifications.column_settings.push": "Ilɣa yettudemmren",
|
||||
"notifications.column_settings.quote": "Yebder-d:",
|
||||
"notifications.column_settings.reblog": "Seǧhed:",
|
||||
"notifications.column_settings.show": "Ssken-d tilɣa deg ujgu",
|
||||
"notifications.column_settings.sound": "Rmed imesli",
|
||||
|
|
@ -631,6 +648,7 @@
|
|||
"status.mute_conversation": "Sgugem adiwenni",
|
||||
"status.open": "Semɣeṛ tasuffeɣt-ayi",
|
||||
"status.pin": "Senteḍ-itt deg umaɣnu",
|
||||
"status.quote_post_author": "Yebder-d tasuffeɣt sɣur @{name}",
|
||||
"status.read_more": "Issin ugar",
|
||||
"status.reblog": "Bḍu",
|
||||
"status.reblogged_by": "Yebḍa-tt {name}",
|
||||
|
|
@ -650,7 +668,7 @@
|
|||
"status.show_original": "Sken aɣbalu",
|
||||
"status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}",
|
||||
"status.translate": "Suqel",
|
||||
"status.translated_from_with": "Yettwasuqel seg {lang} s {provider}",
|
||||
"status.translated_from_with": "Tettwasuqel seg {lang} s {provider}",
|
||||
"status.uncached_media_warning": "Ulac taskant",
|
||||
"status.unmute_conversation": "Kkes asgugem n udiwenni",
|
||||
"status.unpin": "Kkes asenteḍ seg umaɣnu",
|
||||
|
|
|
|||
|
|
@ -245,6 +245,9 @@
|
|||
"confirmations.remove_from_followers.confirm": "팔로워 제거",
|
||||
"confirmations.remove_from_followers.message": "{name} 님이 나를 팔로우하지 않게 됩니다. 계속할까요?",
|
||||
"confirmations.remove_from_followers.title": "팔로워를 제거할까요?",
|
||||
"confirmations.revoke_quote.confirm": "게시물 삭제",
|
||||
"confirmations.revoke_quote.message": "이 작업은 되돌릴 수 없습니다.",
|
||||
"confirmations.revoke_quote.title": "게시물을 지울까요?",
|
||||
"confirmations.unfollow.confirm": "팔로우 해제",
|
||||
"confirmations.unfollow.message": "정말로 {name} 님을 팔로우 해제하시겠습니까?",
|
||||
"confirmations.unfollow.title": "사용자를 언팔로우 할까요?",
|
||||
|
|
@ -498,6 +501,8 @@
|
|||
"keyboard_shortcuts.translate": "게시물 번역",
|
||||
"keyboard_shortcuts.unfocus": "작성창에서 포커스 해제",
|
||||
"keyboard_shortcuts.up": "리스트에서 위로 이동",
|
||||
"learn_more_link.got_it": "확인",
|
||||
"learn_more_link.learn_more": "더 알아보기",
|
||||
"lightbox.close": "닫기",
|
||||
"lightbox.next": "다음",
|
||||
"lightbox.previous": "이전",
|
||||
|
|
@ -598,6 +603,7 @@
|
|||
"notification.label.mention": "멘션",
|
||||
"notification.label.private_mention": "개인 멘션",
|
||||
"notification.label.private_reply": "개인 답글",
|
||||
"notification.label.quote": "{name} 님이 내 게시물을 인용했습니다",
|
||||
"notification.label.reply": "답글",
|
||||
"notification.mention": "멘션",
|
||||
"notification.mentioned_you": "{name} 님의 멘션",
|
||||
|
|
@ -845,6 +851,8 @@
|
|||
"status.bookmark": "북마크",
|
||||
"status.cancel_reblog_private": "부스트 취소",
|
||||
"status.cannot_reblog": "이 게시물은 부스트 할 수 없습니다",
|
||||
"status.context.load_new_replies": "새 답글 보기",
|
||||
"status.context.loading": "추가 답글 확인중",
|
||||
"status.continued_thread": "이어지는 글타래",
|
||||
"status.copy": "게시물 링크 복사",
|
||||
"status.delete": "삭제",
|
||||
|
|
@ -871,6 +879,9 @@
|
|||
"status.open": "상세 정보 표시",
|
||||
"status.pin": "고정",
|
||||
"status.quote_error.filtered": "필터에 의해 가려짐",
|
||||
"status.quote_error.not_available": "게시물 사용 불가",
|
||||
"status.quote_error.pending_approval": "게시물 대기중",
|
||||
"status.quote_post_author": "인용된 @{name} 님의 게시물",
|
||||
"status.read_more": "더 보기",
|
||||
"status.reblog": "부스트",
|
||||
"status.reblog_private": "원래의 수신자들에게 부스트",
|
||||
|
|
@ -885,6 +896,7 @@
|
|||
"status.reply": "답장",
|
||||
"status.replyAll": "글타래에 답장",
|
||||
"status.report": "@{name} 신고하기",
|
||||
"status.revoke_quote": "내 게시물을 @{name}의 게시물에서 삭제",
|
||||
"status.sensitive_warning": "민감한 내용",
|
||||
"status.share": "공유",
|
||||
"status.show_less_all": "모두 접기",
|
||||
|
|
|
|||
|
|
@ -245,6 +245,9 @@
|
|||
"confirmations.remove_from_followers.confirm": "Suá掉跟tuè lí ê",
|
||||
"confirmations.remove_from_followers.message": "{name} ē停止跟tuè lí。Lí kám確定beh繼續?",
|
||||
"confirmations.remove_from_followers.title": "Kám beh suá掉跟tuè lí ê?",
|
||||
"confirmations.revoke_quote.confirm": "Thâi掉PO文",
|
||||
"confirmations.revoke_quote.message": "Tsit ê動作bē當復原。",
|
||||
"confirmations.revoke_quote.title": "Kám beh thâi掉PO文?",
|
||||
"confirmations.unfollow.confirm": "取消跟tuè",
|
||||
"confirmations.unfollow.message": "Lí kám確定無愛跟tuè {name}?",
|
||||
"confirmations.unfollow.title": "Kám beh取消跟tuè tsit ê用者?",
|
||||
|
|
@ -289,6 +292,7 @@
|
|||
"domain_pill.your_handle": "Lí ê口座:",
|
||||
"domain_pill.your_server": "Lí數位ê厝,內底有lí所有ê PO文。無kah意?Ē當轉kàu別ê服侍器,koh保有跟tuè lí êl âng。.",
|
||||
"domain_pill.your_username": "Lí 佇tsit ê服侍器獨一ê稱呼。佇無kâng ê服侍器有可能tshuē著kāng名ê用者。",
|
||||
"dropdown.empty": "揀選項",
|
||||
"embed.instructions": "Khóo-pih 下kha ê程式碼,來kā tsit篇PO文tàu佇lí ê網站。",
|
||||
"embed.preview": "伊e án-ne顯示:\n",
|
||||
"emoji_button.activity": "活動",
|
||||
|
|
@ -567,7 +571,7 @@
|
|||
"navigation_bar.live_feed_local": "即時ê內容(本地)",
|
||||
"navigation_bar.live_feed_public": "即時ê內容(公開)",
|
||||
"navigation_bar.logout": "登出",
|
||||
"navigation_bar.moderation": "審核",
|
||||
"navigation_bar.moderation": "管理",
|
||||
"navigation_bar.more": "其他",
|
||||
"navigation_bar.mutes": "消音ê用者",
|
||||
"navigation_bar.opened_in_classic_interface": "PO文、口座kap其他指定ê頁面,預設ē佇經典ê網頁界面內phah開。",
|
||||
|
|
@ -600,15 +604,16 @@
|
|||
"notification.label.mention": "提起",
|
||||
"notification.label.private_mention": "私人ê提起",
|
||||
"notification.label.private_reply": "私人ê回應",
|
||||
"notification.label.quote": "{name} 引用lí ê PO文",
|
||||
"notification.label.reply": "回應",
|
||||
"notification.mention": "提起",
|
||||
"notification.mentioned_you": "{name}kā lí提起",
|
||||
"notification.moderation-warning.learn_more": "看詳細",
|
||||
"notification.moderation_warning": "Lí有收著審核ê警告",
|
||||
"notification.moderation_warning": "Lí有收著管理ê警告",
|
||||
"notification.moderation_warning.action_delete_statuses": "Lí ê一寡PO文hōo lâng thâi掉ah。",
|
||||
"notification.moderation_warning.action_disable": "Lí ê口座hōo lâng停止使用ah。",
|
||||
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Lí ê一寡PO文,hōo lâng標做敏感ê內容。",
|
||||
"notification.moderation_warning.action_none": "Lí ê口座有收著審核ê警告。",
|
||||
"notification.moderation_warning.action_none": "Lí ê口座有收著管理ê警告。",
|
||||
"notification.moderation_warning.action_sensitive": "Tuì tsit-má開始,lí êPO文ē標做敏感ê內容。",
|
||||
"notification.moderation_warning.action_silence": "Lí ê口座hōo lâng限制ah。",
|
||||
"notification.moderation_warning.action_suspend": "Lí ê口座ê權限已經停止ah。",
|
||||
|
|
@ -657,6 +662,7 @@
|
|||
"notifications.column_settings.mention": "提起:",
|
||||
"notifications.column_settings.poll": "投票ê結果:",
|
||||
"notifications.column_settings.push": "Sak通知",
|
||||
"notifications.column_settings.quote": "引用:",
|
||||
"notifications.column_settings.reblog": "轉送:",
|
||||
"notifications.column_settings.show": "佇欄內底顯示",
|
||||
"notifications.column_settings.sound": "播放聲音",
|
||||
|
|
@ -878,6 +884,7 @@
|
|||
"status.quote_error.pending_approval": "鋪文當咧送",
|
||||
"status.quote_error.pending_approval_popout.body": "因為無kâng ê服侍器有無kâng ê協定,佇聯邦宇宙分享ê引文可能愛開時間來顯示。",
|
||||
"status.quote_error.pending_approval_popout.title": "Leh送引文?請sió等leh",
|
||||
"status.quote_policy_change": "改通引用ê lâng",
|
||||
"status.quote_post_author": "引用 @{name} ê PO文ah",
|
||||
"status.read_more": "讀詳細",
|
||||
"status.reblog": "轉送",
|
||||
|
|
@ -893,6 +900,7 @@
|
|||
"status.reply": "回應",
|
||||
"status.replyAll": "應討論線",
|
||||
"status.report": "檢舉 @{name}",
|
||||
"status.revoke_quote": "Kā 我ê PO文tuì @{name} ê thâi掉",
|
||||
"status.sensitive_warning": "敏感ê內容",
|
||||
"status.share": "分享",
|
||||
"status.show_less_all": "Lóng收起來",
|
||||
|
|
@ -951,5 +959,17 @@
|
|||
"video.skip_forward": "跳kah頭前",
|
||||
"video.unmute": "取消消音",
|
||||
"video.volume_down": "變khah細聲",
|
||||
"video.volume_up": "變khah大聲"
|
||||
"video.volume_up": "變khah大聲",
|
||||
"visibility_modal.button_title": "設定通看ê程度",
|
||||
"visibility_modal.header": "通看ê程度kap互動",
|
||||
"visibility_modal.helper.direct_quoting": "私人ê提起bē當引用。",
|
||||
"visibility_modal.helper.privacy_editing": "公開ê PO文bē當改in通看ê程度。",
|
||||
"visibility_modal.helper.private_quoting": "Bē當引用kan-ta跟tuè ê通看ê PO文。",
|
||||
"visibility_modal.helper.unlisted_quoting": "若別lâng引用lí,in ê PO文mā ē tuì趨勢時間線隱藏。",
|
||||
"visibility_modal.instructions": "控制ē當kap tsit篇PO文互動ê lâng,Ē當佇 <link>偏愛ê設定>其他</link>tshuē tio̍h全地ê設定。",
|
||||
"visibility_modal.privacy_label": "隱私權",
|
||||
"visibility_modal.quote_followers": "Kan-ta hōo跟tuè ê lâng",
|
||||
"visibility_modal.quote_label": "改通引用ê lâng",
|
||||
"visibility_modal.quote_nobody": "無半位",
|
||||
"visibility_modal.quote_public": "Ta̍k ê lâng"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -245,6 +245,9 @@
|
|||
"confirmations.remove_from_followers.confirm": "Fjern fylgjar",
|
||||
"confirmations.remove_from_followers.message": "{name} vil ikkje fylgja deg meir. Vil du halda fram?",
|
||||
"confirmations.remove_from_followers.title": "Fjern fylgjar?",
|
||||
"confirmations.revoke_quote.confirm": "Fjern innlegget",
|
||||
"confirmations.revoke_quote.message": "Du kan ikkje angra denne handlinga.",
|
||||
"confirmations.revoke_quote.title": "Fjern innlegget?",
|
||||
"confirmations.unfollow.confirm": "Slutt å fylgja",
|
||||
"confirmations.unfollow.message": "Er du sikker på at du vil slutta å fylgja {name}?",
|
||||
"confirmations.unfollow.title": "Slutt å fylgja brukaren?",
|
||||
|
|
@ -498,6 +501,8 @@
|
|||
"keyboard_shortcuts.translate": "å omsetje eit innlegg",
|
||||
"keyboard_shortcuts.unfocus": "for å fokusere vekk skrive-/søkefeltet",
|
||||
"keyboard_shortcuts.up": "Flytt opp på lista",
|
||||
"learn_more_link.got_it": "Forstått",
|
||||
"learn_more_link.learn_more": "Lær meir",
|
||||
"lightbox.close": "Lukk",
|
||||
"lightbox.next": "Neste",
|
||||
"lightbox.previous": "Førre",
|
||||
|
|
@ -598,6 +603,7 @@
|
|||
"notification.label.mention": "Omtale",
|
||||
"notification.label.private_mention": "Privat omtale",
|
||||
"notification.label.private_reply": "Privat svar",
|
||||
"notification.label.quote": "{name} siterte innlegget ditt",
|
||||
"notification.label.reply": "Svar",
|
||||
"notification.mention": "Omtale",
|
||||
"notification.mentioned_you": "{name} nemnde deg",
|
||||
|
|
@ -655,6 +661,7 @@
|
|||
"notifications.column_settings.mention": "Omtaler:",
|
||||
"notifications.column_settings.poll": "Røysteresultat:",
|
||||
"notifications.column_settings.push": "Pushvarsel",
|
||||
"notifications.column_settings.quote": "Sitat:",
|
||||
"notifications.column_settings.reblog": "Framhevingar:",
|
||||
"notifications.column_settings.show": "Vis i kolonne",
|
||||
"notifications.column_settings.sound": "Spel av lyd",
|
||||
|
|
@ -845,6 +852,8 @@
|
|||
"status.bookmark": "Set bokmerke",
|
||||
"status.cancel_reblog_private": "Opphev framheving",
|
||||
"status.cannot_reblog": "Du kan ikkje framheva dette innlegget",
|
||||
"status.context.load_new_replies": "Nye svar finst",
|
||||
"status.context.loading": "Ser etter fleire svar",
|
||||
"status.continued_thread": "Framhald til tråden",
|
||||
"status.copy": "Kopier lenke til status",
|
||||
"status.delete": "Slett",
|
||||
|
|
@ -871,6 +880,11 @@
|
|||
"status.open": "Utvid denne statusen",
|
||||
"status.pin": "Fest på profil",
|
||||
"status.quote_error.filtered": "Gøymt på grunn av eitt av filtra dine",
|
||||
"status.quote_error.not_available": "Innlegget er ikkje tilgjengeleg",
|
||||
"status.quote_error.pending_approval": "Innlegget ventar",
|
||||
"status.quote_error.pending_approval_popout.body": "Sitat frå rundt om i allheimen kan ta tid å visa, fordi ulike tenarar har ulike protokollar.",
|
||||
"status.quote_error.pending_approval_popout.title": "Ventande sitat? Ikkje stress",
|
||||
"status.quote_post_author": "Siterte eit innlegg av @{name}",
|
||||
"status.read_more": "Les meir",
|
||||
"status.reblog": "Framhev",
|
||||
"status.reblog_private": "Framhev til dei originale mottakarane",
|
||||
|
|
@ -885,6 +899,7 @@
|
|||
"status.reply": "Svar",
|
||||
"status.replyAll": "Svar til tråd",
|
||||
"status.report": "Rapporter @{name}",
|
||||
"status.revoke_quote": "Fjern innlegget mitt frå @{name} sitt innlegg",
|
||||
"status.sensitive_warning": "Ømtolig innhald",
|
||||
"status.share": "Del",
|
||||
"status.show_less_all": "Vis mindre for alle",
|
||||
|
|
|
|||
|
|
@ -224,6 +224,7 @@
|
|||
"confirmations.discard_draft.edit.message": "Kontynuowanie spowoduje utratę wszystkich zmian wprowadzonych przez Ciebie w aktualnie edytowanym poście.",
|
||||
"confirmations.discard_draft.edit.title": "Odrzucić zmiany w poście?",
|
||||
"confirmations.discard_draft.post.cancel": "Wznów wersję roboczą",
|
||||
"confirmations.discard_draft.post.message": "Kontynuacja odrzuci aktualnie tworzony post.",
|
||||
"confirmations.discard_draft.post.title": "Anulować wersję roboczą?",
|
||||
"confirmations.discard_edit_media.confirm": "Odrzuć",
|
||||
"confirmations.discard_edit_media.message": "Masz niezapisane zmiany w opisie lub podglądzie, odrzucić je mimo to?",
|
||||
|
|
@ -244,6 +245,9 @@
|
|||
"confirmations.remove_from_followers.confirm": "Usuń obserwującego",
|
||||
"confirmations.remove_from_followers.message": "{name} przestanie Cię obserwować. Czy na pewno chcesz kontynuować?",
|
||||
"confirmations.remove_from_followers.title": "Usunąć obserwującego?",
|
||||
"confirmations.revoke_quote.confirm": "Usuń post",
|
||||
"confirmations.revoke_quote.message": "Tej akcji nie można cofnąć.",
|
||||
"confirmations.revoke_quote.title": "Usuń post?",
|
||||
"confirmations.unfollow.confirm": "Nie obserwuj",
|
||||
"confirmations.unfollow.message": "Czy na pewno nie chcesz obserwować {name}?",
|
||||
"confirmations.unfollow.title": "Cofnąć obserwację?",
|
||||
|
|
@ -305,6 +309,9 @@
|
|||
"emoji_button.search_results": "Wyniki wyszukiwania",
|
||||
"emoji_button.symbols": "Symbole",
|
||||
"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.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.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_suspended": "Konto zawieszone",
|
||||
"empty_column.account_timeline": "Brak wpisów!",
|
||||
|
|
@ -560,6 +567,8 @@
|
|||
"navigation_bar.follows_and_followers": "Obserwowani i obserwujący",
|
||||
"navigation_bar.import_export": "Import i eksport",
|
||||
"navigation_bar.lists": "Listy",
|
||||
"navigation_bar.live_feed_local": "Kanał na żywo (lokalny)",
|
||||
"navigation_bar.live_feed_public": "Kanał na żywo (publiczny)",
|
||||
"navigation_bar.logout": "Wyloguj",
|
||||
"navigation_bar.moderation": "Moderacja",
|
||||
"navigation_bar.more": "Więcej",
|
||||
|
|
@ -594,6 +603,7 @@
|
|||
"notification.label.mention": "Wzmianka",
|
||||
"notification.label.private_mention": "Wzmianka bezpośrednia",
|
||||
"notification.label.private_reply": "Komentarz bezpośredni",
|
||||
"notification.label.quote": "{name} cytował twój post",
|
||||
"notification.label.reply": "Komentarz",
|
||||
"notification.mention": "Wzmianka",
|
||||
"notification.mentioned_you": "{name} wzmiankuje cię",
|
||||
|
|
@ -651,6 +661,7 @@
|
|||
"notifications.column_settings.mention": "Wzmianki:",
|
||||
"notifications.column_settings.poll": "Wyniki ankiety:",
|
||||
"notifications.column_settings.push": "Powiadomienia push",
|
||||
"notifications.column_settings.quote": "Cytaty:",
|
||||
"notifications.column_settings.reblog": "Podbicia:",
|
||||
"notifications.column_settings.show": "Pokaż w kolumnie",
|
||||
"notifications.column_settings.sound": "Odtwarzaj dźwięk",
|
||||
|
|
@ -871,6 +882,8 @@
|
|||
"status.quote_error.filtered": "Ukryte z powodu jednego z Twoich filtrów",
|
||||
"status.quote_error.not_available": "Post niedostępny",
|
||||
"status.quote_error.pending_approval": "Post oczekujący",
|
||||
"status.quote_error.pending_approval_popout.body": "Oferty współdzielone przez Fediverse mogą wymagać czasu, ponieważ różne serwery mają różne protokoły.",
|
||||
"status.quote_error.pending_approval_popout.title": "Oczekujący cytat? Spokojnie, bądź cierpliwy :)",
|
||||
"status.quote_post_author": "Zacytowano post @{name}",
|
||||
"status.read_more": "Czytaj dalej",
|
||||
"status.reblog": "Podbij",
|
||||
|
|
@ -886,6 +899,7 @@
|
|||
"status.reply": "Odpowiedz",
|
||||
"status.replyAll": "Odpowiedz na wątek",
|
||||
"status.report": "Zgłoś @{name}",
|
||||
"status.revoke_quote": "Usuń mój wpis z postu @{name}",
|
||||
"status.sensitive_warning": "Wrażliwa zawartość",
|
||||
"status.share": "Udostępnij",
|
||||
"status.show_less_all": "Zwiń wszystkie",
|
||||
|
|
|
|||
|
|
@ -245,6 +245,9 @@
|
|||
"confirmations.remove_from_followers.confirm": "Убрать подписчика",
|
||||
"confirmations.remove_from_followers.message": "Пользователь {name} перестанет быть подписан на вас. Продолжить?",
|
||||
"confirmations.remove_from_followers.title": "Убрать подписчика?",
|
||||
"confirmations.revoke_quote.confirm": "Убрать пост",
|
||||
"confirmations.revoke_quote.message": "Это действие невозможно отменить.",
|
||||
"confirmations.revoke_quote.title": "Убрать пост?",
|
||||
"confirmations.unfollow.confirm": "Отписаться",
|
||||
"confirmations.unfollow.message": "Вы уверены, что хотите отписаться от {name}?",
|
||||
"confirmations.unfollow.title": "Отписаться?",
|
||||
|
|
@ -498,6 +501,8 @@
|
|||
"keyboard_shortcuts.translate": "перевести пост",
|
||||
"keyboard_shortcuts.unfocus": "убрать фокус с поля ввода/поиска",
|
||||
"keyboard_shortcuts.up": "вверх по списку",
|
||||
"learn_more_link.got_it": "Понятно",
|
||||
"learn_more_link.learn_more": "Узнать больше",
|
||||
"lightbox.close": "Закрыть",
|
||||
"lightbox.next": "Далее",
|
||||
"lightbox.previous": "Назад",
|
||||
|
|
@ -598,6 +603,7 @@
|
|||
"notification.label.mention": "Упоминание",
|
||||
"notification.label.private_mention": "Личное упоминание",
|
||||
"notification.label.private_reply": "Приватный ответ",
|
||||
"notification.label.quote": "{name} процитировал(а) ваш пост",
|
||||
"notification.label.reply": "Ответ",
|
||||
"notification.mention": "Упоминание",
|
||||
"notification.mentioned_you": "{name} упомянул(а) вас",
|
||||
|
|
@ -655,6 +661,7 @@
|
|||
"notifications.column_settings.mention": "Вас упомянули в посте:",
|
||||
"notifications.column_settings.poll": "Опрос, в котором вы приняли участие, завершился:",
|
||||
"notifications.column_settings.push": "Push-уведомления",
|
||||
"notifications.column_settings.quote": "Ваш пост процитировали:",
|
||||
"notifications.column_settings.reblog": "Ваш пост продвинули:",
|
||||
"notifications.column_settings.show": "Отображать в списке",
|
||||
"notifications.column_settings.sound": "Проигрывать звук",
|
||||
|
|
@ -845,6 +852,8 @@
|
|||
"status.bookmark": "Добавить в закладки",
|
||||
"status.cancel_reblog_private": "Отменить продвижение",
|
||||
"status.cannot_reblog": "Этот пост не может быть продвинут",
|
||||
"status.context.load_new_replies": "Доступны новые ответы",
|
||||
"status.context.loading": "Проверяем, есть ли ещё ответы",
|
||||
"status.continued_thread": "Продолжение предыдущего поста",
|
||||
"status.copy": "Скопировать ссылку на пост",
|
||||
"status.delete": "Удалить",
|
||||
|
|
@ -871,6 +880,9 @@
|
|||
"status.open": "Открыть пост",
|
||||
"status.pin": "Закрепить в профиле",
|
||||
"status.quote_error.filtered": "Скрыто одним из ваших фильтров",
|
||||
"status.quote_error.not_available": "Пост недоступен",
|
||||
"status.quote_error.pending_approval": "Пост ожидает подтверждения",
|
||||
"status.quote_error.pending_approval_popout.title": "Цитирование ещё не подтверждено? Не беспокойтесь",
|
||||
"status.read_more": "Читать далее",
|
||||
"status.reblog": "Продвинуть",
|
||||
"status.reblog_private": "Продвинуть для своей аудитории",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"about.blocks": "මැදිහත්කරණ සේවාදායක",
|
||||
"about.contact": "සබඳතාව:",
|
||||
"about.default_locale": "Default",
|
||||
"about.disclaimer": "මාස්ටඩන් යනු නිදහස් විවෘත මූලාශ්ර මෘදුකාංගයකි. එය මාස්ටඩන් gGmbH හි වෙළඳ නාමයකි.",
|
||||
"about.domain_blocks.no_reason_available": "හේතුව ලබා ගත නොහැක.",
|
||||
"about.domain_blocks.preamble": "Mastodon සාමාන්යයෙන් ඔබට fediverse හි වෙනත් ඕනෑම සේවාදායකයකින් අන්තර්ගතයන් බැලීමට සහ පරිශීලකයින් සමඟ අන්තර් ක්රියා කිරීමට ඉඩ සලසයි. මෙම විශේෂිත සේවාදායකයේ සිදු කර ඇති ව්යතිරේක මේවාය.",
|
||||
|
|
|
|||
|
|
@ -245,6 +245,8 @@
|
|||
"confirmations.remove_from_followers.confirm": "Ta bort följare",
|
||||
"confirmations.remove_from_followers.message": "{name} kommer att sluta följa dig. Är du säker på att du vill fortsätta?",
|
||||
"confirmations.remove_from_followers.title": "Ta bort följare?",
|
||||
"confirmations.revoke_quote.confirm": "Ta bort inlägg",
|
||||
"confirmations.revoke_quote.title": "Ta bort inlägg?",
|
||||
"confirmations.unfollow.confirm": "Avfölj",
|
||||
"confirmations.unfollow.message": "Är du säker på att du vill avfölja {name}?",
|
||||
"confirmations.unfollow.title": "Avfölj användare?",
|
||||
|
|
@ -289,6 +291,7 @@
|
|||
"domain_pill.your_handle": "Ditt handtag:",
|
||||
"domain_pill.your_server": "Ditt digitala hem, där alla dina inlägg bor. Gillar du inte just denna? Byt server när som helst och ta med dina anhängare också.",
|
||||
"domain_pill.your_username": "Din unika identifierare på denna server. Det är möjligt att hitta användare med samma användarnamn på olika servrar.",
|
||||
"dropdown.empty": "Välj ett alternativ",
|
||||
"embed.instructions": "Bädda in detta inlägg på din webbplats genom att kopiera koden nedan.",
|
||||
"embed.preview": "Så här kommer det att se ut:",
|
||||
"emoji_button.activity": "Aktivitet",
|
||||
|
|
@ -498,6 +501,8 @@
|
|||
"keyboard_shortcuts.translate": "för att översätta ett inlägg",
|
||||
"keyboard_shortcuts.unfocus": "Avfokusera skrivfält/sökfält",
|
||||
"keyboard_shortcuts.up": "Flytta uppåt i listan",
|
||||
"learn_more_link.got_it": "Jag förstår",
|
||||
"learn_more_link.learn_more": "Läs mer",
|
||||
"lightbox.close": "Stäng",
|
||||
"lightbox.next": "Nästa",
|
||||
"lightbox.previous": "Tidigare",
|
||||
|
|
@ -873,6 +878,7 @@
|
|||
"status.open": "Utvidga detta inlägg",
|
||||
"status.pin": "Fäst i profil",
|
||||
"status.quote_error.filtered": "Dolt på grund av ett av dina filter",
|
||||
"status.quote_error.not_available": "Inlägg ej tillgängligt",
|
||||
"status.read_more": "Läs mer",
|
||||
"status.reblog": "Boosta",
|
||||
"status.reblog_private": "Boosta med ursprunglig synlighet",
|
||||
|
|
@ -946,5 +952,10 @@
|
|||
"video.skip_forward": "Hoppa framåt",
|
||||
"video.unmute": "Avtysta",
|
||||
"video.volume_down": "Volym ned",
|
||||
"video.volume_up": "Volym upp"
|
||||
"video.volume_up": "Volym upp",
|
||||
"visibility_modal.header": "Synlighet och interaktion",
|
||||
"visibility_modal.privacy_label": "Integritet",
|
||||
"visibility_modal.quote_followers": "Endast följare",
|
||||
"visibility_modal.quote_nobody": "Ingen",
|
||||
"visibility_modal.quote_public": "Alla"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -274,6 +274,7 @@
|
|||
"domain_pill.your_handle": "Ваша адреса:",
|
||||
"domain_pill.your_server": "Ваш цифровий дім, де живуть усі ваші дописи. Не подобається цей? Перенесіть сервери в будь-який час і залучайте своїх підписників.",
|
||||
"domain_pill.your_username": "Ваш унікальний ідентифікатор на цьому сервері. Ви можете знайти користувачів з однаковими іменами на різних серверах.",
|
||||
"dropdown.empty": "Оберіть варіант",
|
||||
"embed.instructions": "Вбудуйте цей допис до вашого вебсайту, скопіювавши код нижче.",
|
||||
"embed.preview": "Ось який вигляд це матиме:",
|
||||
"emoji_button.activity": "Діяльність",
|
||||
|
|
@ -919,5 +920,10 @@
|
|||
"video.fullscreen": "На весь екран",
|
||||
"video.hide": "Приховати відео",
|
||||
"video.pause": "Призупинити",
|
||||
"video.play": "Програвати"
|
||||
"video.play": "Програвати",
|
||||
"visibility_modal.privacy_label": "Конфіденційність",
|
||||
"visibility_modal.quote_followers": "Тільки для підписників",
|
||||
"visibility_modal.quote_label": "Змінити хто може цитувати",
|
||||
"visibility_modal.quote_nobody": "Ніхто",
|
||||
"visibility_modal.quote_public": "Будь-хто"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -292,6 +292,7 @@
|
|||
"domain_pill.your_handle": "Địa chỉ Mastodon của bạn:",
|
||||
"domain_pill.your_server": "Nơi lưu trữ tút của bạn. Không thích ở đây? Chuyển sang máy chủ khác và giữ nguyên người theo dõi của bạn.",
|
||||
"domain_pill.your_username": "Chỉ riêng bạn trên máy chủ này. Những máy chủ khác có thể cũng có tên người dùng giống vậy.",
|
||||
"dropdown.empty": "Chọn một lựa chọn",
|
||||
"embed.instructions": "Sao chép đoạn mã dưới đây và chèn vào trang web của bạn.",
|
||||
"embed.preview": "Nó sẽ hiển thị như vầy:",
|
||||
"emoji_button.activity": "Hoạt động",
|
||||
|
|
@ -879,11 +880,13 @@
|
|||
"status.mute_conversation": "Tắt thông báo",
|
||||
"status.open": "Mở tút",
|
||||
"status.pin": "Ghim lên hồ sơ",
|
||||
"status.quote.cancel": "Bỏ trích dẫn",
|
||||
"status.quote_error.filtered": "Bị ẩn vì một bộ lọc của bạn",
|
||||
"status.quote_error.not_available": "Tút không khả dụng",
|
||||
"status.quote_error.pending_approval": "Tút đang chờ duyệt",
|
||||
"status.quote_error.pending_approval_popout.body": "Các trích dẫn được chia sẻ trên Fediverse có thể mất thời gian để hiển thị vì các máy chủ khác nhau có giao thức khác nhau.",
|
||||
"status.quote_error.pending_approval_popout.title": "Đang chờ trích dẫn? Hãy bình tĩnh",
|
||||
"status.quote_policy_change": "Thay đổi người có thể trích dẫn",
|
||||
"status.quote_post_author": "Trích dẫn từ tút của @{name}",
|
||||
"status.read_more": "Đọc tiếp",
|
||||
"status.reblog": "Đăng lại",
|
||||
|
|
@ -959,5 +962,17 @@
|
|||
"video.skip_forward": "Tua tới",
|
||||
"video.unmute": "Bật tiếng",
|
||||
"video.volume_down": "Giảm âm lượng",
|
||||
"video.volume_up": "Tăng âm lượng"
|
||||
"video.volume_up": "Tăng âm lượng",
|
||||
"visibility_modal.button_title": "Thay đổi quyền riêng tư",
|
||||
"visibility_modal.header": "Hiển thị và tương tác",
|
||||
"visibility_modal.helper.direct_quoting": "Không thể trích dẫn nhắn riêng.",
|
||||
"visibility_modal.helper.privacy_editing": "Không thể thay đổi kiểu hiển thị của tút đã đăng.",
|
||||
"visibility_modal.helper.private_quoting": "Không thể trích dẫn những tút chỉ dành cho người theo dõi.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Khi ai đó trích dẫn bạn, tút của họ cũng sẽ bị ẩn khỏi bảng tin công khai.",
|
||||
"visibility_modal.instructions": "Kiểm soát những ai có thể tương tác với tút này. Cài đặt chung trong <link>Thiết lập > Khác</link>.",
|
||||
"visibility_modal.privacy_label": "Riêng tư",
|
||||
"visibility_modal.quote_followers": "Chỉ người theo dõi",
|
||||
"visibility_modal.quote_label": "Thay đổi người có thể trích dẫn",
|
||||
"visibility_modal.quote_nobody": "Không ai",
|
||||
"visibility_modal.quote_public": "Bất cứ ai"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -240,6 +240,8 @@
|
|||
"confirmations.remove_from_followers.confirm": "移除关注者",
|
||||
"confirmations.remove_from_followers.message": "{name} 将停止关注您。您确定要继续吗?",
|
||||
"confirmations.remove_from_followers.title": "移除关注者?",
|
||||
"confirmations.revoke_quote.confirm": "移除嘟文",
|
||||
"confirmations.revoke_quote.title": "移除嘟文?",
|
||||
"confirmations.unfollow.confirm": "取消关注",
|
||||
"confirmations.unfollow.message": "你确定要取消关注 {name} 吗?",
|
||||
"confirmations.unfollow.title": "确定要取消关注用户?",
|
||||
|
|
@ -491,6 +493,7 @@
|
|||
"keyboard_shortcuts.translate": "翻译嘟文",
|
||||
"keyboard_shortcuts.unfocus": "取消输入/搜索",
|
||||
"keyboard_shortcuts.up": "在列表中让光标上移",
|
||||
"learn_more_link.got_it": "明白了",
|
||||
"lightbox.close": "关闭",
|
||||
"lightbox.next": "下一个",
|
||||
"lightbox.previous": "上一个",
|
||||
|
|
@ -861,6 +864,7 @@
|
|||
"status.mute_conversation": "关闭此对话的通知",
|
||||
"status.open": "展开嘟文",
|
||||
"status.pin": "在个人资料页面置顶",
|
||||
"status.quote.cancel": "取消引用",
|
||||
"status.quote_error.filtered": "已根据你的筛选器过滤",
|
||||
"status.read_more": "查看更多",
|
||||
"status.reblog": "转嘟",
|
||||
|
|
|
|||
|
|
@ -292,6 +292,7 @@
|
|||
"domain_pill.your_handle": "您的帳號:",
|
||||
"domain_pill.your_server": "您數位世界的家,您所有的嘟文都在這裡。不喜歡這台伺服器嗎?您能隨時搬家至其他伺服器並且仍保有您的跟隨者。",
|
||||
"domain_pill.your_username": "您於您的伺服器中獨一無二的識別。於不同的伺服器上可能找到具有相同帳號的使用者。",
|
||||
"dropdown.empty": "選項",
|
||||
"embed.instructions": "若您欲於您的網站嵌入此嘟文,請複製以下程式碼。",
|
||||
"embed.preview": "它將顯示成這樣:",
|
||||
"emoji_button.activity": "活動",
|
||||
|
|
@ -879,11 +880,13 @@
|
|||
"status.mute_conversation": "靜音對話",
|
||||
"status.open": "展開此嘟文",
|
||||
"status.pin": "釘選至個人檔案頁面",
|
||||
"status.quote.cancel": "取消引用嘟文",
|
||||
"status.quote_error.filtered": "由於您的過濾器,該嘟文被隱藏",
|
||||
"status.quote_error.not_available": "無法取得該嘟文",
|
||||
"status.quote_error.pending_approval": "嘟文正在發送中",
|
||||
"status.quote_error.pending_approval_popout.body": "因為伺服器間可能運行不同協定,顯示聯邦宇宙間之引用嘟文會有些許延遲。",
|
||||
"status.quote_error.pending_approval_popout.title": "引用嘟文正在發送中?別著急,請稍候片刻",
|
||||
"status.quote_policy_change": "變更可以引用的人",
|
||||
"status.quote_post_author": "已引用 @{name} 之嘟文",
|
||||
"status.read_more": "閱讀更多",
|
||||
"status.reblog": "轉嘟",
|
||||
|
|
@ -959,5 +962,17 @@
|
|||
"video.skip_forward": "下一部",
|
||||
"video.unmute": "取消靜音",
|
||||
"video.volume_down": "降低音量",
|
||||
"video.volume_up": "提高音量"
|
||||
"video.volume_up": "提高音量",
|
||||
"visibility_modal.button_title": "設定可見性",
|
||||
"visibility_modal.header": "可見性與互動",
|
||||
"visibility_modal.helper.direct_quoting": "無法引用私人提及。",
|
||||
"visibility_modal.helper.privacy_editing": "無法變更已發佈的嘟文之可見性。",
|
||||
"visibility_modal.helper.private_quoting": "無法引用僅追蹤者的嘟文。",
|
||||
"visibility_modal.helper.unlisted_quoting": "當其他人引用您時,他們的嘟文也會自熱門時間軸隱藏。",
|
||||
"visibility_modal.instructions": "控制誰能與此嘟文互動。可在<link>偏好設定 > 其他</link>下找到全域設定。",
|
||||
"visibility_modal.privacy_label": "隱私權",
|
||||
"visibility_modal.quote_followers": "僅限跟隨者",
|
||||
"visibility_modal.quote_label": "變更可以引用的人",
|
||||
"visibility_modal.quote_nobody": "沒有人",
|
||||
"visibility_modal.quote_public": "所有人"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,11 @@
|
|||
import { Map as ImmutableMap, List as ImmutableList, OrderedSet as ImmutableOrderedSet, fromJS } from 'immutable';
|
||||
|
||||
import { changeUploadCompose } from 'mastodon/actions/compose_typed';
|
||||
import {
|
||||
changeUploadCompose,
|
||||
quoteComposeByStatus,
|
||||
quoteComposeCancel,
|
||||
setQuotePolicy,
|
||||
} from 'mastodon/actions/compose_typed';
|
||||
import { timelineDelete } from 'mastodon/actions/timelines_typed';
|
||||
|
||||
import {
|
||||
|
|
@ -83,6 +88,11 @@ const initialState = ImmutableMap({
|
|||
resetFileKey: Math.floor((Math.random() * 0x10000)),
|
||||
idempotencyKey: null,
|
||||
tagHistory: ImmutableList(),
|
||||
|
||||
// Quotes
|
||||
quoted_status_id: null,
|
||||
quote_policy: 'public',
|
||||
default_quote_policy: 'public', // Set in hydration.
|
||||
});
|
||||
|
||||
const initialPoll = ImmutableMap({
|
||||
|
|
@ -117,6 +127,8 @@ function clearAll(state) {
|
|||
map.set('progress', 0);
|
||||
map.set('poll', null);
|
||||
map.set('idempotencyKey', uuid());
|
||||
map.set('quoted_status_id', null);
|
||||
map.set('quote_policy', state.get('default_quote_policy'));
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -317,6 +329,23 @@ export const composeReducer = (state = initialState, action) => {
|
|||
return state.set('is_changing_upload', true);
|
||||
} else if (changeUploadCompose.rejected.match(action)) {
|
||||
return state.set('is_changing_upload', false);
|
||||
} else if (quoteComposeByStatus.match(action)) {
|
||||
const status = action.payload;
|
||||
if (
|
||||
status.getIn(['quote_approval', 'current_user']) === 'automatic' &&
|
||||
state.get('media_attachments').size === 0 &&
|
||||
!state.get('is_uploading') &&
|
||||
!state.get('poll')
|
||||
) {
|
||||
return state
|
||||
.set('quoted_status_id', status.get('id'))
|
||||
.set('spoiler', status.get('sensitive'))
|
||||
.set('spoiler_text', status.get('spoiler_text'));
|
||||
}
|
||||
} else if (quoteComposeCancel.match(action)) {
|
||||
return state.set('quoted_status_id', null);
|
||||
} else if (setQuotePolicy.match(action)) {
|
||||
return state.set('quote_policy', action.payload);
|
||||
}
|
||||
|
||||
switch(action.type) {
|
||||
|
|
@ -491,6 +520,8 @@ export const composeReducer = (state = initialState, action) => {
|
|||
map.set('sensitive', action.status.get('sensitive'));
|
||||
map.set('language', action.status.get('language'));
|
||||
map.set('id', null);
|
||||
// Mastodon-authored posts can be expected to have at most one automatic approval policy
|
||||
map.set('quote_policy', action.status.getIn(['quote_approval', 'automatic', 0]) || 'nobody');
|
||||
|
||||
if (action.status.get('spoiler_text').length > 0) {
|
||||
map.set('spoiler', true);
|
||||
|
|
@ -520,6 +551,8 @@ export const composeReducer = (state = initialState, action) => {
|
|||
map.set('idempotencyKey', uuid());
|
||||
map.set('sensitive', action.status.get('sensitive'));
|
||||
map.set('language', action.status.get('language'));
|
||||
// Mastodon-authored posts can be expected to have at most one automatic approval policy
|
||||
map.set('quote_policy', action.status.getIn(['quote_approval', 'automatic', 0]) || 'nobody');
|
||||
|
||||
if (action.spoiler_text.length > 0) {
|
||||
map.set('spoiler', true);
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import {
|
|||
STATUS_FETCH_REQUEST,
|
||||
STATUS_FETCH_FAIL,
|
||||
} from '../actions/statuses';
|
||||
import { setStatusQuotePolicy } from '../actions/statuses_typed';
|
||||
|
||||
const importStatus = (state, status) => state.set(status.id, fromJS(status));
|
||||
|
||||
|
|
@ -70,6 +71,22 @@ const initialState = ImmutableMap();
|
|||
|
||||
/** @type {import('@reduxjs/toolkit').Reducer<typeof initialState>} */
|
||||
export default function statuses(state = initialState, action) {
|
||||
if (setStatusQuotePolicy.pending.match(action)) {
|
||||
const status = state.get(action.meta.arg.statusId);
|
||||
if (status) {
|
||||
return state.setIn([action.meta.arg.statusId, 'isSavingQuotePolicy'], true);
|
||||
}
|
||||
} else if (setStatusQuotePolicy.fulfilled.match(action)) {
|
||||
const status = state.get(action.payload.id);
|
||||
if (status) {
|
||||
return state
|
||||
.setIn([action.payload.id, 'quote_approval'], action.payload.quote_approval)
|
||||
.deleteIn([action.payload.id, 'isSavingQuotePolicy']);
|
||||
}
|
||||
} else if (setStatusQuotePolicy.rejected.match(action)) {
|
||||
return state.deleteIn([action.meta.arg.statusId, 'isSavingQuotePolicy']);
|
||||
}
|
||||
|
||||
switch(action.type) {
|
||||
case STATUS_FETCH_REQUEST:
|
||||
return state.setIn([action.id, 'isLoading'], true);
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ export const getFilters = createSelector(
|
|||
(_, { contextType }: { contextType: string }) => contextType,
|
||||
],
|
||||
(filters, contextType) => {
|
||||
if (!contextType) {
|
||||
if (!contextType || contextType === 'compose') {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,12 @@
|
|||
import type { GetThunkAPI } from '@reduxjs/toolkit';
|
||||
import { createAsyncThunk, createSelector } from '@reduxjs/toolkit';
|
||||
import type {
|
||||
ActionCreatorWithPreparedPayload,
|
||||
GetThunkAPI,
|
||||
} from '@reduxjs/toolkit';
|
||||
import {
|
||||
createAsyncThunk as rtkCreateAsyncThunk,
|
||||
createSelector,
|
||||
createAction,
|
||||
} from '@reduxjs/toolkit';
|
||||
// eslint-disable-next-line @typescript-eslint/no-restricted-imports
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
|
||||
|
|
@ -18,7 +25,7 @@ interface AppMeta {
|
|||
useLoadingBar?: boolean;
|
||||
}
|
||||
|
||||
export const createAppAsyncThunk = createAsyncThunk.withTypes<{
|
||||
export const createAppAsyncThunk = rtkCreateAsyncThunk.withTypes<{
|
||||
state: RootState;
|
||||
dispatch: AppDispatch;
|
||||
rejectValue: AsyncThunkRejectValue;
|
||||
|
|
@ -33,7 +40,10 @@ interface AppThunkConfig {
|
|||
fulfilledMeta: AppMeta;
|
||||
rejectedMeta: AppMeta;
|
||||
}
|
||||
type AppThunkApi = Pick<GetThunkAPI<AppThunkConfig>, 'getState' | 'dispatch'>;
|
||||
export type AppThunkApi = Pick<
|
||||
GetThunkAPI<AppThunkConfig>,
|
||||
'getState' | 'dispatch'
|
||||
>;
|
||||
|
||||
interface AppThunkOptions<Arg> {
|
||||
useLoadingBar?: boolean;
|
||||
|
|
@ -43,9 +53,88 @@ interface AppThunkOptions<Arg> {
|
|||
) => boolean;
|
||||
}
|
||||
|
||||
const createBaseAsyncThunk = createAsyncThunk.withTypes<AppThunkConfig>();
|
||||
// Type definitions for the sync thunks.
|
||||
type AppThunk<Arg = void, Returned = void> = (
|
||||
arg: Arg,
|
||||
) => (dispatch: AppDispatch, getState: () => RootState) => Returned;
|
||||
|
||||
export function createThunk<Arg = void, Returned = void>(
|
||||
type AppThunkCreator<Arg = void, Returned = void, ExtraArg = unknown> = (
|
||||
arg: Arg,
|
||||
api: AppThunkApi,
|
||||
extra?: ExtraArg,
|
||||
) => Returned;
|
||||
|
||||
type AppThunkActionCreator<
|
||||
Arg = void,
|
||||
Returned = void,
|
||||
> = ActionCreatorWithPreparedPayload<
|
||||
[Returned, Arg],
|
||||
Returned,
|
||||
string,
|
||||
never,
|
||||
{ arg: Arg }
|
||||
>;
|
||||
|
||||
// Version that does not dispatch it's own action.
|
||||
export function createAppThunk<Arg = void, Returned = void, ExtraArg = unknown>(
|
||||
creator: AppThunkCreator<Arg, Returned, ExtraArg>,
|
||||
extra?: ExtraArg,
|
||||
): AppThunk<Arg, Returned>;
|
||||
|
||||
// Version that dispatches an named action with the result of the creator callback.
|
||||
export function createAppThunk<Arg = void, Returned = void, ExtraArg = unknown>(
|
||||
name: string,
|
||||
creator: AppThunkCreator<Arg, Returned, ExtraArg>,
|
||||
extra?: ExtraArg,
|
||||
): AppThunk<Arg, Returned> & AppThunkActionCreator<Arg, Returned>;
|
||||
|
||||
/** Creates a thunk that dispatches an action. */
|
||||
export function createAppThunk<Arg = void, Returned = void, ExtraArg = unknown>(
|
||||
nameOrCreator: string | AppThunkCreator<Arg, Returned, ExtraArg>,
|
||||
maybeCreatorOrExtra?: AppThunkCreator<Arg, Returned, ExtraArg> | ExtraArg,
|
||||
maybeExtra?: ExtraArg,
|
||||
) {
|
||||
const isDispatcher = typeof nameOrCreator === 'string';
|
||||
const name = isDispatcher ? nameOrCreator : undefined;
|
||||
const creator = isDispatcher
|
||||
? (maybeCreatorOrExtra as AppThunkCreator<Arg, Returned, ExtraArg>)
|
||||
: nameOrCreator;
|
||||
const extra = isDispatcher ? maybeExtra : (maybeCreatorOrExtra as ExtraArg);
|
||||
let action: null | AppThunkActionCreator<Arg, Returned> = null;
|
||||
|
||||
// Creates a thunk that dispatches the action with the result of the creator.
|
||||
const actionCreator: AppThunk<Arg, Returned> = (arg) => {
|
||||
return (dispatch, getState) => {
|
||||
const result = creator(arg, { dispatch, getState }, extra);
|
||||
if (action) {
|
||||
// Dispatches the action with the result.
|
||||
const actionObj = action(result, arg);
|
||||
dispatch(actionObj);
|
||||
}
|
||||
return result;
|
||||
};
|
||||
};
|
||||
|
||||
// No action name provided, return the thunk directly.
|
||||
if (!name) {
|
||||
return actionCreator;
|
||||
}
|
||||
|
||||
// Create the action and assign the action creator to it in order
|
||||
// to have things like `toString` and `match` available.
|
||||
action = createAction(name, (payload: Returned, arg: Arg) => ({
|
||||
payload,
|
||||
meta: {
|
||||
arg,
|
||||
},
|
||||
}));
|
||||
|
||||
return Object.assign(actionCreator, action);
|
||||
}
|
||||
|
||||
const createBaseAsyncThunk = rtkCreateAsyncThunk.withTypes<AppThunkConfig>();
|
||||
|
||||
export function createAsyncThunk<Arg = void, Returned = void>(
|
||||
name: string,
|
||||
creator: (arg: Arg, api: AppThunkApi) => Returned | Promise<Returned>,
|
||||
options: AppThunkOptions<Arg> = {},
|
||||
|
|
@ -104,7 +193,7 @@ export function createDataLoadingThunk<LoadDataResult, Args extends ArgsType>(
|
|||
name: string,
|
||||
loadData: (args: Args) => Promise<LoadDataResult>,
|
||||
thunkOptions?: AppThunkOptions<Args>,
|
||||
): ReturnType<typeof createThunk<Args, LoadDataResult>>;
|
||||
): ReturnType<typeof createAsyncThunk<Args, LoadDataResult>>;
|
||||
|
||||
// Overload when the `onData` method returns discardLoadDataInPayload, then the payload is empty
|
||||
export function createDataLoadingThunk<LoadDataResult, Args extends ArgsType>(
|
||||
|
|
@ -114,7 +203,7 @@ export function createDataLoadingThunk<LoadDataResult, Args extends ArgsType>(
|
|||
| AppThunkOptions<Args>
|
||||
| OnData<Args, LoadDataResult, DiscardLoadData>,
|
||||
thunkOptions?: AppThunkOptions<Args>,
|
||||
): ReturnType<typeof createThunk<Args, void>>;
|
||||
): ReturnType<typeof createAsyncThunk<Args, void>>;
|
||||
|
||||
// Overload when the `onData` method returns nothing, then the mayload is the `onData` result
|
||||
export function createDataLoadingThunk<LoadDataResult, Args extends ArgsType>(
|
||||
|
|
@ -124,7 +213,7 @@ export function createDataLoadingThunk<LoadDataResult, Args extends ArgsType>(
|
|||
| AppThunkOptions<Args>
|
||||
| OnData<Args, LoadDataResult, void>,
|
||||
thunkOptions?: AppThunkOptions<Args>,
|
||||
): ReturnType<typeof createThunk<Args, LoadDataResult>>;
|
||||
): ReturnType<typeof createAsyncThunk<Args, LoadDataResult>>;
|
||||
|
||||
// Overload when there is an `onData` method returning something
|
||||
export function createDataLoadingThunk<
|
||||
|
|
@ -138,7 +227,7 @@ export function createDataLoadingThunk<
|
|||
| AppThunkOptions<Args>
|
||||
| OnData<Args, LoadDataResult, Returned>,
|
||||
thunkOptions?: AppThunkOptions<Args>,
|
||||
): ReturnType<typeof createThunk<Args, Returned>>;
|
||||
): ReturnType<typeof createAsyncThunk<Args, Returned>>;
|
||||
|
||||
/**
|
||||
* This function creates a Redux Thunk that handles loading data asynchronously (usually from the API), dispatching `pending`, `fullfilled` and `rejected` actions.
|
||||
|
|
@ -189,7 +278,7 @@ export function createDataLoadingThunk<
|
|||
thunkOptions = maybeThunkOptions;
|
||||
}
|
||||
|
||||
return createThunk<Args, Returned>(
|
||||
return createAsyncThunk<Args, Returned>(
|
||||
name,
|
||||
async (arg, { getState, dispatch }) => {
|
||||
const data = await loadData(arg, {
|
||||
|
|
|
|||
|
|
@ -12,7 +12,11 @@ export function isProduction() {
|
|||
else return import.meta.env.PROD;
|
||||
}
|
||||
|
||||
export type Features = 'modern_emojis';
|
||||
export type Features =
|
||||
| 'modern_emojis'
|
||||
| 'outgoing_quotes'
|
||||
| 'fasp'
|
||||
| 'http_message_signatures';
|
||||
|
||||
export function isFeatureEnabled(feature: Features) {
|
||||
return initialState?.features.includes(feature) ?? false;
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
.status-card__actions button,
|
||||
.status-card__actions a {
|
||||
color: rgba($white, 0.8);
|
||||
color: color.change($white, $alpha: 0.8);
|
||||
|
||||
&:hover,
|
||||
&:active,
|
||||
|
|
@ -298,14 +298,14 @@
|
|||
.simple_form {
|
||||
.warning {
|
||||
box-shadow: none;
|
||||
background: rgba($error-red, 0.5);
|
||||
background: color.change($error-red, $alpha: 0.5);
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
.recommended {
|
||||
border-color: $ui-highlight-color;
|
||||
color: $ui-highlight-color;
|
||||
background-color: rgba($ui-highlight-color, 0.1);
|
||||
background-color: color.change($ui-highlight-color, $alpha: 0.1);
|
||||
}
|
||||
|
||||
input[type='text'],
|
||||
|
|
@ -327,7 +327,7 @@
|
|||
|
||||
.compose-form .compose-form__warning {
|
||||
border-color: $ui-highlight-color;
|
||||
background-color: rgba($ui-highlight-color, 0.1);
|
||||
background-color: color.change($ui-highlight-color, $alpha: 0.1);
|
||||
|
||||
&,
|
||||
a {
|
||||
|
|
@ -375,10 +375,10 @@
|
|||
}
|
||||
|
||||
.status__wrapper-direct {
|
||||
background-color: rgba($ui-highlight-color, 0.1);
|
||||
background-color: color.change($ui-highlight-color, $alpha: 0.1);
|
||||
|
||||
&:focus {
|
||||
background-color: rgba($ui-highlight-color, 0.15);
|
||||
background-color: color.change($ui-highlight-color, $alpha: 0.15);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -433,8 +433,8 @@
|
|||
}
|
||||
|
||||
.inline-follow-suggestions {
|
||||
background-color: rgba($ui-highlight-color, 0.1);
|
||||
border-bottom-color: rgba($ui-highlight-color, 0.3);
|
||||
background-color: color.change($ui-highlight-color, $alpha: 0.1);
|
||||
border-bottom-color: color.change($ui-highlight-color, $alpha: 0.3);
|
||||
}
|
||||
|
||||
.inline-follow-suggestions__body__scrollable__card {
|
||||
|
|
@ -508,7 +508,7 @@ a.sparkline {
|
|||
|
||||
@supports not selector(::-webkit-scrollbar) {
|
||||
html {
|
||||
scrollbar-color: rgba($action-button-color, 0.25)
|
||||
scrollbar-color: color.change($action-button-color, $alpha: 0.25)
|
||||
var(--background-border-color);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
@use 'sass:color';
|
||||
@use 'variables' as *;
|
||||
|
||||
@mixin search-input {
|
||||
|
|
@ -22,7 +23,7 @@
|
|||
padding-bottom: 14px;
|
||||
margin-top: 10px;
|
||||
color: $light-text-color;
|
||||
box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4);
|
||||
box-shadow: 2px 4px 15px color.change($base-shadow-color, $alpha: 0.4);
|
||||
|
||||
h4 {
|
||||
text-transform: uppercase;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
@use 'sass:color';
|
||||
@use 'variables' as *;
|
||||
@use 'functions' as *;
|
||||
|
||||
|
|
@ -161,7 +162,7 @@
|
|||
|
||||
.nothing-here {
|
||||
background: $ui-base-color;
|
||||
box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
|
||||
box-shadow: 0 0 15px color.change($base-shadow-color, $alpha: 0.2);
|
||||
color: $darker-text-color;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
|
|
@ -205,8 +206,8 @@
|
|||
.simple_form .overridden,
|
||||
.simple_form .recommended,
|
||||
.simple_form .not_recommended {
|
||||
background-color: rgba($ui-secondary-color, 0.1);
|
||||
border: 1px solid rgba($ui-secondary-color, 0.5);
|
||||
background-color: color.change($ui-secondary-color, $alpha: 0.1);
|
||||
border: 1px solid color.change($ui-secondary-color, $alpha: 0.5);
|
||||
}
|
||||
|
||||
.account-role {
|
||||
|
|
@ -240,8 +241,8 @@
|
|||
.information-badge {
|
||||
&.superapp {
|
||||
color: $success-green;
|
||||
background-color: rgba($success-green, 0.1);
|
||||
border-color: rgba($success-green, 0.5);
|
||||
background-color: color.change($success-green, $alpha: 0.1);
|
||||
border-color: color.change($success-green, $alpha: 0.5);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -302,8 +303,8 @@
|
|||
}
|
||||
|
||||
.verified {
|
||||
border: 1px solid rgba($valid-value-color, 0.5);
|
||||
background: rgba($valid-value-color, 0.25);
|
||||
border: 1px solid color.change($valid-value-color, $alpha: 0.5);
|
||||
background: color.change($valid-value-color, $alpha: 0.25);
|
||||
|
||||
a {
|
||||
color: $valid-value-color;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
@use 'sass:color';
|
||||
@use 'sass:math';
|
||||
@use 'functions' as *;
|
||||
@use 'variables' as *;
|
||||
|
|
@ -1255,7 +1256,7 @@ a.name-tag,
|
|||
}
|
||||
|
||||
path:first-child {
|
||||
fill: rgba($highlight-text-color, 0.25) !important;
|
||||
fill: color.change($highlight-text-color, $alpha: 0.25) !important;
|
||||
fill-opacity: 1 !important;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -311,7 +311,7 @@
|
|||
&:active,
|
||||
&:focus-visible {
|
||||
color: lighten($action-button-color, 7%);
|
||||
background-color: rgba($action-button-color, 0.15);
|
||||
background-color: color.change($action-button-color, $alpha: 0.15);
|
||||
}
|
||||
|
||||
&:focus-visible {
|
||||
|
|
@ -331,7 +331,7 @@
|
|||
&:active,
|
||||
&:focus-visible {
|
||||
color: darken($lighter-text-color, 7%);
|
||||
background-color: rgba($lighter-text-color, 0.15);
|
||||
background-color: color.change($lighter-text-color, $alpha: 0.15);
|
||||
}
|
||||
|
||||
&:focus-visible {
|
||||
|
|
@ -361,14 +361,14 @@
|
|||
|
||||
&.overlayed {
|
||||
box-sizing: content-box;
|
||||
background: rgba($black, 0.65);
|
||||
background: color.change($black, $alpha: 0.65);
|
||||
backdrop-filter: $backdrop-blur-filter;
|
||||
color: rgba($white, 0.7);
|
||||
color: color.change($white, $alpha: 0.7);
|
||||
border-radius: 4px;
|
||||
padding: 2px;
|
||||
|
||||
&:hover {
|
||||
background: rgba($black, 0.9);
|
||||
background: color.change($black, $alpha: 0.9);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -391,7 +391,7 @@
|
|||
border-color: $valid-value-color;
|
||||
color: $valid-value-color;
|
||||
transition: none;
|
||||
background-color: rgba($valid-value-color, 0.15);
|
||||
background-color: color.change($valid-value-color, $alpha: 0.15);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -411,7 +411,7 @@
|
|||
&:active,
|
||||
&:focus {
|
||||
color: darken($lighter-text-color, 7%);
|
||||
background-color: rgba($lighter-text-color, 0.15);
|
||||
background-color: color.change($lighter-text-color, $alpha: 0.15);
|
||||
}
|
||||
|
||||
&:focus-visible {
|
||||
|
|
@ -602,15 +602,12 @@ body > [data-popper-placement] {
|
|||
&__highlightable {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
flex: 0 1 auto;
|
||||
border-radius: 4px;
|
||||
border: 1px solid var(--background-border-color);
|
||||
transition: border-color 300ms linear;
|
||||
min-height: 0;
|
||||
position: relative;
|
||||
background: var(--input-background-color);
|
||||
overflow-y: auto;
|
||||
|
||||
&.active {
|
||||
transition: none;
|
||||
|
|
@ -621,7 +618,7 @@ body > [data-popper-placement] {
|
|||
&__warning {
|
||||
color: $inverted-text-color;
|
||||
background: $ui-primary-color;
|
||||
box-shadow: 0 2px 6px rgba($base-shadow-color, 0.3);
|
||||
box-shadow: 0 2px 6px color.change($base-shadow-color, $alpha: 0.3);
|
||||
padding: 8px 10px;
|
||||
border-radius: 4px;
|
||||
font-size: 13px;
|
||||
|
|
@ -659,19 +656,12 @@ body > [data-popper-placement] {
|
|||
background: url('@/images/warning-stripes.svg') repeat-y;
|
||||
width: 5px;
|
||||
flex: 0 0 auto;
|
||||
|
||||
&:first-child {
|
||||
border-start-start-radius: 4px;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-start-end-radius: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
.autosuggest-input {
|
||||
flex: 1 1 auto;
|
||||
border-bottom: 1px solid var(--background-border-color);
|
||||
border: 1px solid var(--background-border-color);
|
||||
border-width: 1px 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -697,7 +687,7 @@ body > [data-popper-placement] {
|
|||
|
||||
.spoiler-input__input {
|
||||
padding: 12px 12px - 5px;
|
||||
background: rgba($ui-highlight-color, 0.05);
|
||||
background: color.change($ui-highlight-color, $alpha: 0.05);
|
||||
color: $highlight-text-color;
|
||||
}
|
||||
|
||||
|
|
@ -705,6 +695,8 @@ body > [data-popper-placement] {
|
|||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
margin: 8px;
|
||||
flex-wrap: wrap;
|
||||
|
||||
& > div {
|
||||
overflow: hidden;
|
||||
|
|
@ -715,6 +707,7 @@ body > [data-popper-placement] {
|
|||
&__uploads {
|
||||
padding: 0 12px;
|
||||
aspect-ratio: 3/2;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.media-gallery {
|
||||
|
|
@ -813,7 +806,6 @@ body > [data-popper-placement] {
|
|||
flex-direction: column;
|
||||
gap: 12px;
|
||||
padding: 12px;
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
&__submit {
|
||||
|
|
@ -874,6 +866,7 @@ body > [data-popper-placement] {
|
|||
}
|
||||
|
||||
&__poll {
|
||||
margin-top: 8px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-self: stretch;
|
||||
|
|
@ -946,6 +939,24 @@ body > [data-popper-placement] {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
.status__quote {
|
||||
margin: 0 8px;
|
||||
max-height: 220px;
|
||||
overflow: hidden;
|
||||
|
||||
// Override .status__content .status__content__text.status__content__text--visible
|
||||
.status__content__text.status__content__text {
|
||||
display: -webkit-box;
|
||||
}
|
||||
|
||||
.status__content__text {
|
||||
-webkit-line-clamp: 4;
|
||||
line-clamp: 4;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-button {
|
||||
|
|
@ -1428,7 +1439,7 @@ body > [data-popper-placement] {
|
|||
.focusable {
|
||||
&:focus-visible {
|
||||
outline: 0;
|
||||
background: rgba($ui-highlight-color, 0.05);
|
||||
background: color.change($ui-highlight-color, $alpha: 0.05);
|
||||
box-shadow: inset 0 0 0 2px $ui-button-focus-outline-color;
|
||||
}
|
||||
}
|
||||
|
|
@ -1583,6 +1594,7 @@ body > [data-popper-placement] {
|
|||
align-items: center;
|
||||
gap: 10px;
|
||||
overflow: hidden;
|
||||
flex-grow: 1;
|
||||
|
||||
.display-name {
|
||||
bdi {
|
||||
|
|
@ -1599,6 +1611,11 @@ body > [data-popper-placement] {
|
|||
}
|
||||
}
|
||||
|
||||
.status__quote-cancel {
|
||||
align-self: self-start;
|
||||
order: 5;
|
||||
}
|
||||
|
||||
.status__info {
|
||||
font-size: 15px;
|
||||
padding-bottom: 10px;
|
||||
|
|
@ -1683,10 +1700,10 @@ body > [data-popper-placement] {
|
|||
.notification-ungrouped--direct,
|
||||
.notification-group--direct,
|
||||
.notification-group--annual-report {
|
||||
background: rgba($ui-highlight-color, 0.05);
|
||||
background: color.change($ui-highlight-color, $alpha: 0.05);
|
||||
|
||||
&:focus {
|
||||
background: rgba($ui-highlight-color, 0.1);
|
||||
background: color.change($ui-highlight-color, $alpha: 0.1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2016,7 +2033,7 @@ body > [data-popper-placement] {
|
|||
|
||||
&__domain-pill {
|
||||
display: inline-flex;
|
||||
background: rgba($highlight-text-color, 0.2);
|
||||
background: color.change($highlight-text-color, $alpha: 0.2);
|
||||
border-radius: 4px;
|
||||
border: 0;
|
||||
color: $highlight-text-color;
|
||||
|
|
@ -2077,7 +2094,7 @@ body > [data-popper-placement] {
|
|||
|
||||
&__handle {
|
||||
border: 2px dashed $highlight-text-color;
|
||||
background: rgba($highlight-text-color, 0.1);
|
||||
background: color.change($highlight-text-color, $alpha: 0.1);
|
||||
padding: 12px 8px;
|
||||
color: $highlight-text-color;
|
||||
border-radius: 4px;
|
||||
|
|
@ -3283,7 +3300,7 @@ a.account__display-name {
|
|||
|
||||
.columns-area__panels__pane--overlay {
|
||||
pointer-events: auto;
|
||||
background: rgba($base-overlay-background, 0.5);
|
||||
background: color.change($base-overlay-background, $alpha: 0.5);
|
||||
z-index: 3;
|
||||
|
||||
.columns-area__panels__pane__inner {
|
||||
|
|
@ -3518,11 +3535,10 @@ a.account__display-name {
|
|||
display: flex;
|
||||
flex-direction: column;
|
||||
height: calc(100% - 10px);
|
||||
overflow-y: hidden;
|
||||
overflow-y: auto;
|
||||
|
||||
.compose-form {
|
||||
flex: 1 1 auto;
|
||||
min-height: 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3821,7 +3837,10 @@ a.account__display-name {
|
|||
border-radius: 10px;
|
||||
padding: 0;
|
||||
user-select: none;
|
||||
-webkit-tap-highlight-color: rgba($base-overlay-background, 0);
|
||||
-webkit-tap-highlight-color: color.change(
|
||||
$base-overlay-background,
|
||||
$alpha: 0
|
||||
);
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
|
||||
|
|
@ -4070,7 +4089,7 @@ a.account__display-name {
|
|||
cursor: pointer;
|
||||
|
||||
& > div {
|
||||
background: rgba($base-shadow-color, 0.6);
|
||||
background: color.change($base-shadow-color, $alpha: 0.6);
|
||||
border-radius: 8px;
|
||||
padding: 12px 9px;
|
||||
backdrop-filter: $backdrop-blur-filter;
|
||||
|
|
@ -4400,7 +4419,7 @@ a.status-card {
|
|||
z-index: 1;
|
||||
|
||||
&.active {
|
||||
box-shadow: 0 1px 0 rgba($highlight-text-color, 0.3);
|
||||
box-shadow: 0 1px 0 color.change($highlight-text-color, $alpha: 0.3);
|
||||
|
||||
&::before {
|
||||
display: block;
|
||||
|
|
@ -4416,8 +4435,8 @@ a.status-card {
|
|||
z-index: 1;
|
||||
background: radial-gradient(
|
||||
ellipse,
|
||||
rgba($ui-highlight-color, 0.23) 0%,
|
||||
rgba($ui-highlight-color, 0) 60%
|
||||
color.change($ui-highlight-color, $alpha: 0.23) 0%,
|
||||
color.change($ui-highlight-color, $alpha: 0) 60%
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -4511,7 +4530,7 @@ a.status-card {
|
|||
&.active {
|
||||
.column-header__icon {
|
||||
color: $highlight-text-color;
|
||||
text-shadow: 0 0 10px rgba($highlight-text-color, 0.4);
|
||||
text-shadow: 0 0 10px color.change($highlight-text-color, $alpha: 0.4);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -4856,7 +4875,7 @@ a.status-card {
|
|||
font-size: 14px;
|
||||
|
||||
&__label {
|
||||
background-color: rgba($black, 0.45);
|
||||
background-color: color.change($black, $alpha: 0.45);
|
||||
backdrop-filter: $backdrop-blur-filter;
|
||||
border-radius: 8px;
|
||||
padding: 12px 16px;
|
||||
|
|
@ -4876,7 +4895,7 @@ a.status-card {
|
|||
&:hover,
|
||||
&:focus {
|
||||
.spoiler-button__overlay__label {
|
||||
background-color: rgba($black, 0.9);
|
||||
background-color: color.change($black, $alpha: 0.9);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5267,7 +5286,7 @@ a.status-card {
|
|||
|
||||
.upload-area {
|
||||
align-items: center;
|
||||
background: rgba($base-overlay-background, 0.8);
|
||||
background: color.change($base-overlay-background, $alpha: 0.8);
|
||||
display: flex;
|
||||
height: 100vh;
|
||||
justify-content: center;
|
||||
|
|
@ -5302,7 +5321,7 @@ a.status-card {
|
|||
z-index: -1;
|
||||
border-radius: 4px;
|
||||
background: $ui-base-color;
|
||||
box-shadow: 0 0 5px rgba($base-shadow-color, 0.2);
|
||||
box-shadow: 0 0 5px color.change($base-shadow-color, $alpha: 0.2);
|
||||
}
|
||||
|
||||
.upload-area__content {
|
||||
|
|
@ -5403,7 +5422,8 @@ a.status-card {
|
|||
}
|
||||
|
||||
.privacy-dropdown__dropdown,
|
||||
.language-dropdown__dropdown {
|
||||
.language-dropdown__dropdown,
|
||||
.visibility-dropdown__dropdown {
|
||||
box-shadow: var(--dropdown-shadow);
|
||||
background: var(--dropdown-background-color);
|
||||
backdrop-filter: $backdrop-blur-filter;
|
||||
|
|
@ -5432,7 +5452,8 @@ a.status-card {
|
|||
z-index: 9999;
|
||||
}
|
||||
|
||||
.privacy-dropdown__option {
|
||||
.privacy-dropdown__option,
|
||||
.visibility-dropdown__option {
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
letter-spacing: 0.25px;
|
||||
|
|
@ -5578,6 +5599,39 @@ a.status-card {
|
|||
}
|
||||
}
|
||||
|
||||
.visibility-dropdown {
|
||||
&__overlay[data-popper-placement] {
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
&__label.disabled {
|
||||
cursor: default;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
&__button {
|
||||
color: $primary-text-color;
|
||||
background: var(--dropdown-background-color);
|
||||
border: 1px solid var(--dropdown-border-color);
|
||||
padding: 8px 12px;
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
border-radius: 4px;
|
||||
font-size: 14px;
|
||||
height: 40px;
|
||||
|
||||
&:disabled {
|
||||
cursor: default;
|
||||
}
|
||||
}
|
||||
|
||||
&__helper {
|
||||
margin-top: 4px;
|
||||
font-size: 0.8em;
|
||||
color: $dark-text-color;
|
||||
}
|
||||
}
|
||||
|
||||
.search {
|
||||
margin-bottom: 32px;
|
||||
position: relative;
|
||||
|
|
@ -5870,6 +5924,17 @@ a.status-card {
|
|||
}
|
||||
}
|
||||
|
||||
.modal-root label {
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
|
||||
> span {
|
||||
display: block;
|
||||
font-weight: 500;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.video-modal .video-player {
|
||||
max-height: 80vh;
|
||||
max-width: 100vw;
|
||||
|
|
@ -5894,7 +5959,7 @@ a.status-card {
|
|||
align-items: center;
|
||||
|
||||
.icon-button {
|
||||
color: rgba($white, 0.7);
|
||||
color: color.change($white, $alpha: 0.7);
|
||||
padding: 8px;
|
||||
|
||||
.icon {
|
||||
|
|
@ -5907,11 +5972,11 @@ a.status-card {
|
|||
&:focus,
|
||||
&:active {
|
||||
color: $white;
|
||||
background-color: rgba($white, 0.15);
|
||||
background-color: color.change($white, $alpha: 0.15);
|
||||
}
|
||||
|
||||
&:focus {
|
||||
background-color: rgba($white, 0.3);
|
||||
background-color: color.change($white, $alpha: 0.3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5952,7 +6017,7 @@ a.status-card {
|
|||
background: transparent;
|
||||
box-sizing: border-box;
|
||||
border: 0;
|
||||
color: rgba($white, 0.7);
|
||||
color: color.change($white, $alpha: 0.7);
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
|
@ -6006,11 +6071,11 @@ a.status-card {
|
|||
&:focus,
|
||||
&:active {
|
||||
color: $white;
|
||||
background-color: rgba($white, 0.15);
|
||||
background-color: color.change($white, $alpha: 0.15);
|
||||
}
|
||||
|
||||
&:focus {
|
||||
background-color: rgba($white, 0.3);
|
||||
background-color: color.change($white, $alpha: 0.3);
|
||||
}
|
||||
|
||||
&.active {
|
||||
|
|
@ -6019,11 +6084,11 @@ a.status-card {
|
|||
&:hover,
|
||||
&:focus,
|
||||
&:active {
|
||||
background: rgba($highlight-text-color, 0.15);
|
||||
background: color.change($highlight-text-color, $alpha: 0.15);
|
||||
}
|
||||
|
||||
&:focus {
|
||||
background: rgba($highlight-text-color, 0.3);
|
||||
background: color.change($highlight-text-color, $alpha: 0.3);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -6033,11 +6098,11 @@ a.status-card {
|
|||
&:hover,
|
||||
&:focus,
|
||||
&:active {
|
||||
background: rgba($gold-star, 0.15);
|
||||
background: color.change($gold-star, $alpha: 0.15);
|
||||
}
|
||||
|
||||
&:focus {
|
||||
background: rgba($gold-star, 0.3);
|
||||
background: color.change($gold-star, $alpha: 0.3);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -6376,6 +6441,15 @@ a.status-card {
|
|||
letter-spacing: 0.25px;
|
||||
overflow-y: auto;
|
||||
|
||||
&__description {
|
||||
margin: 24px 24px 0;
|
||||
color: $darker-text-color;
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
&__form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
|
@ -6900,7 +6974,7 @@ a.status-card {
|
|||
display: block;
|
||||
color: $white;
|
||||
border: 0;
|
||||
background: rgba($black, 0.65);
|
||||
background: color.change($black, $alpha: 0.65);
|
||||
backdrop-filter: $backdrop-blur-filter;
|
||||
padding: 3px 12px;
|
||||
border-radius: 99px;
|
||||
|
|
@ -6925,7 +6999,7 @@ a.status-card {
|
|||
text-align: center;
|
||||
color: $white;
|
||||
border: 0;
|
||||
background: rgba($black, 0.65);
|
||||
background: color.change($black, $alpha: 0.65);
|
||||
backdrop-filter: $backdrop-blur-filter;
|
||||
padding: 3px 8px;
|
||||
border-radius: 4px;
|
||||
|
|
@ -6947,7 +7021,7 @@ a.status-card {
|
|||
}
|
||||
|
||||
.media-gallery__alt__popover {
|
||||
background: rgba($black, 0.65);
|
||||
background: color.change($black, $alpha: 0.65);
|
||||
backdrop-filter: $backdrop-blur-filter;
|
||||
border-radius: 4px;
|
||||
box-shadow: var(--dropdown-shadow);
|
||||
|
|
@ -6969,7 +7043,7 @@ a.status-card {
|
|||
p {
|
||||
font-size: 15px;
|
||||
line-height: 20px;
|
||||
color: rgba($white, 0.85);
|
||||
color: color.change($white, $alpha: 0.85);
|
||||
white-space: pre-line;
|
||||
}
|
||||
}
|
||||
|
|
@ -7413,8 +7487,8 @@ a.status-card {
|
|||
box-sizing: border-box;
|
||||
background: linear-gradient(
|
||||
0deg,
|
||||
rgba($base-shadow-color, 0.85) 0,
|
||||
rgba($base-shadow-color, 0.45) 60%,
|
||||
color.change($base-shadow-color, $alpha: 0.85) 0,
|
||||
color.change($base-shadow-color, $alpha: 0.45) 60%,
|
||||
transparent
|
||||
);
|
||||
padding: 0 15px;
|
||||
|
|
@ -7510,7 +7584,7 @@ a.status-card {
|
|||
flex: 0 0 auto;
|
||||
background: transparent;
|
||||
border: 0;
|
||||
color: rgba($white, 0.75);
|
||||
color: color.change($white, $alpha: 0.75);
|
||||
font-weight: 500;
|
||||
|
||||
&:active,
|
||||
|
|
@ -7574,7 +7648,7 @@ a.status-card {
|
|||
&::before {
|
||||
content: '';
|
||||
width: 50px;
|
||||
background: rgba($white, 0.35);
|
||||
background: color.change($white, $alpha: 0.35);
|
||||
border-radius: 4px;
|
||||
display: block;
|
||||
position: absolute;
|
||||
|
|
@ -7606,7 +7680,7 @@ a.status-card {
|
|||
margin-inline-start: -6px;
|
||||
transform: translate(0, -50%);
|
||||
background: $white;
|
||||
box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2);
|
||||
box-shadow: 1px 2px 6px color.change($base-shadow-color, $alpha: 0.2);
|
||||
opacity: 0;
|
||||
|
||||
.no-reduce-motion & {
|
||||
|
|
@ -7644,7 +7718,7 @@ a.status-card {
|
|||
&::before {
|
||||
content: '';
|
||||
width: 100%;
|
||||
background: rgba($white, 0.35);
|
||||
background: color.change($white, $alpha: 0.35);
|
||||
border-radius: 4px;
|
||||
display: block;
|
||||
position: absolute;
|
||||
|
|
@ -7663,7 +7737,7 @@ a.status-card {
|
|||
}
|
||||
|
||||
&__buffer {
|
||||
background: rgba($white, 0.2);
|
||||
background: color.change($white, $alpha: 0.2);
|
||||
}
|
||||
|
||||
&__handle {
|
||||
|
|
@ -7676,7 +7750,7 @@ a.status-card {
|
|||
top: 10px;
|
||||
margin-inline-start: -6px;
|
||||
background: $white;
|
||||
box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2);
|
||||
box-shadow: 1px 2px 6px color.change($base-shadow-color, $alpha: 0.2);
|
||||
|
||||
.no-reduce-motion & {
|
||||
transition: opacity 0.1s ease;
|
||||
|
|
@ -7700,7 +7774,7 @@ a.status-card {
|
|||
top: 50%;
|
||||
inset-inline-start: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
background: rgba($base-shadow-color, 0.45);
|
||||
background: color.change($base-shadow-color, $alpha: 0.45);
|
||||
backdrop-filter: $backdrop-blur-filter;
|
||||
color: $white;
|
||||
border-radius: 8px;
|
||||
|
|
@ -8035,7 +8109,7 @@ noscript {
|
|||
inset-inline-start: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba($base-overlay-background, 0.5);
|
||||
background: color.change($base-overlay-background, $alpha: 0.5);
|
||||
}
|
||||
|
||||
.focal-point {
|
||||
|
|
@ -8057,7 +8131,7 @@ noscript {
|
|||
transform: translate(-50%, -50%);
|
||||
border: 2px solid #fff;
|
||||
border-radius: 50%;
|
||||
box-shadow: 0 0 0 9999em rgba($base-shadow-color, 0.35);
|
||||
box-shadow: 0 0 0 9999em color.change($base-shadow-color, $alpha: 0.35);
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
|
|
@ -8299,7 +8373,7 @@ noscript {
|
|||
}
|
||||
|
||||
.verified {
|
||||
border: 1px solid rgba($valid-value-color, 0.5);
|
||||
border: 1px solid color.change($valid-value-color, $alpha: 0.5);
|
||||
margin-top: -1px;
|
||||
margin-inline: -1px;
|
||||
|
||||
|
|
@ -8519,7 +8593,7 @@ noscript {
|
|||
width: 50px;
|
||||
|
||||
path:first-child {
|
||||
fill: rgba($highlight-text-color, 0.25) !important;
|
||||
fill: color.change($highlight-text-color, $alpha: 0.25) !important;
|
||||
fill-opacity: 1 !important;
|
||||
}
|
||||
|
||||
|
|
@ -8544,7 +8618,7 @@ noscript {
|
|||
|
||||
.trends__item__sparkline {
|
||||
path:first-child {
|
||||
fill: rgba($gold-star, 0.25) !important;
|
||||
fill: color.change($gold-star, $alpha: 0.25) !important;
|
||||
}
|
||||
|
||||
path:last-child {
|
||||
|
|
@ -9709,7 +9783,7 @@ noscript {
|
|||
margin-bottom: 5px;
|
||||
border-radius: 8px;
|
||||
border: 1px solid $highlight-text-color;
|
||||
background: rgba($highlight-text-color, 0.15);
|
||||
background: color.change($highlight-text-color, $alpha: 0.15);
|
||||
overflow: hidden;
|
||||
flex-shrink: 0;
|
||||
|
||||
|
|
@ -9764,7 +9838,7 @@ noscript {
|
|||
}
|
||||
|
||||
.button-tertiary {
|
||||
background: rgba($ui-base-color, 0.15);
|
||||
background: color.change($ui-base-color, $alpha: 0.15);
|
||||
backdrop-filter: blur(8px);
|
||||
}
|
||||
}
|
||||
|
|
@ -9781,7 +9855,7 @@ noscript {
|
|||
|
||||
.warning-banner {
|
||||
border: 1px solid $warning-red;
|
||||
background: rgba($warning-red, 0.15);
|
||||
background: color.change($warning-red, $alpha: 0.15);
|
||||
|
||||
&__message {
|
||||
h1 {
|
||||
|
|
@ -10116,13 +10190,13 @@ noscript {
|
|||
padding: 15px;
|
||||
margin: 0;
|
||||
color: $white;
|
||||
background: rgba($black, 0.85);
|
||||
background: color.change($black, $alpha: 0.85);
|
||||
backdrop-filter: blur(8px);
|
||||
border: 1px solid rgba(lighten($classic-base-color, 4%), 0.85);
|
||||
border-radius: 8px;
|
||||
box-shadow:
|
||||
0 10px 15px -3px rgba($base-shadow-color, 0.25),
|
||||
0 4px 6px -4px rgba($base-shadow-color, 0.25);
|
||||
0 10px 15px -3px color.change($base-shadow-color, $alpha: 0.25),
|
||||
0 4px 6px -4px color.change($base-shadow-color, $alpha: 0.25);
|
||||
cursor: default;
|
||||
font-size: 15px;
|
||||
line-height: 21px;
|
||||
|
|
@ -10160,7 +10234,7 @@ noscript {
|
|||
&:hover,
|
||||
&:focus,
|
||||
&:active {
|
||||
background: rgba($ui-base-color, 0.85);
|
||||
background: color.change($ui-base-color, $alpha: 0.85);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -10258,7 +10332,7 @@ noscript {
|
|||
padding: 16px 0;
|
||||
padding-bottom: 0;
|
||||
border-bottom: 1px solid var(--background-border-color);
|
||||
background: rgba($ui-highlight-color, 0.05);
|
||||
background: color.change($ui-highlight-color, $alpha: 0.05);
|
||||
|
||||
&__header {
|
||||
display: flex;
|
||||
|
|
|
|||
|
|
@ -5,10 +5,11 @@
|
|||
:root {
|
||||
--dropdown-border-color: #{lighten($ui-base-color, 4%)};
|
||||
--dropdown-background-color: #{rgba(darken($ui-base-color, 8%), 0.9)};
|
||||
--dropdown-shadow: 0 20px 25px -5px #{rgba($base-shadow-color, 0.25)},
|
||||
0 8px 10px -6px #{rgba($base-shadow-color, 0.25)};
|
||||
--dropdown-shadow:
|
||||
0 20px 25px -5px #{color.change($base-shadow-color, $alpha: 0.25)},
|
||||
0 8px 10px -6px #{color.change($base-shadow-color, $alpha: 0.25)};
|
||||
--modal-background-color: #{rgba(darken($ui-base-color, 8%), 0.7)};
|
||||
--modal-background-variant-color: #{rgba($ui-base-color, 0.7)};
|
||||
--modal-background-variant-color: #{color.change($ui-base-color, $alpha: 0.7)};
|
||||
--modal-border-color: #{lighten($ui-base-color, 4%)};
|
||||
--background-border-color: #{lighten($ui-base-color, 4%)};
|
||||
--background-color: #{darken($ui-base-color, 8%)};
|
||||
|
|
@ -20,7 +21,9 @@
|
|||
--on-surface-color: #{color.adjust($ui-base-color, $alpha: -0.5)};
|
||||
--avatar-border-radius: 8px;
|
||||
--media-outline-color: #{rgba(#fcf8ff, 0.15)};
|
||||
--overlay-icon-shadow: drop-shadow(0 0 8px #{rgba($base-shadow-color, 0.35)});
|
||||
--overlay-icon-shadow: drop-shadow(
|
||||
0 0 8px #{color.change($base-shadow-color, $alpha: 0.35)}
|
||||
);
|
||||
--error-background-color: #{darken($error-red, 16%)};
|
||||
--error-active-background-color: #{darken($error-red, 12%)};
|
||||
--on-error-color: #fff;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
@use 'sass:color';
|
||||
@use 'variables' as *;
|
||||
@use 'functions' as *;
|
||||
|
||||
|
|
@ -733,20 +734,20 @@ code {
|
|||
text-align: center;
|
||||
|
||||
&.notice {
|
||||
border: 1px solid rgba($valid-value-color, 0.5);
|
||||
background: rgba($valid-value-color, 0.25);
|
||||
border: 1px solid color.change($valid-value-color, $alpha: 0.5);
|
||||
background: color.change($valid-value-color, $alpha: 0.25);
|
||||
color: $valid-value-color;
|
||||
}
|
||||
|
||||
&.warning {
|
||||
border: 1px solid rgba($gold-star, 0.5);
|
||||
background: rgba($gold-star, 0.25);
|
||||
border: 1px solid color.change($gold-star, $alpha: 0.5);
|
||||
background: color.change($gold-star, $alpha: 0.25);
|
||||
color: $gold-star;
|
||||
}
|
||||
|
||||
&.alert {
|
||||
border: 1px solid rgba($error-value-color, 0.5);
|
||||
background: rgba($error-value-color, 0.1);
|
||||
border: 1px solid color.change($error-value-color, $alpha: 0.5);
|
||||
background: color.change($error-value-color, $alpha: 0.1);
|
||||
color: $error-value-color;
|
||||
}
|
||||
|
||||
|
|
@ -965,7 +966,7 @@ code {
|
|||
background: $simple-background-color;
|
||||
padding: 4px;
|
||||
margin: 0 10px 20px 0;
|
||||
box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
|
||||
box-shadow: 0 0 15px color.change($base-shadow-color, $alpha: 0.2);
|
||||
display: inline-block;
|
||||
|
||||
svg {
|
||||
|
|
@ -988,10 +989,10 @@ code {
|
|||
.simple_form {
|
||||
.warning {
|
||||
box-sizing: border-box;
|
||||
background: rgba($error-value-color, 0.5);
|
||||
background: color.change($error-value-color, $alpha: 0.5);
|
||||
color: $primary-text-color;
|
||||
text-shadow: 1px 1px 0 rgba($base-shadow-color, 0.3);
|
||||
box-shadow: 0 2px 6px rgba($base-shadow-color, 0.4);
|
||||
text-shadow: 1px 1px 0 color.change($base-shadow-color, $alpha: 0.3);
|
||||
box-shadow: 0 2px 6px color.change($base-shadow-color, $alpha: 0.4);
|
||||
border-radius: 4px;
|
||||
padding: 10px;
|
||||
margin-bottom: 15px;
|
||||
|
|
@ -1350,7 +1351,7 @@ code {
|
|||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
background: rgba($error-value-color, 0.25);
|
||||
background: color.change($error-value-color, $alpha: 0.25);
|
||||
z-index: 2;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
@use 'sass:color';
|
||||
@use 'variables' as *;
|
||||
@use 'functions' as *;
|
||||
|
||||
|
|
@ -206,7 +207,7 @@
|
|||
|
||||
&:active,
|
||||
&:focus {
|
||||
background-color: rgba($dark-text-color, 0.1);
|
||||
background-color: color.change($dark-text-color, $alpha: 0.1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -225,7 +226,7 @@
|
|||
background: rgba(darken($ui-primary-color, 14%), 0.7);
|
||||
|
||||
&.leading {
|
||||
background: rgba($ui-highlight-color, 0.5);
|
||||
background: color.change($ui-highlight-color, $alpha: 0.5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
@use 'sass:color';
|
||||
@use 'variables' as *;
|
||||
@use 'functions' as *;
|
||||
|
||||
|
|
@ -16,7 +17,7 @@
|
|||
padding: 15px;
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
|
||||
box-shadow: 0 0 15px color.change($base-shadow-color, $alpha: 0.2);
|
||||
}
|
||||
|
||||
& > a {
|
||||
|
|
|
|||
|
|
@ -71,8 +71,16 @@ class Antispam
|
|||
end
|
||||
|
||||
def report_if_needed!(account)
|
||||
return if Report.unresolved.exists?(account: Account.representative, target_account: account)
|
||||
return if system_reports.unresolved.exists?(target_account: account)
|
||||
|
||||
Report.create!(account: Account.representative, target_account: account, category: :spam, comment: 'Account automatically reported for posting a banned URL')
|
||||
system_reports.create!(
|
||||
category: :spam,
|
||||
comment: 'Account automatically reported for posting a banned URL',
|
||||
target_account: account
|
||||
)
|
||||
end
|
||||
|
||||
def system_reports
|
||||
Account.representative.reports
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ class Account < ApplicationRecord
|
|||
|
||||
# Local user validations
|
||||
validates :username, format: { with: /\A[a-z0-9_]+\z/i }, length: { maximum: USERNAME_LENGTH_LIMIT }, if: -> { local? && will_save_change_to_username? && !actor_type_application? }
|
||||
validates_with UnreservedUsernameValidator, if: -> { local? && will_save_change_to_username? && !actor_type_application? }
|
||||
validates_with UnreservedUsernameValidator, if: -> { local? && will_save_change_to_username? && !actor_type_application? && !user&.bypass_registration_checks }
|
||||
validates :display_name, length: { maximum: DISPLAY_NAME_LENGTH_LIMIT }, if: -> { local? && will_save_change_to_display_name? }
|
||||
validates :note, note_length: { maximum: NOTE_LENGTH_LIMIT }, if: -> { local? && will_save_change_to_note? }
|
||||
validates :fields, length: { maximum: DEFAULT_FIELDS_SIZE }, if: -> { local? && will_save_change_to_fields? }
|
||||
|
|
|
|||
|
|
@ -10,6 +10,10 @@ module Status::InteractionPolicyConcern
|
|||
followed: (1 << 3),
|
||||
}.freeze
|
||||
|
||||
included do
|
||||
before_validation :downgrade_quote_policy, if: -> { local? && !distributable? }
|
||||
end
|
||||
|
||||
def quote_policy_as_keys(kind)
|
||||
case kind
|
||||
when :automatic
|
||||
|
|
@ -52,4 +56,8 @@ module Status::InteractionPolicyConcern
|
|||
|
||||
:denied
|
||||
end
|
||||
|
||||
def downgrade_quote_policy
|
||||
self.quote_approval_policy = 0
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -107,6 +107,10 @@ module User::HasSettings
|
|||
settings['default_privacy'] || (account.locked? ? 'private' : 'public')
|
||||
end
|
||||
|
||||
def setting_default_quote_policy
|
||||
settings['default_quote_policy'] || 'public'
|
||||
end
|
||||
|
||||
def allows_report_emails?
|
||||
settings['notification_emails.report']
|
||||
end
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ class CustomEmoji < ApplicationRecord
|
|||
|
||||
has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce +profile "!icc,*" +set date:modify +set date:create +set date:timestamp', file_geometry_parser: FastGeometryParser } }, validate_media_type: false, processors: [:lazy_thumbnail]
|
||||
|
||||
normalizes :domain, with: ->(domain) { domain.downcase }
|
||||
normalizes :domain, with: ->(domain) { domain.downcase.strip }
|
||||
|
||||
validates_attachment :image, content_type: { content_type: IMAGE_MIME_TYPES }, presence: true, size: { less_than: LIMIT }
|
||||
validates :shortcode, uniqueness: { scope: :domain }, format: { with: SHORTCODE_ONLY_RE }, length: { minimum: MINIMUM_SHORTCODE_SIZE }
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ class CustomEmojiFilter
|
|||
when 'remote'
|
||||
CustomEmoji.remote
|
||||
when 'by_domain'
|
||||
CustomEmoji.where(domain: value.strip.downcase)
|
||||
CustomEmoji.where(domain: value)
|
||||
when 'shortcode'
|
||||
CustomEmoji.search(value.strip)
|
||||
else
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
# capabilities :jsonb not null
|
||||
# confirmed :boolean default(FALSE), not null
|
||||
# contact_email :string
|
||||
# delivery_last_failed_at :datetime
|
||||
# fediverse_account :string
|
||||
# name :string not null
|
||||
# privacy_policy :jsonb
|
||||
|
|
@ -22,6 +23,8 @@
|
|||
class Fasp::Provider < ApplicationRecord
|
||||
include DebugConcern
|
||||
|
||||
RETRY_INTERVAL = 1.hour
|
||||
|
||||
has_many :fasp_backfill_requests, inverse_of: :fasp_provider, class_name: 'Fasp::BackfillRequest', dependent: :delete_all
|
||||
has_many :fasp_debug_callbacks, inverse_of: :fasp_provider, class_name: 'Fasp::DebugCallback', dependent: :delete_all
|
||||
has_many :fasp_subscriptions, inverse_of: :fasp_provider, class_name: 'Fasp::Subscription', dependent: :delete_all
|
||||
|
|
@ -122,6 +125,16 @@ class Fasp::Provider < ApplicationRecord
|
|||
@delivery_failure_tracker ||= DeliveryFailureTracker.new(base_url, resolution: :minutes)
|
||||
end
|
||||
|
||||
def available?
|
||||
delivery_failure_tracker.available? || retry_worthwile?
|
||||
end
|
||||
|
||||
def update_availability!
|
||||
self.delivery_last_failed_at = (Time.current unless delivery_failure_tracker.available?)
|
||||
|
||||
save!
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_keypair
|
||||
|
|
@ -148,4 +161,8 @@ class Fasp::Provider < ApplicationRecord
|
|||
Fasp::Request.new(self).delete(path)
|
||||
end
|
||||
end
|
||||
|
||||
def retry_worthwile?
|
||||
delivery_last_failed_at && delivery_last_failed_at < RETRY_INTERVAL.ago
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -412,7 +412,7 @@ class User < ApplicationRecord
|
|||
|
||||
def set_approved
|
||||
self.approved = begin
|
||||
if sign_up_from_ip_requires_approval? || sign_up_email_requires_approval? || sign_up_username_requires_approval?
|
||||
if requires_approval?
|
||||
false
|
||||
else
|
||||
open_registrations? || valid_invitation? || external?
|
||||
|
|
@ -426,7 +426,11 @@ class User < ApplicationRecord
|
|||
|
||||
def grant_approval_on_confirmation?
|
||||
# Re-check approval on confirmation if the server has switched to open registrations
|
||||
open_registrations? && !sign_up_from_ip_requires_approval? && !sign_up_email_requires_approval?
|
||||
open_registrations? && !requires_approval?
|
||||
end
|
||||
|
||||
def requires_approval?
|
||||
sign_up_from_ip_requires_approval? || sign_up_email_requires_approval? || sign_up_username_requires_approval?
|
||||
end
|
||||
|
||||
def wrap_email_confirmation
|
||||
|
|
|
|||
|
|
@ -3,15 +3,14 @@
|
|||
class ActivityPub::DeleteQuoteAuthorizationSerializer < ActivityPub::Serializer
|
||||
attributes :id, :type, :actor, :to
|
||||
|
||||
# TODO: change the `object` to a `QuoteAuthorization` object instead of just the URI?
|
||||
attribute :virtual_object, key: :object
|
||||
has_one :virtual_object, key: :object, serializer: ActivityPub::QuoteAuthorizationSerializer
|
||||
|
||||
def id
|
||||
[ActivityPub::TagManager.instance.approval_uri_for(object, check_approval: false), '#delete'].join
|
||||
end
|
||||
|
||||
def virtual_object
|
||||
ActivityPub::TagManager.instance.approval_uri_for(object, check_approval: false)
|
||||
object
|
||||
end
|
||||
|
||||
def type
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ class InitialStateSerializer < ActiveModel::Serializer
|
|||
store[:default_privacy] = object.visibility || object_account_user.setting_default_privacy
|
||||
store[:default_sensitive] = object_account_user.setting_default_sensitive
|
||||
store[:default_language] = object_account_user.preferred_posting_language
|
||||
store[:default_quote_policy] = object_account_user.setting_default_quote_policy
|
||||
end
|
||||
|
||||
store[:text] = object.text if object.text
|
||||
|
|
|
|||
|
|
@ -6,4 +6,5 @@ class REST::ShallowStatusSerializer < REST::StatusSerializer
|
|||
# It looks like redefining one `has_one` requires redefining all inherited ones
|
||||
has_one :preview_card, key: :card, serializer: REST::PreviewCardSerializer
|
||||
has_one :preloadable_poll, key: :poll, serializer: REST::PollSerializer
|
||||
has_one :quote_approval, if: -> { Mastodon::Feature.outgoing_quotes_enabled? }
|
||||
end
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user