Merge remote-tracking branch 'parent/main' into upstream-20240422
This commit is contained in:
commit
44f4a93430
100 changed files with 770 additions and 441 deletions
4
.env.development
Normal file
4
.env.development
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
# Required by ActiveRecord encryption feature
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=fkSxKD2bF396kdQbrP1EJ7WbU7ZgNokR
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=r0hvVmzBVsjxC7AMlwhOzmtc36ZCOS1E
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=PhdFyyfy5xJ7WVd2lWBpcPScRQHzRTNr
|
|
@ -5,3 +5,8 @@ LOCAL_DOMAIN=cb6e6126.ngrok.io
|
||||||
LOCAL_HTTPS=true
|
LOCAL_HTTPS=true
|
||||||
# Elasticsearch
|
# Elasticsearch
|
||||||
ES_PREFIX=test
|
ES_PREFIX=test
|
||||||
|
|
||||||
|
# Required by ActiveRecord encryption feature
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=fkSxKD2bF396kdQbrP1EJ7WbU7ZgNokR
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=r0hvVmzBVsjxC7AMlwhOzmtc36ZCOS1E
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=PhdFyyfy5xJ7WVd2lWBpcPScRQHzRTNr
|
||||||
|
|
2
.github/workflows/test-js.yml
vendored
2
.github/workflows/test-js.yml
vendored
|
@ -38,5 +38,5 @@ jobs:
|
||||||
- name: Set up Javascript environment
|
- name: Set up Javascript environment
|
||||||
uses: ./.github/actions/setup-javascript
|
uses: ./.github/actions/setup-javascript
|
||||||
|
|
||||||
- name: Jest testing
|
- name: JavaScript testing
|
||||||
run: yarn jest --reporters github-actions summary
|
run: yarn jest --reporters github-actions summary
|
||||||
|
|
3
.github/workflows/test-ruby.yml
vendored
3
.github/workflows/test-ruby.yml
vendored
|
@ -28,6 +28,9 @@ jobs:
|
||||||
env:
|
env:
|
||||||
RAILS_ENV: ${{ matrix.mode }}
|
RAILS_ENV: ${{ matrix.mode }}
|
||||||
BUNDLE_WITH: ${{ matrix.mode }}
|
BUNDLE_WITH: ${{ matrix.mode }}
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY: precompile_placeholder
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT: precompile_placeholder
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY: precompile_placeholder
|
||||||
OTP_SECRET: precompile_placeholder
|
OTP_SECRET: precompile_placeholder
|
||||||
SECRET_KEY_BASE: precompile_placeholder
|
SECRET_KEY_BASE: precompile_placeholder
|
||||||
|
|
||||||
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -24,7 +24,6 @@
|
||||||
/public/packs-test
|
/public/packs-test
|
||||||
.env
|
.env
|
||||||
.env.production
|
.env.production
|
||||||
.env.development
|
|
||||||
/node_modules/
|
/node_modules/
|
||||||
/build/
|
/build/
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ inherit_mode:
|
||||||
require:
|
require:
|
||||||
- rubocop-rails
|
- rubocop-rails
|
||||||
- rubocop-rspec
|
- rubocop-rspec
|
||||||
|
- rubocop-rspec_rails
|
||||||
- rubocop-performance
|
- rubocop-performance
|
||||||
- rubocop-capybara
|
- rubocop-capybara
|
||||||
- ./lib/linter/rubocop_middle_dot
|
- ./lib/linter/rubocop_middle_dot
|
||||||
|
|
|
@ -6,13 +6,6 @@
|
||||||
# Note that changes in the inspected code, or installation of new
|
# Note that changes in the inspected code, or installation of new
|
||||||
# versions of RuboCop, may require this file to be generated again.
|
# versions of RuboCop, may require this file to be generated again.
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: TreatCommentsAsGroupSeparators, ConsiderPunctuation, Include.
|
|
||||||
# Include: **/*.gemfile, **/Gemfile, **/gems.rb
|
|
||||||
Bundler/OrderedGems:
|
|
||||||
Exclude:
|
|
||||||
- 'Gemfile'
|
|
||||||
|
|
||||||
Lint/NonLocalExitFromIterator:
|
Lint/NonLocalExitFromIterator:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'app/helpers/jsonld_helper.rb'
|
- 'app/helpers/jsonld_helper.rb'
|
||||||
|
@ -207,13 +200,6 @@ Style/OptionalBooleanParameter:
|
||||||
- 'app/workers/unfollow_follow_worker.rb'
|
- 'app/workers/unfollow_follow_worker.rb'
|
||||||
- 'lib/mastodon/redis_config.rb'
|
- 'lib/mastodon/redis_config.rb'
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: PreferredDelimiters.
|
|
||||||
Style/PercentLiteralDelimiters:
|
|
||||||
Exclude:
|
|
||||||
- 'config/deploy.rb'
|
|
||||||
- 'config/initializers/doorkeeper.rb'
|
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||||
# Configuration parameters: EnforcedStyle.
|
# Configuration parameters: EnforcedStyle.
|
||||||
# SupportedStyles: short, verbose
|
# SupportedStyles: short, verbose
|
||||||
|
@ -258,34 +244,6 @@ Style/StringConcatenation:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'config/initializers/paperclip.rb'
|
- 'config/initializers/paperclip.rb'
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: EnforcedStyle, ConsistentQuotesInMultiline.
|
|
||||||
# SupportedStyles: single_quotes, double_quotes
|
|
||||||
Style/StringLiterals:
|
|
||||||
Exclude:
|
|
||||||
- 'config/environments/production.rb'
|
|
||||||
- 'config/initializers/backtrace_silencers.rb'
|
|
||||||
- 'config/initializers/http_client_proxy.rb'
|
|
||||||
- 'config/initializers/rack_attack.rb'
|
|
||||||
- 'config/initializers/webauthn.rb'
|
|
||||||
- 'config/routes.rb'
|
|
||||||
- 'db/schema.rb'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: EnforcedStyleForMultiline.
|
|
||||||
# SupportedStylesForMultiline: comma, consistent_comma, no_comma
|
|
||||||
Style/TrailingCommaInArguments:
|
|
||||||
Exclude:
|
|
||||||
- 'config/initializers/paperclip.rb'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: EnforcedStyleForMultiline.
|
|
||||||
# SupportedStylesForMultiline: comma, consistent_comma, no_comma
|
|
||||||
Style/TrailingCommaInHashLiteral:
|
|
||||||
Exclude:
|
|
||||||
- 'config/environments/production.rb'
|
|
||||||
- 'config/environments/test.rb'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
# This cop supports safe autocorrection (--autocorrect).
|
||||||
# Configuration parameters: WordRegex.
|
# Configuration parameters: WordRegex.
|
||||||
# SupportedStyles: percent, brackets
|
# SupportedStyles: percent, brackets
|
||||||
|
|
|
@ -205,7 +205,12 @@ ARG TARGETPLATFORM
|
||||||
|
|
||||||
RUN \
|
RUN \
|
||||||
# Use Ruby on Rails to create Mastodon assets
|
# Use Ruby on Rails to create Mastodon assets
|
||||||
OTP_SECRET=precompile_placeholder SECRET_KEY_BASE=precompile_placeholder bundle exec rails assets:precompile; \
|
ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=precompile_placeholder \
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=precompile_placeholder \
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=precompile_placeholder \
|
||||||
|
OTP_SECRET=precompile_placeholder \
|
||||||
|
SECRET_KEY_BASE=precompile_placeholder \
|
||||||
|
bundle exec rails assets:precompile; \
|
||||||
# Cleanup temporary files
|
# Cleanup temporary files
|
||||||
rm -fr /opt/mastodon/tmp;
|
rm -fr /opt/mastodon/tmp;
|
||||||
|
|
||||||
|
|
30
Gemfile
30
Gemfile
|
@ -3,26 +3,26 @@
|
||||||
source 'https://rubygems.org'
|
source 'https://rubygems.org'
|
||||||
ruby '>= 3.1.0'
|
ruby '>= 3.1.0'
|
||||||
|
|
||||||
gem 'puma', '~> 6.3'
|
|
||||||
gem 'rails', '~> 7.1.1'
|
|
||||||
gem 'propshaft'
|
gem 'propshaft'
|
||||||
gem 'thor', '~> 1.2'
|
gem 'puma', '~> 6.3'
|
||||||
gem 'rack', '~> 2.2.7'
|
gem 'rack', '~> 2.2.7'
|
||||||
|
gem 'rails', '~> 7.1.1'
|
||||||
|
gem 'thor', '~> 1.2'
|
||||||
|
|
||||||
# For why irb is in the Gemfile, see: https://ruby.social/@st0012/111444685161478182
|
# For why irb is in the Gemfile, see: https://ruby.social/@st0012/111444685161478182
|
||||||
gem 'irb', '~> 1.8'
|
gem 'irb', '~> 1.8'
|
||||||
|
|
||||||
|
gem 'dotenv'
|
||||||
gem 'haml-rails', '~>2.0'
|
gem 'haml-rails', '~>2.0'
|
||||||
gem 'pg', '~> 1.5'
|
gem 'pg', '~> 1.5'
|
||||||
gem 'pghero'
|
gem 'pghero'
|
||||||
gem 'dotenv-rails', '~> 2.8'
|
|
||||||
|
|
||||||
gem 'aws-sdk-s3', '~> 1.123', require: false
|
gem 'aws-sdk-s3', '~> 1.123', require: false
|
||||||
|
gem 'blurhash', '~> 0.1'
|
||||||
gem 'fog-core', '<= 2.4.0'
|
gem 'fog-core', '<= 2.4.0'
|
||||||
gem 'fog-openstack', '~> 1.0', require: false
|
gem 'fog-openstack', '~> 1.0', require: false
|
||||||
gem 'kt-paperclip', '~> 7.2'
|
gem 'kt-paperclip', '~> 7.2'
|
||||||
gem 'md-paperclip-azure', '~> 2.2', require: false
|
gem 'md-paperclip-azure', '~> 2.2', require: false
|
||||||
gem 'blurhash', '~> 0.1'
|
|
||||||
|
|
||||||
gem 'active_model_serializers', '~> 0.10'
|
gem 'active_model_serializers', '~> 0.10'
|
||||||
gem 'addressable', '~> 2.8'
|
gem 'addressable', '~> 2.8'
|
||||||
|
@ -39,11 +39,11 @@ end
|
||||||
|
|
||||||
gem 'net-ldap', '~> 0.18'
|
gem 'net-ldap', '~> 0.18'
|
||||||
|
|
||||||
gem 'omniauth-cas', '~> 3.0.0.beta.1'
|
|
||||||
gem 'omniauth-saml', '~> 2.0'
|
|
||||||
gem 'omniauth_openid_connect', '~> 0.6.1'
|
|
||||||
gem 'omniauth', '~> 2.0'
|
gem 'omniauth', '~> 2.0'
|
||||||
|
gem 'omniauth-cas', '~> 3.0.0.beta.1'
|
||||||
|
gem 'omniauth_openid_connect', '~> 0.6.1'
|
||||||
gem 'omniauth-rails_csrf_protection', '~> 1.0'
|
gem 'omniauth-rails_csrf_protection', '~> 1.0'
|
||||||
|
gem 'omniauth-saml', '~> 2.0'
|
||||||
|
|
||||||
gem 'color_diff', '~> 0.1'
|
gem 'color_diff', '~> 0.1'
|
||||||
gem 'csv', '~> 3.2'
|
gem 'csv', '~> 3.2'
|
||||||
|
@ -53,7 +53,6 @@ gem 'ed25519', '~> 1.3'
|
||||||
gem 'fast_blank', '~> 1.0'
|
gem 'fast_blank', '~> 1.0'
|
||||||
gem 'fastimage'
|
gem 'fastimage'
|
||||||
gem 'hiredis', '~> 0.6'
|
gem 'hiredis', '~> 0.6'
|
||||||
gem 'redis-namespace', '~> 1.10'
|
|
||||||
gem 'htmlentities', '~> 4.3'
|
gem 'htmlentities', '~> 4.3'
|
||||||
gem 'http', '~> 5.1'
|
gem 'http', '~> 5.1'
|
||||||
gem 'http_accept_language', '~> 2.1'
|
gem 'http_accept_language', '~> 2.1'
|
||||||
|
@ -63,39 +62,40 @@ gem 'idn-ruby', require: 'idn'
|
||||||
gem 'inline_svg'
|
gem 'inline_svg'
|
||||||
gem 'kaminari', '~> 1.2'
|
gem 'kaminari', '~> 1.2'
|
||||||
gem 'link_header', '~> 0.0'
|
gem 'link_header', '~> 0.0'
|
||||||
|
gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
|
||||||
gem 'mime-types', '~> 3.5.0', require: 'mime/types/columnar'
|
gem 'mime-types', '~> 3.5.0', require: 'mime/types/columnar'
|
||||||
gem 'nokogiri', '~> 1.16.2'
|
gem 'nokogiri', '~> 1.16.2'
|
||||||
gem 'nsa'
|
gem 'nsa'
|
||||||
gem 'oj', '~> 3.14'
|
gem 'oj', '~> 3.14'
|
||||||
gem 'ox', '~> 2.14'
|
gem 'ox', '~> 2.14'
|
||||||
gem 'parslet'
|
gem 'parslet'
|
||||||
|
gem 'premailer-rails'
|
||||||
gem 'public_suffix', '~> 5.0'
|
gem 'public_suffix', '~> 5.0'
|
||||||
gem 'pundit', '~> 2.3'
|
gem 'pundit', '~> 2.3'
|
||||||
gem 'premailer-rails'
|
|
||||||
gem 'rack-attack', '~> 6.6'
|
gem 'rack-attack', '~> 6.6'
|
||||||
gem 'rack-cors', '~> 2.0', require: 'rack/cors'
|
gem 'rack-cors', '~> 2.0', require: 'rack/cors'
|
||||||
gem 'rails-i18n', '~> 7.0'
|
gem 'rails-i18n', '~> 7.0'
|
||||||
gem 'redcarpet', '~> 3.6'
|
gem 'redcarpet', '~> 3.6'
|
||||||
gem 'redis', '~> 4.5', require: ['redis', 'redis/connection/hiredis']
|
gem 'redis', '~> 4.5', require: ['redis', 'redis/connection/hiredis']
|
||||||
gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
|
gem 'redis-namespace', '~> 1.10'
|
||||||
gem 'rqrcode', '~> 2.2'
|
gem 'rqrcode', '~> 2.2'
|
||||||
gem 'ruby-progressbar', '~> 1.13'
|
gem 'ruby-progressbar', '~> 1.13'
|
||||||
gem 'sanitize', '~> 6.0'
|
gem 'sanitize', '~> 6.0'
|
||||||
gem 'scenic', '~> 1.7'
|
gem 'scenic', '~> 1.7'
|
||||||
gem 'sidekiq', '~> 6.5'
|
gem 'sidekiq', '~> 6.5'
|
||||||
|
gem 'sidekiq-bulk', '~> 0.2.0'
|
||||||
gem 'sidekiq-scheduler', '~> 5.0'
|
gem 'sidekiq-scheduler', '~> 5.0'
|
||||||
gem 'sidekiq-unique-jobs', '~> 7.1'
|
gem 'sidekiq-unique-jobs', '~> 7.1'
|
||||||
gem 'sidekiq-bulk', '~> 0.2.0'
|
|
||||||
gem 'simple-navigation', '~> 4.4'
|
|
||||||
gem 'simple_form', '~> 5.2'
|
gem 'simple_form', '~> 5.2'
|
||||||
|
gem 'simple-navigation', '~> 4.4'
|
||||||
gem 'stoplight', '~> 4.1'
|
gem 'stoplight', '~> 4.1'
|
||||||
gem 'strong_migrations', '1.8.0'
|
gem 'strong_migrations', '1.8.0'
|
||||||
gem 'tty-prompt', '~> 0.23', require: false
|
gem 'tty-prompt', '~> 0.23', require: false
|
||||||
gem 'twitter-text', '~> 3.1.0'
|
gem 'twitter-text', '~> 3.1.0'
|
||||||
gem 'tzinfo-data', '~> 1.2023'
|
gem 'tzinfo-data', '~> 1.2023'
|
||||||
|
gem 'webauthn', '~> 3.0'
|
||||||
gem 'webpacker', '~> 5.4'
|
gem 'webpacker', '~> 5.4'
|
||||||
gem 'webpush', github: 'ClearlyClaire/webpush', ref: 'f14a4d52e201128b1b00245d11b6de80d6cfdcd9'
|
gem 'webpush', github: 'ClearlyClaire/webpush', ref: 'f14a4d52e201128b1b00245d11b6de80d6cfdcd9'
|
||||||
gem 'webauthn', '~> 3.0'
|
|
||||||
|
|
||||||
gem 'json-ld'
|
gem 'json-ld'
|
||||||
gem 'json-ld-preloaded', '~> 3.2'
|
gem 'json-ld-preloaded', '~> 3.2'
|
||||||
|
@ -199,10 +199,10 @@ group :production do
|
||||||
gem 'lograge', '~> 0.12'
|
gem 'lograge', '~> 0.12'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
gem 'cocoon', '~> 1.2'
|
||||||
gem 'concurrent-ruby', require: false
|
gem 'concurrent-ruby', require: false
|
||||||
gem 'connection_pool', require: false
|
gem 'connection_pool', require: false
|
||||||
gem 'xorcist', '~> 1.1'
|
gem 'xorcist', '~> 1.1'
|
||||||
gem 'cocoon', '~> 1.2'
|
|
||||||
|
|
||||||
gem 'net-http', '~> 0.4.0'
|
gem 'net-http', '~> 0.4.0'
|
||||||
gem 'rubyzip', '~> 2.3'
|
gem 'rubyzip', '~> 2.3'
|
||||||
|
|
65
Gemfile.lock
65
Gemfile.lock
|
@ -102,17 +102,17 @@ GEM
|
||||||
attr_required (1.0.2)
|
attr_required (1.0.2)
|
||||||
awrence (1.2.1)
|
awrence (1.2.1)
|
||||||
aws-eventstream (1.3.0)
|
aws-eventstream (1.3.0)
|
||||||
aws-partitions (1.899.0)
|
aws-partitions (1.916.0)
|
||||||
aws-sdk-core (3.191.5)
|
aws-sdk-core (3.192.1)
|
||||||
aws-eventstream (~> 1, >= 1.3.0)
|
aws-eventstream (~> 1, >= 1.3.0)
|
||||||
aws-partitions (~> 1, >= 1.651.0)
|
aws-partitions (~> 1, >= 1.651.0)
|
||||||
aws-sigv4 (~> 1.8)
|
aws-sigv4 (~> 1.8)
|
||||||
jmespath (~> 1, >= 1.6.1)
|
jmespath (~> 1, >= 1.6.1)
|
||||||
aws-sdk-kms (1.78.0)
|
aws-sdk-kms (1.79.0)
|
||||||
aws-sdk-core (~> 3, >= 3.191.0)
|
aws-sdk-core (~> 3, >= 3.191.0)
|
||||||
aws-sigv4 (~> 1.1)
|
aws-sigv4 (~> 1.1)
|
||||||
aws-sdk-s3 (1.146.1)
|
aws-sdk-s3 (1.147.0)
|
||||||
aws-sdk-core (~> 3, >= 3.191.0)
|
aws-sdk-core (~> 3, >= 3.192.0)
|
||||||
aws-sdk-kms (~> 1)
|
aws-sdk-kms (~> 1)
|
||||||
aws-sigv4 (~> 1.8)
|
aws-sigv4 (~> 1.8)
|
||||||
aws-sigv4 (1.8.0)
|
aws-sigv4 (1.8.0)
|
||||||
|
@ -186,7 +186,7 @@ GEM
|
||||||
bigdecimal
|
bigdecimal
|
||||||
rexml
|
rexml
|
||||||
crass (1.0.6)
|
crass (1.0.6)
|
||||||
css_parser (1.16.0)
|
css_parser (1.17.1)
|
||||||
addressable
|
addressable
|
||||||
csv (3.3.0)
|
csv (3.3.0)
|
||||||
database_cleaner-active_record (2.1.0)
|
database_cleaner-active_record (2.1.0)
|
||||||
|
@ -220,10 +220,7 @@ GEM
|
||||||
domain_name (0.6.20240107)
|
domain_name (0.6.20240107)
|
||||||
doorkeeper (5.6.9)
|
doorkeeper (5.6.9)
|
||||||
railties (>= 5)
|
railties (>= 5)
|
||||||
dotenv (2.8.1)
|
dotenv (3.1.0)
|
||||||
dotenv-rails (2.8.1)
|
|
||||||
dotenv (= 2.8.1)
|
|
||||||
railties (>= 3.2)
|
|
||||||
drb (2.2.1)
|
drb (2.2.1)
|
||||||
ed25519 (1.3.0)
|
ed25519 (1.3.0)
|
||||||
elasticsearch (7.13.3)
|
elasticsearch (7.13.3)
|
||||||
|
@ -241,7 +238,7 @@ GEM
|
||||||
mail (~> 2.7)
|
mail (~> 2.7)
|
||||||
encryptor (3.0.0)
|
encryptor (3.0.0)
|
||||||
erubi (1.12.0)
|
erubi (1.12.0)
|
||||||
et-orbi (1.2.10)
|
et-orbi (1.2.11)
|
||||||
tzinfo
|
tzinfo
|
||||||
excon (0.110.0)
|
excon (0.110.0)
|
||||||
fabrication (2.31.0)
|
fabrication (2.31.0)
|
||||||
|
@ -275,8 +272,8 @@ GEM
|
||||||
fast_blank (1.0.1)
|
fast_blank (1.0.1)
|
||||||
fastimage (2.3.1)
|
fastimage (2.3.1)
|
||||||
ffi (1.16.3)
|
ffi (1.16.3)
|
||||||
ffi-compiler (1.0.1)
|
ffi-compiler (1.3.2)
|
||||||
ffi (>= 1.0.0)
|
ffi (>= 1.15.5)
|
||||||
rake
|
rake
|
||||||
fog-core (2.4.0)
|
fog-core (2.4.0)
|
||||||
builder
|
builder
|
||||||
|
@ -317,15 +314,16 @@ GEM
|
||||||
hashie (5.0.0)
|
hashie (5.0.0)
|
||||||
hcaptcha (7.1.0)
|
hcaptcha (7.1.0)
|
||||||
json
|
json
|
||||||
highline (2.1.0)
|
highline (3.0.1)
|
||||||
hiredis (0.6.3)
|
hiredis (0.6.3)
|
||||||
hkdf (0.3.0)
|
hkdf (0.3.0)
|
||||||
htmlentities (4.3.4)
|
htmlentities (4.3.4)
|
||||||
http (5.1.1)
|
http (5.2.0)
|
||||||
addressable (~> 2.8)
|
addressable (~> 2.8)
|
||||||
|
base64 (~> 0.1)
|
||||||
http-cookie (~> 1.0)
|
http-cookie (~> 1.0)
|
||||||
http-form_data (~> 2.2)
|
http-form_data (~> 2.2)
|
||||||
llhttp-ffi (~> 0.4.0)
|
llhttp-ffi (~> 0.5.0)
|
||||||
http-cookie (1.0.5)
|
http-cookie (1.0.5)
|
||||||
domain_name (~> 0.5)
|
domain_name (~> 0.5)
|
||||||
http-form_data (2.3.0)
|
http-form_data (2.3.0)
|
||||||
|
@ -376,7 +374,8 @@ GEM
|
||||||
json-schema (4.3.0)
|
json-schema (4.3.0)
|
||||||
addressable (>= 2.8)
|
addressable (>= 2.8)
|
||||||
jsonapi-renderer (0.2.2)
|
jsonapi-renderer (0.2.2)
|
||||||
jwt (2.7.1)
|
jwt (2.8.1)
|
||||||
|
base64
|
||||||
kaminari (1.2.2)
|
kaminari (1.2.2)
|
||||||
activesupport (>= 4.1.0)
|
activesupport (>= 4.1.0)
|
||||||
kaminari-actionview (= 1.2.2)
|
kaminari-actionview (= 1.2.2)
|
||||||
|
@ -406,7 +405,7 @@ GEM
|
||||||
railties (>= 5.2)
|
railties (>= 5.2)
|
||||||
rexml
|
rexml
|
||||||
link_header (0.0.8)
|
link_header (0.0.8)
|
||||||
llhttp-ffi (0.4.0)
|
llhttp-ffi (0.5.0)
|
||||||
ffi-compiler (~> 1.0)
|
ffi-compiler (~> 1.0)
|
||||||
rake (~> 13.0)
|
rake (~> 13.0)
|
||||||
lograge (0.14.0)
|
lograge (0.14.0)
|
||||||
|
@ -435,11 +434,11 @@ GEM
|
||||||
mime-types-data (~> 3.2015)
|
mime-types-data (~> 3.2015)
|
||||||
mime-types-data (3.2024.0305)
|
mime-types-data (3.2024.0305)
|
||||||
mini_mime (1.1.5)
|
mini_mime (1.1.5)
|
||||||
mini_portile2 (2.8.5)
|
mini_portile2 (2.8.6)
|
||||||
minitest (5.22.3)
|
minitest (5.22.3)
|
||||||
msgpack (1.7.2)
|
msgpack (1.7.2)
|
||||||
multi_json (1.15.0)
|
multi_json (1.15.0)
|
||||||
multipart-post (2.3.0)
|
multipart-post (2.4.0)
|
||||||
mutex_m (0.2.0)
|
mutex_m (0.2.0)
|
||||||
net-http (0.4.1)
|
net-http (0.4.1)
|
||||||
uri
|
uri
|
||||||
|
@ -453,7 +452,7 @@ GEM
|
||||||
net-protocol
|
net-protocol
|
||||||
net-protocol (0.2.2)
|
net-protocol (0.2.2)
|
||||||
timeout
|
timeout
|
||||||
net-smtp (0.4.0.1)
|
net-smtp (0.5.0)
|
||||||
net-protocol
|
net-protocol
|
||||||
nio4r (2.7.1)
|
nio4r (2.7.1)
|
||||||
nokogiri (1.16.4)
|
nokogiri (1.16.4)
|
||||||
|
@ -546,7 +545,7 @@ GEM
|
||||||
rack-protection (3.2.0)
|
rack-protection (3.2.0)
|
||||||
base64 (>= 0.1.0)
|
base64 (>= 0.1.0)
|
||||||
rack (~> 2.2, >= 2.2.4)
|
rack (~> 2.2, >= 2.2.4)
|
||||||
rack-proxy (0.7.6)
|
rack-proxy (0.7.7)
|
||||||
rack
|
rack
|
||||||
rack-session (1.0.2)
|
rack-session (1.0.2)
|
||||||
rack (< 3)
|
rack (< 3)
|
||||||
|
@ -592,7 +591,7 @@ GEM
|
||||||
thor (~> 1.0, >= 1.2.2)
|
thor (~> 1.0, >= 1.2.2)
|
||||||
zeitwerk (~> 2.6)
|
zeitwerk (~> 2.6)
|
||||||
rainbow (3.1.1)
|
rainbow (3.1.1)
|
||||||
rake (13.1.0)
|
rake (13.2.1)
|
||||||
rdf (3.3.1)
|
rdf (3.3.1)
|
||||||
bcp47_spec (~> 0.2)
|
bcp47_spec (~> 0.2)
|
||||||
link_header (~> 0.0, >= 0.0.8)
|
link_header (~> 0.0, >= 0.0.8)
|
||||||
|
@ -607,9 +606,9 @@ GEM
|
||||||
redlock (1.3.2)
|
redlock (1.3.2)
|
||||||
redis (>= 3.0.0, < 6.0)
|
redis (>= 3.0.0, < 6.0)
|
||||||
regexp_parser (2.9.0)
|
regexp_parser (2.9.0)
|
||||||
reline (0.5.1)
|
reline (0.5.2)
|
||||||
io-console (~> 0.5)
|
io-console (~> 0.5)
|
||||||
request_store (1.5.1)
|
request_store (1.6.0)
|
||||||
rack (>= 1.4)
|
rack (>= 1.4)
|
||||||
responders (3.1.1)
|
responders (3.1.1)
|
||||||
actionpack (>= 5.2)
|
actionpack (>= 5.2)
|
||||||
|
@ -642,7 +641,7 @@ GEM
|
||||||
rspec-support (~> 3.13)
|
rspec-support (~> 3.13)
|
||||||
rspec-retry (0.6.2)
|
rspec-retry (0.6.2)
|
||||||
rspec-core (> 3.3)
|
rspec-core (> 3.3)
|
||||||
rspec-sidekiq (4.1.0)
|
rspec-sidekiq (4.2.0)
|
||||||
rspec-core (~> 3.0)
|
rspec-core (~> 3.0)
|
||||||
rspec-expectations (~> 3.0)
|
rspec-expectations (~> 3.0)
|
||||||
rspec-mocks (~> 3.0)
|
rspec-mocks (~> 3.0)
|
||||||
|
@ -678,11 +677,11 @@ GEM
|
||||||
rubocop-capybara (~> 2.17)
|
rubocop-capybara (~> 2.17)
|
||||||
rubocop-factory_bot (~> 2.22)
|
rubocop-factory_bot (~> 2.22)
|
||||||
rubocop-rspec_rails (~> 2.28)
|
rubocop-rspec_rails (~> 2.28)
|
||||||
rubocop-rspec_rails (2.28.2)
|
rubocop-rspec_rails (2.28.3)
|
||||||
rubocop (~> 1.40)
|
rubocop (~> 1.40)
|
||||||
ruby-prof (1.7.0)
|
ruby-prof (1.7.0)
|
||||||
ruby-progressbar (1.13.0)
|
ruby-progressbar (1.13.0)
|
||||||
ruby-saml (1.15.0)
|
ruby-saml (1.16.0)
|
||||||
nokogiri (>= 1.13.10)
|
nokogiri (>= 1.13.10)
|
||||||
rexml
|
rexml
|
||||||
ruby2_keywords (0.0.5)
|
ruby2_keywords (0.0.5)
|
||||||
|
@ -749,7 +748,7 @@ GEM
|
||||||
unicode-display_width (>= 1.1.1, < 3)
|
unicode-display_width (>= 1.1.1, < 3)
|
||||||
terrapin (1.0.1)
|
terrapin (1.0.1)
|
||||||
climate_control
|
climate_control
|
||||||
test-prof (1.3.2)
|
test-prof (1.3.3)
|
||||||
thor (1.3.1)
|
thor (1.3.1)
|
||||||
tilt (2.3.0)
|
tilt (2.3.0)
|
||||||
timeout (0.4.1)
|
timeout (0.4.1)
|
||||||
|
@ -778,7 +777,7 @@ GEM
|
||||||
unf_ext
|
unf_ext
|
||||||
unf_ext (0.0.9.1)
|
unf_ext (0.0.9.1)
|
||||||
unicode-display_width (2.5.0)
|
unicode-display_width (2.5.0)
|
||||||
uri (0.12.2)
|
uri (0.13.0)
|
||||||
validate_email (0.1.6)
|
validate_email (0.1.6)
|
||||||
activemodel (>= 3.0)
|
activemodel (>= 3.0)
|
||||||
mail (>= 2.2.5)
|
mail (>= 2.2.5)
|
||||||
|
@ -850,7 +849,7 @@ DEPENDENCIES
|
||||||
devise_pam_authenticatable2 (~> 9.2)
|
devise_pam_authenticatable2 (~> 9.2)
|
||||||
discard (~> 1.2)
|
discard (~> 1.2)
|
||||||
doorkeeper (~> 5.6)
|
doorkeeper (~> 5.6)
|
||||||
dotenv-rails (~> 2.8)
|
dotenv
|
||||||
ed25519 (~> 1.3)
|
ed25519 (~> 1.3)
|
||||||
email_spec
|
email_spec
|
||||||
fabrication (~> 2.30)
|
fabrication (~> 2.30)
|
||||||
|
@ -957,7 +956,7 @@ DEPENDENCIES
|
||||||
xorcist (~> 1.1)
|
xorcist (~> 1.1)
|
||||||
|
|
||||||
RUBY VERSION
|
RUBY VERSION
|
||||||
ruby 3.2.2p53
|
ruby 3.2.3p157
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
2.5.7
|
2.5.9
|
||||||
|
|
|
@ -9,6 +9,7 @@ class Api::BaseController < ApplicationController
|
||||||
include Api::CachingConcern
|
include Api::CachingConcern
|
||||||
include Api::ContentSecurityPolicy
|
include Api::ContentSecurityPolicy
|
||||||
include Api::ErrorHandling
|
include Api::ErrorHandling
|
||||||
|
include Api::Pagination
|
||||||
|
|
||||||
skip_before_action :require_functional!, unless: :limited_federation_mode?
|
skip_before_action :require_functional!, unless: :limited_federation_mode?
|
||||||
|
|
||||||
|
@ -29,21 +30,6 @@ class Api::BaseController < ApplicationController
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def pagination_max_id
|
|
||||||
pagination_collection.last.id
|
|
||||||
end
|
|
||||||
|
|
||||||
def pagination_since_id
|
|
||||||
pagination_collection.first.id
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_pagination_headers(next_path = nil, prev_path = nil)
|
|
||||||
links = []
|
|
||||||
links << [next_path, [%w(rel next)]] if next_path
|
|
||||||
links << [prev_path, [%w(rel prev)]] if prev_path
|
|
||||||
response.headers['Link'] = LinkHeader.new(links) unless links.empty?
|
|
||||||
end
|
|
||||||
|
|
||||||
def limit_param(default_limit)
|
def limit_param(default_limit)
|
||||||
return default_limit unless params[:limit]
|
return default_limit unless params[:limit]
|
||||||
|
|
||||||
|
@ -72,10 +58,6 @@ class Api::BaseController < ApplicationController
|
||||||
render json: { error: 'Your login is currently disabled' }, status: 403 if current_user&.account&.unavailable?
|
render json: { error: 'Your login is currently disabled' }, status: 403 if current_user&.account&.unavailable?
|
||||||
end
|
end
|
||||||
|
|
||||||
def require_valid_pagination_options!
|
|
||||||
render json: { error: 'Pagination values for `offset` and `limit` must be positive' }, status: 400 if pagination_options_invalid?
|
|
||||||
end
|
|
||||||
|
|
||||||
def require_user!
|
def require_user!
|
||||||
if !current_user
|
if !current_user
|
||||||
render json: { error: 'This method requires an authenticated user' }, status: 422
|
render json: { error: 'This method requires an authenticated user' }, status: 422
|
||||||
|
@ -104,14 +86,6 @@ class Api::BaseController < ApplicationController
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def insert_pagination_headers
|
|
||||||
set_pagination_headers(next_path, prev_path)
|
|
||||||
end
|
|
||||||
|
|
||||||
def pagination_options_invalid?
|
|
||||||
params.slice(:limit, :offset).values.map(&:to_i).any?(&:negative?)
|
|
||||||
end
|
|
||||||
|
|
||||||
def respond_with_error(code)
|
def respond_with_error(code)
|
||||||
render json: { error: Rack::Utils::HTTP_STATUS_CODES[code] }, status: code
|
render json: { error: Rack::Utils::HTTP_STATUS_CODES[code] }, status: code
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,10 +12,6 @@ class Api::V1::FeaturedTags::SuggestionsController < Api::BaseController
|
||||||
private
|
private
|
||||||
|
|
||||||
def set_recently_used_tags
|
def set_recently_used_tags
|
||||||
@recently_used_tags = Tag.recently_used(current_account).where.not(id: featured_tag_ids).limit(10)
|
@recently_used_tags = Tag.suggestions_for_account(current_account).limit(10)
|
||||||
end
|
|
||||||
|
|
||||||
def featured_tag_ids
|
|
||||||
current_account.featured_tags.pluck(:tag_id)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
36
app/controllers/concerns/api/pagination.rb
Normal file
36
app/controllers/concerns/api/pagination.rb
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Api::Pagination
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
protected
|
||||||
|
|
||||||
|
def pagination_max_id
|
||||||
|
pagination_collection.last.id
|
||||||
|
end
|
||||||
|
|
||||||
|
def pagination_since_id
|
||||||
|
pagination_collection.first.id
|
||||||
|
end
|
||||||
|
|
||||||
|
def set_pagination_headers(next_path = nil, prev_path = nil)
|
||||||
|
links = []
|
||||||
|
links << [next_path, [%w(rel next)]] if next_path
|
||||||
|
links << [prev_path, [%w(rel prev)]] if prev_path
|
||||||
|
response.headers['Link'] = LinkHeader.new(links) unless links.empty?
|
||||||
|
end
|
||||||
|
|
||||||
|
def require_valid_pagination_options!
|
||||||
|
render json: { error: 'Pagination values for `offset` and `limit` must be positive' }, status: 400 if pagination_options_invalid?
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def insert_pagination_headers
|
||||||
|
set_pagination_headers(next_path, prev_path)
|
||||||
|
end
|
||||||
|
|
||||||
|
def pagination_options_invalid?
|
||||||
|
params.slice(:limit, :offset).values.map(&:to_i).any?(&:negative?)
|
||||||
|
end
|
||||||
|
end
|
|
@ -38,7 +38,7 @@ class Settings::FeaturedTagsController < Settings::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_recently_used_tags
|
def set_recently_used_tags
|
||||||
@recently_used_tags = Tag.recently_used(current_account).where.not(id: @featured_tags.map(&:id)).limit(10)
|
@recently_used_tags = Tag.suggestions_for_account(current_account).limit(10)
|
||||||
end
|
end
|
||||||
|
|
||||||
def featured_tag_params
|
def featured_tag_params
|
||||||
|
|
|
@ -31,7 +31,7 @@ class Settings::ImportsController < Settings::BaseController
|
||||||
def show; end
|
def show; end
|
||||||
|
|
||||||
def failures
|
def failures
|
||||||
@bulk_import = current_account.bulk_imports.where(state: :finished).find(params[:id])
|
@bulk_import = current_account.bulk_imports.state_finished.find(params[:id])
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.csv do
|
format.csv do
|
||||||
|
@ -92,7 +92,7 @@ class Settings::ImportsController < Settings::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_bulk_import
|
def set_bulk_import
|
||||||
@bulk_import = current_account.bulk_imports.where(state: :unconfirmed).find(params[:id])
|
@bulk_import = current_account.bulk_imports.state_unconfirmed.find(params[:id])
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_recent_imports
|
def set_recent_imports
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Филтриране на публ.",
|
"filter_modal.select_filter.title": "Филтриране на публ.",
|
||||||
"filter_modal.title.status": "Филтриране на публ.",
|
"filter_modal.title.status": "Филтриране на публ.",
|
||||||
"filtered_notifications_banner.pending_requests": "Известията от {count, plural, =0 {никого, когото може да познавате} one {едно лице, което може да познавате} other {# души, които може да познавате}}",
|
"filtered_notifications_banner.pending_requests": "Известията от {count, plural, =0 {никого, когото може да познавате} one {едно лице, което може да познавате} other {# души, които може да познавате}}",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {частно споменаване} other {частни споменавания}}",
|
|
||||||
"filtered_notifications_banner.title": "Филтрирани известия",
|
"filtered_notifications_banner.title": "Филтрирани известия",
|
||||||
"firehose.all": "Всичко",
|
"firehose.all": "Всичко",
|
||||||
"firehose.local": "Този сървър",
|
"firehose.local": "Този сървър",
|
||||||
|
|
|
@ -256,6 +256,7 @@
|
||||||
"filter_modal.select_filter.subtitle": "Implijout ur rummad a zo anezhañ pe krouiñ unan nevez",
|
"filter_modal.select_filter.subtitle": "Implijout ur rummad a zo anezhañ pe krouiñ unan nevez",
|
||||||
"filter_modal.select_filter.title": "Silañ an toud-mañ",
|
"filter_modal.select_filter.title": "Silañ an toud-mañ",
|
||||||
"filter_modal.title.status": "Silañ un toud",
|
"filter_modal.title.status": "Silañ un toud",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {meneg} two {veneg} few {meneg} other {a venegoù}}",
|
||||||
"firehose.all": "Pep tra",
|
"firehose.all": "Pep tra",
|
||||||
"firehose.local": "Ar servijer-mañ",
|
"firehose.local": "Ar servijer-mañ",
|
||||||
"firehose.remote": "Servijerioù all",
|
"firehose.remote": "Servijerioù all",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Usa una categoria existent o crea'n una de nova",
|
"filter_modal.select_filter.subtitle": "Usa una categoria existent o crea'n una de nova",
|
||||||
"filter_modal.select_filter.title": "Filtra aquest tut",
|
"filter_modal.select_filter.title": "Filtra aquest tut",
|
||||||
"filter_modal.title.status": "Filtra un tut",
|
"filter_modal.title.status": "Filtra un tut",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {menció} other {mencions}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Notificacions {count, plural, =0 {de ningú} one {d'una persona} other {de # persones}} que potser coneixes",
|
"filtered_notifications_banner.pending_requests": "Notificacions {count, plural, =0 {de ningú} one {d'una persona} other {de # persones}} que potser coneixes",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {menció privada} other {mencions privades}}",
|
|
||||||
"filtered_notifications_banner.title": "Notificacions filtrades",
|
"filtered_notifications_banner.title": "Notificacions filtrades",
|
||||||
"firehose.all": "Tots",
|
"firehose.all": "Tots",
|
||||||
"firehose.local": "Aquest servidor",
|
"firehose.local": "Aquest servidor",
|
||||||
|
|
|
@ -89,6 +89,14 @@
|
||||||
"announcement.announcement": "Oznámení",
|
"announcement.announcement": "Oznámení",
|
||||||
"attachments_list.unprocessed": "(nezpracováno)",
|
"attachments_list.unprocessed": "(nezpracováno)",
|
||||||
"audio.hide": "Skrýt zvuk",
|
"audio.hide": "Skrýt zvuk",
|
||||||
|
"block_modal.remote_users_caveat": "Požádáme server {domain}, aby respektoval vaše rozhodnutí. Úplné dodržování nastavení však není zaručeno, protože některé servery mohou řešit blokování různě. Veřejné příspěvky mohou být stále viditelné pro nepřihlášené uživatele.",
|
||||||
|
"block_modal.show_less": "Zobrazit méně",
|
||||||
|
"block_modal.show_more": "Zobrazit více",
|
||||||
|
"block_modal.they_cant_mention": "Nemůže vás zmiňovat ani sledovat.",
|
||||||
|
"block_modal.they_cant_see_posts": "Nemůže vidět vaše příspěvky a vy neuvidíte jeho.",
|
||||||
|
"block_modal.they_will_know": "Může vidět, že je zablokovaný.",
|
||||||
|
"block_modal.title": "Zablokovat uživatele?",
|
||||||
|
"block_modal.you_wont_see_mentions": "Neuvidíte příspěvky, které ho zmiňují.",
|
||||||
"boost_modal.combo": "Příště můžete pro přeskočení stisknout {combo}",
|
"boost_modal.combo": "Příště můžete pro přeskočení stisknout {combo}",
|
||||||
"bundle_column_error.copy_stacktrace": "Zkopírovat zprávu o chybě",
|
"bundle_column_error.copy_stacktrace": "Zkopírovat zprávu o chybě",
|
||||||
"bundle_column_error.error.body": "Požadovanou stránku nelze vykreslit. Může to být způsobeno chybou v našem kódu nebo problémem s kompatibilitou prohlížeče.",
|
"bundle_column_error.error.body": "Požadovanou stránku nelze vykreslit. Může to být způsobeno chybou v našem kódu nebo problémem s kompatibilitou prohlížeče.",
|
||||||
|
@ -169,6 +177,7 @@
|
||||||
"confirmations.delete_list.message": "Opravdu chcete tento seznam navždy smazat?",
|
"confirmations.delete_list.message": "Opravdu chcete tento seznam navždy smazat?",
|
||||||
"confirmations.discard_edit_media.confirm": "Zahodit",
|
"confirmations.discard_edit_media.confirm": "Zahodit",
|
||||||
"confirmations.discard_edit_media.message": "Máte neuložené změny popisku médií nebo náhledu, chcete je přesto zahodit?",
|
"confirmations.discard_edit_media.message": "Máte neuložené změny popisku médií nebo náhledu, chcete je přesto zahodit?",
|
||||||
|
"confirmations.domain_block.confirm": "Blokovat server",
|
||||||
"confirmations.domain_block.message": "Opravdu chcete blokovat celou doménu {domain}? Ve většině případů stačí blokovat nebo skrýt pár konkrétních uživatelů, což také doporučujeme. Z této domény neuvidíte obsah v žádné veřejné časové ose ani v oznámeních. Vaši sledující z této domény budou odstraněni.",
|
"confirmations.domain_block.message": "Opravdu chcete blokovat celou doménu {domain}? Ve většině případů stačí blokovat nebo skrýt pár konkrétních uživatelů, což také doporučujeme. Z této domény neuvidíte obsah v žádné veřejné časové ose ani v oznámeních. Vaši sledující z této domény budou odstraněni.",
|
||||||
"confirmations.edit.confirm": "Upravit",
|
"confirmations.edit.confirm": "Upravit",
|
||||||
"confirmations.edit.message": "Editovat teď znamená přepsání zprávy, kterou právě tvoříte. Opravdu chcete pokračovat?",
|
"confirmations.edit.message": "Editovat teď znamená přepsání zprávy, kterou právě tvoříte. Opravdu chcete pokračovat?",
|
||||||
|
@ -200,6 +209,27 @@
|
||||||
"dismissable_banner.explore_statuses": "Toto jsou příspěvky ze sociálních sítí, které dnes získávají na popularitě. Novější příspěvky s větším počtem boostů a oblíbení jsou hodnoceny výše.",
|
"dismissable_banner.explore_statuses": "Toto jsou příspěvky ze sociálních sítí, které dnes získávají na popularitě. Novější příspěvky s větším počtem boostů a oblíbení jsou hodnoceny výše.",
|
||||||
"dismissable_banner.explore_tags": "Tyto hashtagy právě teď získávají na popularitě mezi lidmi na tomto a dalších serverech decentralizované sítě.",
|
"dismissable_banner.explore_tags": "Tyto hashtagy právě teď získávají na popularitě mezi lidmi na tomto a dalších serverech decentralizované sítě.",
|
||||||
"dismissable_banner.public_timeline": "Toto jsou nejnovější veřejné příspěvky od lidí na sociální síti, které sledují lidé na {domain}.",
|
"dismissable_banner.public_timeline": "Toto jsou nejnovější veřejné příspěvky od lidí na sociální síti, které sledují lidé na {domain}.",
|
||||||
|
"domain_block_modal.block": "Blokovat server",
|
||||||
|
"domain_block_modal.block_account_instead": "Raději blokovat @{name}",
|
||||||
|
"domain_block_modal.they_can_interact_with_old_posts": "Lidé z tohoto serveru mohou interagovat s vašimi starými příspěvky.",
|
||||||
|
"domain_block_modal.they_cant_follow": "Nikdo z tohoto serveru vás nemůže sledovat.",
|
||||||
|
"domain_block_modal.they_wont_know": "Nebude vědět, že je zablokován.",
|
||||||
|
"domain_block_modal.title": "Blokovat doménu?",
|
||||||
|
"domain_block_modal.you_will_lose_followers": "Všichni vaši sledující z tohoto serveru budou odstraněni.",
|
||||||
|
"domain_block_modal.you_wont_see_posts": "Neuvidíte příspěvky ani upozornění od uživatelů z tohoto serveru.",
|
||||||
|
"domain_pill.activitypub_lets_connect": "Umožňuje vám spojit se a komunikovat s lidmi nejen na Mastodonu, ale i s dalšími sociálními aplikacemi.",
|
||||||
|
"domain_pill.activitypub_like_language": "ActivityPub je jako jazyk, kterým Mastodon mluví s jinými sociálními sítěmi.",
|
||||||
|
"domain_pill.server": "Server",
|
||||||
|
"domain_pill.their_handle": "Handle:",
|
||||||
|
"domain_pill.their_server": "Digitální domov, kde žijí všechny příspěvky.",
|
||||||
|
"domain_pill.their_username": "Jedinečný identikátor na serveru. Je možné najít uživatele se stejným uživatelským jménem na různých serverech.",
|
||||||
|
"domain_pill.username": "Uživatelské jméno",
|
||||||
|
"domain_pill.whats_in_a_handle": "Co obsahuje handle?",
|
||||||
|
"domain_pill.who_they_are": "Protože handle říkají kdo je kdo a také kde, je možné interagovat s lidmi napříč sociálními weby <button>platforem postavených na ActivityPub</button>.",
|
||||||
|
"domain_pill.who_you_are": "Protože handle říká kdo jsi a kde jsi, mohou s tebou lidé komunikovat napříč sociálními weby <button>platforem postavených na ActivityPub</button>.",
|
||||||
|
"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.",
|
||||||
"embed.instructions": "Pro přidání příspěvku na vaši webovou stránku zkopírujte níže uvedený kód.",
|
"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:",
|
"embed.preview": "Takhle to bude vypadat:",
|
||||||
"emoji_button.activity": "Aktivita",
|
"emoji_button.activity": "Aktivita",
|
||||||
|
@ -236,6 +266,7 @@
|
||||||
"empty_column.list": "V tomto seznamu zatím nic není. Až nějaký člen z tohoto seznamu zveřejní nový příspěvek, objeví se zde.",
|
"empty_column.list": "V tomto seznamu zatím nic není. Až nějaký člen z tohoto seznamu zveřejní nový příspěvek, objeví se zde.",
|
||||||
"empty_column.lists": "Zatím nemáte žádné seznamy. Až nějaký vytvoříte, zobrazí se zde.",
|
"empty_column.lists": "Zatím nemáte žádné seznamy. Až nějaký vytvoříte, zobrazí se zde.",
|
||||||
"empty_column.mutes": "Zatím jste neskryli žádného uživatele.",
|
"empty_column.mutes": "Zatím jste neskryli žádného uživatele.",
|
||||||
|
"empty_column.notification_requests": "Vyčištěno! Nic tu není. Jakmile obdržíš nové notifikace, objeví se zde podle tvého nastavení.",
|
||||||
"empty_column.notifications": "Zatím nemáte žádná oznámení. Až s vámi někdo bude interagovat, uvidíte to zde.",
|
"empty_column.notifications": "Zatím nemáte žádná oznámení. Až s vámi někdo bude interagovat, uvidíte to zde.",
|
||||||
"empty_column.public": "Tady nic není! Napište něco veřejně, nebo začněte ručně sledovat uživatele z jiných serverů, aby tu něco přibylo",
|
"empty_column.public": "Tady nic není! Napište něco veřejně, nebo začněte ručně sledovat uživatele z jiných serverů, aby tu něco přibylo",
|
||||||
"error.unexpected_crash.explanation": "Kvůli chybě v našem kódu nebo problému s kompatibilitou prohlížeče nemohla být tato stránka správně zobrazena.",
|
"error.unexpected_crash.explanation": "Kvůli chybě v našem kódu nebo problému s kompatibilitou prohlížeče nemohla být tato stránka správně zobrazena.",
|
||||||
|
@ -266,6 +297,9 @@
|
||||||
"filter_modal.select_filter.subtitle": "Použít existující kategorii nebo vytvořit novou kategorii",
|
"filter_modal.select_filter.subtitle": "Použít existující kategorii nebo vytvořit novou kategorii",
|
||||||
"filter_modal.select_filter.title": "Filtrovat tento příspěvek",
|
"filter_modal.select_filter.title": "Filtrovat tento příspěvek",
|
||||||
"filter_modal.title.status": "Filtrovat příspěvek",
|
"filter_modal.title.status": "Filtrovat příspěvek",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {zmínka} few {zmínky} many {zmínek} other {zmínek}}",
|
||||||
|
"filtered_notifications_banner.pending_requests": "Oznámení od {count, plural, =0 {nikoho} one {jednoho člověka, kterého znáte} few {# lidí, které znáte} many {# lidí, které znáte} other {# lidí, které znáte}}",
|
||||||
|
"filtered_notifications_banner.title": "Filtrovaná oznámení",
|
||||||
"firehose.all": "Vše",
|
"firehose.all": "Vše",
|
||||||
"firehose.local": "Tento server",
|
"firehose.local": "Tento server",
|
||||||
"firehose.remote": "Ostatní servery",
|
"firehose.remote": "Ostatní servery",
|
||||||
|
@ -394,6 +428,15 @@
|
||||||
"loading_indicator.label": "Načítání…",
|
"loading_indicator.label": "Načítání…",
|
||||||
"media_gallery.toggle_visible": "{number, plural, one {Skrýt obrázek} few {Skrýt obrázky} many {Skrýt obrázky} other {Skrýt obrázky}}",
|
"media_gallery.toggle_visible": "{number, plural, one {Skrýt obrázek} few {Skrýt obrázky} many {Skrýt obrázky} other {Skrýt obrázky}}",
|
||||||
"moved_to_account_banner.text": "Váš účet {disabledAccount} je momentálně deaktivován, protože jste se přesunul/a na {movedToAccount}.",
|
"moved_to_account_banner.text": "Váš účet {disabledAccount} je momentálně deaktivován, protože jste se přesunul/a na {movedToAccount}.",
|
||||||
|
"mute_modal.hide_from_notifications": "Skrýt z notifikací",
|
||||||
|
"mute_modal.hide_options": "Skrýt možnosti",
|
||||||
|
"mute_modal.indefinite": "Dokud je neodkryju",
|
||||||
|
"mute_modal.show_options": "Zobrazit možnosti",
|
||||||
|
"mute_modal.they_can_mention_and_follow": "Mohou vás zmínit a sledovat, ale neuvidíte je.",
|
||||||
|
"mute_modal.they_wont_know": "Nebudou vědět, že byli skryti.",
|
||||||
|
"mute_modal.title": "Ztlumit uživatele?",
|
||||||
|
"mute_modal.you_wont_see_mentions": "Neuvidíte příspěvky, které je zmiňují.",
|
||||||
|
"mute_modal.you_wont_see_posts": "Stále budou moci vidět vaše příspěvky, ale vy jejich neuvidíte.",
|
||||||
"navigation_bar.about": "O aplikaci",
|
"navigation_bar.about": "O aplikaci",
|
||||||
"navigation_bar.advanced_interface": "Otevřít pokročilé webové rozhraní",
|
"navigation_bar.advanced_interface": "Otevřít pokročilé webové rozhraní",
|
||||||
"navigation_bar.blocks": "Blokovaní uživatelé",
|
"navigation_bar.blocks": "Blokovaní uživatelé",
|
||||||
|
@ -429,14 +472,25 @@
|
||||||
"notification.own_poll": "Vaše anketa skončila",
|
"notification.own_poll": "Vaše anketa skončila",
|
||||||
"notification.poll": "Anketa, ve které jste hlasovali, skončila",
|
"notification.poll": "Anketa, ve které jste hlasovali, skončila",
|
||||||
"notification.reblog": "Uživatel {name} boostnul váš příspěvek",
|
"notification.reblog": "Uživatel {name} boostnul váš příspěvek",
|
||||||
|
"notification.relationships_severance_event": "Kontakt ztracen s {name}",
|
||||||
|
"notification.relationships_severance_event.account_suspension": "Administrátor z {from} pozastavil {target}, což znamená, že již od nich nemůžete přijímat aktualizace nebo s nimi interagovat.",
|
||||||
|
"notification.relationships_severance_event.domain_block": "Administrátor z {from} pozastavil {target}, včetně {followersCount} z vašich sledujících a {followingCount, plural, one {# účet, který sledujete} few {# účty, které sledujete} many {# účtů, které sledujete} other {# účtů, které sledujete}}.",
|
||||||
|
"notification.relationships_severance_event.learn_more": "Zjistit více",
|
||||||
|
"notification.relationships_severance_event.user_domain_block": "Zablokovali jste {target}, čímž jste odebrali {followersCount} z vašich sledujících a {followingCount, plural, one {# účet, který sledujete} few {# účty, které sledujete} many {# účtů, které sledujete} other {# účtů, které sledujete}}.",
|
||||||
"notification.status": "Uživatel {name} právě přidal příspěvek",
|
"notification.status": "Uživatel {name} právě přidal příspěvek",
|
||||||
"notification.update": "Uživatel {name} upravil příspěvek",
|
"notification.update": "Uživatel {name} upravil příspěvek",
|
||||||
|
"notification_requests.accept": "Přijmout",
|
||||||
|
"notification_requests.dismiss": "Zamítnout",
|
||||||
|
"notification_requests.notifications_from": "Oznámení od {name}",
|
||||||
|
"notification_requests.title": "Vyfiltrovaná oznámení",
|
||||||
"notifications.clear": "Vyčistit oznámení",
|
"notifications.clear": "Vyčistit oznámení",
|
||||||
"notifications.clear_confirmation": "Opravdu chcete trvale smazat všechna vaše oznámení?",
|
"notifications.clear_confirmation": "Opravdu chcete trvale smazat všechna vaše oznámení?",
|
||||||
"notifications.column_settings.admin.report": "Nová hlášení:",
|
"notifications.column_settings.admin.report": "Nová hlášení:",
|
||||||
"notifications.column_settings.admin.sign_up": "Nové registrace:",
|
"notifications.column_settings.admin.sign_up": "Nové registrace:",
|
||||||
"notifications.column_settings.alert": "Oznámení na počítači",
|
"notifications.column_settings.alert": "Oznámení na počítači",
|
||||||
"notifications.column_settings.favourite": "Oblíbené:",
|
"notifications.column_settings.favourite": "Oblíbené:",
|
||||||
|
"notifications.column_settings.filter_bar.advanced": "Zobrazit všechny kategorie",
|
||||||
|
"notifications.column_settings.filter_bar.category": "Panel rychlého filtrování",
|
||||||
"notifications.column_settings.follow": "Noví sledující:",
|
"notifications.column_settings.follow": "Noví sledující:",
|
||||||
"notifications.column_settings.follow_request": "Nové žádosti o sledování:",
|
"notifications.column_settings.follow_request": "Nové žádosti o sledování:",
|
||||||
"notifications.column_settings.mention": "Zmínky:",
|
"notifications.column_settings.mention": "Zmínky:",
|
||||||
|
@ -462,6 +516,15 @@
|
||||||
"notifications.permission_denied": "Oznámení na ploše nejsou k dispozici, protože byla zamítnuta žádost o oprávnění je zobrazovat",
|
"notifications.permission_denied": "Oznámení na ploše nejsou k dispozici, protože byla zamítnuta žádost o oprávnění je zobrazovat",
|
||||||
"notifications.permission_denied_alert": "Oznámení na ploše není možné zapnout, protože oprávnění bylo v minulosti zamítnuto",
|
"notifications.permission_denied_alert": "Oznámení na ploše není možné zapnout, protože oprávnění bylo v minulosti zamítnuto",
|
||||||
"notifications.permission_required": "Oznámení na ploše nejsou k dispozici, protože nebylo uděleno potřebné oprávnění.",
|
"notifications.permission_required": "Oznámení na ploše nejsou k dispozici, protože nebylo uděleno potřebné oprávnění.",
|
||||||
|
"notifications.policy.filter_new_accounts.hint": "Vytvořeno během {days, plural, one {včerejška} few {posledních # dnů} many {posledních # dní} other {posledních # dní}}",
|
||||||
|
"notifications.policy.filter_new_accounts_title": "Nové účty",
|
||||||
|
"notifications.policy.filter_not_followers_hint": "Včetně lidí, kteří vás sledovali méně než {days, plural, one {jeden den} few {# dny} many {# dní} other {# dní}}",
|
||||||
|
"notifications.policy.filter_not_followers_title": "Lidé, kteří vás nesledují",
|
||||||
|
"notifications.policy.filter_not_following_hint": "Dokud je ručně neschválíte",
|
||||||
|
"notifications.policy.filter_not_following_title": "Lidé, které nesledujete",
|
||||||
|
"notifications.policy.filter_private_mentions_hint": "Vyfiltrováno, pokud to není odpověď na vaši zmínku nebo pokud sledujete odesílatele",
|
||||||
|
"notifications.policy.filter_private_mentions_title": "Nevyžádané soukromé zmínky",
|
||||||
|
"notifications.policy.title": "Vyfiltrovat oznámení od…",
|
||||||
"notifications_permission_banner.enable": "Povolit oznámení na ploše",
|
"notifications_permission_banner.enable": "Povolit oznámení na ploše",
|
||||||
"notifications_permission_banner.how_to_control": "Chcete-li dostávat oznámení, i když nemáte Mastodon otevřený, povolte oznámení na ploše. Můžete si zvolit, o kterých druzích interakcí chcete být oznámením na ploše informování pod tlačítkem {icon} výše.",
|
"notifications_permission_banner.how_to_control": "Chcete-li dostávat oznámení, i když nemáte Mastodon otevřený, povolte oznámení na ploše. Můžete si zvolit, o kterých druzích interakcí chcete být oznámením na ploše informování pod tlačítkem {icon} výše.",
|
||||||
"notifications_permission_banner.title": "Nenechte si nic uniknout",
|
"notifications_permission_banner.title": "Nenechte si nic uniknout",
|
||||||
|
@ -638,9 +701,11 @@
|
||||||
"status.direct": "Soukromě zmínit @{name}",
|
"status.direct": "Soukromě zmínit @{name}",
|
||||||
"status.direct_indicator": "Soukromá zmínka",
|
"status.direct_indicator": "Soukromá zmínka",
|
||||||
"status.edit": "Upravit",
|
"status.edit": "Upravit",
|
||||||
|
"status.edited": "Naposledy upraveno {date}",
|
||||||
"status.edited_x_times": "Upraveno {count, plural, one {{count}krát} few {{count}krát} many {{count}krát} other {{count}krát}}",
|
"status.edited_x_times": "Upraveno {count, plural, one {{count}krát} few {{count}krát} many {{count}krát} other {{count}krát}}",
|
||||||
"status.embed": "Vložit na web",
|
"status.embed": "Vložit na web",
|
||||||
"status.favourite": "Oblíbit",
|
"status.favourite": "Oblíbit",
|
||||||
|
"status.favourites": "{count, plural, one {oblíbený} few {oblíbené} many {oblíbených} other {oblíbených}}",
|
||||||
"status.filter": "Filtrovat tento příspěvek",
|
"status.filter": "Filtrovat tento příspěvek",
|
||||||
"status.filtered": "Filtrováno",
|
"status.filtered": "Filtrováno",
|
||||||
"status.hide": "Skrýt příspěvek",
|
"status.hide": "Skrýt příspěvek",
|
||||||
|
@ -661,6 +726,7 @@
|
||||||
"status.reblog": "Boostnout",
|
"status.reblog": "Boostnout",
|
||||||
"status.reblog_private": "Boostnout s původní viditelností",
|
"status.reblog_private": "Boostnout s původní viditelností",
|
||||||
"status.reblogged_by": "Uživatel {name} boostnul",
|
"status.reblogged_by": "Uživatel {name} boostnul",
|
||||||
|
"status.reblogs": "{count, plural, one {boost} few {boosty} many {boostů} other {boostů}}",
|
||||||
"status.reblogs.empty": "Tento příspěvek ještě nikdo neboostnul. Pokud to někdo udělá, zobrazí se zde.",
|
"status.reblogs.empty": "Tento příspěvek ještě nikdo neboostnul. Pokud to někdo udělá, zobrazí se zde.",
|
||||||
"status.redraft": "Smazat a přepsat",
|
"status.redraft": "Smazat a přepsat",
|
||||||
"status.remove_bookmark": "Odstranit ze záložek",
|
"status.remove_bookmark": "Odstranit ze záložek",
|
||||||
|
|
|
@ -295,8 +295,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Vælg en eksisterende kategori eller opret en ny",
|
"filter_modal.select_filter.subtitle": "Vælg en eksisterende kategori eller opret en ny",
|
||||||
"filter_modal.select_filter.title": "Filtrér dette indlæg",
|
"filter_modal.select_filter.title": "Filtrér dette indlæg",
|
||||||
"filter_modal.title.status": "Filtrér et indlæg",
|
"filter_modal.title.status": "Filtrér et indlæg",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {omtale} other {omtaler}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Notifikationer fra {count, plural, =0 {ingen} one {én person} other {# personer}} du måske kender",
|
"filtered_notifications_banner.pending_requests": "Notifikationer fra {count, plural, =0 {ingen} one {én person} other {# personer}} du måske kender",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {privat omtale} other {private omtaler}}",
|
|
||||||
"filtered_notifications_banner.title": "Filtrerede notifikationer",
|
"filtered_notifications_banner.title": "Filtrerede notifikationer",
|
||||||
"firehose.all": "Alle",
|
"firehose.all": "Alle",
|
||||||
"firehose.local": "Denne server",
|
"firehose.local": "Denne server",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Einem vorhandenen Filter hinzufügen oder einen neuen erstellen",
|
"filter_modal.select_filter.subtitle": "Einem vorhandenen Filter hinzufügen oder einen neuen erstellen",
|
||||||
"filter_modal.select_filter.title": "Diesen Beitrag filtern",
|
"filter_modal.select_filter.title": "Diesen Beitrag filtern",
|
||||||
"filter_modal.title.status": "Beitrag per Filter ausblenden",
|
"filter_modal.title.status": "Beitrag per Filter ausblenden",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {Erwähnung} other {Erwähnungen}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Benachrichtigungen von {count, plural, =0 {keinem Profil, das du möglicherweise kennst} one {einem Profil, das du möglicherweise kennst} other {# Profilen, die du möglicherweise kennst}}",
|
"filtered_notifications_banner.pending_requests": "Benachrichtigungen von {count, plural, =0 {keinem Profil, das du möglicherweise kennst} one {einem Profil, das du möglicherweise kennst} other {# Profilen, die du möglicherweise kennst}}",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {private Erwähnung} other {private Erwähnungen}}",
|
|
||||||
"filtered_notifications_banner.title": "Gefilterte Benachrichtigungen",
|
"filtered_notifications_banner.title": "Gefilterte Benachrichtigungen",
|
||||||
"firehose.all": "Alles",
|
"firehose.all": "Alles",
|
||||||
"firehose.local": "Dieser Server",
|
"firehose.local": "Dieser Server",
|
||||||
|
|
|
@ -209,6 +209,27 @@
|
||||||
"dismissable_banner.explore_statuses": "These are posts from across the social web that are gaining traction today. Newer posts with more boosts and favourites are ranked higher.",
|
"dismissable_banner.explore_statuses": "These are posts from across the social web that are gaining traction today. Newer posts with more boosts and favourites are ranked higher.",
|
||||||
"dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralised network right now.",
|
"dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralised network right now.",
|
||||||
"dismissable_banner.public_timeline": "These are the most recent public posts from people on the social web that people on {domain} follow.",
|
"dismissable_banner.public_timeline": "These are the most recent public posts from people on the social web that people on {domain} follow.",
|
||||||
|
"domain_block_modal.block": "Block server",
|
||||||
|
"domain_block_modal.block_account_instead": "Block @{name} instead",
|
||||||
|
"domain_block_modal.they_can_interact_with_old_posts": "People from this server can interact with your old posts.",
|
||||||
|
"domain_block_modal.they_cant_follow": "Nobody from this server can follow you.",
|
||||||
|
"domain_block_modal.they_wont_know": "They won't know they've been blocked.",
|
||||||
|
"domain_block_modal.title": "Block domain?",
|
||||||
|
"domain_block_modal.you_will_lose_followers": "All your followers from this server will be removed.",
|
||||||
|
"domain_block_modal.you_wont_see_posts": "You won't see posts or notifications from users on this server.",
|
||||||
|
"domain_pill.activitypub_lets_connect": "It lets you connect and interact with people not just on Mastodon, but across different social apps too.",
|
||||||
|
"domain_pill.activitypub_like_language": "ActivityPub is like the language Mastodon speaks with other social networks.",
|
||||||
|
"domain_pill.server": "Server",
|
||||||
|
"domain_pill.their_handle": "Their handle:",
|
||||||
|
"domain_pill.their_server": "Their digital home, where all of their posts live.",
|
||||||
|
"domain_pill.their_username": "Their unique identifier on their server. It’s possible to find users with the same username on different servers.",
|
||||||
|
"domain_pill.username": "Username",
|
||||||
|
"domain_pill.whats_in_a_handle": "What's in a handle?",
|
||||||
|
"domain_pill.who_they_are": "Since handles say who someone is and where they are, you can interact with people across the social web of <button>ActivityPub-powered platforms</button>.",
|
||||||
|
"domain_pill.who_you_are": "Because your handle says who you are and where you are, people can interact with you across the social web of <button>ActivityPub-powered platforms</button>.",
|
||||||
|
"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.",
|
||||||
"embed.instructions": "Embed this post on your website by copying the code below.",
|
"embed.instructions": "Embed this post on your website by copying the code below.",
|
||||||
"embed.preview": "Here is what it will look like:",
|
"embed.preview": "Here is what it will look like:",
|
||||||
"emoji_button.activity": "Activity",
|
"emoji_button.activity": "Activity",
|
||||||
|
@ -245,6 +266,7 @@
|
||||||
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
|
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
|
||||||
"empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
|
"empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
|
||||||
"empty_column.mutes": "You haven't muted any users yet.",
|
"empty_column.mutes": "You haven't muted any users yet.",
|
||||||
|
"empty_column.notification_requests": "All clear! There is nothing here. When you receive new notifications, they will appear here according to your settings.",
|
||||||
"empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
|
"empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
|
||||||
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
|
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
|
||||||
"error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
|
"error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
|
||||||
|
@ -275,13 +297,22 @@
|
||||||
"filter_modal.select_filter.subtitle": "Use an existing category or create a new one",
|
"filter_modal.select_filter.subtitle": "Use an existing category or create a new one",
|
||||||
"filter_modal.select_filter.title": "Filter this post",
|
"filter_modal.select_filter.title": "Filter this post",
|
||||||
"filter_modal.title.status": "Filter a post",
|
"filter_modal.title.status": "Filter a post",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {mention} other {mentions}}",
|
||||||
|
"filtered_notifications_banner.pending_requests": "Notifications from {count, plural, =0 {no one} one {one person} other {# people}} you may know",
|
||||||
|
"filtered_notifications_banner.title": "Filtered notifications",
|
||||||
"firehose.all": "All",
|
"firehose.all": "All",
|
||||||
"firehose.local": "This server",
|
"firehose.local": "This server",
|
||||||
"firehose.remote": "Other servers",
|
"firehose.remote": "Other servers",
|
||||||
"follow_request.authorize": "Authorise",
|
"follow_request.authorize": "Authorise",
|
||||||
"follow_request.reject": "Reject",
|
"follow_request.reject": "Reject",
|
||||||
"follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
|
"follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
|
||||||
|
"follow_suggestions.curated_suggestion": "Staff pick",
|
||||||
"follow_suggestions.dismiss": "Don't show again",
|
"follow_suggestions.dismiss": "Don't show again",
|
||||||
|
"follow_suggestions.hints.featured": "This profile has been hand-picked by the {domain} team.",
|
||||||
|
"follow_suggestions.hints.friends_of_friends": "This profile is popular among the people you follow.",
|
||||||
|
"follow_suggestions.hints.most_followed": "This profile is one of the most followed on {domain}.",
|
||||||
|
"follow_suggestions.hints.most_interactions": "This profile has been recently getting a lot of attention on {domain}.",
|
||||||
|
"follow_suggestions.hints.similar_to_recently_followed": "This profile is similar to the profiles you have most recently followed.",
|
||||||
"follow_suggestions.personalized_suggestion": "Personalised suggestion",
|
"follow_suggestions.personalized_suggestion": "Personalised suggestion",
|
||||||
"follow_suggestions.popular_suggestion": "Popular suggestion",
|
"follow_suggestions.popular_suggestion": "Popular suggestion",
|
||||||
"follow_suggestions.view_all": "View all",
|
"follow_suggestions.view_all": "View all",
|
||||||
|
@ -397,6 +428,15 @@
|
||||||
"loading_indicator.label": "Loading…",
|
"loading_indicator.label": "Loading…",
|
||||||
"media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
|
"media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
|
||||||
"moved_to_account_banner.text": "Your account {disabledAccount} is currently disabled because you moved to {movedToAccount}.",
|
"moved_to_account_banner.text": "Your account {disabledAccount} is currently disabled because you moved to {movedToAccount}.",
|
||||||
|
"mute_modal.hide_from_notifications": "Hide from notifications",
|
||||||
|
"mute_modal.hide_options": "Hide options",
|
||||||
|
"mute_modal.indefinite": "Until I unmute them",
|
||||||
|
"mute_modal.show_options": "Show options",
|
||||||
|
"mute_modal.they_can_mention_and_follow": "They can mention and follow you, but you won't see them.",
|
||||||
|
"mute_modal.they_wont_know": "They won't know they've been muted.",
|
||||||
|
"mute_modal.title": "Mute user?",
|
||||||
|
"mute_modal.you_wont_see_mentions": "You won't see posts that mention them.",
|
||||||
|
"mute_modal.you_wont_see_posts": "They can still see your posts, but you won't see theirs.",
|
||||||
"navigation_bar.about": "About",
|
"navigation_bar.about": "About",
|
||||||
"navigation_bar.advanced_interface": "Open in advanced web interface",
|
"navigation_bar.advanced_interface": "Open in advanced web interface",
|
||||||
"navigation_bar.blocks": "Blocked users",
|
"navigation_bar.blocks": "Blocked users",
|
||||||
|
@ -432,14 +472,24 @@
|
||||||
"notification.own_poll": "Your poll has ended",
|
"notification.own_poll": "Your poll has ended",
|
||||||
"notification.poll": "A poll you have voted in has ended",
|
"notification.poll": "A poll you have voted in has ended",
|
||||||
"notification.reblog": "{name} boosted your status",
|
"notification.reblog": "{name} boosted your status",
|
||||||
|
"notification.relationships_severance_event": "Lost connections with {name}",
|
||||||
|
"notification.relationships_severance_event.account_suspension": "An admin from {from} has suspended {target}, which means you can no longer receive updates from them or interact with them.",
|
||||||
|
"notification.relationships_severance_event.domain_block": "An admin from {from} has blocked {target}, including {followersCount} of your followers and {followingCount, plural, one {# account} other {# accounts}} you follow.",
|
||||||
|
"notification.relationships_severance_event.learn_more": "Learn more",
|
||||||
|
"notification.relationships_severance_event.user_domain_block": "You have blocked {target}, removing {followersCount} of your followers and {followingCount, plural, one {# account} other {# accounts}} you follow.",
|
||||||
"notification.status": "{name} just posted",
|
"notification.status": "{name} just posted",
|
||||||
"notification.update": "{name} edited a post",
|
"notification.update": "{name} edited a post",
|
||||||
|
"notification_requests.accept": "Accept",
|
||||||
|
"notification_requests.dismiss": "Dismiss",
|
||||||
|
"notification_requests.notifications_from": "Notifications from {name}",
|
||||||
|
"notification_requests.title": "Filtered notifications",
|
||||||
"notifications.clear": "Clear notifications",
|
"notifications.clear": "Clear notifications",
|
||||||
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
|
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
|
||||||
"notifications.column_settings.admin.report": "New reports:",
|
"notifications.column_settings.admin.report": "New reports:",
|
||||||
"notifications.column_settings.admin.sign_up": "New sign-ups:",
|
"notifications.column_settings.admin.sign_up": "New sign-ups:",
|
||||||
"notifications.column_settings.alert": "Desktop notifications",
|
"notifications.column_settings.alert": "Desktop notifications",
|
||||||
"notifications.column_settings.favourite": "Favourites:",
|
"notifications.column_settings.favourite": "Favourites:",
|
||||||
|
"notifications.column_settings.filter_bar.advanced": "Display all categories",
|
||||||
"notifications.column_settings.filter_bar.category": "Quick filter bar",
|
"notifications.column_settings.filter_bar.category": "Quick filter bar",
|
||||||
"notifications.column_settings.follow": "New followers:",
|
"notifications.column_settings.follow": "New followers:",
|
||||||
"notifications.column_settings.follow_request": "New follow requests:",
|
"notifications.column_settings.follow_request": "New follow requests:",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva",
|
"filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva",
|
||||||
"filter_modal.select_filter.title": "Filtrar este mensaje",
|
"filter_modal.select_filter.title": "Filtrar este mensaje",
|
||||||
"filter_modal.title.status": "Filtrar un mensaje",
|
"filter_modal.title.status": "Filtrar un mensaje",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {mención} other {menciones}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Notificaciones de {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer",
|
"filtered_notifications_banner.pending_requests": "Notificaciones de {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {mención privada} other {menciones privadas}}",
|
|
||||||
"filtered_notifications_banner.title": "Notificaciones filtradas",
|
"filtered_notifications_banner.title": "Notificaciones filtradas",
|
||||||
"firehose.all": "Todos",
|
"firehose.all": "Todos",
|
||||||
"firehose.local": "Este servidor",
|
"firehose.local": "Este servidor",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva",
|
"filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva",
|
||||||
"filter_modal.select_filter.title": "Filtrar esta publicación",
|
"filter_modal.select_filter.title": "Filtrar esta publicación",
|
||||||
"filter_modal.title.status": "Filtrar una publicación",
|
"filter_modal.title.status": "Filtrar una publicación",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {mención} other {menciones}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Notificaciones de {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer",
|
"filtered_notifications_banner.pending_requests": "Notificaciones de {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {mención privada} other {menciones privadas}}",
|
|
||||||
"filtered_notifications_banner.title": "Notificaciones filtradas",
|
"filtered_notifications_banner.title": "Notificaciones filtradas",
|
||||||
"firehose.all": "Todas",
|
"firehose.all": "Todas",
|
||||||
"firehose.local": "Este servidor",
|
"firehose.local": "Este servidor",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva",
|
"filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva",
|
||||||
"filter_modal.select_filter.title": "Filtrar esta publicación",
|
"filter_modal.select_filter.title": "Filtrar esta publicación",
|
||||||
"filter_modal.title.status": "Filtrar una publicación",
|
"filter_modal.title.status": "Filtrar una publicación",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {mención} other {menciones}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Notificaciones de {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer",
|
"filtered_notifications_banner.pending_requests": "Notificaciones de {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {mención privada} other {menciones privadas}}",
|
|
||||||
"filtered_notifications_banner.title": "Notificaciones filtradas",
|
"filtered_notifications_banner.title": "Notificaciones filtradas",
|
||||||
"firehose.all": "Todas",
|
"firehose.all": "Todas",
|
||||||
"firehose.local": "Este servidor",
|
"firehose.local": "Este servidor",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Filtreeri seda postitust",
|
"filter_modal.select_filter.title": "Filtreeri seda postitust",
|
||||||
"filter_modal.title.status": "Postituse filtreerimine",
|
"filter_modal.title.status": "Postituse filtreerimine",
|
||||||
"filtered_notifications_banner.pending_requests": "Teateid {count, plural, =0 {mitte üheltki} one {ühelt} other {#}} inimeselt, keda võid teada",
|
"filtered_notifications_banner.pending_requests": "Teateid {count, plural, =0 {mitte üheltki} one {ühelt} other {#}} inimeselt, keda võid teada",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {privaatne teavitus} other {privaatsed teavitused}}",
|
|
||||||
"filtered_notifications_banner.title": "Filtreeritud teavitused",
|
"filtered_notifications_banner.title": "Filtreeritud teavitused",
|
||||||
"firehose.all": "Kõik",
|
"firehose.all": "Kõik",
|
||||||
"firehose.local": "See server",
|
"firehose.local": "See server",
|
||||||
|
|
|
@ -297,6 +297,7 @@
|
||||||
"filter_modal.select_filter.subtitle": "Hautatu lehendik dagoen kategoria bat edo sortu berria",
|
"filter_modal.select_filter.subtitle": "Hautatu lehendik dagoen kategoria bat edo sortu berria",
|
||||||
"filter_modal.select_filter.title": "Iragazi bidalketa hau",
|
"filter_modal.select_filter.title": "Iragazi bidalketa hau",
|
||||||
"filter_modal.title.status": "Iragazi bidalketa bat",
|
"filter_modal.title.status": "Iragazi bidalketa bat",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {aipamen} other {aipamen}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Ezagutu {count, plural, =0 {dezakezun inoren} one {dezakezun pertsona baten} other {ditzakezun # pertsonen}} jakinarazpenak",
|
"filtered_notifications_banner.pending_requests": "Ezagutu {count, plural, =0 {dezakezun inoren} one {dezakezun pertsona baten} other {ditzakezun # pertsonen}} jakinarazpenak",
|
||||||
"filtered_notifications_banner.title": "Iragazitako jakinarazpenak",
|
"filtered_notifications_banner.title": "Iragazitako jakinarazpenak",
|
||||||
"firehose.all": "Guztiak",
|
"firehose.all": "Guztiak",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Käytä olemassa olevaa luokkaa tai luo uusi",
|
"filter_modal.select_filter.subtitle": "Käytä olemassa olevaa luokkaa tai luo uusi",
|
||||||
"filter_modal.select_filter.title": "Suodata tämä julkaisu",
|
"filter_modal.select_filter.title": "Suodata tämä julkaisu",
|
||||||
"filter_modal.title.status": "Suodata julkaisu",
|
"filter_modal.title.status": "Suodata julkaisu",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {maininta} other {mainintaa}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Ilmoitukset {count, plural, =0 {ei keltään} one {yhdeltä henkilöltä} other {# henkilöltä}}, jonka saatat tuntea",
|
"filtered_notifications_banner.pending_requests": "Ilmoitukset {count, plural, =0 {ei keltään} one {yhdeltä henkilöltä} other {# henkilöltä}}, jonka saatat tuntea",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {yksityismaininta} other {yksityismainintaa}}",
|
|
||||||
"filtered_notifications_banner.title": "Suodatetut ilmoitukset",
|
"filtered_notifications_banner.title": "Suodatetut ilmoitukset",
|
||||||
"firehose.all": "Kaikki",
|
"firehose.all": "Kaikki",
|
||||||
"firehose.local": "Tämä palvelin",
|
"firehose.local": "Tämä palvelin",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Brúka ein verandi bólk ella skapa ein nýggjan",
|
"filter_modal.select_filter.subtitle": "Brúka ein verandi bólk ella skapa ein nýggjan",
|
||||||
"filter_modal.select_filter.title": "Filtrera hendan postin",
|
"filter_modal.select_filter.title": "Filtrera hendan postin",
|
||||||
"filter_modal.title.status": "Filtrera ein post",
|
"filter_modal.title.status": "Filtrera ein post",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {umrøða} other {umrøður}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Fráboðanir frá {count, plural, =0 {ongum} one {einum persóni} other {# persónum}}, sum tú kanska kennir",
|
"filtered_notifications_banner.pending_requests": "Fráboðanir frá {count, plural, =0 {ongum} one {einum persóni} other {# persónum}}, sum tú kanska kennir",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {privat umrøða} other {privatar umrøður}}",
|
|
||||||
"filtered_notifications_banner.title": "Sáldaðar fráboðanir",
|
"filtered_notifications_banner.title": "Sáldaðar fráboðanir",
|
||||||
"firehose.all": "Allar",
|
"firehose.all": "Allar",
|
||||||
"firehose.local": "Hesin ambætarin",
|
"firehose.local": "Hesin ambætarin",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Filtrer cette publication",
|
"filter_modal.select_filter.title": "Filtrer cette publication",
|
||||||
"filter_modal.title.status": "Filtrer une publication",
|
"filter_modal.title.status": "Filtrer une publication",
|
||||||
"filtered_notifications_banner.pending_requests": "Notifications {count, plural, =0 {de personne} one {d’une personne} other {de # personnes}} que vous pouvez connaitre",
|
"filtered_notifications_banner.pending_requests": "Notifications {count, plural, =0 {de personne} one {d’une personne} other {de # personnes}} que vous pouvez connaitre",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {mention privée} other {mentions privées}}",
|
|
||||||
"filtered_notifications_banner.title": "Notifications filtrées",
|
"filtered_notifications_banner.title": "Notifications filtrées",
|
||||||
"firehose.all": "Tout",
|
"firehose.all": "Tout",
|
||||||
"firehose.local": "Ce serveur",
|
"firehose.local": "Ce serveur",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Filtrer ce message",
|
"filter_modal.select_filter.title": "Filtrer ce message",
|
||||||
"filter_modal.title.status": "Filtrer un message",
|
"filter_modal.title.status": "Filtrer un message",
|
||||||
"filtered_notifications_banner.pending_requests": "Notifications {count, plural, =0 {de personne} one {d’une personne} other {de # personnes}} que vous pouvez connaitre",
|
"filtered_notifications_banner.pending_requests": "Notifications {count, plural, =0 {de personne} one {d’une personne} other {de # personnes}} que vous pouvez connaitre",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {mention privée} other {mentions privées}}",
|
|
||||||
"filtered_notifications_banner.title": "Notifications filtrées",
|
"filtered_notifications_banner.title": "Notifications filtrées",
|
||||||
"firehose.all": "Tout",
|
"firehose.all": "Tout",
|
||||||
"firehose.local": "Ce serveur",
|
"firehose.local": "Ce serveur",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Criathraich am post seo",
|
"filter_modal.select_filter.title": "Criathraich am post seo",
|
||||||
"filter_modal.title.status": "Criathraich post",
|
"filter_modal.title.status": "Criathraich post",
|
||||||
"filtered_notifications_banner.pending_requests": "{count, plural, =0 {Chan eil brath ann o dhaoine} one {Tha brathan ann o # neach} two {Tha brathan ann o # neach} few {Tha brathan ann o # daoine} other {Tha brathan ann o # duine}} air a bheil thu eòlach ’s dòcha",
|
"filtered_notifications_banner.pending_requests": "{count, plural, =0 {Chan eil brath ann o dhaoine} one {Tha brathan ann o # neach} two {Tha brathan ann o # neach} few {Tha brathan ann o # daoine} other {Tha brathan ann o # duine}} air a bheil thu eòlach ’s dòcha",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {iomradh prìobhaideach} two {iomradh prìobhaideach} few {iomraidhean prìobhaideach} other {iomradh prìobhaideach}}",
|
|
||||||
"filtered_notifications_banner.title": "Brathan criathraichte",
|
"filtered_notifications_banner.title": "Brathan criathraichte",
|
||||||
"firehose.all": "Na h-uile",
|
"firehose.all": "Na h-uile",
|
||||||
"firehose.local": "Am frithealaiche seo",
|
"firehose.local": "Am frithealaiche seo",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Usar unha categoría existente ou crear unha nova",
|
"filter_modal.select_filter.subtitle": "Usar unha categoría existente ou crear unha nova",
|
||||||
"filter_modal.select_filter.title": "Filtrar esta publicación",
|
"filter_modal.select_filter.title": "Filtrar esta publicación",
|
||||||
"filter_modal.title.status": "Filtrar unha publicación",
|
"filter_modal.title.status": "Filtrar unha publicación",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {mención} other {mencións}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Notificacións de {count, plural, =0 {ninguén} one {unha persoa} other {# persoas}} que poderías coñecer",
|
"filtered_notifications_banner.pending_requests": "Notificacións de {count, plural, =0 {ninguén} one {unha persoa} other {# persoas}} que poderías coñecer",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {mención privada} other {mencións privadas}}",
|
|
||||||
"filtered_notifications_banner.title": "Notificacións filtradas",
|
"filtered_notifications_banner.title": "Notificacións filtradas",
|
||||||
"firehose.all": "Todo",
|
"firehose.all": "Todo",
|
||||||
"firehose.local": "Este servidor",
|
"firehose.local": "Este servidor",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "שימוש בקטגורייה קיימת או יצירת אחת חדשה",
|
"filter_modal.select_filter.subtitle": "שימוש בקטגורייה קיימת או יצירת אחת חדשה",
|
||||||
"filter_modal.select_filter.title": "סינון ההודעה הזו",
|
"filter_modal.select_filter.title": "סינון ההודעה הזו",
|
||||||
"filter_modal.title.status": "סנן הודעה",
|
"filter_modal.title.status": "סנן הודעה",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {איזכור} other {איזכורים} two {איזכוריים}}",
|
||||||
"filtered_notifications_banner.pending_requests": "{count, plural,=0 {אין התראות ממשתמשים ה}one {התראה אחת ממישהו/מישהי ה}two {יש התראותיים ממשתמשים }other {יש # התראות ממשתמשים }}מוכרים לך",
|
"filtered_notifications_banner.pending_requests": "{count, plural,=0 {אין התראות ממשתמשים ה}one {התראה אחת ממישהו/מישהי ה}two {יש התראותיים ממשתמשים }other {יש # התראות ממשתמשים }}מוכרים לך",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {איזכור פרטי} other {איזכורים פרטיים}}",
|
|
||||||
"filtered_notifications_banner.title": "התראות מסוננות",
|
"filtered_notifications_banner.title": "התראות מסוננות",
|
||||||
"firehose.all": "הכל",
|
"firehose.all": "הכל",
|
||||||
"firehose.local": "שרת זה",
|
"firehose.local": "שרת זה",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Válassz egy meglévő kategóriát, vagy hozz létre egy újat",
|
"filter_modal.select_filter.subtitle": "Válassz egy meglévő kategóriát, vagy hozz létre egy újat",
|
||||||
"filter_modal.select_filter.title": "E bejegyzés szűrése",
|
"filter_modal.select_filter.title": "E bejegyzés szűrése",
|
||||||
"filter_modal.title.status": "Egy bejegyzés szűrése",
|
"filter_modal.title.status": "Egy bejegyzés szűrése",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {említés} other {említés}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Értesítések {count, plural, =0 {nincsenek} one {egy valósztínűleg ismerős személytől} other {# valószínűleg ismerős személytől}}",
|
"filtered_notifications_banner.pending_requests": "Értesítések {count, plural, =0 {nincsenek} one {egy valósztínűleg ismerős személytől} other {# valószínűleg ismerős személytől}}",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {privát említés} other {privát említés}}",
|
|
||||||
"filtered_notifications_banner.title": "Szűrt értesítések",
|
"filtered_notifications_banner.title": "Szűrt értesítések",
|
||||||
"firehose.all": "Összes",
|
"firehose.all": "Összes",
|
||||||
"firehose.local": "Ez a kiszolgáló",
|
"firehose.local": "Ez a kiszolgáló",
|
||||||
|
|
|
@ -42,6 +42,7 @@
|
||||||
"account.go_to_profile": "Vader al profilo",
|
"account.go_to_profile": "Vader al profilo",
|
||||||
"account.hide_reblogs": "Celar impulsos de @{name}",
|
"account.hide_reblogs": "Celar impulsos de @{name}",
|
||||||
"account.in_memoriam": "In memoriam.",
|
"account.in_memoriam": "In memoriam.",
|
||||||
|
"account.joined_short": "Inscribite",
|
||||||
"account.languages": "Cambiar le linguas subscribite",
|
"account.languages": "Cambiar le linguas subscribite",
|
||||||
"account.link_verified_on": "Le proprietate de iste ligamine ha essite verificate le {date}",
|
"account.link_verified_on": "Le proprietate de iste ligamine ha essite verificate le {date}",
|
||||||
"account.locked_info": "Le stato de confidentialitate de iste conto es definite como serrate. Le proprietario determina manualmente qui pote sequer le.",
|
"account.locked_info": "Le stato de confidentialitate de iste conto es definite como serrate. Le proprietario determina manualmente qui pote sequer le.",
|
||||||
|
@ -52,10 +53,12 @@
|
||||||
"account.mute_notifications_short": "Silentiar le notificationes",
|
"account.mute_notifications_short": "Silentiar le notificationes",
|
||||||
"account.mute_short": "Silentiar",
|
"account.mute_short": "Silentiar",
|
||||||
"account.muted": "Silentiate",
|
"account.muted": "Silentiate",
|
||||||
|
"account.mutual": "Mutue",
|
||||||
"account.no_bio": "Nulle description fornite.",
|
"account.no_bio": "Nulle description fornite.",
|
||||||
"account.open_original_page": "Aperir le pagina original",
|
"account.open_original_page": "Aperir le pagina original",
|
||||||
"account.posts": "Messages",
|
"account.posts": "Messages",
|
||||||
"account.posts_with_replies": "Messages e responsas",
|
"account.posts_with_replies": "Messages e responsas",
|
||||||
|
"account.report": "Signalar @{name}",
|
||||||
"account.requested": "Attendente le approbation. Clicca pro cancellar le requesta de sequer",
|
"account.requested": "Attendente le approbation. Clicca pro cancellar le requesta de sequer",
|
||||||
"account.requested_follow": "{name} ha requestate de sequer te",
|
"account.requested_follow": "{name} ha requestate de sequer te",
|
||||||
"account.share": "Compartir profilo de @{name}",
|
"account.share": "Compartir profilo de @{name}",
|
||||||
|
@ -70,29 +73,48 @@
|
||||||
"account.unmute_notifications_short": "Non plus silentiar le notificationes",
|
"account.unmute_notifications_short": "Non plus silentiar le notificationes",
|
||||||
"account.unmute_short": "Non plus silentiar",
|
"account.unmute_short": "Non plus silentiar",
|
||||||
"account_note.placeholder": "Clicca pro adder un nota",
|
"account_note.placeholder": "Clicca pro adder un nota",
|
||||||
|
"admin.dashboard.daily_retention": "Retention de usatores per die post inscription",
|
||||||
|
"admin.dashboard.monthly_retention": "Retention de usatores per mense post inscription",
|
||||||
"admin.dashboard.retention.average": "Media",
|
"admin.dashboard.retention.average": "Media",
|
||||||
|
"admin.dashboard.retention.cohort": "Mense de inscription",
|
||||||
"admin.dashboard.retention.cohort_size": "Nove usatores",
|
"admin.dashboard.retention.cohort_size": "Nove usatores",
|
||||||
|
"admin.impact_report.instance_accounts": "Numero de contos que isto delerea",
|
||||||
"admin.impact_report.instance_followers": "Sequitores que nostre usatores perderea",
|
"admin.impact_report.instance_followers": "Sequitores que nostre usatores perderea",
|
||||||
"admin.impact_report.instance_follows": "Sequitores que lor usatores perderea",
|
"admin.impact_report.instance_follows": "Sequitores que lor usatores perderea",
|
||||||
|
"admin.impact_report.title": "Summario de impacto",
|
||||||
"alert.rate_limited.message": "Per favor retenta post {retry_time, time, medium}.",
|
"alert.rate_limited.message": "Per favor retenta post {retry_time, time, medium}.",
|
||||||
|
"alert.rate_limited.title": "Excesso de requestas",
|
||||||
"alert.unexpected.message": "Un error inexpectate ha occurrite.",
|
"alert.unexpected.message": "Un error inexpectate ha occurrite.",
|
||||||
|
"alert.unexpected.title": "Ups!",
|
||||||
"announcement.announcement": "Annuncio",
|
"announcement.announcement": "Annuncio",
|
||||||
|
"attachments_list.unprocessed": "(non processate)",
|
||||||
"audio.hide": "Celar audio",
|
"audio.hide": "Celar audio",
|
||||||
"block_modal.remote_users_caveat": "Nos demandera al servitor {domain} de respectar tu decision. Nonobstante, le conformitate non es garantite perque alcun servitores pote tractar le blocadas de maniera differente. Le messages public pote esser totevia visibile pro le usatores non authenticate.",
|
"block_modal.remote_users_caveat": "Nos demandera al servitor {domain} de respectar tu decision. Nonobstante, le conformitate non es garantite perque alcun servitores pote tractar le blocadas de maniera differente. Le messages public pote esser totevia visibile pro le usatores non authenticate.",
|
||||||
"block_modal.show_less": "Monstrar minus",
|
"block_modal.show_less": "Monstrar minus",
|
||||||
"block_modal.show_more": "Monstrar plus",
|
"block_modal.show_more": "Monstrar plus",
|
||||||
|
"block_modal.they_cant_mention": "Le persona non pote mentionar te o sequer te.",
|
||||||
"block_modal.they_cant_see_posts": "Iste persona non potera vider tu messages e tu non videra le sues.",
|
"block_modal.they_cant_see_posts": "Iste persona non potera vider tu messages e tu non videra le sues.",
|
||||||
|
"block_modal.they_will_know": "Le persona pote saper de esser blocate.",
|
||||||
"block_modal.title": "Blocar usator?",
|
"block_modal.title": "Blocar usator?",
|
||||||
"block_modal.you_wont_see_mentions": "Tu non videra le messages que mentiona iste persona.",
|
"block_modal.you_wont_see_mentions": "Tu non videra le messages que mentiona iste persona.",
|
||||||
"boost_modal.combo": "Tu pote premer {combo} pro saltar isto le proxime vice",
|
"boost_modal.combo": "Tu pote premer {combo} pro saltar isto le proxime vice",
|
||||||
|
"bundle_column_error.copy_stacktrace": "Copiar reporto de error",
|
||||||
|
"bundle_column_error.error.body": "Le pagina requestate non pote esser visualisate. Pote esser a causa de un defecto in nostre codice o de un problema de compatibilitate del navigator.",
|
||||||
"bundle_column_error.error.title": "Oh, no!",
|
"bundle_column_error.error.title": "Oh, no!",
|
||||||
|
"bundle_column_error.network.body": "Un error ha occurrite durante le cargamento de iste pagina. Isto pote esser a causa de un problema temporari con tu connexion a internet o con iste servitor.",
|
||||||
"bundle_column_error.network.title": "Error de rete",
|
"bundle_column_error.network.title": "Error de rete",
|
||||||
"bundle_column_error.retry": "Tentar novemente",
|
"bundle_column_error.retry": "Tentar novemente",
|
||||||
"bundle_column_error.return": "Retornar al initio",
|
"bundle_column_error.return": "Retornar al initio",
|
||||||
|
"bundle_column_error.routing.body": "Le pagina requestate non pote esser trovate. Es tu secur que le URL in le barra de adresse es correcte?",
|
||||||
|
"bundle_column_error.routing.title": "404",
|
||||||
"bundle_modal_error.close": "Clauder",
|
"bundle_modal_error.close": "Clauder",
|
||||||
|
"bundle_modal_error.message": "Un error ha occurrite durante le cargamento de iste componente.",
|
||||||
"bundle_modal_error.retry": "Tentar novemente",
|
"bundle_modal_error.retry": "Tentar novemente",
|
||||||
|
"closed_registrations.other_server_instructions": "Perque Mastodon es decentralisate, tu pote crear un conto sur un altere servitor e totevia interager con iste servitor.",
|
||||||
"closed_registrations_modal.description": "Crear un conto in {domain} actualmente non es possibile, ma considera que non es necessari haber un conto specificamente sur {domain} pro usar Mastodon.",
|
"closed_registrations_modal.description": "Crear un conto in {domain} actualmente non es possibile, ma considera que non es necessari haber un conto specificamente sur {domain} pro usar Mastodon.",
|
||||||
"closed_registrations_modal.find_another_server": "Cercar un altere servitor",
|
"closed_registrations_modal.find_another_server": "Cercar un altere servitor",
|
||||||
|
"closed_registrations_modal.preamble": "Mastodon es decentralisate, dunque, non importa ubi tu crea tu conto, tu pote sequer e communicar con omne persona sur iste servitor. Tu pote mesmo hospitar tu proprie servitor!",
|
||||||
|
"closed_registrations_modal.title": "Crear un conto sur Mastodon",
|
||||||
"column.about": "A proposito",
|
"column.about": "A proposito",
|
||||||
"column.blocks": "Usatores blocate",
|
"column.blocks": "Usatores blocate",
|
||||||
"column.bookmarks": "Marcapaginas",
|
"column.bookmarks": "Marcapaginas",
|
||||||
|
@ -102,6 +124,7 @@
|
||||||
"column.domain_blocks": "Dominios blocate",
|
"column.domain_blocks": "Dominios blocate",
|
||||||
"column.favourites": "Favoritos",
|
"column.favourites": "Favoritos",
|
||||||
"column.firehose": "Fluxos in directo",
|
"column.firehose": "Fluxos in directo",
|
||||||
|
"column.follow_requests": "Requestas de sequimento",
|
||||||
"column.home": "Initio",
|
"column.home": "Initio",
|
||||||
"column.lists": "Listas",
|
"column.lists": "Listas",
|
||||||
"column.mutes": "Usatores silentiate",
|
"column.mutes": "Usatores silentiate",
|
||||||
|
@ -112,10 +135,13 @@
|
||||||
"column_header.hide_settings": "Celar le parametros",
|
"column_header.hide_settings": "Celar le parametros",
|
||||||
"column_header.moveLeft_settings": "Mover columna al sinistra",
|
"column_header.moveLeft_settings": "Mover columna al sinistra",
|
||||||
"column_header.moveRight_settings": "Mover columna al dextra",
|
"column_header.moveRight_settings": "Mover columna al dextra",
|
||||||
|
"column_header.pin": "Fixar",
|
||||||
"column_header.show_settings": "Monstrar le parametros",
|
"column_header.show_settings": "Monstrar le parametros",
|
||||||
|
"column_header.unpin": "Disfixar",
|
||||||
"column_subheading.settings": "Parametros",
|
"column_subheading.settings": "Parametros",
|
||||||
"community.column_settings.local_only": "Solmente local",
|
"community.column_settings.local_only": "Solmente local",
|
||||||
"community.column_settings.media_only": "Solmente multimedia",
|
"community.column_settings.media_only": "Solmente multimedia",
|
||||||
|
"community.column_settings.remote_only": "A distantia solmente",
|
||||||
"compose.language.change": "Cambiar le lingua",
|
"compose.language.change": "Cambiar le lingua",
|
||||||
"compose.language.search": "Cercar linguas...",
|
"compose.language.search": "Cercar linguas...",
|
||||||
"compose.published.body": "Message publicate.",
|
"compose.published.body": "Message publicate.",
|
||||||
|
@ -126,6 +152,7 @@
|
||||||
"compose_form.hashtag_warning": "Iste message non essera listate sub alcun hashtag perque illo non es public. Solmente le messages public pote esser cercate per hashtag.",
|
"compose_form.hashtag_warning": "Iste message non essera listate sub alcun hashtag perque illo non es public. Solmente le messages public pote esser cercate per hashtag.",
|
||||||
"compose_form.lock_disclaimer": "Tu conto non es {locked}. Quicunque pote sequer te pro vider tu messages solo pro sequitores.",
|
"compose_form.lock_disclaimer": "Tu conto non es {locked}. Quicunque pote sequer te pro vider tu messages solo pro sequitores.",
|
||||||
"compose_form.lock_disclaimer.lock": "serrate",
|
"compose_form.lock_disclaimer.lock": "serrate",
|
||||||
|
"compose_form.placeholder": "Que ha tu in mente?",
|
||||||
"compose_form.poll.duration": "Durata del sondage",
|
"compose_form.poll.duration": "Durata del sondage",
|
||||||
"compose_form.poll.multiple": "Selection multiple",
|
"compose_form.poll.multiple": "Selection multiple",
|
||||||
"compose_form.poll.option_placeholder": "Option {number}",
|
"compose_form.poll.option_placeholder": "Option {number}",
|
||||||
|
@ -148,13 +175,19 @@
|
||||||
"confirmations.delete.message": "Es tu secur que tu vole deler iste message?",
|
"confirmations.delete.message": "Es tu secur que tu vole deler iste message?",
|
||||||
"confirmations.delete_list.confirm": "Deler",
|
"confirmations.delete_list.confirm": "Deler",
|
||||||
"confirmations.delete_list.message": "Es tu secur que tu vole deler permanentemente iste lista?",
|
"confirmations.delete_list.message": "Es tu secur que tu vole deler permanentemente iste lista?",
|
||||||
|
"confirmations.discard_edit_media.confirm": "Abandonar",
|
||||||
|
"confirmations.discard_edit_media.message": "Tu ha cambiamentos non salvate in le description o previsualisation del objecto multimedial. Abandonar los?",
|
||||||
"confirmations.domain_block.confirm": "Blocar le servitor",
|
"confirmations.domain_block.confirm": "Blocar le servitor",
|
||||||
|
"confirmations.domain_block.message": "Es tu realmente, absolutemente secur de voler blocar tote le dominio {domain}? In le major parte del casos es preferibile blocar o silentiar alcun personas specific. Si tu bloca tote le dominio, tu non videra alcun contento de ille dominio in alcun chronologia public o in tu notificationes, e tu sequitores de ille dominio essera removite.",
|
||||||
"confirmations.edit.confirm": "Modificar",
|
"confirmations.edit.confirm": "Modificar",
|
||||||
|
"confirmations.edit.message": "Si tu modifica isto ora, le message in curso de composition essera perdite. Es tu secur de voler continuar?",
|
||||||
"confirmations.logout.confirm": "Clauder session",
|
"confirmations.logout.confirm": "Clauder session",
|
||||||
"confirmations.logout.message": "Es tu secur que tu vole clauder le session?",
|
"confirmations.logout.message": "Es tu secur que tu vole clauder le session?",
|
||||||
"confirmations.mute.confirm": "Silentiar",
|
"confirmations.mute.confirm": "Silentiar",
|
||||||
|
"confirmations.redraft.confirm": "Deler e rescriber",
|
||||||
"confirmations.redraft.message": "Es tu secur de voler deler iste message e rescriber lo? Le favorites e le impulsos essera perdite, e le responsas al message original essera orphanate.",
|
"confirmations.redraft.message": "Es tu secur de voler deler iste message e rescriber lo? Le favorites e le impulsos essera perdite, e le responsas al message original essera orphanate.",
|
||||||
"confirmations.reply.confirm": "Responder",
|
"confirmations.reply.confirm": "Responder",
|
||||||
|
"confirmations.reply.message": "Si tu responde ora, le message in curso de composition essera perdite. Es tu secur de voler continuar?",
|
||||||
"confirmations.unfollow.confirm": "Non plus sequer",
|
"confirmations.unfollow.confirm": "Non plus sequer",
|
||||||
"confirmations.unfollow.message": "Es tu secur que tu vole cessar de sequer {name}?",
|
"confirmations.unfollow.message": "Es tu secur que tu vole cessar de sequer {name}?",
|
||||||
"conversation.delete": "Deler conversation",
|
"conversation.delete": "Deler conversation",
|
||||||
|
@ -174,6 +207,7 @@
|
||||||
"dismissable_banner.dismiss": "Dimitter",
|
"dismissable_banner.dismiss": "Dimitter",
|
||||||
"dismissable_banner.explore_links": "Istes es le articulos de novas que se condivide le plus sur le rete social hodie. Le articulos de novas le plus recente, publicate per plus personas differente, se classifica plus in alto.",
|
"dismissable_banner.explore_links": "Istes es le articulos de novas que se condivide le plus sur le rete social hodie. Le articulos de novas le plus recente, publicate per plus personas differente, se classifica plus in alto.",
|
||||||
"dismissable_banner.explore_statuses": "Ecce le messages de tote le rete social que gania popularitate hodie. Le messages plus nove con plus impulsos e favorites se classifica plus in alto.",
|
"dismissable_banner.explore_statuses": "Ecce le messages de tote le rete social que gania popularitate hodie. Le messages plus nove con plus impulsos e favorites se classifica plus in alto.",
|
||||||
|
"dismissable_banner.explore_tags": "Ecce le hashtags que gania popularitate sur le rete social hodie. Le hashtags usate per plus personas differente se classifica plus in alto.",
|
||||||
"dismissable_banner.public_timeline": "Istes es le messages public le plus recente del personas sur le rete social que le gente sur {domain} seque.",
|
"dismissable_banner.public_timeline": "Istes es le messages public le plus recente del personas sur le rete social que le gente sur {domain} seque.",
|
||||||
"domain_block_modal.block": "Blocar le servitor",
|
"domain_block_modal.block": "Blocar le servitor",
|
||||||
"domain_block_modal.block_account_instead": "Blocar @{name} in su loco",
|
"domain_block_modal.block_account_instead": "Blocar @{name} in su loco",
|
||||||
|
@ -183,10 +217,19 @@
|
||||||
"domain_block_modal.title": "Blocar dominio?",
|
"domain_block_modal.title": "Blocar dominio?",
|
||||||
"domain_block_modal.you_will_lose_followers": "Omne sequitores ab iste servitor essera removite.",
|
"domain_block_modal.you_will_lose_followers": "Omne sequitores ab iste servitor essera removite.",
|
||||||
"domain_block_modal.you_wont_see_posts": "Tu non videra messages e notificationes ab usatores sur iste servitor.",
|
"domain_block_modal.you_wont_see_posts": "Tu non videra messages e notificationes ab usatores sur iste servitor.",
|
||||||
|
"domain_pill.activitypub_lets_connect": "Illo te permitte connecter e interager con personas non solmente sur Mastodon, ma tamben sur altere applicationes social.",
|
||||||
|
"domain_pill.activitypub_like_language": "ActivityPub es como le linguage commun que Mastodon parla con altere retes social.",
|
||||||
"domain_pill.server": "Servitor",
|
"domain_pill.server": "Servitor",
|
||||||
|
"domain_pill.their_handle": "Su pseudonymo:",
|
||||||
"domain_pill.their_server": "Su casa digital, ubi vive tote su messages.",
|
"domain_pill.their_server": "Su casa digital, ubi vive tote su messages.",
|
||||||
|
"domain_pill.their_username": "Su identificator unic sur su servitor. Es possibile trovar usatores con le mesme nomine de usator sur servitores differente.",
|
||||||
"domain_pill.username": "Nomine de usator",
|
"domain_pill.username": "Nomine de usator",
|
||||||
|
"domain_pill.whats_in_a_handle": "Que significa un pseudonymo?",
|
||||||
|
"domain_pill.who_they_are": "Un pseudonymo indica qui un persona es e ubi se trova, de maniera que tu pote interager con personas sur tote le rete social de <button>platteformas basate sur ActivityPub</button>.",
|
||||||
|
"domain_pill.who_you_are": "Perque tu pseudonymo indica qui tu es e ubi tu te trova, le gente pote interager con te desde tote le rete social de <button>platteformas basate sur ActivityPub</button>.",
|
||||||
|
"domain_pill.your_handle": "Tu pseudonymo:",
|
||||||
"domain_pill.your_server": "Tu casa digital, ubi vive tote tu messages. Non te place? Cambia de servitor a omne momento e porta tu sequitores con te.",
|
"domain_pill.your_server": "Tu casa digital, ubi vive tote tu messages. Non te place? Cambia de servitor a omne momento e porta tu sequitores con te.",
|
||||||
|
"domain_pill.your_username": "Tu identificator unic sur iste servitor. Es possibile trovar usatores con le mesme nomine de usator sur servitores differente.",
|
||||||
"embed.instructions": "Incorpora iste message sur tu sito web con le codice sequente.",
|
"embed.instructions": "Incorpora iste message sur tu sito web con le codice sequente.",
|
||||||
"embed.preview": "Ecce como illlo parera:",
|
"embed.preview": "Ecce como illlo parera:",
|
||||||
"emoji_button.activity": "Activitate",
|
"emoji_button.activity": "Activitate",
|
||||||
|
@ -196,6 +239,8 @@
|
||||||
"emoji_button.food": "Alimentos e bibitas",
|
"emoji_button.food": "Alimentos e bibitas",
|
||||||
"emoji_button.label": "Inserer emoji",
|
"emoji_button.label": "Inserer emoji",
|
||||||
"emoji_button.nature": "Natura",
|
"emoji_button.nature": "Natura",
|
||||||
|
"emoji_button.not_found": "Necun emoji correspondente trovate",
|
||||||
|
"emoji_button.objects": "Objectos",
|
||||||
"emoji_button.people": "Personas",
|
"emoji_button.people": "Personas",
|
||||||
"emoji_button.recent": "Frequentemente usate",
|
"emoji_button.recent": "Frequentemente usate",
|
||||||
"emoji_button.search": "Cercar...",
|
"emoji_button.search": "Cercar...",
|
||||||
|
@ -208,14 +253,27 @@
|
||||||
"empty_column.account_unavailable": "Profilo non disponibile",
|
"empty_column.account_unavailable": "Profilo non disponibile",
|
||||||
"empty_column.blocks": "Tu non ha blocate alcun usator ancora.",
|
"empty_column.blocks": "Tu non ha blocate alcun usator ancora.",
|
||||||
"empty_column.bookmarked_statuses": "Tu non ha ancora messages in marcapaginas. Quando tu adde un message al marcapaginas, illo apparera hic.",
|
"empty_column.bookmarked_statuses": "Tu non ha ancora messages in marcapaginas. Quando tu adde un message al marcapaginas, illo apparera hic.",
|
||||||
|
"empty_column.community": "Le chronologia local es vacue. Scribe qualcosa public pro poner le cosas in marcha!",
|
||||||
|
"empty_column.direct": "Tu non ha ancora mentiones private. Quando tu invia o recipe un mention, illo apparera hic.",
|
||||||
"empty_column.domain_blocks": "Il non ha dominios blocate ancora.",
|
"empty_column.domain_blocks": "Il non ha dominios blocate ancora.",
|
||||||
"empty_column.explore_statuses": "Il non ha tendentias in iste momento. Reveni plus tarde!",
|
"empty_column.explore_statuses": "Il non ha tendentias in iste momento. Reveni plus tarde!",
|
||||||
"empty_column.favourited_statuses": "Tu non ha alcun message favorite ancora. Quando tu marca un message como favorite, illo apparera hic.",
|
"empty_column.favourited_statuses": "Tu non ha alcun message favorite ancora. Quando tu marca un message como favorite, illo apparera hic.",
|
||||||
"empty_column.favourites": "Necuno ha ancora marcate iste message como favorite. Quando alcuno lo face, ille apparera hic.",
|
"empty_column.favourites": "Necuno ha ancora marcate iste message como favorite. Quando alcuno lo face, ille apparera hic.",
|
||||||
|
"empty_column.follow_requests": "Tu non ha ancora requestas de sequimento. Quando tu recipe un, illo apparera hic.",
|
||||||
"empty_column.followed_tags": "Tu non ha ancora sequite alcun hashtags. Quando tu lo face, illos apparera hic.",
|
"empty_column.followed_tags": "Tu non ha ancora sequite alcun hashtags. Quando tu lo face, illos apparera hic.",
|
||||||
"empty_column.hashtag": "Il non ha ancora alcun cosa in iste hashtag.",
|
"empty_column.hashtag": "Il non ha ancora alcun cosa in iste hashtag.",
|
||||||
"empty_column.home": "Tu chronologia de initio es vacue! Seque plus personas pro plenar lo.",
|
"empty_column.home": "Tu chronologia de initio es vacue! Seque plus personas pro plenar lo.",
|
||||||
"empty_column.list": "Iste lista es ancora vacue. Quando le membros de iste lista publica nove messages, illos apparera hic.",
|
"empty_column.list": "Iste lista es ancora vacue. Quando le membros de iste lista publica nove messages, illos apparera hic.",
|
||||||
|
"empty_column.lists": "Tu non ha ancora listas. Quando tu crea un, illo apparera hic.",
|
||||||
|
"empty_column.mutes": "Tu non ha ancora silentiate alcun usator.",
|
||||||
|
"empty_column.notification_requests": "Iste lista es toto vacue! Quando tu recipe notificationes, illos apparera hic como configurate in tu parametros.",
|
||||||
|
"empty_column.notifications": "Tu non ha ancora notificationes. Quando altere personas interage con te, tu lo videra hic.",
|
||||||
|
"empty_column.public": "Il ha nihil hic! Scribe qualcosa public, o manualmente seque usatores de altere servitores, pro plenar lo",
|
||||||
|
"error.unexpected_crash.explanation": "A causa de un defecto in nostre codice o de un problema de compatibilitate del navigator, iste pagina non pote esser visualisate correctemente.",
|
||||||
|
"error.unexpected_crash.explanation_addons": "Iste pagina non pote esser visualisate correctemente. Iste error es probabilemente causate per un additivo al navigator o per un utensile de traduction automatic.",
|
||||||
|
"error.unexpected_crash.next_steps": "Tenta refrescar le pagina. Si isto non remedia le problema, es possibile que tu pote totevia usar Mastodon per medio de un altere navigator o application native.",
|
||||||
|
"error.unexpected_crash.next_steps_addons": "Tenta disactivar istes e refrescar le pagina. Si isto non remedia le problema, es possibile que tu pote totevia usar Mastodon per medio de un altere navigator o application native.",
|
||||||
|
"errors.unexpected_crash.copy_stacktrace": "Copiar le traciamento del pila al area de transferentia",
|
||||||
"errors.unexpected_crash.report_issue": "Signalar un defecto",
|
"errors.unexpected_crash.report_issue": "Signalar un defecto",
|
||||||
"explore.search_results": "Resultatos de recerca",
|
"explore.search_results": "Resultatos de recerca",
|
||||||
"explore.suggested_follows": "Personas",
|
"explore.suggested_follows": "Personas",
|
||||||
|
@ -224,23 +282,42 @@
|
||||||
"explore.trending_statuses": "Messages",
|
"explore.trending_statuses": "Messages",
|
||||||
"explore.trending_tags": "Hashtags",
|
"explore.trending_tags": "Hashtags",
|
||||||
"filter_modal.added.context_mismatch_explanation": "Iste categoria de filtros non se applica al contexto in le qual tu ha accedite a iste message. Pro filtrar le message in iste contexto tamben, modifica le filtro.",
|
"filter_modal.added.context_mismatch_explanation": "Iste categoria de filtros non se applica al contexto in le qual tu ha accedite a iste message. Pro filtrar le message in iste contexto tamben, modifica le filtro.",
|
||||||
|
"filter_modal.added.context_mismatch_title": "Contexto incoherente!",
|
||||||
|
"filter_modal.added.expired_explanation": "Iste categoria de filtros ha expirate. Tu debe modificar le data de expiration pro applicar lo.",
|
||||||
|
"filter_modal.added.expired_title": "Filtro expirate!",
|
||||||
|
"filter_modal.added.review_and_configure": "Pro revider e configurar ulteriormente iste categoria de filtros, visita le {settings_link}.",
|
||||||
"filter_modal.added.review_and_configure_title": "Parametros de filtro",
|
"filter_modal.added.review_and_configure_title": "Parametros de filtro",
|
||||||
"filter_modal.added.settings_link": "pagina de parametros",
|
"filter_modal.added.settings_link": "pagina de parametros",
|
||||||
"filter_modal.added.short_explanation": "Iste message ha essite addite al sequente categoria de filtros: {title}.",
|
"filter_modal.added.short_explanation": "Iste message ha essite addite al sequente categoria de filtros: {title}.",
|
||||||
"filter_modal.added.title": "Filtro addite!",
|
"filter_modal.added.title": "Filtro addite!",
|
||||||
|
"filter_modal.select_filter.context_mismatch": "non se applica a iste contexto",
|
||||||
|
"filter_modal.select_filter.expired": "expirate",
|
||||||
"filter_modal.select_filter.prompt_new": "Nove categoria: {name}",
|
"filter_modal.select_filter.prompt_new": "Nove categoria: {name}",
|
||||||
"filter_modal.select_filter.search": "Cercar o crear",
|
"filter_modal.select_filter.search": "Cercar o crear",
|
||||||
|
"filter_modal.select_filter.subtitle": "Usa un categoria existente o crea un nove",
|
||||||
"filter_modal.select_filter.title": "Filtrar iste message",
|
"filter_modal.select_filter.title": "Filtrar iste message",
|
||||||
"filter_modal.title.status": "Filtrar un message",
|
"filter_modal.title.status": "Filtrar un message",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {mention} other {mentiones}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Notificationes ab {count, plural, =0 {nemo} one {un persona} other {# personas}} tu poterea cognoscer",
|
"filtered_notifications_banner.pending_requests": "Notificationes ab {count, plural, =0 {nemo} one {un persona} other {# personas}} tu poterea cognoscer",
|
||||||
|
"filtered_notifications_banner.title": "Notificationes filtrate",
|
||||||
"firehose.all": "Toto",
|
"firehose.all": "Toto",
|
||||||
"firehose.local": "Iste servitor",
|
"firehose.local": "Iste servitor",
|
||||||
"firehose.remote": "Altere servitores",
|
"firehose.remote": "Altere servitores",
|
||||||
|
"follow_request.authorize": "Autorisar",
|
||||||
"follow_request.reject": "Rejectar",
|
"follow_request.reject": "Rejectar",
|
||||||
|
"follow_requests.unlocked_explanation": "Benque tu conto non es serrate, le personal de {domain} pensa que es un bon idea que tu revide manualmente le sequente requestas de iste contos.",
|
||||||
|
"follow_suggestions.curated_suggestion": "Selection del equipa",
|
||||||
"follow_suggestions.dismiss": "Non monstrar novemente",
|
"follow_suggestions.dismiss": "Non monstrar novemente",
|
||||||
|
"follow_suggestions.hints.featured": "Iste profilo ha essite seligite manualmente per le equipa de {domain}.",
|
||||||
|
"follow_suggestions.hints.friends_of_friends": "Iste profilo es popular inter le gente que tu seque.",
|
||||||
|
"follow_suggestions.hints.most_followed": "Iste profilo es un del plus sequites sur {domain}.",
|
||||||
|
"follow_suggestions.hints.most_interactions": "Iste profilo ha recentemente recipite multe attention sur {domain}.",
|
||||||
|
"follow_suggestions.hints.similar_to_recently_followed": "Iste profilo es similar al profilos que tu ha recentemente sequite.",
|
||||||
"follow_suggestions.personalized_suggestion": "Suggestion personalisate",
|
"follow_suggestions.personalized_suggestion": "Suggestion personalisate",
|
||||||
"follow_suggestions.popular_suggestion": "Suggestion personalisate",
|
"follow_suggestions.popular_suggestion": "Suggestion personalisate",
|
||||||
"follow_suggestions.view_all": "Vider toto",
|
"follow_suggestions.view_all": "Vider toto",
|
||||||
|
"follow_suggestions.who_to_follow": "Qui sequer",
|
||||||
|
"followed_tags": "Hashtags sequite",
|
||||||
"footer.about": "A proposito",
|
"footer.about": "A proposito",
|
||||||
"footer.directory": "Directorio de profilos",
|
"footer.directory": "Directorio de profilos",
|
||||||
"footer.get_app": "Obtener le application",
|
"footer.get_app": "Obtener le application",
|
||||||
|
@ -256,6 +333,11 @@
|
||||||
"hashtag.column_header.tag_mode.none": "sin {additional}",
|
"hashtag.column_header.tag_mode.none": "sin {additional}",
|
||||||
"hashtag.column_settings.select.no_options_message": "Nulle suggestiones trovate",
|
"hashtag.column_settings.select.no_options_message": "Nulle suggestiones trovate",
|
||||||
"hashtag.column_settings.select.placeholder": "Insere hashtags…",
|
"hashtag.column_settings.select.placeholder": "Insere hashtags…",
|
||||||
|
"hashtag.column_settings.tag_mode.all": "Tote istes",
|
||||||
|
"hashtag.column_settings.tag_mode.any": "Un o plus de istes",
|
||||||
|
"hashtag.column_settings.tag_mode.none": "Necun de istes",
|
||||||
|
"hashtag.column_settings.tag_toggle": "Includer etiquettas additional pro iste columna",
|
||||||
|
"hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}",
|
||||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} message} other {{counter} messages}}",
|
"hashtag.counter_by_uses": "{count, plural, one {{counter} message} other {{counter} messages}}",
|
||||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} message} other {{counter} messages}} hodie",
|
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} message} other {{counter} messages}} hodie",
|
||||||
"hashtag.follow": "Sequer hashtag",
|
"hashtag.follow": "Sequer hashtag",
|
||||||
|
@ -277,13 +359,22 @@
|
||||||
"interaction_modal.no_account_yet": "Non sur Mstodon?",
|
"interaction_modal.no_account_yet": "Non sur Mstodon?",
|
||||||
"interaction_modal.on_another_server": "Sur un altere servitor",
|
"interaction_modal.on_another_server": "Sur un altere servitor",
|
||||||
"interaction_modal.on_this_server": "Sur iste servitor",
|
"interaction_modal.on_this_server": "Sur iste servitor",
|
||||||
|
"interaction_modal.sign_in": "Tu non es in session sur iste servitor. Sur qual servitor se trova tu conto?",
|
||||||
|
"interaction_modal.sign_in_hint": "Consilio: Se tracta del sito web ubi tu te ha inscribite. Si tu non te lo rememora, cerca le e-mail de benvenita in tu cassa de entrata. Tu pote etiam inserer tu pseudonymo complete! (p.ex. @Mastodon@mastodon.social)",
|
||||||
"interaction_modal.title.favourite": "Marcar le message de {name} como favorite",
|
"interaction_modal.title.favourite": "Marcar le message de {name} como favorite",
|
||||||
"interaction_modal.title.follow": "Sequer {name}",
|
"interaction_modal.title.follow": "Sequer {name}",
|
||||||
"interaction_modal.title.reblog": "Impulsar le message de {name}",
|
"interaction_modal.title.reblog": "Impulsar le message de {name}",
|
||||||
"interaction_modal.title.reply": "Responder al message de {name}",
|
"interaction_modal.title.reply": "Responder al message de {name}",
|
||||||
|
"intervals.full.days": "{number, plural, one {# die} other {# dies}}",
|
||||||
|
"intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
|
||||||
|
"intervals.full.minutes": "{number, plural, one {# minuta} other {# minutas}}",
|
||||||
|
"keyboard_shortcuts.back": "Navigar retro",
|
||||||
"keyboard_shortcuts.blocked": "Aperir lista de usatores blocate",
|
"keyboard_shortcuts.blocked": "Aperir lista de usatores blocate",
|
||||||
"keyboard_shortcuts.boost": "Impulsar le message",
|
"keyboard_shortcuts.boost": "Impulsar le message",
|
||||||
|
"keyboard_shortcuts.column": "Focalisar al columna",
|
||||||
|
"keyboard_shortcuts.compose": "Focalisar al area de composition de texto",
|
||||||
"keyboard_shortcuts.description": "Description",
|
"keyboard_shortcuts.description": "Description",
|
||||||
|
"keyboard_shortcuts.direct": "aperir le columna de mentiones private",
|
||||||
"keyboard_shortcuts.enter": "Aperir message",
|
"keyboard_shortcuts.enter": "Aperir message",
|
||||||
"keyboard_shortcuts.favourite": "Message favorite",
|
"keyboard_shortcuts.favourite": "Message favorite",
|
||||||
"keyboard_shortcuts.favourites": "Aperir lista de favoritos",
|
"keyboard_shortcuts.favourites": "Aperir lista de favoritos",
|
||||||
|
|
|
@ -287,7 +287,6 @@
|
||||||
"filter_modal.select_filter.title": "Filtrar ti-ci posta",
|
"filter_modal.select_filter.title": "Filtrar ti-ci posta",
|
||||||
"filter_modal.title.status": "Filtrar un posta",
|
"filter_modal.title.status": "Filtrar un posta",
|
||||||
"filtered_notifications_banner.pending_requests": "Notificationes de {count, plural, =0 {nequi} one {un person} other {# persones}} quel tu possibilmen conosse",
|
"filtered_notifications_banner.pending_requests": "Notificationes de {count, plural, =0 {nequi} one {un person} other {# persones}} quel tu possibilmen conosse",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {privat mention} other {privat mentiones}}",
|
|
||||||
"filtered_notifications_banner.title": "Filtrat notificationes",
|
"filtered_notifications_banner.title": "Filtrat notificationes",
|
||||||
"firehose.all": "Omno",
|
"firehose.all": "Omno",
|
||||||
"firehose.local": "Ti-ci servitor",
|
"firehose.local": "Ti-ci servitor",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Notaðu fyrirliggjandi flokk eða útbúðu nýjan",
|
"filter_modal.select_filter.subtitle": "Notaðu fyrirliggjandi flokk eða útbúðu nýjan",
|
||||||
"filter_modal.select_filter.title": "Sía þessa færslu",
|
"filter_modal.select_filter.title": "Sía þessa færslu",
|
||||||
"filter_modal.title.status": "Sía færslu",
|
"filter_modal.title.status": "Sía færslu",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {tilvísun} other {tilvísanir}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Tilkynningar frá {count, plural, =0 {engum} one {einum aðila} other {# aðilum}} sem þú gætir þekkt",
|
"filtered_notifications_banner.pending_requests": "Tilkynningar frá {count, plural, =0 {engum} one {einum aðila} other {# aðilum}} sem þú gætir þekkt",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {einkaspjall} other {einkaspjöll}}",
|
|
||||||
"filtered_notifications_banner.title": "Síaðar tilkynningar",
|
"filtered_notifications_banner.title": "Síaðar tilkynningar",
|
||||||
"firehose.all": "Allt",
|
"firehose.all": "Allt",
|
||||||
"firehose.local": "þessum netþjóni",
|
"firehose.local": "þessum netþjóni",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Usa una categoria esistente o creane una nuova",
|
"filter_modal.select_filter.subtitle": "Usa una categoria esistente o creane una nuova",
|
||||||
"filter_modal.select_filter.title": "Filtra questo post",
|
"filter_modal.select_filter.title": "Filtra questo post",
|
||||||
"filter_modal.title.status": "Filtra un post",
|
"filter_modal.title.status": "Filtra un post",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {menzione} other {menzioni}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Notifiche da {count, plural, =0 {nessuno} one {una persona} other {# persone}} che potresti conoscere",
|
"filtered_notifications_banner.pending_requests": "Notifiche da {count, plural, =0 {nessuno} one {una persona} other {# persone}} che potresti conoscere",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural,one {menzione privata} other {menzioni private}}",
|
|
||||||
"filtered_notifications_banner.title": "Notifiche filtrate",
|
"filtered_notifications_banner.title": "Notifiche filtrate",
|
||||||
"firehose.all": "Tutto",
|
"firehose.all": "Tutto",
|
||||||
"firehose.local": "Questo server",
|
"firehose.local": "Questo server",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "기존의 카테고리를 사용하거나 새로 하나를 만듧니다",
|
"filter_modal.select_filter.subtitle": "기존의 카테고리를 사용하거나 새로 하나를 만듧니다",
|
||||||
"filter_modal.select_filter.title": "이 게시물을 필터",
|
"filter_modal.select_filter.title": "이 게시물을 필터",
|
||||||
"filter_modal.title.status": "게시물 필터",
|
"filter_modal.title.status": "게시물 필터",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, other {멘션}}",
|
||||||
"filtered_notifications_banner.pending_requests": "알 수도 있는 {count, plural, =0 {0 명} one {한 명} other {# 명}}의 사람들로부터의 알림",
|
"filtered_notifications_banner.pending_requests": "알 수도 있는 {count, plural, =0 {0 명} one {한 명} other {# 명}}의 사람들로부터의 알림",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, other {개인적인 멘션}}",
|
|
||||||
"filtered_notifications_banner.title": "걸러진 알림",
|
"filtered_notifications_banner.title": "걸러진 알림",
|
||||||
"firehose.all": "모두",
|
"firehose.all": "모두",
|
||||||
"firehose.local": "이 서버",
|
"firehose.local": "이 서버",
|
||||||
|
|
|
@ -457,6 +457,7 @@
|
||||||
"notification.own_poll": "Tu anketa eskapo",
|
"notification.own_poll": "Tu anketa eskapo",
|
||||||
"notification.poll": "Anketa en ke votates eskapo",
|
"notification.poll": "Anketa en ke votates eskapo",
|
||||||
"notification.reblog": "{name} repartajo tu publikasyon",
|
"notification.reblog": "{name} repartajo tu publikasyon",
|
||||||
|
"notification.relationships_severance_event": "Koneksyones pedridas kon {name}",
|
||||||
"notification.relationships_severance_event.learn_more": "Ambezate mas",
|
"notification.relationships_severance_event.learn_more": "Ambezate mas",
|
||||||
"notification.status": "{name} publiko algo",
|
"notification.status": "{name} publiko algo",
|
||||||
"notification.update": "{name} edito una publikasyon",
|
"notification.update": "{name} edito una publikasyon",
|
||||||
|
|
|
@ -282,7 +282,6 @@
|
||||||
"filter_modal.select_filter.subtitle": "Naudok esamą kategoriją arba sukurk naują.",
|
"filter_modal.select_filter.subtitle": "Naudok esamą kategoriją arba sukurk naują.",
|
||||||
"filter_modal.select_filter.title": "Filtruoti šį įrašą",
|
"filter_modal.select_filter.title": "Filtruoti šį įrašą",
|
||||||
"filter_modal.title.status": "Filtruoti įrašą",
|
"filter_modal.title.status": "Filtruoti įrašą",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {privatus paminėjimas} few {privatūs paminėjimai} many {privataus paminėjimo} other {privačių paminėjimų}}",
|
|
||||||
"firehose.all": "Visi",
|
"firehose.all": "Visi",
|
||||||
"firehose.local": "Šis serveris",
|
"firehose.local": "Šis serveris",
|
||||||
"firehose.remote": "Kiti serveriai",
|
"firehose.remote": "Kiti serveriai",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Een bestaande categorie gebruiken of een nieuwe aanmaken",
|
"filter_modal.select_filter.subtitle": "Een bestaande categorie gebruiken of een nieuwe aanmaken",
|
||||||
"filter_modal.select_filter.title": "Dit bericht filteren",
|
"filter_modal.select_filter.title": "Dit bericht filteren",
|
||||||
"filter_modal.title.status": "Een bericht filteren",
|
"filter_modal.title.status": "Een bericht filteren",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {vermelding} other {vermeldingen}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Meldingen van {count, plural, =0 {niemand} one {één persoon} other {# mensen}} die je misschien kent",
|
"filtered_notifications_banner.pending_requests": "Meldingen van {count, plural, =0 {niemand} one {één persoon} other {# mensen}} die je misschien kent",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {privébericht} other {privéberichten}}",
|
|
||||||
"filtered_notifications_banner.title": "Gefilterde meldingen",
|
"filtered_notifications_banner.title": "Gefilterde meldingen",
|
||||||
"firehose.all": "Alles",
|
"firehose.all": "Alles",
|
||||||
"firehose.local": "Deze server",
|
"firehose.local": "Deze server",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Filtrer dette innlegget",
|
"filter_modal.select_filter.title": "Filtrer dette innlegget",
|
||||||
"filter_modal.title.status": "Filtrer eit innlegg",
|
"filter_modal.title.status": "Filtrer eit innlegg",
|
||||||
"filtered_notifications_banner.pending_requests": "Varsel frå {count, plural, =0 {ingen} one {ein person} other {# folk}} du kanskje kjenner",
|
"filtered_notifications_banner.pending_requests": "Varsel frå {count, plural, =0 {ingen} one {ein person} other {# folk}} du kanskje kjenner",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {privat omtale} other {private omtaler}}",
|
|
||||||
"filtered_notifications_banner.title": "Filtrerte varslingar",
|
"filtered_notifications_banner.title": "Filtrerte varslingar",
|
||||||
"firehose.all": "Alle",
|
"firehose.all": "Alle",
|
||||||
"firehose.local": "Denne tenaren",
|
"firehose.local": "Denne tenaren",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Użyj istniejącej kategorii lub utwórz nową",
|
"filter_modal.select_filter.subtitle": "Użyj istniejącej kategorii lub utwórz nową",
|
||||||
"filter_modal.select_filter.title": "Filtruj ten wpis",
|
"filter_modal.select_filter.title": "Filtruj ten wpis",
|
||||||
"filter_modal.title.status": "Filtruj wpis",
|
"filter_modal.title.status": "Filtruj wpis",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {wzmianka} few {wzmianki} other {wzmianek}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Powiadomienia od {count, plural, =0 {żadnej osoby którą możesz znać} one {# osoby którą możesz znać} other {# osób które możesz znać}}",
|
"filtered_notifications_banner.pending_requests": "Powiadomienia od {count, plural, =0 {żadnej osoby którą możesz znać} one {# osoby którą możesz znać} other {# osób które możesz znać}}",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {prywatna wzmianka} few {prywatne wzmianki} other {prywatnych wzmianek}}",
|
|
||||||
"filtered_notifications_banner.title": "Powiadomienia filtrowane",
|
"filtered_notifications_banner.title": "Powiadomienia filtrowane",
|
||||||
"firehose.all": "Wszystko",
|
"firehose.all": "Wszystko",
|
||||||
"firehose.local": "Ten serwer",
|
"firehose.local": "Ten serwer",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Filtrar esta publicação",
|
"filter_modal.select_filter.title": "Filtrar esta publicação",
|
||||||
"filter_modal.title.status": "Filtrar uma publicação",
|
"filter_modal.title.status": "Filtrar uma publicação",
|
||||||
"filtered_notifications_banner.pending_requests": "Notificações de {count, plural, =0 {no one} one {one person} other {# people}} que você talvez conheça",
|
"filtered_notifications_banner.pending_requests": "Notificações de {count, plural, =0 {no one} one {one person} other {# people}} que você talvez conheça",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {private mention} other {private mentions}}",
|
|
||||||
"filtered_notifications_banner.title": "Notificações filtradas",
|
"filtered_notifications_banner.title": "Notificações filtradas",
|
||||||
"firehose.all": "Tudo",
|
"firehose.all": "Tudo",
|
||||||
"firehose.local": "Este servidor",
|
"firehose.local": "Este servidor",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Utilize uma categoria existente ou crie uma nova",
|
"filter_modal.select_filter.subtitle": "Utilize uma categoria existente ou crie uma nova",
|
||||||
"filter_modal.select_filter.title": "Filtrar esta publicação",
|
"filter_modal.select_filter.title": "Filtrar esta publicação",
|
||||||
"filter_modal.title.status": "Filtrar uma publicação",
|
"filter_modal.title.status": "Filtrar uma publicação",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {menção} other {menções}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Notificações de {count, plural, =0 {ninguém} one {uma pessoa} other {# pessoas}} que talvez conheça",
|
"filtered_notifications_banner.pending_requests": "Notificações de {count, plural, =0 {ninguém} one {uma pessoa} other {# pessoas}} que talvez conheça",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural,one {menção privada} other {menções privadas}}",
|
|
||||||
"filtered_notifications_banner.title": "Notificações filtradas",
|
"filtered_notifications_banner.title": "Notificações filtradas",
|
||||||
"firehose.all": "Todas",
|
"firehose.all": "Todas",
|
||||||
"firehose.local": "Este servidor",
|
"firehose.local": "Este servidor",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Фильтровать этот пост",
|
"filter_modal.select_filter.title": "Фильтровать этот пост",
|
||||||
"filter_modal.title.status": "Фильтровать пост",
|
"filter_modal.title.status": "Фильтровать пост",
|
||||||
"filtered_notifications_banner.pending_requests": "Уведомления от {count, plural, =0 {никого} one {# человека} other {# других людей, с кем вы можете быть знакомы}}",
|
"filtered_notifications_banner.pending_requests": "Уведомления от {count, plural, =0 {никого} one {# человека} other {# других людей, с кем вы можете быть знакомы}}",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {личное упоминание} other {личные упоминания}}",
|
|
||||||
"filtered_notifications_banner.title": "Отфильтрованные уведомления",
|
"filtered_notifications_banner.title": "Отфильтрованные уведомления",
|
||||||
"firehose.all": "Все",
|
"firehose.all": "Все",
|
||||||
"firehose.local": "Текущий сервер",
|
"firehose.local": "Текущий сервер",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Uporabite obstoječo kategorijo ali ustvarite novo",
|
"filter_modal.select_filter.subtitle": "Uporabite obstoječo kategorijo ali ustvarite novo",
|
||||||
"filter_modal.select_filter.title": "Filtriraj to objavo",
|
"filter_modal.select_filter.title": "Filtriraj to objavo",
|
||||||
"filter_modal.title.status": "Filtrirajte objavo",
|
"filter_modal.title.status": "Filtrirajte objavo",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {omemba} two {omembi} few {omembe} other {omemb}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Obvestila od {count, plural, =0 {nikogar, ki bi ga} one {# človeka, ki bi ga} two {# ljudi, ki bi ju} few {# ljudi, ki bi jih} other {# ljudi, ki bi jih}} lahko poznali",
|
"filtered_notifications_banner.pending_requests": "Obvestila od {count, plural, =0 {nikogar, ki bi ga} one {# človeka, ki bi ga} two {# ljudi, ki bi ju} few {# ljudi, ki bi jih} other {# ljudi, ki bi jih}} lahko poznali",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {zasebna omemba} two {zasebni omembi} few {zasebne omembe} other {zasebnih omemb}}",
|
|
||||||
"filtered_notifications_banner.title": "Filtrirana obvestila",
|
"filtered_notifications_banner.title": "Filtrirana obvestila",
|
||||||
"firehose.all": "Vse",
|
"firehose.all": "Vse",
|
||||||
"firehose.local": "Ta strežnik",
|
"firehose.local": "Ta strežnik",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Filtroje këtë postim",
|
"filter_modal.select_filter.title": "Filtroje këtë postim",
|
||||||
"filter_modal.title.status": "Filtroni një postim",
|
"filter_modal.title.status": "Filtroni një postim",
|
||||||
"filtered_notifications_banner.pending_requests": "Njoftime prej {count, plural, =0 {askujt} one {një personi} other {# vetësh}} që mund të njihni",
|
"filtered_notifications_banner.pending_requests": "Njoftime prej {count, plural, =0 {askujt} one {një personi} other {# vetësh}} që mund të njihni",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {përmendje private} other {përmendje private}}",
|
|
||||||
"filtered_notifications_banner.title": "Njoftime të filtruar",
|
"filtered_notifications_banner.title": "Njoftime të filtruar",
|
||||||
"firehose.all": "Krejt",
|
"firehose.all": "Krejt",
|
||||||
"firehose.local": "Këtë shërbyes",
|
"firehose.local": "Këtë shërbyes",
|
||||||
|
|
|
@ -13,14 +13,14 @@
|
||||||
"about.rules": "Pravila servera",
|
"about.rules": "Pravila servera",
|
||||||
"account.account_note_header": "Napomena",
|
"account.account_note_header": "Napomena",
|
||||||
"account.add_or_remove_from_list": "Dodaj ili ukloni sa lista",
|
"account.add_or_remove_from_list": "Dodaj ili ukloni sa lista",
|
||||||
"account.badges.bot": "Bot",
|
"account.badges.bot": "Automatizovano",
|
||||||
"account.badges.group": "Grupa",
|
"account.badges.group": "Grupa",
|
||||||
"account.block": "Blokiraj @{name}",
|
"account.block": "Blokiraj @{name}",
|
||||||
"account.block_domain": "Blokiraj domen {domain}",
|
"account.block_domain": "Blokiraj domen {domain}",
|
||||||
"account.block_short": "Blokiraj",
|
"account.block_short": "Blokiraj",
|
||||||
"account.blocked": "Blokiran",
|
"account.blocked": "Blokiran",
|
||||||
"account.browse_more_on_origin_server": "Pregledajte još na originalnom profilu",
|
"account.browse_more_on_origin_server": "Pregledajte još na originalnom profilu",
|
||||||
"account.cancel_follow_request": "Povuci zahtev za praćenje",
|
"account.cancel_follow_request": "Otkaži praćenje",
|
||||||
"account.copy": "Kopiraj vezu u profil",
|
"account.copy": "Kopiraj vezu u profil",
|
||||||
"account.direct": "Privatno pomeni @{name}",
|
"account.direct": "Privatno pomeni @{name}",
|
||||||
"account.disable_notifications": "Zaustavi obaveštavanje za objave korisnika @{name}",
|
"account.disable_notifications": "Zaustavi obaveštavanje za objave korisnika @{name}",
|
||||||
|
@ -89,6 +89,14 @@
|
||||||
"announcement.announcement": "Najava",
|
"announcement.announcement": "Najava",
|
||||||
"attachments_list.unprocessed": "(neobrađeno)",
|
"attachments_list.unprocessed": "(neobrađeno)",
|
||||||
"audio.hide": "Sakrij audio",
|
"audio.hide": "Sakrij audio",
|
||||||
|
"block_modal.remote_users_caveat": "Zamolićemo server {domain} da poštuje vašu odluku. Međutim, usklađenost nije zagarantovana jer neki serveri mogu drugačije da obrađuju blokove. Javne objave mogu i dalje biti vidljive korisnicima koji nisu prijavljeni.",
|
||||||
|
"block_modal.show_less": "Prikaži manje",
|
||||||
|
"block_modal.show_more": "Prikaži više",
|
||||||
|
"block_modal.they_cant_mention": "Ne mogu da vas pominju ili prate.",
|
||||||
|
"block_modal.they_cant_see_posts": "Ne mogu da vide vaše objave, a vi nećete videti njihove.",
|
||||||
|
"block_modal.they_will_know": "Mogu da vide da su blokirani.",
|
||||||
|
"block_modal.title": "Blokirati korisnika?",
|
||||||
|
"block_modal.you_wont_see_mentions": "Nećete videti objave koje ih pominju.",
|
||||||
"boost_modal.combo": "Možete pritisnuti {combo} da preskočite ovo sledeći put",
|
"boost_modal.combo": "Možete pritisnuti {combo} da preskočite ovo sledeći put",
|
||||||
"bundle_column_error.copy_stacktrace": "Kopiraj izveštaj o grešci",
|
"bundle_column_error.copy_stacktrace": "Kopiraj izveštaj o grešci",
|
||||||
"bundle_column_error.error.body": "Nije moguće prikazati traženu stranicu. Razlog može biti greška u našem kodu ili problem sa kompatibilnošću pretraživača.",
|
"bundle_column_error.error.body": "Nije moguće prikazati traženu stranicu. Razlog može biti greška u našem kodu ili problem sa kompatibilnošću pretraživača.",
|
||||||
|
@ -153,7 +161,7 @@
|
||||||
"compose_form.poll.switch_to_single": "Promenite anketu da biste omogućili jedan izbor",
|
"compose_form.poll.switch_to_single": "Promenite anketu da biste omogućili jedan izbor",
|
||||||
"compose_form.poll.type": "Stil",
|
"compose_form.poll.type": "Stil",
|
||||||
"compose_form.publish": "Objavi",
|
"compose_form.publish": "Objavi",
|
||||||
"compose_form.publish_form": "Objavi",
|
"compose_form.publish_form": "Nova objava",
|
||||||
"compose_form.reply": "Odgovori",
|
"compose_form.reply": "Odgovori",
|
||||||
"compose_form.save_changes": "Ažuriraj",
|
"compose_form.save_changes": "Ažuriraj",
|
||||||
"compose_form.spoiler.marked": "Ukloni upozorenje o sadržaju",
|
"compose_form.spoiler.marked": "Ukloni upozorenje o sadržaju",
|
||||||
|
@ -169,6 +177,7 @@
|
||||||
"confirmations.delete_list.message": "Da li ste sigurni da želite da trajno izbrišete ovu listu?",
|
"confirmations.delete_list.message": "Da li ste sigurni da želite da trajno izbrišete ovu listu?",
|
||||||
"confirmations.discard_edit_media.confirm": "Odbaci",
|
"confirmations.discard_edit_media.confirm": "Odbaci",
|
||||||
"confirmations.discard_edit_media.message": "Imate nesačuvane promene u opisu ili pregledu medija, da li ipak hoćete da ih odbacite?",
|
"confirmations.discard_edit_media.message": "Imate nesačuvane promene u opisu ili pregledu medija, da li ipak hoćete da ih odbacite?",
|
||||||
|
"confirmations.domain_block.confirm": "Blokiraj server",
|
||||||
"confirmations.domain_block.message": "Da li ste zaista sigurni da želite da blokirate ceo domen {domain}? U većini slučajeva, dovoljno je i poželjno nekoliko ciljanih blokiranja ili ignorisanja. Nećete videti sadržaj sa tog domena ni u jednoj javnoj vremenskoj liniji ili u vašim obaveštenjima. Vaši pratioci sa tog domena će biti uklonjeni.",
|
"confirmations.domain_block.message": "Da li ste zaista sigurni da želite da blokirate ceo domen {domain}? U većini slučajeva, dovoljno je i poželjno nekoliko ciljanih blokiranja ili ignorisanja. Nećete videti sadržaj sa tog domena ni u jednoj javnoj vremenskoj liniji ili u vašim obaveštenjima. Vaši pratioci sa tog domena će biti uklonjeni.",
|
||||||
"confirmations.edit.confirm": "Uredi",
|
"confirmations.edit.confirm": "Uredi",
|
||||||
"confirmations.edit.message": "Uređivanjem će se obrisati poruka koju trenutno sastavljate. Da li ste sigurni da želite da nastavite?",
|
"confirmations.edit.message": "Uređivanjem će se obrisati poruka koju trenutno sastavljate. Da li ste sigurni da želite da nastavite?",
|
||||||
|
@ -196,10 +205,31 @@
|
||||||
"disabled_account_banner.text": "Vaš nalog {disabledAccount} je trenutno onemogućen.",
|
"disabled_account_banner.text": "Vaš nalog {disabledAccount} je trenutno onemogućen.",
|
||||||
"dismissable_banner.community_timeline": "Ovo su najnovije javne objave ljudi čije naloge hostuje {domain}.",
|
"dismissable_banner.community_timeline": "Ovo su najnovije javne objave ljudi čije naloge hostuje {domain}.",
|
||||||
"dismissable_banner.dismiss": "Odbaci",
|
"dismissable_banner.dismiss": "Odbaci",
|
||||||
"dismissable_banner.explore_links": "O ovim vestima trenutno razgovaraju ljudi na ovom i drugim serverima decentralizovane mreže.",
|
"dismissable_banner.explore_links": "Ovo su vesti koje se danas najviše dele na društvenoj mreži. Novije vesti koje je objavilo više različitih ljudi su bolje rangirane.",
|
||||||
"dismissable_banner.explore_statuses": "Ovo su objave širom društvenog veba koje danas postaju sve popularnije. Novije objave sa više podržavanja i omiljene su rangirane više.",
|
"dismissable_banner.explore_statuses": "Ovo su objave širom društvenog veba koje danas postaju sve popularnije. Novije objave sa više podržavanja i omiljene su rangirane više.",
|
||||||
"dismissable_banner.explore_tags": "Ove heš oznake postaju sve popularnije među ljudima na ovom i drugim serverima decentralizovane mreže.",
|
"dismissable_banner.explore_tags": "Ovo su heš oznake koje danas postaju sve popularnije na društvenoj mreži. Heš oznake koje koristi više različitih ljudi su rangirane više.",
|
||||||
"dismissable_banner.public_timeline": "Ovo su najnovije javne objave ljudi sa društvenog veba koje ljudi na {domain}-u prate.",
|
"dismissable_banner.public_timeline": "Ovo su najnovije javne objave ljudi sa društvenog veba koje ljudi na {domain}-u prate.",
|
||||||
|
"domain_block_modal.block": "Blokiraj server",
|
||||||
|
"domain_block_modal.block_account_instead": "Umesto toga, blokiraj @{name}",
|
||||||
|
"domain_block_modal.they_can_interact_with_old_posts": "Ljudi sa ovog servera mogu da imaju interakciju sa vašim starim objavama.",
|
||||||
|
"domain_block_modal.they_cant_follow": "Niko sa ovog servera ne može da vas prati.",
|
||||||
|
"domain_block_modal.they_wont_know": "Neće znati da su blokirani.",
|
||||||
|
"domain_block_modal.title": "Blokirati domen?",
|
||||||
|
"domain_block_modal.you_will_lose_followers": "Svi vaši pratioci sa ovog servera će biti uklonjeni.",
|
||||||
|
"domain_block_modal.you_wont_see_posts": "Nećete videti objave ili obaveštenja korisnika na ovom serveru.",
|
||||||
|
"domain_pill.activitypub_lets_connect": "Omogućuje vam da se povežete i komunicirate sa ljudima ne samo na Mastodon-u, već i u različitim društvenim aplikacijama.",
|
||||||
|
"domain_pill.activitypub_like_language": "ActivityPub je kao jezik kojim Mastodon govori sa drugim društvenim mrežama.",
|
||||||
|
"domain_pill.server": "Server",
|
||||||
|
"domain_pill.their_handle": "Njegov regulator:",
|
||||||
|
"domain_pill.their_server": "Njihov digitalni dom, gde žive sve njihove objave.",
|
||||||
|
"domain_pill.their_username": "Njihov jedinstveni identifikator na njihovom serveru. Moguće je pronaći korisnike sa istim korisničkim imenom na različitim serverima.",
|
||||||
|
"domain_pill.username": "Korisničko ime",
|
||||||
|
"domain_pill.whats_in_a_handle": "Šta je regulator?",
|
||||||
|
"domain_pill.who_they_are": "Pošto regulatori govore ko je neko i gde se nalazi, možete da komunicirate sa ljudima širom društvenog veba na <button>platformama koje pokreće ActivityPub</button>.",
|
||||||
|
"domain_pill.who_you_are": "Pošto vaši regulatori govori ko ste i gde ste, ljudi mogu da komuniciraju sa vama širom društvenog veba na <button>platformama koje pokreće ActivityPub</button>.",
|
||||||
|
"domain_pill.your_handle": "Vaš regulator:",
|
||||||
|
"domain_pill.your_server": "Vaš digitalni dom, gde žive sve vaše objave. Ne sviđa vam se ovaj? Prenesite servere u bilo koje vreme i dovedite i svoje pratioce.",
|
||||||
|
"domain_pill.your_username": "Njihov jedinstveni identifikator na njihovom serveru. Moguće je pronaći korisnike sa istim korisničkim imenom na različitim serverima.",
|
||||||
"embed.instructions": "Ugradite ovu objavu na svoj veb sajt kopiranjem koda ispod.",
|
"embed.instructions": "Ugradite ovu objavu na svoj veb sajt kopiranjem koda ispod.",
|
||||||
"embed.preview": "Evo kako će to izgledati:",
|
"embed.preview": "Evo kako će to izgledati:",
|
||||||
"emoji_button.activity": "Aktivnosti",
|
"emoji_button.activity": "Aktivnosti",
|
||||||
|
@ -232,11 +262,11 @@
|
||||||
"empty_column.follow_requests": "Još uvek nemate nijedan zahtev za praćenje. Kada primite zahtev, on će se pojaviti ovde.",
|
"empty_column.follow_requests": "Još uvek nemate nijedan zahtev za praćenje. Kada primite zahtev, on će se pojaviti ovde.",
|
||||||
"empty_column.followed_tags": "Još uvek niste zapratili nijednu heš oznaku. Kada to uradite, one će se pojaviti ovde.",
|
"empty_column.followed_tags": "Još uvek niste zapratili nijednu heš oznaku. Kada to uradite, one će se pojaviti ovde.",
|
||||||
"empty_column.hashtag": "Još uvek nema ničega u ovoj heš oznaci.",
|
"empty_column.hashtag": "Još uvek nema ničega u ovoj heš oznaci.",
|
||||||
"empty_column.home": "Vaša početna vremenska linija je prazna! Pratite više ljudi da biste je popunili. {suggestions}",
|
"empty_column.home": "Vaša početna vremenska linija je prazna! Pratite više ljudi da biste je popunili.",
|
||||||
"empty_column.list": "U ovoj listi još nema ničega. Kada članovi ove liste objave nešto novo, pojaviće se ovde.",
|
"empty_column.list": "U ovoj listi još nema ničega. Kada članovi ove liste objave nešto novo, pojaviće se ovde.",
|
||||||
"empty_column.lists": "Još uvek nemate nijednu listu. Kada napravite jednu, ona će se pojaviti ovde.",
|
"empty_column.lists": "Još uvek nemate nijednu listu. Kada napravite jednu, ona će se pojaviti ovde.",
|
||||||
"empty_column.mutes": "Još uvek ne ignorišete nijednog korisnika.",
|
"empty_column.mutes": "Još uvek ne ignorišete nijednog korisnika.",
|
||||||
"empty_column.notification_requests": "Sve je čisto! Ovde nema ničega. Kada dobijete nova obaveštenja, ona će se pojaviti ovde u skladu sa vašim podešavanjima.",
|
"empty_column.notification_requests": "Sve je čisto! Ovde nema ničega. Kada dobijete nova obaveštenja, ona će se pojaviti ovde u skladu sa vašim podešavanjima.",
|
||||||
"empty_column.notifications": "Još uvek nemate nikakva obaveštenja. Kada drugi ljudi budu u interakciji sa vama, videćete to ovde.",
|
"empty_column.notifications": "Još uvek nemate nikakva obaveštenja. Kada drugi ljudi budu u interakciji sa vama, videćete to ovde.",
|
||||||
"empty_column.public": "Ovde nema ničega! Napišite nešto javno ili ručno pratite korisnike sa drugih servera da biste ovo popunili",
|
"empty_column.public": "Ovde nema ničega! Napišite nešto javno ili ručno pratite korisnike sa drugih servera da biste ovo popunili",
|
||||||
"error.unexpected_crash.explanation": "Zbog greške u našem kodu ili problema sa kompatibilnošću pregledača, ova stranica se nije mogla pravilno prikazati.",
|
"error.unexpected_crash.explanation": "Zbog greške u našem kodu ili problema sa kompatibilnošću pregledača, ova stranica se nije mogla pravilno prikazati.",
|
||||||
|
@ -267,6 +297,7 @@
|
||||||
"filter_modal.select_filter.subtitle": "Koristite postojeću kategoriju ili kreirajte novu",
|
"filter_modal.select_filter.subtitle": "Koristite postojeću kategoriju ili kreirajte novu",
|
||||||
"filter_modal.select_filter.title": "Filtriraj ovu objavu",
|
"filter_modal.select_filter.title": "Filtriraj ovu objavu",
|
||||||
"filter_modal.title.status": "Filtriraj objavu",
|
"filter_modal.title.status": "Filtriraj objavu",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {pominjanje} few {pominjanja} other {pominjanja}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Obaveštenja od {count, plural, =0 {nikoga koga možda poznajete} one {# osobe koju možda poznajete} few {# osobe koje možda poznajete} other {# osoba koje možda poznajete}}",
|
"filtered_notifications_banner.pending_requests": "Obaveštenja od {count, plural, =0 {nikoga koga možda poznajete} one {# osobe koju možda poznajete} few {# osobe koje možda poznajete} other {# osoba koje možda poznajete}}",
|
||||||
"filtered_notifications_banner.title": "Filtrirana obaveštenja",
|
"filtered_notifications_banner.title": "Filtrirana obaveštenja",
|
||||||
"firehose.all": "Sve",
|
"firehose.all": "Sve",
|
||||||
|
@ -279,7 +310,7 @@
|
||||||
"follow_suggestions.dismiss": "Ne prikazuj ponovo",
|
"follow_suggestions.dismiss": "Ne prikazuj ponovo",
|
||||||
"follow_suggestions.hints.featured": "Ovaj profil je ručno izabrao tim {domain}.",
|
"follow_suggestions.hints.featured": "Ovaj profil je ručno izabrao tim {domain}.",
|
||||||
"follow_suggestions.hints.friends_of_friends": "Ovaj profil je popularan među ljudima koje pratite.",
|
"follow_suggestions.hints.friends_of_friends": "Ovaj profil je popularan među ljudima koje pratite.",
|
||||||
"follow_suggestions.hints.most_followed": "Ovaj profil je jedan od najpraćenijih na {domain}.",
|
"follow_suggestions.hints.most_followed": "Ovaj profil je jedan od najpraćenijih na {domain}.",
|
||||||
"follow_suggestions.hints.most_interactions": "Ovaj profil je nedavno dobio veliku pažnju na {domain}.",
|
"follow_suggestions.hints.most_interactions": "Ovaj profil je nedavno dobio veliku pažnju na {domain}.",
|
||||||
"follow_suggestions.hints.similar_to_recently_followed": "Ovaj profil je sličan profilima koje ste nedavno zapratili.",
|
"follow_suggestions.hints.similar_to_recently_followed": "Ovaj profil je sličan profilima koje ste nedavno zapratili.",
|
||||||
"follow_suggestions.personalized_suggestion": "Personalizovani predlog",
|
"follow_suggestions.personalized_suggestion": "Personalizovani predlog",
|
||||||
|
@ -315,7 +346,7 @@
|
||||||
"home.column_settings.show_reblogs": "Prikaži podržavanja",
|
"home.column_settings.show_reblogs": "Prikaži podržavanja",
|
||||||
"home.column_settings.show_replies": "Prikaži odgovore",
|
"home.column_settings.show_replies": "Prikaži odgovore",
|
||||||
"home.hide_announcements": "Sakrij najave",
|
"home.hide_announcements": "Sakrij najave",
|
||||||
"home.pending_critical_update.body": "Ažurirajte svoj Mastodon server što je pre moguće!",
|
"home.pending_critical_update.body": "Ažurirajte svoj Mastodon server što je pre moguće!",
|
||||||
"home.pending_critical_update.link": "Pogledajte ažuriranja",
|
"home.pending_critical_update.link": "Pogledajte ažuriranja",
|
||||||
"home.pending_critical_update.title": "Dostupno je kritično bezbednosno ažuriranje!",
|
"home.pending_critical_update.title": "Dostupno je kritično bezbednosno ažuriranje!",
|
||||||
"home.show_announcements": "Prijaži najave",
|
"home.show_announcements": "Prijaži najave",
|
||||||
|
@ -329,7 +360,7 @@
|
||||||
"interaction_modal.on_another_server": "Na drugom serveru",
|
"interaction_modal.on_another_server": "Na drugom serveru",
|
||||||
"interaction_modal.on_this_server": "Na ovom serveru",
|
"interaction_modal.on_this_server": "Na ovom serveru",
|
||||||
"interaction_modal.sign_in": "Niste prijavljeni na ovaj server. Gde je hostovan vaš nalog?",
|
"interaction_modal.sign_in": "Niste prijavljeni na ovaj server. Gde je hostovan vaš nalog?",
|
||||||
"interaction_modal.sign_in_hint": "Savet: To je veb sajt na kome ste se registrovali. Ako se ne sećate, potražite e-poruku dobrodošlice u svom prijemnom sandučetu. Takođe možete uneti svoje puno korisničko ime! (npr. @Mastodon@mastodon.social)",
|
"interaction_modal.sign_in_hint": "Savet: To je veb sajt na kome ste se registrovali. Ako se ne sećate, potražite e-poruku dobrodošlice u svom prijemnom sandučetu. Takođe možete uneti svoje puno korisničko ime! (npr. @Mastodon@mastodon.social)",
|
||||||
"interaction_modal.title.favourite": "Označi objavu korisnika {name} kao omiljenu",
|
"interaction_modal.title.favourite": "Označi objavu korisnika {name} kao omiljenu",
|
||||||
"interaction_modal.title.follow": "Zaprati {name}",
|
"interaction_modal.title.follow": "Zaprati {name}",
|
||||||
"interaction_modal.title.reblog": "Podrži objavu korisnika {name}",
|
"interaction_modal.title.reblog": "Podrži objavu korisnika {name}",
|
||||||
|
@ -397,6 +428,15 @@
|
||||||
"loading_indicator.label": "Učitavanje…",
|
"loading_indicator.label": "Učitavanje…",
|
||||||
"media_gallery.toggle_visible": "{number, plural, one {Sakrij sliku} few {Sakrij slike} other {Sakrij slike}}",
|
"media_gallery.toggle_visible": "{number, plural, one {Sakrij sliku} few {Sakrij slike} other {Sakrij slike}}",
|
||||||
"moved_to_account_banner.text": "Vaš nalog {disabledAccount} je trenutno onemogućen jer ste prešli na {movedToAccount}.",
|
"moved_to_account_banner.text": "Vaš nalog {disabledAccount} je trenutno onemogućen jer ste prešli na {movedToAccount}.",
|
||||||
|
"mute_modal.hide_from_notifications": "Sakrij iz obaveštenja",
|
||||||
|
"mute_modal.hide_options": "Sakrij opcije",
|
||||||
|
"mute_modal.indefinite": "Dok ih ne uklonim iz ignorisanih",
|
||||||
|
"mute_modal.show_options": "Prikaži opcije",
|
||||||
|
"mute_modal.they_can_mention_and_follow": "Mogu da vas pominju i prate, ali ih nećete videti.",
|
||||||
|
"mute_modal.they_wont_know": "Neće znati da su ignorisani.",
|
||||||
|
"mute_modal.title": "Ignorisati korisnika?",
|
||||||
|
"mute_modal.you_wont_see_mentions": "Nećete videti objave koje ga pominju.",
|
||||||
|
"mute_modal.you_wont_see_posts": "I dalje može da vidi vaše objave, ali vi nećete videti njegove.",
|
||||||
"navigation_bar.about": "Osnovni podaci",
|
"navigation_bar.about": "Osnovni podaci",
|
||||||
"navigation_bar.advanced_interface": "Otvori u naprednom veb okruženju",
|
"navigation_bar.advanced_interface": "Otvori u naprednom veb okruženju",
|
||||||
"navigation_bar.blocks": "Blokirani korisnici",
|
"navigation_bar.blocks": "Blokirani korisnici",
|
||||||
|
@ -432,6 +472,11 @@
|
||||||
"notification.own_poll": "Vaša anketa je završena",
|
"notification.own_poll": "Vaša anketa je završena",
|
||||||
"notification.poll": "Završena je anketa u kojoj ste glasali",
|
"notification.poll": "Završena je anketa u kojoj ste glasali",
|
||||||
"notification.reblog": "{name} je podržao vašu objavu",
|
"notification.reblog": "{name} je podržao vašu objavu",
|
||||||
|
"notification.relationships_severance_event": "Izgubljena veza sa {name}",
|
||||||
|
"notification.relationships_severance_event.account_suspension": "Administrator sa {from} je suspendovao {target}, što znači da više ne možete da primate ažuriranja od njih niti da komunicirate sa njima.",
|
||||||
|
"notification.relationships_severance_event.domain_block": "Administrator sa {from} je blokirao {target}, uključujući vaše pratioce: {followersCount} i {followingCount, plural, one {# nalog} few {# naloga} other {# naloga}} koje pratite.",
|
||||||
|
"notification.relationships_severance_event.learn_more": "Saznajte više",
|
||||||
|
"notification.relationships_severance_event.user_domain_block": "Blokirači ste {target}, uključujući vaše pratioce: {followersCount} i {followingCount, plural, one {# nalog} few {# naloga} other {# naloga}} koje pratite.",
|
||||||
"notification.status": "{name} je upravo objavio",
|
"notification.status": "{name} je upravo objavio",
|
||||||
"notification.update": "{name} je uredio objavu",
|
"notification.update": "{name} je uredio objavu",
|
||||||
"notification_requests.accept": "Prihvati",
|
"notification_requests.accept": "Prihvati",
|
||||||
|
@ -444,6 +489,8 @@
|
||||||
"notifications.column_settings.admin.sign_up": "Nove ragistracije:",
|
"notifications.column_settings.admin.sign_up": "Nove ragistracije:",
|
||||||
"notifications.column_settings.alert": "Obaveštenja na radnoj površini",
|
"notifications.column_settings.alert": "Obaveštenja na radnoj površini",
|
||||||
"notifications.column_settings.favourite": "Omiljeno:",
|
"notifications.column_settings.favourite": "Omiljeno:",
|
||||||
|
"notifications.column_settings.filter_bar.advanced": "Prikaži sve kategorije",
|
||||||
|
"notifications.column_settings.filter_bar.category": "Traka za brzo filtriranje",
|
||||||
"notifications.column_settings.follow": "Novi pratioci:",
|
"notifications.column_settings.follow": "Novi pratioci:",
|
||||||
"notifications.column_settings.follow_request": "Novi zahtevi za praćenje:",
|
"notifications.column_settings.follow_request": "Novi zahtevi za praćenje:",
|
||||||
"notifications.column_settings.mention": "Pominjanja:",
|
"notifications.column_settings.mention": "Pominjanja:",
|
||||||
|
@ -471,7 +518,7 @@
|
||||||
"notifications.permission_required": "Obaveštenja na radnoj površini nisu dostupna jer potrebna dozvola nije dodeljena.",
|
"notifications.permission_required": "Obaveštenja na radnoj površini nisu dostupna jer potrebna dozvola nije dodeljena.",
|
||||||
"notifications.policy.filter_new_accounts.hint": "Kreirano {days, plural, one {u poslednjeg # dana} few {u poslednja # dana} other {u poslednjih # dana}}",
|
"notifications.policy.filter_new_accounts.hint": "Kreirano {days, plural, one {u poslednjeg # dana} few {u poslednja # dana} other {u poslednjih # dana}}",
|
||||||
"notifications.policy.filter_new_accounts_title": "Novi nalozi",
|
"notifications.policy.filter_new_accounts_title": "Novi nalozi",
|
||||||
"notifications.policy.filter_not_followers_hint": "Uključujući ljude koji su vas pratili manje od {days, plural, one {# dana} few {# dana} other {# dana}}",
|
"notifications.policy.filter_not_followers_hint": "Uključujući ljude koji su vas pratili manje od {days, plural, one {# dana} few {# dana} other {# dana}}",
|
||||||
"notifications.policy.filter_not_followers_title": "Ljudi koji vas ne prate",
|
"notifications.policy.filter_not_followers_title": "Ljudi koji vas ne prate",
|
||||||
"notifications.policy.filter_not_following_hint": "Dok ih ručno ne odobrite",
|
"notifications.policy.filter_not_following_hint": "Dok ih ručno ne odobrite",
|
||||||
"notifications.policy.filter_not_following_title": "Ljudi koje ne pratite",
|
"notifications.policy.filter_not_following_title": "Ljudi koje ne pratite",
|
||||||
|
@ -483,14 +530,14 @@
|
||||||
"notifications_permission_banner.title": "Nikada ništa ne propustite",
|
"notifications_permission_banner.title": "Nikada ništa ne propustite",
|
||||||
"onboarding.action.back": "Vrati me nazad",
|
"onboarding.action.back": "Vrati me nazad",
|
||||||
"onboarding.actions.back": "Vrati me nazad",
|
"onboarding.actions.back": "Vrati me nazad",
|
||||||
"onboarding.actions.go_to_explore": "Pogledaj šta je u trendu",
|
"onboarding.actions.go_to_explore": "Odvedi me u trending",
|
||||||
"onboarding.actions.go_to_home": "Idi na početnu stranicu",
|
"onboarding.actions.go_to_home": "Odvedi me na početnu stranicu",
|
||||||
"onboarding.compose.template": "Zdravo #Mastodon!",
|
"onboarding.compose.template": "Zdravo #Mastodon!",
|
||||||
"onboarding.follows.empty": "Nažalost, trenutno se ne mogu prikazati rezultati. Možete pokušati sa korišćenjem pretrage ili pregledanjem stranice za istraživanje da biste pronašli ljude koje ćete pratiti ili pokušajte ponovo kasnije.",
|
"onboarding.follows.empty": "Nažalost, trenutno se ne mogu prikazati rezultati. Možete pokušati sa korišćenjem pretrage ili pregledanjem stranice za istraživanje da biste pronašli ljude koje ćete pratiti ili pokušajte ponovo kasnije.",
|
||||||
"onboarding.follows.lead": "Vi sami birate svoju početnu stranicu. Što više ljudi pratite, to će biti aktivnije i zanimljivije. Ovi profili mogu biti dobra polazna tačka—uvek možete da ih prestanete pratiti kasnije!",
|
"onboarding.follows.lead": "Vaša početna stranica je primarni način da doživite Mastodon. Što više ljudi budete pratili, to će biti aktivnije i zanimljivije. Da biste započeli, evo nekoliko predloga:",
|
||||||
"onboarding.follows.title": "Personalizujte svoju početnu stranicu",
|
"onboarding.follows.title": "Personalizujte svoju početnu stranicu",
|
||||||
"onboarding.profile.discoverable": "Neka se moj profil može otkriti drugima",
|
"onboarding.profile.discoverable": "Neka se moj profil može otkriti drugima",
|
||||||
"onboarding.profile.discoverable_hint": "Kada omogućite mogućnost otkrivanja na Mastodon-u, vaše objave se mogu pojaviti u rezultatima pretrage i u trendu, a vaš profil može biti predložen ljudima sa sličnim interesovanjima.",
|
"onboarding.profile.discoverable_hint": "Kada omogućite mogućnost otkrivanja na Mastodon-u, vaše objave se mogu pojaviti u rezultatima pretrage i u trendu, a vaš profil može biti predložen ljudima sa sličnim interesovanjima.",
|
||||||
"onboarding.profile.display_name": "Ime za prikaz",
|
"onboarding.profile.display_name": "Ime za prikaz",
|
||||||
"onboarding.profile.display_name_hint": "Vaše puno ime ili nadimak…",
|
"onboarding.profile.display_name_hint": "Vaše puno ime ili nadimak…",
|
||||||
"onboarding.profile.lead": "Ovo možete uvek dovršiti kasnije u podešavanjima, gde je dostupno još više opcija prilagođavanja.",
|
"onboarding.profile.lead": "Ovo možete uvek dovršiti kasnije u podešavanjima, gde je dostupno još više opcija prilagođavanja.",
|
||||||
|
@ -504,17 +551,17 @@
|
||||||
"onboarding.share.message": "Ja sam {username} na #Mastodon-u! Pratite me na {url}",
|
"onboarding.share.message": "Ja sam {username} na #Mastodon-u! Pratite me na {url}",
|
||||||
"onboarding.share.next_steps": "Mogući sledeći koraci:",
|
"onboarding.share.next_steps": "Mogući sledeći koraci:",
|
||||||
"onboarding.share.title": "Podelite svoj profil",
|
"onboarding.share.title": "Podelite svoj profil",
|
||||||
"onboarding.start.lead": "Vaš novi Mastodon nalog je spreman. Evo kako to možete iskoristiti na najbolji način:",
|
"onboarding.start.lead": "Sada ste deo Mastodon-a, jedinstvene, decentralizovane platforme društvenih medija na kojoj vi – a ne algoritam – birate svoje iskustvo. Hajde da počnemo na ovoj novoj društvenoj granici:",
|
||||||
"onboarding.start.skip": "Želite da preskočite?",
|
"onboarding.start.skip": "Ne treba vam pomoć za početak?",
|
||||||
"onboarding.start.title": "Uspeli ste!",
|
"onboarding.start.title": "Uspeli ste!",
|
||||||
"onboarding.steps.follow_people.body": "Vi sami birate svoju početnu stranicu. Hajde da ga ispunimo zanimljivim ljudima.",
|
"onboarding.steps.follow_people.body": "Praćenje zanimljivih ljudi je ono o čemu se radi u Mastodon-u.",
|
||||||
"onboarding.steps.follow_people.title": "Personalizujte svoju početnu stranicu",
|
"onboarding.steps.follow_people.title": "Personalizujte svoju početnu stranicu",
|
||||||
"onboarding.steps.publish_status.body": "Reci zdravo svetu.",
|
"onboarding.steps.publish_status.body": "Pozdravite svet tekstom, slikama, video snimcima ili anketama {emoji}",
|
||||||
"onboarding.steps.publish_status.title": "Napišite svoju prvu objavu",
|
"onboarding.steps.publish_status.title": "Napišite svoju prvu objavu",
|
||||||
"onboarding.steps.setup_profile.body": "Veća je verovatnoća da će drugi komunicirati sa vama sa popunjenim profilom.",
|
"onboarding.steps.setup_profile.body": "Pojačajte svoje interakcije tako što ćete imati sveobuhvatan profil.",
|
||||||
"onboarding.steps.setup_profile.title": "Prilagodite svoj profil",
|
"onboarding.steps.setup_profile.title": "Personalizujte svoj profil",
|
||||||
"onboarding.steps.share_profile.body": "Neka vaši prijatelji znaju kako da vas pronađu na Mastodon-u!",
|
"onboarding.steps.share_profile.body": "Neka vaši prijatelji znaju kako da vas pronađu na Mastodon-u!",
|
||||||
"onboarding.steps.share_profile.title": "Podelite svoj profil",
|
"onboarding.steps.share_profile.title": "Podelite svoj Mastodon profil",
|
||||||
"onboarding.tips.2fa": "<strong>Da li ste znali?</strong> Možete da zaštitite svoj nalog podešavanjem dvostruke potvrde identiteta u podešavanjima naloga. Radi sa bilo kojom TOTP aplikacijom po vašem izboru, nije potreban broj telefona!",
|
"onboarding.tips.2fa": "<strong>Da li ste znali?</strong> Možete da zaštitite svoj nalog podešavanjem dvostruke potvrde identiteta u podešavanjima naloga. Radi sa bilo kojom TOTP aplikacijom po vašem izboru, nije potreban broj telefona!",
|
||||||
"onboarding.tips.accounts_from_other_servers": "<strong>Da li ste znali?</strong> Pošto je Mastodon decentralizovan, neki profili na koje naiđete biće smešteni na serverima različitim od vašeg. A ipak možete da komunicirate sa njima besprekorno! Njihov server je u drugoj polovini njihovog korisničkog imena!",
|
"onboarding.tips.accounts_from_other_servers": "<strong>Da li ste znali?</strong> Pošto je Mastodon decentralizovan, neki profili na koje naiđete biće smešteni na serverima različitim od vašeg. A ipak možete da komunicirate sa njima besprekorno! Njihov server je u drugoj polovini njihovog korisničkog imena!",
|
||||||
"onboarding.tips.migration": "<strong>Da li ste znali?</strong> Ako smatrate da {domain} nije odličan izbor servera za vas u budućnosti, možete da pređete na drugi Mastodon server bez gubitka pratilaca. Možete čak i da hostujete sopstveni server!",
|
"onboarding.tips.migration": "<strong>Da li ste znali?</strong> Ako smatrate da {domain} nije odličan izbor servera za vas u budućnosti, možete da pređete na drugi Mastodon server bez gubitka pratilaca. Možete čak i da hostujete sopstveni server!",
|
||||||
|
@ -539,7 +586,7 @@
|
||||||
"privacy.private.short": "Pratioci",
|
"privacy.private.short": "Pratioci",
|
||||||
"privacy.public.long": "Bilo ko na Mastodon-u i van njega",
|
"privacy.public.long": "Bilo ko na Mastodon-u i van njega",
|
||||||
"privacy.public.short": "Javno",
|
"privacy.public.short": "Javno",
|
||||||
"privacy.unlisted.additional": "Ovo se ponaša potpuno kao javno, osim što se objava neće pojavljivati u izvorima uživo ili heš oznakama, istraživanjima ili pretrazi Mastodon-a, čak i ako ste uključeni u celom nalogu.",
|
"privacy.unlisted.additional": "Ovo se ponaša potpuno kao javno, osim što se objava neće pojavljivati u izvorima uživo ili heš oznakama, istraživanjima ili pretrazi Mastodon-a, čak i ako ste uključeni u celom nalogu.",
|
||||||
"privacy.unlisted.long": "Manje algoritamskih fanfara",
|
"privacy.unlisted.long": "Manje algoritamskih fanfara",
|
||||||
"privacy.unlisted.short": "Tiha javnost",
|
"privacy.unlisted.short": "Tiha javnost",
|
||||||
"privacy_policy.last_updated": "Poslednje ažuriranje {date}",
|
"privacy_policy.last_updated": "Poslednje ažuriranje {date}",
|
||||||
|
|
|
@ -220,7 +220,16 @@
|
||||||
"domain_pill.activitypub_lets_connect": "Омогућује вам да се повежете и комуницирате са људима не само на Mastodon-у, већ и у различитим друштвеним апликацијама.",
|
"domain_pill.activitypub_lets_connect": "Омогућује вам да се повежете и комуницирате са људима не само на Mastodon-у, већ и у различитим друштвеним апликацијама.",
|
||||||
"domain_pill.activitypub_like_language": "ActivityPub је као језик којим Mastodon говори са другим друштвеним мрежама.",
|
"domain_pill.activitypub_like_language": "ActivityPub је као језик којим Mastodon говори са другим друштвеним мрежама.",
|
||||||
"domain_pill.server": "Сервер",
|
"domain_pill.server": "Сервер",
|
||||||
|
"domain_pill.their_handle": "Његов регулатор:",
|
||||||
|
"domain_pill.their_server": "Њихов дигитални дом, где живе све њихове објаве.",
|
||||||
|
"domain_pill.their_username": "Њихов јединствени идентификатор на њиховом серверу. Могуће је пронаћи кориснике са истим корисничким именом на различитим серверима.",
|
||||||
"domain_pill.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.your_handle": "Ваш регулатор:",
|
||||||
|
"domain_pill.your_server": "Ваш дигитални дом, где живе све ваше објаве. Не свиђа вам се овај? Пренесите сервере у било које време и доведите и своје пратиоце.",
|
||||||
|
"domain_pill.your_username": "Њихов јединствени идентификатор на њиховом серверу. Могуће је пронаћи кориснике са истим корисничким именом на различитим серверима.",
|
||||||
"embed.instructions": "Уградите ову објаву на свој веб сајт копирањем кода испод.",
|
"embed.instructions": "Уградите ову објаву на свој веб сајт копирањем кода испод.",
|
||||||
"embed.preview": "Ево како ће то изгледати:",
|
"embed.preview": "Ево како ће то изгледати:",
|
||||||
"emoji_button.activity": "Активности",
|
"emoji_button.activity": "Активности",
|
||||||
|
@ -288,6 +297,7 @@
|
||||||
"filter_modal.select_filter.subtitle": "Користите постојећу категорију или креирајте нову",
|
"filter_modal.select_filter.subtitle": "Користите постојећу категорију или креирајте нову",
|
||||||
"filter_modal.select_filter.title": "Филтрирај ову објаву",
|
"filter_modal.select_filter.title": "Филтрирај ову објаву",
|
||||||
"filter_modal.title.status": "Филтрирај објаву",
|
"filter_modal.title.status": "Филтрирај објаву",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {помињање} few {помињања} other {помињања}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Обавештења од {count, plural, =0 {никога кога можда познајете} one {# особе коју можда познајете} few {# особе које можда познајете} other {# особа које можда познајете}}",
|
"filtered_notifications_banner.pending_requests": "Обавештења од {count, plural, =0 {никога кога можда познајете} one {# особе коју можда познајете} few {# особе које можда познајете} other {# особа које можда познајете}}",
|
||||||
"filtered_notifications_banner.title": "Филтрирана обавештења",
|
"filtered_notifications_banner.title": "Филтрирана обавештења",
|
||||||
"firehose.all": "Све",
|
"firehose.all": "Све",
|
||||||
|
@ -462,7 +472,11 @@
|
||||||
"notification.own_poll": "Ваша анкета је завршена",
|
"notification.own_poll": "Ваша анкета је завршена",
|
||||||
"notification.poll": "Завршена је анкета у којој сте гласали",
|
"notification.poll": "Завршена је анкета у којој сте гласали",
|
||||||
"notification.reblog": "{name} је подржао вашу објаву",
|
"notification.reblog": "{name} је подржао вашу објаву",
|
||||||
|
"notification.relationships_severance_event": "Изгубљена веза са {name}",
|
||||||
|
"notification.relationships_severance_event.account_suspension": "Администратор са {from} је суспендовао {target}, што значи да више не можете да примате ажурирања од њих нити да комуницирате са њима.",
|
||||||
|
"notification.relationships_severance_event.domain_block": "Администратор са {from} је блокирао {target}, укључујући ваше пратиоце: {followersCount} и {followingCount, plural, one {# налог} few {# налогa} other {# налога}} које пратите.",
|
||||||
"notification.relationships_severance_event.learn_more": "Сазнајте више",
|
"notification.relationships_severance_event.learn_more": "Сазнајте више",
|
||||||
|
"notification.relationships_severance_event.user_domain_block": "Блокирачи сте {target}, укључујући ваше пратиоце: {followersCount} и {followingCount, plural, one {# налог} few {# налогa} other {# налога}} које пратите.",
|
||||||
"notification.status": "{name} је управо објавио",
|
"notification.status": "{name} је управо објавио",
|
||||||
"notification.update": "{name} је уредио објаву",
|
"notification.update": "{name} је уредио објаву",
|
||||||
"notification_requests.accept": "Прихвати",
|
"notification_requests.accept": "Прихвати",
|
||||||
|
@ -476,6 +490,7 @@
|
||||||
"notifications.column_settings.alert": "Обавештења на радној површини",
|
"notifications.column_settings.alert": "Обавештења на радној површини",
|
||||||
"notifications.column_settings.favourite": "Омиљено:",
|
"notifications.column_settings.favourite": "Омиљено:",
|
||||||
"notifications.column_settings.filter_bar.advanced": "Прикажи све категорије",
|
"notifications.column_settings.filter_bar.advanced": "Прикажи све категорије",
|
||||||
|
"notifications.column_settings.filter_bar.category": "Трака за брзо филтрирање",
|
||||||
"notifications.column_settings.follow": "Нови пратиоци:",
|
"notifications.column_settings.follow": "Нови пратиоци:",
|
||||||
"notifications.column_settings.follow_request": "Нови захтеви за праћење:",
|
"notifications.column_settings.follow_request": "Нови захтеви за праћење:",
|
||||||
"notifications.column_settings.mention": "Помињања:",
|
"notifications.column_settings.mention": "Помињања:",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "Filtrera detta inlägg",
|
"filter_modal.select_filter.title": "Filtrera detta inlägg",
|
||||||
"filter_modal.title.status": "Filtrera ett inlägg",
|
"filter_modal.title.status": "Filtrera ett inlägg",
|
||||||
"filtered_notifications_banner.pending_requests": "Aviseringar från {count, plural, =0 {ingen} one {en person} other {# personer}} du kanske känner",
|
"filtered_notifications_banner.pending_requests": "Aviseringar från {count, plural, =0 {ingen} one {en person} other {# personer}} du kanske känner",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {privat omnämnande} other {privat omnämnande}}",
|
|
||||||
"filtered_notifications_banner.title": "Filtrerade aviseringar",
|
"filtered_notifications_banner.title": "Filtrerade aviseringar",
|
||||||
"firehose.all": "Allt",
|
"firehose.all": "Allt",
|
||||||
"firehose.local": "Denna server",
|
"firehose.local": "Denna server",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "ใช้หมวดหมู่ที่มีอยู่หรือสร้างหมวดหมู่ใหม่",
|
"filter_modal.select_filter.subtitle": "ใช้หมวดหมู่ที่มีอยู่หรือสร้างหมวดหมู่ใหม่",
|
||||||
"filter_modal.select_filter.title": "กรองโพสต์นี้",
|
"filter_modal.select_filter.title": "กรองโพสต์นี้",
|
||||||
"filter_modal.title.status": "กรองโพสต์",
|
"filter_modal.title.status": "กรองโพสต์",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, other {การกล่าวถึง}}",
|
||||||
"filtered_notifications_banner.pending_requests": "การแจ้งเตือนจาก {count, plural, =0 {ไม่มีใคร} other {# คน}} ที่คุณอาจรู้จัก",
|
"filtered_notifications_banner.pending_requests": "การแจ้งเตือนจาก {count, plural, =0 {ไม่มีใคร} other {# คน}} ที่คุณอาจรู้จัก",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, other {การกล่าวถึงแบบส่วนตัว}}",
|
|
||||||
"filtered_notifications_banner.title": "การแจ้งเตือนที่กรองอยู่",
|
"filtered_notifications_banner.title": "การแจ้งเตือนที่กรองอยู่",
|
||||||
"firehose.all": "ทั้งหมด",
|
"firehose.all": "ทั้งหมด",
|
||||||
"firehose.local": "เซิร์ฟเวอร์นี้",
|
"firehose.local": "เซิร์ฟเวอร์นี้",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Mevcut bir kategoriyi kullan veya yeni bir tane oluştur",
|
"filter_modal.select_filter.subtitle": "Mevcut bir kategoriyi kullan veya yeni bir tane oluştur",
|
||||||
"filter_modal.select_filter.title": "Bu gönderiyi süzgeçle",
|
"filter_modal.select_filter.title": "Bu gönderiyi süzgeçle",
|
||||||
"filter_modal.title.status": "Bir gönderi süzgeçle",
|
"filter_modal.title.status": "Bir gönderi süzgeçle",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, one {bahsetme} other {bahsetme}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Bildiğiniz {count, plural, =0 {hiç kimseden} one {bir kişiden} other {# kişiden}} bildirim",
|
"filtered_notifications_banner.pending_requests": "Bildiğiniz {count, plural, =0 {hiç kimseden} one {bir kişiden} other {# kişiden}} bildirim",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {özel değinme} other {özel değinme}}",
|
|
||||||
"filtered_notifications_banner.title": "Filtrelenmiş bildirimler",
|
"filtered_notifications_banner.title": "Filtrelenmiş bildirimler",
|
||||||
"firehose.all": "Tümü",
|
"firehose.all": "Tümü",
|
||||||
"firehose.local": "Bu sunucu",
|
"firehose.local": "Bu sunucu",
|
||||||
|
@ -468,7 +468,7 @@
|
||||||
"notification.favourite": "{name} gönderinizi beğendi",
|
"notification.favourite": "{name} gönderinizi beğendi",
|
||||||
"notification.follow": "{name} seni takip etti",
|
"notification.follow": "{name} seni takip etti",
|
||||||
"notification.follow_request": "{name} size takip isteği gönderdi",
|
"notification.follow_request": "{name} size takip isteği gönderdi",
|
||||||
"notification.mention": "{name} sana değindi",
|
"notification.mention": "{name} senden bahsetti",
|
||||||
"notification.own_poll": "Anketiniz sona erdi",
|
"notification.own_poll": "Anketiniz sona erdi",
|
||||||
"notification.poll": "Oy verdiğiniz bir anket sona erdi",
|
"notification.poll": "Oy verdiğiniz bir anket sona erdi",
|
||||||
"notification.reblog": "{name} gönderini yeniden paylaştı",
|
"notification.reblog": "{name} gönderini yeniden paylaştı",
|
||||||
|
@ -493,7 +493,7 @@
|
||||||
"notifications.column_settings.filter_bar.category": "Hızlı filtre çubuğu",
|
"notifications.column_settings.filter_bar.category": "Hızlı filtre çubuğu",
|
||||||
"notifications.column_settings.follow": "Yeni takipçiler:",
|
"notifications.column_settings.follow": "Yeni takipçiler:",
|
||||||
"notifications.column_settings.follow_request": "Yeni takip istekleri:",
|
"notifications.column_settings.follow_request": "Yeni takip istekleri:",
|
||||||
"notifications.column_settings.mention": "Değinmeler:",
|
"notifications.column_settings.mention": "Bahsetmeler:",
|
||||||
"notifications.column_settings.poll": "Anket sonuçları:",
|
"notifications.column_settings.poll": "Anket sonuçları:",
|
||||||
"notifications.column_settings.push": "Anlık bildirimler",
|
"notifications.column_settings.push": "Anlık bildirimler",
|
||||||
"notifications.column_settings.reblog": "Yeniden paylaşanlar:",
|
"notifications.column_settings.reblog": "Yeniden paylaşanlar:",
|
||||||
|
@ -507,7 +507,7 @@
|
||||||
"notifications.filter.boosts": "Yeniden paylaşımlar",
|
"notifications.filter.boosts": "Yeniden paylaşımlar",
|
||||||
"notifications.filter.favourites": "Favorilerin",
|
"notifications.filter.favourites": "Favorilerin",
|
||||||
"notifications.filter.follows": "Takip edilenler",
|
"notifications.filter.follows": "Takip edilenler",
|
||||||
"notifications.filter.mentions": "Değinmeler",
|
"notifications.filter.mentions": "Bahsetmeler",
|
||||||
"notifications.filter.polls": "Anket sonuçları",
|
"notifications.filter.polls": "Anket sonuçları",
|
||||||
"notifications.filter.statuses": "Takip ettiğiniz kişilerden gelen güncellemeler",
|
"notifications.filter.statuses": "Takip ettiğiniz kişilerden gelen güncellemeler",
|
||||||
"notifications.grant_permission": "İzin ver.",
|
"notifications.grant_permission": "İzin ver.",
|
||||||
|
@ -777,10 +777,10 @@
|
||||||
"upload_form.edit": "Düzenle",
|
"upload_form.edit": "Düzenle",
|
||||||
"upload_form.thumbnail": "Küçük resmi değiştir",
|
"upload_form.thumbnail": "Küçük resmi değiştir",
|
||||||
"upload_form.video_description": "İşitme kaybı veya görme engeli olan kişiler için açıklama ekleyiniz",
|
"upload_form.video_description": "İşitme kaybı veya görme engeli olan kişiler için açıklama ekleyiniz",
|
||||||
"upload_modal.analyzing_picture": "Resim analiz ediliyor…",
|
"upload_modal.analyzing_picture": "Görsel analiz ediliyor…",
|
||||||
"upload_modal.apply": "Uygula",
|
"upload_modal.apply": "Uygula",
|
||||||
"upload_modal.applying": "Uygulanıyor…",
|
"upload_modal.applying": "Uygulanıyor…",
|
||||||
"upload_modal.choose_image": "Resim seç",
|
"upload_modal.choose_image": "Görsel seç",
|
||||||
"upload_modal.description_placeholder": "Pijamalı hasta yağız şoföre çabucak güvendi",
|
"upload_modal.description_placeholder": "Pijamalı hasta yağız şoföre çabucak güvendi",
|
||||||
"upload_modal.detect_text": "Resimdeki metni algıla",
|
"upload_modal.detect_text": "Resimdeki metni algıla",
|
||||||
"upload_modal.edit_media": "Medyayı düzenle",
|
"upload_modal.edit_media": "Medyayı düzenle",
|
||||||
|
|
|
@ -287,7 +287,6 @@
|
||||||
"filter_modal.select_filter.title": "Фільтрувати цей допис",
|
"filter_modal.select_filter.title": "Фільтрувати цей допис",
|
||||||
"filter_modal.title.status": "Фільтрувати допис",
|
"filter_modal.title.status": "Фільтрувати допис",
|
||||||
"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.private_mentions": "{count, plural, one {приватна згадка} few {приватні згадки} many {приватні згадки} other {приватна згадка}}",
|
|
||||||
"filtered_notifications_banner.title": "Відфільтровані сповіщення",
|
"filtered_notifications_banner.title": "Відфільтровані сповіщення",
|
||||||
"firehose.all": "Всі",
|
"firehose.all": "Всі",
|
||||||
"firehose.local": "Цей сервер",
|
"firehose.local": "Цей сервер",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "Sử dụng một danh mục hiện có hoặc tạo một danh mục mới",
|
"filter_modal.select_filter.subtitle": "Sử dụng một danh mục hiện có hoặc tạo một danh mục mới",
|
||||||
"filter_modal.select_filter.title": "Lọc tút này",
|
"filter_modal.select_filter.title": "Lọc tút này",
|
||||||
"filter_modal.title.status": "Lọc một tút",
|
"filter_modal.title.status": "Lọc một tút",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, other {lượt nhắc}}",
|
||||||
"filtered_notifications_banner.pending_requests": "Thông báo từ {count, plural, =0 {không ai} other {# người}} bạn có thể biết",
|
"filtered_notifications_banner.pending_requests": "Thông báo từ {count, plural, =0 {không ai} other {# người}} bạn có thể biết",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, other {lượt nhắc}}",
|
|
||||||
"filtered_notifications_banner.title": "Thông báo đã lọc",
|
"filtered_notifications_banner.title": "Thông báo đã lọc",
|
||||||
"firehose.all": "Toàn bộ",
|
"firehose.all": "Toàn bộ",
|
||||||
"firehose.local": "Máy chủ này",
|
"firehose.local": "Máy chủ này",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "使用一个已存在类别,或创建一个新类别",
|
"filter_modal.select_filter.subtitle": "使用一个已存在类别,或创建一个新类别",
|
||||||
"filter_modal.select_filter.title": "过滤此嘟文",
|
"filter_modal.select_filter.title": "过滤此嘟文",
|
||||||
"filter_modal.title.status": "过滤一条嘟文",
|
"filter_modal.title.status": "过滤一条嘟文",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, other {提及}}",
|
||||||
"filtered_notifications_banner.pending_requests": "来自你可能认识的 {count, plural, =0 {0 个人} other {# 个人}}的通知",
|
"filtered_notifications_banner.pending_requests": "来自你可能认识的 {count, plural, =0 {0 个人} other {# 个人}}的通知",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, other {私下提及}}",
|
|
||||||
"filtered_notifications_banner.title": "通知(已过滤)",
|
"filtered_notifications_banner.title": "通知(已过滤)",
|
||||||
"firehose.all": "全部",
|
"firehose.all": "全部",
|
||||||
"firehose.local": "此服务器",
|
"firehose.local": "此服务器",
|
||||||
|
|
|
@ -298,7 +298,6 @@
|
||||||
"filter_modal.select_filter.title": "過濾此帖文",
|
"filter_modal.select_filter.title": "過濾此帖文",
|
||||||
"filter_modal.title.status": "過濾一則帖文",
|
"filter_modal.title.status": "過濾一則帖文",
|
||||||
"filtered_notifications_banner.pending_requests": "來自 {count, plural, =0 {0 位} other {# 位}}你可能認識的人的通知",
|
"filtered_notifications_banner.pending_requests": "來自 {count, plural, =0 {0 位} other {# 位}}你可能認識的人的通知",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, one {則私人提及} other {則私人提及}}",
|
|
||||||
"filtered_notifications_banner.title": "已過濾之通知",
|
"filtered_notifications_banner.title": "已過濾之通知",
|
||||||
"firehose.all": "全部",
|
"firehose.all": "全部",
|
||||||
"firehose.local": "本伺服器",
|
"firehose.local": "本伺服器",
|
||||||
|
|
|
@ -297,8 +297,8 @@
|
||||||
"filter_modal.select_filter.subtitle": "使用既有的類別或是新增",
|
"filter_modal.select_filter.subtitle": "使用既有的類別或是新增",
|
||||||
"filter_modal.select_filter.title": "過濾此嘟文",
|
"filter_modal.select_filter.title": "過濾此嘟文",
|
||||||
"filter_modal.title.status": "過濾一則嘟文",
|
"filter_modal.title.status": "過濾一則嘟文",
|
||||||
|
"filtered_notifications_banner.mentions": "{count, plural, other {# 則提及}}",
|
||||||
"filtered_notifications_banner.pending_requests": "來自您可能認識的 {count, plural, =0 {0 人} other {# 人}} 之通知",
|
"filtered_notifications_banner.pending_requests": "來自您可能認識的 {count, plural, =0 {0 人} other {# 人}} 之通知",
|
||||||
"filtered_notifications_banner.private_mentions": "{count, plural, other {# 則私訊}}",
|
|
||||||
"filtered_notifications_banner.title": "已過濾之通知",
|
"filtered_notifications_banner.title": "已過濾之通知",
|
||||||
"firehose.all": "全部",
|
"firehose.all": "全部",
|
||||||
"firehose.local": "本站",
|
"firehose.local": "本站",
|
||||||
|
|
|
@ -9,7 +9,7 @@ class Vacuum::ImportsVacuum
|
||||||
private
|
private
|
||||||
|
|
||||||
def clean_unconfirmed_imports!
|
def clean_unconfirmed_imports!
|
||||||
BulkImport.where(state: :unconfirmed).where('created_at <= ?', 10.minutes.ago).reorder(nil).in_batches.delete_all
|
BulkImport.state_unconfirmed.where('created_at <= ?', 10.minutes.ago).reorder(nil).in_batches.delete_all
|
||||||
end
|
end
|
||||||
|
|
||||||
def clean_old_imports!
|
def clean_old_imports!
|
||||||
|
|
|
@ -59,11 +59,13 @@ class Announcement < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def statuses
|
def statuses
|
||||||
@statuses ||= if status_ids.nil?
|
@statuses ||= begin
|
||||||
[]
|
if status_ids.nil?
|
||||||
else
|
[]
|
||||||
Status.where(id: status_ids).distributable_visibility_for_anonymous
|
else
|
||||||
end
|
Status.with_includes.distributable_visibility_for_anonymous.where(id: status_ids)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def tags
|
def tags
|
||||||
|
|
|
@ -38,7 +38,7 @@ class BulkImport < ApplicationRecord
|
||||||
scheduled: 1,
|
scheduled: 1,
|
||||||
in_progress: 2,
|
in_progress: 2,
|
||||||
finished: 3,
|
finished: 3,
|
||||||
}
|
}, prefix: true
|
||||||
|
|
||||||
validates :type, presence: true
|
validates :type, presence: true
|
||||||
|
|
||||||
|
|
|
@ -35,40 +35,11 @@ module Account::Counters
|
||||||
raise ArgumentError, "Invalid key #{key}" unless ALLOWED_COUNTER_KEYS.include?(key)
|
raise ArgumentError, "Invalid key #{key}" unless ALLOWED_COUNTER_KEYS.include?(key)
|
||||||
raise ArgumentError, 'Do not call update_count! on dirty objects' if association(:account_stat).loaded? && account_stat&.changed? && account_stat.changed_attribute_names_to_save == %w(id)
|
raise ArgumentError, 'Do not call update_count! on dirty objects' if association(:account_stat).loaded? && account_stat&.changed? && account_stat.changed_attribute_names_to_save == %w(id)
|
||||||
|
|
||||||
value = value.to_i
|
result = updated_account_stat(key, value.to_i)
|
||||||
default_value = value.positive? ? value : 0
|
|
||||||
|
|
||||||
# We do an upsert using manually written SQL, as Rails' upsert method does
|
|
||||||
# not seem to support writing expressions in the UPDATE clause, but only
|
|
||||||
# re-insert the provided values instead.
|
|
||||||
# Even ARel seem to be missing proper handling of upserts.
|
|
||||||
sql = if value.positive? && key == :statuses_count
|
|
||||||
<<-SQL.squish
|
|
||||||
INSERT INTO account_stats(account_id, #{key}, created_at, updated_at, last_status_at)
|
|
||||||
VALUES (:account_id, :default_value, now(), now(), now())
|
|
||||||
ON CONFLICT (account_id) DO UPDATE
|
|
||||||
SET #{key} = account_stats.#{key} + :value,
|
|
||||||
last_status_at = now(),
|
|
||||||
updated_at = now()
|
|
||||||
RETURNING id;
|
|
||||||
SQL
|
|
||||||
else
|
|
||||||
<<-SQL.squish
|
|
||||||
INSERT INTO account_stats(account_id, #{key}, created_at, updated_at)
|
|
||||||
VALUES (:account_id, :default_value, now(), now())
|
|
||||||
ON CONFLICT (account_id) DO UPDATE
|
|
||||||
SET #{key} = account_stats.#{key} + :value,
|
|
||||||
updated_at = now()
|
|
||||||
RETURNING id;
|
|
||||||
SQL
|
|
||||||
end
|
|
||||||
|
|
||||||
sql = AccountStat.sanitize_sql([sql, account_id: id, default_value: default_value, value: value])
|
|
||||||
account_stat_id = AccountStat.connection.exec_query(sql)[0]['id']
|
|
||||||
|
|
||||||
# Reload account_stat if it was loaded, taking into account newly-created unsaved records
|
# Reload account_stat if it was loaded, taking into account newly-created unsaved records
|
||||||
if association(:account_stat).loaded?
|
if association(:account_stat).loaded?
|
||||||
account_stat.id = account_stat_id if account_stat.new_record?
|
account_stat.id = result.first['id'] if account_stat.new_record?
|
||||||
account_stat.reload
|
account_stat.reload
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -79,6 +50,28 @@ module Account::Counters
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def updated_account_stat(key, value)
|
||||||
|
AccountStat.upsert(
|
||||||
|
initial_values(key, value),
|
||||||
|
on_duplicate: Arel.sql(
|
||||||
|
duplicate_values(key, value).join(', ')
|
||||||
|
),
|
||||||
|
unique_by: :account_id
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def initial_values(key, value)
|
||||||
|
{ :account_id => id, key => [value, 0].max }.tap do |values|
|
||||||
|
values.merge!(last_status_at: Time.current) if key == :statuses_count
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def duplicate_values(key, value)
|
||||||
|
["#{key} = (account_stats.#{key} + #{value})", 'updated_at = CURRENT_TIMESTAMP'].tap do |values|
|
||||||
|
values << 'last_status_at = CURRENT_TIMESTAMP' if key == :statuses_count && value.positive?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def save_account_stat
|
def save_account_stat
|
||||||
return unless association(:account_stat).loaded? && account_stat&.changed?
|
return unless association(:account_stat).loaded? && account_stat&.changed?
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,8 @@ class Tag < ApplicationRecord
|
||||||
scope :listable, -> { where(listable: [true, nil]) }
|
scope :listable, -> { where(listable: [true, nil]) }
|
||||||
scope :trendable, -> { Setting.trendable_by_default ? where(trendable: [true, nil]) : where(trendable: true) }
|
scope :trendable, -> { Setting.trendable_by_default ? where(trendable: [true, nil]) : where(trendable: true) }
|
||||||
scope :not_trendable, -> { where(trendable: false) }
|
scope :not_trendable, -> { where(trendable: false) }
|
||||||
|
scope :suggestions_for_account, ->(account) { recently_used(account).not_featured_by(account) }
|
||||||
|
scope :not_featured_by, ->(account) { where.not(id: account.featured_tags.select(:tag_id)) }
|
||||||
scope :recently_used, lambda { |account|
|
scope :recently_used, lambda { |account|
|
||||||
joins(:statuses)
|
joins(:statuses)
|
||||||
.where(statuses: { id: account.statuses.select(:id).limit(RECENT_STATUS_LIMIT) })
|
.where(statuses: { id: account.statuses.select(:id).limit(RECENT_STATUS_LIMIT) })
|
||||||
|
|
|
@ -9,7 +9,7 @@ class REST::AnnouncementSerializer < ActiveModel::Serializer
|
||||||
attribute :read, if: :current_user?
|
attribute :read, if: :current_user?
|
||||||
|
|
||||||
has_many :mentions
|
has_many :mentions
|
||||||
has_many :statuses
|
has_many :statuses, serializer: REST::StatusSerializer
|
||||||
has_many :tags, serializer: REST::StatusSerializer::TagSerializer
|
has_many :tags, serializer: REST::StatusSerializer::TagSerializer
|
||||||
has_many :emojis, serializer: REST::CustomEmojiSerializer
|
has_many :emojis, serializer: REST::CustomEmojiSerializer
|
||||||
has_many :reactions, serializer: REST::ReactionSerializer
|
has_many :reactions, serializer: REST::ReactionSerializer
|
||||||
|
@ -49,16 +49,4 @@ class REST::AnnouncementSerializer < ActiveModel::Serializer
|
||||||
object.pretty_acct
|
object.pretty_acct
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class StatusSerializer < ActiveModel::Serializer
|
|
||||||
attributes :id, :url
|
|
||||||
|
|
||||||
def id
|
|
||||||
object.id.to_s
|
|
||||||
end
|
|
||||||
|
|
||||||
def url
|
|
||||||
ActivityPub::TagManager.instance.url_for(object)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
28
app/views/admin/announcements/_form.html.haml
Normal file
28
app/views/admin/announcements/_form.html.haml
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
.fields-group
|
||||||
|
= form.input :starts_at,
|
||||||
|
html5: true,
|
||||||
|
include_blank: true,
|
||||||
|
input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder },
|
||||||
|
wrapper: :with_block_label
|
||||||
|
= form.input :ends_at,
|
||||||
|
html5: true,
|
||||||
|
include_blank: true,
|
||||||
|
input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder },
|
||||||
|
wrapper: :with_block_label
|
||||||
|
|
||||||
|
.fields-group
|
||||||
|
= form.input :all_day,
|
||||||
|
as: :boolean,
|
||||||
|
wrapper: :with_label
|
||||||
|
|
||||||
|
.fields-group
|
||||||
|
= form.input :text,
|
||||||
|
wrapper: :with_block_label
|
||||||
|
|
||||||
|
- unless form.object.published?
|
||||||
|
.fields-group
|
||||||
|
= form.input :scheduled_at,
|
||||||
|
html5: true,
|
||||||
|
include_blank: true,
|
||||||
|
input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder },
|
||||||
|
wrapper: :with_block_label
|
|
@ -1,37 +1,12 @@
|
||||||
- content_for :page_title do
|
- content_for :page_title do
|
||||||
= t('.title')
|
= t('.title')
|
||||||
|
|
||||||
= simple_form_for @announcement, url: admin_announcement_path(@announcement), html: { novalidate: false } do |f|
|
= simple_form_for @announcement, url: admin_announcement_path(@announcement), html: { novalidate: false } do |form|
|
||||||
= render 'shared/error_messages', object: @announcement
|
= render 'shared/error_messages', object: @announcement
|
||||||
|
|
||||||
.fields-group
|
= render form
|
||||||
= f.input :starts_at,
|
|
||||||
html5: true,
|
|
||||||
include_blank: true,
|
|
||||||
input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder },
|
|
||||||
wrapper: :with_block_label
|
|
||||||
= f.input :ends_at,
|
|
||||||
html5: true,
|
|
||||||
include_blank: true,
|
|
||||||
input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder },
|
|
||||||
wrapper: :with_block_label
|
|
||||||
|
|
||||||
.fields-group
|
|
||||||
= f.input :all_day,
|
|
||||||
as: :boolean,
|
|
||||||
wrapper: :with_label
|
|
||||||
|
|
||||||
.fields-group
|
|
||||||
= f.input :text,
|
|
||||||
wrapper: :with_block_label
|
|
||||||
|
|
||||||
- unless @announcement.published?
|
|
||||||
.fields-group
|
|
||||||
= f.input :scheduled_at,
|
|
||||||
html5: true,
|
|
||||||
include_blank: true,
|
|
||||||
input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder },
|
|
||||||
wrapper: :with_block_label
|
|
||||||
|
|
||||||
.actions
|
.actions
|
||||||
= f.button :button, t('generic.save_changes'), type: :submit
|
= form.button :button,
|
||||||
|
t('generic.save_changes'),
|
||||||
|
type: :submit
|
||||||
|
|
|
@ -1,38 +1,12 @@
|
||||||
- content_for :page_title do
|
- content_for :page_title do
|
||||||
= t('.title')
|
= t('.title')
|
||||||
|
|
||||||
= simple_form_for @announcement, url: admin_announcements_path, html: { novalidate: false } do |f|
|
= simple_form_for @announcement, url: admin_announcements_path, html: { novalidate: false } do |form|
|
||||||
= render 'shared/error_messages', object: @announcement
|
= render 'shared/error_messages', object: @announcement
|
||||||
|
|
||||||
.fields-group
|
= render form
|
||||||
= f.input :starts_at,
|
|
||||||
html5: true,
|
|
||||||
include_blank: true,
|
|
||||||
input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder },
|
|
||||||
wrapper: :with_block_label
|
|
||||||
= f.input :ends_at,
|
|
||||||
html5: true,
|
|
||||||
include_blank: true,
|
|
||||||
input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder },
|
|
||||||
wrapper: :with_block_label
|
|
||||||
|
|
||||||
.fields-group
|
|
||||||
= f.input :all_day,
|
|
||||||
as: :boolean,
|
|
||||||
wrapper: :with_label
|
|
||||||
|
|
||||||
.fields-group
|
|
||||||
= f.input :text,
|
|
||||||
wrapper: :with_block_label
|
|
||||||
|
|
||||||
.fields-group
|
|
||||||
= f.input :scheduled_at,
|
|
||||||
html5: true,
|
|
||||||
include_blank: true,
|
|
||||||
input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder },
|
|
||||||
wrapper: :with_block_label
|
|
||||||
|
|
||||||
.actions
|
.actions
|
||||||
= f.button :button,
|
= form.button :button,
|
||||||
t('.create'),
|
t('.create'),
|
||||||
type: :submit
|
type: :submit
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
%tr
|
%tr
|
||||||
%td= t("imports.types.#{import.type}")
|
%td= t("imports.types.#{import.type}")
|
||||||
%td
|
%td
|
||||||
- if import.unconfirmed?
|
- if import.state_unconfirmed?
|
||||||
= link_to t("imports.states.#{import.state}"), settings_import_path(import)
|
= link_to t("imports.states.#{import.state}"), settings_import_path(import)
|
||||||
- else
|
- else
|
||||||
= t("imports.states.#{import.state}")
|
= t("imports.states.#{import.state}")
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
%td
|
%td
|
||||||
- num_failed = import.processed_items - import.imported_items
|
- num_failed = import.processed_items - import.imported_items
|
||||||
- if num_failed.positive?
|
- if num_failed.positive?
|
||||||
- if import.finished?
|
- if import.state_finished?
|
||||||
= link_to num_failed, failures_settings_import_path(import, format: 'csv')
|
= link_to num_failed, failures_settings_import_path(import, format: 'csv')
|
||||||
- else
|
- else
|
||||||
= num_failed
|
= num_failed
|
||||||
|
|
|
@ -52,7 +52,7 @@ require_relative '../lib/active_record/batches'
|
||||||
require_relative '../lib/simple_navigation/item_extensions'
|
require_relative '../lib/simple_navigation/item_extensions'
|
||||||
require_relative '../lib/http_extensions'
|
require_relative '../lib/http_extensions'
|
||||||
|
|
||||||
Dotenv::Railtie.load
|
Dotenv::Rails.load
|
||||||
|
|
||||||
Bundler.require(:pam_authentication) if ENV['PAM_ENABLED'] == 'true'
|
Bundler.require(:pam_authentication) if ENV['PAM_ENABLED'] == 'true'
|
||||||
|
|
||||||
|
|
|
@ -1,35 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
lock '3.17.2'
|
|
||||||
|
|
||||||
set :repo_url, ENV.fetch('REPO', 'https://github.com/kmycode/mastodon.git')
|
|
||||||
set :branch, ENV.fetch('BRANCH', 'main')
|
|
||||||
|
|
||||||
set :application, 'mastodon'
|
|
||||||
set :rbenv_type, :user
|
|
||||||
set :rbenv_ruby, File.read('.ruby-version').strip
|
|
||||||
set :migration_role, :app
|
|
||||||
|
|
||||||
append :linked_files, '.env.production', 'public/robots.txt'
|
|
||||||
append :linked_dirs, 'vendor/bundle', 'node_modules', 'public/system'
|
|
||||||
|
|
||||||
SYSTEMD_SERVICES = %i[sidekiq streaming web].freeze
|
|
||||||
SERVICE_ACTIONS = %i[reload restart status].freeze
|
|
||||||
|
|
||||||
namespace :systemd do
|
|
||||||
SYSTEMD_SERVICES.each do |service|
|
|
||||||
SERVICE_ACTIONS.each do |action|
|
|
||||||
desc "Perform a #{action} on #{service} service"
|
|
||||||
task :"#{service}:#{action}" do
|
|
||||||
on roles(:app) do
|
|
||||||
# runs e.g. "sudo restart mastodon-sidekiq.service"
|
|
||||||
sudo :systemctl, action, "#{fetch(:application)}-#{service}.service"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
after 'deploy:publishing', 'systemd:web:reload'
|
|
||||||
after 'deploy:publishing', 'systemd:sidekiq:restart'
|
|
||||||
after 'deploy:publishing', 'systemd:streaming:restart'
|
|
|
@ -1,6 +1,6 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require "active_support/core_ext/integer/time"
|
require 'active_support/core_ext/integer/time'
|
||||||
|
|
||||||
Rails.application.configure do
|
Rails.application.configure do
|
||||||
# Settings specified here will take precedence over those in config/application.rb.
|
# Settings specified here will take precedence over those in config/application.rb.
|
||||||
|
@ -44,8 +44,8 @@ Rails.application.configure do
|
||||||
config.force_ssl = true
|
config.force_ssl = true
|
||||||
config.ssl_options = {
|
config.ssl_options = {
|
||||||
redirect: {
|
redirect: {
|
||||||
exclude: ->(request) { request.path.start_with?('/health') || request.headers["Host"].end_with?('.onion') || request.headers["Host"].end_with?('.i2p') }
|
exclude: ->(request) { request.path.start_with?('/health') || request.headers['Host'].end_with?('.onion') || request.headers['Host'].end_with?('.i2p') },
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
# Info include generic and useful information about system operation, but avoids logging too much
|
# Info include generic and useful information about system operation, but avoids logging too much
|
||||||
|
|
|
@ -88,7 +88,7 @@ if ENV['PAM_ENABLED'] == 'true'
|
||||||
usernames: Set['pam_user1', 'pam_user2'],
|
usernames: Set['pam_user1', 'pam_user2'],
|
||||||
servicenames: Set['pam_test', 'pam_test_controlled'],
|
servicenames: Set['pam_test', 'pam_test_controlled'],
|
||||||
password: '123456',
|
password: '123456',
|
||||||
env: { email: 'pam@example.com' }
|
env: { email: 'pam@example.com' },
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
26
config/initializers/active_record_encryption.rb
Normal file
26
config/initializers/active_record_encryption.rb
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
%w(
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY
|
||||||
|
).each do |key|
|
||||||
|
ENV.fetch(key) do
|
||||||
|
raise <<~MESSAGE
|
||||||
|
|
||||||
|
The ActiveRecord encryption feature requires that these variables are set:
|
||||||
|
|
||||||
|
- ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY
|
||||||
|
- ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT
|
||||||
|
- ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY
|
||||||
|
|
||||||
|
Run `bin/rails db:encryption:init` to generate values and then assign the environment variables.
|
||||||
|
MESSAGE
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Rails.application.configure do
|
||||||
|
config.active_record.encryption.deterministic_key = ENV.fetch('ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY')
|
||||||
|
config.active_record.encryption.key_derivation_salt = ENV.fetch('ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT')
|
||||||
|
config.active_record.encryption.primary_key = ENV.fetch('ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY')
|
||||||
|
end
|
|
@ -7,4 +7,4 @@
|
||||||
|
|
||||||
# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code
|
# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code
|
||||||
# by setting BACKTRACE=1 before calling your invocation, like "BACKTRACE=1 ./bin/rails runner 'MyClass.perform'".
|
# by setting BACKTRACE=1 before calling your invocation, like "BACKTRACE=1 ./bin/rails runner 'MyClass.perform'".
|
||||||
Rails.backtrace_cleaner.remove_silencers! if ENV["BACKTRACE"]
|
Rails.backtrace_cleaner.remove_silencers! if ENV['BACKTRACE']
|
||||||
|
|
|
@ -152,7 +152,7 @@ Doorkeeper.configure do
|
||||||
#
|
#
|
||||||
# You can use this option in order to forbid URI's with 'javascript' scheme
|
# You can use this option in order to forbid URI's with 'javascript' scheme
|
||||||
# for example.
|
# for example.
|
||||||
forbid_redirect_uri { |uri| %w[data vbscript javascript].include?(uri.scheme.to_s.downcase) }
|
forbid_redirect_uri { |uri| %w(data vbscript javascript).include?(uri.scheme.to_s.downcase) }
|
||||||
|
|
||||||
# Specify what grant flows are enabled in array of Strings. The valid
|
# Specify what grant flows are enabled in array of Strings. The valid
|
||||||
# strings and the flows they enable are:
|
# strings and the flows they enable are:
|
||||||
|
|
|
@ -7,7 +7,7 @@ Rails.application.configure do
|
||||||
proxy = URI.parse(ENV['http_proxy'])
|
proxy = URI.parse(ENV['http_proxy'])
|
||||||
|
|
||||||
raise "Unsupported proxy type: #{proxy.scheme}" unless %w(http https).include? proxy.scheme
|
raise "Unsupported proxy type: #{proxy.scheme}" unless %w(http https).include? proxy.scheme
|
||||||
raise "No proxy host" unless proxy.host
|
raise 'No proxy host' unless proxy.host
|
||||||
|
|
||||||
host = proxy.host
|
host = proxy.host
|
||||||
host = host[1...-1] if host[0] == '[' # for IPv6 address
|
host = host[1...-1] if host[0] == '[' # for IPv6 address
|
||||||
|
@ -24,7 +24,7 @@ Rails.application.configure do
|
||||||
proxy = URI.parse(ENV['http_hidden_proxy'])
|
proxy = URI.parse(ENV['http_hidden_proxy'])
|
||||||
|
|
||||||
raise "Unsupported proxy type: #{proxy.scheme}" unless %w(http https).include? proxy.scheme
|
raise "Unsupported proxy type: #{proxy.scheme}" unless %w(http https).include? proxy.scheme
|
||||||
raise "No proxy host" unless proxy.host
|
raise 'No proxy host' unless proxy.host
|
||||||
|
|
||||||
host = proxy.host
|
host = proxy.host
|
||||||
host = host[1...-1] if host[0] == '[' # for IPv6 address
|
host = host[1...-1] if host[0] == '[' # for IPv6 address
|
||||||
|
|
|
@ -73,7 +73,7 @@ if ENV['S3_ENABLED'] == 'true'
|
||||||
if ENV.has_key?('S3_ENDPOINT')
|
if ENV.has_key?('S3_ENDPOINT')
|
||||||
Paperclip::Attachment.default_options[:s3_options].merge!(
|
Paperclip::Attachment.default_options[:s3_options].merge!(
|
||||||
endpoint: ENV['S3_ENDPOINT'],
|
endpoint: ENV['S3_ENDPOINT'],
|
||||||
force_path_style: ENV['S3_OVERRIDE_PATH_STYLE'] != 'true',
|
force_path_style: ENV['S3_OVERRIDE_PATH_STYLE'] != 'true'
|
||||||
)
|
)
|
||||||
|
|
||||||
Paperclip::Attachment.default_options[:url] = ':s3_path_url'
|
Paperclip::Attachment.default_options[:url] = ':s3_path_url'
|
||||||
|
@ -159,7 +159,7 @@ else
|
||||||
Paperclip::Attachment.default_options.merge!(
|
Paperclip::Attachment.default_options.merge!(
|
||||||
storage: :filesystem,
|
storage: :filesystem,
|
||||||
path: File.join(ENV.fetch('PAPERCLIP_ROOT_PATH', File.join(':rails_root', 'public', 'system')), ':prefix_path:class', ':attachment', ':id_partition', ':style', ':filename'),
|
path: File.join(ENV.fetch('PAPERCLIP_ROOT_PATH', File.join(':rails_root', 'public', 'system')), ':prefix_path:class', ':attachment', ':id_partition', ':style', ':filename'),
|
||||||
url: ENV.fetch('PAPERCLIP_ROOT_URL', '/system') + '/:prefix_url:class/:attachment/:id_partition/:style/:filename',
|
url: ENV.fetch('PAPERCLIP_ROOT_URL', '/system') + '/:prefix_url:class/:attachment/:id_partition/:style/:filename'
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ class Rack::Attack
|
||||||
end
|
end
|
||||||
|
|
||||||
def remote_ip
|
def remote_ip
|
||||||
@remote_ip ||= (@env["action_dispatch.remote_ip"] || ip).to_s
|
@remote_ip ||= (@env['action_dispatch.remote_ip'] || ip).to_s
|
||||||
end
|
end
|
||||||
|
|
||||||
def throttleable_remote_ip
|
def throttleable_remote_ip
|
||||||
|
|
|
@ -6,7 +6,7 @@ WebAuthn.configure do |config|
|
||||||
config.origin = "#{Rails.configuration.x.use_https ? 'https' : 'http'}://#{Rails.configuration.x.web_domain}"
|
config.origin = "#{Rails.configuration.x.use_https ? 'https' : 'http'}://#{Rails.configuration.x.web_domain}"
|
||||||
|
|
||||||
# Relying Party name for display purposes
|
# Relying Party name for display purposes
|
||||||
config.rp_name = "Mastodon"
|
config.rp_name = 'Mastodon'
|
||||||
|
|
||||||
# Optionally configure a client timeout hint, in milliseconds.
|
# Optionally configure a client timeout hint, in milliseconds.
|
||||||
# This hint specifies how long the browser should wait for an
|
# This hint specifies how long the browser should wait for an
|
||||||
|
|
|
@ -621,6 +621,9 @@ cs:
|
||||||
actions_description_html: Rozhodněte, který krok učinit pro vyřešení tohoto hlášení. Pokud podniknete kárný krok proti nahlášenému účtu, bude mu zasláno e-mailové oznámení, s výjimkou případu, kdy je zvolena kategorie <strong>Spam</strong>.
|
actions_description_html: Rozhodněte, který krok učinit pro vyřešení tohoto hlášení. Pokud podniknete kárný krok proti nahlášenému účtu, bude mu zasláno e-mailové oznámení, s výjimkou případu, kdy je zvolena kategorie <strong>Spam</strong>.
|
||||||
actions_description_remote_html: Rozhodněte, co podniknout pro vyřešení tohoto hlášení. Toto ovlivní pouze to, jak <strong>váš</strong> server komunikuje s tímto vzdáleným účtem, a zpracuje jeho obsah.
|
actions_description_remote_html: Rozhodněte, co podniknout pro vyřešení tohoto hlášení. Toto ovlivní pouze to, jak <strong>váš</strong> server komunikuje s tímto vzdáleným účtem, a zpracuje jeho obsah.
|
||||||
add_to_report: Přidat do hlášení další
|
add_to_report: Přidat do hlášení další
|
||||||
|
already_suspended_badges:
|
||||||
|
local: Již pozastaveno na tomto serveru
|
||||||
|
remote: Již pozastaveno na jejich serveru
|
||||||
are_you_sure: Jste si jisti?
|
are_you_sure: Jste si jisti?
|
||||||
assign_to_self: Přidělit ke mně
|
assign_to_self: Přidělit ke mně
|
||||||
assigned: Přiřazený moderátor
|
assigned: Přiřazený moderátor
|
||||||
|
@ -1704,13 +1707,26 @@ cs:
|
||||||
import: Import
|
import: Import
|
||||||
import_and_export: Import a export
|
import_and_export: Import a export
|
||||||
migrate: Přesun účtu
|
migrate: Přesun účtu
|
||||||
|
notifications: E-mailová upozornění
|
||||||
preferences: Předvolby
|
preferences: Předvolby
|
||||||
profile: Profil
|
profile: Profil
|
||||||
relationships: Sledovaní a sledující
|
relationships: Sledovaní a sledující
|
||||||
|
severed_relationships: Přerušené vztahy
|
||||||
statuses_cleanup: Automatické mazání příspěvků
|
statuses_cleanup: Automatické mazání příspěvků
|
||||||
strikes: Moderační prohřešky
|
strikes: Moderační prohřešky
|
||||||
two_factor_authentication: Dvoufázové ověřování
|
two_factor_authentication: Dvoufázové ověřování
|
||||||
webauthn_authentication: Bezpečnostní klíče
|
webauthn_authentication: Bezpečnostní klíče
|
||||||
|
severed_relationships:
|
||||||
|
download: Stáhnout (%{count})
|
||||||
|
event_type:
|
||||||
|
account_suspension: Pozastavení účtu (%{target_name})
|
||||||
|
domain_block: Pozastavení serveru (%{target_name})
|
||||||
|
user_domain_block: Zablokovali jste %{target_name}
|
||||||
|
lost_followers: Ztracení sledující
|
||||||
|
lost_follows: Ztracená sledování
|
||||||
|
preamble: Když zablokujete doménu nebo když se moderátoři rozhodnou pozastavit vzdálený server, můžete přijít o sledování a sledující. Když k tomu dojde, budete si moci stáhnout seznamy přerušených vztahů, abyste je mohli zkontrolovat a případně importovat na jiný server.
|
||||||
|
purged: Informace o tomto serveru byly správci serveru vymazány.
|
||||||
|
type: Událost
|
||||||
statuses:
|
statuses:
|
||||||
attached:
|
attached:
|
||||||
audio:
|
audio:
|
||||||
|
@ -1816,6 +1832,7 @@ cs:
|
||||||
contrast: Mastodon (vysoký kontrast)
|
contrast: Mastodon (vysoký kontrast)
|
||||||
default: Mastodon (tmavý)
|
default: Mastodon (tmavý)
|
||||||
mastodon-light: Mastodon (světlý)
|
mastodon-light: Mastodon (světlý)
|
||||||
|
system: Automaticky (dle motivu systému)
|
||||||
time:
|
time:
|
||||||
formats:
|
formats:
|
||||||
default: "%d. %b %Y, %H:%M"
|
default: "%d. %b %Y, %H:%M"
|
||||||
|
@ -1903,7 +1920,46 @@ cs:
|
||||||
silence: Účet omezen
|
silence: Účet omezen
|
||||||
suspend: Účet pozastaven
|
suspend: Účet pozastaven
|
||||||
welcome:
|
welcome:
|
||||||
|
apps_android_action: Získejte na Google Play
|
||||||
|
apps_ios_action: Stáhnout z App Store
|
||||||
|
apps_step: Stáhněte si naše oficiální aplikace.
|
||||||
|
apps_title: Aplikace Mastodon
|
||||||
|
checklist_subtitle: 'Začněme na této nové sociální hranici:'
|
||||||
|
checklist_title: Uvítací kontrolní seznam
|
||||||
|
edit_profile_action: Přizpůsobit
|
||||||
|
edit_profile_step: Zlepšete své interakce tím, že si vytvoříte komplexní profil.
|
||||||
|
edit_profile_title: Přizpůsobte si svůj profil
|
||||||
explanation: Zde je pár tipů do začátku
|
explanation: Zde je pár tipů do začátku
|
||||||
|
feature_action: Zjistit více
|
||||||
|
feature_audience: Mastodon vám nabízí jedinečnou možnost správy publika bez prostředníků. Mastodon nasazený na vaší vlastní infrastruktuře vám umožňuje sledovat a být sledován z jakéhokoli jiného Mastodon serveru online a není pod kontrolou nikoho jiného než vás.
|
||||||
|
feature_audience_title: Vytvořte si svědomě své publikum
|
||||||
|
feature_control: Sami nejlépe víte, co chcete vidět na svém domovském kanálu. Žádné algoritmy ani reklamy, které by plýtvaly vaším časem. Sledujte kohokoli z libovolného Mastodon serveru z jediného účtu, dostávejte jejich příspěvky v chronologickém pořadí a udělejte si svůj kout internetu trochu více podle sebe.
|
||||||
|
feature_control_title: Mějte pod kontrolou vlastní časovou osu
|
||||||
|
feature_creativity: Mastodon podporuje zvukové, video a obrázkové příspěvky, popisy přístupnosti, ankety, upozornění na obsah, animované avatary, vlastní emotikony, ovládání ořezu miniatur a další funkce, které vám pomohou vyjádřit se online. Ať už publikujete své umění, hudbu nebo podcast, Mastodon je tu pro vás.
|
||||||
|
feature_creativity_title: Bezkonkurenční kreativita
|
||||||
|
feature_moderation: Mastodon dává rozhodování zpět do vašich rukou. Každý server si vytváří svá vlastní pravidla a předpisy, které jsou prosazovány lokálně, nikoli shora jako v případě firemních sociálních médií, díky čemuž lze nejpružněji reagovat na potřeby různých skupin lidí. Připojte se k serveru s pravidly, se kterými souhlasíte, nebo si založte vlastní.
|
||||||
|
feature_moderation_title: Moderování způsobem, jakým by to mělo být
|
||||||
|
follow_action: Sledovat
|
||||||
|
follow_step: Mastodon je o sledování zajimavých lidí.
|
||||||
|
follow_title: Přizpůsobte si svůj domovský kanál
|
||||||
|
follows_subtitle: Sledujte známé účty
|
||||||
|
follows_title: Koho sledovat
|
||||||
|
follows_view_more: Zobrazit více lidí ke sledování
|
||||||
|
hashtags_recent_count:
|
||||||
|
few: "%{people} osoby v posledních 2 dnech"
|
||||||
|
many: "%{people} osob v posledních 2 dnech"
|
||||||
|
one: "%{people} osoba v posledních 2 dnech"
|
||||||
|
other: "%{people} osob v posledních 2 dnech"
|
||||||
|
hashtags_subtitle: Prozkoumejte, co je populární od posledních 2 dnů
|
||||||
|
hashtags_title: Populární hashtagy
|
||||||
|
hashtags_view_more: Zobrazit více populárních hashtagů
|
||||||
|
post_action: Sepsat
|
||||||
|
post_step: Řekněte světu ahoj pomocí textu, fotografií, videí nebo anket.
|
||||||
|
post_title: Vytvořte svůj první příspěvek
|
||||||
|
share_action: Sdílet
|
||||||
|
share_step: Dejte přátelům vědět, jak vás mohou na Mastodonu najít.
|
||||||
|
share_title: Sdílejte svůj Mastodon profil
|
||||||
|
sign_in_action: Přihlásit se
|
||||||
subject: Vítejte na Mastodonu
|
subject: Vítejte na Mastodonu
|
||||||
title: Vítejte na palubě, %{name}!
|
title: Vítejte na palubě, %{name}!
|
||||||
users:
|
users:
|
||||||
|
|
|
@ -1241,7 +1241,7 @@ eu:
|
||||||
add_new: Gehitu berria
|
add_new: Gehitu berria
|
||||||
errors:
|
errors:
|
||||||
limit: Gehienezko traola kopurua erakutsi duzu jada
|
limit: Gehienezko traola kopurua erakutsi duzu jada
|
||||||
hint_html: "<strong>Zer dira nabarmendutako traolak?</strong> Zure profilean toki nabarmendu batean agertzen dira eta jendeari traola hau daukaten bidalketa publikoak arakatzea ahalbidetzen diote. Sormen lana edo epe luzerako proiektuak jarraitzeko primerakoak dira."
|
hint_html: "<strong>Zer dira nabarmendutako traolak?</strong> Zure profileko toki nabarmendu batean agertzen dira eta jendeari traola haue dituzten bidalketa publikoak arakatzea ahalbidetzen diote. Sormen-lanak edo epe luzerako proiektuak jarraitzeko primerakoak dira."
|
||||||
filters:
|
filters:
|
||||||
contexts:
|
contexts:
|
||||||
account: Profilak
|
account: Profilak
|
||||||
|
@ -1910,7 +1910,7 @@ eu:
|
||||||
signed_in_as: 'Saioa honela hasita:'
|
signed_in_as: 'Saioa honela hasita:'
|
||||||
verification:
|
verification:
|
||||||
extra_instructions_html: <strong>Aholkua:</strong> webguneko esteka ikusezina izan daiteke. Muina <code>rel="me"</code> da, erabiltzaileak sortutako edukia duten webguneetan beste inor zure burutzat aurkeztea eragozten duena. <code>a</code> beharrean <code>esteka</code> motako etiketa bat ere erabil dezakezu orriaren goiburuan, baina HTMLak erabilgarri egon behar du JavaScript exekutatu gabe.
|
extra_instructions_html: <strong>Aholkua:</strong> webguneko esteka ikusezina izan daiteke. Muina <code>rel="me"</code> da, erabiltzaileak sortutako edukia duten webguneetan beste inor zure burutzat aurkeztea eragozten duena. <code>a</code> beharrean <code>esteka</code> motako etiketa bat ere erabil dezakezu orriaren goiburuan, baina HTMLak erabilgarri egon behar du JavaScript exekutatu gabe.
|
||||||
here_is_how: Hemen duzu nola
|
here_is_how: Argibidea
|
||||||
hint_html: "<strong>Mastodonen nortasun-egiaztapena guztiontzat da.</strong> Web estandar irekietan oinarritua, orain eta betiko doan. Behar duzun guztia jendeak ezagutzen duen webgune pertsonal bat da. Mastodon profiletik webgune honetara estekatzen duzunean, webguneak Mastodon profilera estekatzen duela egiaztatuko dugu eta adierazle bat erakutsiko du."
|
hint_html: "<strong>Mastodonen nortasun-egiaztapena guztiontzat da.</strong> Web estandar irekietan oinarritua, orain eta betiko doan. Behar duzun guztia jendeak ezagutzen duen webgune pertsonal bat da. Mastodon profiletik webgune honetara estekatzen duzunean, webguneak Mastodon profilera estekatzen duela egiaztatuko dugu eta adierazle bat erakutsiko du."
|
||||||
instructions_html: Kopiatu eta itsatsi ondoko kodea zure webguneko HTMLan. Ondoren, gehitu zure webgunearen helbidea zure profileko eremu gehigarrietako batean, "Editatu profila" fitxatik eta gorde aldaketak.
|
instructions_html: Kopiatu eta itsatsi ondoko kodea zure webguneko HTMLan. Ondoren, gehitu zure webgunearen helbidea zure profileko eremu gehigarrietako batean, "Editatu profila" fitxatik eta gorde aldaketak.
|
||||||
verification: Egiaztaketa
|
verification: Egiaztaketa
|
||||||
|
|
|
@ -1765,9 +1765,9 @@ fi:
|
||||||
tags:
|
tags:
|
||||||
does_not_match_previous_name: ei vastaa edellistä nimeä
|
does_not_match_previous_name: ei vastaa edellistä nimeä
|
||||||
themes:
|
themes:
|
||||||
contrast: Mastodon (Korkea kontrasti)
|
contrast: Mastodon (suuri kontrasti)
|
||||||
default: Mastodon (Tumma)
|
default: Mastodon (tumma)
|
||||||
mastodon-light: Mastodon (Vaalea)
|
mastodon-light: Mastodon (vaalea)
|
||||||
system: Automaattinen (käytä järjestelmän teemaa)
|
system: Automaattinen (käytä järjestelmän teemaa)
|
||||||
time:
|
time:
|
||||||
formats:
|
formats:
|
||||||
|
|
|
@ -979,7 +979,7 @@ ko:
|
||||||
new_report:
|
new_report:
|
||||||
body: "%{reporter} 님이 %{target}를 신고했습니다"
|
body: "%{reporter} 님이 %{target}를 신고했습니다"
|
||||||
body_remote: "%{domain}의 누군가가 %{target}을 신고했습니다"
|
body_remote: "%{domain}의 누군가가 %{target}을 신고했습니다"
|
||||||
subject: "%{instance} 에 새 신고 등록됨 (#%{id})"
|
subject: "%{instance}의 새로운 신고(#%{id})"
|
||||||
new_software_updates:
|
new_software_updates:
|
||||||
body: 새 마스토돈 버전이 릴리스되었습니다. 업데이트 할 수 있습니다!
|
body: 새 마스토돈 버전이 릴리스되었습니다. 업데이트 할 수 있습니다!
|
||||||
subject: "%{instance}에 대해 새 마스토돈 버전이 사용 가능합니다!"
|
subject: "%{instance}에 대해 새 마스토돈 버전이 사용 가능합니다!"
|
||||||
|
@ -1118,7 +1118,7 @@ ko:
|
||||||
date:
|
date:
|
||||||
formats:
|
formats:
|
||||||
default: "%Y-%m-%d"
|
default: "%Y-%m-%d"
|
||||||
with_month_name: "%Y년 %f월 %e일"
|
with_month_name: "%Y년 %B %d일"
|
||||||
datetime:
|
datetime:
|
||||||
distance_in_words:
|
distance_in_words:
|
||||||
about_x_hours: "%{count}시간"
|
about_x_hours: "%{count}시간"
|
||||||
|
@ -1742,7 +1742,7 @@ ko:
|
||||||
time:
|
time:
|
||||||
formats:
|
formats:
|
||||||
default: "%Y-%m-%d %H:%M"
|
default: "%Y-%m-%d %H:%M"
|
||||||
month: "%Y년 %f월"
|
month: "%Y년 %b"
|
||||||
time: "%H:%M"
|
time: "%H:%M"
|
||||||
with_time_zone: "%Y-%m-%d %H:%M %Z"
|
with_time_zone: "%Y-%m-%d %H:%M %Z"
|
||||||
translation:
|
translation:
|
||||||
|
@ -1896,4 +1896,4 @@ ko:
|
||||||
not_enabled: 아직 WebAuthn을 활성화 하지 않았습니다.
|
not_enabled: 아직 WebAuthn을 활성화 하지 않았습니다.
|
||||||
not_supported: 이 브라우저는 보안 키를 지원하지 않습니다
|
not_supported: 이 브라우저는 보안 키를 지원하지 않습니다
|
||||||
otp_required: 보안 키를 사용하기 위해서는 2단계 인증을 먼저 활성화 해 주세요
|
otp_required: 보안 키를 사용하기 위해서는 2단계 인증을 먼저 활성화 해 주세요
|
||||||
registered_on: "%{date} 에 등록됨"
|
registered_on: "%{date}에 등록됨"
|
||||||
|
|
|
@ -116,6 +116,7 @@ cs:
|
||||||
sign_up_requires_approval: Nové registrace budou vyžadovat schválení
|
sign_up_requires_approval: Nové registrace budou vyžadovat schválení
|
||||||
severity: Zvolte, jak naložit s požadavky z dané IP
|
severity: Zvolte, jak naložit s požadavky z dané IP
|
||||||
rule:
|
rule:
|
||||||
|
hint: Nepovinné. Uveďte další podrobnosti o pravidle
|
||||||
text: Popište pravidlo nebo požadavek uživatelům tohoto serveru. Snažte se ho držet krátký a jednoduchý
|
text: Popište pravidlo nebo požadavek uživatelům tohoto serveru. Snažte se ho držet krátký a jednoduchý
|
||||||
sessions:
|
sessions:
|
||||||
otp: 'Zadejte kód pro dvoufázové ověření vygenerovaný vaší mobilní aplikací, nebo použijte jeden z vašich záložních kódů:'
|
otp: 'Zadejte kód pro dvoufázové ověření vygenerovaný vaší mobilní aplikací, nebo použijte jeden z vašich záložních kódů:'
|
||||||
|
@ -299,6 +300,7 @@ cs:
|
||||||
patch: Upozornit na aktualizace chyb
|
patch: Upozornit na aktualizace chyb
|
||||||
trending_tag: Nový trend vyžaduje posouzení
|
trending_tag: Nový trend vyžaduje posouzení
|
||||||
rule:
|
rule:
|
||||||
|
hint: Další informace
|
||||||
text: Pravidlo
|
text: Pravidlo
|
||||||
settings:
|
settings:
|
||||||
indexable: Zahrnout stránku profilu do vyhledávačů
|
indexable: Zahrnout stránku profilu do vyhledávačů
|
||||||
|
|
|
@ -609,6 +609,9 @@ sr-Latn:
|
||||||
actions_description_html: Odlučite koju radnju da sprovedete radi rešavanja ove prijave. Ukoliko sprovedete kaznenu radnju protiv prijavljenog naloga, vlasnik naloga će biti obavešten putem i-mejla, osim ukoliko oznaka <strong>„Nepoželjne poruke”</strong> nije odabrana.
|
actions_description_html: Odlučite koju radnju da sprovedete radi rešavanja ove prijave. Ukoliko sprovedete kaznenu radnju protiv prijavljenog naloga, vlasnik naloga će biti obavešten putem i-mejla, osim ukoliko oznaka <strong>„Nepoželjne poruke”</strong> nije odabrana.
|
||||||
actions_description_remote_html: Odlučite koju radnju da preduzmete radi rešavanja ove prijave. Ovo će uticati samo na to kako <strong>Vaš</strong> server komunicira sa ovim udaljenim nalogom i obrađuje njegov sadržaj.
|
actions_description_remote_html: Odlučite koju radnju da preduzmete radi rešavanja ove prijave. Ovo će uticati samo na to kako <strong>Vaš</strong> server komunicira sa ovim udaljenim nalogom i obrađuje njegov sadržaj.
|
||||||
add_to_report: Dodaj još u prijavu
|
add_to_report: Dodaj još u prijavu
|
||||||
|
already_suspended_badges:
|
||||||
|
local: Već suspendovan na ovom serveru
|
||||||
|
remote: Već suspendovan na njihovom serveru
|
||||||
are_you_sure: Da li ste sigurni?
|
are_you_sure: Da li ste sigurni?
|
||||||
assign_to_self: Dodeli meni
|
assign_to_self: Dodeli meni
|
||||||
assigned: Dodeljeni moderator
|
assigned: Dodeljeni moderator
|
||||||
|
@ -1678,13 +1681,26 @@ sr-Latn:
|
||||||
import: Uvoz
|
import: Uvoz
|
||||||
import_and_export: Uvoz i izvoz
|
import_and_export: Uvoz i izvoz
|
||||||
migrate: Prebacivanje naloga
|
migrate: Prebacivanje naloga
|
||||||
|
notifications: Obaveštenja e-poštom
|
||||||
preferences: Podešavanja
|
preferences: Podešavanja
|
||||||
profile: Javni profil
|
profile: Javni profil
|
||||||
relationships: Praćenja i pratioci
|
relationships: Praćenja i pratioci
|
||||||
|
severed_relationships: Prekinute veze
|
||||||
statuses_cleanup: Automatsko brisanje objava
|
statuses_cleanup: Automatsko brisanje objava
|
||||||
strikes: Moderacijski prestupi
|
strikes: Moderacijski prestupi
|
||||||
two_factor_authentication: Dvofaktorska identifikacija
|
two_factor_authentication: Dvofaktorska identifikacija
|
||||||
webauthn_authentication: Sigurnosni ključevi
|
webauthn_authentication: Sigurnosni ključevi
|
||||||
|
severed_relationships:
|
||||||
|
download: Preuzmi (%{count})
|
||||||
|
event_type:
|
||||||
|
account_suspension: Suspenzija naloga (%{target_name})
|
||||||
|
domain_block: Suspenzija servera (%{target_name})
|
||||||
|
user_domain_block: Blokirali ste %{target_name}
|
||||||
|
lost_followers: Izgubljeni pratioci
|
||||||
|
lost_follows: Izgubljena praćenja
|
||||||
|
preamble: Možete izgubiti praćenja i pratioce kada blokirate domen ili kada vaši moderatori odluče da suspenduju udaljeni server. Kada se to desi, moći ćete da preuzmete liste prekinutih veza, koje treba pregledati i eventualno uvesti na drugi server.
|
||||||
|
purged: Administratori vašeg servera su obrisali informacije o ovom serveru.
|
||||||
|
type: Događaj
|
||||||
statuses:
|
statuses:
|
||||||
attached:
|
attached:
|
||||||
audio:
|
audio:
|
||||||
|
@ -1784,6 +1800,7 @@ sr-Latn:
|
||||||
contrast: Veliki kontrast
|
contrast: Veliki kontrast
|
||||||
default: Mastodon (tamna)
|
default: Mastodon (tamna)
|
||||||
mastodon-light: Mastodon (svetla)
|
mastodon-light: Mastodon (svetla)
|
||||||
|
system: Automatski (korišćenje sistemske teme)
|
||||||
time:
|
time:
|
||||||
formats:
|
formats:
|
||||||
default: "%d %b %Y, %H:%M"
|
default: "%d %b %Y, %H:%M"
|
||||||
|
@ -1896,6 +1913,10 @@ sr-Latn:
|
||||||
follows_subtitle: Pratite dobro poznate naloge
|
follows_subtitle: Pratite dobro poznate naloge
|
||||||
follows_title: Koga pratiti
|
follows_title: Koga pratiti
|
||||||
follows_view_more: Pogledajte još ljudi za praćenje
|
follows_view_more: Pogledajte još ljudi za praćenje
|
||||||
|
hashtags_recent_count:
|
||||||
|
few: "%{people} osobe u poslednja 2 dana"
|
||||||
|
one: "%{people} osoba u poslednja 2 dana"
|
||||||
|
other: "%{people} osoba u poslednja 2 dana"
|
||||||
hashtags_subtitle: Istražite šta je u trendu u poslednja 2 dana
|
hashtags_subtitle: Istražite šta je u trendu u poslednja 2 dana
|
||||||
hashtags_title: Heš oznake u trendu
|
hashtags_title: Heš oznake u trendu
|
||||||
hashtags_view_more: Pogledajte još heš oznaka u trendu
|
hashtags_view_more: Pogledajte još heš oznaka u trendu
|
||||||
|
|
|
@ -609,6 +609,9 @@ sr:
|
||||||
actions_description_html: Одлучите коју радњу да спроведете ради решавања ове пријаве. Уколико спроведете казнену радњу против пријављеног налога, власник налога ће бити обавештен путем и-мејла, осим уколико ознака <strong>„Непожељне поруке”</strong> није одабрана.
|
actions_description_html: Одлучите коју радњу да спроведете ради решавања ове пријаве. Уколико спроведете казнену радњу против пријављеног налога, власник налога ће бити обавештен путем и-мејла, осим уколико ознака <strong>„Непожељне поруке”</strong> није одабрана.
|
||||||
actions_description_remote_html: Одлучите коју радњу да предузмете ради решавања ове пријаве. Ово ће утицати само на то како <strong>Ваш</strong> сервер комуницира са овим удаљеним налогом и обрађује његов садржај.
|
actions_description_remote_html: Одлучите коју радњу да предузмете ради решавања ове пријаве. Ово ће утицати само на то како <strong>Ваш</strong> сервер комуницира са овим удаљеним налогом и обрађује његов садржај.
|
||||||
add_to_report: Додај још у пријаву
|
add_to_report: Додај још у пријаву
|
||||||
|
already_suspended_badges:
|
||||||
|
local: Већ суспендован на овом серверу
|
||||||
|
remote: Већ суспендован на њиховом серверу
|
||||||
are_you_sure: Да ли сте сигурни?
|
are_you_sure: Да ли сте сигурни?
|
||||||
assign_to_self: Додели мени
|
assign_to_self: Додели мени
|
||||||
assigned: Додељени модератор
|
assigned: Додељени модератор
|
||||||
|
@ -1678,13 +1681,26 @@ sr:
|
||||||
import: Увоз
|
import: Увоз
|
||||||
import_and_export: Увоз и извоз
|
import_and_export: Увоз и извоз
|
||||||
migrate: Пребацивање налога
|
migrate: Пребацивање налога
|
||||||
|
notifications: Обавештења е-поштом
|
||||||
preferences: Подешавања
|
preferences: Подешавања
|
||||||
profile: Јавни профил
|
profile: Јавни профил
|
||||||
relationships: Праћења и пратиоци
|
relationships: Праћења и пратиоци
|
||||||
|
severed_relationships: Прекинуте везе
|
||||||
statuses_cleanup: Аутоматско брисање објава
|
statuses_cleanup: Аутоматско брисање објава
|
||||||
strikes: Модерацијски преступи
|
strikes: Модерацијски преступи
|
||||||
two_factor_authentication: Двофакторска идентификација
|
two_factor_authentication: Двофакторска идентификација
|
||||||
webauthn_authentication: Сигурносни кључеви
|
webauthn_authentication: Сигурносни кључеви
|
||||||
|
severed_relationships:
|
||||||
|
download: Преузми (%{count})
|
||||||
|
event_type:
|
||||||
|
account_suspension: Суспензија налога (%{target_name})
|
||||||
|
domain_block: Суспензија сервера (%{target_name})
|
||||||
|
user_domain_block: Блокирали сте %{target_name}
|
||||||
|
lost_followers: Изгубљени пратиоци
|
||||||
|
lost_follows: Изгубљена праћења
|
||||||
|
preamble: Можете изгубити праћења и пратиоце када блокирате домен или када ваши модератори одлуче да суспендују удаљени сервер. Када се то деси, моћи ћете да преузмете листе прекинутих веза, које треба прегледати и евентуално увести на други сервер.
|
||||||
|
purged: Администратори вашег сервера су обрисали информације о овом серверу.
|
||||||
|
type: Догађај
|
||||||
statuses:
|
statuses:
|
||||||
attached:
|
attached:
|
||||||
audio:
|
audio:
|
||||||
|
@ -1784,6 +1800,7 @@ sr:
|
||||||
contrast: Велики контраст
|
contrast: Велики контраст
|
||||||
default: Mastodon (тамна)
|
default: Mastodon (тамна)
|
||||||
mastodon-light: Mastodon (светла)
|
mastodon-light: Mastodon (светла)
|
||||||
|
system: Аутоматски (коришћење системске теме)
|
||||||
time:
|
time:
|
||||||
formats:
|
formats:
|
||||||
default: "%d %b %Y, %H:%M"
|
default: "%d %b %Y, %H:%M"
|
||||||
|
|
|
@ -148,7 +148,7 @@ Rails.application.routes.draw do
|
||||||
resource :inbox, only: [:create], module: :activitypub
|
resource :inbox, only: [:create], module: :activitypub
|
||||||
resources :contexts, only: [:show], module: :activitypub
|
resources :contexts, only: [:show], module: :activitypub
|
||||||
|
|
||||||
get '/:encoded_at(*path)', to: redirect("/@%{path}"), constraints: { encoded_at: /%40/ }
|
get '/:encoded_at(*path)', to: redirect('/@%{path}'), constraints: { encoded_at: /%40/ }
|
||||||
|
|
||||||
constraints(username: %r{[^@/.]+}) do
|
constraints(username: %r{[^@/.]+}) do
|
||||||
with_options to: 'accounts#show' do
|
with_options to: 'accounts#show' do
|
||||||
|
|
|
@ -254,7 +254,7 @@ module Mastodon::CLI
|
||||||
|
|
||||||
say 'Deduplicating accounts… for local accounts, you will be asked to chose which account to keep unchanged.'
|
say 'Deduplicating accounts… for local accounts, you will be asked to chose which account to keep unchanged.'
|
||||||
|
|
||||||
find_duplicate_accounts.each do |row|
|
duplicate_record_ids(:accounts, "lower(username), COALESCE(lower(domain), '')").each do |row|
|
||||||
accounts = Account.where(id: row['ids'].split(','))
|
accounts = Account.where(id: row['ids'].split(','))
|
||||||
|
|
||||||
if accounts.first.local?
|
if accounts.first.local?
|
||||||
|
@ -306,7 +306,7 @@ module Mastodon::CLI
|
||||||
end
|
end
|
||||||
|
|
||||||
def deduplicate_users_process_email
|
def deduplicate_users_process_email
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users GROUP BY email HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:users, 'email').each do |row|
|
||||||
users = User.where(id: row['ids'].split(',')).order(updated_at: :desc).includes(:account).to_a
|
users = User.where(id: row['ids'].split(',')).order(updated_at: :desc).includes(:account).to_a
|
||||||
ref_user = users.shift
|
ref_user = users.shift
|
||||||
say "Multiple users registered with e-mail address #{ref_user.email}.", :yellow
|
say "Multiple users registered with e-mail address #{ref_user.email}.", :yellow
|
||||||
|
@ -320,7 +320,7 @@ module Mastodon::CLI
|
||||||
end
|
end
|
||||||
|
|
||||||
def deduplicate_users_process_confirmation_token
|
def deduplicate_users_process_confirmation_token
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users WHERE confirmation_token IS NOT NULL GROUP BY confirmation_token HAVING count(*) > 1").each do |row|
|
duplicate_record_ids_without_nulls(:users, 'confirmation_token').each do |row|
|
||||||
users = User.where(id: row['ids'].split(',')).order(created_at: :desc).includes(:account).to_a.drop(1)
|
users = User.where(id: row['ids'].split(',')).order(created_at: :desc).includes(:account).to_a.drop(1)
|
||||||
say "Unsetting confirmation token for those accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
|
say "Unsetting confirmation token for those accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
|
||||||
|
|
||||||
|
@ -332,7 +332,7 @@ module Mastodon::CLI
|
||||||
|
|
||||||
def deduplicate_users_process_remember_token
|
def deduplicate_users_process_remember_token
|
||||||
if migrator_version < 2022_01_18_183010
|
if migrator_version < 2022_01_18_183010
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users WHERE remember_token IS NOT NULL GROUP BY remember_token HAVING count(*) > 1").each do |row|
|
duplicate_record_ids_without_nulls(:users, 'remember_token').each do |row|
|
||||||
users = User.where(id: row['ids'].split(',')).order(updated_at: :desc).to_a.drop(1)
|
users = User.where(id: row['ids'].split(',')).order(updated_at: :desc).to_a.drop(1)
|
||||||
say "Unsetting remember token for those accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
|
say "Unsetting remember token for those accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
|
||||||
|
|
||||||
|
@ -344,7 +344,7 @@ module Mastodon::CLI
|
||||||
end
|
end
|
||||||
|
|
||||||
def deduplicate_users_process_password_token
|
def deduplicate_users_process_password_token
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users WHERE reset_password_token IS NOT NULL GROUP BY reset_password_token HAVING count(*) > 1").each do |row|
|
duplicate_record_ids_without_nulls(:users, 'reset_password_token').each do |row|
|
||||||
users = User.where(id: row['ids'].split(',')).order(updated_at: :desc).includes(:account).to_a.drop(1)
|
users = User.where(id: row['ids'].split(',')).order(updated_at: :desc).includes(:account).to_a.drop(1)
|
||||||
say "Unsetting password reset token for those accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
|
say "Unsetting password reset token for those accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
|
||||||
|
|
||||||
|
@ -358,7 +358,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:account_domain_blocks, 'index_account_domain_blocks_on_account_id_and_domain')
|
remove_index_if_exists!(:account_domain_blocks, 'index_account_domain_blocks_on_account_id_and_domain')
|
||||||
|
|
||||||
say 'Removing duplicate account domain blocks…'
|
say 'Removing duplicate account domain blocks…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM account_domain_blocks GROUP BY account_id, domain HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:account_domain_blocks, 'account_id, domain').each do |row|
|
||||||
AccountDomainBlock.where(id: row['ids'].split(',').drop(1)).delete_all
|
AccountDomainBlock.where(id: row['ids'].split(',').drop(1)).delete_all
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -372,7 +372,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:account_identity_proofs, 'index_account_proofs_on_account_and_provider_and_username')
|
remove_index_if_exists!(:account_identity_proofs, 'index_account_proofs_on_account_and_provider_and_username')
|
||||||
|
|
||||||
say 'Removing duplicate account identity proofs…'
|
say 'Removing duplicate account identity proofs…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM account_identity_proofs GROUP BY account_id, provider, provider_username HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:account_identity_proofs, 'account_id, provider, provider_username').each do |row|
|
||||||
AccountIdentityProof.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
AccountIdentityProof.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -386,7 +386,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:announcement_reactions, 'index_announcement_reactions_on_account_id_and_announcement_id')
|
remove_index_if_exists!(:announcement_reactions, 'index_announcement_reactions_on_account_id_and_announcement_id')
|
||||||
|
|
||||||
say 'Removing duplicate announcement reactions…'
|
say 'Removing duplicate announcement reactions…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM announcement_reactions GROUP BY account_id, announcement_id, name HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:announcement_reactions, 'account_id, announcement_id, name').each do |row|
|
||||||
AnnouncementReaction.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
AnnouncementReaction.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -398,7 +398,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:conversations, 'index_conversations_on_uri')
|
remove_index_if_exists!(:conversations, 'index_conversations_on_uri')
|
||||||
|
|
||||||
say 'Deduplicating conversations…'
|
say 'Deduplicating conversations…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM conversations WHERE uri IS NOT NULL GROUP BY uri HAVING count(*) > 1").each do |row|
|
duplicate_record_ids_without_nulls(:conversations, 'uri').each do |row|
|
||||||
conversations = Conversation.where(id: row['ids'].split(',')).order(id: :desc).to_a
|
conversations = Conversation.where(id: row['ids'].split(',')).order(id: :desc).to_a
|
||||||
|
|
||||||
ref_conversation = conversations.shift
|
ref_conversation = conversations.shift
|
||||||
|
@ -421,7 +421,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:custom_emojis, 'index_custom_emojis_on_shortcode_and_domain')
|
remove_index_if_exists!(:custom_emojis, 'index_custom_emojis_on_shortcode_and_domain')
|
||||||
|
|
||||||
say 'Deduplicating custom_emojis…'
|
say 'Deduplicating custom_emojis…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM custom_emojis GROUP BY shortcode, domain HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:custom_emojis, 'shortcode, domain').each do |row|
|
||||||
emojis = CustomEmoji.where(id: row['ids'].split(',')).order(id: :desc).to_a
|
emojis = CustomEmoji.where(id: row['ids'].split(',')).order(id: :desc).to_a
|
||||||
|
|
||||||
ref_emoji = emojis.shift
|
ref_emoji = emojis.shift
|
||||||
|
@ -440,7 +440,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:custom_emoji_categories, 'index_custom_emoji_categories_on_name')
|
remove_index_if_exists!(:custom_emoji_categories, 'index_custom_emoji_categories_on_name')
|
||||||
|
|
||||||
say 'Deduplicating custom_emoji_categories…'
|
say 'Deduplicating custom_emoji_categories…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM custom_emoji_categories GROUP BY name HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:custom_emoji_categories, 'name').each do |row|
|
||||||
categories = CustomEmojiCategory.where(id: row['ids'].split(',')).order(id: :desc).to_a
|
categories = CustomEmojiCategory.where(id: row['ids'].split(',')).order(id: :desc).to_a
|
||||||
|
|
||||||
ref_category = categories.shift
|
ref_category = categories.shift
|
||||||
|
@ -459,7 +459,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:domain_allows, 'index_domain_allows_on_domain')
|
remove_index_if_exists!(:domain_allows, 'index_domain_allows_on_domain')
|
||||||
|
|
||||||
say 'Deduplicating domain_allows…'
|
say 'Deduplicating domain_allows…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM domain_allows GROUP BY domain HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:domain_allows, 'domain').each do |row|
|
||||||
DomainAllow.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
DomainAllow.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -471,7 +471,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:domain_blocks, 'index_domain_blocks_on_domain')
|
remove_index_if_exists!(:domain_blocks, 'index_domain_blocks_on_domain')
|
||||||
|
|
||||||
say 'Deduplicating domain_blocks…'
|
say 'Deduplicating domain_blocks…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM domain_blocks GROUP BY domain HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:domain_blocks, 'domain').each do |row|
|
||||||
domain_blocks = DomainBlock.where(id: row['ids'].split(',')).by_severity.reverse.to_a
|
domain_blocks = DomainBlock.where(id: row['ids'].split(',')).by_severity.reverse.to_a
|
||||||
|
|
||||||
reject_media = domain_blocks.any?(&:reject_media?)
|
reject_media = domain_blocks.any?(&:reject_media?)
|
||||||
|
@ -497,7 +497,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:unavailable_domains, 'index_unavailable_domains_on_domain')
|
remove_index_if_exists!(:unavailable_domains, 'index_unavailable_domains_on_domain')
|
||||||
|
|
||||||
say 'Deduplicating unavailable_domains…'
|
say 'Deduplicating unavailable_domains…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM unavailable_domains GROUP BY domain HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:unavailable_domains, 'domain').each do |row|
|
||||||
UnavailableDomain.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
UnavailableDomain.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -509,7 +509,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:email_domain_blocks, 'index_email_domain_blocks_on_domain')
|
remove_index_if_exists!(:email_domain_blocks, 'index_email_domain_blocks_on_domain')
|
||||||
|
|
||||||
say 'Deduplicating email_domain_blocks…'
|
say 'Deduplicating email_domain_blocks…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM email_domain_blocks GROUP BY domain HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:email_domain_blocks, 'domain').each do |row|
|
||||||
domain_blocks = EmailDomainBlock.where(id: row['ids'].split(',')).order(EmailDomainBlock.arel_table[:parent_id].asc.nulls_first).to_a
|
domain_blocks = EmailDomainBlock.where(id: row['ids'].split(',')).order(EmailDomainBlock.arel_table[:parent_id].asc.nulls_first).to_a
|
||||||
domain_blocks.drop(1).each(&:destroy)
|
domain_blocks.drop(1).each(&:destroy)
|
||||||
end
|
end
|
||||||
|
@ -522,7 +522,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:media_attachments, 'index_media_attachments_on_shortcode')
|
remove_index_if_exists!(:media_attachments, 'index_media_attachments_on_shortcode')
|
||||||
|
|
||||||
say 'Deduplicating media_attachments…'
|
say 'Deduplicating media_attachments…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM media_attachments WHERE shortcode IS NOT NULL GROUP BY shortcode HAVING count(*) > 1").each do |row|
|
duplicate_record_ids_without_nulls(:media_attachments, 'shortcode').each do |row|
|
||||||
MediaAttachment.where(id: row['ids'].split(',').drop(1)).update_all(shortcode: nil)
|
MediaAttachment.where(id: row['ids'].split(',').drop(1)).update_all(shortcode: nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -538,7 +538,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:preview_cards, 'index_preview_cards_on_url')
|
remove_index_if_exists!(:preview_cards, 'index_preview_cards_on_url')
|
||||||
|
|
||||||
say 'Deduplicating preview_cards…'
|
say 'Deduplicating preview_cards…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM preview_cards GROUP BY url HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:preview_cards, 'url').each do |row|
|
||||||
PreviewCard.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
PreviewCard.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -550,7 +550,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:statuses, 'index_statuses_on_uri')
|
remove_index_if_exists!(:statuses, 'index_statuses_on_uri')
|
||||||
|
|
||||||
say 'Deduplicating statuses…'
|
say 'Deduplicating statuses…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM statuses WHERE uri IS NOT NULL GROUP BY uri HAVING count(*) > 1").each do |row|
|
duplicate_record_ids_without_nulls(:statuses, 'uri').each do |row|
|
||||||
statuses = Status.where(id: row['ids'].split(',')).order(id: :asc).to_a
|
statuses = Status.where(id: row['ids'].split(',')).order(id: :asc).to_a
|
||||||
ref_status = statuses.shift
|
ref_status = statuses.shift
|
||||||
statuses.each do |status|
|
statuses.each do |status|
|
||||||
|
@ -572,7 +572,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:tags, 'index_tags_on_name_lower_btree')
|
remove_index_if_exists!(:tags, 'index_tags_on_name_lower_btree')
|
||||||
|
|
||||||
say 'Deduplicating tags…'
|
say 'Deduplicating tags…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM tags GROUP BY lower((name)::text) HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:tags, 'lower((name)::text)').each do |row|
|
||||||
tags = Tag.where(id: row['ids'].split(',')).order(Arel.sql('(usable::int + trendable::int + listable::int) desc')).to_a
|
tags = Tag.where(id: row['ids'].split(',')).order(Arel.sql('(usable::int + trendable::int + listable::int) desc')).to_a
|
||||||
ref_tag = tags.shift
|
ref_tag = tags.shift
|
||||||
tags.each do |tag|
|
tags.each do |tag|
|
||||||
|
@ -595,7 +595,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:webauthn_credentials, 'index_webauthn_credentials_on_external_id')
|
remove_index_if_exists!(:webauthn_credentials, 'index_webauthn_credentials_on_external_id')
|
||||||
|
|
||||||
say 'Deduplicating webauthn_credentials…'
|
say 'Deduplicating webauthn_credentials…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM webauthn_credentials GROUP BY external_id HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:webauthn_credentials, 'external_id').each do |row|
|
||||||
WebauthnCredential.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
WebauthnCredential.where(id: row['ids'].split(',')).order(id: :desc).to_a.drop(1).each(&:destroy)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -609,7 +609,7 @@ module Mastodon::CLI
|
||||||
remove_index_if_exists!(:webhooks, 'index_webhooks_on_url')
|
remove_index_if_exists!(:webhooks, 'index_webhooks_on_url')
|
||||||
|
|
||||||
say 'Deduplicating webhooks…'
|
say 'Deduplicating webhooks…'
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM webhooks GROUP BY url HAVING count(*) > 1").each do |row|
|
duplicate_record_ids(:webhooks, 'url').each do |row|
|
||||||
Webhook.where(id: row['ids'].split(',')).order(id: :desc).drop(1).each(&:destroy)
|
Webhook.where(id: row['ids'].split(',')).order(id: :desc).drop(1).each(&:destroy)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -746,8 +746,23 @@ module Mastodon::CLI
|
||||||
ActiveRecord::Migrator.current_version
|
ActiveRecord::Migrator.current_version
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_duplicate_accounts
|
def duplicate_record_ids_without_nulls(table, group_by)
|
||||||
database_connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM accounts GROUP BY lower(username), COALESCE(lower(domain), '') HAVING count(*) > 1")
|
database_connection.select_all(<<~SQL.squish)
|
||||||
|
SELECT string_agg(id::text, ',') AS ids
|
||||||
|
FROM #{table}
|
||||||
|
WHERE #{group_by} IS NOT NULL
|
||||||
|
GROUP BY #{group_by}
|
||||||
|
HAVING COUNT(*) > 1
|
||||||
|
SQL
|
||||||
|
end
|
||||||
|
|
||||||
|
def duplicate_record_ids(table, group_by)
|
||||||
|
database_connection.select_all(<<~SQL.squish)
|
||||||
|
SELECT string_agg(id::text, ',') AS ids
|
||||||
|
FROM #{table}
|
||||||
|
GROUP BY #{group_by}
|
||||||
|
HAVING COUNT(*) > 1
|
||||||
|
SQL
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_index_if_exists!(table, name)
|
def remove_index_if_exists!(table, name)
|
||||||
|
|
|
@ -36,6 +36,15 @@ namespace :mastodon do
|
||||||
env[key] = SecureRandom.hex(64)
|
env[key] = SecureRandom.hex(64)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Required by ActiveRecord encryption feature
|
||||||
|
%w(
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY
|
||||||
|
).each do |key|
|
||||||
|
env[key] = SecureRandom.alphanumeric(32)
|
||||||
|
end
|
||||||
|
|
||||||
vapid_key = Webpush.generate_key
|
vapid_key = Webpush.generate_key
|
||||||
|
|
||||||
env['VAPID_PRIVATE_KEY'] = vapid_key.private_key
|
env['VAPID_PRIVATE_KEY'] = vapid_key.private_key
|
||||||
|
|
|
@ -44,5 +44,18 @@ describe Account::Counters do
|
||||||
|
|
||||||
expect(account.statuses_count).to eq 5
|
expect(account.statuses_count).to eq 5
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'preserves last_status_at when decrementing statuses_count' do
|
||||||
|
account_stat = Fabricate(
|
||||||
|
:account_stat,
|
||||||
|
account: account,
|
||||||
|
last_status_at: 3.days.ago,
|
||||||
|
statuses_count: 10
|
||||||
|
)
|
||||||
|
|
||||||
|
expect { account.decrement_count!(:statuses_count) }
|
||||||
|
.to change(account_stat.reload, :statuses_count).by(-1)
|
||||||
|
.and not_change(account_stat.reload, :last_status_at)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -281,7 +281,7 @@ RSpec.describe Form::Import do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'defaults to unconfirmed true' do
|
it 'defaults to unconfirmed true' do
|
||||||
expect(bulk_import.unconfirmed?).to be true
|
expect(bulk_import.state_unconfirmed?).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -142,6 +142,25 @@ RSpec.describe Tag do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '.not_featured_by' do
|
||||||
|
let!(:account) { Fabricate(:account) }
|
||||||
|
let!(:fun) { Fabricate(:tag, name: 'fun') }
|
||||||
|
let!(:games) { Fabricate(:tag, name: 'games') }
|
||||||
|
|
||||||
|
before do
|
||||||
|
Fabricate :featured_tag, account: account, name: 'games'
|
||||||
|
Fabricate :featured_tag, name: 'fun'
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns tags not featured by the account' do
|
||||||
|
results = described_class.not_featured_by(account)
|
||||||
|
|
||||||
|
expect(results)
|
||||||
|
.to include(fun)
|
||||||
|
.and not_include(games)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '.matches_name' do
|
describe '.matches_name' do
|
||||||
it 'returns tags for multibyte case-insensitive names' do
|
it 'returns tags for multibyte case-insensitive names' do
|
||||||
upcase_string = 'abcABCabcABCやゆよ'
|
upcase_string = 'abcABCabcABCやゆよ'
|
||||||
|
|
|
@ -95,23 +95,27 @@ RSpec.describe BulkImportRowService do
|
||||||
context 'when importing a list row' do
|
context 'when importing a list row' do
|
||||||
let(:import_type) { 'lists' }
|
let(:import_type) { 'lists' }
|
||||||
let(:target_account) { Fabricate(:account) }
|
let(:target_account) { Fabricate(:account) }
|
||||||
|
let(:list_name) { 'my list' }
|
||||||
let(:data) do
|
let(:data) do
|
||||||
{ 'acct' => target_account.acct, 'list_name' => 'my list' }
|
{ 'acct' => target_account.acct, 'list_name' => list_name }
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples 'common behavior' do
|
shared_examples 'common behavior' do
|
||||||
|
shared_examples 'row import success and list addition' do
|
||||||
|
it 'returns true and adds the target account to the list' do
|
||||||
|
result = nil
|
||||||
|
expect { result = subject.call(import_row) }
|
||||||
|
.to change { result }.from(nil).to(true)
|
||||||
|
.and add_target_account_to_list
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'when the target account is already followed' do
|
context 'when the target account is already followed' do
|
||||||
before do
|
before do
|
||||||
account.follow!(target_account)
|
account.follow!(target_account)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns true' do
|
include_examples 'row import success and list addition'
|
||||||
expect(subject.call(import_row)).to be true
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'adds the target account to the list' do
|
|
||||||
expect { subject.call(import_row) }.to add_target_account_to_list
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the user already requested to follow the target account' do
|
context 'when the user already requested to follow the target account' do
|
||||||
|
@ -119,35 +123,17 @@ RSpec.describe BulkImportRowService do
|
||||||
account.request_follow!(target_account)
|
account.request_follow!(target_account)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns true' do
|
include_examples 'row import success and list addition'
|
||||||
expect(subject.call(import_row)).to be true
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'adds the target account to the list' do
|
|
||||||
expect { subject.call(import_row) }.to add_target_account_to_list
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the target account is neither followed nor requested' do
|
context 'when the target account is neither followed nor requested' do
|
||||||
it 'returns true' do
|
include_examples 'row import success and list addition'
|
||||||
expect(subject.call(import_row)).to be true
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'adds the target account to the list' do
|
|
||||||
expect { subject.call(import_row) }.to add_target_account_to_list
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the target account is the user themself' do
|
context 'when the target account is the user themself' do
|
||||||
let(:target_account) { account }
|
let(:target_account) { account }
|
||||||
|
|
||||||
it 'returns true' do
|
include_examples 'row import success and list addition'
|
||||||
expect(subject.call(import_row)).to be true
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'adds the target account to the list' do
|
|
||||||
expect { subject.call(import_row) }.to add_target_account_to_list
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_target_account_to_list
|
def add_target_account_to_list
|
||||||
|
@ -161,7 +147,7 @@ RSpec.describe BulkImportRowService do
|
||||||
.joins(:list)
|
.joins(:list)
|
||||||
.exists?(
|
.exists?(
|
||||||
account_id: target_account.id,
|
account_id: target_account.id,
|
||||||
list: { title: 'my list' }
|
list: { title: list_name }
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -172,7 +158,7 @@ RSpec.describe BulkImportRowService do
|
||||||
|
|
||||||
context 'when the list exists' do
|
context 'when the list exists' do
|
||||||
before do
|
before do
|
||||||
Fabricate(:list, account: account, title: 'my list')
|
Fabricate(:list, account: account, title: list_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
include_examples 'common behavior'
|
include_examples 'common behavior'
|
||||||
|
@ -180,7 +166,7 @@ RSpec.describe BulkImportRowService do
|
||||||
it 'does not create a new list' do
|
it 'does not create a new list' do
|
||||||
account.follow!(target_account)
|
account.follow!(target_account)
|
||||||
|
|
||||||
expect { subject.call(import_row) }.to_not(change { List.where(title: 'my list').count })
|
expect { subject.call(import_row) }.to_not(change { List.where(title: list_name).count })
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -291,7 +291,7 @@ RSpec.describe BulkImportService do
|
||||||
|
|
||||||
it 'marks the import as finished' do
|
it 'marks the import as finished' do
|
||||||
subject.call(import)
|
subject.call(import)
|
||||||
expect(import.reload.finished?).to be true
|
expect(import.reload.state_finished?).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -319,7 +319,7 @@ RSpec.describe BulkImportService do
|
||||||
|
|
||||||
it 'marks the import as finished' do
|
it 'marks the import as finished' do
|
||||||
subject.call(import)
|
subject.call(import)
|
||||||
expect(import.reload.finished?).to be true
|
expect(import.reload.state_finished?).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ RSpec.describe CreateFeaturedTagService do
|
||||||
expect { subject.call(account, tag) }
|
expect { subject.call(account, tag) }
|
||||||
.to change(FeaturedTag, :count).by(1)
|
.to change(FeaturedTag, :count).by(1)
|
||||||
expect(ActivityPub::AccountRawDistributionWorker)
|
expect(ActivityPub::AccountRawDistributionWorker)
|
||||||
.to_not have_enqueued_sidekiq_job
|
.to_not have_enqueued_sidekiq_job(any_args)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -29,7 +29,7 @@ RSpec.describe RemoveFeaturedTagService do
|
||||||
expect { featured_tag.reload }
|
expect { featured_tag.reload }
|
||||||
.to raise_error(ActiveRecord::RecordNotFound)
|
.to raise_error(ActiveRecord::RecordNotFound)
|
||||||
expect(ActivityPub::AccountRawDistributionWorker)
|
expect(ActivityPub::AccountRawDistributionWorker)
|
||||||
.to_not have_enqueued_sidekiq_job
|
.to_not have_enqueued_sidekiq_job(any_args)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -24,7 +24,7 @@ RSpec.describe UnmuteService do
|
||||||
it 'removes the account mute and does not create a merge' do
|
it 'removes the account mute and does not create a merge' do
|
||||||
expect { subject.call(account, target_account) }
|
expect { subject.call(account, target_account) }
|
||||||
.to remove_account_mute
|
.to remove_account_mute
|
||||||
expect(MergeWorker).to_not have_enqueued_sidekiq_job
|
expect(MergeWorker).to_not have_enqueued_sidekiq_job(any_args)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ RSpec.describe UnmuteService do
|
||||||
it 'does nothing and returns' do
|
it 'does nothing and returns' do
|
||||||
expect { subject.call(account, target_account) }
|
expect { subject.call(account, target_account) }
|
||||||
.to_not(change { account.reload.muting?(target_account) })
|
.to_not(change { account.reload.muting?(target_account) })
|
||||||
expect(MergeWorker).to_not have_enqueued_sidekiq_job
|
expect(MergeWorker).to_not have_enqueued_sidekiq_job(any_args)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
28
yarn.lock
28
yarn.lock
|
@ -6331,9 +6331,9 @@ __metadata:
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"core-js@npm:^3.30.2":
|
"core-js@npm:^3.30.2":
|
||||||
version: 3.36.1
|
version: 3.37.0
|
||||||
resolution: "core-js@npm:3.36.1"
|
resolution: "core-js@npm:3.37.0"
|
||||||
checksum: 10c0/4f0ad2464535d809ba659226feca15bff14b9b5452518bddff8d81b9c94b0227b3027d9838f22f1dce664958acb4107b935cc0037695ae545edc2a303bca98bf
|
checksum: 10c0/7e00331f346318ca3f595c08ce9e74ddae744715aef137486c1399163afd79792fb94c3161280863adfdc3e30f8026912d56bd3036f93cacfc689d33e185f2ee
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
@ -6500,14 +6500,14 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"css-blank-pseudo@npm:^6.0.1":
|
"css-blank-pseudo@npm:^6.0.2":
|
||||||
version: 6.0.1
|
version: 6.0.2
|
||||||
resolution: "css-blank-pseudo@npm:6.0.1"
|
resolution: "css-blank-pseudo@npm:6.0.2"
|
||||||
dependencies:
|
dependencies:
|
||||||
postcss-selector-parser: "npm:^6.0.13"
|
postcss-selector-parser: "npm:^6.0.13"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
postcss: ^8.4
|
postcss: ^8.4
|
||||||
checksum: 10c0/04f2dc1c39a429cb4958b60a9d00b03e29a78e3e55fe111b3a0660b7c6c478455d5907eda7c7a495cf72dbe83ae3c80b409e0468ca1ba5ccef992e69a8f49df8
|
checksum: 10c0/609303551c2a518ca23ed12fed43945ca4f7af04140da68a5536f5dc9d42f33412c13ac3fe5c616d7401a9e13a23d80b4cfa87149a45f94b244d8067bb11f3dd
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
@ -9617,8 +9617,8 @@ __metadata:
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"ioredis@npm:^5.3.2":
|
"ioredis@npm:^5.3.2":
|
||||||
version: 5.3.2
|
version: 5.4.1
|
||||||
resolution: "ioredis@npm:5.3.2"
|
resolution: "ioredis@npm:5.4.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ioredis/commands": "npm:^1.1.1"
|
"@ioredis/commands": "npm:^1.1.1"
|
||||||
cluster-key-slot: "npm:^1.1.0"
|
cluster-key-slot: "npm:^1.1.0"
|
||||||
|
@ -9629,7 +9629,7 @@ __metadata:
|
||||||
redis-errors: "npm:^1.2.0"
|
redis-errors: "npm:^1.2.0"
|
||||||
redis-parser: "npm:^3.0.0"
|
redis-parser: "npm:^3.0.0"
|
||||||
standard-as-callback: "npm:^2.1.0"
|
standard-as-callback: "npm:^2.1.0"
|
||||||
checksum: 10c0/0dd2b5b8004e891f5b62edf18ac223194f1f5204698ec827c903e789ea05b0b36f73395491749ec63c66470485bdfb228ccdf1714fbf631a0f78f33211f2c883
|
checksum: 10c0/5d28b7c89a3cab5b76d75923d7d4ce79172b3a1ca9be690133f6e8e393a7a4b4ffd55513e618bbb5504fed80d9e1395c9d9531a7c5c5c84aa4c4e765cca75456
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
@ -13648,8 +13648,8 @@ __metadata:
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"postcss-preset-env@npm:^9.5.2":
|
"postcss-preset-env@npm:^9.5.2":
|
||||||
version: 9.5.5
|
version: 9.5.6
|
||||||
resolution: "postcss-preset-env@npm:9.5.5"
|
resolution: "postcss-preset-env@npm:9.5.6"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@csstools/postcss-cascade-layers": "npm:^4.0.4"
|
"@csstools/postcss-cascade-layers": "npm:^4.0.4"
|
||||||
"@csstools/postcss-color-function": "npm:^3.0.13"
|
"@csstools/postcss-color-function": "npm:^3.0.13"
|
||||||
|
@ -13682,7 +13682,7 @@ __metadata:
|
||||||
"@csstools/postcss-unset-value": "npm:^3.0.1"
|
"@csstools/postcss-unset-value": "npm:^3.0.1"
|
||||||
autoprefixer: "npm:^10.4.19"
|
autoprefixer: "npm:^10.4.19"
|
||||||
browserslist: "npm:^4.22.3"
|
browserslist: "npm:^4.22.3"
|
||||||
css-blank-pseudo: "npm:^6.0.1"
|
css-blank-pseudo: "npm:^6.0.2"
|
||||||
css-has-pseudo: "npm:^6.0.3"
|
css-has-pseudo: "npm:^6.0.3"
|
||||||
css-prefers-color-scheme: "npm:^9.0.1"
|
css-prefers-color-scheme: "npm:^9.0.1"
|
||||||
cssdb: "npm:^8.0.0"
|
cssdb: "npm:^8.0.0"
|
||||||
|
@ -13713,7 +13713,7 @@ __metadata:
|
||||||
postcss-selector-not: "npm:^7.0.2"
|
postcss-selector-not: "npm:^7.0.2"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
postcss: ^8.4
|
postcss: ^8.4
|
||||||
checksum: 10c0/afc31fb75bc5e8e223d38fd34b81da08ee340818f5e392df1781728f2ff2a9dbc75e458673ce9f52deafefa90bbc99e0bd1453271498f5e02746c785180bad07
|
checksum: 10c0/21738ecac400cca9a96841959308538516ed00ca80d4c53beb20e080c7d963120fa77b7435b02e1beefc20043abce666419b81eccf6dacdc4298f540778c111d
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue